aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-08-01 15:05:38 -0400
committerbob <bcz@cs.brown.edu>2019-08-01 15:05:38 -0400
commitff5fbd1206a065eabab917def7d83337a0442cab (patch)
tree07c2f86558f9255b9e5a69e032287b8d0539dbd5
parent49faa4e76f91fed04bb1923d81dd23d57a157a63 (diff)
parent6f3d4a7015e15e0523fc194f7f911f6d45259165 (diff)
Merge branch 'master' into grouping
-rw-r--r--.gitignore3
-rw-r--r--.vscode/launch.json4
-rw-r--r--dash.bat2
-rw-r--r--log.err10
-rw-r--r--log.txt5
-rw-r--r--output.log37908
-rw-r--r--package.json16
-rw-r--r--report.20190510.131414.316.001.json592
-rw-r--r--savedLog.txt13
-rw-r--r--solr-8.1.1/CHANGES.txt18889
-rw-r--r--solr-8.1.1/LICENSE.txt226
-rw-r--r--solr-8.1.1/LUCENE_CHANGES.txt16240
-rw-r--r--solr-8.1.1/NOTICE.txt593
-rw-r--r--solr-8.1.1/README.txt189
-rw-r--r--solr-8.1.1/bin/init.d/solr78
-rw-r--r--solr-8.1.1/bin/install_solr_service.sh370
-rw-r--r--solr-8.1.1/bin/oom_solr.sh30
-rw-r--r--solr-8.1.1/bin/post239
-rw-r--r--solr-8.1.1/bin/solr2175
-rw-r--r--solr-8.1.1/bin/solr-8983.port1
-rw-r--r--solr-8.1.1/bin/solr.cmd2026
-rw-r--r--solr-8.1.1/bin/solr.in.cmd170
-rw-r--r--solr-8.1.1/bin/solr.in.sh198
-rw-r--r--solr-8.1.1/contrib/analysis-extras/README.txt20
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lib/icu4j-62.1.jarbin0 -> 12370975 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lib/morfologik-fsa-2.1.5.jarbin0 -> 20140 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lib/morfologik-polish-2.1.5.jarbin0 -> 1886867 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lib/morfologik-stemming-2.1.5.jarbin0 -> 53644 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lib/opennlp-tools-1.9.1.jarbin0 -> 1248314 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-icu-8.1.1.jarbin0 -> 82810 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-morfologik-8.1.1.jarbin0 -> 28576 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-opennlp-8.1.1.jarbin0 -> 38267 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.1.1.jarbin0 -> 3597829 bytes
-rw-r--r--solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-stempel-8.1.1.jarbin0 -> 518387 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/README.txt4
-rw-r--r--solr-8.1.1/contrib/clustering/lib/attributes-binder-1.3.3.jarbin0 -> 83452 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/lib/carrot2-guava-18.0.jarbin0 -> 2329412 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/lib/carrot2-mini-3.16.0.jarbin0 -> 1003752 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/lib/jackson-annotations-2.9.8.jarbin0 -> 66894 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/lib/jackson-databind-2.9.8.jarbin0 -> 1347236 bytes
-rw-r--r--solr-8.1.1/contrib/clustering/lib/simple-xml-2.7.1.jarbin0 -> 413197 bytes
-rw-r--r--solr-8.1.1/contrib/dataimporthandler-extras/lib/activation-1.1.1.jarbin0 -> 69409 bytes
-rw-r--r--solr-8.1.1/contrib/dataimporthandler-extras/lib/gimap-1.5.1.jarbin0 -> 15075 bytes
-rw-r--r--solr-8.1.1/contrib/dataimporthandler-extras/lib/javax.mail-1.5.1.jarbin0 -> 545362 bytes
-rw-r--r--solr-8.1.1/contrib/dataimporthandler/README.txt16
-rw-r--r--solr-8.1.1/contrib/extraction/README.txt16
-rw-r--r--solr-8.1.1/contrib/extraction/lib/apache-mime4j-core-0.8.2.jarbin0 -> 103707 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/apache-mime4j-dom-0.8.2.jarbin0 -> 330543 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/aspectjrt-1.8.0.jarbin0 -> 117099 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/bcmail-jdk15on-1.60.jarbin0 -> 108233 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/bcpkix-jdk15on-1.60.jarbin0 -> 796532 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/bcprov-jdk15on-1.60.jarbin0 -> 4189874 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/boilerpipe-1.1.0.jarbin0 -> 92027 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/commons-collections4-4.2.jarbin0 -> 752798 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/commons-compress-1.18.jarbin0 -> 591748 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/curvesapi-1.04.jarbin0 -> 98365 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/dec-0.1.2.jarbin0 -> 98115 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/fontbox-2.0.12.jarbin0 -> 1557183 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/icu4j-62.1.jarbin0 -> 12370975 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/isoparser-1.1.22.jarbin0 -> 1060923 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/jackcess-2.1.12.jarbin0 -> 889128 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/jackcess-encrypt-2.1.4.jarbin0 -> 86730 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/java-libpst-0.8.1.jarbin0 -> 85452 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/jdom2-2.0.6.jarbin0 -> 304924 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/jempbox-1.8.16.jarbin0 -> 51743 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/jmatio-1.5.jarbin0 -> 75551 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/juniversalchardet-1.0.3.jarbin0 -> 220813 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/metadata-extractor-2.11.0.jarbin0 -> 672656 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/parso-2.0.9.jarbin0 -> 55067 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/pdfbox-2.0.12.jarbin0 -> 2541248 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/pdfbox-tools-2.0.12.jarbin0 -> 72937 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/poi-4.0.0.jarbin0 -> 2715721 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/poi-ooxml-4.0.0.jarbin0 -> 1758061 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/poi-ooxml-schemas-4.0.0.jarbin0 -> 6477408 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/poi-scratchpad-4.0.0.jarbin0 -> 1382948 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/rome-1.5.1.jarbin0 -> 242809 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/rome-utils-1.5.1.jarbin0 -> 6812 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/tagsoup-1.2.1.jarbin0 -> 90722 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/tika-core-1.19.1.jarbin0 -> 694500 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/tika-java7-1.19.1.jarbin0 -> 13990 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/tika-parsers-1.19.1.jarbin0 -> 1157388 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/tika-xmp-1.19.1.jarbin0 -> 34489 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/vorbis-java-core-0.8.jarbin0 -> 121084 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/vorbis-java-tika-0.8.jarbin0 -> 24941 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/xercesImpl-2.9.1.jarbin0 -> 1229125 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/xmlbeans-3.0.1.jarbin0 -> 2582300 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/xmpcore-5.1.3.jarbin0 -> 91822 bytes
-rw-r--r--solr-8.1.1/contrib/extraction/lib/xz-1.8.jarbin0 -> 108555 bytes
-rw-r--r--solr-8.1.1/contrib/langid/README.txt22
-rw-r--r--solr-8.1.1/contrib/langid/lib/jsonic-1.2.7.jarbin0 -> 147477 bytes
-rw-r--r--solr-8.1.1/contrib/langid/lib/langdetect-1.1-20120112.jarbin0 -> 1236033 bytes
-rw-r--r--solr-8.1.1/contrib/langid/lib/opennlp-tools-1.9.1.jarbin0 -> 1248314 bytes
-rw-r--r--solr-8.1.1/contrib/ltr/README.txt23
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/README.txt21
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter126
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter.cmd104
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/conf/grafana-solr-dashboard.json4465
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/conf/solr-exporter-config.xml1806
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/argparse4j-0.8.1.jarbin0 -> 110140 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/jackson-annotations-2.9.8.jarbin0 -> 66894 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/jackson-core-2.9.8.jarbin0 -> 325619 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/jackson-databind-2.9.8.jarbin0 -> 1347236 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/jackson-jq-0.0.8.jarbin0 -> 254678 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/log4j-api-2.11.2.jarbin0 -> 266283 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/log4j-core-2.11.2.jarbin0 -> 1629585 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.11.2.jarbin0 -> 23239 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient-0.2.0.jarbin0 -> 57981 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_common-0.2.0.jarbin0 -> 5754 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_httpserver-0.2.0.jarbin0 -> 9515 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lib/slf4j-api-1.7.24.jarbin0 -> 41205 bytes
-rw-r--r--solr-8.1.1/contrib/prometheus-exporter/lucene-libs/lucene-analyzers-common-8.1.1.jarbin0 -> 1655240 bytes
-rw-r--r--solr-8.1.1/contrib/velocity/lib/commons-lang3-3.8.1.jarbin0 -> 501879 bytes
-rw-r--r--solr-8.1.1/contrib/velocity/lib/velocity-engine-core-2.0.jarbin0 -> 432111 bytes
-rw-r--r--solr-8.1.1/contrib/velocity/lib/velocity-tools-generic-3.0.jarbin0 -> 213692 bytes
-rw-r--r--solr-8.1.1/contrib/velocity/lib/velocity-tools-view-3.0.jarbin0 -> 118794 bytes
-rw-r--r--solr-8.1.1/contrib/velocity/lib/velocity-tools-view-jsp-3.0.jarbin0 -> 28701 bytes
-rw-r--r--solr-8.1.1/docs/images/solr.svg39
-rw-r--r--solr-8.1.1/docs/index.html20
-rw-r--r--solr-8.1.1/example/README.txt78
-rw-r--r--solr-8.1.1/example/example-DIH/README.txt49
-rw-r--r--solr-8.1.1/example/example-DIH/hsqldb/ex.script165
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/atom-data-config.xml35
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/managed-schema106
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/protwords.txt17
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/solrconfig.xml64
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/conf/url_types.txt1
-rw-r--r--solr-8.1.1/example/example-DIH/solr/atom/core.properties1
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/kmeans-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/lingo-attributes.xml24
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/stc-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/currency.xml67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/dataimport.properties3
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/db-data-config.xml29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/elevate.xml42
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ckb.txt136
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/managed-schema1143
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/mapping-FoldToASCII.txt3813
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/mapping-ISOLatin1Accent.txt246
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/protwords.txt21
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/solrconfig.xml1353
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/spellings.txt2
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/update-script.js53
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl132
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl66
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl337
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl70
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/core.properties1
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/lib/derby-10.9.1.0.jarbin0 -> 2703892 bytes
-rw-r--r--solr-8.1.1/example/example-DIH/solr/db/lib/hsqldb-2.4.0.jarbin0 -> 1543134 bytes
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/kmeans-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/lingo-attributes.xml24
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/stc-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/currency.xml67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/elevate.xml42
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ckb.txt136
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/mail-data-config.xml12
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/managed-schema1062
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-FoldToASCII.txt3813
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-ISOLatin1Accent.txt246
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/protwords.txt21
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/solrconfig.xml1356
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/spellings.txt2
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/update-script.js53
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example.xsl132
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_atom.xsl67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl66
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/luke.xsl337
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl70
-rw-r--r--solr-8.1.1/example/example-DIH/solr/mail/core.properties1
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr.xml2
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/kmeans-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/lingo-attributes.xml24
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/stc-attributes.xml19
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/currency.xml67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/dataimport.properties3
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/elevate.xml42
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ckb.txt136
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/managed-schema1143
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-FoldToASCII.txt3813
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-ISOLatin1Accent.txt246
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/protwords.txt21
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/solr-data-config.xml25
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/solrconfig.xml1351
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/spellings.txt2
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/update-script.js53
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example.xsl132
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_atom.xsl67
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl66
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/luke.xsl337
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl70
-rw-r--r--solr-8.1.1/example/example-DIH/solr/solr/core.properties1
-rw-r--r--solr-8.1.1/example/example-DIH/solr/tika/conf/managed-schema54
-rw-r--r--solr-8.1.1/example/example-DIH/solr/tika/conf/solrconfig.xml61
-rw-r--r--solr-8.1.1/example/example-DIH/solr/tika/conf/tika-data-config.xml26
-rw-r--r--solr-8.1.1/example/example-DIH/solr/tika/core.properties1
-rw-r--r--solr-8.1.1/example/exampledocs/books.csv11
-rw-r--r--solr-8.1.1/example/exampledocs/books.json51
-rw-r--r--solr-8.1.1/example/exampledocs/gb18030-example.xml32
-rw-r--r--solr-8.1.1/example/exampledocs/hd.xml56
-rw-r--r--solr-8.1.1/example/exampledocs/ipod_other.xml60
-rw-r--r--solr-8.1.1/example/exampledocs/ipod_video.xml40
-rw-r--r--solr-8.1.1/example/exampledocs/manufacturers.xml75
-rw-r--r--solr-8.1.1/example/exampledocs/mem.xml77
-rw-r--r--solr-8.1.1/example/exampledocs/money.xml65
-rw-r--r--solr-8.1.1/example/exampledocs/monitor.xml34
-rw-r--r--solr-8.1.1/example/exampledocs/monitor2.xml33
-rw-r--r--solr-8.1.1/example/exampledocs/more_books.jsonl3
-rw-r--r--solr-8.1.1/example/exampledocs/mp500.xml43
-rw-r--r--solr-8.1.1/example/exampledocs/post.jarbin0 -> 27249 bytes
-rw-r--r--solr-8.1.1/example/exampledocs/sample.html13
-rw-r--r--solr-8.1.1/example/exampledocs/sd500.xml38
-rw-r--r--solr-8.1.1/example/exampledocs/solr-word.pdfbin0 -> 21052 bytes
-rw-r--r--solr-8.1.1/example/exampledocs/solr.xml38
-rw-r--r--solr-8.1.1/example/exampledocs/test_utf8.sh93
-rw-r--r--solr-8.1.1/example/exampledocs/utf8-example.xml42
-rw-r--r--solr-8.1.1/example/exampledocs/vidcard.xml62
-rw-r--r--solr-8.1.1/example/files/README.txt152
-rw-r--r--solr-8.1.1/example/files/browse-resources/velocity/resources.properties82
-rw-r--r--solr-8.1.1/example/files/browse-resources/velocity/resources_de_DE.properties18
-rw-r--r--solr-8.1.1/example/files/browse-resources/velocity/resources_fr_FR.properties20
-rw-r--r--solr-8.1.1/example/files/conf/currency.xml67
-rw-r--r--solr-8.1.1/example/files/conf/elevate.xml42
-rw-r--r--solr-8.1.1/example/files/conf/email_url_types.txt2
-rw-r--r--solr-8.1.1/example/files/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/example/files/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/example/files/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/example/files/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/example/files/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/example/files/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/example/files/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/example/files/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/example/files/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/example/files/conf/managed-schema520
-rw-r--r--solr-8.1.1/example/files/conf/params.json34
-rw-r--r--solr-8.1.1/example/files/conf/protwords.txt21
-rw-r--r--solr-8.1.1/example/files/conf/solrconfig.xml1378
-rw-r--r--solr-8.1.1/example/files/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/example/files/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/example/files/conf/update-script.js115
-rw-r--r--solr-8.1.1/example/files/conf/velocity/browse.vm32
-rw-r--r--solr-8.1.1/example/files/conf/velocity/dropit.js1
-rw-r--r--solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm2
-rw-r--r--solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm12
-rw-r--r--solr-8.1.1/example/files/conf/velocity/facets.vm24
-rw-r--r--solr-8.1.1/example/files/conf/velocity/footer.vm29
-rw-r--r--solr-8.1.1/example/files/conf/velocity/head.vm290
-rw-r--r--solr-8.1.1/example/files/conf/velocity/hit.vm77
-rw-r--r--solr-8.1.1/example/files/conf/velocity/img/english_640.pngbin0 -> 138412 bytes
-rw-r--r--solr-8.1.1/example/files/conf/velocity/img/france_640.pngbin0 -> 99992 bytes
-rw-r--r--solr-8.1.1/example/files/conf/velocity/img/germany_640.pngbin0 -> 105271 bytes
-rw-r--r--solr-8.1.1/example/files/conf/velocity/img/globe_256.pngbin0 -> 46622 bytes
-rw-r--r--solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js1
-rw-r--r--solr-8.1.1/example/files/conf/velocity/js/dropit.js97
-rw-r--r--solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js763
-rw-r--r--solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js70
-rw-r--r--solr-8.1.1/example/files/conf/velocity/layout.vm42
-rw-r--r--solr-8.1.1/example/files/conf/velocity/macros.vm16
-rw-r--r--solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm68
-rw-r--r--solr-8.1.1/example/files/conf/velocity/results.vm20
-rw-r--r--solr-8.1.1/example/files/conf/velocity/results_list.vm21
-rw-r--r--solr-8.1.1/example/films/README.txt138
-rw-r--r--solr-8.1.1/example/films/film_data_generator.py117
-rw-r--r--solr-8.1.1/example/films/films-LICENSE.txt3
-rw-r--r--solr-8.1.1/example/films/films.csv1101
-rw-r--r--solr-8.1.1/example/films/films.json15830
-rw-r--r--solr-8.1.1/example/films/films.xml11438
-rw-r--r--solr-8.1.1/licenses/activation-1.1.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/activation-LICENSE-CDDL.txt119
-rw-r--r--solr-8.1.1/licenses/android-json-0.0.20131108.vaadin1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/android-json-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/android-json-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/ant-1.8.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/ant-LICENSE-ASL.txt272
-rw-r--r--solr-8.1.1/licenses/ant-NOTICE.txt26
-rw-r--r--solr-8.1.1/licenses/antlr4-runtime-4.5.1-1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/antlr4-runtime-LICENSE-BSD.txt26
-rw-r--r--solr-8.1.1/licenses/antlr4-runtime-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-core-0.8.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-core-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-core-NOTICE.txt13
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-dom-0.8.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-dom-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/apache-mime4j-dom-NOTICE.txt13
-rw-r--r--solr-8.1.1/licenses/argparse4j-0.8.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/argparse4j-LICENSE-MIT.txt23
-rw-r--r--solr-8.1.1/licenses/argparse4j-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/asciidoctor-ant-1.6.0-alpha.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/asciidoctor-ant-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/asciidoctor-ant-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/asm-5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/asm-LICENSE-BSD.txt29
-rw-r--r--solr-8.1.1/licenses/asm-LICENSE-BSD_LIKE.txt26
-rw-r--r--solr-8.1.1/licenses/asm-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/asm-commons-5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/asm-commons-LICENSE-BSD_LIKE.txt26
-rw-r--r--solr-8.1.1/licenses/asm-commons-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/aspectjrt-1.8.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/aspectjrt-LICENSE-EPL.txt71
-rw-r--r--solr-8.1.1/licenses/attributes-binder-1.3.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/attributes-binder-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/attributes-binder-NOTICE.txt9
-rw-r--r--solr-8.1.1/licenses/avatica-core-1.13.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/avatica-core-LICENSE-ASL.txt268
-rw-r--r--solr-8.1.1/licenses/avatica-core-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/bcmail-LICENSE-BSD_LIKE.txt15
-rw-r--r--solr-8.1.1/licenses/bcmail-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/bcmail-jdk15on-1.60.jar.sha11
-rw-r--r--solr-8.1.1/licenses/bcpkix-jdk15on-1.60.jar.sha11
-rw-r--r--solr-8.1.1/licenses/bcpkix-jdk15on-LICENSE-BSD_LIKE.txt15
-rw-r--r--solr-8.1.1/licenses/bcpkix-jdk15on-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/bcprov-LICENSE-BSD_LIKE.txt15
-rw-r--r--solr-8.1.1/licenses/bcprov-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/bcprov-jdk15on-1.60.jar.sha11
-rw-r--r--solr-8.1.1/licenses/boilerpipe-1.1.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/boilerpipe-LICENSE-ASL.txt18
-rw-r--r--solr-8.1.1/licenses/boilerpipe-NOTICE.txt24
-rw-r--r--solr-8.1.1/licenses/byte-buddy-1.9.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/byte-buddy-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/byte-buddy-NOTICE.txt4
-rw-r--r--solr-8.1.1/licenses/caffeine-2.4.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/caffeine-LICENSE-ASL.txt403
-rw-r--r--solr-8.1.1/licenses/caffeine-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/calcite-core-1.18.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/calcite-core-LICENSE-ASL.txt268
-rw-r--r--solr-8.1.1/licenses/calcite-core-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/calcite-linq4j-1.18.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/calcite-linq4j-LICENSE-ASL.txt268
-rw-r--r--solr-8.1.1/licenses/calcite-linq4j-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/carrot2-guava-18.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/carrot2-guava-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/carrot2-guava-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/carrot2-mini-3.16.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt36
-rw-r--r--solr-8.1.1/licenses/carrot2-mini-NOTICE.txt10
-rw-r--r--solr-8.1.1/licenses/commons-beanutils-1.9.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-beanutils-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-beanutils-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-cli-1.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-cli-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/commons-cli-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-codec-1.11.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-codec-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-codec-NOTICE.txt14
-rw-r--r--solr-8.1.1/licenses/commons-collections-3.2.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-collections-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-collections-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-collections4-4.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-collections4-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-collections4-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-compiler-3.0.9.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-compiler-LICENSE-BSD.txt31
-rw-r--r--solr-8.1.1/licenses/commons-compiler-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-compress-1.18.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-compress-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/commons-compress-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-configuration-LICENSE-ASL.txt403
-rw-r--r--solr-8.1.1/licenses/commons-configuration-NOTICE.txt9
-rw-r--r--solr-8.1.1/licenses/commons-configuration2-2.1.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-configuration2-LICENSE-ASL.txt403
-rw-r--r--solr-8.1.1/licenses/commons-configuration2-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-digester-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-digester-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-exec-1.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-exec-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/commons-exec-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-fileupload-1.3.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-fileupload-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-fileupload-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-io-2.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-io-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/commons-io-NOTICE.txt6
-rw-r--r--solr-8.1.1/licenses/commons-lang3-3.8.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-lang3-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-lang3-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/commons-logging-1.1.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-logging-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-logging-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/commons-math3-3.6.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-math3-LICENSE-ASL.txt457
-rw-r--r--solr-8.1.1/licenses/commons-math3-NOTICE.txt9
-rw-r--r--solr-8.1.1/licenses/commons-text-1.6.jar.sha11
-rw-r--r--solr-8.1.1/licenses/commons-text-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/commons-text-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/curator-client-2.13.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/curator-client-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/curator-client-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/curator-framework-2.13.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/curator-framework-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/curator-framework-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/curator-recipes-2.13.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/curator-recipes-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/curator-recipes-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/curvesapi-1.04.jar.sha11
-rw-r--r--solr-8.1.1/licenses/curvesapi-LICENSE-BSD_LIKE.txt28
-rw-r--r--solr-8.1.1/licenses/curvesapi-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/dec-0.1.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/dec-LICENSE-MIT.txt19
-rw-r--r--solr-8.1.1/licenses/dec-NOTICE.txt19
-rw-r--r--solr-8.1.1/licenses/derby-10.9.1.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/derby-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/derby-NOTICE.txt182
-rw-r--r--solr-8.1.1/licenses/disruptor-3.4.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/disruptor-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/disruptor-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/eigenbase-properties-1.1.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/eigenbase-properties-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/eigenbase-properties-NOTICE.txt20
-rw-r--r--solr-8.1.1/licenses/fontbox-2.0.12.jar.sha11
-rw-r--r--solr-8.1.1/licenses/fontbox-LICENSE-ASL.txt234
-rw-r--r--solr-8.1.1/licenses/fontbox-NOTICE.txt10
-rw-r--r--solr-8.1.1/licenses/gimap-1.5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/gimap-LICENSE-CDDL.txt135
-rw-r--r--solr-8.1.1/licenses/guava-25.1-jre.jar.sha11
-rw-r--r--solr-8.1.1/licenses/guava-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/guava-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-annotations-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-annotations-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-annotations-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-auth-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-auth-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-auth-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-common-3.2.0-tests.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-common-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-common-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-common-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-common-tests-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-common-tests-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-3.2.0-tests.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-client-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-client-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-client-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-tests-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-hdfs-tests-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-minicluster-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-minicluster-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-minicluster-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hadoop-minikdc-3.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hadoop-minikdc-LICENSE-ASL.txt244
-rw-r--r--solr-8.1.1/licenses/hadoop-minikdc-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/hamcrest-core-1.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hamcrest-core-LICENSE-BSD.txt27
-rw-r--r--solr-8.1.1/licenses/hamcrest-core-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/hppc-0.8.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hppc-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/hppc-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/hsqldb-2.4.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/hsqldb-LICENSE-BSD_LIKE.txt30
-rw-r--r--solr-8.1.1/licenses/hsqldb-NOTICE.txt69
-rw-r--r--solr-8.1.1/licenses/htrace-core4-4.1.0-incubating.jar.sha11
-rw-r--r--solr-8.1.1/licenses/htrace-core4-LICENSE-ASL.txt182
-rw-r--r--solr-8.1.1/licenses/htrace-core4-NOTICE.txt18
-rw-r--r--solr-8.1.1/licenses/http2-client-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/http2-client-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/http2-client-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/http2-common-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/http2-common-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/http2-common-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/http2-hpack-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/http2-hpack-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/http2-hpack-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/http2-http-client-transport-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/http2-http-client-transport-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/http2-http-client-transport-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/http2-server-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/http2-server-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/http2-server-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/httpclient-4.5.6.jar.sha11
-rw-r--r--solr-8.1.1/licenses/httpclient-LICENSE-ASL.txt182
-rw-r--r--solr-8.1.1/licenses/httpclient-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/httpcore-4.4.10.jar.sha11
-rw-r--r--solr-8.1.1/licenses/httpcore-LICENSE-ASL.txt182
-rw-r--r--solr-8.1.1/licenses/httpcore-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/httpmime-4.5.6.jar.sha11
-rw-r--r--solr-8.1.1/licenses/httpmime-LICENSE-ASL.txt182
-rw-r--r--solr-8.1.1/licenses/httpmime-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/icu4j-62.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/icu4j-LICENSE-BSD_LIKE.txt33
-rw-r--r--solr-8.1.1/licenses/icu4j-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/isoparser-1.1.22.jar.sha11
-rw-r--r--solr-8.1.1/licenses/isoparser-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/isoparser-NOTICE.txt23
-rw-r--r--solr-8.1.1/licenses/jackcess-2.1.12.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackcess-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/jackcess-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/jackcess-encrypt-2.1.4.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackcess-encrypt-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/jackcess-encrypt-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/jackson-annotations-2.9.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackson-annotations-LICENSE-ASL.txt8
-rw-r--r--solr-8.1.1/licenses/jackson-annotations-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/jackson-core-2.9.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackson-core-LICENSE-ASL.txt8
-rw-r--r--solr-8.1.1/licenses/jackson-core-NOTICE.txt20
-rw-r--r--solr-8.1.1/licenses/jackson-core-asl-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/jackson-core-asl-NOTICE.txt7
-rw-r--r--solr-8.1.1/licenses/jackson-databind-2.9.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackson-databind-LICENSE-ASL.txt8
-rw-r--r--solr-8.1.1/licenses/jackson-databind-NOTICE.txt20
-rw-r--r--solr-8.1.1/licenses/jackson-dataformat-smile-2.9.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackson-dataformat-smile-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/jackson-dataformat-smile-NOTICE.txt20
-rw-r--r--solr-8.1.1/licenses/jackson-jq-0.0.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jackson-jq-LICENSE-ASL.txt16
-rw-r--r--solr-8.1.1/licenses/jackson-jq-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/jackson-mapper-asl-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/jackson-mapper-asl-NOTICE.txt7
-rw-r--r--solr-8.1.1/licenses/janino-3.0.9.jar.sha11
-rw-r--r--solr-8.1.1/licenses/janino-LICENSE-BSD.txt31
-rw-r--r--solr-8.1.1/licenses/janino-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/java-libpst-0.8.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/java-libpst-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/java-libpst-NOTICE.txt4
-rw-r--r--solr-8.1.1/licenses/javax.mail-1.5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/javax.mail-LICENSE-CDDL.txt135
-rw-r--r--solr-8.1.1/licenses/javax.servlet-api-3.1.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/javax.servlet-api-LICENSE-CDDL.txt126
-rw-r--r--solr-8.1.1/licenses/javax.servlet-api-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/jcl-over-slf4j-1.7.24.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jcl-over-slf4j-LICENSE-MIT.txt21
-rw-r--r--solr-8.1.1/licenses/jcl-over-slf4j-NOTICE.txt25
-rw-r--r--solr-8.1.1/licenses/jdom2-2.0.6.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jdom2-LICENSE-BSD_LIKE.txt56
-rw-r--r--solr-8.1.1/licenses/jdom2-NOTICE.txt6
-rw-r--r--solr-8.1.1/licenses/jempbox-1.8.16.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jempbox-LICENSE-ASL.txt236
-rw-r--r--solr-8.1.1/licenses/jempbox-NOTICE.txt10
-rw-r--r--solr-8.1.1/licenses/jersey-core-1.19.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jersey-core-LICENSE-CDDL.txt81
-rw-r--r--solr-8.1.1/licenses/jersey-server-1.19.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jersey-server-LICENSE-CDDL.txt85
-rw-r--r--solr-8.1.1/licenses/jersey-servlet-1.19.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jersey-servlet-LICENSE-CDDL.txt85
-rw-r--r--solr-8.1.1/licenses/jetty-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/jetty-NOTICE.txt111
-rw-r--r--solr-8.1.1/licenses/jetty-alpn-client-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-alpn-java-client-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-alpn-java-server-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-alpn-server-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-client-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-continuation-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-deploy-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-http-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-io-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-jmx-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-rewrite-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-security-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-server-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-servlet-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-servlets-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-util-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-webapp-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jetty-xml-9.4.14.v20181114.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jmatio-1.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jmatio-LICENSE-BSD.txt28
-rw-r--r--solr-8.1.1/licenses/jmatio-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/jose4j-0.6.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jose4j-LICENSE-ASL.txt272
-rw-r--r--solr-8.1.1/licenses/jose4j-NOTICE.txt13
-rw-r--r--solr-8.1.1/licenses/json-path-2.4.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/json-path-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/json-path-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/jsonic-1.2.7.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jsonic-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/jsonic-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/jsoup-1.11.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jsoup-LICENSE-MIT.txt21
-rw-r--r--solr-8.1.1/licenses/jul-to-slf4j-1.7.24.jar.sha11
-rw-r--r--solr-8.1.1/licenses/jul-to-slf4j-LICENSE-MIT.txt21
-rw-r--r--solr-8.1.1/licenses/jul-to-slf4j-NOTICE.txt25
-rw-r--r--solr-8.1.1/licenses/junit-4.12.jar.sha11
-rw-r--r--solr-8.1.1/licenses/junit-LICENSE-CPL.txt88
-rw-r--r--solr-8.1.1/licenses/junit-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/junit4-ant-2.7.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/junit4-ant-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/junit4-ant-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/juniversalchardet-1.0.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/juniversalchardet-LICENSE-MPL.txt469
-rw-r--r--solr-8.1.1/licenses/juniversalchardet-NOTICE.txt6
-rw-r--r--solr-8.1.1/licenses/kerb-admin-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-admin-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-admin-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-client-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-client-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-client-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-common-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-common-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-common-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-core-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-core-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-core-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-crypto-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-crypto-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-crypto-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-identity-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-identity-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-identity-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-server-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-server-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-server-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-simplekdc-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-simplekdc-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-simplekdc-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerb-util-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerb-util-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerb-util-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerby-asn1-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerby-asn1-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerby-asn1-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerby-config-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerby-config-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerby-config-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerby-kdc-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerby-kdc-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerby-kdc-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerby-pkix-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerby-pkix-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerby-pkix-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/kerby-util-1.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/kerby-util-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/kerby-util-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/langdetect-1.1-20120112.jar.sha11
-rw-r--r--solr-8.1.1/licenses/langdetect-LICENSE-ASL.txt13
-rw-r--r--solr-8.1.1/licenses/langdetect-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/log4j-1.2-api-2.11.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/log4j-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/log4j-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/log4j-api-2.11.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/log4j-api-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/log4j-api-NOTICE.txt17
-rw-r--r--solr-8.1.1/licenses/log4j-core-2.11.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/log4j-core-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/log4j-core-NOTICE.txt17
-rw-r--r--solr-8.1.1/licenses/log4j-slf4j-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/log4j-slf4j-NOTICE.txt17
-rw-r--r--solr-8.1.1/licenses/log4j-slf4j-impl-2.11.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/log4j-web-2.11.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/log4j-web-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/log4j-web-NOTICE.txt17
-rw-r--r--solr-8.1.1/licenses/metadata-extractor-2.11.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metadata-extractor-LICENSE-PD.txt1
-rw-r--r--solr-8.1.1/licenses/metrics-core-4.0.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metrics-core-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/metrics-core-NOTICE.txt11
-rw-r--r--solr-8.1.1/licenses/metrics-graphite-4.0.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metrics-graphite-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-graphite-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/metrics-jetty-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-jetty-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/metrics-jetty9-4.0.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metrics-jmx-4.0.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metrics-jmx-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-jmx-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/metrics-json-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-json-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/metrics-jvm-4.0.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/metrics-jvm-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-jvm-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/metrics-servlets-LICENSE-ASL.txt203
-rw-r--r--solr-8.1.1/licenses/metrics-servlets-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/mina-core-LICENSE-ASL.txt341
-rw-r--r--solr-8.1.1/licenses/mina-core-NOTICE.txt7
-rw-r--r--solr-8.1.1/licenses/mockito-core-2.23.4.jar.sha11
-rw-r--r--solr-8.1.1/licenses/mockito-core-LICENSE-MIT.txt21
-rw-r--r--solr-8.1.1/licenses/morfologik-fsa-2.1.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/morfologik-fsa-LICENSE-BSD.txt29
-rw-r--r--solr-8.1.1/licenses/morfologik-fsa-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/morfologik-polish-2.1.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/morfologik-polish-LICENSE-BSD.txt28
-rw-r--r--solr-8.1.1/licenses/morfologik-polish-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/morfologik-stemming-2.1.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/morfologik-stemming-LICENSE-BSD.txt29
-rw-r--r--solr-8.1.1/licenses/morfologik-stemming-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/netty-all-4.0.52.Final.jar.sha11
-rw-r--r--solr-8.1.1/licenses/netty-all-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/netty-all-NOTICE.txt223
-rw-r--r--solr-8.1.1/licenses/noggit-0.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/noggit-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/noggit-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/objenesis-2.6.jar.sha11
-rw-r--r--solr-8.1.1/licenses/objenesis-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/objenesis-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/opennlp-tools-1.9.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/opennlp-tools-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/opennlp-tools-NOTICE.txt6
-rw-r--r--solr-8.1.1/licenses/org.restlet-2.3.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/org.restlet-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/org.restlet-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/org.restlet.ext.servlet-2.3.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/org.restlet.ext.servlet-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/org.restlet.ext.servlet-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/parso-2.0.9.jar.sha11
-rw-r--r--solr-8.1.1/licenses/parso-LICENSE-ASL.txt234
-rw-r--r--solr-8.1.1/licenses/parso-NOTICE.txt234
-rw-r--r--solr-8.1.1/licenses/pdfbox-2.0.12.jar.sha11
-rw-r--r--solr-8.1.1/licenses/pdfbox-LICENSE-ASL.txt314
-rw-r--r--solr-8.1.1/licenses/pdfbox-NOTICE.txt14
-rw-r--r--solr-8.1.1/licenses/pdfbox-tools-2.0.12.jar.sha11
-rw-r--r--solr-8.1.1/licenses/pdfbox-tools-LICENSE-ASL.txt314
-rw-r--r--solr-8.1.1/licenses/pdfbox-tools-NOTICE.txt14
-rw-r--r--solr-8.1.1/licenses/poi-4.0.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/poi-LICENSE-ASL.txt537
-rw-r--r--solr-8.1.1/licenses/poi-NOTICE.txt24
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-4.0.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-LICENSE-ASL.txt537
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-NOTICE.txt24
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-schemas-4.0.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-schemas-LICENSE-ASL.txt537
-rw-r--r--solr-8.1.1/licenses/poi-ooxml-schemas-NOTICE.txt24
-rw-r--r--solr-8.1.1/licenses/poi-scratchpad-4.0.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/poi-scratchpad-LICENSE-ASL.txt537
-rw-r--r--solr-8.1.1/licenses/poi-scratchpad-NOTICE.txt24
-rw-r--r--solr-8.1.1/licenses/presto-parser-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/presto-parser-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/protobuf-java-3.6.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/protobuf-java-LICENSE-BSD.txt9
-rw-r--r--solr-8.1.1/licenses/protobuf-java-NOTICE.txt3
-rw-r--r--solr-8.1.1/licenses/randomizedtesting-runner-2.7.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/randomizedtesting-runner-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/randomizedtesting-runner-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/re2j-1.2.jar.sha11
-rw-r--r--solr-8.1.1/licenses/re2j-LICENSE-BSD_LIKE.txt33
-rw-r--r--solr-8.1.1/licenses/re2j-NOTICE.txt5
-rw-r--r--solr-8.1.1/licenses/rome-1.5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/rome-LICENSE-ASL.txt14
-rw-r--r--solr-8.1.1/licenses/rome-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/rome-utils-1.5.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/rome-utils-LICENSE-ASL.txt14
-rw-r--r--solr-8.1.1/licenses/rome-utils-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/rrd4j-3.5.jar.sha11
-rw-r--r--solr-8.1.1/licenses/rrd4j-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/rrd4j-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/servlet-api-LICENSE-CDDL.txt126
-rw-r--r--solr-8.1.1/licenses/servlet-api-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/simple-xml-2.7.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/simple-xml-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/simple-xml-NOTICE.txt2
-rw-r--r--solr-8.1.1/licenses/simpleclient-0.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/simpleclient-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/simpleclient-NOTICE.txt11
-rw-r--r--solr-8.1.1/licenses/simpleclient_common-0.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/simpleclient_common-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/simpleclient_common-NOTICE.txt11
-rw-r--r--solr-8.1.1/licenses/simpleclient_httpserver-0.2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/simpleclient_httpserver-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/simpleclient_httpserver-NOTICE.txt11
-rw-r--r--solr-8.1.1/licenses/slf4j-LICENSE-MIT.txt21
-rw-r--r--solr-8.1.1/licenses/slf4j-NOTICE.txt25
-rw-r--r--solr-8.1.1/licenses/slf4j-api-1.7.24.jar.sha11
-rw-r--r--solr-8.1.1/licenses/slf4j-simple-1.7.24.jar.sha11
-rw-r--r--solr-8.1.1/licenses/slice-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/slice-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/spatial4j-0.7.jar.sha11
-rw-r--r--solr-8.1.1/licenses/spatial4j-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/spatial4j-NOTICE.txt133
-rw-r--r--solr-8.1.1/licenses/start.jar.sha11
-rw-r--r--solr-8.1.1/licenses/stax2-api-3.1.4.jar.sha11
-rw-r--r--solr-8.1.1/licenses/stax2-api-LICENSE-BSD.txt10
-rw-r--r--solr-8.1.1/licenses/stax2-api-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/t-digest-3.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/t-digest-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/t-digest-NOTICE.txt4
-rw-r--r--solr-8.1.1/licenses/tagsoup-1.2.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/tagsoup-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/tagsoup-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/tika-core-1.19.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/tika-core-LICENSE-ASL.txt238
-rw-r--r--solr-8.1.1/licenses/tika-core-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/tika-java7-1.19.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/tika-java7-LICENSE-ASL.txt239
-rw-r--r--solr-8.1.1/licenses/tika-java7-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/tika-parsers-1.19.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/tika-parsers-LICENSE-ASL.txt239
-rw-r--r--solr-8.1.1/licenses/tika-parsers-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/tika-xmp-1.19.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/tika-xmp-LICENSE-ASL.txt238
-rw-r--r--solr-8.1.1/licenses/tika-xmp-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/velocity-engine-core-2.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/velocity-engine-core-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/velocity-engine-core-NOTICE.txt7
-rw-r--r--solr-8.1.1/licenses/velocity-tools-generic-3.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/velocity-tools-generic-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/velocity-tools-generic-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-3.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-jsp-3.0.jar.sha11
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-jsp-LICENSE-ASL.txt201
-rw-r--r--solr-8.1.1/licenses/velocity-tools-view-jsp-NOTICE.txt12
-rw-r--r--solr-8.1.1/licenses/vorbis-java-core-0.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/vorbis-java-core-LICENSE-BSD_LIKE.txt28
-rw-r--r--solr-8.1.1/licenses/vorbis-java-core-NOTICE.txt16
-rw-r--r--solr-8.1.1/licenses/vorbis-java-tika-0.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/vorbis-java-tika-LICENSE-BSD_LIKE.txt28
-rw-r--r--solr-8.1.1/licenses/vorbis-java-tika-NOTICE.txt16
-rw-r--r--solr-8.1.1/licenses/woodstox-core-asl-4.4.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/woodstox-core-asl-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/woodstox-core-asl-NOTICE.txt37
-rw-r--r--solr-8.1.1/licenses/xercesImpl-2.9.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/xercesImpl-LICENSE-ASL.txt56
-rw-r--r--solr-8.1.1/licenses/xercesImpl-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/xmlbeans-3.0.1.jar.sha11
-rw-r--r--solr-8.1.1/licenses/xmlbeans-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/xmlbeans-NOTICE.txt29
-rw-r--r--solr-8.1.1/licenses/xmpcore-5.1.3.jar.sha11
-rw-r--r--solr-8.1.1/licenses/xmpcore-LICENSE-BSD.txt11
-rw-r--r--solr-8.1.1/licenses/xmpcore-NOTICE.txt1
-rw-r--r--solr-8.1.1/licenses/xz-1.8.jar.sha11
-rw-r--r--solr-8.1.1/licenses/xz-LICENSE-PD.txt8
-rw-r--r--solr-8.1.1/licenses/xz-NOTICE.txt8
-rw-r--r--solr-8.1.1/licenses/zookeeper-3.4.14.jar.sha11
-rw-r--r--solr-8.1.1/licenses/zookeeper-LICENSE-ASL.txt202
-rw-r--r--solr-8.1.1/licenses/zookeeper-NOTICE.txt5
-rw-r--r--solr-8.1.1/server/README.txt109
-rw-r--r--solr-8.1.1/server/contexts/solr-jetty-context.xml8
-rw-r--r--solr-8.1.1/server/etc/jetty-http.xml51
-rw-r--r--solr-8.1.1/server/etc/jetty-https.xml76
-rw-r--r--solr-8.1.1/server/etc/jetty-https8.xml69
-rw-r--r--solr-8.1.1/server/etc/jetty-ssl.xml36
-rw-r--r--solr-8.1.1/server/etc/jetty.xml221
-rw-r--r--solr-8.1.1/server/etc/webdefault.xml527
-rw-r--r--solr-8.1.1/server/lib/ext/disruptor-3.4.2.jarbin0 -> 83064 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/jcl-over-slf4j-1.7.24.jarbin0 -> 16516 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/jul-to-slf4j-1.7.24.jarbin0 -> 4597 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/log4j-1.2-api-2.11.2.jarbin0 -> 64746 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/log4j-api-2.11.2.jarbin0 -> 266283 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/log4j-core-2.11.2.jarbin0 -> 1629585 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/log4j-slf4j-impl-2.11.2.jarbin0 -> 23239 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/log4j-web-2.11.2.jarbin0 -> 32522 bytes
-rw-r--r--solr-8.1.1/server/lib/ext/slf4j-api-1.7.24.jarbin0 -> 41205 bytes
-rw-r--r--solr-8.1.1/server/lib/http2-common-9.4.14.v20181114.jarbin0 -> 188999 bytes
-rw-r--r--solr-8.1.1/server/lib/http2-hpack-9.4.14.v20181114.jarbin0 -> 50834 bytes
-rw-r--r--solr-8.1.1/server/lib/http2-server-9.4.14.v20181114.jarbin0 -> 59238 bytes
-rw-r--r--solr-8.1.1/server/lib/javax.servlet-api-3.1.0.jarbin0 -> 95806 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-alpn-java-server-9.4.14.v20181114.jarbin0 -> 17543 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-alpn-server-9.4.14.v20181114.jarbin0 -> 17812 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-continuation-9.4.14.v20181114.jarbin0 -> 25679 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-deploy-9.4.14.v20181114.jarbin0 -> 61457 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-http-9.4.14.v20181114.jarbin0 -> 204320 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-io-9.4.14.v20181114.jarbin0 -> 147977 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-jmx-9.4.14.v20181114.jarbin0 -> 42608 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-rewrite-9.4.14.v20181114.jarbin0 -> 43427 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-security-9.4.14.v20181114.jarbin0 -> 115991 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-server-9.4.14.v20181114.jarbin0 -> 617072 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-servlet-9.4.14.v20181114.jarbin0 -> 121970 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-servlets-9.4.14.v20181114.jarbin0 -> 101933 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-util-9.4.14.v20181114.jarbin0 -> 516446 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-webapp-9.4.14.v20181114.jarbin0 -> 137249 bytes
-rw-r--r--solr-8.1.1/server/lib/jetty-xml-9.4.14.v20181114.jarbin0 -> 61035 bytes
-rw-r--r--solr-8.1.1/server/lib/metrics-core-4.0.5.jarbin0 -> 97688 bytes
-rw-r--r--solr-8.1.1/server/lib/metrics-graphite-4.0.5.jarbin0 -> 21981 bytes
-rw-r--r--solr-8.1.1/server/lib/metrics-jetty9-4.0.5.jarbin0 -> 18426 bytes
-rw-r--r--solr-8.1.1/server/lib/metrics-jmx-4.0.5.jarbin0 -> 20456 bytes
-rw-r--r--solr-8.1.1/server/lib/metrics-jvm-4.0.5.jarbin0 -> 23792 bytes
-rw-r--r--solr-8.1.1/server/modules/http.mod9
-rw-r--r--solr-8.1.1/server/modules/https.mod9
-rw-r--r--solr-8.1.1/server/modules/https8.mod9
-rw-r--r--solr-8.1.1/server/modules/server.mod11
-rw-r--r--solr-8.1.1/server/modules/ssl.mod9
-rw-r--r--solr-8.1.1/server/resources/jetty-logging.properties1
-rw-r--r--solr-8.1.1/server/resources/log4j2-console.xml67
-rw-r--r--solr-8.1.1/server/resources/log4j2.xml142
-rw-r--r--solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh176
-rw-r--r--solr-8.1.1/server/scripts/cloud-scripts/zkcli.bat25
-rw-r--r--solr-8.1.1/server/scripts/cloud-scripts/zkcli.sh26
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/antlr4-runtime-4.5.1-1.jarbin0 -> 302034 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-5.1.jarbin0 -> 53468 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-commons-5.1.jarbin0 -> 47195 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/avatica-core-1.13.0.jarbin0 -> 1309631 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/caffeine-2.4.0.jarbin0 -> 972531 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-core-1.18.0.jarbin0 -> 4743200 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-linq4j-1.18.0.jarbin0 -> 458695 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-beanutils-1.9.3.jarbin0 -> 246174 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-cli-1.2.jarbin0 -> 41123 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-codec-1.11.jarbin0 -> 335042 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-collections-3.2.2.jarbin0 -> 588337 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-compiler-3.0.9.jarbin0 -> 37871 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-configuration2-2.1.1.jarbin0 -> 616888 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jarbin0 -> 54423 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-fileupload-1.3.3.jarbin0 -> 70604 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-io-2.5.jarbin0 -> 208700 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-lang3-3.8.1.jarbin0 -> 501879 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-math3-3.6.1.jarbin0 -> 2213560 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-text-1.6.jarbin0 -> 197176 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-client-2.13.0.jarbin0 -> 2423157 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-framework-2.13.0.jarbin0 -> 201965 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-recipes-2.13.0.jarbin0 -> 283653 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/disruptor-3.4.2.jarbin0 -> 83064 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/eigenbase-properties-1.1.5.jarbin0 -> 18482 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/guava-25.1-jre.jarbin0 -> 2734339 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-annotations-3.2.0.jarbin0 -> 60244 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-3.2.0.jarbin0 -> 139058 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-3.2.0.jarbin0 -> 4092595 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-client-3.2.0.jarbin0 -> 5023516 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hppc-0.8.1.jarbin0 -> 1159086 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/htrace-core4-4.1.0-incubating.jarbin0 -> 1502280 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-client-9.4.14.v20181114.jarbin0 -> 29292 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-common-9.4.14.v20181114.jarbin0 -> 188999 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-hpack-9.4.14.v20181114.jarbin0 -> 50834 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-http-client-transport-9.4.14.v20181114.jarbin0 -> 39534 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.5.6.jarbin0 -> 767140 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.10.jarbin0 -> 326356 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.5.6.jarbin0 -> 41794 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-annotations-2.9.8.jarbin0 -> 66894 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.9.8.jarbin0 -> 325619 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-databind-2.9.8.jarbin0 -> 1347236 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.9.8.jarbin0 -> 84076 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/janino-3.0.9.jarbin0 -> 801369 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-client-9.4.14.v20181114.jarbin0 -> 16736 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-java-client-9.4.14.v20181114.jarbin0 -> 17209 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-client-9.4.14.v20181114.jarbin0 -> 301489 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-http-9.4.14.v20181114.jarbin0 -> 204320 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-io-9.4.14.v20181114.jarbin0 -> 147977 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-util-9.4.14.v20181114.jarbin0 -> 516446 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jose4j-0.6.5.jarbin0 -> 260130 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/json-path-2.4.0.jarbin0 -> 223186 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-core-1.0.1.jarbin0 -> 226672 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-util-1.0.1.jarbin0 -> 36708 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-asn1-1.0.1.jarbin0 -> 102174 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-pkix-1.0.1.jarbin0 -> 204650 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-common-8.1.1.jarbin0 -> 1655240 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-kuromoji-8.1.1.jarbin0 -> 4628905 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-nori-8.1.1.jarbin0 -> 7499146 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-phonetic-8.1.1.jarbin0 -> 26210 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-8.1.1.jarbin0 -> 102244 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-classification-8.1.1.jarbin0 -> 68377 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-8.1.1.jarbin0 -> 454339 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-8.1.1.jarbin0 -> 3177010 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-expressions-8.1.1.jarbin0 -> 73063 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-grouping-8.1.1.jarbin0 -> 90658 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-8.1.1.jarbin0 -> 208877 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-8.1.1.jarbin0 -> 147525 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-8.1.1.jarbin0 -> 51873 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-8.1.1.jarbin0 -> 96684 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-8.1.1.jarbin0 -> 251092 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queryparser-8.1.1.jarbin0 -> 381055 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-8.1.1.jarbin0 -> 342841 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-extras-8.1.1.jarbin0 -> 238754 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial3d-8.1.1.jarbin0 -> 306581 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-8.1.1.jarbin0 -> 245801 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/noggit-0.8.jarbin0 -> 27948 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jarbin0 -> 708039 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jarbin0 -> 22972 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/protobuf-java-3.6.1.jarbin0 -> 1421323 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/re2j-1.2.jarbin0 -> 126747 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/rrd4j-3.5.jarbin0 -> 769611 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-core-8.1.1.jarbin0 -> 5792810 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-8.1.1.jarbin0 -> 2140519 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/spatial4j-0.7.jarbin0 -> 204833 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/stax2-api-3.1.4.jarbin0 -> 161867 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jarbin0 -> 61298 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/woodstox-core-asl-4.4.1.jarbin0 -> 486013 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/zookeeper-3.4.14.jarbin0 -> 911603 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/WEB-INF/web.xml114
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/analysis.css303
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/chosen.css465
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/cloud.css722
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/collections.css366
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/common.css767
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/cores.css225
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/dashboard.css179
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/dataimport.css370
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/documents.css179
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/files.css53
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/index.css216
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/java-properties.css47
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.min.css28
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.structure.min.css24
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/logging.css384
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/login.css109
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/menu.css330
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/plugins.css220
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/query.css162
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/replication.css500
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/schema.css727
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/segments.css172
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/stream.css233
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/suggestions.css64
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/css/angular/threads.css160
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/favicon.icobin0 -> 3262 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite-2x.pngbin0 -> 738 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite.pngbin0 -> 559 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/div.gifbin0 -> 1093 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/favicon.icobin0 -> 3262 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/7z.pngbin0 -> 651 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/README27
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ai.pngbin0 -> 927 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/aiff.pngbin0 -> 876 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/asc.pngbin0 -> 759 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/audio.pngbin0 -> 727 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bin.pngbin0 -> 616 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bz2.pngbin0 -> 720 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/c.pngbin0 -> 827 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfc.pngbin0 -> 1145 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfm.pngbin0 -> 1145 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/chm.pngbin0 -> 483 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/class.pngbin0 -> 759 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/conf.pngbin0 -> 717 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cpp.pngbin0 -> 881 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cs.pngbin0 -> 808 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/css.pngbin0 -> 896 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/csv.pngbin0 -> 480 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/deb.pngbin0 -> 716 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/divx.pngbin0 -> 897 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/doc.pngbin0 -> 659 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/dot.pngbin0 -> 658 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/eml.pngbin0 -> 376 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/enc.pngbin0 -> 757 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/file.pngbin0 -> 720 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gif.pngbin0 -> 1001 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gz.pngbin0 -> 716 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/hlp.pngbin0 -> 483 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/htm.pngbin0 -> 748 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/html.pngbin0 -> 748 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/image.pngbin0 -> 906 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/iso.pngbin0 -> 700 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jar.pngbin0 -> 672 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/java.pngbin0 -> 727 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpeg.pngbin0 -> 1001 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpg.pngbin0 -> 1001 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/js.pngbin0 -> 862 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/lua.pngbin0 -> 465 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/m.pngbin0 -> 915 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mm.pngbin0 -> 464 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mov.pngbin0 -> 887 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mp3.pngbin0 -> 885 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mpg.pngbin0 -> 894 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odc.pngbin0 -> 749 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odf.pngbin0 -> 807 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odg.pngbin0 -> 788 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odi.pngbin0 -> 788 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odp.pngbin0 -> 744 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ods.pngbin0 -> 749 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odt.pngbin0 -> 577 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ogg.pngbin0 -> 865 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pdf.pngbin0 -> 663 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pgp.pngbin0 -> 750 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/php.pngbin0 -> 887 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pl.pngbin0 -> 871 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/png.pngbin0 -> 1001 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ppt.pngbin0 -> 762 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ps.pngbin0 -> 648 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/py.pngbin0 -> 871 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ram.pngbin0 -> 806 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rar.pngbin0 -> 631 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rb.pngbin0 -> 878 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rm.pngbin0 -> 866 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rpm.pngbin0 -> 638 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rtf.pngbin0 -> 474 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sig.pngbin0 -> 610 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sql.pngbin0 -> 865 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/swf.pngbin0 -> 843 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxc.pngbin0 -> 749 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxd.pngbin0 -> 788 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxi.pngbin0 -> 744 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxw.pngbin0 -> 577 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tar.pngbin0 -> 747 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tex.pngbin0 -> 890 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tgz.pngbin0 -> 716 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/txt.pngbin0 -> 542 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vcf.pngbin0 -> 711 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/video.pngbin0 -> 740 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vsd.pngbin0 -> 814 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wav.pngbin0 -> 881 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wma.pngbin0 -> 886 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wmv.pngbin0 -> 892 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xls.pngbin0 -> 731 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xml.pngbin0 -> 475 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xpi.pngbin0 -> 952 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xvid.pngbin0 -> 906 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/filetypes/zip.pngbin0 -> 874 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-000-small.pngbin0 -> 346 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-circle.pngbin0 -> 802 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-switch.pngbin0 -> 877 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/asterisk.pngbin0 -> 682 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/battery.pngbin0 -> 611 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/block-small.pngbin0 -> 444 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/block.pngbin0 -> 630 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/book-open-text.pngbin0 -> 628 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/box.pngbin0 -> 508 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/bug.pngbin0 -> 704 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/chart.pngbin0 -> 659 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small-expand.pngbin0 -> 450 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small.pngbin0 -> 443 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-list.pngbin0 -> 640 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste-document-text.pngbin0 -> 715 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste.pngbin0 -> 685 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select-remain.pngbin0 -> 796 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select.pngbin0 -> 741 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/construction.pngbin0 -> 558 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-0.pngbin0 -> 164 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-1.pngbin0 -> 269 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-button.pngbin0 -> 588 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/cross.pngbin0 -> 544 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/dashboard.pngbin0 -> 646 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/database--plus.pngbin0 -> 664 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/database.pngbin0 -> 569 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/databases.pngbin0 -> 661 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/disk-black.pngbin0 -> 434 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/document-convert.pngbin0 -> 772 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/document-import.pngbin0 -> 688 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/document-list.pngbin0 -> 650 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/document-text.pngbin0 -> 592 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/documents-stack.pngbin0 -> 594 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/download-cloud.pngbin0 -> 1643 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/drive-upload.pngbin0 -> 746 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/exclamation-button.pngbin0 -> 585 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/eye.pngbin0 -> 566 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-export.pngbin0 -> 632 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-tree.pngbin0 -> 518 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/folder.pngbin0 -> 476 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel-small.pngbin0 -> 410 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel.pngbin0 -> 591 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/gear.pngbin0 -> 736 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/globe-network.pngbin0 -> 809 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/globe.pngbin0 -> 882 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer-screwdriver.pngbin0 -> 786 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer.pngbin0 -> 554 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/hand.pngbin0 -> 672 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/highlighter-text.pngbin0 -> 588 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/home.pngbin0 -> 752 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass--exclamation.pngbin0 -> 812 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass.pngbin0 -> 716 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/idea.pngbin0 -> 732 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/inbox-document-text.pngbin0 -> 675 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/information-button.pngbin0 -> 621 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/information-small.pngbin0 -> 352 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/information-white.pngbin0 -> 707 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/information.pngbin0 -> 744 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/jar.pngbin0 -> 805 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/magnifier.pngbin0 -> 700 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/mail.pngbin0 -> 505 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/memory.pngbin0 -> 349 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/minus-button.pngbin0 -> 479 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/molecule.pngbin0 -> 1657 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network-cloud.pngbin0 -> 623 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-away.pngbin0 -> 1468 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-busy.pngbin0 -> 1423 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-offline.pngbin0 -> 1461 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status.pngbin0 -> 1441 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/network.pngbin0 -> 264 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/node-design.pngbin0 -> 597 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/node-master.pngbin0 -> 1308 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/node-select.pngbin0 -> 630 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/node-slave.pngbin0 -> 1261 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/node.pngbin0 -> 548 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil-small.pngbin0 -> 384 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil.pngbin0 -> 1529 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/plus-button.pngbin0 -> 583 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/processor.pngbin0 -> 635 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/prohibition.pngbin0 -> 1659 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/property.pngbin0 -> 769 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/question-small-white.pngbin0 -> 491 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/question-white.pngbin0 -> 761 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/question.pngbin0 -> 766 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt-invoice.pngbin0 -> 549 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt.pngbin0 -> 403 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/run.pngbin0 -> 1205 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/script-code.pngbin0 -> 568 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/server-cast.pngbin0 -> 644 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/server.pngbin0 -> 423 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/sitemap.pngbin0 -> 524 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/slash.pngbin0 -> 752 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/status-away.pngbin0 -> 457 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/status-busy.pngbin0 -> 439 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/status-offline.pngbin0 -> 448 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/status.pngbin0 -> 433 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor--exclamation.pngbin0 -> 704 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor.pngbin0 -> 547 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/table.pngbin0 -> 563 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/terminal.pngbin0 -> 492 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-circle.pngbin0 -> 724 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-red.pngbin0 -> 1515 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/tick.pngbin0 -> 634 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small-expand.pngbin0 -> 418 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small.pngbin0 -> 394 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/toolbox.pngbin0 -> 501 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-accordion.pngbin0 -> 583 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-address-bar.pngbin0 -> 349 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box-uncheck.pngbin0 -> 355 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box.pngbin0 -> 435 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button-uncheck.pngbin0 -> 415 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button.pngbin0 -> 478 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-text-field-select.pngbin0 -> 417 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/users.pngbin0 -> 870 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/wooden-box.pngbin0 -> 438 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/ico/zone.pngbin0 -> 434 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/loader-light.gifbin0 -> 1849 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/loader.gifbin0 -> 1553 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/lucene-ico.pngbin0 -> 1508 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/solr-ico.pngbin0 -> 978 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/solr.svg39
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/img/tree.pngbin0 -> 1112 bytes
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/index.html253
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/app.js516
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/analysis.js201
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cloud.js983
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cluster-suggestions.js62
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collection-overview.js39
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collections.js274
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/core-overview.js93
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cores.js180
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/dataimport.js302
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/documents.js137
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/files.js100
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/index.js97
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/java-properties.js45
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/logging.js158
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/login.js317
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/plugins.js167
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/query.js118
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/replication.js235
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/schema.js611
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/segments.js99
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js239
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/threads.js50
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/unknown.js37
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/services.js333
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-chosen.js139
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.js229
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.min.js31
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-resource.min.js36
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.js1018
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.min.js38
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.js703
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.min.js39
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.js217
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.min.js45
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular.js26093
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/angular.min.js273
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.js1194
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.min.js30
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/d3.js9373
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/highlight.js31
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/jquery-1.7.2.min.js30
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js29
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/jquery-ui.min.js30
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/jquery.jstree.js3534
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/libs/ngtimeago.js101
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html128
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html302
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html49
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html85
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/collections.html366
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html206
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cores.html224
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html209
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/documents.html111
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/files.html47
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/index.html261
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html27
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html56
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/logging.html57
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/login.html160
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html72
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/query.html357
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/replication.html239
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/schema.html455
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/segments.html99
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/stream.html64
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/threads.html65
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html23
-rw-r--r--solr-8.1.1/server/solr/README.txt77
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/managed-schema1013
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/params.json20
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/protwords.txt21
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/solrconfig.xml1360
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/server/solr/configsets/_default/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_rest_managed.json1
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_stopwords_english.json38
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_synonyms_english.json11
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/README.txt11
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/kmeans-attributes.xml19
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/lingo-attributes.xml24
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/stc-attributes.xml19
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/currency.xml67
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/elevate.xml42
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ckb.txt136
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/managed-schema1187
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-FoldToASCII.txt3813
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-ISOLatin1Accent.txt246
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/params.json11
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/protwords.txt21
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml1621
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/spellings.txt2
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/update-script.js53
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/README.txt101
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/VM_global_library.vm186
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/browse.vm33
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster.vm19
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster_results.vm31
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/debug.vm28
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/did_you_mean.vm11
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/error.vm11
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_fields.vm24
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_pivot.vm12
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_queries.vm12
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_ranges.vm23
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facets.vm10
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/footer.vm43
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/head.vm37
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/header.vm7
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit.vm25
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_grouped.vm43
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_plain.vm25
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/join_doc.vm20
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.css48
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js763
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/layout.vm24
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/main.css231
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/mime_type_lists.vm68
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_bottom.vm22
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_top.vm29
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/product_doc.vm32
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query.vm42
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_form.vm64
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_group.vm43
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_spatial.vm75
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/results_list.vm22
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/richtext_doc.vm153
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/suggest.vm8
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/tabs.vm50
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example.xsl132
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_atom.xsl67
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_rss.xsl66
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/luke.xsl337
-rw-r--r--solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/updateXml.xsl70
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/contractions_ca.txt8
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/contractions_fr.txt15
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/contractions_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/contractions_it.txt23
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/hyphenations_ga.txt5
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stemdict_nl.txt6
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stoptags_ja.txt420
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ar.txt125
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_bg.txt193
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ca.txt220
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_cz.txt172
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_da.txt110
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_de.txt294
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_el.txt78
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_en.txt54
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_es.txt356
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_eu.txt99
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_fa.txt313
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_fi.txt97
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_fr.txt186
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ga.txt110
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_gl.txt161
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_hi.txt235
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_hu.txt211
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_hy.txt46
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_id.txt359
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_it.txt303
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ja.txt127
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_lv.txt172
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_nl.txt119
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_no.txt194
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_pt.txt253
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ro.txt233
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_ru.txt243
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_sv.txt133
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_th.txt119
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/stopwords_tr.txt212
-rw-r--r--solr-8.1.1/server/solr/dash/conf/lang/userdict_ja.txt29
-rw-r--r--solr-8.1.1/server/solr/dash/conf/params.json20
-rw-r--r--solr-8.1.1/server/solr/dash/conf/protwords.txt21
-rw-r--r--solr-8.1.1/server/solr/dash/conf/schema.xml61
-rw-r--r--solr-8.1.1/server/solr/dash/conf/schema.xml~23
-rw-r--r--solr-8.1.1/server/solr/dash/conf/solrconfig.xml1328
-rw-r--r--solr-8.1.1/server/solr/dash/conf/solrconfig.xml~1358
-rw-r--r--solr-8.1.1/server/solr/dash/conf/stopwords.txt14
-rw-r--r--solr-8.1.1/server/solr/dash/conf/synonyms.txt29
-rw-r--r--solr-8.1.1/server/solr/dash/core.properties6
-rw-r--r--solr-8.1.1/server/solr/dash/data/index/write.lock0
-rw-r--r--solr-8.1.1/server/solr/solr.xml56
-rw-r--r--solr-8.1.1/server/solr/zoo.cfg31
-rw-r--r--solr-8.1.1/server/start.jarbin0 -> 160625 bytes
-rw-r--r--solr-8.1.1/server/tmp/start_1162091086783172980.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_2100856759874646244.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_2576004904278670344.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_2971323387275179200.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_3460593255669540278.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_405608392786276922.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_4369196645186488783.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_4663740760277313991.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_4733293799511346628.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_4743562251234760998.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_5229015896118315876.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_5271912985233565832.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_5430857760236735908.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_544112310419136346.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_5597932996249302507.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_5600187431431293204.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_6033597490012985323.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_6505785163785330358.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_6748886024297018280.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_7361894075389096225.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_7478138185329880739.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8093481146562670635.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8121074207568089845.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8126409778075289800.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8282691445249098340.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8630006632336387536.properties11
-rw-r--r--solr-8.1.1/server/tmp/start_8840501328449354697.properties11
-rw-r--r--solr/conf/solrconfig.xml2
-rw-r--r--src/client/DocServer.ts27
-rw-r--r--src/client/apis/youtube/YoutubeBox.scss222
-rw-r--r--src/client/apis/youtube/YoutubeBox.tsx2
-rw-r--r--src/client/cognitive_services/CognitiveServices.ts6
-rw-r--r--src/client/documents/Documents.ts8
-rw-r--r--src/client/util/DictationManager.ts39
-rw-r--r--src/client/util/DragManager.ts7
-rw-r--r--src/client/util/ProsemirrorExampleTransfer.ts4
-rw-r--r--src/client/util/RichTextSchema.tsx11
-rw-r--r--src/client/util/SelectionManager.ts1
-rw-r--r--src/client/util/SerializationHelper.ts5
-rw-r--r--src/client/util/TooltipTextMenu.scss95
-rw-r--r--src/client/util/TooltipTextMenu.tsx305
-rw-r--r--src/client/views/ContextMenu.tsx8
-rw-r--r--src/client/views/DocumentDecorations.tsx5
-rw-r--r--src/client/views/GlobalKeyHandler.ts32
-rw-r--r--src/client/views/Main.scss38
-rw-r--r--src/client/views/MainOverlayTextBox.tsx1
-rw-r--r--src/client/views/MainView.tsx5
-rw-r--r--src/client/views/SearchItem.tsx69
-rw-r--r--src/client/views/TemplateMenu.tsx44
-rw-r--r--src/client/views/collections/CollectionSchemaCells.tsx26
-rw-r--r--src/client/views/collections/CollectionSchemaHeaders.tsx164
-rw-r--r--src/client/views/collections/CollectionSchemaMovableTableHOC.tsx38
-rw-r--r--src/client/views/collections/CollectionSchemaView.scss260
-rw-r--r--src/client/views/collections/CollectionSchemaView.tsx301
-rw-r--r--src/client/views/collections/CollectionStackingView.scss92
-rw-r--r--src/client/views/collections/CollectionStackingView.tsx25
-rw-r--r--src/client/views/collections/CollectionStackingViewFieldColumn.tsx107
-rw-r--r--src/client/views/collections/CollectionSubView.tsx18
-rw-r--r--src/client/views/collections/CollectionTreeView.scss3
-rw-r--r--src/client/views/collections/CollectionTreeView.tsx358
-rw-r--r--src/client/views/collections/CollectionView.tsx18
-rw-r--r--src/client/views/collections/CollectionViewChromes.scss58
-rw-r--r--src/client/views/collections/CollectionViewChromes.tsx65
-rw-r--r--src/client/views/collections/KeyRestrictionRow.tsx6
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss1
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx136
-rw-r--r--src/client/views/collections/collectionFreeForm/MarqueeView.tsx18
-rw-r--r--src/client/views/nodes/CollectionFreeFormDocumentView.tsx1
-rw-r--r--src/client/views/nodes/DocumentView.tsx73
-rw-r--r--src/client/views/nodes/FormattedTextBox.scss2
-rw-r--r--src/client/views/nodes/FormattedTextBox.tsx100
-rw-r--r--src/client/views/nodes/ImageBox.tsx14
-rw-r--r--src/client/views/nodes/LinkEditor.tsx2
-rw-r--r--src/client/views/nodes/LinkMenuGroup.tsx2
-rw-r--r--src/client/views/nodes/VideoBox.tsx10
-rw-r--r--src/client/views/presentationview/PresentationView.scss11
-rw-r--r--src/client/views/presentationview/PresentationView.tsx19
-rw-r--r--src/client/views/search/CheckBox.scss10
-rw-r--r--src/client/views/search/FieldFilters.scss9
-rw-r--r--src/client/views/search/FilterBox.scss89
-rw-r--r--src/client/views/search/FilterBox.tsx117
-rw-r--r--src/client/views/search/IconBar.scss5
-rw-r--r--src/client/views/search/IconButton.scss14
-rw-r--r--src/client/views/search/IconButton.tsx5
-rw-r--r--src/client/views/search/SearchBox.scss5
-rw-r--r--src/client/views/search/SearchItem.tsx122
-rw-r--r--src/client/views/search/SelectorContextMenu.scss1
-rw-r--r--src/client/views/search/ToggleBar.scss9
-rw-r--r--src/client/views/search/ToggleBar.tsx1
-rw-r--r--src/debug/Viewer.tsx3
-rw-r--r--src/new_fields/Doc.ts62
-rw-r--r--src/new_fields/ObjectField.ts3
-rw-r--r--src/new_fields/RichTextField.ts2
-rw-r--r--src/new_fields/SchemaHeaderField.ts38
-rw-r--r--src/new_fields/util.ts3
-rw-r--r--src/scraping/buxton/scraper.py2
-rw-r--r--src/server/authentication/models/current_user_utils.ts2
-rw-r--r--src/server/database.ts56
-rw-r--r--src/server/index.ts187
-rw-r--r--src/server/remapUrl.ts7
1711 files changed, 301358 insertions, 1089 deletions
diff --git a/.gitignore b/.gitignore
index 5d3100dc6..5161268ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@ package-lock.json
dist/
.DS_Store
.env
-ClientUtils.ts \ No newline at end of file
+ClientUtils.ts
+solr-8.1.1/server/
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 822a06024..e4196600e 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -25,10 +25,6 @@
{
"type": "chrome",
"request": "launch",
- "runtimeArgs": [
- "--enable-logging",
- "--v=1"
- ],
"name": "Launch Chrome against Dash server",
"sourceMaps": true,
"breakOnLoad": true,
diff --git a/dash.bat b/dash.bat
new file mode 100644
index 000000000..6fe3a60e3
--- /dev/null
+++ b/dash.bat
@@ -0,0 +1,2 @@
+cd C:\Users\dash\Documents\Dash-Web
+npm start > log.txt 2> log.err
diff --git a/log.err b/log.err
new file mode 100644
index 000000000..95e6a69b3
--- /dev/null
+++ b/log.err
@@ -0,0 +1,10 @@
+npm ERR! code ELIFECYCLE
+npm ERR! errno 1
+npm ERR! dash@1.0.0 start: `ts-node-dev -- src/server/index.ts`
+npm ERR! Exit status 1
+npm ERR!
+npm ERR! Failed at the dash@1.0.0 start script.
+npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
+
+npm ERR! A complete log of this run can be found in:
+npm ERR! C:\Users\dash\AppData\Roaming\npm-cache\_logs\2019-05-20T17_43_29_948Z-debug.log
diff --git a/log.txt b/log.txt
new file mode 100644
index 000000000..6476c26ec
--- /dev/null
+++ b/log.txt
@@ -0,0 +1,5 @@
+
+> dash@1.0.0 start C:\Users\dash\Documents\Dash-Web
+> ts-node-dev -- src/server/index.ts
+
+Using ts-node version 7.0.1, typescript version 3.4.1
diff --git a/output.log b/output.log
new file mode 100644
index 000000000..89aef071b
--- /dev/null
+++ b/output.log
@@ -0,0 +1,37908 @@
+
+> dash@1.0.0 start C:\Users\dash\Documents\Dash-Web
+> nodemon --watch src/server/**/*.ts --exec ts-node src/server/index.ts
+
+[nodemon] 1.18.10
+[nodemon] to restart at any time, enter `rs`
+[nodemon] watching: src/server/**/*.ts
+[nodemon] starting `ts-node src/server/index.ts`
+listening on port 4321
+server started at http://localhost:1050
+i ï½¢atlï½£: Using typescript@3.3.3333 from typescript
+i ï½¢atlï½£: Using tsconfig.json from C:/Users/dash/Documents/Dash-Web/tsconfig.json
+a user has connected
+a user has connected
+a user has connected
+a user has connected
+Stablished connection on mongodb://localhost:27017/Dash
+connected
+a user has connected
+i ï½¢wdmï½£: wait until bundle finished: /__webpack_hmr
+a user has connected
+i ï½¢wdmï½£: wait until bundle finished: /__webpack_hmr
+i ï½¢wdmï½£: wait until bundle finished: /__webpack_hmr
+i ï½¢atlï½£: Checking started in a separate process...
+i ï½¢atlï½£: Time: 12434ms
+a user has connected
+a user has connected
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+webpack built b863fe8bf49137e98490 in 55923ms
+i ï½¢wdmï½£: Hash: b863fe8bf49137e98490
+Version: webpack 4.29.6
+Time: 55923ms
+Built at: 03/22/2019 9:55:12 AM
+ Asset Size Chunks  Chunk Names
+275711e56bd1bc79fdff544a3d7dbfae.png 289 bytes  [emitted]
+718c914a99a2136c01c84e01f63e505a.png 829 bytes  [emitted]
+906f1a1816c2a03b5c7612f6aa2ceece.png 281 bytes  [emitted]
+ assets/env.json 374 bytes  [emitted]
+ bundle.js 8.94 MiB bundle [emitted] bundle
+ bundle.js.map 9.8 MiB bundle [emitted] bundle
+ debug/test.html 257 bytes  [emitted]
+ debug/viewer.html 267 bytes  [emitted]
+e7a34b49f3c49ca0c25c76b30cd09e12.png 445 bytes  [emitted]
+ imageUpload.js 8.9 MiB imageUpload [emitted] imageUpload
+ imageUpload.js.map 9.75 MiB imageUpload [emitted] imageUpload
+ index.html 566 bytes  [emitted]
+ inkControls.js 116 KiB inkControls [emitted] inkControls
+ inkControls.js.map 122 KiB inkControls [emitted] inkControls
+ mobile/image.html 347 bytes  [emitted]
+ mobile/ink.html 264 bytes  [emitted]
+ test.js 1.07 MiB test [emitted] test
+ test.js.map 1.23 MiB test [emitted] test
+ test.pdf 53.6 KiB  [emitted]
+ vendors~pdfjsWorker.js 1.55 MiB vendors~pdfjsWorker [emitted] vendors~pdfjsWorker
+ vendors~pdfjsWorker.js.map 1.87 MiB vendors~pdfjsWorker [emitted] vendors~pdfjsWorker
+ viewer.js 1.68 MiB viewer [emitted] viewer
+ viewer.js.map 1.94 MiB viewer [emitted] viewer
+Entrypoint bundle = bundle.js bundle.js.map
+Entrypoint viewer = viewer.js viewer.js.map
+Entrypoint test = test.js test.js.map
+Entrypoint inkControls = inkControls.js inkControls.js.map
+Entrypoint imageUpload = imageUpload.js imageUpload.js.map
+[10] multi ./src/client/views/Main.tsx webpack-hot-middleware/client?reload=true 40 bytes {bundle} [built]
+[11] multi ./src/debug/Viewer.tsx webpack-hot-middleware/client?reload=true 40 bytes {viewer} [built]
+[12] multi ./src/debug/Test.tsx webpack-hot-middleware/client?reload=true 40 bytes {test} [built]
+[13] multi ./src/mobile/InkControls.tsx webpack-hot-middleware/client?reload=true 40 bytes {inkControls} [built]
+[14] multi ./src/mobile/ImageUpload.tsx webpack-hot-middleware/client?reload=true 40 bytes {imageUpload} [built]
+ [./node_modules/@fortawesome/fontawesome-svg-core/index.es.js] 70.8 KiB {bundle} {imageUpload} [built]
+ [./node_modules/@fortawesome/free-solid-svg-icons/index.es.js] 646 KiB {bundle} {imageUpload} [built]
+ [./node_modules/@fortawesome/react-fontawesome/index.es.js] 12 KiB {bundle} {imageUpload} [built]
+ [./node_modules/mobx-react/index.module.js] 48.4 KiB {bundle} {viewer} {imageUpload} [built]
+ [./node_modules/webpack-hot-middleware/client.js?reload=true] (webpack)-hot-middleware/client.js?reload=true 7.59 KiB {bundle} {viewer} {test} {inkControls} {imageUpload} [built]
+ [./src/client/views/Main.tsx] 25.5 KiB {bundle} [built]
+ [./src/debug/Test.tsx] 1.94 KiB {test} [built]
+ [./src/debug/Viewer.tsx] 9.56 KiB {viewer} [built]
+ [./src/mobile/ImageUpload.tsx] 2.68 KiB {imageUpload} [built]
+ [./src/mobile/InkControls.tsx] 15 bytes {inkControls} [built]
+ + 1016 hidden modules
+i ï½¢wdmï½£: Compiled successfully.
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+a user has connected
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+a user has connected
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+Broadcast : 656a768e-c499-426f-b833-e700c9eede64, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+{ _id: '656a768e-c499-426f-b833-e700c9eede64',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.6066940435503, 162.00747268125428 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+Broadcast : 656a768e-c499-426f-b833-e700c9eede64, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+{ _id: '656a768e-c499-426f-b833-e700c9eede64',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.6066940435503, 162.00747268125428 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+Broadcast : 656a768e-c499-426f-b833-e700c9eede64, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.6066940435503,162.00747268125428]],"_id":"656a768e-c499-426f-b833-e700c9eede64"}
+{ _id: '656a768e-c499-426f-b833-e700c9eede64',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.6066940435503, 162.00747268125428 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-255.0263171264544,338.7471319592495]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -255.0263171264544, 338.7471319592495 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -383.72376179844673, -727.3880485418044 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -383.72376179844673, -727.3880485418044 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -383.72376179844673, -727.3880485418044 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-383.72376179844673,-727.3880485418044]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -383.72376179844673, -727.3880485418044 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1108.9108245317918]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1108.9108245317918 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+a user has connected
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+S sending : e170ebeb-643d-4a91-80ae-95e4c3786b2f, receiving Get Field with data {"_id":"e170ebeb-643d-4a91-80ae-95e4c3786b2f","data":-1,"type":0}
+S sending : 1d63a9fb-2526-4ddf-a420-30c27228f4ec, receiving Get Field with data {"_id":"1d63a9fb-2526-4ddf-a420-30c27228f4ec","data":-1,"type":0}
+S sending : 4d03c98c-7b74-4c00-a030-a8040bdccbe2, receiving Get Field with data {"_id":"4d03c98c-7b74-4c00-a030-a8040bdccbe2","data":-844.6275694030213,"type":0}
+S sending : 12d28809-5f97-4bc9-8d4c-f870a6fd9db3, receiving Get Field with data {"_id":"12d28809-5f97-4bc9-8d4c-f870a6fd9db3","data":-625.361798811575,"type":0}
+S sending : 2ce151b5-db68-432e-8997-9f84f5d004ce, receiving Get Field with data {"_id":"2ce151b5-db68-432e-8997-9f84f5d004ce","data":1004.4200579180002,"type":0}
+S sending : 408eef47-1f73-4423-9ae8-ff7ebe09d7f4, receiving Get Field with data {"_id":"408eef47-1f73-4423-9ae8-ff7ebe09d7f4","data":931.2604785855814,"type":0}
+S sending : 1ef8c71c-a64d-4dc0-ad7b-7605413f001e, receiving Get Field with data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","data":1,"type":0}
+S sending : 122c6209-598c-4788-bb63-6093195155ed, receiving Get Field with data {"_id":"122c6209-598c-4788-bb63-6093195155ed","data":-745.1200493877338,"type":0}
+S sending : 9b4bd2ea-db7f-499a-b90e-bdb74a03bed2, receiving Get Field with data {"_id":"9b4bd2ea-db7f-499a-b90e-bdb74a03bed2","data":272.1369339838917,"type":0}
+S sending : 76f85fb5-ee06-4dcc-aa3e-d65d02a09d2f, receiving Get Field with data {"_id":"76f85fb5-ee06-4dcc-aa3e-d65d02a09d2f","data":520.5971437406347,"type":0}
+S sending : fbc78da9-dfff-4d1f-bdce-fd23d624215d, receiving Get Field with data {"_id":"fbc78da9-dfff-4d1f-bdce-fd23d624215d","data":1047.4665422251326,"type":0}
+S sending : fdb34782-566a-4503-b420-aca62aaaf816, receiving Get Field with data {"_id":"fdb34782-566a-4503-b420-aca62aaaf816","data":1,"type":0}
+S sending : df115f93-9b74-4ecc-a19e-b222563ce499, receiving Get Field with data {"_id":"df115f93-9b74-4ecc-a19e-b222563ce499","data":1,"type":0}
+S sending : a7226718-1943-4647-9a31-3dd5e890a132, receiving Get Field with data {"_id":"a7226718-1943-4647-9a31-3dd5e890a132","data":-41.90824879350832,"type":0}
+S sending : d137e66f-dbc3-41d7-92df-1da1a715b915, receiving Get Field with data {"_id":"d137e66f-dbc3-41d7-92df-1da1a715b915","data":-14.049778719754945,"type":0}
+S sending : 548f3f67-7146-475c-bd55-5e90bdf93831, receiving Get Field with data {"_id":"548f3f67-7146-475c-bd55-5e90bdf93831","data":0.5904900000000001,"type":0}
+S sending : ca4b07b2-0a84-45a2-9305-384677ac153b, receiving Get Field with data {"_id":"ca4b07b2-0a84-45a2-9305-384677ac153b","data":0,"type":0}
+S sending : d1f03f74-9f87-49f0-bccc-ba7e6dba4ea6, receiving Get Field with data {"_id":"d1f03f74-9f87-49f0-bccc-ba7e6dba4ea6","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-229.10791037951532,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":144.68358481938736,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":1,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":23.892089620484683,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":5.683584819387363,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":2,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-576.8937661941777,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-276.63465935070866,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":9,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 300,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 299.5,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+S sending : e170ebeb-643d-4a91-80ae-95e4c3786b2f, receiving Get Field with data {"_id":"e170ebeb-643d-4a91-80ae-95e4c3786b2f","data":-1,"type":0}
+S sending : 1d63a9fb-2526-4ddf-a420-30c27228f4ec, receiving Get Field with data {"_id":"1d63a9fb-2526-4ddf-a420-30c27228f4ec","data":-1,"type":0}
+S sending : 4d03c98c-7b74-4c00-a030-a8040bdccbe2, receiving Get Field with data {"_id":"4d03c98c-7b74-4c00-a030-a8040bdccbe2","data":-844.6275694030213,"type":0}
+S sending : 12d28809-5f97-4bc9-8d4c-f870a6fd9db3, receiving Get Field with data {"_id":"12d28809-5f97-4bc9-8d4c-f870a6fd9db3","data":-625.361798811575,"type":0}
+S sending : 2ce151b5-db68-432e-8997-9f84f5d004ce, receiving Get Field with data {"_id":"2ce151b5-db68-432e-8997-9f84f5d004ce","data":1004.4200579180002,"type":0}
+S sending : 408eef47-1f73-4423-9ae8-ff7ebe09d7f4, receiving Get Field with data {"_id":"408eef47-1f73-4423-9ae8-ff7ebe09d7f4","data":931.2604785855814,"type":0}
+S sending : 122c6209-598c-4788-bb63-6093195155ed, receiving Get Field with data {"_id":"122c6209-598c-4788-bb63-6093195155ed","data":-745.1200493877338,"type":0}
+S sending : 9b4bd2ea-db7f-499a-b90e-bdb74a03bed2, receiving Get Field with data {"_id":"9b4bd2ea-db7f-499a-b90e-bdb74a03bed2","data":272.1369339838917,"type":0}
+S sending : 76f85fb5-ee06-4dcc-aa3e-d65d02a09d2f, receiving Get Field with data {"_id":"76f85fb5-ee06-4dcc-aa3e-d65d02a09d2f","data":520.5971437406347,"type":0}
+S sending : 1ef8c71c-a64d-4dc0-ad7b-7605413f001e, receiving Get Field with data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","data":1,"type":0}
+S sending : fbc78da9-dfff-4d1f-bdce-fd23d624215d, receiving Get Field with data {"_id":"fbc78da9-dfff-4d1f-bdce-fd23d624215d","data":1047.4665422251326,"type":0}
+S sending : fdb34782-566a-4503-b420-aca62aaaf816, receiving Get Field with data {"_id":"fdb34782-566a-4503-b420-aca62aaaf816","data":1,"type":0}
+S sending : df115f93-9b74-4ecc-a19e-b222563ce499, receiving Get Field with data {"_id":"df115f93-9b74-4ecc-a19e-b222563ce499","data":1,"type":0}
+S sending : a7226718-1943-4647-9a31-3dd5e890a132, receiving Get Field with data {"_id":"a7226718-1943-4647-9a31-3dd5e890a132","data":-41.90824879350832,"type":0}
+S sending : d137e66f-dbc3-41d7-92df-1da1a715b915, receiving Get Field with data {"_id":"d137e66f-dbc3-41d7-92df-1da1a715b915","data":-14.049778719754945,"type":0}
+S sending : 548f3f67-7146-475c-bd55-5e90bdf93831, receiving Get Field with data {"_id":"548f3f67-7146-475c-bd55-5e90bdf93831","data":0.5904900000000001,"type":0}
+S sending : ca4b07b2-0a84-45a2-9305-384677ac153b, receiving Get Field with data {"_id":"ca4b07b2-0a84-45a2-9305-384677ac153b","data":0,"type":0}
+S sending : d1f03f74-9f87-49f0-bccc-ba7e6dba4ea6, receiving Get Field with data {"_id":"d1f03f74-9f87-49f0-bccc-ba7e6dba4ea6","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-229.10791037951532,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":144.68358481938736,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":23.892089620484683,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":1,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":5.683584819387363,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":2,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-576.8937661941777,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-276.63465935070866,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":9,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -1136.0905950885317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 684.0149954975665, -1104.7293213692164 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,-1085.9125571376271]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,-1085.9125571376271]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,-1085.9125571376271]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,-1085.9125571376271]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 750.9190460987726, -1085.9125571376271 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4635555864987, -1075.4587992311888 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 773.9173134929371, -1065.0050413247502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 776.0080650742249, -1054.5512834183119 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 778.0988166555125, -1035.7345191867225 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 778.0988166555125, -1008.5547486299827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 767.6450587490741, -966.7397170042289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 738.3745366110464, -901.9264179843105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 702.8317597291556, -776.4813231070491 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.12746434275437,-382.5621635850033]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.12746434275437,-382.5621635850033]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.12746434275437,-382.5621635850033]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.12746434275437,-382.5621635850033]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 117.12746434275437, -382.5621635850033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 650.5629701969634, -602.9489418601709 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.67370643631602,-169.30550229365906]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.67370643631602,-169.30550229365906]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.67370643631602,-169.30550229365906]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.67370643631602,-169.30550229365906]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 106.67370643631602, -169.30550229365906 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 650.5629701969634, -602.9489418601709 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,121.30896750532986]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,121.30896750532986]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,121.30896750532986]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,121.30896750532986]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 179.8500117813851, 121.30896750532986 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[713.2855176355941,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[713.2855176355941,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[713.2855176355941,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[713.2855176355941,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 713.2855176355941, -99.0778107698377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, -4.99398961189172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1033.1705095726106,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1033.1705095726106,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1033.1705095726106,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1033.1705095726106,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1033.1705095726106, 82.8175768021913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-846.4151620050224,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-846.4151620050224,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-846.4151620050224,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-846.4151620050224,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -846.4151620050224, 118.36035368408193 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-705.9280224924123,472.91134019725405]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-705.9280224924123,472.91134019725405]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-705.9280224924123,472.91134019725405]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-705.9280224924123,472.91134019725405]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -705.9280224924123, 472.91134019725405 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-733.514576615487,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-733.514576615487,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-733.514576615487,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-733.514576615487,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -733.514576615487, 128.8141115905205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1246954386987,483.5334586816707]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1246954386987,483.5334586816707]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1246954386987,483.5334586816707]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1246954386987,483.5334586816707]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -288.1246954386987, 483.5334586816707 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, 135.08636633438346 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,455.20780938989355]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,455.20780938989355]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,455.20780938989355]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,455.20780938989355]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4113425215137, 455.20780938989355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -202.4636749684139, 118.36035368408193 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4650345185296,356.06803686867306]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4650345185296,356.06803686867306]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4650345185296,356.06803686867306]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4650345185296,356.06803686867306]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4650345185296, 356.06803686867306 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,59.819309408026584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,59.819309408026584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,59.819309408026584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,59.819309408026584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 134.1473296189041, 59.819309408026584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.49393587957616,190.30376968782355]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.49393587957616,190.30376968782355]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.49393587957616,190.30376968782355]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.49393587957616,190.30376968782355]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -81.49393587957616, 190.30376968782355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 451.9415699746329, -30.08300858734401 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.8534769930559,102.49220327374053]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.8534769930559,102.49220327374053]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.8534769930559,102.49220327374053]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.8534769930559,102.49220327374053]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 133.8534769930559, 102.49220327374053 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, -117.89457500142703 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[223.7557949884265,52.314165322836175]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[223.7557949884265,52.314165322836175]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[223.7557949884265,52.314165322836175]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[223.7557949884265,52.314165322836175]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 223.7557949884265, 52.314165322836175 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, -117.89457500142703 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.39105605744044,27.22514634738377]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.39105605744044,27.22514634738377]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.39105605744044,27.22514634738377]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.39105605744044,27.22514634738377]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 238.39105605744044, 27.22514634738377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 771.8265619116495, -193.1616319277838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.6650434071389,6.317630534506861]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.6650434071389,6.317630534506861]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.6650434071389,6.317630534506861]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.6650434071389,6.317630534506861]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 221.6650434071389, 6.317630534506861 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 755.100549261348, -214.0691477406607 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.39625387494652,-4.1361273719314795]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.39625387494652,-4.1361273719314795]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.39625387494652,-4.1361273719314795]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.39625387494652,-4.1361273719314795]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.39625387494652, -4.1361273719314795 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 702.8317597291556, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.85694220472669,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.85694220472669,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.85694220472669,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.85694220472669,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 87.85694220472669, -20.862140022233007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 621.2924480589357, -241.24891829740056 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-20.862140022233007]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.04017797313759, -20.862140022233007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 621.2924480589357, -241.24891829740056 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[66.94942639184978,-22.952891603520698]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[66.94942639184978,-22.952891603520698]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[66.94942639184978,-22.952891603520698]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[66.94942639184978,-22.952891603520698]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 66.94942639184978, -22.952891603520698 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -243.33966987868826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-25.04364318480839]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-25.04364318480839]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-25.04364318480839]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-25.04364318480839]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 64.8586748105622, -25.04364318480839 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 598.2941806647713, -245.43042145997595 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.7679232292744,-33.40664950995915]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.7679232292744,-33.40664950995915]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.7679232292744,-33.40664950995915]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.7679232292744,-33.40664950995915]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[596.2034290834835,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[596.2034290834835,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[596.2034290834835,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[596.2034290834835,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 62.7679232292744, -33.40664950995915 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 596.2034290834835, -253.7934277851267 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548256,-43.86040741639761]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548256,-43.86040741639761]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548256,-43.86040741639761]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548256,-43.86040741639761]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.223413741548256, -43.86040741639761 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 583.6589195957573, -264.24718569156516 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382211,-56.40491690412375]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382211,-56.40491690412375]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382211,-56.40491690412375]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382211,-56.40491690412375]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 37.67890425382211, -56.40491690412375 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 583.6589195957573, -264.24718569156516 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671347,-62.677171647986825]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671347,-62.677171647986825]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671347,-62.677171647986825]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671347,-62.677171647986825]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671347, -62.677171647986825 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 562.7514037828804, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.04364318480839,-66.8586748105622]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.04364318480839,-66.8586748105622]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.04364318480839,-66.8586748105622]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.04364318480839,-66.8586748105622]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 23.04364318480839, -66.8586748105622 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 556.4791490390174, -287.24545308572976 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.952891603520584,-68.9494263918499]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.952891603520584,-68.9494263918499]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.952891603520584,-68.9494263918499]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.952891603520584,-68.9494263918499]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 20.952891603520584, -68.9494263918499 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 554.3883974577296, -289.33620466701745 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-71.04017797313759]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-71.04017797313759]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-71.04017797313759]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-71.04017797313759]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 18.862140022233007, -71.04017797313759 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, -291.42695624830515 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-75.22168113571297]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-75.22168113571297]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-75.22168113571297]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-75.22168113571297]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 14.680636859657625, -75.22168113571297 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 548.1161427138667, -295.6084594108805 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.499133697082243,-81.49393587957604]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.499133697082243,-81.49393587957604]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.499133697082243,-81.49393587957604]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.499133697082243,-81.49393587957604]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 10.499133697082243, -81.49393587957604 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 543.9346395512913, -301.8807141547436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794439,-83.58468746086373]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794439,-83.58468746086373]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794439,-83.58468746086373]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794439,-83.58468746086373]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.408382115794439, -83.58468746086373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 541.8438879700035, -303.9714657360313 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.1361273719314795,-91.9476937860145]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.1361273719314795,-91.9476937860145]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.1361273719314795,-91.9476937860145]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.1361273719314795,-91.9476937860145]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 2.1361273719314795, -91.9476937860145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -312.33447206118205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.317630534507089,-108.67370643631602]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.317630534507089,-108.67370643631602]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.317630534507089,-108.67370643631602]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.317630534507089,-108.67370643631602]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -8.317630534507089, -108.67370643631602 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 525.117875319702, -329.0604847114836 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.49913369708247,-119.12746434275448]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.49913369708247,-119.12746434275448]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.49913369708247,-119.12746434275448]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.49913369708247,-119.12746434275448]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -12.49913369708247, -119.12746434275448 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 520.9363721571266, -339.51424261792204 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-129.58122224919293]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-129.58122224919293]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-129.58122224919293]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-129.58122224919293]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.95289160352081, -129.58122224919293 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 510.48261425068824, -349.9680005243605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-27.134394766096193,-140.0349801556314]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-27.134394766096193,-140.0349801556314]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-27.134394766096193,-140.0349801556314]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-27.134394766096193,-140.0349801556314]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -27.134394766096193, -140.0349801556314 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 506.30111108811286, -360.42175843079895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,-146.30723489949446]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,-146.30723489949446]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,-146.30723489949446]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,-146.30723489949446]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.315897928671575, -146.30723489949446 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, -366.694013174662 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -33.40664950995938, -148.39798648078215 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, -368.7847647559497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+Broadcast : 7a7aea92-cb93-4425-9eea-80a42bd4e0a1, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995938,-148.39798648078215]],"_id":"7a7aea92-cb93-4425-9eea-80a42bd4e0a1"}
+{ _id: '7a7aea92-cb93-4425-9eea-80a42bd4e0a1',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -33.40664950995938, -148.39798648078215 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, -368.7847647559497 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ 'eff68660-351e-44d1-974f-f984cb56f652' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,369.25054343860484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,369.25054343860484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,369.25054343860484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,369.25054343860484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 523.0271237384144, 369.25054343860484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,367.15979185731703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,367.15979185731703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,367.15979185731703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[520.9363721571266,367.15979185731703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 520.9363721571266, 367.15979185731703 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 518.845620575839, 362.97828869474165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,335.7985181380018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,335.7985181380018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,335.7985181380018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,335.7985181380018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 489.57509843781133, 335.7985181380018 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,283.5297286058094]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,283.5297286058094]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,283.5297286058094]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,283.5297286058094]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 433.1248057430438, 283.5297286058094 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 349.49474249153616, 220.8071811671789 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 257.50167291487776, 158.08463372854817 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[770.5464468414739,395.0158046448669]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[770.5464468414739,395.0158046448669]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[770.5464468414739,395.0158046448669]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[770.5464468414739,395.0158046448669]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 770.5464468414739, 395.0158046448669 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, 82.8175768021913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[582.88902028345,260.46897050892517]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[582.88902028345,260.46897050892517]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[582.88902028345,260.46897050892517]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[582.88902028345,260.46897050892517]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 582.88902028345, 260.46897050892517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,3.369016713259043]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,3.369016713259043]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,3.369016713259043]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,3.369016713259043]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 27.518998973231987, 3.369016713259043 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[377.5280629180654,111.75931172709488]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[377.5280629180654,111.75931172709488]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[377.5280629180654,111.75931172709488]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[377.5280629180654,111.75931172709488]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 377.5280629180654, 111.75931172709488 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -93.74459274145408, -84.44254970082397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.38829039684515,-1.543285440013733]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.38829039684515,-1.543285440013733]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.38829039684515,-1.543285440013733]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.38829039684515,-1.543285440013733]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 278.38829039684515, -1.543285440013733 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -152.28563701750932, -151.34660030202986 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.73699181329084,-97.14235179976185]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.73699181329084,-97.14235179976185]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.73699181329084,-97.14235179976185]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.73699181329084,-97.14235179976185]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 221.73699181329084, -97.14235179976185 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -185.73766231811237, -207.79689299679762 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4113425215137, -238.77059825864785 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -185.73766231811237, -207.79689299679762 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-274.1776598733693]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-274.1776598733693]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-274.1776598733693]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4113425215137,-274.1776598733693]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4113425215137, -274.1776598733693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -202.4636749684139, -312.33447206118205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.95204868298583, -334.36966461839575 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -200.3729233871262, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.49275484445798,-337.9103707798679]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.49275484445798,-337.9103707798679]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.49275484445798,-337.9103707798679]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.49275484445798,-337.9103707798679]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 200.49275484445798, -337.9103707798679 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -198.28217180583852, -349.9680005243605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-344.9917831028122]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-344.9917831028122]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-344.9917831028122]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.95204868298583,-344.9917831028122]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.95204868298583, -344.9917831028122 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -200.3729233871262, -354.1495036869359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.2485178756251,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.2485178756251,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.2485178756251,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.2485178756251,-334.36966461839575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 179.2485178756251, -334.36966461839575 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -210.82668129356466, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.00428090679202,-309.58472148809074]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.00428090679202,-309.58472148809074]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.00428090679202,-309.58472148809074]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.00428090679202,-309.58472148809074]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 158.00428090679202, -309.58472148809074 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -223.3711907812908, -333.24198787405896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.76004393795915,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.76004393795915,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.76004393795915,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.76004393795915,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 136.76004393795915, -288.34048451925787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -235.91570026901695, -320.6974783863328 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.05651313059843, -267.096247550425 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -308.1529688986067 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-252.93342290453643]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-252.93342290453643]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-252.93342290453643]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-252.93342290453643]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.97510080765414, -252.93342290453643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -250.5509613380308, -299.7899625734559 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-242.31130442012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-242.31130442012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-242.31130442012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.97510080765414,-242.31130442012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.97510080765414, -242.31130442012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -250.5509613380308, -299.7899625734559 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,-238.77059825864785]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 108.434394646182, -238.77059825864785 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -252.64171291931848, -291.42695624830515 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,-228.14847977423142]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,-228.14847977423142]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,-228.14847977423142]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,-228.14847977423142]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 101.35298232323771, -228.14847977423142 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.73086383882128,-224.60777361275927]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.73086383882128,-224.60777361275927]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.73086383882128,-224.60777361275927]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.73086383882128,-224.60777361275927]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 90.73086383882128, -224.60777361275927 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -263.09547082575693, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.10874535440485,-221.06706745128713]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.10874535440485,-221.06706745128713]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.10874535440485,-221.06706745128713]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.10874535440485,-221.06706745128713]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 80.10874535440485, -221.06706745128713 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-269.36772556962,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-269.36772556962,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-269.36772556962,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-269.36772556962,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -269.36772556962, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 62.405214547044125, -206.90424280539833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.82148347605846, -272.6101920167159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-203.36353664392618]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-203.36353664392618]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-203.36353664392618]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-203.36353664392618]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 30.538859093794827, -203.36353664392618 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -298.6382477076477, -270.51944043542824 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-185.66000583656546]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-185.66000583656546]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-185.66000583656546]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-185.66000583656546]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -29.653145651231853, -185.66000583656546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -334.1810245895383, -260.0656825289898 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-178.57859351362117]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-178.57859351362117]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-178.57859351362117]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-178.57859351362117]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -57.97879494300901, -178.57859351362117 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -255.8841793664144 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -75.68232575036973, -171.49718119067688 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, -251.70267620383902 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.00797504214688,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.00797504214688,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.00797504214688,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.00797504214688,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -104.00797504214688, -160.87506270626045 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -378.0868077965798, -245.43042145997595 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -128.792918172452, -157.3343565447883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -392.72206886559366, -243.33966987868826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.6592736257013,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.6592736257013,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.6592736257013,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.6592736257013,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -160.6592736257013, -139.63082573742759 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -232.8859119722498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.06633524042275,-125.46800109153901]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.06633524042275,-125.46800109153901]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.06633524042275,-125.46800109153901]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.06633524042275,-125.46800109153901]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.06633524042275, -125.46800109153901 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -432.4463489100598, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.4733968551443,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.4733968551443,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.4733968551443,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.4733968551443,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -231.4733968551443, -111.30517644565043 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -453.3538647229367, -216.1598993219484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.3397523083936,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.3397523083936,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.3397523083936,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.3397523083936,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -263.3397523083936, -111.30517644565043 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.5025769542822,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.5025769542822,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.5025769542822,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.5025769542822,-111.30517644565043]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -277.5025769542822, -111.30517644565043 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-281.0432831157543,-114.84588260712258]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-281.0432831157543,-114.84588260712258]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -480.5336352796766, -216.1598993219484 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -472.17062895452585, -216.1598993219484 ] ],
+ type: 14 }
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -277.5025769542822, -111.30517644565043 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-281.0432831157543,-114.84588260712258]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-281.0432831157543,-114.84588260712258]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.206107761643,-121.92729493006686]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.206107761643,-121.92729493006686]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.98739318611507,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.98739318611507,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.2875200845873,-129.00870725301115]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.2875200845873,-129.00870725301115]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-495.16889634869045,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-495.16889634869045,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -281.0432831157543, -114.84588260712258 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.98739318611507,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.98739318611507,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.206107761643,-121.92729493006686]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.206107761643,-121.92729493006686]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -490.98739318611507, -222.43215406581135 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -490.98739318611507, -222.43215406581135 ] ],
+ type: 14 }
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -295.206107761643, -121.92729493006686 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-495.16889634869045,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-495.16889634869045,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -495.16889634869045, -226.61365722838673 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.2875200845873,-129.00870725301115]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.2875200845873,-129.00870725301115]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1538755378366,-150.25294422184402]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1538755378366,-150.25294422184402]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1538755378366,-150.25294422184402]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1538755378366,-150.25294422184402]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -334.1538755378366, -150.25294422184402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -495.16889634869045, -226.61365722838673 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.3167001837252,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.3167001837252,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.3167001837252,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.3167001837252,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -348.3167001837252, -157.3343565447883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -522.3486669054305, -243.33966987868826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.8218288669718,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.8218288669718,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.8218288669718,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.8218288669718,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.8218288669718, 156.70621724004786 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.34588028286316,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.34588028286316,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.34588028286316,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.34588028286316,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.34588028286316, -171.49718119067688 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -522.3486669054305, -243.33966987868826 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[240.95547341372253,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[240.95547341372253,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[240.95547341372253,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[240.95547341372253,156.70621724004786]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 240.95547341372253, 156.70621724004786 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.59011725169603,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.59011725169603,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.59011725169603,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.59011725169603,-171.49718119067688]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -415.59011725169603, -171.49718119067688 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-562.0729469498965,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-562.0729469498965,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-562.0729469498965,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-562.0729469498965,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -562.0729469498965, -251.70267620383902 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[235.6444141715143,162.01727648225597]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[235.6444141715143,162.01727648225597]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[235.6444141715143,162.01727648225597]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[235.6444141715143,162.01727648225597]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 235.6444141715143, 162.01727648225597 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.1308234131682,-167.95647502920474]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.1308234131682,-167.95647502920474]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.1308234131682,-167.95647502920474]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.1308234131682,-167.95647502920474]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -419.1308234131682, -167.95647502920474 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-249.61192462255133]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-249.61192462255133]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-249.61192462255133]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-249.61192462255133]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -564.1636985311842, -249.61192462255133 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.08911796047312,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.08911796047312,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.08911796047312,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.08911796047312,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.08911796047312, 172.63939496667263 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-436.8343542205289,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-436.8343542205289,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-436.8343542205289,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-436.8343542205289,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -436.8343542205289, -160.87506270626045 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-574.6174564376226,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-574.6174564376226,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-574.6174564376226,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-574.6174564376226,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -574.6174564376226, -245.43042145997595 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.46699947605669,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.46699947605669,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.46699947605669,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.46699947605669,172.63939496667263]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 198.46699947605669, 172.63939496667263 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-443.9157665434732,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-443.9157665434732,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-443.9157665434732,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-443.9157665434732,-160.87506270626045]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -443.9157665434732, -160.87506270626045 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -578.798959600198, -245.43042145997595 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.22276250722382,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.22276250722382,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.22276250722382,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.22276250722382,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 177.22276250722382, 183.26151345108883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-458.0785911893619,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-458.0785911893619,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-458.0785911893619,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-458.0785911893619,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -458.0785911893619, -153.79365038331616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-587.1619659253488,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-587.1619659253488,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -578.798959600198, -245.43042145997595 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-587.1619659253488,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-587.1619659253488,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.6006440228074,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.6006440228074,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.6006440228074,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.6006440228074,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 166.6006440228074, 183.26151345108883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.16000351230616,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.16000351230616,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.16000351230616,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.16000351230616,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -587.1619659253488, -241.24891829740056 ] ],
+ type: 14 }
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -465.16000351230616, -153.79365038331616 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.28958478059917,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.28958478059917,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.28958478059917,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.28958478059917,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.28958478059917, 183.26151345108883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-468.7007096737783,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-468.7007096737783,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-468.7007096737783,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-468.7007096737783,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -468.7007096737783, -153.79365038331616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -593.4342206692119, -241.24891829740056 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.97852553839095, 183.26151345108883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -472.24141583525045, -153.79365038331616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -593.4342206692119, -241.24891829740056 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.66746629618262,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.66746629618262,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.66746629618262,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.66746629618262,183.26151345108883]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 150.66746629618262, 183.26151345108883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.7821219967226,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.7821219967226,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.7821219967226,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.7821219967226,-153.79365038331616]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -475.7821219967226, -153.79365038331616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-597.6157238317872,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-597.6157238317872,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-597.6157238317872,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-597.6157238317872,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,177.95045420888073]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,177.95045420888073]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 150.66746629618262, 183.26151345108883 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -597.6157238317872, -241.24891829740056 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,177.95045420888073]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.97852553839095,177.95045420888073]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.24141583525045,-157.3343565447883]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -472.24141583525045, -157.3343565447883 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-595.5249722504996,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -595.5249722504996, -243.33966987868826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.15594023384847,167.32833572446407]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.15594023384847,167.32833572446407]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.15594023384847,167.32833572446407]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.15594023384847,167.32833572446407]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.15594023384847, 167.32833572446407 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.4564727049453,-164.4157688677326]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.4564727049453,-164.4157688677326]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.4564727049453,-164.4157688677326]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.4564727049453,-164.4157688677326]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -447.4564727049453, -164.4157688677326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.8897111814857,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.8897111814857,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.8897111814857,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.8897111814857,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -580.8897111814857, -247.52117304126364 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+Broadcast : 4148a220-4c31-4bf3-98be-b79e1a6a0a79, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{ _id: '4148a220-4c31-4bf3-98be-b79e1a6a0a79',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":369.2378877983132}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":369.2378877983132}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":369.2378877983132}
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-460.1379163726946}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-460.1379163726946}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-460.1379163726946}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -276.63465935070866,
+ type: 0 }
+Incoming : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Set Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+calling update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+called update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,98.39619896193904]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,98.39619896193904]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-460.1379163726946}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-460.1379163726946}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480' ],
+ type: 1 }
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -576.8937661941777,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":369.2378877983132}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":369.2378877983132}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+Broadcast : cc496f45-ce13-4ce5-859c-215d8634bc61, sending data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+{ _id: 'cc496f45-ce13-4ce5-859c-215d8634bc61', data: 2, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,98.39619896193904]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,98.39619896193904]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -580.8897111814857, -247.52117304126364 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.64714114868502, 98.39619896193904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.64714114868502,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.64714114868502, 101.53232633387051 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 445.66931523076994, -393.873783731402 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[445.66931523076994,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.51101377675377,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.51101377675377,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.51101377675377,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.51101377675377,101.53232633387051]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 110.51101377675377, 101.53232633387051 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 443.57856364948213, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.9665042890274,104.668453705802]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.9665042890274,104.668453705802]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.9665042890274,104.668453705802]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.9665042890274,104.668453705802]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.9665042890274, 104.668453705802 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 435.21555732433137, -389.6922805688266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.01361268550681,110.94070844966518]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.01361268550681,110.94070844966518]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.01361268550681,110.94070844966518]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.01361268550681,110.94070844966518]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 76.01361268550681, 110.94070844966518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 420.58029625531765, -385.51077740625124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.060721081986,126.6213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.060721081986,126.6213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.060721081986,126.6213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.060721081986,126.6213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 54.060721081986, 126.6213453093228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[405.9450351863037,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[405.9450351863037,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[405.9450351863037,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[405.9450351863037,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 405.9450351863037, -375.0570194998128 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.699447362670753,132.89360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.699447362670753,132.89360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.699447362670753,132.89360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.699447362670753,132.89360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 22.699447362670753, 132.89360005318576 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 385.0375193734268, -370.8755163372374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 347.40399091024835, -360.42175843079895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 282.59069189033005, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.96236124465793, -322.7882299676205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[519.1563093769514,-284.7997783577857]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[519.1563093769514,-284.7997783577857]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[519.1563093769514,-284.7997783577857]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[519.1563093769514,-284.7997783577857]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 519.1563093769514, -284.7997783577857 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -10.114529489946449, -318.6067268050451 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,-267.096247550425]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 126.13792545354272, -267.096247550425 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -242.18795501288002, -308.1529688986067 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,-270.63695371189715]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,-270.63695371189715]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,-270.63695371189715]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,-270.63695371189715]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.7016837396834, -270.63695371189715 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -290.2752413824969, -310.24372047989436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.60091342742544,-295.42189684220216]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.60091342742544,-295.42189684220216]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.60091342742544,-295.42189684220216]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.60091342742544,-295.42189684220216]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -68.60091342742544, -295.42189684220216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -357.1792919837029, -324.8789815489082 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.68232575036973,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -75.68232575036973, -298.9626030036743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, -326.9697331301959 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.14161958889758,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.14161958889758,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.14161958889758,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.14161958889758,-298.9626030036743]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.14161958889758, -298.9626030036743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-326.9697331301959]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -359.2700435649906, -326.9697331301959 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,-288.34048451925787]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -65.0602072659533, -288.34048451925787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -320.6974783863328 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-263.55554138895286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-263.55554138895286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-263.55554138895286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-57.97879494300901,-263.55554138895286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -57.97879494300901, -263.55554138895286 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -306.062217317319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-29.653145651231853,-206.90424280539833]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -29.653145651231853, -206.90424280539833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -306.062217317319 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.2132098020176727,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.2132098020176727,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.2132098020176727,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.2132098020176727,-139.63082573742759]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 2.2132098020176727, -139.63082573742759 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -315.3642603579492, -232.8859119722498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-86.52023331534542]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-86.52023331534542]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-86.52023331534542]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.538859093794827,-86.52023331534542]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 30.538859093794827, -86.52023331534542 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -298.6382477076477, -201.52463825293455 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-36.950347054735175]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-36.950347054735175]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-36.950347054735175]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.405214547044125,-36.950347054735175]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 62.405214547044125, -36.950347054735175 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.82148347605846, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.02733303146056,-12.165403924430166]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.02733303146056,-12.165403924430166]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.02733303146056,-12.165403924430166]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.02733303146056,-12.165403924430166]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.02733303146056, -12.165403924430166 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-273.5492287321954,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-273.5492287321954,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-273.5492287321954,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-273.5492287321954,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -273.5492287321954, -157.61885504589304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.64945151587699,5.538126882930555]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.64945151587699,5.538126882930555]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.64945151587699,5.538126882930555]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.64945151587699,5.538126882930555]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.64945151587699, 5.538126882930555 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -273.5492287321954, -157.61885504589304 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.19015767734913,9.0788330444027]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.19015767734913,9.0788330444027]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.19015767734913,9.0788330444027]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[87.19015767734913,9.0788330444027]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 87.19015767734913, 9.0788330444027 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -265.1862224070446, -145.0743455581669 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.27157000029342,16.160245367346988]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.27157000029342,16.160245367346988]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.27157000029342,16.160245367346988]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.27157000029342,16.160245367346988]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.27157000029342, 16.160245367346988 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -261.00471924446924, -140.89284239559152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,23.241657690291277]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,23.241657690291277]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,23.241657690291277]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.35298232323771,23.241657690291277]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 101.35298232323771, 23.241657690291277 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -136.71133923301613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.89368848470986,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.89368848470986,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.89368848470986,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.89368848470986,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.89368848470986, 33.86377617470771 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -254.73246450060617, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,40.945188497652]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,40.945188497652]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,40.945188497652]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.434394646182,40.945188497652]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 108.434394646182, 40.945188497652 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -254.73246450060617, -130.43908448915317 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 115.51580696912629, 48.026600820596286 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -248.4602097567431, -122.07607816400241 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,51.56730698206843]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,51.56730698206843]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,51.56730698206843]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.51580696912629,51.56730698206843]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 115.51580696912629, 51.56730698206843 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -248.4602097567431, -119.9853265827146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.05651313059843, 58.64871930501272 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -115.80382342013922 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,69.27083778942915]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,69.27083778942915]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,69.27083778942915]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,69.27083778942915]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.05651313059843, 69.27083778942915 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -109.53156867627627 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,108.21860556562274]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,108.21860556562274]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,108.21860556562274]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.05651313059843,108.21860556562274]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.05651313059843, 108.21860556562274 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -109.53156867627627 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.59721929207058,133.00354869592798]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.59721929207058,133.00354869592798]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.59721929207058,133.00354869592798]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.59721929207058,133.00354869592798]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 122.59721929207058, 133.00354869592798 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -244.27870659416772, -71.89804021309783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.13792545354272,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 126.13792545354272, 136.54425485740012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -242.18795501288002, -69.80728863181002 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.219337776487,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.219337776487,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.219337776487,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.219337776487,136.54425485740012]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 133.219337776487, 136.54425485740012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -238.00645185030464, -69.80728863181002 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.0856932297363,125.92213637298369]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.0856932297363,125.92213637298369]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.0856932297363,125.92213637298369]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.0856932297363,125.92213637298369]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 165.0856932297363, 125.92213637298369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -76.07954337567321 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+Broadcast : 4148a220-4c31-4bf3-98be-b79e1a6a0a79, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{ _id: '4148a220-4c31-4bf3-98be-b79e1a6a0a79',
+ data: [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":456.3797253934889}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":456.3797253934889}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":456.3797253934889}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 23.892089620484683,
+ type: 0 }
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-142.89770251998084}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-142.89770251998084}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-142.89770251998084}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-142.89770251998084}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-142.89770251998084}
+Incoming : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Set Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+calling update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+called update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[539.7531363887159,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[539.7531363887159,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -142.89770251998084,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":456.3797253934889}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":456.3797253934889}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+Broadcast : a59882d7-3daf-4574-b38e-4673bbac7db8, sending data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+{ _id: 'a59882d7-3daf-4574-b38e-4673bbac7db8', data: 3, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[539.7531363887159,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[539.7531363887159,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 539.7531363887159, -71.89804021309783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -73.9887917943854 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-73.9887917943854]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -73.9887917943854 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, -80.26104653824859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 433.1248057430438, -90.71480444468693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 341.1317361663854, -94.89630760726232 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-94.89630760726232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -94.89630760726232 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[728.0579729038081,72.8115439509013]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[728.0579729038081,72.8115439509013]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[728.0579729038081,72.8115439509013]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[728.0579729038081,72.8115439509013]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 728.0579729038081, 72.8115439509013 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.2398138060272, -107.44081709498846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.534190892535,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.534190892535,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.534190892535,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.534190892535,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.534190892535, 65.73013162795701 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.38678423380952,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.38678423380952,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.38678423380952,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.38678423380952,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -16.38678423380952, -111.62232025756384 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[289.0104088812616,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[289.0104088812616,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[289.0104088812616,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[289.0104088812616,65.73013162795701]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 289.0104088812616, 65.73013162795701 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-146.01338227364624,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-146.01338227364624,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -16.38678423380952, -111.62232025756384 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-146.01338227364624,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-146.01338227364624,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.67863161501487,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.67863161501487,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.67863161501487,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.67863161501487,58.64871930501272]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 129.67863161501487, 58.64871930501272 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -146.01338227364624, -111.62232025756384 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.7016837396834,48.026600820596286]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.7016837396834, 48.026600820596286 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -290.2752413824969, -122.07607816400241 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.835328286434105,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.835328286434105,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.835328286434105,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.835328286434105,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.835328286434105, 33.86377617470771 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[5.753915963489817,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[5.753915963489817,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[5.753915963489817,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[5.753915963489817,33.86377617470771]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 5.753915963489817, 33.86377617470771 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -313.2735087766615, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-15.490321005343276,55.108013143540575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-15.490321005343276,55.108013143540575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-15.490321005343276,55.108013143540575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-15.490321005343276,55.108013143540575]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -15.490321005343276, 55.108013143540575 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -313.2735087766615, -130.43908448915317 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-117.89457500142703]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.356676458592574,101.13719324267845]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.356676458592574,101.13719324267845]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.356676458592574,101.13719324267845]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.356676458592574,101.13719324267845]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -47.356676458592574, 101.13719324267845 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.81801826438755, -117.89457500142703 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,143.6256671803444]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,143.6256671803444]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,143.6256671803444]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.0602072659533,143.6256671803444]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -65.0602072659533, 143.6256671803444 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -65.62578546923464 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.51625845930175,45.212656721309486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.51625845930175,45.212656721309486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.51625845930175,45.212656721309486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.51625845930175,45.212656721309486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 218.51625845930175, 45.212656721309486 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.76373807331402,175.4920226335937]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.76373807331402,175.4920226335937]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.76373807331402,175.4920226335937]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.76373807331402,175.4920226335937]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -82.76373807331402, 175.4920226335937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -365.5422983088537, -46.80902123764554 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,77.07901217455856]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,77.07901217455856]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,196.73625960242657]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,196.73625960242657]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,196.73625960242657]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,196.73625960242657]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,114.25642687001618]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,114.25642687001618]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 218.51625845930175, 45.212656721309486 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,77.07901217455856]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,77.07901217455856]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -365.5422983088537, -46.80902123764554 ] ],
+ type: 14 }
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -100.46726888067474, 196.73625960242657 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,221.52120273273158]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,221.52120273273158]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,114.25642687001618]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,114.25642687001618]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -100.46726888067474, 196.73625960242657 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,221.52120273273158]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,221.52120273273158]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 165.4056660372196, 114.25642687001618 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-19.629250680905443]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-19.629250680905443]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-19.629250680905443]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-19.629250680905443]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -386.4498141217306, -19.629250680905443 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,146.1227823232657]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,146.1227823232657]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,146.1227823232657]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,146.1227823232657]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.47248831059483, 146.1227823232657 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,242.76543970156445]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,242.76543970156445]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,242.76543970156445]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,242.76543970156445]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,156.74490080768192]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,156.74490080768192]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,249.84685202450873]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,249.84685202450873]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -128.792918172452, 242.76543970156445 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -392.72206886559366, -7.084741193179298 ] ],
+ type: 14 }
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.47248831059483, 146.1227823232657 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,156.74490080768192]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,156.74490080768192]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,249.84685202450873]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,249.84685202450873]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,162.05596004989047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,162.05596004989047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -392.72206886559366, -7.084741193179298 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -132.33362433392415, 249.84685202450873 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,162.05596004989047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,162.05596004989047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.16142906838672, 162.05596004989047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,253.38755818598088]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,253.38755818598088]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-0.8124864493163386]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-0.8124864493163386]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -132.33362433392415, 249.84685202450873 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,253.38755818598088]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,253.38755818598088]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.81282044688135, -2.903238030603916 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-0.8124864493163386]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-0.8124864493163386]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,177.98913777651524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,177.98913777651524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,177.98913777651524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,177.98913777651524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.16142906838672, 177.98913777651524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,264.0096766703973]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,264.0096766703973]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,264.0096766703973]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,264.0096766703973]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -132.33362433392415, 264.0096766703973 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.81282044688135, 5.459768294546848 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.16142906838672, 193.92231550313954 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -132.33362433392415, 274.631795154814 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.81282044688135, 11.732023038409807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,204.5444339875562]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,204.5444339875562]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,204.5444339875562]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.16142906838672,204.5444339875562]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.16142906838672, 204.5444339875562 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,281.71320747775826]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,281.71320747775826]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -132.33362433392415, 274.631795154814 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.81282044688135, 11.732023038409807 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,281.71320747775826]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-132.33362433392415,281.71320747775826]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.47248831059483,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.47248831059483, 209.8554932297643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.792918172452,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -128.792918172452, 285.2539136392302 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -392.72206886559366, 18.004277782272993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.78354755280316,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.78354755280316,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.78354755280316,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.78354755280316,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 154.78354755280316, 209.8554932297643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.25221201097986,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.25221201097986,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.25221201097986,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.25221201097986,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -125.25221201097986, 285.2539136392302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -390.63131728430596, 18.004277782272993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.09460679501126,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.09460679501126,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.09460679501126,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.09460679501126,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 160.09460679501126, 209.8554932297643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-121.7115058495076,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-121.7115058495076,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-121.7115058495076,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-121.7115058495076,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -121.7115058495076, 285.2539136392302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -390.63131728430596, 18.004277782272993 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4056660372196,209.8554932297643]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 165.4056660372196, 209.8554932297643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.17079968803546,285.2539136392302]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -118.17079968803546, 285.2539136392302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -386.4498141217306, 18.004277782272993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[191.96096224826078,193.92231550313954]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 191.96096224826078, 193.92231550313954 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-100.46726888067474,274.631795154814]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -100.46726888067474, 274.631795154814 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -375.9960562152921, 11.732023038409807 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+called update on data {"type":1,"data":[],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+Broadcast : 4148a220-4c31-4bf3-98be-b79e1a6a0a79, sending data {"type":1,"data":[],"_id":"4148a220-4c31-4bf3-98be-b79e1a6a0a79"}
+{ _id: '4148a220-4c31-4bf3-98be-b79e1a6a0a79',
+ data: [],
+ type: 1 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":367.61755125083175}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":367.61755125083175}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":367.61755125083175}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":114.80354030818512}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":114.80354030818512}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":114.80354030818512}
+Incoming : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Set Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":4}
+calling update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":4}
+called update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":4}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":4}
+Broadcast : e3b590f8-23f0-4feb-831d-cbc9a516828a, sending data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":4}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,114.09967808144893]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,114.09967808144893]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: 144.68358481938736,
+ type: 0 }
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -229.10791037951532,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":114.80354030818512}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":114.80354030818512}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":367.61755125083175}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":367.61755125083175}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,114.09967808144893]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,114.09967808144893]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 112.94151859797603, 114.09967808144893 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'e3b590f8-23f0-4feb-831d-cbc9a516828a', data: 4, type: 0 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 443.57856364948213, 191.53665902915122 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,110.96355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,110.96355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,110.96355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,110.96355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 112.94151859797603, 110.96355070951768 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 443.57856364948213, 189.44590744786342 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,104.69129596565426]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,104.69129596565426]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,104.69129596565426]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,104.69129596565426]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 112.94151859797603, 104.69129596565426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 443.57856364948213, 185.26440428528804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,98.4190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,98.4190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,98.4190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.94151859797603,98.4190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 112.94151859797603, 98.4190412217913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 443.57856364948213, 185.26440428528804 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[443.57856364948213,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.80539122604432,76.46614961827072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.80539122604432,76.46614961827072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.80539122604432,76.46614961827072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.80539122604432,76.46614961827072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 109.80539122604432, 76.46614961827072 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 441.48781206819456, 166.44764005369893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.2608817383184,57.64938538668139]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.2608817383184,57.64938538668139]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.2608817383184,57.64938538668139]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.2608817383184,57.64938538668139]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.2608817383184, 57.64938538668139 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 433.1248057430438, 153.9031305659728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17186276286589,13.743602179639993]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17186276286589,13.743602179639993]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17186276286589,13.743602179639993]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17186276286589,13.743602179639993]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 72.17186276286589, 13.743602179639993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[416.39879309274227,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[416.39879309274227,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[416.39879309274227,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[416.39879309274227,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 416.39879309274227, 124.63260842794512 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 395.49127727986536, 80.72682522090349 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[374.58376146698845,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[374.58376146698845,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[374.58376146698845,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[374.58376146698845,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 374.58376146698845, 24.276532526135952 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[359.9485003979745,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[359.9485003979745,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[359.9485003979745,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[359.9485003979745,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 359.9485003979745, -32.17376016863159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 353.67624565411154, -78.17029495696079 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[349.49474249153616,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 349.49474249153616, -126.25758132657779 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 343.222487747673, -186.88937718392071 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 339.0409845850976, -262.1564341102775 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 324.40572351608387, -352.0587521056482 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -506.7743691209372 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -517.2281270273756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -531.8633880963895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -548.589400746691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -594.5859355350201 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-598.7674386975955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-598.7674386975955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-598.7674386975955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-598.7674386975955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -598.7674386975955 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -602.9489418601709 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -611.3119481853216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, -615.493451347897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, -619.6749545104724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -621.7657060917601 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -619.6749545104724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -617.5842029291847 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-609.2211966040339]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-609.2211966040339]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-609.2211966040339]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-609.2211966040339]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -609.2211966040339 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 324.40572351608387, -531.8633880963895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 353.67624565411154, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.7465557591499419,85.85168947421289]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.7465557591499419,85.85168947421289]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.7465557591499419,85.85168947421289]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.7465557591499419,85.85168947421289]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.7465557591499419, 85.85168947421289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 370.40225830441307, -402.23679005655265 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.65233896619134,189.34389274795353]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.65233896619134,189.34389274795353]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.65233896619134,189.34389274795353]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.65233896619134,189.34389274795353]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.65233896619134, 189.34389274795353 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 399.67278044244074, -333.24198787405896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 433.1248057430438, -257.9749309477021 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 495.8473531816743, -140.89284239559152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 592.0219259209081, 11.732023038409807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.3780018227172,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.3780018227172,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.3780018227172,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.3780018227172,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 692.3780018227172, 166.44764005369893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,310.7094991625495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,310.7094991625495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,310.7094991625495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,310.7094991625495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 786.4618229806632, 310.7094991625495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 851.2751220005815, 411.0655750643584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, 425.7008361333724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 872.1826378134584, 444.5176003649615 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,448.69910352753686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,448.69910352753686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,448.69910352753686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,448.69910352753686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 872.1826378134584, 448.69910352753686 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,444.5176003649615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 872.1826378134584, 444.5176003649615 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,442.4268487836739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,442.4268487836739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,442.4268487836739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,442.4268487836739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 868.001134650883, 442.4268487836739 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 865.9103830695955, 440.3360972023861 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,438.2453456210985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,438.2453456210985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,438.2453456210985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,438.2453456210985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 861.7288799070201, 438.2453456210985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 857.5473767444447, 434.06384245852314 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,429.88233929594776]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,429.88233929594776]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,429.88233929594776]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,429.88233929594776]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 847.0936188380061, 429.88233929594776 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,425.7008361333724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 840.8213640941432, 425.7008361333724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,423.6100845520846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,423.6100845520846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,423.6100845520846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,423.6100845520846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 838.7306125128554, 423.6100845520846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,421.519332970797]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,421.519332970797]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,421.519332970797]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,421.519332970797]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 834.5491093502802, 421.519332970797 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,419.4285813895092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,419.4285813895092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,419.4285813895092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,419.4285813895092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 830.3676061877048, 419.4285813895092 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 417.3378298082216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, 415.2470782269338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 822.0045998625541, 415.2470782269338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,415.2470782269338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 415.2470782269338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 813.6415935374033, 413.15632664564623 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,413.15632664564623]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, 413.15632664564623 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 807.3693387935401, 411.0655750643584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 803.1878356309647, 411.0655750643584 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-177.8328791249096}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-177.8328791249096}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-177.8328791249096}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-177.8328791249096}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-177.8328791249096}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -177.8328791249096,
+ type: 0 }
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-361.0601056028569}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-361.0601056028569}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-361.0601056028569}
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563', data: 0, type: 0 }
+calling update on data {"type":6,"data":"200 200","_id":"556ff045-29eb-4227-93c1-f320df3da3b3"}
+called update on data {"type":6,"data":"200 200","_id":"556ff045-29eb-4227-93c1-f320df3da3b3"}
+undefined
+null
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","556ff045-29eb-4227-93c1-f320df3da3b3"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","556ff045-29eb-4227-93c1-f320df3da3b3"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":-90.69104152973387}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":-90.69104152973387}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":-90.69104152973387}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-43.81989175014314}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-43.81989175014314}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-43.81989175014314}
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"type":6,"data":"200 200","_id":"255415d7-52dd-4a1f-8b8f-4503a6f56771"}
+called update on data {"type":6,"data":"200 200","_id":"255415d7-52dd-4a1f-8b8f-4503a6f56771"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","255415d7-52dd-4a1f-8b8f-4503a6f56771"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","255415d7-52dd-4a1f-8b8f-4503a6f56771"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-179.45321567239102}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-179.45321567239102}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-179.45321567239102}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":213.88135107802282}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":213.88135107802282}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":213.88135107802282}
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"type":6,"data":"200 200","_id":"6dfbd194-3fc7-406f-afdf-4da660582c3f"}
+called update on data {"type":6,"data":"200 200","_id":"6dfbd194-3fc7-406f-afdf-4da660582c3f"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","6dfbd194-3fc7-406f-afdf-4da660582c3f"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","6dfbd194-3fc7-406f-afdf-4da660582c3f"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+calling update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+called update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+calling update on data {"type":5,"data":[],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+called update on data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":6,"data":"a nested collection","_id":"3e1524fe-0745-4105-b122-a9681eefb5c7"}
+called update on data {"type":6,"data":"a nested collection","_id":"3e1524fe-0745-4105-b122-a9681eefb5c7"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Incoming : 43636484-5d3d-4eea-a347-161c47d23692, receiving Set Field with data {"_id":"43636484-5d3d-4eea-a347-161c47d23692","type":0,"data":1}
+calling update on data {"_id":"43636484-5d3d-4eea-a347-161c47d23692","type":0,"data":1}
+called update on data {"_id":"43636484-5d3d-4eea-a347-161c47d23692","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":6,"data":"Transparent","_id":"66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"}
+called update on data {"type":6,"data":"Transparent","_id":"66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":12,"data":{},"_id":"1f54d151-88ac-4e79-9053-1e656f25428a"}
+called update on data {"type":12,"data":{},"_id":"1f54d151-88ac-4e79-9053-1e656f25428a"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"],["59b58624-916f-50a0-8efa-7003a805bfad","1f54d151-88ac-4e79-9053-1e656f25428a"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"],["59b58624-916f-50a0-8efa-7003a805bfad","1f54d151-88ac-4e79-9053-1e656f25428a"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+calling update on data {"type":5,"data":[],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : 7533f60b-3a1d-4529-8b59-6e030277ca70, receiving Set Field with data {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","type":0,"data":290.9536982154808}
+calling update on data {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","type":0,"data":290.9536982154808}
+called update on data {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","type":0,"data":290.9536982154808}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : 7f7d3044-52af-4af8-9745-175eff2ac608, receiving Set Field with data {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","type":0,"data":-609.2211966040339}
+calling update on data {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","type":0,"data":-609.2211966040339}
+called update on data {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","type":0,"data":-609.2211966040339}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : bae0c4d9-0d4d-49fe-8200-83479aaf807a, receiving Set Field with data {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","type":0,"data":512.2341374154839}
+calling update on data {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","type":0,"data":512.2341374154839}
+called update on data {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","type":0,"data":512.2341374154839}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : f97d59e2-5f74-4ad2-a851-8c048690c3b1, receiving Set Field with data {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","type":0,"data":1020.2867716683925}
+calling update on data {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","type":0,"data":1020.2867716683925}
+called update on data {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","type":0,"data":1020.2867716683925}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : 73837ad4-e23b-488a-a4c9-efa84099a4a0, receiving Set Field with data {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","type":0,"data":0}
+calling update on data {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","type":0,"data":0}
+called update on data {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : c57f1577-c377-4dba-9b89-db6763c17fee, receiving Set Field with data {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","type":0,"data":0}
+calling update on data {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","type":0,"data":0}
+called update on data {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : 24c48da4-b92d-48b0-bdec-36a464c6cfbe, receiving Set Field with data {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","type":0,"data":-1}
+calling update on data {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","type":0,"data":-1}
+called update on data {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","type":0,"data":-1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -460.1379163726946,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-361.0601056028569}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-361.0601056028569}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"556ff045-29eb-4227-93c1-f320df3da3b3"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"556ff045-29eb-4227-93c1-f320df3da3b3"}
+Broadcast : 556ff045-29eb-4227-93c1-f320df3da3b3, sending data {"type":6,"data":"200 200","_id":"556ff045-29eb-4227-93c1-f320df3da3b3"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","556ff045-29eb-4227-93c1-f320df3da3b3"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+Broadcast : 3f886fd6-7d94-445f-88ab-0e1077dbf480, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","556ff045-29eb-4227-93c1-f320df3da3b3"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+{ _id: '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '8af1e1a7-3da5-4c53-a314-f0b6c892d9a6' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '4233a5b1-f703-44d8-a4f1-55a230db04e7' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '8a50fbb3-768f-4f03-84b5-fc84aaa4f21c' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '672c99e2-ba2a-419b-9f06-903d9aeba563' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'cc496f45-ce13-4ce5-859c-215d8634bc61' ],
+ [ 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ '3a9af79b-cca5-4901-bf0a-1a657e5fdb98' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '026d1b3e-debe-4e63-8a93-54ebd635b78e' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '556ff045-29eb-4227-93c1-f320df3da3b3' ] ],
+ type: 5 }
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 456.3797253934889,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":-90.69104152973387}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":-90.69104152973387}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-43.81989175014314}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-43.81989175014314}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b', data: 0, type: 0 }
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -43.81989175014314,
+ type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"255415d7-52dd-4a1f-8b8f-4503a6f56771"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"255415d7-52dd-4a1f-8b8f-4503a6f56771"}
+Broadcast : 255415d7-52dd-4a1f-8b8f-4503a6f56771, sending data {"type":6,"data":"200 200","_id":"255415d7-52dd-4a1f-8b8f-4503a6f56771"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","255415d7-52dd-4a1f-8b8f-4503a6f56771"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+Broadcast : 80586583-40b0-4d17-9f6f-12c4bf633d3a, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","255415d7-52dd-4a1f-8b8f-4503a6f56771"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '571ecd75-8263-47fc-9741-f9f876a4b2da' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '9d04275c-0bc8-4e43-8142-034824b2deae' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f2822f08-9fd6-4816-ba61-0dc0ea45a0c0' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '9ffe2a20-7fcb-4460-aa91-922b69f91e24' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'd7d79305-cd6b-4653-a173-1284f76f5773' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'a59882d7-3daf-4574-b38e-4673bbac7db8' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '255415d7-52dd-4a1f-8b8f-4503a6f56771' ] ],
+ type: 5 }
+{ _id: '255415d7-52dd-4a1f-8b8f-4503a6f56771',
+ data: '200 200',
+ type: 6 }
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ 'eff68660-351e-44d1-974f-f984cb56f652' ],
+ type: 1 }
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: 367.61755125083175,
+ type: 0 }
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: 114.80354030818512,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":213.88135107802282}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":213.88135107802282}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-179.45321567239102}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-179.45321567239102}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6dfbd194-3fc7-406f-afdf-4da660582c3f"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"6dfbd194-3fc7-406f-afdf-4da660582c3f"}
+Broadcast : 6dfbd194-3fc7-406f-afdf-4da660582c3f, sending data {"type":6,"data":"200 200","_id":"6dfbd194-3fc7-406f-afdf-4da660582c3f"}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830', data: 0, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","6dfbd194-3fc7-406f-afdf-4da660582c3f"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+Broadcast : 6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","6dfbd194-3fc7-406f-afdf-4da660582c3f"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+Broadcast : 0dc04257-8187-4391-a1bf-a63c30a9e922, sending data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{ _id: '0dc04257-8187-4391-a1bf-a63c30a9e922',
+ data: {},
+ type: 12 }
+{ _id: '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'b681f3b1-5d7b-40e8-bc74-ab179b8cae4d' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '47f3540c-7ded-4c5a-a35e-67b8770c7564' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9c48c01b-ff87-4633-ab32-620bbe191b04' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '7d5ef008-d5df-4ce3-9755-0c11310c5830' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '42373536-4991-4b59-aaf5-34559e43adef' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '9a0e2341-8c47-4d60-84ec-5fa6158164b1' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'e3b590f8-23f0-4feb-831d-cbc9a516828a' ],
+ [ 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ '3585fbf3-f32c-497f-aae6-9afcba185724' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '77d74b99-31c4-47b2-9d57-1138275216b7' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '6dfbd194-3fc7-406f-afdf-4da660582c3f' ] ],
+ type: 5 }
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data: [],
+ type: 5 }
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data: [],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+Broadcast : de45525d-8038-4a2d-b9e6-215889896c7f, sending data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+Broadcast : de45525d-8038-4a2d-b9e6-215889896c7f, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"3e1524fe-0745-4105-b122-a9681eefb5c7"}],"ok":1}
+Wrote {"type":6,"data":"a nested collection","_id":"3e1524fe-0745-4105-b122-a9681eefb5c7"}
+Broadcast : 3e1524fe-0745-4105-b122-a9681eefb5c7, sending data {"type":6,"data":"a nested collection","_id":"3e1524fe-0745-4105-b122-a9681eefb5c7"}
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'de45525d-8038-4a2d-b9e6-215889896c7f' ] ],
+ type: 5 }
+{ _id: 'de45525d-8038-4a2d-b9e6-215889896c7f',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+{ _id: '3e1524fe-0745-4105-b122-a9681eefb5c7',
+ data: 'a nested collection',
+ type: 6 }
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'de45525d-8038-4a2d-b9e6-215889896c7f' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"43636484-5d3d-4eea-a347-161c47d23692"}],"ok":1}
+Wrote {"_id":"43636484-5d3d-4eea-a347-161c47d23692","type":0,"data":1}
+Broadcast : 43636484-5d3d-4eea-a347-161c47d23692, sending data {"_id":"43636484-5d3d-4eea-a347-161c47d23692","type":0,"data":1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"}],"ok":1}
+Wrote {"type":6,"data":"Transparent","_id":"66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"}
+Broadcast : 66f8dc12-4cb2-45a2-9d66-e86681ff3bdf, sending data {"type":6,"data":"Transparent","_id":"66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{ _id: '66f8dc12-4cb2-45a2-9d66-e86681ff3bdf',
+ data: 'Transparent',
+ type: 6 }
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'de45525d-8038-4a2d-b9e6-215889896c7f' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '3e1524fe-0745-4105-b122-a9681eefb5c7' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '43636484-5d3d-4eea-a347-161c47d23692' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ '66f8dc12-4cb2-45a2-9d66-e86681ff3bdf' ] ],
+ type: 5 }
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'de45525d-8038-4a2d-b9e6-215889896c7f' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '3e1524fe-0745-4105-b122-a9681eefb5c7' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '43636484-5d3d-4eea-a347-161c47d23692' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ '66f8dc12-4cb2-45a2-9d66-e86681ff3bdf' ] ],
+ type: 5 }
+undefined
+null
+{ _id: '377fa87a-6cfd-45e1-b24c-4ba286971304',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'de45525d-8038-4a2d-b9e6-215889896c7f' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '3e1524fe-0745-4105-b122-a9681eefb5c7' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '43636484-5d3d-4eea-a347-161c47d23692' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ '66f8dc12-4cb2-45a2-9d66-e86681ff3bdf' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"],["59b58624-916f-50a0-8efa-7003a805bfad","1f54d151-88ac-4e79-9053-1e656f25428a"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+Broadcast : 377fa87a-6cfd-45e1-b24c-4ba286971304, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","de45525d-8038-4a2d-b9e6-215889896c7f"],["51529209-4838-51c5-a520-0044fddf139c","3e1524fe-0745-4105-b122-a9681eefb5c7"],["771c0a88-bd02-5e92-953f-e9042a191928","43636484-5d3d-4eea-a347-161c47d23692"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","66f8dc12-4cb2-45a2-9d66-e86681ff3bdf"],["59b58624-916f-50a0-8efa-7003a805bfad","1f54d151-88ac-4e79-9053-1e656f25428a"]],"_id":"377fa87a-6cfd-45e1-b24c-4ba286971304"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"1f54d151-88ac-4e79-9053-1e656f25428a"}],"ok":1}
+Wrote {"type":12,"data":{},"_id":"1f54d151-88ac-4e79-9053-1e656f25428a"}
+Broadcast : 1f54d151-88ac-4e79-9053-1e656f25428a, sending data {"type":12,"data":{},"_id":"1f54d151-88ac-4e79-9053-1e656f25428a"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70"}],"ok":1}
+Wrote {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","type":0,"data":290.9536982154808}
+Broadcast : 7533f60b-3a1d-4529-8b59-6e030277ca70, sending data {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","type":0,"data":290.9536982154808}
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ] ],
+ type: 5 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ] ],
+ type: 5 }
+{ _id: '7533f60b-3a1d-4529-8b59-6e030277ca70',
+ data: 290.9536982154808,
+ type: 0 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"7f7d3044-52af-4af8-9745-175eff2ac608"}],"ok":1}
+Wrote {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","type":0,"data":-609.2211966040339}
+Broadcast : 7f7d3044-52af-4af8-9745-175eff2ac608, sending data {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","type":0,"data":-609.2211966040339}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a"}],"ok":1}
+Wrote {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","type":0,"data":512.2341374154839}
+Broadcast : bae0c4d9-0d4d-49fe-8200-83479aaf807a, sending data {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","type":0,"data":512.2341374154839}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{ _id: 'bae0c4d9-0d4d-49fe-8200-83479aaf807a',
+ data: 512.2341374154839,
+ type: 0 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ] ],
+ type: 5 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ] ],
+ type: 5 }
+undefined
+null
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1"}],"ok":1}
+Wrote {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","type":0,"data":1020.2867716683925}
+Broadcast : f97d59e2-5f74-4ad2-a851-8c048690c3b1, sending data {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","type":0,"data":1020.2867716683925}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0"}],"ok":1}
+Wrote {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","type":0,"data":0}
+Broadcast : 73837ad4-e23b-488a-a4c9-efa84099a4a0, sending data {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"c57f1577-c377-4dba-9b89-db6763c17fee"}],"ok":1}
+Wrote {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","type":0,"data":0}
+Broadcast : c57f1577-c377-4dba-9b89-db6763c17fee, sending data {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","type":0,"data":0}
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f97d59e2-5f74-4ad2-a851-8c048690c3b1' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '73837ad4-e23b-488a-a4c9-efa84099a4a0' ] ],
+ type: 5 }
+{ _id: '73837ad4-e23b-488a-a4c9-efa84099a4a0', data: 0, type: 0 }
+{ _id: 'c57f1577-c377-4dba-9b89-db6763c17fee', data: 0, type: 0 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f97d59e2-5f74-4ad2-a851-8c048690c3b1' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '73837ad4-e23b-488a-a4c9-efa84099a4a0' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe"}],"ok":1}
+Wrote {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","type":0,"data":-1}
+Broadcast : 24c48da4-b92d-48b0-bdec-36a464c6cfbe, sending data {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '8ae9adfb-f612-47f5-85d8-a345666ba66b' ],
+ type: 1 }
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f97d59e2-5f74-4ad2-a851-8c048690c3b1' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '73837ad4-e23b-488a-a4c9-efa84099a4a0' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'c57f1577-c377-4dba-9b89-db6763c17fee' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '24c48da4-b92d-48b0-bdec-36a464c6cfbe' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,411.0655750643584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 803.1878356309647, 411.0655750643584 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+called update on data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+Broadcast : 16efd95d-6944-4771-be9b-c925a7f96bfd, sending data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+{ _id: '16efd95d-6944-4771-be9b-c925a7f96bfd',
+ data: [],
+ type: 1 }
+calling update on data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+called update on data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+Broadcast : 16efd95d-6944-4771-be9b-c925a7f96bfd, sending data {"type":1,"data":[],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+{ _id: '16efd95d-6944-4771-be9b-c925a7f96bfd',
+ data: [],
+ type: 1 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f97d59e2-5f74-4ad2-a851-8c048690c3b1' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '73837ad4-e23b-488a-a4c9-efa84099a4a0' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'c57f1577-c377-4dba-9b89-db6763c17fee' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '24c48da4-b92d-48b0-bdec-36a464c6cfbe' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '16efd95d-6944-4771-be9b-c925a7f96bfd' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}],"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":1,"data":["19228090-c099-41b1-bbc0-eb68ac81e816"],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+called update on data {"type":1,"data":["19228090-c099-41b1-bbc0-eb68ac81e816"],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,408.97482348307085]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,408.97482348307085]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.0263171264544,507.05263425290855]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 253.0263171264544, 507.05263425290855 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["19228090-c099-41b1-bbc0-eb68ac81e816"],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+Broadcast : 16efd95d-6944-4771-be9b-c925a7f96bfd, sending data {"type":1,"data":["19228090-c099-41b1-bbc0-eb68ac81e816"],"_id":"16efd95d-6944-4771-be9b-c925a7f96bfd"}
+{ _id: '16efd95d-6944-4771-be9b-c925a7f96bfd',
+ data: [ '19228090-c099-41b1-bbc0-eb68ac81e816' ],
+ type: 1 }
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 253.0263171264544, 507.05263425290855 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,408.97482348307085]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,408.97482348307085]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 801.0970840496772, 408.97482348307085 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,383.88580450761856]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,383.88580450761856]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,383.88580450761856]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[807.3693387935401,383.88580450761856]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 807.3693387935401, 383.88580450761856 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,362.97828869474165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 362.97828869474165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,319.07250548770025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,319.07250548770025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,319.07250548770025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[840.8213640941432,319.07250548770025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 840.8213640941432, 319.07250548770025 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 861.7288799070201, 266.80371595550787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 872.1826378134584, 216.62567800460351 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, 143.44937265953422 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 838.7306125128554, 82.8175768021913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.66331080130362,111.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.66331080130362,111.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.66331080130362,111.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.66331080130362,111.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 244.66331080130362, 111.90058538953531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 792.7340777245264, 13.822774619697611 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,80.53931167021983]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,80.53931167021983]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,80.53931167021983]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,80.53931167021983]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 215.39278866327595, 80.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4635555864987, -17.538499099617866 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.03151494396047,47.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.03151494396047,47.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.03151494396047,47.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.03151494396047,47.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.03151494396047, 47.08728636961678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4635555864987, -17.538499099617866 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.39798648078204,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.39798648078204,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.39798648078204,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.39798648078204,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.39798648078204, 19.90751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 694.4687534040048, -78.17029495696079 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.21821592404217,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.21821592404217,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.21821592404217,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.21821592404217,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.21821592404217, -1 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, -99.0778107698377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.21994852987768,-21.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.21994852987768,-21.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.21994852987768,-21.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.21994852987768,-21.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 96.21994852987768, -21.90751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-119.9853265827146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 644.2907154531005, -119.9853265827146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.67543904215154,-34.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.67543904215154,-34.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.67543904215154,-34.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.67543904215154,-34.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.67543904215154, -34.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[631.7462059653743,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[631.7462059653743,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[631.7462059653743,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[631.7462059653743,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 631.7462059653743, -132.52983607044075 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-49.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-49.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-49.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-49.08728636961678]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.22168113571297, -49.08728636961678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 631.7462059653743, -132.52983607044075 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-65.8132990199183]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-65.8132990199183]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-65.8132990199183]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-65.8132990199183]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 62.76792322927463, -65.8132990199183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 610.8386901524974, -163.891109789756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-84.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-84.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-84.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-84.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.223413741548484, -84.63006325150764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 598.2941806647713, -182.70787402134533 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,-107.62833064567224]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,-107.62833064567224]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,-107.62833064567224]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,-107.62833064567224]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, -107.62833064567224 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -205.70614141550993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-124.35434329597365]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-124.35434329597365]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-124.35434329597365]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[14.680636859657625,-124.35434329597365]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 14.680636859657625, -124.35434329597365 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 562.7514037828804, -222.43215406581135 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-2.0453757906439023,-126.44509487726134]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-2.0453757906439023,-126.44509487726134]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-2.0453757906439023,-126.44509487726134]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-2.0453757906439023,-126.44509487726134]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -2.0453757906439023, -126.44509487726134 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 546.0253911325789, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,-130.62659803983672]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,-130.62659803983672]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,-130.62659803983672]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,-130.62659803983672]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -12.499133697082243, -130.62659803983672 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -228.70440880967442 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-132.7173496211244]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-132.7173496211244]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-132.7173496211244]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-132.7173496211244]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -14.589885278370048, -132.7173496211244 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 533.4808816448527, -230.7951603909621 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-134.8081012024121]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-134.8081012024121]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-134.8081012024121]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-134.8081012024121]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -14.589885278370048, -134.8081012024121 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 533.4808816448527, -232.8859119722498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-4.1361273719314795,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-4.1361273719314795,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-4.1361273719314795,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-4.1361273719314795,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -4.1361273719314795, -143.17110752756287 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 543.9346395512913, -241.24891829740056 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.86040741639772,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.86040741639772,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.86040741639772,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.86040741639772,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 41.86040741639772, -180.8046359907413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 589.9311743396205, -278.882446760579 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-210.07515812876898]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-210.07515812876898]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-210.07515812876898]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-210.07515812876898]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.22168113571297, -210.07515812876898 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 621.2924480589357, -308.1529688986067 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.58295485502845,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.58295485502845,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.58295485502845,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.58295485502845,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.58295485502845, -224.7104191977828 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 652.6537217782512, -322.7882299676205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.57948964335742,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.57948964335742,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.57948964335742,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.57948964335742,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 150.57948964335742, -241.43643184808434 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 698.6502565665802, -339.51424261792204 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-241.43643184808434]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.57775703752213, -241.43643184808434 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 721.6485239607449, -339.51424261792204 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.48527285039904,-237.25492868550896]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.48527285039904,-237.25492868550896]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.48527285039904,-237.25492868550896]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.48527285039904,-237.25492868550896]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 194.48527285039904, -237.25492868550896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 721.6485239607449, -339.51424261792204 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[204.93903075683738,-233.07342552293358]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[204.93903075683738,-233.07342552293358]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[204.93903075683738,-233.07342552293358]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[204.93903075683738,-233.07342552293358]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 204.93903075683738, -233.07342552293358 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 753.0097976800602, -331.1512362927713 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.39278866327595,-224.7104191977828]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 215.39278866327595, -224.7104191977828 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4635555864987, -322.7882299676205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[227.9372981510021,-212.16590971005667]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[227.9372981510021,-212.16590971005667]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[227.9372981510021,-212.16590971005667]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[227.9372981510021,-212.16590971005667]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 227.9372981510021, -212.16590971005667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 776.0080650742249, -310.24372047989436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.11880131357748, -207.98440654748129 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 776.0080650742249, -310.24372047989436 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.30030447615286,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.30030447615286,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.30030447615286,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.30030447615286,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.30030447615286, -199.62140022233052 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[784.3710713993756,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[784.3710713993756,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 780.1895682368003, -306.062217317319 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[784.3710713993756,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[784.3710713993756,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.11880131357748,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.11880131357748, -195.43989705975514 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 780.1895682368003, -293.51770782959284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.30203708198815,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.30203708198815,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.30203708198815,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.30203708198815,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 213.30203708198815, -195.43989705975514 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 761.3728040052109, -293.51770782959284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[179.8500117813851,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 179.8500117813851, -199.62140022233052 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 727.9207787046079, -297.6992109921682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-199.62140022233052]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.6685086188097, -199.62140022233052 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 727.9207787046079, -297.6992109921682 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.6685086188097,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.6685086188097, -197.53064864104283 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 723.7392755420325, -297.6992109921682 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[723.7392755420325,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.57775703752213, -197.53064864104283 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 721.6485239607449, -295.6084594108805 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.30550229365895,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.30550229365895,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.30550229365895,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.30550229365895,-195.43989705975514]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 167.30550229365895, -195.43989705975514 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[715.3762692168817,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[715.3762692168817,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[715.3762692168817,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[715.3762692168817,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 715.3762692168817, -293.51770782959284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.48700545623433,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.48700545623433,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.48700545623433,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.48700545623433,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.48700545623433, -197.53064864104283 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 719.5577723794571, -295.6084594108805 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.757527594262,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.757527594262,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.757527594262,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[200.757527594262,-207.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 200.757527594262, -207.98440654748129 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 719.5577723794571, -295.6084594108805 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[884.7271473011846,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[884.7271473011846,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[884.7271473011846,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[884.7271473011846,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 884.7271473011846, -322.7882299676205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[987.1739747842815,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[987.1739747842815,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[987.1739747842815,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[987.1739747842815,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 987.1739747842815, -333.24198787405896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1012.2629937597338,569.9626952422229]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1012.2629937597338,569.9626952422229]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1012.2629937597338,569.9626952422229]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1012.2629937597338,569.9626952422229]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1012.2629937597338, 569.9626952422229 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,710.0430511884981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,710.0430511884981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,710.0430511884981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,710.0430511884981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 688.1964986601419, 710.0430511884981 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,768.5840954645535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,768.5840954645535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,768.5840954645535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,768.5840954645535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, 768.5840954645535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,797.8546176025811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,797.8546176025811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,797.8546176025811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,797.8546176025811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.70223474164277, 797.8546176025811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,795.7638660212933]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,795.7638660212933]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,795.7638660212933]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,795.7638660212933]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.883737904218151, 795.7638660212933 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,787.4008596961426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,787.4008596961426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,787.4008596961426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,787.4008596961426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.791253717094946, 787.4008596961426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,756.0395859768273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,756.0395859768273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,756.0395859768273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,756.0395859768273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.69703692413657, 756.0395859768273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-70.74632534728948,705.8615480259227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-70.74632534728948,705.8615480259227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-70.74632534728948,705.8615480259227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-70.74632534728948,705.8615480259227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -70.74632534728948, 705.8615480259227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-263.09547082575693,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -263.09547082575693, 697.498541700772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-449.1723615603613,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-449.1723615603613,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-449.1723615603613,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-449.1723615603613,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -449.1723615603613, 697.498541700772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, 701.6800448633473 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-754.422092428364,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-754.422092428364,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-754.422092428364,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-754.422092428364,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -754.422092428364, 701.6800448633473 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-907.0469578623653,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-907.0469578623653,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-907.0469578623653,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-907.0469578623653,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -907.0469578623653, 695.4077901194844 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-911.2284610249407,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-911.2284610249407,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-911.2284610249407,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-911.2284610249407,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -911.2284610249407, 695.4077901194844 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-913.3192126062283,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-913.3192126062283,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-913.3192126062283,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-913.3192126062283,695.4077901194844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -913.3192126062283, 695.4077901194844 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -917.5007157688037, 699.5892932820598 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-921.6822189313791,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-921.6822189313791,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-921.6822189313791,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-921.6822189313791,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -921.6822189313791, 703.7707964446352 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-927.9544736752422,716.3153059323613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-927.9544736752422,716.3153059323613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-927.9544736752422,716.3153059323613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-927.9544736752422,716.3153059323613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -927.9544736752422, 716.3153059323613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,722.5875606762243]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,722.5875606762243]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,722.5875606762243]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,722.5875606762243]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -930.0452252565299, 722.5875606762243 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,718.4060575136489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,718.4060575136489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-909.137709443653,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-909.137709443653,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-909.137709443653,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-909.137709443653,703.7707964446352]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -909.137709443653, 703.7707964446352 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -930.0452252565299, 701.6800448633473 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,718.4060575136489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-930.0452252565299,718.4060575136489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -930.0452252565299, 718.4060575136489 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,645.2297521685798]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,645.2297521685798]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,645.2297521685798]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-917.5007157688037,645.2297521685798]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -917.5007157688037, 645.2297521685798 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-635.2492522949657,609.686975286689]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-635.2492522949657,609.686975286689]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-635.2492522949657,609.686975286689]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-635.2492522949657,609.686975286689]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -635.2492522949657, 609.686975286689 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,565.7811920796476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,565.7811920796476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,565.7811920796476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,565.7811920796476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -359.2700435649906, 565.7811920796476 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,446.6083519462493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,446.6083519462493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,446.6083519462493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,446.6083519462493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 610.8386901524974, 446.6083519462493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,394.3395624140571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,394.3395624140571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,394.3395624140571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,394.3395624140571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 941.1774399959523, 394.3395624140571 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-287.43296663641354]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-287.43296663641354]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-287.43296663641354]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.57775703752213,-287.43296663641354]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.57775703752213, -287.43296663641354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[721.6485239607449,-385.51077740625124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 721.6485239607449, -385.51077740625124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-206.93903075683738,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-206.93903075683738,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-206.93903075683738,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-206.93903075683738,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -206.93903075683738, -410.7873099323872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.1317361663854,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 341.1317361663854, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -346.72553407726446, -761.8460620380354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-838.0521556798716,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-838.0521556798716,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-838.0521556798716,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-838.0521556798716,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -838.0521556798716, -937.4691948662012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-844.3244104237347,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-844.3244104237347,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-844.3244104237347,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-844.3244104237347,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -844.3244104237347, -939.559946447489 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-808.7816335418439,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-808.7816335418439,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-808.7816335418439,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-808.7816335418439,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -808.7816335418439, -956.2859590977905 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -777.4203598225286, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -773.2388566599532, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-766.9666019160901,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-766.9666019160901,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-766.9666019160901,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-766.9666019160901,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -766.9666019160901, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-758.6035955909393,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-758.6035955909393,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-758.6035955909393,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-758.6035955909393,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -758.6035955909393, -964.6489654229412 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-750.2405892657886,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-750.2405892657886,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-750.2405892657886,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-750.2405892657886,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -750.2405892657886, -973.0119717480919 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-777.4203598225286,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -777.4203598225286, -1004.3732454674073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-904.9562062810776,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-904.9562062810776,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-904.9562062810776,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-904.9562062810776,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -904.9562062810776, -1039.9160223492981 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-898.6839515372145,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-898.6839515372145,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-898.6839515372145,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-898.6839515372145,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -898.6839515372145, -998.1009907235442 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-591.3434690879242,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -591.3434690879242, -901.9264179843105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -275.6399803134831, -809.9333484076521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 380.8560162108514, -653.1269798110754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[995.5369811094323,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[995.5369811094323,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[995.5369811094323,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[995.5369811094323,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 995.5369811094323, -548.589400746691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 953.7219494836785, -703.30501776198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 451.9415699746329, -745.1200493877338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-826.6593610579537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-826.6593610579537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-826.6593610579537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-826.6593610579537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -125.10586646076945, -826.6593610579537 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-704.2440544774594,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-704.2440544774594,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-704.2440544774594,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-704.2440544774594,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -704.2440544774594, -906.1079211468859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-1048.2790286744487]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-1048.2790286744487]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-1048.2790286744487]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-1048.2790286744487]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -612.2509849008011, -1048.2790286744487 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-1004.3732454674073]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -275.6399803134831, -1004.3732454674073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -943.7414496100644 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 385.0375193734268, -906.1079211468859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1008.0814905971584, -809.9333484076521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 740.465288192334, -933.2876917036258 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[907.7254146953493,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[907.7254146953493,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[907.7254146953493,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[907.7254146953493,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 907.7254146953493, -945.8322011913519 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[924.4514273456508,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[924.4514273456508,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[924.4514273456508,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[924.4514273456508,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 924.4514273456508, -966.7397170042289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 711.1947660543063, -933.2876917036258 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1022.7167516661722, -983.4657296545304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -781.6018629851039, -929.1061885410504 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -781.6018629851039, -968.8304685855165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-781.6018629851039,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -781.6018629851039, -1008.5547486299827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -920.7431822158997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -5.933026327371067, -945.8322011913519 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -10.114529489946449, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -18.477535815097212, -968.8304685855165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -966.7397170042289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -24.749790558960285, -964.6489654229412 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -26.840542140247976, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -26.840542140247976, -954.1952075165027 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -24.749790558960285, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -950.0137043539273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -943.7414496100644 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -933.2876917036258 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -26.840542140247976, -924.924685378475 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.022045302823358, -922.8339337971875 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -24.749790558960285, -922.8339337971875 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.114529489946449,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -10.114529489946449, -927.0154369597628 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.337495810656605,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.337495810656605,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.337495810656605,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[23.337495810656605,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 23.337495810656605, -964.6489654229412 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 63.06177585512262, -1023.1900096989965 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.24154641186271,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.24154641186271,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.24154641186271,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.24154641186271,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 90.24154641186271, -1079.6403023937642 ] ],
+ type: 14 }
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-1123.5460856008056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-1123.5460856008056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-1123.5460856008056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-1123.5460856008056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 224.0496476142747, -1123.5460856008056 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-1090.0940603002025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-1090.0940603002025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-1090.0940603002025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-1090.0940603002025]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -1090.0940603002025 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[257.50167291487776,-1023.1900096989965]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 257.50167291487776, -1023.1900096989965 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[274.2276855651793,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[274.2276855651793,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[274.2276855651793,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[274.2276855651793,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 274.2276855651793, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 293.0444497967686, -901.9264179843105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[322.31497193479606,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[322.31497193479606,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[322.31497193479606,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[322.31497193479606,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 322.31497193479606, -832.9316158018167 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 357.8577488166869, -768.1183167818983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 399.67278044244074, -686.5790051116785 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 451.9415699746329, -617.5842029291847 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-456.7838447207164]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-456.7838447207164]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-456.7838447207164]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-456.7838447207164]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -52.223413741548484, -456.7838447207164 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 451.9415699746329, -617.5842029291847 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.680636859657625,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.680636859657625,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.680636859657625,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-16.680636859657625,-410.7873099323872]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -16.680636859657625, -410.7873099323872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794666,-383.6075393756472]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794666,-383.6075393756472]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794666,-383.6075393756472]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.408382115794666,-383.6075393756472]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.408382115794666, -383.6075393756472 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 556.4791490390174, -481.6853501454849 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,5.948505175924538]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,5.948505175924538]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,5.948505175924538]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,5.948505175924538]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 294.042528720714, 5.948505175924538 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 18.862140022233007, -356.4277688189072 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 566.9329069454558, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-295.7959729615643]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-295.7959729615643]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-295.7959729615643]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-295.7959729615643]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.406649509959152, -295.7959729615643 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -393.873783731402 ] ],
+ type: 14 }
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-239.34568026679665]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-239.34568026679665]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-239.34568026679665]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-239.34568026679665]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -393.873783731402 ] ],
+ type: 14 }
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.31416532283606, -239.34568026679665 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[64.8586748105622,-180.8046359907413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[612.929441733785,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[612.929441733785,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-147.35261069013825]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-147.35261069013825]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 64.8586748105622, -180.8046359907413 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-230.98267394164588]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-230.98267394164588]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-256.0716929170982]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-256.0716929170982]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-293.7052213802766]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-293.7052213802766]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-312.5219856118657]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-312.5219856118657]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-410.5997963817034]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-410.5997963817034]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -337.42349103663435 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[612.929441733785,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[612.929441733785,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-327.15724668087955]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-327.15724668087955]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-335.5202530060303]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-335.5202530060303]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 64.8586748105622, -180.8046359907413 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-143.17110752756287]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 612.929441733785, -278.882446760579 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-241.24891829740056]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.04017797313759, -155.715617015289 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-147.35261069013825]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-147.35261069013825]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -147.35261069013825 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -253.7934277851267 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -147.35261069013825 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-245.43042145997595]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -245.43042145997595 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -245.43042145997595 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -285.1547015044421 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.22168113571297,-155.715617015289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.22168113571297, -155.715617015289 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-256.0716929170982]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-256.0716929170982]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -285.1547015044421 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-230.98267394164588]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-230.98267394164588]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.49566848541144, -230.98267394164588 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.49566848541144, -230.98267394164588 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.404916904123866,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 54.404916904123866, -274.8884571486874 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 604.5664354086342, -329.0604847114836 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 54.404916904123866, -274.8884571486874 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 602.4756838273466, -372.9662679185251 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-312.5219856118657]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-312.5219856118657]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 602.4756838273466, -372.9662679185251 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-410.5997963817034]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-410.5997963817034]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -410.5997963817034 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-293.7052213802766]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[62.76792322927463,-293.7052213802766]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 62.76792322927463, -293.7052213802766 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-335.5202530060303]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-335.5202530060303]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -410.5997963817034 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-327.15724668087955]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-327.15724668087955]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-360.6092719814826]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-360.6092719814826]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -327.15724668087955 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -327.15724668087955 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.40318429828835, -343.8832593311811 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -425.23505745071725 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.40318429828835, -343.8832593311811 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.4739512215111, -441.9610701010188 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-360.6092719814826]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-360.6092719814826]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.4739512215111, -441.9610701010188 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.4739512215111, -458.6870827513203 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.40318429828835,-356.4277688189072]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.40318429828835, -356.4277688189072 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-366.8815267253457]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-366.8815267253457]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-366.8815267253457]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-366.8815267253457]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.49393587957616, -366.8815267253457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.4739512215111, -458.6870827513203 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-375.24453305049644]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-375.24453305049644]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-375.24453305049644]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-375.24453305049644]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.58468746086373, -375.24453305049644 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 629.6554543840865, -473.32234382033414 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.58468746086373, -377.33528463178413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 629.6554543840865, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-381.5167877943595]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-381.5167877943595]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-381.5167877943595]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.58468746086373,-381.5167877943595]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.58468746086373, -381.5167877943595 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 629.6554543840865, -475.41309540162183 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-377.33528463178413]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.49393587957616, -377.33528463178413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-358.5185204001949]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-358.5185204001949]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-358.5185204001949]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-358.5185204001949]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.04017797313759, -358.5185204001949 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -456.5963311700326 ] ],
+ type: 14 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.31416532283606,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.31416532283606, -329.24799826216724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -427.32580903200494 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.49740109124696,-297.886724542852]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.49740109124696,-297.886724542852]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.49740109124696,-297.886724542852]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.49740109124696,-297.886724542852]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.49740109124696, -297.886724542852 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-395.9645353126897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-395.9645353126897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -427.32580903200494 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-395.9645353126897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-395.9645353126897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,128.25747268125428]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,128.25747268125428]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,128.25747268125428]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.042528720714,128.25747268125428]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 294.042528720714, 128.25747268125428 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[18.862140022233007,-274.8884571486874]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 18.862140022233007, -274.8884571486874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[566.9329069454558,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 566.9329069454558, -372.9662679185251 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.08963711719343,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.08963711719343,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.08963711719343,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.08963711719343,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.08963711719343, 150.2103642847751 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.226878953219284, -260.25319607967356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, -358.33100684951125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[250.13674551367285,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[250.13674551367285,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[250.13674551367285,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[250.13674551367285,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 250.13674551367285, 162.75487377250124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.408382115794666,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.408382115794666,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.408382115794666,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-10.408382115794666,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -10.408382115794666, -251.8901897545228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, -358.33100684951125 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[237.59223602594648,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[237.59223602594648,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[237.59223602594648,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[237.59223602594648,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 237.59223602594648, 169.0271285163642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.77138844094543,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.77138844094543,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.77138844094543,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.77138844094543,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -18.77138844094543, -247.7086865919474 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -345.7864973617851 ] ],
+ type: 14 }
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.31998128208352,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.31998128208352,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.31998128208352,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.31998128208352,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 231.31998128208352, 169.0271285163642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -18.77138844094543, -247.7086865919474 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 525.117875319702, -345.7864973617851 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.1838539101518,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.1838539101518,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.1838539101518,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.1838539101518,169.0271285163642]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 228.1838539101518, 169.0271285163642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-25.04364318480839,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-25.04364318480839,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-25.04364318480839,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-25.04364318480839,-247.7086865919474]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -25.04364318480839, -247.7086865919474 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 523.0271237384144, -345.7864973617851 ] ],
+ type: 14 }
+S sending : e170ebeb-643d-4a91-80ae-95e4c3786b2f, receiving Get Field with data {"_id":"e170ebeb-643d-4a91-80ae-95e4c3786b2f","data":-1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.95870756276827,165.89100114443272]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.95870756276827,165.89100114443272]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.95870756276827,165.89100114443272]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.95870756276827,165.89100114443272]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.95870756276827, 165.89100114443272 ] ],
+ type: 14 }
+S sending : 24c48da4-b92d-48b0-bdec-36a464c6cfbe, receiving Get Field with data {"_id":"24c48da4-b92d-48b0-bdec-36a464c6cfbe","data":-1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-249.7994381732351]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-249.7994381732351]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-249.7994381732351]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-249.7994381732351]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -43.86040741639772, -249.7994381732351 ] ],
+ type: 14 }
+S sending : 4d03c98c-7b74-4c00-a030-a8040bdccbe2, receiving Get Field with data {"_id":"4d03c98c-7b74-4c00-a030-a8040bdccbe2","data":-844.6275694030213,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+S sending : 2ce151b5-db68-432e-8997-9f84f5d004ce, receiving Get Field with data {"_id":"2ce151b5-db68-432e-8997-9f84f5d004ce","data":1004.4200579180002,"type":0}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 504.21035950682506, -347.8772489430728 ] ],
+ type: 14 }
+S sending : 12d28809-5f97-4bc9-8d4c-f870a6fd9db3, receiving Get Field with data {"_id":"12d28809-5f97-4bc9-8d4c-f870a6fd9db3","data":-625.361798811575,"type":0}
+S sending : 408eef47-1f73-4423-9ae8-ff7ebe09d7f4, receiving Get Field with data {"_id":"408eef47-1f73-4423-9ae8-ff7ebe09d7f4","data":931.2604785855814,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[187.4141980750419,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[187.4141980750419,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+S sending : 1ef8c71c-a64d-4dc0-ad7b-7605413f001e, receiving Get Field with data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","data":1,"type":0}
+S sending : 7533f60b-3a1d-4529-8b59-6e030277ca70, receiving Get Field with data {"_id":"7533f60b-3a1d-4529-8b59-6e030277ca70","data":290.9536982154808,"type":0}
+S sending : 7f7d3044-52af-4af8-9745-175eff2ac608, receiving Get Field with data {"_id":"7f7d3044-52af-4af8-9745-175eff2ac608","data":-609.2211966040339,"type":0}
+S sending : bae0c4d9-0d4d-49fe-8200-83479aaf807a, receiving Get Field with data {"_id":"bae0c4d9-0d4d-49fe-8200-83479aaf807a","data":512.2341374154839,"type":0}
+S sending : f97d59e2-5f74-4ad2-a851-8c048690c3b1, receiving Get Field with data {"_id":"f97d59e2-5f74-4ad2-a851-8c048690c3b1","data":1020.2867716683925,"type":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[187.4141980750419,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[187.4141980750419,162.75487377250124]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 187.4141980750419, 162.75487377250124 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-52.223413741548484,-251.8901897545228]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -52.223413741548484, -251.8901897545228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.00581595924723,159.61874640056976]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.00581595924723,159.61874640056976]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 495.8473531816743, -349.9680005243605 ] ],
+ type: 14 }
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 187.4141980750419, 162.75487377250124 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.00581595924723,159.61874640056976]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.00581595924723,159.61874640056976]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-58.49566848541144,-253.98094133581048]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-58.49566848541144,-253.98094133581048]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-58.49566848541144,-253.98094133581048]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-58.49566848541144,-253.98094133581048]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -58.49566848541144, -253.98094133581048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 495.8473531816743, -349.9680005243605 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.86968858731598,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.86968858731598,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.86968858731598,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.86968858731598,150.2103642847751]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 174.86968858731598, 150.2103642847751 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-260.25319607967356]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -60.58642006669925, -260.25319607967356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 487.48434685652353, -358.33100684951125 ] ],
+ type: 14 }
+S sending : fdb34782-566a-4503-b420-aca62aaaf816, receiving Get Field with data {"_id":"fdb34782-566a-4503-b420-aca62aaaf816","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4613064715213,147.07423691284362]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4613064715213,147.07423691284362]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4613064715213,147.07423691284362]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.4613064715213,147.07423691284362]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 165.4613064715213, 147.07423691284362 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.8586748105622,-262.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.8586748105622,-262.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.8586748105622,-262.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.8586748105622,-262.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -66.8586748105622, -262.34394766096125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-360.42175843079895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 481.21209211266057, -360.42175843079895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[162.3251790995896,143.9381095409119]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[162.3251790995896,143.9381095409119]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[162.3251790995896,143.9381095409119]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[162.3251790995896,143.9381095409119]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 162.3251790995896, 143.9381095409119 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.94942639185001,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.94942639185001,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.94942639185001,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.94942639185001,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -68.94942639185001, -264.43469924224894 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 481.21209211266057, -360.42175843079895 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765835,137.66585479704895]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765835,137.66585479704895]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765835,137.66585479704895]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765835,137.66585479704895]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.18905172765835, 137.66585479704895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -71.04017797313759, -268.6162024048243 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 477.0305889500852, -366.694013174662 ] ],
+ type: 14 }
+S sending : a7226718-1943-4647-9a31-3dd5e890a132, receiving Get Field with data {"_id":"a7226718-1943-4647-9a31-3dd5e890a132","data":-41.90824879350832,"type":0}
+S sending : d137e66f-dbc3-41d7-92df-1da1a715b915, receiving Get Field with data {"_id":"d137e66f-dbc3-41d7-92df-1da1a715b915","data":-14.049778719754945,"type":0}
+S sending : 548f3f67-7146-475c-bd55-5e90bdf93831, receiving Get Field with data {"_id":"548f3f67-7146-475c-bd55-5e90bdf93831","data":0.5904900000000001,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[156.05292435572665,134.52972742511747]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[156.05292435572665,134.52972742511747]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[156.05292435572665,134.52972742511747]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[156.05292435572665,134.52972742511747]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 156.05292435572665, 134.52972742511747 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-73.13092955442517,-270.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-73.13092955442517,-270.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-73.13092955442517,-270.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-73.13092955442517,-270.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 474.9398373687976, -368.7847647559497 ] ],
+ type: 14 }
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -73.13092955442517, -270.706953986112 ] ],
+ type: 14 }
+S sending : 43636484-5d3d-4eea-a347-161c47d23692, receiving Get Field with data {"_id":"43636484-5d3d-4eea-a347-161c47d23692","data":1,"type":0}
+S sending : 73837ad4-e23b-488a-a4c9-efa84099a4a0, receiving Get Field with data {"_id":"73837ad4-e23b-488a-a4c9-efa84099a4a0","data":0,"type":0}
+S sending : c57f1577-c377-4dba-9b89-db6763c17fee, receiving Get Field with data {"_id":"c57f1577-c377-4dba-9b89-db6763c17fee","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-177.8328791249096,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-361.0601056028569,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":2,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":-90.69104152973387,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":-43.81989175014314,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":3,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-179.45321567239102,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":213.88135107802282,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":4,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.91679698379494,131.39360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.91679698379494,131.39360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.91679698379494,131.39360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.91679698379494,131.39360005318576]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.91679698379494, 131.39360005318576 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.22168113571297,-272.7977055673997]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.22168113571297,-272.7977055673997]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -73.13092955442517, -270.706953986112 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.22168113571297,-272.7977055673997]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-75.22168113571297,-272.7977055673997]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 472.8490857875098, -370.8755163372374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.7806696118637,118.84909056545962]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.7806696118637,118.84909056545962]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.7806696118637,118.84909056545962]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.7806696118637,118.84909056545962]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.7806696118637, 118.84909056545962 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.31243271700055,-281.16071189255047]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.31243271700055,-281.16071189255047]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.31243271700055,-281.16071189255047]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.31243271700055,-281.16071189255047]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -77.31243271700055, -281.16071189255047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 470.75833420622223, -379.23852266238816 ] ],
+ type: 14 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 300,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 299.5,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+Broadcast : de45525d-8038-4a2d-b9e6-215889896c7f, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{ _id: 'de45525d-8038-4a2d-b9e6-215889896c7f',
+ data:
+ [ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":280.3355698029426}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":280.3355698029426}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":280.3355698029426}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":280.3355698029426}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":280.3355698029426}
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-862.6529715612187}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-862.6529715612187}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-862.6529715612187}
+Incoming : 54183dbc-b1d6-4bc9-9d94-7dd9d0245419, receiving Set Field with data {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","type":0,"data":1}
+calling update on data {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","type":0,"data":1}
+called update on data {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","54183dbc-b1d6-4bc9-9d94-7dd9d0245419"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","54183dbc-b1d6-4bc9-9d94-7dd9d0245419"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Incoming : 1ef8c71c-a64d-4dc0-ad7b-7605413f001e, receiving Set Field with data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","type":0,"data":2}
+calling update on data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","type":0,"data":2}
+called update on data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","type":0,"data":2}
+Incoming : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Set Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":3}
+calling update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":3}
+called update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":3}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,118.84909056545973]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,118.84909056545973]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419"}],"ok":1}
+Wrote {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","type":0,"data":1}
+Broadcast : 54183dbc-b1d6-4bc9-9d94-7dd9d0245419, sending data {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","type":0,"data":1}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: 280.3355698029426,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-862.6529715612187}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-862.6529715612187}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -862.6529715612187,
+ type: 0 }
+{ _id: '54183dbc-b1d6-4bc9-9d94-7dd9d0245419', data: 1, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","54183dbc-b1d6-4bc9-9d94-7dd9d0245419"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+Broadcast : 8ae9adfb-f612-47f5-85d8-a345666ba66b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","377fa87a-6cfd-45e1-b24c-4ba286971304"],["7b71638c-05b8-5573-9aa5-c737c9406a86","7533f60b-3a1d-4529-8b59-6e030277ca70"],["13a3cc01-c286-57e1-8746-baa3ced34e76","7f7d3044-52af-4af8-9745-175eff2ac608"],["5c207bd2-0390-5c35-8972-06d185f387fb","bae0c4d9-0d4d-49fe-8200-83479aaf807a"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f97d59e2-5f74-4ad2-a851-8c048690c3b1"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","73837ad4-e23b-488a-a4c9-efa84099a4a0"],["048d25ac-b841-5728-a599-e3a432137881","c57f1577-c377-4dba-9b89-db6763c17fee"],["911954a3-bebc-5b20-81f3-3091a2e11907","24c48da4-b92d-48b0-bdec-36a464c6cfbe"],["43606ee9-0825-51a3-98b2-06d36fdfd153","16efd95d-6944-4771-be9b-c925a7f96bfd"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","54183dbc-b1d6-4bc9-9d94-7dd9d0245419"]],"_id":"8ae9adfb-f612-47f5-85d8-a345666ba66b"}
+{ _id: '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '377fa87a-6cfd-45e1-b24c-4ba286971304' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '7533f60b-3a1d-4529-8b59-6e030277ca70' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '7f7d3044-52af-4af8-9745-175eff2ac608' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ 'bae0c4d9-0d4d-49fe-8200-83479aaf807a' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f97d59e2-5f74-4ad2-a851-8c048690c3b1' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '73837ad4-e23b-488a-a4c9-efa84099a4a0' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'c57f1577-c377-4dba-9b89-db6763c17fee' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '24c48da4-b92d-48b0-bdec-36a464c6cfbe' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '16efd95d-6944-4771-be9b-c925a7f96bfd' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ '54183dbc-b1d6-4bc9-9d94-7dd9d0245419' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","type":0,"data":2}
+Broadcast : 1ef8c71c-a64d-4dc0-ad7b-7605413f001e, sending data {"_id":"1ef8c71c-a64d-4dc0-ad7b-7605413f001e","type":0,"data":2}
+{ _id: '1ef8c71c-a64d-4dc0-ad7b-7605413f001e', data: 2, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":3}
+Broadcast : cc496f45-ce13-4ce5-859c-215d8634bc61, sending data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":3}
+{ _id: 'cc496f45-ce13-4ce5-859c-215d8634bc61', data: 3, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,118.84909056545973]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,118.84909056545973]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.78066961186346, 118.84909056545973 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 380.8560162108514, -782.7535778509123 ] ],
+ type: 14 }
+S sending : 54183dbc-b1d6-4bc9-9d94-7dd9d0245419, receiving Get Field with data {"_id":"54183dbc-b1d6-4bc9-9d94-7dd9d0245419","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,125.1213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,125.1213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,125.1213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,125.1213453093228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.78066961186346, 125.1213453093228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 380.8560162108514, -778.5720746883369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,131.39360005318588]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,131.39360005318588]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,131.39360005318588]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.78066961186346,131.39360005318588]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.78066961186346, 131.39360005318588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-774.3905715257615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-774.3905715257615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 380.8560162108514, -778.5720746883369 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-774.3905715257615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[380.8560162108514,-774.3905715257615]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765812,175.2993832602274]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765812,175.2993832602274]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765812,175.2993832602274]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.18905172765812,175.2993832602274]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.18905172765812, 175.2993832602274 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 387.1282709547146, -745.1200493877338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.73356121538427,231.74967595499504]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.73356121538427,231.74967595499504]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.73356121538427,231.74967595499504]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.73356121538427,231.74967595499504]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.73356121538427, 231.74967595499504 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 395.49127727986536, -707.4865209245554 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 412.2172899301669, -659.3992345549385 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-110.7644580176036,-490.23587002131933]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-110.7644580176036,-490.23587002131933]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-110.7644580176036,-490.23587002131933]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-110.7644580176036,-490.23587002131933]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -110.7644580176036, -490.23587002131933 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 437.3063089056192, -588.313680791157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,-444.23933523299024]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,-444.23933523299024]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,-444.23933523299024]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,-444.23933523299024]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -98.21994852987746, -444.23933523299024 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 437.3063089056192, -588.313680791157 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.67543904215131,-396.15204886337335]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.67543904215131,-396.15204886337335]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.67543904215131,-396.15204886337335]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.67543904215131,-396.15204886337335]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -85.67543904215131, -396.15204886337335 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 462.39532788107147, -494.22985963321105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-71.04017797313759,-329.24799826216724]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -71.04017797313759, -329.24799826216724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-427.32580903200494]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 477.0305889500852, -427.32580903200494 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.58642006669925,-264.43469924224894]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -60.58642006669925, -264.43469924224894 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 487.48434685652353, -362.51251001208664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.404916904123866,-220.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.404916904123866,-220.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.404916904123866,-220.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.404916904123866,-220.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -56.404916904123866, -220.52891603520743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 491.6658500190989, -318.6067268050451 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,-197.53064864104283]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -45.9511589976853, -197.53064864104283 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 491.6658500190989, -318.6067268050451 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-295.6084594108805]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -43.86040741639772, -187.07689073460438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 504.21035950682506, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,-170.35087808430285]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,-170.35087808430285]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,-170.35087808430285]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,-170.35087808430285]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -35.49740109124696, -170.35087808430285 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 512.5733658319758, -268.42868885414055 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-141.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-141.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-141.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.589885278370048,-141.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -14.589885278370048, -141.08035594627518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 533.4808816448527, -239.15816671611287 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-105.53757906438454]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-105.53757906438454]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-105.53757906438454]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.226878953219284,-105.53757906438454]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.226878953219284, -105.53757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, -203.61538983422224 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.95289160352081,-76.26705692635687]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.95289160352081,-76.26705692635687]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.95289160352081,-76.26705692635687]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[20.95289160352081,-76.26705692635687]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 20.95289160352081, -76.26705692635687 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, -203.61538983422224 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-36.54277688189063]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-36.54277688189063]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-36.54277688189063]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-36.54277688189063]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.406649509959152, -36.54277688189063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -134.62058765172833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-17.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-17.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-17.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,-17.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.406649509959152, -17.726012650301527 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -115.80382342013922 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,1.0907515812875772]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,1.0907515812875772]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,1.0907515812875772]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,1.0907515812875772]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.406649509959152, 1.0907515812875772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -96.98705918855012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,13.635261069013723]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,13.635261069013723]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,13.635261069013723]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.406649509959152,13.635261069013723]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.406649509959152, 13.635261069013723 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-84.44254970082397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -84.44254970082397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,19.90751581287691]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 19.90751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -84.44254970082397 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,21.998267394164486]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,21.998267394164486]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,21.998267394164486]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,21.998267394164486]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 21.998267394164486 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-76.07954337567321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -76.07954337567321 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,28.270522138027673]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,28.270522138027673]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,28.270522138027673]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,28.270522138027673]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 28.270522138027673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -69.80728863181002 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,30.36127371931525]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,30.36127371931525]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,30.36127371931525]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,30.36127371931525]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 30.36127371931525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -67.71653705052245 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 32.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -65.62578546923464 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,36.633528463178436]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,36.633528463178436]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,36.633528463178436]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,36.633528463178436]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 36.633528463178436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -61.44428230665926 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,32.452025300603054]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 32.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -65.62578546923464 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,15.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,15.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,15.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,15.726012650301527]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 15.726012650301527 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-82.35179811953617]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-82.35179811953617]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-82.35179811953617]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-82.35179811953617]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -82.35179811953617 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+Broadcast : de45525d-8038-4a2d-b9e6-215889896c7f, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{ _id: 'de45525d-8038-4a2d-b9e6-215889896c7f',
+ data: [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":507.55776334439327}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":507.55776334439327}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":507.55776334439327}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":507.55776334439327}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":507.55776334439327}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-804.6659537881785}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-804.6659537881785}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-804.6659537881785}
+Incoming : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Set Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":4}
+calling update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":4}
+called update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":4}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -43.81989175014314,
+ type: 0 }
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 507.55776334439327,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-804.6659537881785}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-804.6659537881785}
+{ _id: 'a59882d7-3daf-4574-b38e-4673bbac7db8', data: 3, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":4}
+Broadcast : a59882d7-3daf-4574-b38e-4673bbac7db8, sending data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":4}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -745.1200493877338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -743.029297806446 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -732.5755399000077 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-678.2159987865277]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-678.2159987865277]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-678.2159987865277]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-678.2159987865277]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -678.2159987865277 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -619.6749545104724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-467.23760262715484]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-467.23760262715484]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-467.23760262715484]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-467.23760262715484]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.49393587957616, -467.23760262715484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -565.3154133969925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-406.6058067698118]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-406.6058067698118]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-406.6058067698118]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.49393587957616,-406.6058067698118]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.49393587957616, -406.6058067698118 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 627.5647028027989, -565.3154133969925 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[627.5647028027989,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-343.8832593311811]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -343.8832593311811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -441.9610701010188 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.31243271700077,-268.6162024048243]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.31243271700077, -268.6162024048243 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -366.694013174662 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.04017797313759,-187.07689073460438]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.04017797313759, -187.07689073460438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-113.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-113.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-113.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.49566848541144,-113.90058538953531]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.49566848541144, -113.90058538953531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 604.5664354086342, -211.978396159373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-51.17803795090458]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-51.17803795090458]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-51.17803795090458]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.223413741548484,-51.17803795090458]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.223413741548484, -51.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 598.2941806647713, -149.25584872074228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,-1]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 43.9511589976853, -1 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 592.0219259209081, -99.0778107698377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,38.72428004446601]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,38.72428004446601]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,38.72428004446601]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,38.72428004446601]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 43.9511589976853, 38.72428004446601 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 592.0219259209081, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,63.813299019918304]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,63.813299019918304]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,63.813299019918304]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[43.9511589976853,63.813299019918304]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 43.9511589976853, 63.813299019918304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-34.26451174991939]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 592.0219259209081, -34.26451174991939 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[39.769655835109916,82.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[39.769655835109916,82.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[39.769655835109916,82.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[39.769655835109916,82.63006325150764]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 39.769655835109916, 82.63006325150764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-15.447747518330061]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-15.447747518330061]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-15.447747518330061]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-15.447747518330061]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 587.8404227583327, -15.447747518330061 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382234,113.99133697082289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382234,113.99133697082289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382234,113.99133697082289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.67890425382234,113.99133697082289]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 37.67890425382234, 113.99133697082289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 587.8404227583327, -15.447747518330061 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,15.913526200985189]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.315897928671575,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.315897928671575, 139.08035594627518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, 41.00254517643748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,159.98787175915209]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,159.98787175915209]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,159.98787175915209]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,159.98787175915209]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 25.134394766096193, 159.98787175915209 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,61.91006098931439]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,61.91006098931439]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,61.91006098931439]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,61.91006098931439]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 573.205161689319, 61.91006098931439 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,191.34914547846734]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,191.34914547846734]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,191.34914547846734]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.134394766096193,191.34914547846734]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 25.134394766096193, 191.34914547846734 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[573.205161689319,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 573.205161689319, 93.27133470862964 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[16.77138844094543,205.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[16.77138844094543,205.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[16.77138844094543,205.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[16.77138844094543,205.98440654748129]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 16.77138844094543, 205.98440654748129 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 564.8421553641682, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[287.0646514261416,5.971347435776806]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[287.0646514261416,5.971347435776806]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[287.0646514261416,5.971347435776806]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[287.0646514261416,5.971347435776806]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 287.0646514261416, 5.971347435776806 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.589885278370048,218.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.589885278370048,218.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.589885278370048,218.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.589885278370048,218.52891603520743]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.589885278370048, 218.52891603520743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 564.8421553641682, 107.90659577764359 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[268.24788719455273,21.65198429543466]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[268.24788719455273,21.65198429543466]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[268.24788719455273,21.65198429543466]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[268.24788719455273,21.65198429543466]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 268.24788719455273, 21.65198429543466 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.04537579064390229,228.98267394164577]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.04537579064390229,228.98267394164577]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.04537579064390229,228.98267394164577]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.04537579064390229,228.98267394164577]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.04537579064390229, 228.98267394164577 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 548.1161427138667, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.4311229629634,43.60487589895524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.4311229629634,43.60487589895524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.4311229629634,43.60487589895524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.4311229629634,43.60487589895524]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.4311229629634, 43.60487589895524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,243.61793501065972]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,243.61793501065972]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,243.61793501065972]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.499133697082243,243.61793501065972]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -12.499133697082243, 243.61793501065972 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,65.55776750247605]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,65.55776750247605]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,65.55776750247605]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,65.55776750247605]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 233.75048610330578, 65.55776750247605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,258.25319607967344]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,258.25319607967344]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,258.25319607967344]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.95289160352081,258.25319607967344]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.95289160352081, 258.25319607967344 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, 145.54012424082202 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.2059766155794,78.10227699020197]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.2059766155794,78.10227699020197]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.2059766155794,78.10227699020197]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.2059766155794,78.10227699020197]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 221.2059766155794, 78.10227699020197 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,266.6162024048242]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,266.6162024048242]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,266.6162024048242]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.315897928671575,266.6162024048242]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.315897928671575, 266.6162024048242 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 516.7548689945512, 168.5383916349865 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364815,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364815,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364815,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364815,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 218.06984924364815, 81.23840436213368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995915,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995915,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995915,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.40664950995915,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -33.40664950995915, 268.706953986112 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[514.6641174132636,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[514.6641174132636,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[514.6641174132636,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[514.6641174132636,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 514.6641174132636, 170.62914321627431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[214.93372187171644,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[214.93372187171644,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[214.93372187171644,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[214.93372187171644,81.23840436213368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 214.93372187171644, 81.23840436213368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.49740109124696,268.706953986112]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -35.49740109124696, 268.706953986112 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 514.6641174132636, 170.62914321627431 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[512.5733658319758,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 208.66146712785348, 84.37453173406539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.67890425382234,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.67890425382234,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.67890425382234,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.67890425382234,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -39.67890425382234, 270.7977055673996 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.39186266940044, 172.7198947975619 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.52533975592178,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.52533975592178,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.52533975592178,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.52533975592178,84.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 205.52533975592178, 84.37453173406539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.769655835109916,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.769655835109916,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.769655835109916,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.769655835109916,270.7977055673996]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -41.769655835109916, 270.7977055673996 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.39186266940044, 172.7198947975619 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.25308501205882, 90.64678647792834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -45.9511589976853, 274.97920872997497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, 176.90139796013727 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.38921238399053,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.38921238399053,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.38921238399053,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.38921238399053,90.64678647792834]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 202.38921238399053, 90.64678647792834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-43.86040741639772,274.97920872997497]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -43.86040741639772, 274.97920872997497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, 176.90139796013727 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[504.21035950682506,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.25308501205882, 68.69389487440753 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,260.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,260.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,260.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.9511589976853,260.34394766096125]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -45.9511589976853, 260.34394766096125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,162.26613689112355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,162.26613689112355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,162.26613689112355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,162.26613689112355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, 162.26613689112355 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+called update on data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+Broadcast : de45525d-8038-4a2d-b9e6-215889896c7f, sending data {"type":1,"data":[],"_id":"de45525d-8038-4a2d-b9e6-215889896c7f"}
+{ _id: 'de45525d-8038-4a2d-b9e6-215889896c7f',
+ data: [],
+ type: 1 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["eff68660-351e-44d1-974f-f984cb56f652","8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'eff68660-351e-44d1-974f-f984cb56f652',
+ '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-89.25704505117244}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-89.25704505117244}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-89.25704505117244}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-900.301728197632}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-900.301728197632}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-900.301728197632}
+Incoming : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Set Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":5}
+calling update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":5}
+called update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":5}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-89.25704505117244}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-89.25704505117244}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":5}
+Broadcast : e3b590f8-23f0-4feb-831d-cbc9a516828a, sending data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":5}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -89.25704505117244,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-900.301728197632}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-900.301728197632}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -900.301728197632,
+ type: 0 }
+{ _id: 'e3b590f8-23f0-4feb-831d-cbc9a516828a', data: 5, type: 0 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.25308501205882,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.25308501205882, 68.69389487440753 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.525339755922,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.525339755922,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.525339755922,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.525339755922,68.69389487440753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 205.525339755922, 68.69389487440753 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 48.42651478610878, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,74.9661496182706]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,74.9661496182706]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,74.9661496182706]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[208.66146712785348,74.9661496182706]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 208.66146712785348, 74.9661496182706 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.51726636739647, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.79759449978496,96.9190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.79759449978496,96.9190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.79759449978496,96.9190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.79759449978496,96.9190412217913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 211.79759449978496, 96.9190412217913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -835.0223673831044 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364792,156.50546128849044]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364792,156.50546128849044]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364792,156.50546128849044]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[218.06984924364792,156.50546128849044]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 218.06984924364792, 156.50546128849044 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-795.2980873386384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-795.2980873386384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -835.0223673831044 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-795.2980873386384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-795.2980873386384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.20597661557963,219.22800872712116]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.20597661557963,219.22800872712116]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.20597661557963,219.22800872712116]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.20597661557963,219.22800872712116]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 221.20597661557963, 219.22800872712116 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -753.4830557128846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.61435873137407,288.22281090961496]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.61435873137407,288.22281090961496]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.61435873137407,288.22281090961496]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.61435873137407,288.22281090961496]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.61435873137407, 288.22281090961496 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 65.15252743641031, -707.4865209245554 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.60628534284876, -653.1269798110754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[674.947380481726,-773.4172286409423]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[674.947380481726,-773.4172286409423]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[674.947380481726,-773.4172286409423]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[674.947380481726,-773.4172286409423]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 674.947380481726, -773.4172286409423 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-607.1304450227462]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-607.1304450227462]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-607.1304450227462]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-607.1304450227462]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.87854008671195, -607.1304450227462 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-720.3066362188601]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-720.3066362188601]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-720.3066362188601]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-720.3066362188601]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 696.1916174505589, -720.3066362188601 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.87854008671195, -607.1304450227462 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[699.732323612031,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[699.732323612031,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[699.732323612031,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[699.732323612031,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 699.732323612031, -695.5216930885549 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 96.51380115572567, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.1916174505589,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 696.1916174505589, -695.5216930885549 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.4230495744381, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.6509112890867,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.6509112890867,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 696.1916174505589, -695.5216930885549 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.6509112890867,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[692.6509112890867,-695.5216930885549]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.33229799315029, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.0287928046703,-691.9809869270828]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.0287928046703,-691.9809869270828]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.0287928046703,-691.9809869270828]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.0287928046703,-691.9809869270828]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 682.0287928046703, -691.9809869270828 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 86.06004324928733, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.243849674365,-677.8181622811942]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.243849674365,-677.8181622811942]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.243849674365,-677.8181622811942]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.243849674365,-677.8181622811942]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 657.243849674365, -677.8181622811942 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 86.06004324928733, -559.0431586531295 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[632.45890654406,-667.1960437967778]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[632.45890654406,-667.1960437967778]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[632.45890654406,-667.1960437967778]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[632.45890654406,-667.1960437967778]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 632.45890654406, -667.1960437967778 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.789521111259546, -544.4078975841156 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-653.0332191508892]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-653.0332191508892]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-653.0332191508892]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-653.0332191508892]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 607.673963413755, -653.0332191508892 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-649.492512989417]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-649.492512989417]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-649.492512989417]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-649.492512989417]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 604.1332572522829, -649.492512989417 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-638.8703945050006]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-638.8703945050006]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-638.8703945050006]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.1332572522829,-638.8703945050006]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 604.1332572522829, -638.8703945050006 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -527.6818849338141 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-635.3296883435285]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-635.3296883435285]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-635.3296883435285]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[607.673963413755,-635.3296883435285]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 607.673963413755, -635.3296883435285 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -525.5911333525264 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[614.7553757366993,-631.7889821820563]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[614.7553757366993,-631.7889821820563]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[614.7553757366993,-631.7889821820563]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[614.7553757366993,-631.7889821820563]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 614.7553757366993, -631.7889821820563 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -523.5003817712387 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.3774942211157,-607.0040390517513]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.3774942211157,-607.0040390517513]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.3774942211157,-607.0040390517513]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.3774942211157,-607.0040390517513]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.3774942211157, -607.0040390517513 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[639.5403188670043,-571.5969774370299]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[639.5403188670043,-571.5969774370299]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[639.5403188670043,-571.5969774370299]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[639.5403188670043,-571.5969774370299]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 639.5403188670043, -571.5969774370299 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 60.97102427383493, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.6217311899486,-557.4341527911413]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.6217311899486,-557.4341527911413]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.6217311899486,-557.4341527911413]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+Broadcast : 72e081ba-0b2d-47df-a47f-c2e974656fec, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.6217311899486,-557.4341527911413]],"_id":"72e081ba-0b2d-47df-a47f-c2e974656fec"}
+{ _id: '72e081ba-0b2d-47df-a47f-c2e974656fec',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 646.6217311899486, -557.4341527911413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 65.15252743641031, -479.5945985641972 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["8ae9adfb-f612-47f5-85d8-a345666ba66b","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '8ae9adfb-f612-47f5-85d8-a345666ba66b',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,233.35169065490481]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,233.35169065490481]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,233.35169065490481]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,233.35169065490481]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.14906222473962, 233.35169065490481 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,231.26093907361724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,231.26093907361724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,231.26093907361724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,231.26093907361724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.2398138060272, 231.26093907361724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 117.42131696860258, 224.98868432975405 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,197.80891377301418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,197.80891377301418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,197.80891377301418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,197.80891377301418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, 197.80891377301418 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.87160966337012, 170.62914321627431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 228.2311507768501, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.93556554516658,180.895387572029]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.93556554516658,180.895387572029]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.93556554516658,180.895387572029]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.93556554516658,180.895387572029]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -252.93556554516658, 180.895387572029 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, 82.8175768021913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.39625387494675,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.39625387494675,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.39625387494675,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.39625387494675,139.08035594627518]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -171.39625387494675, 139.08035594627518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, 82.8175768021913 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.76272541176832,126.53584645854903]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.76272541176832,126.53584645854903]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.76272541176832,126.53584645854903]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.76272541176832,126.53584645854903]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -133.76272541176832, 126.53584645854903 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 414.30804151145446, 28.458035688711334 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-106.58295485502822,116.08208855211069]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-106.58295485502822,116.08208855211069]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-106.58295485502822,116.08208855211069]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-106.58295485502822,116.08208855211069]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -106.58295485502822, 116.08208855211069 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,18.004277782272993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 441.48781206819456, 18.004277782272993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,107.71908222695993]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,107.71908222695993]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,107.71908222695993]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-98.21994852987746,107.71908222695993]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -98.21994852987746, 107.71908222695993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 449.8508183933453, 9.64127145712223 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-94.03844536730207,105.62833064567212]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-94.03844536730207,105.62833064567212]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-94.03844536730207,105.62833064567212]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+Broadcast : 19228090-c099-41b1-bbc0-eb68ac81e816, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-94.03844536730207,105.62833064567212]],"_id":"19228090-c099-41b1-bbc0-eb68ac81e816"}
+{ _id: '19228090-c099-41b1-bbc0-eb68ac81e816',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -94.03844536730207, 105.62833064567212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[454.0323215559207,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[454.0323215559207,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[454.0323215559207,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[454.0323215559207,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 454.0323215559207, 7.550519875834425 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,701.6800448633473]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, 701.6800448633473 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,699.5892932820598]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, 699.5892932820598 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,697.498541700772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, 697.498541700772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,691.226286956909]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,691.226286956909]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,691.226286956909]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,691.226286956909]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, 691.226286956909 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, 676.5910258878951 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, 651.5020069124428 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,611.7777268679768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,611.7777268679768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,611.7777268679768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,611.7777268679768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 523.0271237384144, 611.7777268679768 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,576.2349499860861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,576.2349499860861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,576.2349499860861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[552.2976458764421,576.2349499860861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 552.2976458764421, 576.2349499860861 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,528.1476636164691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,528.1476636164691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,528.1476636164691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[569.0236585267436,528.1476636164691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 569.0236585267436, 528.1476636164691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,473.78812250298915]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,473.78812250298915]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,473.78812250298915]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,473.78812250298915]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 571.1144101080312, 473.78812250298915 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,440.3360972023861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, 440.3360972023861 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,436.1545940398107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,436.1545940398107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,436.1545940398107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,436.1545940398107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, 436.1545940398107 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,434.06384245852314]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, 434.06384245852314 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[548.1161427138667,417.3378298082216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 548.1161427138667, 417.3378298082216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,365.06904027602945]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,365.06904027602945]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,365.06904027602945]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,365.06904027602945]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 525.117875319702, 365.06904027602945 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 458.2138247184961, 268.8944675367957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[395.49127727986536,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 395.49127727986536, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 313.9519656096453, 13.822774619697611 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -90.71480444468693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -301.8807141547436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -41.47580320926181, -433.598063775868 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -133.4688727859202, -546.4986491654033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -225.4619423625785, -669.852992461377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -298.6382477076477, -751.3923041315968 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -348.81628565855215, -791.116584176063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-797.388838919926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-797.388838919926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-797.388838919926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-797.388838919926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -797.388838919926 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -799.4795905012138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -801.5703420825014 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-805.7518452450768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-805.7518452450768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-805.7518452450768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-805.7518452450768]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -805.7518452450768 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -809.9333484076521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-820.3871063140906]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-820.3871063140906]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-820.3871063140906]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-820.3871063140906]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -820.3871063140906 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-837.1131189643921]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-837.1131189643921]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-837.1131189643921]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-837.1131189643921]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -348.81628565855215, -837.1131189643921 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-843.3853737082552]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-843.3853737082552]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-843.3853737082552]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-843.3853737082552]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -346.72553407726446, -843.3853737082552 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -346.72553407726446, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -340.4532793334014, -855.9298831959813 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-862.2021379398444]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-862.2021379398444]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-862.2021379398444]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-862.2021379398444]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -338.3625277521137, -862.2021379398444 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-866.3836411024198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-866.3836411024198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-866.3836411024198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-866.3836411024198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -866.3836411024198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-872.6558958462829]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-872.6558958462829]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-872.6558958462829]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-872.6558958462829]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, -872.6558958462829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-375.9960562152921,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -375.9960562152921, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -382.2683109591552, -881.0189021714336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -382.2683109591552, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-380.1775593778675,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-380.1775593778675,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-380.1775593778675,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-380.1775593778675,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -380.1775593778675, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -378.0868077965798, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-369.72380147142906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-369.72380147142906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-369.72380147142906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-369.72380147142906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -369.72380147142906, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -359.2700435649906, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -340.4532793334014, -876.8373990088583 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.99952142696293, -876.8373990088583 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-876.8373990088583]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -321.6365151018123, -876.8373990088583 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -321.6365151018123, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-881.0189021714336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -319.5457635205246, -881.0189021714336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-317.4550119392369,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-317.4550119392369,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-317.4550119392369,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-317.4550119392369,-883.1096537527213]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -317.4550119392369, -883.1096537527213 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-885.200405334009]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-885.200405334009]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-885.200405334009]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-885.200405334009]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -315.3642603579492, -885.200405334009 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -313.2735087766615, -887.2911569152967 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-889.3819084965844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-889.3819084965844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-889.3819084965844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-889.3819084965844]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -311.1827571953738, -889.3819084965844 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -891.472660077872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -304.91050245151075, -891.472660077872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -302.81975087022306, -891.472660077872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-895.6541632404474]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-895.6541632404474]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-895.6541632404474]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-895.6541632404474]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -298.6382477076477, -895.6541632404474 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -899.8356664030227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-910.2894243094613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-910.2894243094613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-910.2894243094613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-275.6399803134831,-910.2894243094613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -275.6399803134831, -910.2894243094613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -166.92089808652315, -950.0137043539273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.96929166799953, -1008.5547486299827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.2172899301669,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 412.2172899301669, -1121.455334019518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 868.001134650883, -1058.7327865808873 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[629.6554543840865,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 629.6554543840865, -989.7379843983935 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 368.31150672312526, -958.3767106790781 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.96929166799953, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-125.10586646076945,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -125.10586646076945, -989.7379843983935 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-1025.2807612802842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-1025.2807612802842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-1025.2807612802842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-1025.2807612802842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -277.73073189477077, -1025.2807612802842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -378.0868077965798, -1054.5512834183119 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -451.263113141649, -1075.4587992311888 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1092.1848118814903 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1100.547818206641]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1100.547818206641]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1100.547818206641]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1100.547818206641]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1100.547818206641 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1117.2738308569426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1129.8183403446687 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1136.0905950885317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1140.272098251107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1140.272098251107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1140.272098251107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-1140.272098251107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -1140.272098251107 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -511.894908998992, -1136.0905950885317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-1117.2738308569426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -530.7116732305813, -1117.2738308569426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -1060.8235381621748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -564.1636985311842, -979.284226491955 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -570.4359532750473, -906.1079211468859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -570.4359532750473, -901.9264179843105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-904.0171695655981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-904.0171695655981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-904.0171695655981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-570.4359532750473,-904.0171695655981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -570.4359532750473, -904.0171695655981 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-906.1079211468859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -568.3452016937596, -906.1079211468859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -564.1636985311842, -920.7431822158997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -553.7099406247457, -935.3784432849136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -532.8024248118688, -947.9229527726397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -513.9856605802797, -958.3767106790781 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -488.8966416048274, -960.4674622603658 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-960.4674622603658]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -463.8076226293751, -960.4674622603658 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-451.263113141649,-956.2859590977905]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -451.263113141649, -956.2859590977905 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-444.9908583977859,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-444.9908583977859,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-444.9908583977859,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-444.9908583977859,-954.1952075165027]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -444.9908583977859, -954.1952075165027 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-438.71860365392286,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-438.71860365392286,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-438.71860365392286,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-438.71860365392286,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -438.71860365392286, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -432.4463489100598, -947.9229527726397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -947.9229527726397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -426.1740941661967, -947.9229527726397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-947.9229527726397]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.9925910036213, -947.9229527726397 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-950.0137043539273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.9925910036213, -950.0137043539273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -424.083342584909, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -426.1740941661967, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -434.5371004913475, -958.3767106790781 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.0816099790736,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.0816099790736,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.0816099790736,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-447.0816099790736,-966.7397170042289]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -447.0816099790736, -966.7397170042289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -463.8076226293751, -975.1027233293796 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.8983742106628,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.8983742106628,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.8983742106628,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.8983742106628,-979.284226491955]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -465.8983742106628, -979.284226491955 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -474.26138053581354, -981.3749780732427 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -474.26138053581354, -981.3749780732427 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -474.26138053581354, -977.1934749106673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -453.3538647229367, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -914.4709274720367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-864.2928895211321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-864.2928895211321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-864.2928895211321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-864.2928895211321]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -864.2928895211321 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.21637225059203,150.23320654462736]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.21637225059203,150.23320654462736]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.21637225059203,150.23320654462736]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.21637225059203,150.23320654462736]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.21637225059203, 150.23320654462736 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -33.11279688411105, -799.4795905012138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,203.54737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,203.54737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,203.54737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.75048610330578,203.54737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 233.75048610330578, 203.54737186746354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 67.243279017698, -763.936813619323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.01621159425986,259.9748223023788]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.01621159425986,259.9748223023788]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.01621159425986,259.9748223023788]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.01621159425986,259.9748223023788]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.01621159425986, 259.9748223023788 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 67.243279017698, -763.936813619323 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 401.7635320237283, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[458.2138247184961,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 458.2138247184961, -625.9472092543355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, -615.493451347897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, -602.9489418601709 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 506.30111108811286, -594.5859355350201 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 516.7548689945512, -590.4044323724447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -577.8599228847187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[554.3883974577296,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 554.3883974577296, -567.4061649782802 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 571.1144101080312, -563.2246618157048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[589.9311743396205,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 589.9311743396205, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[602.4756838273466,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 602.4756838273466, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 635.9277091279497, -554.8616554905541 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 656.8352249408266, -548.589400746691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[702.8317597291556,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 702.8317597291556, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 782.2803198180878, -500.5021143770741 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 859.6381283257323, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[920.2699241830754,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[920.2699241830754,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[920.2699241830754,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[920.2699241830754,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 920.2699241830754, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 951.6311979023907, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[959.9942042275414,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[959.9942042275414,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[959.9942042275414,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[959.9942042275414,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 959.9942042275414, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[957.9034526462539,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[957.9034526462539,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[957.9034526462539,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[957.9034526462539,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 957.9034526462539, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[955.8127010649661,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[955.8127010649661,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[955.8127010649661,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[955.8127010649661,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 955.8127010649661, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 953.7219494836785, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 951.6311979023907, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 947.4496947398153, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 943.2681915772399, -464.9593374951834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[941.1774399959523,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 941.1774399959523, -469.14084065775876 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[939.0866884146645,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[939.0866884146645,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[939.0866884146645,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[939.0866884146645,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 939.0866884146645, -471.23159223904645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[934.9051852520892,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[934.9051852520892,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[934.9051852520892,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[934.9051852520892,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 934.9051852520892, -471.23159223904645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-473.32234382033414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 932.8144336708016, -473.32234382033414 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 930.7236820895138, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":52.1044190260925}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":52.1044190260925}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":52.1044190260925}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":52.1044190260925}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":52.1044190260925}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: 52.1044190260925,
+ type: 0 }
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-133.2135590331426}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-133.2135590331426}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-133.2135590331426}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-133.2135590331426}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-133.2135590331426}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -133.2135590331426,
+ type: 0 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":279.3266125675432}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":279.3266125675432}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":279.3266125675432}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-75.22654126010241}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-75.22654126010241}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-75.22654126010241}
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-317.4881958280226}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-317.4881958280226}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-317.4881958280226}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-170.86231566955587}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-170.86231566955587}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-170.86231566955587}
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+called update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+calling update on data {"type":5,"data":[],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+called update on data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":6,"data":"a nested collection","_id":"34c3fd6e-0901-443a-8f3a-92eefbd24967"}
+called update on data {"type":6,"data":"a nested collection","_id":"34c3fd6e-0901-443a-8f3a-92eefbd24967"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Incoming : 226d38d2-370c-40b2-8054-0fb44dcd99d6, receiving Set Field with data {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","type":0,"data":1}
+calling update on data {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","type":0,"data":1}
+called update on data {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":6,"data":"Transparent","_id":"af605412-62f3-46fd-8e16-3f0bb1dfb2ea"}
+called update on data {"type":6,"data":"Transparent","_id":"af605412-62f3-46fd-8e16-3f0bb1dfb2ea"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":12,"data":{},"_id":"5c4bb999-fffb-4cb4-8609-506deb098855"}
+called update on data {"type":12,"data":{},"_id":"5c4bb999-fffb-4cb4-8609-506deb098855"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"],["59b58624-916f-50a0-8efa-7003a805bfad","5c4bb999-fffb-4cb4-8609-506deb098855"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"],["59b58624-916f-50a0-8efa-7003a805bfad","5c4bb999-fffb-4cb4-8609-506deb098855"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+calling update on data {"type":5,"data":[],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : a12c0892-2b78-49e7-a734-97900b3676eb, receiving Set Field with data {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","type":0,"data":-474.26138053581354}
+calling update on data {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","type":0,"data":-474.26138053581354}
+called update on data {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","type":0,"data":-474.26138053581354}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : 20b0822d-da85-4ad7-ab57-8d6dc217f548, receiving Set Field with data {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","type":0,"data":-981.3749780732427}
+calling update on data {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","type":0,"data":-981.3749780732427}
+called update on data {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","type":0,"data":-981.3749780732427}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : 77961865-700c-47af-b4f1-df449d15ea11, receiving Set Field with data {"_id":"77961865-700c-47af-b4f1-df449d15ea11","type":0,"data":1404.9850626253274}
+calling update on data {"_id":"77961865-700c-47af-b4f1-df449d15ea11","type":0,"data":1404.9850626253274}
+called update on data {"_id":"77961865-700c-47af-b4f1-df449d15ea11","type":0,"data":1404.9850626253274}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : f8d64559-98ea-431c-a90a-736a50d17da0, receiving Set Field with data {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","type":0,"data":503.87113109033317}
+calling update on data {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","type":0,"data":503.87113109033317}
+called update on data {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","type":0,"data":503.87113109033317}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : fd9581ab-59d5-4b96-aa66-f5405e6c3b5f, receiving Set Field with data {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","type":0,"data":0}
+calling update on data {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","type":0,"data":0}
+called update on data {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : 37cd2c18-bae8-4c7a-9f56-898eabf021ea, receiving Set Field with data {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","type":0,"data":0}
+calling update on data {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","type":0,"data":0}
+called update on data {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2, receiving Set Field with data {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","type":0,"data":-1}
+calling update on data {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","type":0,"data":-1}
+called update on data {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","type":0,"data":-1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+calling update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563', data: 0, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":279.3266125675432}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":279.3266125675432}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 279.3266125675432,
+ type: 0 }
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-75.22654126010241}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-75.22654126010241}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -75.22654126010241,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-170.86231566955587}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-170.86231566955587}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -89.25704505117244,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-317.4881958280226}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-317.4881958280226}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -170.86231566955587,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+{ _id: '0dc04257-8187-4391-a1bf-a63c30a9e922',
+ data: {},
+ type: 12 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+Broadcast : 0dc04257-8187-4391-a1bf-a63c30a9e922, sending data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830', data: 0, type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data: [],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+Broadcast : 935e09ed-1501-4c7a-9d62-c58d02484fa1, sending data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data: [],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+{ _id: '935e09ed-1501-4c7a-9d62-c58d02484fa1',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+Broadcast : 935e09ed-1501-4c7a-9d62-c58d02484fa1, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+{ _id: '935e09ed-1501-4c7a-9d62-c58d02484fa1',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"34c3fd6e-0901-443a-8f3a-92eefbd24967"}],"ok":1}
+Wrote {"type":6,"data":"a nested collection","_id":"34c3fd6e-0901-443a-8f3a-92eefbd24967"}
+Broadcast : 34c3fd6e-0901-443a-8f3a-92eefbd24967, sending data {"type":6,"data":"a nested collection","_id":"34c3fd6e-0901-443a-8f3a-92eefbd24967"}
+{ _id: '34c3fd6e-0901-443a-8f3a-92eefbd24967',
+ data: 'a nested collection',
+ type: 6 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6"}],"ok":1}
+Wrote {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","type":0,"data":1}
+Broadcast : 226d38d2-370c-40b2-8054-0fb44dcd99d6, sending data {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","type":0,"data":1}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '935e09ed-1501-4c7a-9d62-c58d02484fa1' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+{ _id: '226d38d2-370c-40b2-8054-0fb44dcd99d6', data: 1, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"af605412-62f3-46fd-8e16-3f0bb1dfb2ea"}],"ok":1}
+Wrote {"type":6,"data":"Transparent","_id":"af605412-62f3-46fd-8e16-3f0bb1dfb2ea"}
+Broadcast : af605412-62f3-46fd-8e16-3f0bb1dfb2ea, sending data {"type":6,"data":"Transparent","_id":"af605412-62f3-46fd-8e16-3f0bb1dfb2ea"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '935e09ed-1501-4c7a-9d62-c58d02484fa1' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34c3fd6e-0901-443a-8f3a-92eefbd24967' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '226d38d2-370c-40b2-8054-0fb44dcd99d6' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '935e09ed-1501-4c7a-9d62-c58d02484fa1' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34c3fd6e-0901-443a-8f3a-92eefbd24967' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '226d38d2-370c-40b2-8054-0fb44dcd99d6' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'af605412-62f3-46fd-8e16-3f0bb1dfb2ea' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"],["59b58624-916f-50a0-8efa-7003a805bfad","5c4bb999-fffb-4cb4-8609-506deb098855"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+Broadcast : 4b6adcc6-2586-48e6-bb9a-64849ce852db, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","935e09ed-1501-4c7a-9d62-c58d02484fa1"],["51529209-4838-51c5-a520-0044fddf139c","34c3fd6e-0901-443a-8f3a-92eefbd24967"],["771c0a88-bd02-5e92-953f-e9042a191928","226d38d2-370c-40b2-8054-0fb44dcd99d6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","af605412-62f3-46fd-8e16-3f0bb1dfb2ea"],["59b58624-916f-50a0-8efa-7003a805bfad","5c4bb999-fffb-4cb4-8609-506deb098855"]],"_id":"4b6adcc6-2586-48e6-bb9a-64849ce852db"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"5c4bb999-fffb-4cb4-8609-506deb098855"}],"ok":1}
+Wrote {"type":12,"data":{},"_id":"5c4bb999-fffb-4cb4-8609-506deb098855"}
+Broadcast : 5c4bb999-fffb-4cb4-8609-506deb098855, sending data {"type":12,"data":{},"_id":"5c4bb999-fffb-4cb4-8609-506deb098855"}
+{ _id: '4b6adcc6-2586-48e6-bb9a-64849ce852db',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '935e09ed-1501-4c7a-9d62-c58d02484fa1' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34c3fd6e-0901-443a-8f3a-92eefbd24967' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '226d38d2-370c-40b2-8054-0fb44dcd99d6' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'af605412-62f3-46fd-8e16-3f0bb1dfb2ea' ],
+ [ '59b58624-916f-50a0-8efa-7003a805bfad',
+ '5c4bb999-fffb-4cb4-8609-506deb098855' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data: [],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a12c0892-2b78-49e7-a734-97900b3676eb"}],"ok":1}
+Wrote {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","type":0,"data":-474.26138053581354}
+Broadcast : a12c0892-2b78-49e7-a734-97900b3676eb, sending data {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","type":0,"data":-474.26138053581354}
+{ _id: 'a12c0892-2b78-49e7-a734-97900b3676eb',
+ data: -474.26138053581354,
+ type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548"}],"ok":1}
+Wrote {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","type":0,"data":-981.3749780732427}
+Broadcast : 20b0822d-da85-4ad7-ab57-8d6dc217f548, sending data {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","type":0,"data":-981.3749780732427}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: '20b0822d-da85-4ad7-ab57-8d6dc217f548',
+ data: -981.3749780732427,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"77961865-700c-47af-b4f1-df449d15ea11"}],"ok":1}
+Wrote {"_id":"77961865-700c-47af-b4f1-df449d15ea11","type":0,"data":1404.9850626253274}
+Broadcast : 77961865-700c-47af-b4f1-df449d15ea11, sending data {"_id":"77961865-700c-47af-b4f1-df449d15ea11","type":0,"data":1404.9850626253274}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"f8d64559-98ea-431c-a90a-736a50d17da0"}],"ok":1}
+Wrote {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","type":0,"data":503.87113109033317}
+Broadcast : f8d64559-98ea-431c-a90a-736a50d17da0, sending data {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","type":0,"data":503.87113109033317}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"}],"ok":1}
+Wrote {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","type":0,"data":0}
+Broadcast : fd9581ab-59d5-4b96-aa66-f5405e6c3b5f, sending data {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","type":0,"data":0}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: 'fd9581ab-59d5-4b96-aa66-f5405e6c3b5f', data: 0, type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea"}],"ok":1}
+Wrote {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","type":0,"data":0}
+Broadcast : 37cd2c18-bae8-4c7a-9f56-898eabf021ea, sending data {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","type":0,"data":0}
+{ _id: '37cd2c18-bae8-4c7a-9f56-898eabf021ea', data: 0, type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"}],"ok":1}
+Wrote {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","type":0,"data":-1}
+Broadcast : a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2, sending data {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","type":0,"data":-1}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ 'fd9581ab-59d5-4b96-aa66-f5405e6c3b5f' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: 'a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2',
+ data: -1,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ 'fd9581ab-59d5-4b96-aa66-f5405e6c3b5f' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '37cd2c18-bae8-4c7a-9f56-898eabf021ea' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 930.7236820895138, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 930.7236820895138, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+called update on data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+Broadcast : fc42ca0d-4ad0-4177-99ce-6985311ff84d, sending data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+{ _id: 'fc42ca0d-4ad0-4177-99ce-6985311ff84d',
+ data: [],
+ type: 1 }
+calling update on data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+called update on data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+Broadcast : fc42ca0d-4ad0-4177-99ce-6985311ff84d, sending data {"type":1,"data":[],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+{ _id: 'fc42ca0d-4ad0-4177-99ce-6985311ff84d',
+ data: [],
+ type: 1 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":1,"data":["339bd0a7-a2d6-4198-a985-03d4d5c6f76a"],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+called update on data {"type":1,"data":["339bd0a7-a2d6-4198-a985-03d4d5c6f76a"],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+undefined
+null
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ 'fd9581ab-59d5-4b96-aa66-f5405e6c3b5f' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '37cd2c18-bae8-4c7a-9f56-898eabf021ea' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ 'fc42ca0d-4ad0-4177-99ce-6985311ff84d' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}],"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 701.4925313126637, 248.8448139638789 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[701.4925313126637,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["339bd0a7-a2d6-4198-a985-03d4d5c6f76a"],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+Broadcast : fc42ca0d-4ad0-4177-99ce-6985311ff84d, sending data {"type":1,"data":["339bd0a7-a2d6-4198-a985-03d4d5c6f76a"],"_id":"fc42ca0d-4ad0-4177-99ce-6985311ff84d"}
+{ _id: 'fc42ca0d-4ad0-4177-99ce-6985311ff84d',
+ data: [ '339bd0a7-a2d6-4198-a985-03d4d5c6f76a' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[930.7236820895138,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 930.7236820895138, -479.5945985641972 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[932.8144336708016,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 932.8144336708016, -481.6853501454849 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[943.2681915772399,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 943.2681915772399, -483.7761017267726 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1008.0814905971584,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1008.0814905971584, -490.04835647063567 ] ],
+ type: 14 }
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1020.6260000848844,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1020.6260000848844,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1020.6260000848844,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1020.6260000848844,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1020.6260000848844, -71.89804021309783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 838.7306125128554, -140.89284239559152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -226.61365722838673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-538.3231563909362,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-538.3231563909362,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-538.3231563909362,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-538.3231563909362,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -538.3231563909362, 140.12573173691908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -588.313680791157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-654.0660165265549,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-654.0660165265549,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-654.0660165265549,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-654.0660165265549,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -654.0660165265549, -709.5772725058431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 727.9207787046079, -920.7431822158997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[447.7600668120575,-1002.2824938861196]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[447.7600668120575,-1002.2824938861196]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[447.7600668120575,-1002.2824938861196]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[447.7600668120575,-1002.2824938861196]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 447.7600668120575, -1002.2824938861196 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.931293721535667,-1138.1813466698195]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.931293721535667,-1138.1813466698195]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.931293721535667,-1138.1813466698195]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.931293721535667,-1138.1813466698195]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -28.931293721535667, -1138.1813466698195 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-886.1394420494884,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-886.1394420494884,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-886.1394420494884,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-886.1394420494884,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -886.1394420494884, -973.0119717480919 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-695.8810481523087,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-695.8810481523087,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-695.8810481523087,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-695.8810481523087,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -695.8810481523087, -998.1009907235442 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -522.3486669054305, -1019.0085065364211 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-1039.9160223492981]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -415.72033625975826, -1039.9160223492981 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -365.5422983088537, -1052.460531837024 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-363.451546727566,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-363.451546727566,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-363.451546727566,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-363.451546727566,-1054.5512834183119]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -363.451546727566, -1054.5512834183119 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, -1058.7327865808873 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -359.2700435649906, -1060.8235381621748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-1060.8235381621748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -1060.8235381621748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -352.99778882112753, -1065.0050413247502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-1073.368047649901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-1073.368047649901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-1073.368047649901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-1073.368047649901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -340.4532793334014, -1073.368047649901 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-334.1810245895383,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -334.1810245895383, -1077.5495508124764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.90876984567524, -1079.6403023937642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -321.6365151018123, -1081.7310539750517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -319.5457635205246, -1081.7310539750517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -311.1827571953738, -1081.7310539750517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-1077.5495508124764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -286.09373821992153, -1077.5495508124764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-229.64344552515388,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-229.64344552515388,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-229.64344552515388,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-229.64344552515388,-1065.0050413247502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -229.64344552515388, -1065.0050413247502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-1035.7345191867225]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -116.74286013561868, -1035.7345191867225 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,-209.02978233812513]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,-209.02978233812513]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,-209.02978233812513]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,-209.02978233812513]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -28.179770556739868, -209.02978233812513 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-937.4691948662012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 201.05138022011022, -937.4691948662012 ] ],
+ type: 14 }
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-1136.0905950885317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 945.3589431585277, -1136.0905950885317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 698.6502565665802, -1006.463997048695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[677.7427407537033,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[677.7427407537033,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[677.7427407537033,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[677.7427407537033,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 677.7427407537033, -1000.1917423048319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[673.5612375911279,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[673.5612375911279,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[673.5612375911279,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[673.5612375911279,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 673.5612375911279, -1000.1917423048319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 671.4704860098403, -1000.1917423048319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, -1000.1917423048319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,-1000.1917423048319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 665.1982312659771, -1000.1917423048319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 656.8352249408266, -991.8287359796811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.7873099323872,-252.9355655451666]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.7873099323872,-252.9355655451666]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.7873099323872,-252.9355655451666]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.7873099323872,-252.9355655451666]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 408.7873099323872, -252.9355655451666 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-981.3749780732427]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 638.0184607092373, -981.3749780732427 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[356.51852040019503,-215.3020370819882]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[356.51852040019503,-215.3020370819882]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[356.51852040019503,-215.3020370819882]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[356.51852040019503,-215.3020370819882]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 356.51852040019503, -215.3020370819882 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-943.7414496100644]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 585.7496711770451, -943.7414496100644 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-200.66677601297437]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-200.66677601297437]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-200.66677601297437]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-200.66677601297437]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 327.24799826216736, -200.66677601297437 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 556.4791490390174, -929.1061885410504 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-236.20955289486508]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-236.20955289486508]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-236.20955289486508]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-236.20955289486508]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -241.43643184808423, -236.20955289486508 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -12.20528107123414, -964.6489654229412 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-1006.463997048695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -1006.463997048695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-1111.0015761130794]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-1111.0015761130794]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-1111.0015761130794]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-1111.0015761130794]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -51.92956111570027, -1111.0015761130794 ] ],
+ type: 14 }
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, -1121.455334019518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 228.2311507768501, -1029.4622644428596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-998.1009907235442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 213.59588970783636, -998.1009907235442 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,-158.8517443872206]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,-158.8517443872206]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,-158.8517443872206]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,-158.8517443872206]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -90.9023179953706, -158.8517443872206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-887.2911569152967]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -887.2911569152967 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.70597661557963,183.23060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.70597661557963,183.23060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.70597661557963,183.23060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.70597661557963,183.23060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 219.70597661557963, 183.23060763587432 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-170.35087808430285,-48.041910578973045]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-170.35087808430285,-48.041910578973045]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -90.9023179953706, -158.8517443872206 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-170.35087808430285,-48.041910578973045]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-170.35087808430285,-48.041910578973045]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -776.4813231070491 ] ],
+ type: 14 }
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,39.769655835109916]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,39.769655835109916]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,39.769655835109916]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,39.769655835109916]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -276.97920872997497, 39.769655835109916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -47.748057953124885, -688.6697566929662 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -343.8832593311811, 104.58295485502833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -114.652108554331, -623.8564576730478 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-406.6058067698117,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-406.6058067698117,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-406.6058067698117,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-406.6058067698117,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -406.6058067698117, 148.48873806206984 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -177.3746559929616, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394286,181.94076336267278]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394286,181.94076336267278]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394286,181.94076336267278]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394286,181.94076336267278]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -454.6930931394286, 181.94076336267278 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -225.4619423625785, -546.4986491654033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.05436685874395,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.05436685874395,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.05436685874395,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.05436685874395,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.05436685874395, 194.48527285039893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -533.9541396776772 ] ],
+ type: 14 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -496.5081247651824, 194.48527285039893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -533.9541396776772 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,194.48527285039893]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -500.6896279277578, 194.48527285039893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -267.2769739883323, -533.9541396776772 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -500.6896279277578, 192.39452126911124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -271.4584771509077, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,188.21301810653586]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,188.21301810653586]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,188.21301810653586]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.6896279277578,188.21301810653586]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -500.6896279277578, 188.21301810653586 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -271.4584771509077, -536.0448912589649 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651824,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -496.5081247651824, 184.03151494396047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -267.2769739883323, -544.4078975841156 ] ],
+ type: 14 }
+S sending : a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2, receiving Get Field with data {"_id":"a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2","data":-1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,175.6685086188097]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,175.6685086188097]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,175.6685086188097]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,175.6685086188097]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -490.23587002131933, 175.6685086188097 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -261.00471924446924, -552.7709039092664 ] ],
+ type: 14 }
+S sending : a12c0892-2b78-49e7-a734-97900b3676eb, receiving Get Field with data {"_id":"a12c0892-2b78-49e7-a734-97900b3676eb","data":-474.26138053581354,"type":0}
+S sending : 20b0822d-da85-4ad7-ab57-8d6dc217f548, receiving Get Field with data {"_id":"20b0822d-da85-4ad7-ab57-8d6dc217f548","data":-981.3749780732427,"type":0}
+S sending : 77961865-700c-47af-b4f1-df449d15ea11, receiving Get Field with data {"_id":"77961865-700c-47af-b4f1-df449d15ea11","data":1404.9850626253274,"type":0}
+S sending : f8d64559-98ea-431c-a90a-736a50d17da0, receiving Get Field with data {"_id":"f8d64559-98ea-431c-a90a-736a50d17da0","data":503.87113109033317,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,171.48700545623433]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,171.48700545623433]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,171.48700545623433]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,171.48700545623433]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -481.87286369616857, 171.48700545623433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -261.00471924446924, -552.7709039092664 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-252.64171291931848,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-477.6913605335932,169.39625387494664]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-477.6913605335932,169.39625387494664]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-477.6913605335932,169.39625387494664]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-477.6913605335932,169.39625387494664]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -477.6913605335932, 169.39625387494664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-248.4602097567431,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -248.4602097567431, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-473.5098573710178,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-473.5098573710178,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-473.5098573710178,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-473.5098573710178,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -473.5098573710178, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -244.27870659416772, -561.1339102344172 ] ],
+ type: 14 }
+S sending : 226d38d2-370c-40b2-8054-0fb44dcd99d6, receiving Get Field with data {"_id":"226d38d2-370c-40b2-8054-0fb44dcd99d6","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.14685104586704,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.14685104586704,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.14685104586704,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-465.14685104586704,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -465.14685104586704, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.91570026901695,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -235.91570026901695, -563.2246618157048 ] ],
+ type: 14 }
+S sending : fd9581ab-59d5-4b96-aa66-f5405e6c3b5f, receiving Get Field with data {"_id":"fd9581ab-59d5-4b96-aa66-f5405e6c3b5f","data":0,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-460.96534788329166,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-460.96534788329166,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-460.96534788329166,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-460.96534788329166,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -460.96534788329166, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -235.91570026901695, -563.2246618157048 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+S sending : 37cd2c18-bae8-4c7a-9f56-898eabf021ea, receiving Get Field with data {"_id":"37cd2c18-bae8-4c7a-9f56-898eabf021ea","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.14858365170244,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.14858365170244,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.14858365170244,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.14858365170244,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -442.14858365170244, 158.94249596850818 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -212.91743287485235, -569.4969165595679 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-433.7855773265517,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-433.7855773265517,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-433.7855773265517,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-433.7855773265517,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -433.7855773265517, 156.8517443872205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-204.5544265497016,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-204.5544265497016,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-204.5544265497016,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-204.5544265497016,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -204.5544265497016, -571.5876681408556 ] ],
+ type: 14 }
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.694825745264,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.694825745264,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.694825745264,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.694825745264,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -431.694825745264, 156.8517443872205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-202.4636749684139,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -202.4636749684139, -571.5876681408556 ] ],
+ type: 14 }
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":52.1044190260925,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-133.2135590331426,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":3,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":279.3266125675432,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":-75.22654126010241,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":4,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-317.4881958280226,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":-170.86231566955587,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":5,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-429.6040741639763,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-429.6040741639763,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-429.6040741639763,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-429.6040741639763,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -429.6040741639763, 156.8517443872205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -200.3729233871262, -571.5876681408556 ] ],
+ type: 14 }
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 300,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-427.5133225826886,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-427.5133225826886,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-427.5133225826886,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-427.5133225826886,158.94249596850818]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -427.5133225826886, 158.94249596850818 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-198.28217180583852,-569.4969165595679]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -198.28217180583852, -569.4969165595679 ] ],
+ type: 14 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -425.4225710014009, 161.03324754979587 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -567.4061649782802 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-425.4225710014009,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -425.4225710014009, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -567.4061649782802 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-423.3318194201132,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-423.3318194201132,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-423.3318194201132,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-423.3318194201132,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -423.3318194201132, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -194.10066864326313, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882553,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882553,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882553,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882553,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.24106783882553, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -192.00991706197544, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.15031625753784,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.15031625753784,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.15031625753784,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.15031625753784,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -419.15031625753784, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -189.91916548068775, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.05956467625015,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.05956467625015,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.05956467625015,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.05956467625015,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -417.05956467625015, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -187.82841389940006, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-412.87806151367477,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-412.87806151367477,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-412.87806151367477,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-412.87806151367477,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -412.87806151367477, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -187.82841389940006, -561.1339102344172 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-408.6965583510994,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-408.6965583510994,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-408.6965583510994,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-408.6965583510994,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -408.6965583510994, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-179.4654075742493,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-179.4654075742493,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-179.4654075742493,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-179.4654075742493,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -179.4654075742493, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.4243036072363,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.4243036072363,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.4243036072363,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.4243036072363,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -402.4243036072363, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-173.19315283038623,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-173.19315283038623,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-173.19315283038623,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-173.19315283038623,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -173.19315283038623, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337324,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337324,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337324,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337324,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -396.15204886337324, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -166.92089808652315, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-391.97054570079786,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-391.97054570079786,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-391.97054570079786,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-391.97054570079786,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -391.97054570079786, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-162.73939492394777,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-162.73939492394777,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-162.73939492394777,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-162.73939492394777,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -162.73939492394777, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-389.87979411951017,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-389.87979411951017,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-389.87979411951017,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-389.87979411951017,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -389.87979411951017, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -162.73939492394777, -561.1339102344172 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-387.7890425382225,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-387.7890425382225,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-387.7890425382225,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-387.7890425382225,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -387.7890425382225, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -158.5578917613724, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-385.6982909569348,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-385.6982909569348,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-385.6982909569348,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-385.6982909569348,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -385.6982909569348, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -156.4671401800847, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -381.5167877943594, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -152.28563701750932, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.5167877943594,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -381.5167877943594, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -152.28563701750932, -563.2246618157048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-379.4260362130717,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-379.4260362130717,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-379.4260362130717,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-379.4260362130717,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -379.4260362130717, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -152.28563701750932, -563.2246618157048 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-377.335284631784,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-377.335284631784,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-377.335284631784,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-377.335284631784,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -377.335284631784, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -148.10413385493393, -563.2246618157048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920875,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920875,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920875,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920875,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -373.15378146920875, 163.12399913108356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-143.92263069235867,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-143.92263069235867,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-143.92263069235867,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-143.92263069235867,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -143.92263069235867, -565.3154133969925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.06302988792106,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.06302988792106,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.06302988792106,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.06302988792106,161.03324754979587]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -371.06302988792106, 161.03324754979587 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-141.83187911107098,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-141.83187911107098,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-141.83187911107098,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-141.83187911107098,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -141.83187911107098, -567.4061649782802 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-366.8815267253457,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-366.8815267253457,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-366.8815267253457,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-366.8815267253457,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -366.8815267253457, 156.8517443872205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-137.6503759484956,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-137.6503759484956,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-137.6503759484956,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-137.6503759484956,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -137.6503759484956, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-362.7000235627703,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-362.7000235627703,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-362.7000235627703,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-362.7000235627703,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -362.7000235627703, 152.6702412246451 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-133.4688727859202,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -133.4688727859202, -575.769171303431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,144.30723489949446]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,144.30723489949446]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,144.30723489949446]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,144.30723489949446]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -358.5185204001949, 144.30723489949446 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -129.28736962334483, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-358.5185204001949,140.12573173691908]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -358.5185204001949, 140.12573173691908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -129.28736962334483, -588.313680791157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.15551407504415,127.58122224919293]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.15551407504415,127.58122224919293]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.15551407504415,127.58122224919293]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.15551407504415,127.58122224919293]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.15551407504415, 127.58122224919293 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -120.92436329819407, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,117.12746434275448]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,117.12746434275448]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,117.12746434275448]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-343.8832593311811,117.12746434275448]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -343.8832593311811, 117.12746434275448 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-611.3119481853216]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -114.652108554331, -611.3119481853216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-337.611004587318,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-337.611004587318,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-337.611004587318,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-337.611004587318,104.58295485502833]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -337.611004587318, 104.58295485502833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -114.652108554331, -611.3119481853216 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-333.4295014247426,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-333.4295014247426,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-333.4295014247426,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-333.4295014247426,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -333.4295014247426, 89.9476937860145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -104.19835064789254, -638.4917187420616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.06649509959186,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.06649509959186,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.06649509959186,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.06649509959186,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.06649509959186, 75.31243271700066 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -95.83534432274178, -653.1269798110754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-314.6127371931534,60.677171647986825]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-314.6127371931534,60.677171647986825]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-314.6127371931534,60.677171647986825]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-314.6127371931534,60.677171647986825]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -314.6127371931534, 60.677171647986825 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -85.38158641630332, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929033,46.04191057897299]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929033,46.04191057897299]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929033,46.04191057897299]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929033,46.04191057897299]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -308.34048244929033, 46.04191057897299 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -79.10933167244025, -682.3975019491031 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428519,33.49740109124684]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428519,33.49740109124684]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428519,33.49740109124684]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428519,33.49740109124684]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -297.8867245428519, 33.49740109124684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-694.9420114368293]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-694.9420114368293]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-694.9420114368293]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-694.9420114368293]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -68.6555737660018, -694.9420114368293 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.946716415482115,283.58668353768337]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.946716415482115,283.58668353768337]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.946716415482115,283.58668353768337]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.946716415482115,283.58668353768337]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.946716415482115, 283.58668353768337 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.5237182177011,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.5237182177011,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.5237182177011,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.5237182177011,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.5237182177011, 18.862140022233007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -60.29256744085103, -709.5772725058431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.76348064707122,267.90604667802575]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.76348064707122,267.90604667802575]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.76348064707122,267.90604667802575]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.76348064707122,267.90604667802575]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 59.76348064707122, 267.90604667802575 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.97920872997497,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -276.97920872997497, 8.408382115794609 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-47.748057953124885,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -47.748057953124885, -720.0310304122816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.30799013479736,255.3615371902996]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.30799013479736,255.3615371902996]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.30799013479736,255.3615371902996]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.30799013479736,255.3615371902996]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 72.30799013479736, 255.3615371902996 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.6162024048242,0.04537579064384545]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.6162024048242,0.04537579064384545]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.6162024048242,0.04537579064384545]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.6162024048242,0.04537579064384545]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -268.6162024048242, 0.04537579064384545 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.38505162797412,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.38505162797412,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -47.748057953124885, -720.0310304122816 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.38505162797412,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-39.38505162797412,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.71637225059203,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.71637225059203,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.71637225059203,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.71637225059203,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.71637225059203, 252.225409818368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-262.34394766096113,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-262.34394766096113,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-262.34394766096113,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-262.34394766096113,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -262.34394766096113, -2.0453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-33.11279688411105,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -33.11279688411105, -730.4847883187199 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.85249962252351,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.85249962252351,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.85249962252351,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.85249962252351,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 84.85249962252351, 252.225409818368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967344,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967344,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967344,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967344,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -260.25319607967344, -2.0453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.022045302823358, -730.4847883187199 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.26088173831818,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.26088173831818,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.26088173831818,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.26088173831818,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.26088173831818, 252.225409818368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -253.98094133581037, -2.0453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.022045302823358, -730.4847883187199 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-24.749790558960285,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.39700911024966,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.39700911024966,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.39700911024966,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.39700911024966,252.225409818368]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.39700911024966, 252.225409818368 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.89018975452268,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.89018975452268,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.89018975452268,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.89018975452268,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -251.89018975452268, -2.0453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-22.659038977672594,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -22.659038977672594, -730.4847883187199 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.66926385411284,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.66926385411284,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.66926385411284,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.66926385411284,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 103.66926385411284, 245.95315507450493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-247.7086865919473,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-247.7086865919473,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-247.7086865919473,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-247.7086865919473,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -247.7086865919473, -6.226878953219227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-18.477535815097212,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -18.477535815097212, -734.6662914812953 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.9415185979758,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.9415185979758,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.9415185979758,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.9415185979758,245.95315507450493]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 109.9415185979758, 245.95315507450493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937192,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937192,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937192,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937192,-6.226878953219227]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -243.52718342937192, -6.226878953219227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.29603265252183,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.29603265252183,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.29603265252183,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-14.29603265252183,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -14.29603265252183, -734.6662914812953 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.07764596990728,242.81702770257345]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.07764596990728,242.81702770257345]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.07764596990728,242.81702770257345]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.07764596990728,242.81702770257345]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.07764596990728, 242.81702770257345 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-241.43643184808423,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -241.43643184808423, -8.317630534506918 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -14.29603265252183, -734.6662914812953 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.34990071377047,239.68090033064198]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.34990071377047,239.68090033064198]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.34990071377047,239.68090033064198]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.34990071377047,239.68090033064198]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.34990071377047, 239.68090033064198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-237.25492868550884,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-237.25492868550884,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-237.25492868550884,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-237.25492868550884,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -237.25492868550884, -10.408382115794609 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.023777908658758,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.023777908658758,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.023777908658758,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-8.023777908658758,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -8.023777908658758, -738.8477946438707 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.48602808570195,236.54477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.48602808570195,236.54477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.48602808570195,236.54477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.48602808570195,236.54477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 122.48602808570195, 236.54477295871038 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.16417710422115,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.16417710422115,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.933026327371067,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.62215545763343,227.13639084291583]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.62215545763343,227.13639084291583]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293346,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293346,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.842274746083376,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.842274746083376,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -237.25492868550884, -10.408382115794609 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.16417710422115,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-235.16417710422115,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -5.933026327371067, -740.9385462251585 ] ],
+ type: 14 }
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 122.48602808570195, 236.54477295871038 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.62215545763343,227.13639084291583]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.62215545763343,227.13639084291583]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293346,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293346,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.842274746083376,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.842274746083376,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -233.07342552293346, -18.771388440945373 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -3.842274746083376, -747.2108009690214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[131.8944102014966,220.86413609905276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[131.8944102014966,220.86413609905276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[131.8944102014966,220.86413609905276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[131.8944102014966,220.86413609905276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 131.8944102014966, 220.86413609905276 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-228.89192236035808,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-228.89192236035808,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-228.89192236035808,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-228.89192236035808,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -228.89192236035808, -22.952891603520754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.33922841649200564,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.33922841649200564,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.33922841649200564,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.33922841649200564,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.33922841649200564, -751.3923041315968 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.0305375734281,211.4557539832581]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.0305375734281,211.4557539832581]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.0305375734281,211.4557539832581]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.0305375734281,211.4557539832581]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 135.0305375734281, 211.4557539832581 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.8011707790704,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.8011707790704,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.8011707790704,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.8011707790704,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -226.8011707790704, -29.225146347383827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.4299799977796965,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.4299799977796965,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.4299799977796965,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.4299799977796965,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 2.4299799977796965, -757.66455887546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.16666494535957,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.16666494535957,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.16666494535957,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.16666494535957,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.16666494535957, 208.3196266113266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977827,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977827,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977827,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977827,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -224.7104191977827, -31.315897928671518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 2.4299799977796965, -757.66455887546 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,202.04737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,202.04737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,202.04737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,202.04737186746354]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.30279231729128, 202.04737186746354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-35.4974010912469]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-35.4974010912469]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-35.4974010912469]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-35.4974010912469]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.619667616495, -35.4974010912469 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -763.936813619323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,205.18349923939502]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,205.18349923939502]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,205.18349923939502]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,205.18349923939502]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.30279231729128, 205.18349923939502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-33.40664950995921]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-33.40664950995921]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-33.40664950995921]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-33.40664950995921]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.619667616495, -33.40664950995921 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -763.936813619323 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,208.3196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.30279231729128, 208.3196266113266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-31.315897928671518]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.619667616495, -31.315897928671518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -759.7553104567476 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,214.59188135518968]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,214.59188135518968]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,214.59188135518968]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.30279231729128,214.59188135518968]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.30279231729128, 214.59188135518968 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.619667616495,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.619667616495, -27.134394766096136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -759.7553104567476 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+Broadcast : 935e09ed-1501-4c7a-9d62-c58d02484fa1, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{ _id: '935e09ed-1501-4c7a-9d62-c58d02484fa1',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-63.16802607572015}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-63.16802607572015}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-63.16802607572015}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -317.4881958280226,
+ type: 0 }
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-286.7115148803389}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-286.7115148803389}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-286.7115148803389}
+Incoming : d5d8a4db-3f32-4543-b3fc-6ae6712f594e, receiving Set Field with data {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","type":0,"data":1}
+calling update on data {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","type":0,"data":1}
+called update on data {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","d5d8a4db-3f32-4543-b3fc-6ae6712f594e"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","d5d8a4db-3f32-4543-b3fc-6ae6712f594e"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Incoming : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Set Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":2}
+calling update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":2}
+called update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":2}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.3027923172915,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.3027923172915,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.70050213580737,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.70050213580737,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-286.7115148803389}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-286.7115148803389}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-63.16802607572015}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-63.16802607572015}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e"}],"ok":1}
+Wrote {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","type":0,"data":1}
+Broadcast : d5d8a4db-3f32-4543-b3fc-6ae6712f594e, sending data {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","type":0,"data":1}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -286.7115148803389,
+ type: 0 }
+{ _id: 'd5d8a4db-3f32-4543-b3fc-6ae6712f594e', data: 1, type: 0 }
+{ _id: 'e3b590f8-23f0-4feb-831d-cbc9a516828a', data: 5, type: 0 }
+{ _id: 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '4b6adcc6-2586-48e6-bb9a-64849ce852db' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'a12c0892-2b78-49e7-a734-97900b3676eb' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '20b0822d-da85-4ad7-ab57-8d6dc217f548' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '77961865-700c-47af-b4f1-df449d15ea11' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f8d64559-98ea-431c-a90a-736a50d17da0' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ 'fd9581ab-59d5-4b96-aa66-f5405e6c3b5f' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '37cd2c18-bae8-4c7a-9f56-898eabf021ea' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ 'fc42ca0d-4ad0-4177-99ce-6985311ff84d' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","d5d8a4db-3f32-4543-b3fc-6ae6712f594e"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+Broadcast : edc14f86-fe3f-427a-bbc4-8d0e3ff030dc, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","4b6adcc6-2586-48e6-bb9a-64849ce852db"],["7b71638c-05b8-5573-9aa5-c737c9406a86","a12c0892-2b78-49e7-a734-97900b3676eb"],["13a3cc01-c286-57e1-8746-baa3ced34e76","20b0822d-da85-4ad7-ab57-8d6dc217f548"],["5c207bd2-0390-5c35-8972-06d185f387fb","77961865-700c-47af-b4f1-df449d15ea11"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f8d64559-98ea-431c-a90a-736a50d17da0"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","fd9581ab-59d5-4b96-aa66-f5405e6c3b5f"],["048d25ac-b841-5728-a599-e3a432137881","37cd2c18-bae8-4c7a-9f56-898eabf021ea"],["911954a3-bebc-5b20-81f3-3091a2e11907","a7c44bf9-c5e0-45d2-aa8c-e972d2f903b2"],["43606ee9-0825-51a3-98b2-06d36fdfd153","fc42ca0d-4ad0-4177-99ce-6985311ff84d"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","d5d8a4db-3f32-4543-b3fc-6ae6712f594e"]],"_id":"edc14f86-fe3f-427a-bbc4-8d0e3ff030dc"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":2}
+Broadcast : e3b590f8-23f0-4feb-831d-cbc9a516828a, sending data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":2}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.3027923172915,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.3027923172915,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.70050213580737,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[31.70050213580737,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.3027923172915, 217.72800872712128 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 31.70050213580737, -140.89284239559152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.43891968922298,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.43891968922298,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.43891968922298,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.43891968922298,217.72800872712128]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.43891968922298, 217.72800872712128 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-140.89284239559152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.791253717094946, -140.89284239559152 ] ],
+ type: 14 }
+S sending : d5d8a4db-3f32-4543-b3fc-6ae6712f594e, receiving Get Field with data {"_id":"d5d8a4db-3f32-4543-b3fc-6ae6712f594e","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,211.45575398325832]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,211.45575398325832]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,211.45575398325832]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,211.45575398325832]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 147.57504706115446, 211.45575398325832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 35.88200529838264, -145.0743455581669 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,205.18349923939513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,205.18349923939513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,205.18349923939513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,205.18349923939513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 147.57504706115446, 205.18349923939513 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 35.88200529838264, -149.25584872074228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,192.638989751669]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,192.638989751669]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,192.638989751669]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,192.638989751669]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 147.57504706115446, 192.638989751669 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 35.88200529838264, -157.61885504589304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,164.41384340428522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,164.41384340428522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,164.41384340428522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.57504706115446,164.41384340428522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 147.57504706115446, 164.41384340428522 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-176.43561927748215]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-176.43561927748215]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-176.43561927748215]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[35.88200529838264,-176.43561927748215]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 35.88200529838264, -176.43561927748215 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.80019340853823,82.87453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.80019340853823,82.87453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.80019340853823,82.87453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.80019340853823,82.87453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.80019340853823, 82.87453173406539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.698769529971855,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.698769529971855,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.698769529971855,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.698769529971855,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 54.698769529971855, -230.7951603909621 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.84210398751134,4.471347435777034]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.84210398751134,4.471347435777034]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.84210398751134,4.471347435777034]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.84210398751134,4.471347435777034]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 222.84210398751134, 4.471347435777034 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[86.06004324928733,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 86.06004324928733, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 129.96582645632873, -341.6049941992097 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.05484543178102, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 167.59935491950716, -441.9610701010188 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,248.8448139638789]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -49.08728636961678, 248.8448139638789 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.1438644072333, -479.5945985641972 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 215.39278866327584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -513.0466238648003 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 192.39452126911124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,184.03151494396047]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 184.03151494396047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -544.4078975841156 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,179.8500117813851]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,179.8500117813851]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,179.8500117813851]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,179.8500117813851]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 179.8500117813851 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-548.589400746691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -548.589400746691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,177.7592602000974]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,177.7592602000974]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,177.7592602000974]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,177.7592602000974]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 177.7592602000974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -550.6801523279787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,173.57775703752202]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,173.57775703752202]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,173.57775703752202]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,173.57775703752202]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 173.57775703752202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -554.8616554905541 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -44.905783207041395, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,167.30550229365895]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -46.9965347883292, 167.30550229365895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-561.1339102344172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 182.2346159885209, -561.1339102344172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,165.21475071237126]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -46.9965347883292, 165.21475071237126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 182.2346159885209, -561.1339102344172 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,156.8517443872205]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -46.9965347883292, 156.8517443872205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 182.2346159885209, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,148.48873806206984]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -38.633528463178436, 148.48873806206984 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.08901897545229,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.08901897545229,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.08901897545229,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.08901897545229,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -26.08901897545229, 125.49047066790524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -602.9489418601709 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.363006325150764,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.363006325150764,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.363006325150764,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.363006325150764,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 7.363006325150764, 100.40145169245295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.59415710200085, -628.0379608356232 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,75.31243271700066]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 34.54277688189086, 75.31243271700066 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.59415710200085, -628.0379608356232 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.29106524687586,261.6109496743104]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.29106524687586,261.6109496743104]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.29106524687586,261.6109496743104]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.29106524687586,261.6109496743104]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 10.29106524687586, 261.6109496743104 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,41.86040741639761]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,41.86040741639761]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,41.86040741639761]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,41.86040741639761]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 59.63179585734315, 41.86040741639761 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 288.86294663419324, -686.5790051116785 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.10782947846519,242.7941854427212]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.10782947846519,242.7941854427212]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.10782947846519,242.7941854427212]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.10782947846519,242.7941854427212]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 29.10782947846519, 242.7941854427212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,29.31589792867146]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,29.31589792867146]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,29.31589792867146]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,29.31589792867146]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 72.17630534506907, 29.31589792867146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -699.1235145994046 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.924593710054296,227.11354858306345]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.924593710054296,227.11354858306345]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.924593710054296,227.11354858306345]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.924593710054296,227.11354858306345]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 47.924593710054296, 227.11354858306345 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,18.862140022233007]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 84.72081483279521, 18.862140022233007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 313.9519656096453, -709.5772725058431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.60523056971192,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.60523056971192,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.60523056971192,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.60523056971192,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 63.60523056971192, 217.7051664672689 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[95.17457273923378,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[95.17457273923378,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[95.17457273923378,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[95.17457273923378,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 95.17457273923378, 12.58988527836999 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 324.40572351608387, -715.8495272497062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,211.43291172340582]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,211.43291172340582]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,211.43291172340582]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,211.43291172340582]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 76.14974005743807, 211.43291172340582 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,8.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 103.53757906438454, 8.408382115794609 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, -720.0310304122816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[76.14974005743807,217.7051664672689]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 76.14974005743807, 217.7051664672689 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[103.53757906438454,12.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 103.53757906438454, 12.58988527836999 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, -715.8495272497062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.87748531357511,245.93031281465267]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.87748531357511,245.93031281465267]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.87748531357511,245.93031281465267]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.87748531357511,245.93031281465267]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.87748531357511, 245.93031281465267 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.35607590180916,31.406649509959152]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.35607590180916,31.406649509959152]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.35607590180916,31.406649509959152]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.35607590180916,31.406649509959152]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 99.35607590180916, 31.406649509959152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-697.032763018117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-697.032763018117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, -715.8495272497062 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-697.032763018117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-697.032763018117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+Broadcast : 935e09ed-1501-4c7a-9d62-c58d02484fa1, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{ _id: '935e09ed-1501-4c7a-9d62-c58d02484fa1',
+ data: [ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":231.157531852038}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":231.157531852038}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":231.157531852038}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":231.157531852038}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":231.157531852038}
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-380.7801078650501}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-380.7801078650501}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-380.7801078650501}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-380.7801078650501}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-380.7801078650501}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: 231.157531852038,
+ type: 0 }
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -380.7801078650501,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.01361268550659,245.93031281465278]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.01361268550659,245.93031281465278]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.01361268550659,245.93031281465278]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.01361268550659,245.93031281465278]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.01361268550659, 245.93031281465278 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 280.4999403090425, -216.1598993219484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.28586742936977,223.9774212111322]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.28586742936977,223.9774212111322]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.28586742936977,223.9774212111322]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.28586742936977,223.9774212111322]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.28586742936977, 223.9774212111322 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[284.68144347161785,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[284.68144347161785,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 280.4999403090425, -216.1598993219484 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[284.68144347161785,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[284.68144347161785,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.83037691709592,186.34389274795376]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.83037691709592,186.34389274795376]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.83037691709592,186.34389274795376]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.83037691709592,186.34389274795376]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 91.83037691709592, 186.34389274795376 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 293.0444497967686, -255.8841793664144 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.37488640482206,142.43810954091214]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.37488640482206,142.43810954091214]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.37488640482206,142.43810954091214]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.37488640482206,142.43810954091214]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.37488640482206, 142.43810954091214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,104.8045810777337]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,104.8045810777337]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,104.8045810777337]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,104.8045810777337]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 120.05552326447969, 104.8045810777337 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 311.8612140283577, -310.24372047989436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,48.35428838296616]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,48.35428838296616]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,48.35428838296616]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[120.05552326447969,48.35428838296616]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 120.05552326447969, 48.35428838296616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 311.8612140283577, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 311.8612140283577, -383.42002582496355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 305.58895928449454, -425.23505745071725 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 303.49820770320696, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.99480218249391,219.57429182585122]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.99480218249391,219.57429182585122]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.99480218249391,219.57429182585122]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.99480218249391,219.57429182585122]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 67.99480218249391, 219.57429182585122 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 297.225952959344, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[61.72254743863073,186.12226652524816]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[61.72254743863073,186.12226652524816]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[61.72254743863073,186.12226652524816]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[61.72254743863073,186.12226652524816]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 61.72254743863073, 186.12226652524816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -542.3171460028279 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[59.63179585734315,152.6702412246451]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 59.63179585734315, 152.6702412246451 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 288.86294663419324, -575.769171303431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.268789532192386,123.39971908661755]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.268789532192386,123.39971908661755]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.268789532192386,123.39971908661755]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.268789532192386,123.39971908661755]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 51.268789532192386, 123.39971908661755 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-605.0396934414586]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-605.0396934414586]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 288.86294663419324, -575.769171303431 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-605.0396934414586]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-605.0396934414586]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.90578320704162, 102.49220327374064 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.1369339838917, -625.9472092543355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.90578320704162, 89.9476937860145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.1369339838917, -638.4917187420616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 38.72428004446624, 81.58468746086373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 267.9554308213163, -646.8547250672124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,77.40318429828835]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,77.40318429828835]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,77.40318429828835]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,77.40318429828835]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 38.72428004446624, 77.40318429828835 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 267.9554308213163, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 38.72428004446624, 73.22168113571297 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 267.9554308213163, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[53.35954111347996,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[53.35954111347996,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 282.59069189033005, -657.3084829736508 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[53.35954111347996,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[53.35954111347996,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 53.35954111347996, 71.13092955442528 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.53931167021983,62.767923229274516]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.53931167021983,62.767923229274516]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.53931167021983,62.767923229274516]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[80.53931167021983,62.767923229274516]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 80.53931167021983, 62.767923229274516 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 309.7704624470699, -665.6714892988016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[107.71908222695993,58.586420066699134]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[107.71908222695993,58.586420066699134]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[107.71908222695993,58.586420066699134]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[107.71908222695993,58.586420066699134]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 107.71908222695993, 58.586420066699134 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 336.95023300381, -669.852992461377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[170.44162966559065,43.9511589976853]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[170.44162966559065,43.9511589976853]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[170.44162966559065,43.9511589976853]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[170.44162966559065,43.9511589976853]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 170.44162966559065, 43.9511589976853 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 399.67278044244074, -684.4882535303908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[212.25666129134447,27.22514634738377]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[212.25666129134447,27.22514634738377]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[212.25666129134447,27.22514634738377]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[212.25666129134447,27.22514634738377]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 212.25666129134447, 27.22514634738377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 441.48781206819456, -701.2142661806923 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.89018975452268,16.771388440945316]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.89018975452268,16.771388440945316]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.89018975452268,16.771388440945316]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.89018975452268,16.771388440945316]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.89018975452268, 16.771388440945316 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 479.12134053137277, -711.6680240871308 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[266.6162024048242,10.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[266.6162024048242,10.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[266.6162024048242,10.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[266.6162024048242,10.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 266.6162024048242, 10.4991336970823 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-717.9402788309937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-717.9402788309937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-717.9402788309937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-717.9402788309937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 495.8473531816743, -717.9402788309937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[302.15897928671507,2.1361273719315363]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[302.15897928671507,2.1361273719315363]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[302.15897928671507,2.1361273719315363]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[302.15897928671507,2.1361273719315363]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 302.15897928671507, 2.1361273719315363 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -726.3032851561445 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,-2.0453757906438454]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 312.6127371931534, -2.0453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 541.8438879700035, -730.4847883187199 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-4.136127371931536]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-4.136127371931536]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-4.136127371931536]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[327.24799826216736,-4.136127371931536]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 327.24799826216736, -4.136127371931536 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 541.8438879700035, -730.4847883187199 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[333.5202530060303,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[333.5202530060303,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[333.5202530060303,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[333.5202530060303,-8.317630534506918]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 333.5202530060303, -8.317630534506918 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 562.7514037828804, -736.7570430625831 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,-12.4991336970823]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 341.8832593311811, -12.4991336970823 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 571.1144101080312, -740.9385462251585 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[348.15551407504427,-14.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[348.15551407504427,-14.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[348.15551407504427,-14.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[348.15551407504427,-14.58988527836999]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 348.15551407504427, -14.58988527836999 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-743.029297806446]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -743.029297806446 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814826,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814826,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814826,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814826,-18.771388440945373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 358.6092719814826, -18.771388440945373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 587.8404227583327, -747.2108009690214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[379.5167877943595,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[379.5167877943595,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[379.5167877943595,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[379.5167877943595,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 379.5167877943595, -22.952891603520754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[608.7479385712096,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[608.7479385712096,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[608.7479385712096,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[608.7479385712096,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 608.7479385712096, -751.3923041315968 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.8797941195103,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.8797941195103,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.8797941195103,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.8797941195103,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 387.8797941195103, -27.134394766096136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -755.5738072941722 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[392.06129728208566,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[392.06129728208566,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[392.06129728208566,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[392.06129728208566,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 392.06129728208566, -29.225146347383827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[621.2924480589357,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 621.2924480589357, -757.66455887546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-29.225146347383827]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 394.15204886337347, -29.225146347383827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -757.66455887546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-27.134394766096136]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 394.15204886337347, -27.134394766096136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -755.5738072941722 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-22.952891603520754]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 394.15204886337347, -22.952891603520754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -755.5738072941722 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[394.15204886337347,-10.408382115794609]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 394.15204886337347, -10.408382115794609 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -738.8477946438707 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+called update on data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+Broadcast : 935e09ed-1501-4c7a-9d62-c58d02484fa1, sending data {"type":1,"data":[],"_id":"935e09ed-1501-4c7a-9d62-c58d02484fa1"}
+{ _id: '935e09ed-1501-4c7a-9d62-c58d02484fa1',
+ data: [],
+ type: 1 }
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["edc14f86-fe3f-427a-bbc4-8d0e3ff030dc","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'edc14f86-fe3f-427a-bbc4-8d0e3ff030dc',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":477.1964896250778}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":477.1964896250778}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":477.1964896250778}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-216.16475944633783}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-216.16475944633783}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-216.16475944633783}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-153.43735188331766]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-153.43735188331766]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-153.43735188331766]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-153.43735188331766]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 279.3266125675432,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":477.1964896250778}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":477.1964896250778}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-216.16475944633783}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-216.16475944633783}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -216.16475944633783,
+ type: 0 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 594.1126775021959, -153.43735188331766 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 594.1126775021959, -155.52810346460524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 594.1126775021959, -159.70960662718062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 594.1126775021959, -163.891109789756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[594.1126775021959,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 594.1126775021959, -168.07261295233138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[592.0219259209081,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 592.0219259209081, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 585.7496711770451, -182.70787402134533 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 571.1144101080312, -205.70614141550993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 541.8438879700035, -251.70267620383902 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 518.845620575839, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[495.8473531816743,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 495.8473531816743, -314.42522364246975 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 472.8490857875098, -354.1495036869359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 449.8508183933453, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 431.034054161756, -437.7795669384434 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[418.48954467402984,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[418.48954467402984,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[418.48954467402984,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[418.48954467402984,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 418.48954467402984, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[414.30804151145446,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 414.30804151145446, -469.14084065775876 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.80463599074142,250.93556554516658]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.80463599074142,250.93556554516658]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.80463599074142,250.93556554516658]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[178.80463599074142,250.93556554516658]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 178.80463599074142, 250.93556554516658 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.0357867675915,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.0357867675915,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.0357867675915,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[408.0357867675915,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 408.0357867675915, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[172.53238124687823,246.7540623825912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[172.53238124687823,246.7540623825912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[172.53238124687823,246.7540623825912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[172.53238124687823,246.7540623825912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 172.53238124687823, 246.7540623825912 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[401.7635320237283,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 401.7635320237283, -481.6853501454849 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172747,242.57255922001582]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172747,242.57255922001582]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172747,242.57255922001582]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172747,242.57255922001582]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 164.16937492172747, 242.57255922001582 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 401.7635320237283, -481.6853501454849 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.71561701528913,236.30030447615275]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.71561701528913,236.30030447615275]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.71561701528913,236.30030447615275]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.71561701528913,236.30030447615275]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 153.71561701528913, 236.30030447615275 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 382.9467677921392, -492.13910805192336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.26185910885056,234.20955289486506]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.26185910885056,234.20955289486506]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.26185910885056,234.20955289486506]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.26185910885056,234.20955289486506]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.26185910885056, 234.20955289486506 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 372.49300988570064, -494.22985963321105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,223.7557949884266]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,223.7557949884266]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,223.7557949884266]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,223.7557949884266]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 126.53584645854903, 223.7557949884266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 355.7669972353991, -504.6836175396495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,215.39278866327584]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.99133697082289, 215.39278866327584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.222487747673,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 343.222487747673, -513.0466238648003 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.9930695766584,209.12053391941276]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.9930695766584,209.12053391941276]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.9930695766584,209.12053391941276]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[90.9930695766584,209.12053391941276]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 90.9930695766584, 209.12053391941276 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[320.2242203535085,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[320.2242203535085,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 343.222487747673, -513.0466238648003 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[320.2242203535085,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[320.2242203535085,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[72.17630534506907,192.39452126911124]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 72.17630534506907, 192.39452126911124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.90578320704162,163.12399913108356]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.90578320704162, 163.12399913108356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.1369339838917, -565.3154133969925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,146.39798648078215]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,146.39798648078215]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,146.39798648078215]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,146.39798648078215]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 19.90751581287691, 146.39798648078215 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, -582.041426047294 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.090751581287577,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.090751581287577,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.090751581287577,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-3.090751581287577,125.49047066790524]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -3.090751581287577, 125.49047066790524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[226.1403991955625,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[226.1403991955625,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[226.1403991955625,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[226.1403991955625,-602.9489418601709]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 226.1403991955625, -602.9489418601709 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.816764231589104,112.9459611801791]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.816764231589104,112.9459611801791]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.816764231589104,112.9459611801791]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.816764231589104,112.9459611801791]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -19.816764231589104, 112.9459611801791 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 226.1403991955625, -602.9489418601709 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-615.493451347897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,102.49220327374064]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -34.452025300603054, 102.49220327374064 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-628.0379608356232]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -628.0379608356232 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,96.21994852987757]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,96.21994852987757]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -628.0379608356232 ] ],
+ type: 14 }
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -34.452025300603054, 102.49220327374064 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,100.40145169245295]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,96.21994852987757]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,96.21994852987757]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 96.21994852987757 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,94.12919694858988]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,94.12919694858988]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,94.12919694858988]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,94.12919694858988]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -44.905783207041395, 94.12919694858988 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,92.03844536730219]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,92.03844536730219]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,92.03844536730219]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,92.03844536730219]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -53.26878953219216, 92.03844536730219 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, -634.3102155794862 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.35954111347996,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.35954111347996,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.35954111347996,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.35954111347996,89.9476937860145]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -55.35954111347996, 89.9476937860145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.87160966337012, -638.4917187420616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-59.541044276055345,85.76619062343912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-59.541044276055345,85.76619062343912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-59.541044276055345,85.76619062343912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-59.541044276055345,85.76619062343912]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -59.541044276055345, 85.76619062343912 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, -642.673221904637 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.8132990199183,83.67543904215142]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.8132990199183,83.67543904215142]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.8132990199183,83.67543904215142]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-65.8132990199183,83.67543904215142]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -65.8132990199183, 83.67543904215142 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 163.41785175693178, -644.7639734859247 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-67.90405060120611,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-67.90405060120611,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-67.90405060120611,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-67.90405060120611,81.58468746086373]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -67.90405060120611, 81.58468746086373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.32710017564398, -646.8547250672124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,79.49393587957604]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,79.49393587957604]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,79.49393587957604]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,79.49393587957604]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -74.17630534506907, 79.49393587957604 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.32710017564398, -646.8547250672124 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.05484543178102,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,73.22168113571297]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -78.35780850764445, 73.22168113571297 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.87334226920564,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.87334226920564,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.87334226920564,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[150.87334226920564,-655.2177313923631]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 150.87334226920564, -655.2177313923631 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-84.63006325150764,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-84.63006325150764,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-84.63006325150764,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-84.63006325150764,71.13092955442528]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -84.63006325150764, 71.13092955442528 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.60108752534245,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.60108752534245,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.60108752534245,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.60108752534245,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.60108752534245, -657.3084829736508 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -86.72081483279521, 69.04017797313759 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 142.51033594405487, -659.3992345549385 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+Broadcast : 339bd0a7-a2d6-4198-a985-03d4d5c6f76a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-90.9023179953706,69.04017797313759]],"_id":"339bd0a7-a2d6-4198-a985-03d4d5c6f76a"}
+{ _id: '339bd0a7-a2d6-4198-a985-03d4d5c6f76a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -90.9023179953706, 69.04017797313759 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -659.3992345549385 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.68490868328865,68.18231573317735]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.68490868328865,68.18231573317735]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.68490868328865,68.18231573317735]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[238.68490868328865,68.18231573317735]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 238.68490868328865, 68.18231573317735 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,66.09156415188977]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,66.09156415188977]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,66.09156415188977]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,66.09156415188977]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.59415710200085, 66.09156415188977 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,53.547054664163625]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,53.547054664163625]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,53.547054664163625]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,53.547054664163625]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 228.2311507768501, 53.547054664163625 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,28.458035688711334]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 213.59588970783636, 28.458035688711334 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.86987705753484, -11.26624435575468 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.96236124465793, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.2363485943564, -115.80382342013922 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 140.41958436276707, -174.34486769619457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.9730335419365,98.55516859372301]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.9730335419365,98.55516859372301]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.9730335419365,98.55516859372301]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[294.9730335419365,98.55516859372301]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 294.9730335419365, 98.55516859372301 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-220.34140248452377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-220.34140248452377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 140.41958436276707, -174.34486769619457 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-220.34140248452377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-220.34140248452377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.2363485943564, -257.9749309477021 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 163.41785175693178, -264.24718569156516 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.50860333821936,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.50860333821936,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.50860333821936,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[165.50860333821936,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 165.50860333821936, -264.24718569156516 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-264.24718569156516]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.78085808208255, -264.24718569156516 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.15493787494438,148.71036428477532]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.15493787494438,148.71036428477532]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.15493787494438,148.71036428477532]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[7.15493787494438,148.71036428477532]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 7.15493787494438, 148.71036428477532 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.59415710200085, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[229.81998128208352,82.85168947421312]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[229.81998128208352,82.85168947421312]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[229.81998128208352,82.85168947421312]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[229.81998128208352,82.85168947421312]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 229.81998128208352, 82.85168947421312 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[385.0375193734268,-324.8789815489082]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 385.0375193734268, -324.8789815489082 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -412.6905479629911 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, -492.13910805192336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1018.5352485035968,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1018.5352485035968,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1018.5352485035968,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1018.5352485035968,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1018.5352485035968, -544.4078975841156 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[615.0201933150728,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[615.0201933150728,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[615.0201933150728,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[615.0201933150728,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 615.0201933150728, -1125.6368371820934 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[541.8438879700035,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 541.8438879700035, -1079.6403023937642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, -1019.0085065364211 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 474.9398373687976, -996.0102391422565 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 472.8490857875098, -989.7379843983935 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 470.75833420622223, -977.1934749106673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 481.21209211266057, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,-952.1044559352151]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, -952.1044559352151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 506.30111108811286, -958.3767106790781 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-987.6472328171058]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-987.6472328171058]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-987.6472328171058]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-987.6472328171058]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -987.6472328171058 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-1008.5547486299827]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 669.3797344285525, -1008.5547486299827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[727.9207787046079,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 727.9207787046079, -1029.4622644428596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1044.0975255118733]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1044.0975255118733]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1044.0975255118733]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,-1044.0975255118733]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 776.0080650742249, -1044.0975255118733 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,-1052.460531837024]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 801.0970840496772, -1052.460531837024 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, -1058.7327865808873 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,-1067.095792906038]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,-1067.095792906038]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,-1067.095792906038]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,-1067.095792906038]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 815.7323451186909, -1067.095792906038 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-1075.4587992311888]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, -1075.4587992311888 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, -1081.7310539750517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[796.9155808871018,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[796.9155808871018,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[796.9155808871018,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[796.9155808871018,-1092.1848118814903]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 796.9155808871018, -1092.1848118814903 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-1079.6403023937642]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 769.7358103303617, -1079.6403023937642 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[730.0115302858957,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[730.0115302858957,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[730.0115302858957,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[730.0115302858957,-1029.4622644428596]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 730.0115302858957, -1029.4622644428596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.105747078854,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.105747078854,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.105747078854,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.105747078854,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 686.105747078854, -970.9212201668042 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[625.4739512215111,-899.8356664030227]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 625.4739512215111, -899.8356664030227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[543.9346395512913,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 543.9346395512913, -807.8425968263645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[451.9415699746329,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 451.9415699746329, -692.8512598555416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 372.49300988570064, -594.5859355350201 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.225952959344,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 297.225952959344, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 247.04791500843942, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-406.41829321912803]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-406.41829321912803]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-406.41829321912803]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-406.41829321912803]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -406.41829321912803 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-375.0570194998128]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.78085808208255, -375.0570194998128 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.4230495744381, -308.1529688986067 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-291.42695624830515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.87854008671195, -291.42695624830515 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.3918112927438,38.96874852702376]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.3918112927438,38.96874852702376]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.3918112927438,38.96874852702376]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[166.3918112927438,38.96874852702376]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 166.3918112927438, 38.96874852702376 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-260.0656825289898]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 48.42651478610878, -260.0656825289898 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.84730180501765,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.84730180501765,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.84730180501765,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.84730180501765,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 153.84730180501765, 45.24100327088695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -255.8841793664144 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.1666649453598,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.1666649453598,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.1666649453598,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.1666649453598,45.24100327088695]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.1666649453598, 45.24100327088695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.609750554519678,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.609750554519678,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -255.8841793664144 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.609750554519678,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[29.609750554519678,-255.8841793664144]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.12475436638692,23.288111667366138]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.12475436638692,23.288111667366138]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.12475436638692,23.288111667366138]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.12475436638692,23.288111667366138]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 91.12475436638692, 23.288111667366138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-1.7515231647956853,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-1.7515231647956853,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-1.7515231647956853,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-1.7515231647956853,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -1.7515231647956853, -270.51944043542824 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-41.47580320926181,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -41.47580320926181, -297.6992109921682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-320.6974783863328]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -81.20008325372794, -320.6974783863328 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-123.01511487948176,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-123.01511487948176,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-123.01511487948176,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-123.01511487948176,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -123.01511487948176, -358.33100684951125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-393.873783731402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -150.19488543622163, -393.873783731402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -175.28390441167392, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-181.556159155537,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-181.556159155537,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-181.556159155537,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-181.556159155537,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -181.556159155537, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-192.00991706197544,-506.7743691209372]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -192.00991706197544, -506.7743691209372 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-208.73592971227697,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-208.73592971227697,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-208.73592971227697,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-208.73592971227697,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -208.73592971227697, -519.3188786086633 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -210.82668129356466, -521.409630189951 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-210.82668129356466,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -210.82668129356466, -523.5003817712387 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-525.5911333525264]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -212.91743287485235, -525.5911333525264 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -212.91743287485235, -527.6818849338141 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-217.09893603742773,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-217.09893603742773,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-217.09893603742773,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-217.09893603742773,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -217.09893603742773, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-523.5003817712387]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -523.5003817712387 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.91743287485235,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -212.91743287485235, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -194.10066864326313, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -156.4671401800847, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -108.37985381046792, -421.05355428814187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.520731579067387, -362.51251001208664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[151.41679698379494,255.33869493044745]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[151.41679698379494,255.33869493044745]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[151.41679698379494,255.33869493044745]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[151.41679698379494,255.33869493044745]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 151.41679698379494, 255.33869493044745 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, -209.88764457808531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 456.1230731372083, -142.9835939768791 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 546.0253911325789, -90.71480444468693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-36.35526333120697]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-36.35526333120697]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-36.35526333120697]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[604.5664354086342,-36.35526333120697]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 604.5664354086342, -36.35526333120697 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-21.720002262193248]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-21.720002262193248]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-21.720002262193248]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-21.720002262193248]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -21.720002262193248 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-4.99398961189172]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 644.2907154531005, -4.99398961189172 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 671.4704860098403, 13.822774619697611 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[711.1947660543063,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 711.1947660543063, 38.9117935951499 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 738.3745366110464, 57.72855782673901 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 757.1913008426355, 72.36381889575273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 769.7358103303617, 84.90832838347887 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[782.2803198180878,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 782.2803198180878, 91.18058312734206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 786.4618229806632, 99.54358945249282 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 792.7340777245264, 101.6343410337804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[794.824829305814,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[794.824829305814,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[794.824829305814,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[794.824829305814,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 794.824829305814, 103.7250926150682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[801.0970840496772,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 801.0970840496772, 112.08809894021897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 803.1878356309647, 116.26960210279435 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, 122.54185684665731 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 813.6415935374033, 126.72336000923269 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 822.0045998625541, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 128.8141115905205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,126.72336000923269]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 828.276854606417, 126.72336000923269 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[836.6398609315678,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[836.6398609315678,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[836.6398609315678,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[836.6398609315678,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 836.6398609315678, 122.54185684665731 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[872.1826378134584,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 872.1826378134584, 116.26960210279435 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[966.2664589714046,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[966.2664589714046,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[966.2664589714046,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[966.2664589714046,103.7250926150682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 966.2664589714046, 103.7250926150682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1045.7150190603365,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1045.7150190603365,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1045.7150190603365,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1045.7150190603365,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1045.7150190603365, 89.08983154605426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1022.7167516661722, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[922.360675764363,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[922.360675764363,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[922.360675764363,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[922.360675764363,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 922.360675764363, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[738.3745366110464,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 738.3745366110464, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[577.3866648518944,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 577.3866648518944, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 420.58029625531765, -446.14257326359416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 345.3132393289608, -446.14257326359416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 313.9519656096453, -450.32407642616954 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[293.0444497967686,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 293.0444497967686, -469.14084065775876 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[288.86294663419324,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 288.86294663419324, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 265.8646792400285, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 244.9571634271516, -494.22985963321105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 205.2328833826856, -510.9558722835126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-538.1356428402526]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-538.1356428402526]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 148.78259068791783, -529.7726365151018 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.78778850542415,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.78778850542415,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 27.518998973231987, -567.4061649782802 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.78778850542415,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.78778850542415,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-538.1356428402526]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-538.1356428402526]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 117.42131696860258, -538.1356428402526 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 117.42131696860258, -538.1356428402526 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-89.5630895788787,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-89.5630895788787,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-89.5630895788787,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-89.5630895788787,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -89.5630895788787, -586.2229292098693 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -89.5630895788787, -586.2229292098693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.92436329819407,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -120.92436329819407, -586.2229292098693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-150.19488543622163,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -150.19488543622163, -586.2229292098693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-154.376388598797,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-154.376388598797,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-154.376388598797,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-154.376388598797,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -154.376388598797, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-156.4671401800847,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -156.4671401800847, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-158.5578917613724,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -158.5578917613724, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -160.64864334266008, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -164.83014650523546, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.92089808652315,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -166.92089808652315, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-169.01164966781084,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-169.01164966781084,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-169.01164966781084,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-169.01164966781084,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -169.01164966781084, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.10240124909853,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.10240124909853,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.10240124909853,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-171.10240124909853,-584.1321776285816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -171.10240124909853, -584.1321776285816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -175.28390441167392, -582.041426047294 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-177.3746559929616,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -177.3746559929616, -582.041426047294 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-183.64691073682468,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -183.64691073682468, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.82841389940006,-579.9506744660063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -187.82841389940006, -579.9506744660063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-577.8599228847187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -189.91916548068775, -577.8599228847187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -194.10066864326313, -575.769171303431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -565.3154133969925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -554.8616554905541 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-519.3188786086633]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -175.28390441167392, -519.3188786086633 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-108.37985381046792,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -108.37985381046792, -467.05008907647107 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 67.243279017698, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.55292435572665,274.15545916203655]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.55292435572665,274.15545916203655]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.55292435572665,274.15545916203655]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[154.55292435572665,274.15545916203655]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 154.55292435572665, 274.15545916203655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[334.8594814225222,-197.34313509035917]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[334.8594814225222,-197.34313509035917]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[334.8594814225222,-197.34313509035917]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[334.8594814225222,-197.34313509035917]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 334.8594814225222, -197.34313509035917 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 585.7496711770451, -86.53330128211155 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[803.1878356309647,7.550519875834425]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 803.1878356309647, 7.550519875834425 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1003.8999874345831,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1003.8999874345831,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1003.8999874345831,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1003.8999874345831,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1003.8999874345831, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1035.2612611538984,201.99041693558956]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1035.2612611538984,201.99041693558956]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1035.2612611538984,201.99041693558956]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1035.2612611538984,201.99041693558956]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1035.2612611538984, 201.99041693558956 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[972.5387137152676,212.44417484202813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[972.5387137152676,212.44417484202813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[972.5387137152676,212.44417484202813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[972.5387137152676,212.44417484202813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 972.5387137152676, 212.44417484202813 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[890.9994020450478,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[890.9994020450478,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[890.9994020450478,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[890.9994020450478,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 890.9994020450478, 220.8071811671789 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,245.89620014263096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,245.89620014263096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,245.89620014263096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,245.89620014263096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 767.6450587490741, 245.89620014263096 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,256.3499580490695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,256.3499580490695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,256.3499580490695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,256.3499580490695]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 709.1040144730188, 256.3499580490695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,266.80371595550787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 675.6519891724157, 266.80371595550787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 658.9259765221142, 270.98521911808325 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[656.8352249408266,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 656.8352249408266, 270.98521911808325 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[658.9259765221142,270.98521911808325]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 658.9259765221142, 270.98521911808325 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[665.1982312659771,268.8944675367957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 665.1982312659771, 268.8944675367957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,258.4407096303571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,258.4407096303571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,258.4407096303571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,258.4407096303571]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 698.6502565665802, 258.4407096303571 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,241.71469698005558]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,241.71469698005558]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,241.71469698005558]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,241.71469698005558]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 746.7375429361972, 241.71469698005558 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[788.552574561951,229.17018749232943]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[788.552574561951,229.17018749232943]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[788.552574561951,229.17018749232943]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[788.552574561951,229.17018749232943]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 788.552574561951, 229.17018749232943 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, 224.98868432975405 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 813.6415935374033, 224.98868432975405 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,224.98868432975405]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 815.7323451186909, 224.98868432975405 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 222.89793274846647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,220.8071811671789]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 220.8071811671789 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,218.7164295858911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,218.7164295858911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,218.7164295858911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,218.7164295858911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 218.7164295858911 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,216.62567800460351]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 216.62567800460351 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,214.5349264233157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,214.5349264233157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,214.5349264233157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,214.5349264233157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, 214.5349264233157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[822.0045998625541,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 822.0045998625541, 210.35342326074033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,206.17192009816495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,206.17192009816495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,206.17192009816495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,206.17192009816495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, 206.17192009816495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,199.899665354302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,199.899665354302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,199.899665354302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,199.899665354302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 828.276854606417, 199.899665354302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 832.4583577689924, 195.7181621917266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 832.4583577689924, 191.53665902915122 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,189.44590744786342]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 834.5491093502802, 189.44590744786342 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[834.5491093502802,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 834.5491093502802, 185.26440428528804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[838.7306125128554,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 838.7306125128554, 181.08290112271266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 842.9121156754308, 176.90139796013727 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 845.0028672567186, 176.90139796013727 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,172.7198947975619]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 845.0028672567186, 172.7198947975619 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,170.62914321627431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 845.0028672567186, 170.62914321627431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[849.1843704192939,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[849.1843704192939,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[849.1843704192939,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[849.1843704192939,168.5383916349865]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 849.1843704192939, 168.5383916349865 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 851.2751220005815, 166.44764005369893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[853.3658735818693,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[853.3658735818693,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[853.3658735818693,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[853.3658735818693,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 853.3658735818693, 164.35688847241113 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,160.17538530983575]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 857.5473767444447, 160.17538530983575 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[859.6381283257323,158.08463372854817]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 859.6381283257323, 158.08463372854817 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,153.9031305659728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, 153.9031305659728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, 149.7216274033974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 865.9103830695955, 147.6308758221096 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-398.02750749824247}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-398.02750749824247}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-398.02750749824247}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-398.02750749824247}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-398.02750749824247}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -398.02750749824247,
+ type: 0 }
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-74.73311872096588}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-74.73311872096588}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-74.73311872096588}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -286.7115148803389,
+ type: 0 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-103.70194957048432}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-103.70194957048432}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-103.70194957048432}
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-168.80171170567712}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-168.80171170567712}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-168.80171170567712}
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":142.33700820255547}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":142.33700820255547}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":142.33700820255547}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-4.18636328696482}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-4.18636328696482}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-4.18636328696482}
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+called update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+calling update on data {"type":5,"data":[],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+called update on data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":6,"data":"a nested collection","_id":"ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"}
+called update on data {"type":6,"data":"a nested collection","_id":"ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Incoming : cfe7bf1f-062c-4992-a9e4-553241619bc4, receiving Set Field with data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","type":0,"data":1}
+calling update on data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","type":0,"data":1}
+called update on data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":6,"data":"Transparent","_id":"f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"}
+called update on data {"type":6,"data":"Transparent","_id":"f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":12,"data":{},"_id":"94f50e35-aa4c-4c49-b633-ccbb7360883b"}
+called update on data {"type":12,"data":{},"_id":"94f50e35-aa4c-4c49-b633-ccbb7360883b"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"],["59b58624-916f-50a0-8efa-7003a805bfad","94f50e35-aa4c-4c49-b633-ccbb7360883b"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"],["59b58624-916f-50a0-8efa-7003a805bfad","94f50e35-aa4c-4c49-b633-ccbb7360883b"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+calling update on data {"type":5,"data":[],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 02535b48-c865-4089-9026-d9f0b74dd18f, receiving Set Field with data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","type":0,"data":-196.19142022455082}
+calling update on data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","type":0,"data":-196.19142022455082}
+called update on data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","type":0,"data":-196.19142022455082}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 221704be-2709-4597-b3f2-6f7ba3ca3a05, receiving Set Field with data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","type":0,"data":-571.5876681408556}
+calling update on data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","type":0,"data":-571.5876681408556}
+called update on data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","type":0,"data":-571.5876681408556}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 2547894b-f0a8-48da-85ee-1823bd961956, receiving Set Field with data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","type":0,"data":1062.1018032941463}
+calling update on data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","type":0,"data":1062.1018032941463}
+called update on data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","type":0,"data":1062.1018032941463}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 9bbf8324-4a1c-442a-ac7d-f7a57584cd39, receiving Set Field with data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","type":0,"data":719.2185439629652}
+calling update on data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","type":0,"data":719.2185439629652}
+called update on data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","type":0,"data":719.2185439629652}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 4e7f69aa-d522-4515-b531-6a23a6b44971, receiving Set Field with data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","type":0,"data":0}
+calling update on data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","type":0,"data":0}
+called update on data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : 1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c, receiving Set Field with data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","type":0,"data":0}
+calling update on data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","type":0,"data":0}
+called update on data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Incoming : b1f2da36-fef6-436c-be4a-996aa74344fa, receiving Set Field with data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","type":0,"data":-1}
+calling update on data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","type":0,"data":-1}
+called update on data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","type":0,"data":-1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+calling update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-74.73311872096588}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-74.73311872096588}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830', data: 0, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-103.70194957048432}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-103.70194957048432}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -103.70194957048432,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-168.80171170567712}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-168.80171170567712}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":[],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563', data: 0, type: 0 }
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -168.80171170567712,
+ type: 0 }
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [],
+ type: 1 }
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 477.1964896250778,
+ type: 0 }
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -216.16475944633783,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-4.18636328696482}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-4.18636328696482}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":142.33700820255547}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":142.33700820255547}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+Broadcast : 0dc04257-8187-4391-a1bf-a63c30a9e922, sending data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{ _id: '0dc04257-8187-4391-a1bf-a63c30a9e922',
+ data: {},
+ type: 12 }
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b', data: 0, type: 0 }
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data: [],
+ type: 5 }
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data: [],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+Broadcast : 8e5f8b96-0193-4acb-b426-918c42e2cbd4, sending data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+Broadcast : 8e5f8b96-0193-4acb-b426-918c42e2cbd4, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"}],"ok":1}
+Wrote {"type":6,"data":"a nested collection","_id":"ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"}
+Broadcast : ad17eddf-4597-4eb4-ae3c-adf8ebad59b8, sending data {"type":6,"data":"a nested collection","_id":"ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"}
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '8e5f8b96-0193-4acb-b426-918c42e2cbd4' ] ],
+ type: 5 }
+{ _id: '8e5f8b96-0193-4acb-b426-918c42e2cbd4',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+{ _id: 'ad17eddf-4597-4eb4-ae3c-adf8ebad59b8',
+ data: 'a nested collection',
+ type: 6 }
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '8e5f8b96-0193-4acb-b426-918c42e2cbd4' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4"}],"ok":1}
+Wrote {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","type":0,"data":1}
+Broadcast : cfe7bf1f-062c-4992-a9e4-553241619bc4, sending data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","type":0,"data":1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"}],"ok":1}
+Wrote {"type":6,"data":"Transparent","_id":"f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"}
+Broadcast : f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c, sending data {"type":6,"data":"Transparent","_id":"f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{ _id: 'f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c',
+ data: 'Transparent',
+ type: 6 }
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '8e5f8b96-0193-4acb-b426-918c42e2cbd4' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'ad17eddf-4597-4eb4-ae3c-adf8ebad59b8' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ 'cfe7bf1f-062c-4992-a9e4-553241619bc4' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c' ] ],
+ type: 5 }
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '8e5f8b96-0193-4acb-b426-918c42e2cbd4' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'ad17eddf-4597-4eb4-ae3c-adf8ebad59b8' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ 'cfe7bf1f-062c-4992-a9e4-553241619bc4' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c' ] ],
+ type: 5 }
+undefined
+null
+{ _id: '1429712e-036b-40a7-8603-5878cf6136f8',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '8e5f8b96-0193-4acb-b426-918c42e2cbd4' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'ad17eddf-4597-4eb4-ae3c-adf8ebad59b8' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ 'cfe7bf1f-062c-4992-a9e4-553241619bc4' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"],["59b58624-916f-50a0-8efa-7003a805bfad","94f50e35-aa4c-4c49-b633-ccbb7360883b"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+Broadcast : 1429712e-036b-40a7-8603-5878cf6136f8, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","8e5f8b96-0193-4acb-b426-918c42e2cbd4"],["51529209-4838-51c5-a520-0044fddf139c","ad17eddf-4597-4eb4-ae3c-adf8ebad59b8"],["771c0a88-bd02-5e92-953f-e9042a191928","cfe7bf1f-062c-4992-a9e4-553241619bc4"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","f04ef6ef-4793-4eb3-8e53-c55e3d6c6f3c"],["59b58624-916f-50a0-8efa-7003a805bfad","94f50e35-aa4c-4c49-b633-ccbb7360883b"]],"_id":"1429712e-036b-40a7-8603-5878cf6136f8"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"94f50e35-aa4c-4c49-b633-ccbb7360883b"}],"ok":1}
+Wrote {"type":12,"data":{},"_id":"94f50e35-aa4c-4c49-b633-ccbb7360883b"}
+Broadcast : 94f50e35-aa4c-4c49-b633-ccbb7360883b, sending data {"type":12,"data":{},"_id":"94f50e35-aa4c-4c49-b633-ccbb7360883b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a8235956-e798-4904-b97a-5395111c95fe"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"02535b48-c865-4089-9026-d9f0b74dd18f"}],"ok":1}
+Wrote {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","type":0,"data":-196.19142022455082}
+Broadcast : 02535b48-c865-4089-9026-d9f0b74dd18f, sending data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","type":0,"data":-196.19142022455082}
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ] ],
+ type: 5 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ] ],
+ type: 5 }
+{ _id: '02535b48-c865-4089-9026-d9f0b74dd18f',
+ data: -196.19142022455082,
+ type: 0 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05"}],"ok":1}
+Wrote {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","type":0,"data":-571.5876681408556}
+Broadcast : 221704be-2709-4597-b3f2-6f7ba3ca3a05, sending data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","type":0,"data":-571.5876681408556}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"2547894b-f0a8-48da-85ee-1823bd961956"}],"ok":1}
+Wrote {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","type":0,"data":1062.1018032941463}
+Broadcast : 2547894b-f0a8-48da-85ee-1823bd961956, sending data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","type":0,"data":1062.1018032941463}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{ _id: '2547894b-f0a8-48da-85ee-1823bd961956',
+ data: 1062.1018032941463,
+ type: 0 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ] ],
+ type: 5 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ] ],
+ type: 5 }
+undefined
+null
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39"}],"ok":1}
+Wrote {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","type":0,"data":719.2185439629652}
+Broadcast : 9bbf8324-4a1c-442a-ac7d-f7a57584cd39, sending data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","type":0,"data":719.2185439629652}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971"}],"ok":1}
+Wrote {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","type":0,"data":0}
+Broadcast : 4e7f69aa-d522-4515-b531-6a23a6b44971, sending data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"}],"ok":1}
+Wrote {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","type":0,"data":0}
+Broadcast : 1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c, sending data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","type":0,"data":0}
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9bbf8324-4a1c-442a-ac7d-f7a57584cd39' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4e7f69aa-d522-4515-b531-6a23a6b44971' ] ],
+ type: 5 }
+{ _id: '4e7f69aa-d522-4515-b531-6a23a6b44971', data: 0, type: 0 }
+{ _id: '1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c', data: 0, type: 0 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9bbf8324-4a1c-442a-ac7d-f7a57584cd39' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4e7f69aa-d522-4515-b531-6a23a6b44971' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa"}],"ok":1}
+Wrote {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","type":0,"data":-1}
+Broadcast : b1f2da36-fef6-436c-be4a-996aa74344fa, sending data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ 'a8235956-e798-4904-b97a-5395111c95fe' ],
+ type: 1 }
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9bbf8324-4a1c-442a-ac7d-f7a57584cd39' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4e7f69aa-d522-4515-b531-6a23a6b44971' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'b1f2da36-fef6-436c-be4a-996aa74344fa' ] ],
+ type: 5 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 865.9103830695955, 147.6308758221096 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,147.6308758221096]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 865.9103830695955, 147.6308758221096 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[870.0918862321709,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[870.0918862321709,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[870.0918862321709,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[870.0918862321709,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 870.0918862321709, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[874.2733893947462,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[874.2733893947462,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[874.2733893947462,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[874.2733893947462,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 874.2733893947462, 137.17711791567126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[878.4548925573216,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[878.4548925573216,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[878.4548925573216,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[878.4548925573216,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 878.4548925573216, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[895.1809052076231,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[895.1809052076231,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[895.1809052076231,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[895.1809052076231,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 895.1809052076231, 122.54185684665731 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 926.5421789269384, 109.99734735893117 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[978.8109684591308,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[978.8109684591308,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[978.8109684591308,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[978.8109684591308,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 978.8109684591308, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1014.3537453410214,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1014.3537453410214,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1014.3537453410214,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1014.3537453410214,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1014.3537453410214, 89.08983154605426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-1129.8183403446687]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 564.8421553641682, -1129.8183403446687 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.39186266940044, -1121.455334019518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[441.48781206819456,-1121.455334019518]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 441.48781206819456, -1121.455334019518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-1127.727588763381]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-1127.727588763381]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-1127.727588763381]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-1127.727588763381]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 391.30977411729, -1127.727588763381 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-1142.3628498323949]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-1142.3628498323949]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-1142.3628498323949]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-1142.3628498323949]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -1142.3628498323949 ] ],
+ type: 14 }
+a user has connected
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+S sending : b1f2da36-fef6-436c-be4a-996aa74344fa, receiving Get Field with data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","data":-1,"type":0}
+S sending : 02535b48-c865-4089-9026-d9f0b74dd18f, receiving Get Field with data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","data":-196.19142022455082,"type":0}
+S sending : 221704be-2709-4597-b3f2-6f7ba3ca3a05, receiving Get Field with data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","data":-571.5876681408556,"type":0}
+S sending : 2547894b-f0a8-48da-85ee-1823bd961956, receiving Get Field with data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","data":1062.1018032941463,"type":0}
+S sending : 9bbf8324-4a1c-442a-ac7d-f7a57584cd39, receiving Get Field with data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","data":719.2185439629652,"type":0}
+S sending : cfe7bf1f-062c-4992-a9e4-553241619bc4, receiving Get Field with data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","data":1,"type":0}
+S sending : 4e7f69aa-d522-4515-b531-6a23a6b44971, receiving Get Field with data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","data":0,"type":0}
+S sending : 1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c, receiving Get Field with data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-398.02750749824247,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":-74.73311872096588,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-103.70194957048432,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":2,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-168.80171170567712,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":3,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":142.33700820255547,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":-4.18636328696482,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":4,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 300,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,-1125.6368371820934]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.98912579195047, -1125.6368371820934 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-1081.7310539750517]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -417.81108784104595, -1081.7310539750517 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-1042.0067739305857]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-1042.0067739305857]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-1042.0067739305857]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.81282044688135,-1042.0067739305857]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.81282044688135, -1042.0067739305857 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-1019.0085065364211]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -390.63131728430596, -1019.0085065364211 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.90357202816904,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.90357202816904,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.90357202816904,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.90357202816904,-996.0102391422565]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -396.90357202816904, -996.0102391422565 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-977.1934749106673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -409.4480815158952, -977.1934749106673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -975.1027233293796 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -413.62958467847056, -973.0119717480919 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -413.62958467847056, -970.9212201668042 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-968.8304685855165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -415.72033625975826, -968.8304685855165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-415.72033625975826,-964.6489654229412]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -415.72033625975826, -964.6489654229412 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-413.62958467847056,-958.3767106790781]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -413.62958467847056, -958.3767106790781 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-401.0850751907444,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-401.0850751907444,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-401.0850751907444,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-401.0850751907444,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -401.0850751907444, -945.8322011913519 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-933.2876917036258]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -371.81455305271675, -933.2876917036258 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-355.0885404024152,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -355.0885404024152, -924.924685378475 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -342.5440309146891, -920.7431822158997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.99952142696293, -914.4709274720367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -321.6365151018123, -914.4709274720367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.81975087022306,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -302.81975087022306, -922.8339337971875 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-924.924685378475]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -924.924685378475 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-927.0154369597628]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -927.0154369597628 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-929.1061885410504]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -929.1061885410504 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-298.6382477076477,-939.559946447489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -298.6382477076477, -939.559946447489 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -935.3784432849136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-931.1969401223382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-931.1969401223382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-931.1969401223382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-931.1969401223382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -931.1969401223382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-922.8339337971875]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -922.8339337971875 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -912.3801758907489 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1844898012092,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1844898012092,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1844898012092,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-288.1844898012092,-891.472660077872]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -288.1844898012092, -891.472660077872 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-855.9298831959813]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -290.2752413824969, -855.9298831959813 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-809.9333484076521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -809.9333484076521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-776.4813231070491]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -776.4813231070491 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-290.2752413824969,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -290.2752413824969, -747.2108009690214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -286.09373821992153, -713.7587756684184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-699.1235145994046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.82148347605846, -699.1235145994046 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-261.00471924446924,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -261.00471924446924, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -250.5509613380308, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-244.27870659416772,-636.4009671607739]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -244.27870659416772, -636.4009671607739 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -238.00645185030464, -625.9472092543355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -238.00645185030464, -621.7657060917601 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -238.00645185030464, -619.6749545104724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-621.7657060917601]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -240.09720343159233, -621.7657060917601 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -240.09720343159233, -623.8564576730478 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-242.18795501288002,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -242.18795501288002, -625.9472092543355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-254.73246450060617,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -254.73246450060617, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -271.4584771509077, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.81801826438755, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-338.3625277521137,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -338.3625277521137, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-348.81628565855215,-634.3102155794862]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -348.81628565855215, -634.3102155794862 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-352.99778882112753,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -352.99778882112753, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-357.1792919837029,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -357.1792919837029, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-382.2683109591552,-632.2194639981985]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -382.2683109591552, -632.2194639981985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -453.3538647229367, -640.5824703233493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-543.2561827183074,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-543.2561827183074,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-543.2561827183074,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-543.2561827183074,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -543.2561827183074, -663.5807377175139 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-683.3365386645826,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-683.3365386645826,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-683.3365386645826,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-683.3365386645826,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -683.3365386645826, -682.3975019491031 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-875.6856841430499,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-875.6856841430499,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-875.6856841430499,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-875.6856841430499,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -875.6856841430499, -709.5772725058431 ] ],
+ type: 14 }
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-1104.7293213692164]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -1104.7293213692164 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-1058.7327865808873]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 194.77912547624703, -1058.7327865808873 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-973.0119717480919]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 213.59588970783636, -973.0119717480919 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-912.3801758907489]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -912.3801758907489 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 244.9571634271516, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-860.1113863585567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-860.1113863585567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-860.1113863585567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-860.1113863585567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, -860.1113863585567 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[236.59415710200085,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 236.59415710200085, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -851.748380033406 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-851.748380033406]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -851.748380033406 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-849.6576284521183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -849.6576284521183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-845.4761252895429]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-845.4761252895429]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-845.4761252895429]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,-845.4761252895429]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, -845.4761252895429 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.95889603298713,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.95889603298713,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.95889603298713,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[221.95889603298713,-835.0223673831044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 221.95889603298713, -835.0223673831044 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[217.77739287041175,-824.568609476666]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[217.77739287041175,-824.568609476666]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[217.77739287041175,-824.568609476666]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[217.77739287041175,-824.568609476666]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 217.77739287041175, -824.568609476666 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.41438654526098, -814.1148515702275 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 201.05138022011022, -799.4795905012138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,-782.7535778509123]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 192.68837389495945, -782.7535778509123 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-759.7553104567476]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, -759.7553104567476 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.1438644072333, -734.6662914812953 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.78085808208255,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.78085808208255, -709.5772725058431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.2363485943564, -684.4882535303908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.9640938504932,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.9640938504932,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.9640938504932,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.9640938504932,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.9640938504932, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-592.4951839537324]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-592.4951839537324]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-592.4951839537324]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-592.4951839537324]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 134.1473296189041, -592.4951839537324 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+called update on data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+Broadcast : edeb4f68-fb13-49ce-a673-16950754ae66, sending data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+{ _id: 'edeb4f68-fb13-49ce-a673-16950754ae66',
+ data: [],
+ type: 1 }
+calling update on data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+called update on data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+Broadcast : edeb4f68-fb13-49ce-a673-16950754ae66, sending data {"type":1,"data":[],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+{ _id: 'edeb4f68-fb13-49ce-a673-16950754ae66',
+ data: [],
+ type: 1 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9bbf8324-4a1c-442a-ac7d-f7a57584cd39' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4e7f69aa-d522-4515-b531-6a23a6b44971' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'b1f2da36-fef6-436c-be4a-996aa74344fa' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ 'edeb4f68-fb13-49ce-a673-16950754ae66' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}],"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":1,"data":["6e0fa9fd-1a07-4b46-b099-26f596df7406"],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+called update on data {"type":1,"data":["6e0fa9fd-1a07-4b46-b099-26f596df7406"],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-207.9844065474815,-331.33874984345493]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -207.9844065474815, -331.33874984345493 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6e0fa9fd-1a07-4b46-b099-26f596df7406"],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+Broadcast : edeb4f68-fb13-49ce-a673-16950754ae66, sending data {"type":1,"data":["6e0fa9fd-1a07-4b46-b099-26f596df7406"],"_id":"edeb4f68-fb13-49ce-a673-16950754ae66"}
+{ _id: 'edeb4f68-fb13-49ce-a673-16950754ae66',
+ data: [ '6e0fa9fd-1a07-4b46-b099-26f596df7406' ],
+ type: 1 }
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -207.9844065474815, -331.33874984345493 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 127.87507487504092, -542.3171460028279 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.1659097100569,-276.97920872997497]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.1659097100569,-276.97920872997497]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.1659097100569,-276.97920872997497]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-212.1659097100569,-276.97920872997497]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -212.1659097100569, -276.97920872997497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 123.69357171246554, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-218.43816445391985,-235.16417710422115]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-218.43816445391985,-235.16417710422115]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-218.43816445391985,-235.16417710422115]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-218.43816445391985,-235.16417710422115]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -218.43816445391985, -235.16417710422115 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 123.69357171246554, -487.957604889348 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.42131696860258,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-201.7121518036181]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-201.7121518036181]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-201.7121518036181]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-201.7121518036181]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -224.7104191977828, -201.7121518036181 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-412.6905479629911]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.14906222473962, -412.6905479629911 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-180.8046359907413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-180.8046359907413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-180.8046359907413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-180.8046359907413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.61966761649524, -180.8046359907413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.2398138060272, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-166.16937492172747]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-166.16937492172747]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.2398138060272,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.61966761649524, -180.8046359907413 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-166.16937492172747]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-222.61966761649524,-166.16937492172747]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.2398138060272, -377.1477710811005 ] ],
+ type: 14 }
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -222.61966761649524, -166.16937492172747 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-224.7104191977828,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.14906222473962, -368.7847647559497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.80117077907062,-155.715617015289]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.80117077907062,-155.715617015289]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.80117077907062,-155.715617015289]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-226.80117077907062,-155.715617015289]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -226.80117077907062, -155.715617015289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.14906222473962, -368.7847647559497 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,-366.694013174662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-230.982673941646,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-230.982673941646,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-230.982673941646,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-230.982673941646,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -230.982673941646, -147.35261069013825 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.87680748087644, -358.33100684951125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293358,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293358,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293358,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.07342552293358,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -233.07342552293358, -143.17110752756287 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.78605589958886, -354.1495036869359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-124.35434329597365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-124.35434329597365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-124.35434329597365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-124.35434329597365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -243.52718342937214, -124.35434329597365 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-335.33273945534665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.33229799315029, -335.33273945534665 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.8901897545229,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.8901897545229,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.8901897545229,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-251.8901897545229,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -251.8901897545229, -105.53757906438443 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[83.96929166799953,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 83.96929166799953, -316.51597522375744 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -266.52545082353674, -86.72081483279521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.33403059898569, -297.6992109921682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804695,28.060366411229097]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804695,28.060366411229097]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804695,28.060366411229097]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804695,28.060366411229097]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 177.4363207804695, 28.060366411229097 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.0699603112629,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.0699603112629,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.0699603112629,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.0699603112629,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.0699603112629, -55.35954111347985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.789521111259546, -266.33793727285286 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.21117443308572,75.1022769902022]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.21117443308572,75.1022769902022]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.21117443308572,75.1022769902022]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[149.21117443308572,75.1022769902022]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 149.21117443308572, 75.1022769902022 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428521,-23.998267394164486]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428521,-23.998267394164486]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428521,-23.998267394164486]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-297.8867245428521,-23.998267394164486]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -297.8867245428521, -23.998267394164486 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.97275687967033,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.97275687967033,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.97275687967033,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.97275687967033,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 37.97275687967033, -234.9766635535375 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.3944102014966,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.3944102014966,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.3944102014966,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.3944102014966,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 130.3944102014966, 125.28031494110678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.43123403057814,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.43123403057814,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -297.8867245428521, -23.998267394164486 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.428247391944296,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.428247391944296,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.428247391944296,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[25.428247391944296,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.43123403057814,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.43123403057814,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 25.428247391944296, -201.52463825293455 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.57764596990728,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.57764596990728,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.57764596990728,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.57764596990728,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.57764596990728, 169.18609814814818 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -322.9757435183043, 38.72428004446624 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.883737904218151, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,206.8196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,206.8196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,206.8196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,206.8196266113266]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 108.4415185979758, 206.8196266113266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,63.81329901991853]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,63.81329901991853]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,63.81329901991853]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,63.81329901991853]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.066495099592, 63.81329901991853 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-147.16509713945447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 10.79298632293046, -147.16509713945447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,235.04477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,235.04477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,235.04477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[108.4415185979758,235.04477295871038]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 108.4415185979758, 235.04477295871038 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,82.63006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,82.63006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,82.63006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,82.63006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.066495099592, 82.63006325150764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 10.79298632293046, -147.16509713945447 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,253.8615371902997]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,253.8615371902997]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,253.8615371902997]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,253.8615371902997]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.16926385411284, 253.8615371902997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,95.17457273923378]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,95.17457273923378]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,95.17457273923378]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,95.17457273923378]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.24799826216736, 95.17457273923378 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-115.80382342013922]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -115.80382342013922 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,260.1337919341627]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,260.1337919341627]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,260.1337919341627]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,260.1337919341627]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.16926385411284, 260.1337919341627 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,99.35607590180916]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,99.35607590180916]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,99.35607590180916]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,99.35607590180916]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.24799826216736, 99.35607590180916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -111.62232025756384 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,263.2699193060944]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,263.2699193060944]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,263.2699193060944]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,263.2699193060944]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 99.03313648218113, 263.2699193060944 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,101.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,101.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,101.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,101.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -331.33874984345505, 101.44682748309674 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.520731579067387, -109.53156867627627 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,256.9976645622312]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,256.9976645622312]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,256.9976645622312]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[99.03313648218113,256.9976645622312]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 99.03313648218113, 256.9976645622312 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,97.26532432052136]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,97.26532432052136]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,97.26532432052136]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-331.33874984345505,97.26532432052136]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -331.33874984345505, 97.26532432052136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.520731579067387, -113.71307183885165 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,244.45315507450505]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,244.45315507450505]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,244.45315507450505]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,244.45315507450505]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.16926385411284, 244.45315507450505 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,88.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,88.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,88.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,88.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.24799826216736, 88.9023179953706 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-122.07607816400241]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -122.07607816400241 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,228.77251821484742]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,228.77251821484742]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,228.77251821484742]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,228.77251821484742]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 105.30539122604432, 228.77251821484742 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,78.44856008893225]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,78.44856008893225]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,78.44856008893225]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,78.44856008893225]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.15724668087967, 78.44856008893225 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-132.52983607044075]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.70223474164277, -132.52983607044075 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.84990071377047,200.54737186746365]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.84990071377047,200.54737186746365]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.84990071377047,200.54737186746365]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[117.84990071377047,200.54737186746365]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 117.84990071377047, 200.54737186746365 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,59.63179585734315]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,59.63179585734315]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,59.63179585734315]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,59.63179585734315]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -318.7942403557289, 59.63179585734315 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.70223474164277, -132.52983607044075 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-151.34660030202986]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734281,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734281,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734281,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734281,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 133.5305375734281, 178.59448026394284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929045,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929045,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929045,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-308.34048244929045,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -308.34048244929045, 44.9965347883292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[27.518998973231987,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 27.518998973231987, -165.9818613710438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.93891968922276,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.93891968922276,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.93891968922276,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.93891968922276,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 142.93891968922276, 156.64158866042203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.0682277054275,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.0682277054275,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.0682277054275,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-302.0682277054275,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -302.0682277054275, 30.361273719315363 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.791253717094946,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.791253717094946, -180.61712244005764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 128.41644231303826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -295.7959729615644, 11.544509487726145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.791253717094946, -180.61712244005764 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 158.61955654888038, 109.59967808144916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -291.61446979898903, -1 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -211.978396159373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 158.61955654888038, 106.46355070951768 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -291.61446979898903, -3.090751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -214.0691477406607 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,106.46355070951768]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 106.46355070951768 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-3.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, -3.090751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-214.0691477406607]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -214.0691477406607 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,109.59967808144916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 109.59967808144916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-1]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, -1 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-211.978396159373]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -211.978396159373 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 112.73580545338064 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 1.090751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -209.88764457808531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,115.87193282531211]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,115.87193282531211]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,115.87193282531211]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,115.87193282531211]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 115.87193282531211 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,3.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,3.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,3.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,3.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -295.7959729615644, 3.181503162575382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -207.79689299679762 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,119.00806019724382]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,119.00806019724382]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,119.00806019724382]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,119.00806019724382]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 119.00806019724382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,5.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,5.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,5.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,5.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -295.7959729615644, 5.272254743863073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -207.79689299679762 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,122.1441875691753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,122.1441875691753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,122.1441875691753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,122.1441875691753]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 122.1441875691753 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,7.363006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,7.363006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,7.363006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,7.363006325150764]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 7.363006325150764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-203.61538983422224]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -203.61538983422224 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.61955654888038,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 158.61955654888038, 125.28031494110678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -291.61446979898903, 9.453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -201.52463825293455 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081186, 125.28031494110678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 9.453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -201.52463825293455 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,128.41644231303826]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 164.89181129274357, 128.41644231303826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,11.544509487726145]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -287.43296663641365, 11.544509487726145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 48.42651478610878, -199.43388667164686 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 168.02793866467505, 134.68869705690145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -285.34221505512596, 15.726012650301527 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.51726636739647, -195.25238350907148 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,137.82482442883293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,137.82482442883293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 168.02793866467505, 134.68869705690145 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,137.82482442883293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,137.82482442883293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,17.816764231589218]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,17.816764231589218]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,17.816764231589218]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,17.816764231589218]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 17.816764231589218 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -193.1616319277838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,140.9609518007644]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,140.9609518007644]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,140.9609518007644]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,140.9609518007644]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 140.9609518007644 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,19.90751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,19.90751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,19.90751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,19.90751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 19.90751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-191.0708803464961]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-191.0708803464961]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-191.0708803464961]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-191.0708803464961]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -191.0708803464961 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,150.36933391655907]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,150.36933391655907]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,150.36933391655907]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,150.36933391655907]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 150.36933391655907 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,26.17977055673998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,26.17977055673998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,26.17977055673998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,26.17977055673998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 26.17977055673998 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -184.79862560263302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,156.64158866042203]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 156.64158866042203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,30.361273719315363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 30.361273719315363 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -180.61712244005764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 166.0499707762167 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 36.633528463178436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -180.61712244005764 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 169.18609814814818 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 38.72428004446624 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 172.32222552007988 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 40.81503162575382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[171.16406603660653,178.59448026394284]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 171.16406603660653, 178.59448026394284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, 44.9965347883292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -170.1633645336192 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,181.73060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,181.73060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,181.73060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,181.73060763587432]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 168.02793866467505, 181.73060763587432 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,47.087286369617004]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,47.087286369617004]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,47.087286369617004]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,47.087286369617004]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -285.34221505512596, 47.087286369617004 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.51726636739647, -163.891109789756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,184.86673500780603]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,184.86673500780603]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,184.86673500780603]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.89181129274357,184.86673500780603]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 164.89181129274357, 184.86673500780603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-287.43296663641365,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -287.43296663641365, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[48.42651478610878,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 48.42651478610878, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,188.0028623797375]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,188.0028623797375]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,188.0028623797375]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,188.0028623797375]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081186, 188.0028623797375 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,51.268789532192386]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,51.268789532192386]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,51.268789532192386]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,51.268789532192386]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 51.268789532192386 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -159.70960662718062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 194.27511712360047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -155.52810346460524 ] ],
+ type: 14 }
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 51.268789532192386 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+S sending : b1f2da36-fef6-436c-be4a-996aa74344fa, receiving Get Field with data {"_id":"b1f2da36-fef6-436c-be4a-996aa74344fa","data":-1,"type":0}
+S sending : 02535b48-c865-4089-9026-d9f0b74dd18f, receiving Get Field with data {"_id":"02535b48-c865-4089-9026-d9f0b74dd18f","data":-196.19142022455082,"type":0}
+S sending : 221704be-2709-4597-b3f2-6f7ba3ca3a05, receiving Get Field with data {"_id":"221704be-2709-4597-b3f2-6f7ba3ca3a05","data":-571.5876681408556,"type":0}
+S sending : 2547894b-f0a8-48da-85ee-1823bd961956, receiving Get Field with data {"_id":"2547894b-f0a8-48da-85ee-1823bd961956","data":1062.1018032941463,"type":0}
+S sending : 9bbf8324-4a1c-442a-ac7d-f7a57584cd39, receiving Get Field with data {"_id":"9bbf8324-4a1c-442a-ac7d-f7a57584cd39","data":719.2185439629652,"type":0}
+S sending : cfe7bf1f-062c-4992-a9e4-553241619bc4, receiving Get Field with data {"_id":"cfe7bf1f-062c-4992-a9e4-553241619bc4","data":1,"type":0}
+S sending : 4e7f69aa-d522-4515-b531-6a23a6b44971, receiving Get Field with data {"_id":"4e7f69aa-d522-4515-b531-6a23a6b44971","data":0,"type":0}
+S sending : 1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c, receiving Get Field with data {"_id":"1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-398.02750749824247,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":-74.73311872096588,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":2,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-103.70194957048432,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-168.80171170567712,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":3,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":142.33700820255547,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":-4.18636328696482,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":4,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":300}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 300,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Set Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+calling update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+called update on data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+Broadcast : 3585fbf3-f32c-497f-aae6-9afcba185724, sending data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","type":0,"data":299.5}
+{ _id: '3585fbf3-f32c-497f-aae6-9afcba185724',
+ data: 299.5,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 194.27511712360047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 55.45029269476777 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -155.52810346460524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081186, 194.27511712360047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 55.45029269476777 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -155.52810346460524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.2478871945525,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.2478871945525,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.2478871945525,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.2478871945525,194.27511712360047]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 265.2478871945525, 194.27511712360047 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-220.52891603520743,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-220.52891603520743,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-220.52891603520743,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-220.52891603520743,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -220.52891603520743, 55.45029269476777 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.81503162575359,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.81503162575359,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 376.674513048276, -155.52810346460524 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.81503162575359,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.81503162575359,55.45029269476777]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 376.674513048276, -155.52810346460524 ] ],
+ type: 14 }
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.81503162575359, 55.45029269476777 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 195.53064864104272, 61.72254743863073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -149.25584872074228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814824,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814824,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814824,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[358.6092719814824,61.72254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 358.6092719814824, 61.72254743863073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-149.25584872074228]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 694.4687534040048, -149.25584872074228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[953.7219494836785,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 953.7219494836785, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[985.0832232029937,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[985.0832232029937,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[985.0832232029937,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[985.0832232029937,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 985.0832232029937, -807.8425968263645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[562.7514037828804,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 562.7514037828804, -623.8564576730478 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.80983380824773,-293.7052213802765]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.80983380824773,-293.7052213802765]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.80983380824773,-293.7052213802765]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.80983380824773,-293.7052213802765]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -111.80983380824773, -293.7052213802765 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 562.7514037828804, -623.8564576730478 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[224.0496476142747,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,-251.89018975452268]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,-251.89018975452268]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,-251.89018975452268]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-283.25146347383827,-251.89018975452268]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -283.25146347383827, -251.89018975452268 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[52.608017948684164,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 52.608017948684164, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -316.7034887744412, -243.52718342937192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 19.155992648081224, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-318.7942403557289,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -318.7942403557289, -243.52718342937192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[17.065241066793533,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 17.065241066793533, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -322.9757435183043, -243.52718342937192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.883737904218151, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.066495099592,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.066495099592, -243.52718342937192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[10.79298632293046,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 10.79298632293046, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.15724668087967,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.15724668087967, -245.6179350106596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.70223474164277, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-322.9757435183043,-245.6179350106596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -322.9757435183043, -245.6179350106596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.883737904218151,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.883737904218151, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-253.98094133581037]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-253.98094133581037]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-253.98094133581037]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.61446979898903,-253.98094133581037]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -291.61446979898903, -253.98094133581037 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[44.2450116235334,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 44.2450116235334, -464.9593374951834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-264.4346992422488]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-264.4346992422488]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-264.4346992422488]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-264.4346992422488]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -243.52718342937214, -264.4346992422488 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.33229799315029, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-239.34568026679676,-266.5254508235365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-239.34568026679676,-266.5254508235365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-239.34568026679676,-266.5254508235365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-239.34568026679676,-266.5254508235365]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -239.34568026679676, -266.5254508235365 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 96.51380115572567, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-260.25319607967344]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-260.25319607967344]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-260.25319607967344]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-243.52718342937214,-260.25319607967344]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -243.52718342937214, -260.25319607967344 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-471.23159223904645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.33229799315029, -471.23159223904645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-214.25666129134424]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-214.25666129134424]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-214.25666129134424]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,-214.25666129134424]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, -214.25666129134424 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-425.23505745071725]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -425.23505745071725 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.51678779435963,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.51678779435963,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.51678779435963,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-381.51678779435963,-143.17110752756287]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -381.51678779435963, -143.17110752756287 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-354.1495036869359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -45.657306371837194, -354.1495036869359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394288,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394288,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394288,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-454.6930931394288,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -454.6930931394288, -74.17630534506907 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.83361171690638,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.83361171690638,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.83361171690638,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.83361171690638,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -118.83361171690638, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -511.14338583419635, -7.272254743863073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -118.83361171690638, -285.1547015044421 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.0509016470733,21.9982673941646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.0509016470733,21.9982673941646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.0509016470733,21.9982673941646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.0509016470733,21.9982673941646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -532.0509016470733, 21.9982673941646 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -188.9801287652084 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-525.7786469032102,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-525.7786469032102,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-525.7786469032102,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-525.7786469032102,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -525.7786469032102, 32.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-189.91916548068775,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -189.91916548068775, -178.52637085876995 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.14338583419635,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -511.14338583419635, 40.81503162575382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-175.28390441167392,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -175.28390441167392, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651825,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651825,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651825,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-496.5081247651825,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -496.5081247651825, 44.9965347883292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-160.64864334266008,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -160.64864334266008, -165.9818613710438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-483.96361527745637,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-483.96361527745637,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-483.96361527745637,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-483.96361527745637,44.9965347883292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -483.96361527745637, 44.9965347883292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-148.10413385493393,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -148.10413385493393, -165.9818613710438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715496,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715496,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715496,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715496,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.23760262715496, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -131.37812120463252, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-450.51158997685343,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-450.51158997685343,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-450.51158997685343,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-450.51158997685343,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -450.51158997685343, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-114.652108554331,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -114.652108554331, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.6948257452642,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.6948257452642,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.6948257452642,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-431.6948257452642,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -431.6948257452642, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-95.83534432274178,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -95.83534432274178, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882576,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882576,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882576,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.24106783882576,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.24106783882576, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -85.38158641630332, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.42430360723654,42.90578320704162]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.42430360723654,42.90578320704162]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.42430360723654,42.90578320704162]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-402.42430360723654,42.90578320704162]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -402.42430360723654, 42.90578320704162 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -66.5648221847141, -168.07261295233138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[36.310589043550635,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[36.310589043550635,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[36.310589043550635,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[36.310589043550635,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 36.310589043550635, 159.77771603235374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920887,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920887,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920887,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-373.15378146920887,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -373.15378146920887, 32.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-37.29430004668643,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-37.29430004668643,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-37.29430004668643,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-37.29430004668643,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -37.29430004668643, -178.52637085876995 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.16926385411284,134.68869705690145]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.16926385411284, 134.68869705690145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.24799826216736,15.726012650301527]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -329.24799826216736, 15.726012650301527 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -37.29430004668643, -178.52637085876995 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-195.25238350907148]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,112.73580545338064]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 112.73580545338064 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-295.7959729615644,1.090751581287691]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -295.7959729615644, 1.090751581287691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[40.06350846095802,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 40.06350846095802, -209.88764457808531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,93.91904122179153]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,93.91904122179153]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,93.91904122179153]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,93.91904122179153]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.5724481524012, 93.91904122179153 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,-11.45375790643834]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,-11.45375790643834]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,-11.45375790643834]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,-11.45375790643834]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -276.9792087299752, -11.45375790643834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-222.43215406581135]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -222.43215406581135 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.3892123839903, 81.37453173406539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -264.43469924224905, -19.816764231589104 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 71.42478218027338, -230.7951603909621 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.3892123839903,81.37453173406539]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.3892123839903, 81.37453173406539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-264.43469924224905,-19.816764231589104]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -264.43469924224905, -19.816764231589104 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 71.42478218027338, -230.7951603909621 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.25308501205882,84.51065910599687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.25308501205882,84.51065910599687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.25308501205882,84.51065910599687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.25308501205882,84.51065910599687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.25308501205882, 84.51065910599687 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-17.726012650301413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-17.726012650301413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-17.726012650301413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.52545082353674,-17.726012650301413]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -266.52545082353674, -17.726012650301413 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 71.42478218027338, -230.7951603909621 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-228.70440880967442]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.11695764012734,100.19129596565449]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.11695764012734,100.19129596565449]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.11695764012734,100.19129596565449]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.11695764012734,100.19129596565449]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.11695764012734, 100.19129596565449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.61620240482443,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.61620240482443,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.61620240482443,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-268.61620240482443,-7.272254743863073]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -268.61620240482443, -7.272254743863073 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[67.243279017698,-218.25065090323608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 67.243279017698, -218.25065090323608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.5724481524012,125.28031494110678]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.5724481524012, 125.28031494110678 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-276.9792087299752,9.453757906438454]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -276.9792087299752, 9.453757906438454 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -201.52463825293455 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,147.2332065446276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,147.2332065446276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,147.2332065446276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[168.02793866467505,147.2332065446276]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 168.02793866467505, 147.2332065446276 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,24.08901897545229]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,24.08901897545229]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,24.08901897545229]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-285.34221505512596,24.08901897545229]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -285.34221505512596, 24.08901897545229 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -201.52463825293455 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,159.77771603235374]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081186, 159.77771603235374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,32.452025300603054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 32.452025300603054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -178.52637085876995 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081186,169.18609814814818]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081186, 169.18609814814818 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-289.52371821770134,38.72428004446624]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -289.52371821770134, 38.72428004446624 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,172.32222552007988]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 172.32222552007988 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,40.81503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 40.81503162575382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,166.0499707762167]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 166.0499707762167 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,36.633528463178436]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 36.633528463178436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -174.34486769619457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849055]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849055]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849055]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849055]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 153.50546128849055 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-293.7052213802767,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -293.7052213802767, 28.270522138027673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.15426004224571,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.15426004224571, -182.70787402134533 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+Broadcast : 8e5f8b96-0193-4acb-b426-918c42e2cbd4, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{ _id: '8e5f8b96-0193-4acb-b426-918c42e2cbd4',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'a8235956-e798-4904-b97a-5395111c95fe',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-413.414291732052}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-413.414291732052}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-413.414291732052}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-915.0277408479336}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-915.0277408479336}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-915.0277408479336}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -74.73311872096588,
+ type: 0 }
+Incoming : 80cee8dd-24d8-4e50-9911-0d691c87217d, receiving Set Field with data {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","type":0,"data":1}
+calling update on data {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","type":0,"data":1}
+called update on data {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","80cee8dd-24d8-4e50-9911-0d691c87217d"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","80cee8dd-24d8-4e50-9911-0d691c87217d"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-812.0240999889398]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-812.0240999889398]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-915.0277408479336}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-915.0277408479336}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -398.02750749824247,
+ type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d"}],"ok":1}
+Wrote {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","type":0,"data":1}
+Broadcast : 80cee8dd-24d8-4e50-9911-0d691c87217d, sending data {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","type":0,"data":1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-413.414291732052}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-413.414291732052}
+{ _id: '80cee8dd-24d8-4e50-9911-0d691c87217d', data: 1, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","80cee8dd-24d8-4e50-9911-0d691c87217d"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+Broadcast : a8235956-e798-4904-b97a-5395111c95fe, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","1429712e-036b-40a7-8603-5878cf6136f8"],["7b71638c-05b8-5573-9aa5-c737c9406a86","02535b48-c865-4089-9026-d9f0b74dd18f"],["13a3cc01-c286-57e1-8746-baa3ced34e76","221704be-2709-4597-b3f2-6f7ba3ca3a05"],["5c207bd2-0390-5c35-8972-06d185f387fb","2547894b-f0a8-48da-85ee-1823bd961956"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9bbf8324-4a1c-442a-ac7d-f7a57584cd39"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4e7f69aa-d522-4515-b531-6a23a6b44971"],["048d25ac-b841-5728-a599-e3a432137881","1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c"],["911954a3-bebc-5b20-81f3-3091a2e11907","b1f2da36-fef6-436c-be4a-996aa74344fa"],["43606ee9-0825-51a3-98b2-06d36fdfd153","edeb4f68-fb13-49ce-a673-16950754ae66"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","80cee8dd-24d8-4e50-9911-0d691c87217d"]],"_id":"a8235956-e798-4904-b97a-5395111c95fe"}
+{ _id: 'a8235956-e798-4904-b97a-5395111c95fe',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '1429712e-036b-40a7-8603-5878cf6136f8' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '02535b48-c865-4089-9026-d9f0b74dd18f' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '221704be-2709-4597-b3f2-6f7ba3ca3a05' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '2547894b-f0a8-48da-85ee-1823bd961956' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9bbf8324-4a1c-442a-ac7d-f7a57584cd39' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4e7f69aa-d522-4515-b531-6a23a6b44971' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '1f3cb8d3-39ad-4e66-9e2f-ceb0fd27460c' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ 'b1f2da36-fef6-436c-be4a-996aa74344fa' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ 'edeb4f68-fb13-49ce-a673-16950754ae66' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ '80cee8dd-24d8-4e50-9911-0d691c87217d' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,153.50546128849072]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-812.0240999889398]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-812.0240999889398]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 153.50546128849072 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -812.0240999889398 ] ],
+ type: 14 }
+S sending : 80cee8dd-24d8-4e50-9911-0d691c87217d, receiving Get Field with data {"_id":"80cee8dd-24d8-4e50-9911-0d691c87217d","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.4834291769489,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.4834291769489, 144.09707917269606 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-309.09200561408613,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -309.09200561408613, -818.2963547328029 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.6195565488805,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.6195565488805,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.6195565488805,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[158.6195565488805,144.09707917269606]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 158.6195565488805, 144.09707917269606 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-818.2963547328029]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -307.00125403279844, -818.2963547328029 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081198,147.23320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081198,147.23320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081198,147.23320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.75568392081198,147.23320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 161.75568392081198, 147.23320654462765 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -304.91050245151075, -816.2056031515152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[189.98083026819586,172.32222552007983]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[189.98083026819586,172.32222552007983]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[189.98083026819586,172.32222552007983]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[189.98083026819586,172.32222552007983]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 189.98083026819586, 172.32222552007983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-286.09373821992153,-799.4795905012138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -286.09373821992153, -799.4795905012138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.56725033489488,219.36413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.56725033489488,219.36413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.56725033489488,219.36413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.56725033489488,219.36413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.56725033489488, 219.36413609905293 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-246.3694581754554,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -246.3694581754554, -768.1183167818983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-200.3729233871262,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -200.3729233871262, -715.8495272497062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-129.28736962334483,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -129.28736962334483, -640.5824703233493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337347,-348.06476249375646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337347,-348.06476249375646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337347,-348.06476249375646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-396.15204886337347,-348.06476249375646]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -396.15204886337347, -348.06476249375646 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -60.29256744085103, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-249.799438173235]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-249.799438173235]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-249.799438173235]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-316.7034887744412,-249.799438173235]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -316.7034887744412, -249.799438173235 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.155992648081224,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 19.155992648081224, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967367,-178.7138844094536]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967367,-178.7138844094536]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967367,-178.7138844094536]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-260.25319607967367,-178.7138844094536]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -260.25319607967367, -178.7138844094536 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-389.6922805688266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.60628534284876, -389.6922805688266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-201.71215180361833,-118.08208855211058]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-201.71215180361833,-118.08208855211058]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-201.71215180361833,-118.08208855211058]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-201.71215180361833,-118.08208855211058]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -201.71215180361833, -118.08208855211058 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.1473296189041,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 134.1473296189041, -329.0604847114836 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.0768907346046,-97.17457273923367]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.0768907346046,-97.17457273923367]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.0768907346046,-97.17457273923367]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-187.0768907346046,-97.17457273923367]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -187.0768907346046, -97.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-308.1529688986067]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 148.78259068791783, -308.1529688986067 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-178.71388440945384,-92.99306957665829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-178.71388440945384,-92.99306957665829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-178.71388440945384,-92.99306957665829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-178.71388440945384,-92.99306957665829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -178.71388440945384, -92.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[157.1455970130686,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[157.1455970130686,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[157.1455970130686,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[157.1455970130686,-303.9714657360313]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 157.1455970130686, -303.9714657360313 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-172.44162966559065,-90.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-172.44162966559065,-90.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-172.44162966559065,-90.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-172.44162966559065,-90.9023179953706]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -172.44162966559065, -90.9023179953706 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-301.8807141547436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 163.41785175693178, -301.8807141547436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.1693749217277,-88.8115664140829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.1693749217277,-88.8115664140829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.1693749217277,-88.8115664140829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-166.1693749217277,-88.8115664140829]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -166.1693749217277, -88.8115664140829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-299.7899625734559]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, -299.7899625734559 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-159.8971201778645,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-159.8971201778645,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-159.8971201778645,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-159.8971201778645,-86.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -159.8971201778645, -86.72081483279521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.96236124465793, -297.6992109921682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-149.44336227142617,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-149.44336227142617,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-149.44336227142617,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-149.44336227142617,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -149.44336227142617, -82.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[186.41611915109627,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 186.41611915109627, -293.51770782959284 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-138.9896043649876,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-138.9896043649876,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-138.9896043649876,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-138.9896043649876,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -138.9896043649876, -76.26705692635676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.86987705753484, -287.24545308572976 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-136.89885278370002,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-136.89885278370002,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-136.89885278370002,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-136.89885278370002,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -136.89885278370002, -76.26705692635676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.9606286388224,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.9606286388224,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.9606286388224,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[198.9606286388224,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 198.9606286388224, -287.24545308572976 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.53584645854926,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.53584645854926,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.53584645854926,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-128.53584645854926,-74.17630534506907]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -128.53584645854926, -74.17630534506907 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[207.32363496397318,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[207.32363496397318,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[207.32363496397318,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[207.32363496397318,-285.1547015044421]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 207.32363496397318, -285.1547015044421 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-124.35434329597388,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-124.35434329597388,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-124.35434329597388,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-124.35434329597388,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -124.35434329597388, -69.99480218249369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 211.50513812654856, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.1728401333985,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.1728401333985,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.1728401333985,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-120.1728401333985,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -120.1728401333985, -69.99480218249369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 215.68664128912394, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082311,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082311,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082311,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082311,-69.99480218249369]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -115.99133697082311, -69.99480218249369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 215.68664128912394, -280.9731983418667 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.518810503012901,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.518810503012901,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.518810503012901,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[2.518810503012901,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 2.518810503012901, 150.3464916567068 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-101.35607590180916,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-101.35607590180916,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-101.35607590180916,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-101.35607590180916,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -101.35607590180916, -67.904050601206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 234.50340552071327, -278.882446760579 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.88008422232838,162.89100114443295]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.88008422232838,162.89100114443295]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.88008422232838,162.89100114443295]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[33.88008422232838,162.89100114443295]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 33.88008422232838, 162.89100114443295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893225,-59.54104427605523]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893225,-59.54104427605523]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893225,-59.54104427605523]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893225,-59.54104427605523]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -80.44856008893225, -59.54104427605523 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,-270.51944043542824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 255.41092133359018, -270.51944043542824 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[74.6497400574383,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[74.6497400574383,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[74.6497400574383,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[74.6497400574383,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 74.6497400574383, 175.4355106321591 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.268789532192386,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.268789532192386,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.268789532192386,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.268789532192386,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -53.268789532192386, -51.17803795090447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[282.59069189033005,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 282.59069189033005, -262.1564341102775 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.4665042890274,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.4665042890274,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.4665042890274,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.4665042890274,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 93.4665042890274, 175.4355106321591 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-40.72428004446624,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-40.72428004446624,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-40.72428004446624,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-40.72428004446624,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -40.72428004446624, -51.17803795090447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 282.59069189033005, -262.1564341102775 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.01101377675354,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.01101377675354,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.01101377675354,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[106.01101377675354,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 106.01101377675354, 175.4355106321591 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931548,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931548,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931548,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931548,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -32.36127371931548, -51.17803795090447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[303.49820770320696,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 303.49820770320696, -262.1564341102775 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.28326852061673,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.28326852061673,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.28326852061673,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[112.28326852061673,175.4355106321591]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 112.28326852061673, 175.4355106321591 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556740095,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556740095,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556740095,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556740095,-51.17803795090447]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -28.179770556740095, -51.17803795090447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[307.67971086578234,-262.1564341102775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 307.67971086578234, -262.1564341102775 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[124.82777800834288,169.1632558882959]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[124.82777800834288,169.1632558882959]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[124.82777800834288,169.1632558882959]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[124.82777800834288,169.1632558882959]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 124.82777800834288, 169.1632558882959 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.81676423158933,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.81676423158933,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.81676423158933,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-19.81676423158933,-55.35954111347985]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -19.81676423158933, -55.35954111347985 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 307.67971086578234, -262.1564341102775 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,-266.33793727285286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.96390538027435,166.02712851636443]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.96390538027435,166.02712851636443]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.96390538027435,166.02712851636443]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.96390538027435,166.02712851636443]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 127.96390538027435, 166.02712851636443 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-17.726012650301755,-57.45029269476754]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-17.726012650301755,-57.45029269476754]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-17.726012650301755,-57.45029269476754]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-17.726012650301755,-57.45029269476754]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -17.726012650301755, -57.45029269476754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.1334687722207,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.1334687722207,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.1334687722207,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.1334687722207,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 318.1334687722207, -268.42868885414055 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[137.3722874960688,159.75487377250147]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[137.3722874960688,159.75487377250147]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[137.3722874960688,159.75487377250147]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[137.3722874960688,159.75487377250147]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 137.3722874960688, 159.75487377250147 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.453757906438568,-61.63179585734292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.453757906438568,-61.63179585734292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.453757906438568,-61.63179585734292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.453757906438568,-61.63179585734292]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -11.453757906438568, -61.63179585734292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[324.40572351608387,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 324.40572351608387, -272.6101920167159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,153.48261902863828]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,153.48261902863828]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,153.48261902863828]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,153.48261902863828]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.64454223993198, 153.48261902863828 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-65.8132990199183]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-65.8132990199183]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-65.8132990199183]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-65.8132990199183]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -7.272254743863186, -65.8132990199183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 324.40572351608387, -272.6101920167159 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,150.3464916567068]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.64454223993198, 150.3464916567068 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-67.904050601206]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -7.272254743863186, -67.904050601206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-278.882446760579]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 328.58722667865925, -278.882446760579 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,144.07423691284384]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,144.07423691284384]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,144.07423691284384]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,144.07423691284384]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.64454223993198, 144.07423691284384 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-72.08555376378138]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-72.08555376378138]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-72.08555376378138]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-72.08555376378138]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -7.272254743863186, -72.08555376378138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-283.0639499231544]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 328.58722667865925, -283.0639499231544 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,137.80198216898066]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,137.80198216898066]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,137.80198216898066]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,137.80198216898066]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.64454223993198, 137.80198216898066 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-76.26705692635676]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -7.272254743863186, -76.26705692635676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-287.24545308572976]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 328.58722667865925, -287.24545308572976 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,128.393600053186]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,128.393600053186]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,128.393600053186]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.64454223993198,128.393600053186]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.64454223993198, 128.393600053186 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-7.272254743863186,-82.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -7.272254743863186, -82.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 328.58722667865925, -287.24545308572976 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[328.58722667865925,-293.51770782959284]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+Broadcast : 8e5f8b96-0193-4acb-b426-918c42e2cbd4, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{ _id: '8e5f8b96-0193-4acb-b426-918c42e2cbd4',
+ data: [ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'a8235956-e798-4904-b97a-5395111c95fe',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480' ],
+ type: 1 }
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":146.43671701924256}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":146.43671701924256}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":146.43671701924256}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -103.70194957048432,
+ type: 0 }
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-835.5639525857666}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-835.5639525857666}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-835.5639525857666}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,128.39360005318622]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,128.39360005318622]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-749.3015525503092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-749.3015525503092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":146.43671701924256}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":146.43671701924256}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -168.80171170567712,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-835.5639525857666}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-835.5639525857666}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,128.39360005318622]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,128.39360005318622]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.6445422399322, 128.39360005318622 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 328.58722667865925, -293.51770782959284 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-749.3015525503092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-749.3015525503092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,134.6658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,134.6658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,134.6658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[143.6445422399322,134.6658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 143.6445422399322, 134.6658547970493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 242.86641184586404, -749.3015525503092 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.7806696118637,140.93810954091236]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.7806696118637,140.93810954091236]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.7806696118637,140.93810954091236]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.7806696118637,140.93810954091236]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.7806696118637, 140.93810954091236 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 244.9571634271516, -740.9385462251585 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.00581595924746,194.25227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.00581595924746,194.25227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.00581595924746,194.25227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.00581595924746,194.25227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.00581595924746, 194.25227486374843 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 263.77392765874094, -705.3957693432677 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.45610865401522,291.472223393626]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.45610865401522,291.472223393626]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.45610865401522,291.472223393626]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[231.45610865401522,291.472223393626]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 231.45610865401522, 291.472223393626 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,-640.5824703233493]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, -640.5824703233493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[351.58549407282374,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[351.58549407282374,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[351.58549407282374,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[351.58549407282374,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 351.58549407282374, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.08382115794598,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.08382115794598,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.08382115794598,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[93.08382115794598,-243.52718342937192]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 93.08382115794598, -243.52718342937192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 428.9433025804684, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.7173496211244,-172.44162966559054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.7173496211244,-172.44162966559054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.7173496211244,-172.44162966559054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[130.7173496211244,-172.44162966559054]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 130.7173496211244, -172.44162966559054 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[466.57683104364685,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[466.57683104364685,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[466.57683104364685,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[466.57683104364685,-383.42002582496355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 466.57683104364685, -383.42002582496355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172724,-95.08382115794598]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172724,-95.08382115794598]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172724,-95.08382115794598]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[164.16937492172724,-95.08382115794598]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 164.16937492172724, -95.08382115794598 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-306.062217317319]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, -306.062217317319 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.89538757202877,-42.815031625753704]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.89538757202877,-42.815031625753704]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.89538757202877,-42.815031625753704]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.89538757202877,-42.815031625753704]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.89538757202877, -42.815031625753704 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-253.7934277851267]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 516.7548689945512, -253.7934277851267 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,-5.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,-5.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,-5.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,-5.181503162575382]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 195.53064864104272, -5.181503162575382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -216.1598993219484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,28.270522138027673]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4398970597549, 28.270522138027673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -216.1598993219484 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,49.17803795090458]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4398970597549, 49.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-161.80035820846842]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -161.80035820846842 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,67.99480218249391]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,67.99480218249391]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,67.99480218249391]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,67.99480218249391]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4398970597549, 67.99480218249391 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-142.9835939768791]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -142.9835939768791 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4398970597549, 80.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[193.4398970597549,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 193.4398970597549, 84.72081483279521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[529.2993784822773,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -126.25758132657779 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[195.53064864104272,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 195.53064864104272, 86.81156641408302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 529.2993784822773, -126.25758132657779 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,86.81156641408302]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.7121518036181, 86.81156641408302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -124.16682974528999 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,84.72081483279521]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.7121518036181, 84.72081483279521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-126.25758132657779]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -126.25758132657779 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,80.53931167021983]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.7121518036181, 80.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,65.90405060120611]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,65.90405060120611]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,65.90405060120611]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[199.7121518036181,65.90405060120611]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 199.7121518036181, 65.90405060120611 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, -145.0743455581669 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+called update on data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+Broadcast : 8e5f8b96-0193-4acb-b426-918c42e2cbd4, sending data {"type":1,"data":[],"_id":"8e5f8b96-0193-4acb-b426-918c42e2cbd4"}
+{ _id: '8e5f8b96-0193-4acb-b426-918c42e2cbd4',
+ data: [],
+ type: 1 }
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["a8235956-e798-4904-b97a-5395111c95fe","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":584.8248202707501}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":584.8248202707501}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":584.8248202707501}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 142.33700820255547,
+ type: 0 }
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-815.2104632759047}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-815.2104632759047}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-815.2104632759047}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ 'a8235956-e798-4904-b97a-5395111c95fe',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-815.2104632759047}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-815.2104632759047}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":584.8248202707501}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":584.8248202707501}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -815.2104632759047,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 642.1999638718127, -745.1200493877338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 642.1999638718127, -740.9385462251585 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 642.1999638718127, -734.6662914812953 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 642.1999638718127, -724.2125335748569 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 640.1092122905251, -703.30501776198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[635.9277091279497,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 635.9277091279497, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[619.2016964776482,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[619.2016964776482,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[619.2016964776482,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[619.2016964776482,-619.6749545104724]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 619.2016964776482, -619.6749545104724 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[264.5254508235364,-352.24626565633184]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[264.5254508235364,-352.24626565633184]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[264.5254508235364,-352.24626565633184]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[264.5254508235364,-352.24626565633184]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 264.5254508235364, -352.24626565633184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, -563.2246618157048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[243.6179350106595,-283.25146347383804]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[243.6179350106595,-283.25146347383804]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[243.6179350106595,-283.25146347383804]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[243.6179350106595,-283.25146347383804]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 243.6179350106595, -283.25146347383804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[579.4774164331819,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 579.4774164331819, -494.22985963321105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.71041919778258,-210.07515812876886]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.71041919778258,-210.07515812876886]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.71041919778258,-210.07515812876886]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[222.71041919778258,-210.07515812876886]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 222.71041919778258, -210.07515812876886 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[558.569900620305,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, -421.05355428814187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.80290338490568,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.80290338490568,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.80290338490568,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.80290338490568,-157.8063685965767]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 201.80290338490568, -157.8063685965767 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 558.569900620305, -421.05355428814187 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-368.7847647559497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.6231328281658,-122.26359171468596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.6231328281658,-122.26359171468596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.6231328281658,-122.26359171468596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[174.6231328281658,-122.26359171468596]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 174.6231328281658, -122.26359171468596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 510.48261425068824, -333.24198787405896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.80636859657648,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.80636859657648,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.80636859657648,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[155.80636859657648,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 155.80636859657648, -107.62833064567212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[491.6658500190989,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 491.6658500190989, -318.6067268050451 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.7156170152889,-103.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.7156170152889,-103.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.7156170152889,-103.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[153.7156170152889,-103.44682748309674]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 153.7156170152889, -103.44682748309674 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-314.42522364246975]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 489.57509843781133, -314.42522364246975 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.4433622714257,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.4433622714257,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.4433622714257,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[147.4433622714257,-105.53757906438443]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 147.4433622714257, -105.53757906438443 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 483.30284369394815, -316.51597522375744 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.17110752756275,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.17110752756275,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.17110752756275,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[141.17110752756275,-107.62833064567212]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 141.17110752756275, -107.62833064567212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 483.30284369394815, -316.51597522375744 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-318.6067268050451]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.8988527836998,-111.8098338082475]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.8988527836998,-111.8098338082475]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.8988527836998,-111.8098338082475]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[134.8988527836998,-111.8098338082475]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 134.8988527836998, -111.8098338082475 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[470.75833420622223,-322.7882299676205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 470.75833420622223, -322.7882299676205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,-120.17284013339827]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,-120.17284013339827]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,-120.17284013339827]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[126.53584645854903,-120.17284013339827]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 126.53584645854903, -120.17284013339827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 462.39532788107147, -331.1512362927713 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,-128.53584645854903]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,-128.53584645854903]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,-128.53584645854903]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.99133697082289,-128.53584645854903]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.99133697082289, -128.53584645854903 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[449.8508183933453,-339.51424261792204]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 449.8508183933453, -339.51424261792204 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,-136.8988527836998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,-136.8988527836998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,-136.8988527836998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[84.72081483279521,-136.8988527836998]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 84.72081483279521, -136.8988527836998 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 420.58029625531765, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.813299019918304,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.813299019918304,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.813299019918304,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.813299019918304,-147.35261069013825]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 63.813299019918304, -147.35261069013825 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 420.58029625531765, -347.8772489430728 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[399.67278044244074,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.26878953219216,-151.53411385271363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.26878953219216,-151.53411385271363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.26878953219216,-151.53411385271363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[51.26878953219216,-151.53411385271363]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 51.26878953219216, -151.53411385271363 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[387.1282709547146,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 387.1282709547146, -362.51251001208664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.08728636961678,-153.62486543400132]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.08728636961678,-153.62486543400132]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.08728636961678,-153.62486543400132]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+Broadcast : 6e0fa9fd-1a07-4b46-b099-26f596df7406, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[47.08728636961678,-153.62486543400132]],"_id":"6e0fa9fd-1a07-4b46-b099-26f596df7406"}
+{ _id: '6e0fa9fd-1a07-4b46-b099-26f596df7406',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 47.08728636961678, -153.62486543400132 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 382.9467677921392, -364.6032615933743 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,323.25400865027564]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,323.25400865027564]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,323.25400865027564]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,323.25400865027564]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 483.30284369394815, 323.25400865027564 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,321.16325706898783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,321.16325706898783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,321.16325706898783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,321.16325706898783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 483.30284369394815, 321.16325706898783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,316.98175390641245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,316.98175390641245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,316.98175390641245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[483.30284369394815,316.98175390641245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 483.30284369394815, 316.98175390641245 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,302.3464928373987]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,302.3464928373987]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,302.3464928373987]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,302.3464928373987]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, 302.3464928373987 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,279.348225443234]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,279.348225443234]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,279.348225443234]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,279.348225443234]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, 279.348225443234 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 472.8490857875098, 222.89793274846647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[462.39532788107147,191.53665902915122]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 462.39532788107147, 191.53665902915122 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,187.35515586657584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,187.35515586657584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,187.35515586657584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,187.35515586657584]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 460.30457629978366, 187.35515586657584 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 460.30457629978366, 176.90139796013727 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,166.44764005369893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 464.48607946235904, 166.44764005369893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,151.81237898468498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,151.81237898468498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,151.81237898468498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[464.48607946235904,151.81237898468498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 464.48607946235904, 151.81237898468498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[362.0392519792623,45.18404833901286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[362.0392519792623,45.18404833901286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[362.0392519792623,45.18404833901286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[362.0392519792623,45.18404833901286]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 362.0392519792623, 45.18404833901286 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[276.3184371464671,-9.175492774467102]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[276.3184371464671,-9.175492774467102]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[276.3184371464671,-9.175492774467102]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[276.3184371464671,-9.175492774467102]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 276.3184371464671, -9.175492774467102 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-78.17029495696079]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -78.17029495696079 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,-130.43908448915317]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 123.69357171246554, -130.43908448915317 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 60.97102427383493, -174.34486769619457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[8.70223474164277,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 8.70223474164277, -205.70614141550993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.20354846539874,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.20354846539874,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.20354846539874,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-35.20354846539874,-230.7951603909621]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -35.20354846539874, -230.7951603909621 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-60.29256744085103,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -60.29256744085103, -232.8859119722498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -81.20008325372794, -234.9766635535375 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-93.74459274145408,-234.9766635535375]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -93.74459274145408, -234.9766635535375 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-131.37812120463252,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -131.37812120463252, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-196.19142022455082,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -196.19142022455082, -207.79689299679762 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-388.5405657030183,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -388.5405657030183, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -434.5371004913475, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-432.4463489100598,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -432.4463489100598, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -172.25411611490676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -174.34486769619457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-178.52637085876995]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -178.52637085876995 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -193.1616319277838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-434.5371004913475,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -434.5371004913475, -199.43388667164686 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-453.3538647229367,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -453.3538647229367, -163.891109789756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-463.8076226293751,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -463.8076226293751, -105.35006551370088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-42.62751807507016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-42.62751807507016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-42.62751807507016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-42.62751807507016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -461.7168710480874, -42.62751807507016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,47.27479992030044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,47.27479992030044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,47.27479992030044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.98912579195047,47.27479992030044]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.98912579195047, 47.27479992030044 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -482.6243868609643, 124.63260842794512 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-482.6243868609643,195.7181621917266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -482.6243868609643, 195.7181621917266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,291.89273493096016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,291.89273493096016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,291.89273493096016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-480.5336352796766,291.89273493096016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -480.5336352796766, 291.89273493096016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-476.35213211710123,377.6135497637556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-476.35213211710123,377.6135497637556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-476.35213211710123,377.6135497637556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-476.35213211710123,377.6135497637556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -476.35213211710123, 377.6135497637556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,471.6973709217016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,471.6973709217016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,471.6973709217016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,471.6973709217016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -484.715138442252, 471.6973709217016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-497.25964792997814,519.7846572913184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-497.25964792997814,519.7846572913184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-497.25964792997814,519.7846572913184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-497.25964792997814,519.7846572913184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -497.25964792997814, 519.7846572913184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,557.4181857544968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,557.4181857544968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,557.4181857544968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.894908998992,557.4181857544968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -511.894908998992, 557.4181857544968 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-528.6209216492935,584.5979563112367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-528.6209216492935,584.5979563112367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-528.6209216492935,584.5979563112367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-528.6209216492935,584.5979563112367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -528.6209216492935, 584.5979563112367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,595.0517142176752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,595.0517142176752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,595.0517142176752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,595.0517142176752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -551.619189043458, 595.0517142176752 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,601.3239689615382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,601.3239689615382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,601.3239689615382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,601.3239689615382]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -568.3452016937596, 601.3239689615382 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-589.2527175066365,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-589.2527175066365,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-589.2527175066365,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-589.2527175066365,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -589.2527175066365, 603.414720542826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,603.414720542826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, 603.414720542826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,615.9592300305521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,615.9592300305521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,615.9592300305521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,615.9592300305521]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -656.1567681078425, 615.9592300305521 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-708.4255576400348,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-708.4255576400348,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-708.4255576400348,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-708.4255576400348,651.5020069124428]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -708.4255576400348, 651.5020069124428 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-764.8758503348024,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-764.8758503348024,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-764.8758503348024,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-764.8758503348024,676.5910258878951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -764.8758503348024, 676.5910258878951 ] ],
+ type: 14 }
+calling update on data {"type":5,"data":[],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+called update on data {"type":5,"data":[],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+Broadcast : 3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526, sending data {"type":5,"data":[],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{ _id: '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526',
+ data: [],
+ type: 5 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+Broadcast : 3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{ _id: '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526',
+ data: [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'textProto' ] ],
+ type: 5 }
+calling update on data {"type":6,"data":"","_id":"9671997d-85b7-4054-a84f-cebc97162166"}
+called update on data {"type":6,"data":"","_id":"9671997d-85b7-4054-a84f-cebc97162166"}
+undefined
+null
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{ _id: '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526',
+ data: [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'textProto' ] ],
+ type: 5 }
+calling update on data {"type":6,"data":"a text note","_id":"78c2e14d-6efe-4942-9943-e618c481bd6b"}
+called update on data {"type":6,"data":"a text note","_id":"78c2e14d-6efe-4942-9943-e618c481bd6b"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"78c2e14d-6efe-4942-9943-e618c481bd6b"}],"ok":1}
+Wrote {"type":6,"data":"a text note","_id":"78c2e14d-6efe-4942-9943-e618c481bd6b"}
+Broadcast : 78c2e14d-6efe-4942-9943-e618c481bd6b, sending data {"type":6,"data":"a text note","_id":"78c2e14d-6efe-4942-9943-e618c481bd6b"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"],["51529209-4838-51c5-a520-0044fddf139c","78c2e14d-6efe-4942-9943-e618c481bd6b"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"],["51529209-4838-51c5-a520-0044fddf139c","78c2e14d-6efe-4942-9943-e618c481bd6b"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+calling update on data {"type":5,"data":[],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Incoming : 483c9a83-c777-47db-a806-4a7c6e298a2d, receiving Set Field with data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","type":0,"data":200}
+calling update on data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","type":0,"data":200}
+called update on data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","type":0,"data":200}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Incoming : 729e1f77-82c8-42ba-a781-7442f2011a48, receiving Set Field with data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","type":0,"data":200}
+calling update on data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","type":0,"data":200}
+called update on data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","type":0,"data":200}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+Broadcast : 3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"9671997d-85b7-4054-a84f-cebc97162166"}],"ok":1}
+Wrote {"type":6,"data":"","_id":"9671997d-85b7-4054-a84f-cebc97162166"}
+Broadcast : 9671997d-85b7-4054-a84f-cebc97162166, sending data {"type":6,"data":"","_id":"9671997d-85b7-4054-a84f-cebc97162166"}
+{ _id: '78c2e14d-6efe-4942-9943-e618c481bd6b',
+ data: 'a text note',
+ type: 6 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"],["51529209-4838-51c5-a520-0044fddf139c","78c2e14d-6efe-4942-9943-e618c481bd6b"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+Broadcast : 3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","textProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","9671997d-85b7-4054-a84f-cebc97162166"],["51529209-4838-51c5-a520-0044fddf139c","78c2e14d-6efe-4942-9943-e618c481bd6b"]],"_id":"3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"}
+{ _id: '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'textProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '9671997d-85b7-4054-a84f-cebc97162166' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '78c2e14d-6efe-4942-9943-e618c481bd6b' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d"}],"ok":1}
+Wrote {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","type":0,"data":200}
+Broadcast : 483c9a83-c777-47db-a806-4a7c6e298a2d, sending data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","type":0,"data":200}
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ] ],
+ type: 5 }
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ] ],
+ type: 5 }
+{ _id: '483c9a83-c777-47db-a806-4a7c6e298a2d',
+ data: 200,
+ type: 0 }
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"729e1f77-82c8-42ba-a781-7442f2011a48"}],"ok":1}
+Wrote {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","type":0,"data":200}
+Broadcast : 729e1f77-82c8-42ba-a781-7442f2011a48, sending data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","type":0,"data":200}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ] ],
+ type: 5 }
+Incoming : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, receiving Set Field with data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":-1}
+calling update on data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":-1}
+called update on data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":-1}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd"}],"ok":1}
+Wrote {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":-1}
+Broadcast : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, sending data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":-1}
+{ _id: '40f594b5-c6ad-4926-9acb-fc33d688f1cd',
+ data: -1,
+ type: 0 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '40f594b5-c6ad-4926-9acb-fc33d688f1cd' ] ],
+ type: 5 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 62d2960c-ed63-4805-89c8-e01eada0f03e, receiving Set Field with data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-530.7116732305813}
+calling update on data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-530.7116732305813}
+called update on data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-530.7116732305813}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e"}],"ok":1}
+Wrote {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-530.7116732305813}
+Broadcast : 62d2960c-ed63-4805-89c8-e01eada0f03e, sending data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-530.7116732305813}
+{ _id: '62d2960c-ed63-4805-89c8-e01eada0f03e',
+ data: -530.7116732305813,
+ type: 0 }
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Incoming : 9ff46b19-dc58-47d7-9752-340e49e29b16, receiving Set Field with data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-157.61885504589304}
+calling update on data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-157.61885504589304}
+called update on data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-157.61885504589304}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16"}],"ok":1}
+Wrote {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-157.61885504589304}
+Broadcast : 9ff46b19-dc58-47d7-9752-340e49e29b16, sending data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-157.61885504589304}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Incoming : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Set Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":1}
+calling update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":1}
+called update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":1}
+Incoming : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Set Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+calling update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+called update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+Incoming : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Set Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+calling update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+called update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+Incoming : e878ea28-b836-487a-9b2c-28a31657f37b, receiving Set Field with data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":4}
+calling update on data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":4}
+called update on data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":4}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '40f594b5-c6ad-4926-9acb-fc33d688f1cd' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{ _id: 'cc496f45-ce13-4ce5-859c-215d8634bc61', data: 3, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":1}
+Broadcast : e3b590f8-23f0-4feb-831d-cbc9a516828a, sending data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":1}
+{ _id: '9ff46b19-dc58-47d7-9752-340e49e29b16',
+ data: -157.61885504589304,
+ type: 0 }
+{ _id: 'e3b590f8-23f0-4feb-831d-cbc9a516828a', data: 1, type: 0 }
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '40f594b5-c6ad-4926-9acb-fc33d688f1cd' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '62d2960c-ed63-4805-89c8-e01eada0f03e' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '9ff46b19-dc58-47d7-9752-340e49e29b16' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{ _id: 'a59882d7-3daf-4574-b38e-4673bbac7db8', data: 4, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+Broadcast : cc496f45-ce13-4ce5-859c-215d8634bc61, sending data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":2}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"e878ea28-b836-487a-9b2c-28a31657f37b"}],"ok":1}
+Wrote {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":4}
+Broadcast : e878ea28-b836-487a-9b2c-28a31657f37b, sending data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":4}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+Broadcast : a59882d7-3daf-4574-b38e-4673bbac7db8, sending data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":3}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'e878ea28-b836-487a-9b2c-28a31657f37b', data: 4, type: 0 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -530.7116732305813, -157.61885504589304 ] ],
+ type: 14 }
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '40f594b5-c6ad-4926-9acb-fc33d688f1cd' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '62d2960c-ed63-4805-89c8-e01eada0f03e' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '9ff46b19-dc58-47d7-9752-340e49e29b16' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'e878ea28-b836-487a-9b2c-28a31657f37b' ] ],
+ type: 5 }
+S sending : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, receiving Get Field with data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","data":-1,"type":0}
+S sending : 62d2960c-ed63-4805-89c8-e01eada0f03e, receiving Get Field with data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","data":-530.7116732305813,"type":0}
+S sending : 9ff46b19-dc58-47d7-9752-340e49e29b16, receiving Get Field with data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","data":-157.61885504589304,"type":0}
+S sending : 483c9a83-c777-47db-a806-4a7c6e298a2d, receiving Get Field with data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","data":200,"type":0}
+S sending : 729e1f77-82c8-42ba-a781-7442f2011a48, receiving Get Field with data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","data":200,"type":0}
+S sending : e878ea28-b836-487a-9b2c-28a31657f37b, receiving Get Field with data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","data":4,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-159.70960662718062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -530.7116732305813, -159.70960662718062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-526.5301700680059,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-526.5301700680059,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-526.5301700680059,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-526.5301700680059,-163.891109789756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -526.5301700680059, -163.891109789756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-182.70787402134533]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -499.35039951126583, -182.70787402134533 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-205.70614141550993]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -442.90010681649824, -205.70614141550993 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-226.61365722838673]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -390.63131728430596, -226.61365722838673 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-344.63478249597676,-232.8859119722498]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -344.63478249597676, -232.8859119722498 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-243.33966987868826]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -307.00125403279844, -243.33966987868826 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-257.9749309477021]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -257.9749309477021 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-268.42868885414055]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -268.42868885414055 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -272.6101920167159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -276.7916951792913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-284.00298663863384,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-284.00298663863384,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-284.00298663863384,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-284.00298663863384,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -284.00298663863384, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-250.5509613380308,-310.24372047989436]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -250.5509613380308, -310.24372047989436 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-240.09720343159233,-329.0604847114836]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -240.09720343159233, -329.0604847114836 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-231.73419710644157,-372.9662679185251]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -231.73419710644157, -372.9662679185251 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-402.23679005655265]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -221.28043920000312, -402.23679005655265 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-456.5963311700326]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -215.00818445614004, -456.5963311700326 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -215.00818445614004, -510.9558722835126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-215.00818445614004,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -215.00818445614004, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-559.0431586531295]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -221.28043920000312, -559.0431586531295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -221.28043920000312, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-221.28043920000312,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -221.28043920000312, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-225.4619423625785,-625.9472092543355]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -225.4619423625785, -625.9472092543355 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.82494868772926,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.82494868772926,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.82494868772926,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-233.82494868772926,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -233.82494868772926, -651.0362282297878 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-238.00645185030464,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -238.00645185030464, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -701.2142661806923 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.5253397559219,291.4950656534782]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.5253397559219,291.4950656534782]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.5253397559219,291.4950656534782]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[202.5253397559219,291.4950656534782]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 202.5253397559219, 291.4950656534782 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-277.73073189477077,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -277.73073189477077, -720.0310304122816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804697,263.26991930609444]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804697,263.26991930609444]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804697,263.26991930609444]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[177.4363207804697,263.26991930609444]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 177.4363207804697, 263.26991930609444 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -738.8477946438707 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,225.636390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,225.636390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,225.636390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[152.34730180501742,225.636390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 152.34730180501742, 225.636390842916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-311.1827571953738,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -311.1827571953738, -763.936813619323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734282,203.6834992393952]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734282,203.6834992393952]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734282,203.6834992393952]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[133.5305375734282,203.6834992393952]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 133.5305375734282, 203.6834992393952 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-323.72726668309997,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-323.72726668309997,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-323.72726668309997,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-323.72726668309997,-778.5720746883369]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -323.72726668309997, -778.5720746883369 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.76088173831829,169.18609814814835]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.76088173831829,169.18609814814835]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.76088173831829,169.18609814814835]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.76088173831829,169.18609814814835]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.76088173831829, 169.18609814814835 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-801.5703420825014]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -801.5703420825014 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.58284378741371,128.41644231303843]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.58284378741371,128.41644231303843]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.58284378741371,128.41644231303843]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[42.58284378741371,128.41644231303843]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 42.58284378741371, 128.41644231303843 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-828.7501126392414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-828.7501126392414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-828.7501126392414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-828.7501126392414]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -384.3590625404429, -828.7501126392414 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.90183942233364,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.90183942233364,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.90183942233364,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-419.90183942233364,-853.8391316146937]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -419.90183942233364, -853.8391316146937 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-874.7466474275706]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-874.7466474275706]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-874.7466474275706]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,-874.7466474275706]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -442.90010681649824, -874.7466474275706 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,-901.9264179843105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -461.7168710480874, -901.9264179843105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-472.17062895452585,-920.7431822158997]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -472.17062895452585, -920.7431822158997 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-935.3784432849136]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -484.715138442252, -935.3784432849136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,-962.5582138416535]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -503.5319026738412, -962.5582138416535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,-975.1027233293796]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -513.9856605802797, -975.1027233293796 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-518.1671637428551,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-518.1671637428551,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-518.1671637428551,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-518.1671637428551,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -518.1671637428551, -983.4657296545304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-985.5564812358181]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-985.5564812358181]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-985.5564812358181]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-985.5564812358181]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -520.2579153241427, -985.5564812358181 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-522.3486669054305,-989.7379843983935]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -522.3486669054305, -989.7379843983935 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-524.4394184867181,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-524.4394184867181,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-524.4394184867181,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-524.4394184867181,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -524.4394184867181, -993.9194875609688 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-520.2579153241427,-993.9194875609688]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -520.2579153241427, -993.9194875609688 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-516.0764121615673,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-516.0764121615673,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-516.0764121615673,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-516.0764121615673,-991.8287359796811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -516.0764121615673, -991.8287359796811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-501.4411510925535,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-501.4411510925535,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-501.4411510925535,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-501.4411510925535,-983.4657296545304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -501.4411510925535, -983.4657296545304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-484.715138442252,-970.9212201668042]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -484.715138442252, -970.9212201668042 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-457.5353678855121,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-457.5353678855121,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-457.5353678855121,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-457.5353678855121,-945.8322011913519]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -457.5353678855121, -945.8322011913519 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.949315324235272,-0.1647799361545026]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.949315324235272,-0.1647799361545026]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.949315324235272,-0.1647799361545026]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.949315324235272,-0.1647799361545026]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.949315324235272, -0.1647799361545026 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-914.4709274720367]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -409.4480815158952, -914.4709274720367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,53.14938538668156]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,53.14938538668156]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,53.14938538668156]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[105.30539122604432,53.14938538668156]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 105.30539122604432, 53.14938538668156 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-342.5440309146891,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -342.5440309146891, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.88661347523725,122.14418756917536]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.88661347523725,122.14418756917536]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.88661347523725,122.14418756917536]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[233.88661347523725,122.14418756917536]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 233.88661347523725, 122.14418756917536 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.82321608189386,-832.9316158018167]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.82321608189386, -832.9316158018167 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-127.19661804205714,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-127.19661804205714,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-127.19661804205714,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-127.19661804205714,-791.116584176063]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -127.19661804205714, -791.116584176063 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-0.6173168689183512,187.98002011988535]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-0.6173168689183512,187.98002011988535]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-0.6173168689183512,187.98002011988535]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-0.6173168689183512,187.98002011988535]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -0.6173168689183512, 187.98002011988535 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-709.5772725058431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.69183910663025, -709.5772725058431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.31478346457743,263.2470770462422]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.31478346457743,263.2470770462422]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.31478346457743,263.2470770462422]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[297.31478346457743,263.2470770462422]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 297.31478346457743, 263.2470770462422 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[345.3132393289608,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 345.3132393289608, -659.3992345549385 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[533.4808816448527,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 533.4808816448527, -617.5842029291847 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 646.381467034388, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[688.1964986601419,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 688.1964986601419, -596.6766871163078 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[694.4687534040048,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 694.4687534040048, -596.6766871163078 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[698.6502565665802,-596.6766871163078]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 698.6502565665802, -596.6766871163078 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-594.5859355350201]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 707.013262891731, -594.5859355350201 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[725.8300271233203,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[725.8300271233203,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[725.8300271233203,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[725.8300271233203,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 725.8300271233203, -588.313680791157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 746.7375429361972, -582.041426047294 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 757.1913008426355, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[763.4635555864987,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 763.4635555864987, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-573.6784197221433]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 765.5543071677863, -573.6784197221433 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[771.8265619116495,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 771.8265619116495, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[778.0988166555125,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 778.0988166555125, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[799.0063324683894,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[799.0063324683894,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[799.0063324683894,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[799.0063324683894,-563.2246618157048]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 799.0063324683894, -563.2246618157048 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-556.9524070718418]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 809.4600903748279, -556.9524070718418 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[811.5508419561155,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 811.5508419561155, -554.8616554905541 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[813.6415935374033,-554.8616554905541]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 813.6415935374033, -554.8616554905541 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,-552.7709039092664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, -552.7709039092664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[819.9138482812663,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 819.9138482812663, -550.6801523279787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, -546.4986491654033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-544.4078975841156]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 832.4583577689924, -544.4078975841156 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[845.0028672567186,-542.3171460028279]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 845.0028672567186, -542.3171460028279 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 851.2751220005815, -540.2263944215402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 857.5473767444447, -540.2263944215402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[863.8196314883077,-536.0448912589649]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 863.8196314883077, -536.0448912589649 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 868.001134650883, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '2a1cad71-3e49-434a-9914-3a58edf3826c' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-587.2859013954222}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-587.2859013954222}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-587.2859013954222}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-587.2859013954222}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-587.2859013954222}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -587.2859013954222,
+ type: 0 }
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-151.09092722861064}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-151.09092722861064}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-151.09092722861064}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -915.0277408479336,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-151.09092722861064}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-151.09092722861064}
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830', data: 0, type: 0 }
+calling update on data {"type":6,"data":"200 200","_id":"c0202789-e527-47c4-9fd5-1df972a844f6"}
+called update on data {"type":6,"data":"200 200","_id":"c0202789-e527-47c4-9fd5-1df972a844f6"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","c0202789-e527-47c4-9fd5-1df972a844f6"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","c0202789-e527-47c4-9fd5-1df972a844f6"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+{ _id: '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'b681f3b1-5d7b-40e8-bc74-ab179b8cae4d' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '47f3540c-7ded-4c5a-a35e-67b8770c7564' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '9c48c01b-ff87-4633-ab32-620bbe191b04' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '7d5ef008-d5df-4ce3-9755-0c11310c5830' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '42373536-4991-4b59-aaf5-34559e43adef' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '9a0e2341-8c47-4d60-84ec-5fa6158164b1' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'e3b590f8-23f0-4feb-831d-cbc9a516828a' ],
+ [ 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ '3585fbf3-f32c-497f-aae6-9afcba185724' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '77d74b99-31c4-47b2-9d57-1138275216b7' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '6dfbd194-3fc7-406f-afdf-4da660582c3f' ] ],
+ type: 5 }
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a","2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-27.43489264412767}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-27.43489264412767}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-27.43489264412767}
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-71.62713896644365}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-71.62713896644365}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-71.62713896644365}
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+calling update on data {"type":6,"data":"200 200","_id":"6d36177d-50d8-4c1e-8c1f-dba0809dfe46"}
+called update on data {"type":6,"data":"200 200","_id":"6d36177d-50d8-4c1e-8c1f-dba0809dfe46"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","6d36177d-50d8-4c1e-8c1f-dba0809dfe46"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","6d36177d-50d8-4c1e-8c1f-dba0809dfe46"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":410.9532106073798}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":410.9532106073798}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":410.9532106073798}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-51.27364965658168}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-51.27364965658168}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-51.27364965658168}
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+calling update on data {"type":6,"data":"200 200","_id":"cfaaa950-58dc-4f4f-807c-334a2eadb3a3"}
+called update on data {"type":6,"data":"200 200","_id":"cfaaa950-58dc-4f4f-807c-334a2eadb3a3"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","cfaaa950-58dc-4f4f-807c-334a2eadb3a3"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","cfaaa950-58dc-4f4f-807c-334a2eadb3a3"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+calling update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+called update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+calling update on data {"type":5,"data":[],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+called update on data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":6,"data":"a nested collection","_id":"34cae9e4-f490-4dcb-939e-3a12aa5f8f15"}
+called update on data {"type":6,"data":"a nested collection","_id":"34cae9e4-f490-4dcb-939e-3a12aa5f8f15"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Incoming : 011c260c-6b9a-400f-aed6-6bf3b2e658c6, receiving Set Field with data {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","type":0,"data":1}
+calling update on data {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","type":0,"data":1}
+called update on data {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":6,"data":"Transparent","_id":"2de81eb6-3acc-41a5-9f70-7ec578a14d71"}
+called update on data {"type":6,"data":"Transparent","_id":"2de81eb6-3acc-41a5-9f70-7ec578a14d71"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":12,"data":{},"_id":"73c54fd8-2d7b-4f1c-9169-d7be67a2a587"}
+called update on data {"type":12,"data":{},"_id":"73c54fd8-2d7b-4f1c-9169-d7be67a2a587"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"],["59b58624-916f-50a0-8efa-7003a805bfad","73c54fd8-2d7b-4f1c-9169-d7be67a2a587"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"],["59b58624-916f-50a0-8efa-7003a805bfad","73c54fd8-2d7b-4f1c-9169-d7be67a2a587"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+calling update on data {"type":5,"data":[],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : f8cdda5e-254e-403b-bbbb-9e88ace7c7bc, receiving Set Field with data {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","type":0,"data":-520.2579153241427}
+calling update on data {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","type":0,"data":-520.2579153241427}
+called update on data {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","type":0,"data":-520.2579153241427}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : 58c571c6-40c9-4d2d-9574-6abe806dd750, receiving Set Field with data {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","type":0,"data":-993.9194875609688}
+calling update on data {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","type":0,"data":-993.9194875609688}
+called update on data {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","type":0,"data":-993.9194875609688}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : 93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209, receiving Set Field with data {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","type":0,"data":1388.2590499750258}
+calling update on data {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","type":0,"data":1388.2590499750258}
+called update on data {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","type":0,"data":1388.2590499750258}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : 17cda66f-a43a-46bd-a18f-0334e7ed54ba, receiving Set Field with data {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","type":0,"data":459.9653478832917}
+calling update on data {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","type":0,"data":459.9653478832917}
+called update on data {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","type":0,"data":459.9653478832917}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : 4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc, receiving Set Field with data {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","type":0,"data":0}
+calling update on data {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","type":0,"data":0}
+called update on data {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2, receiving Set Field with data {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","type":0,"data":0}
+calling update on data {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","type":0,"data":0}
+called update on data {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : 2a2713bd-a3d5-4fc4-bb4b-37f4149bed64, receiving Set Field with data {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","type":0,"data":-1}
+calling update on data {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","type":0,"data":-1}
+called update on data {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","type":0,"data":-1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","c0202789-e527-47c4-9fd5-1df972a844f6"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+Broadcast : 6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","b681f3b1-5d7b-40e8-bc74-ab179b8cae4d"],["5c207bd2-0390-5c35-8972-06d185f387fb","47f3540c-7ded-4c5a-a35e-67b8770c7564"],["2a238eef-0bbb-5b78-b173-37b574fec97f","9c48c01b-ff87-4633-ab32-620bbe191b04"],["911954a3-bebc-5b20-81f3-3091a2e11907","7d5ef008-d5df-4ce3-9755-0c11310c5830"],["7b71638c-05b8-5573-9aa5-c737c9406a86","42373536-4991-4b59-aaf5-34559e43adef"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9a0e2341-8c47-4d60-84ec-5fa6158164b1"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e3b590f8-23f0-4feb-831d-cbc9a516828a"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3585fbf3-f32c-497f-aae6-9afcba185724"],["43606ee9-0825-51a3-98b2-06d36fdfd153","77d74b99-31c4-47b2-9d57-1138275216b7"],["51529209-4838-51c5-a520-0044fddf139c","c0202789-e527-47c4-9fd5-1df972a844f6"]],"_id":"6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"c0202789-e527-47c4-9fd5-1df972a844f6"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"c0202789-e527-47c4-9fd5-1df972a844f6"}
+Broadcast : c0202789-e527-47c4-9fd5-1df972a844f6, sending data {"type":6,"data":"200 200","_id":"c0202789-e527-47c4-9fd5-1df972a844f6"}
+{ _id: 'c0202789-e527-47c4-9fd5-1df972a844f6',
+ data: '200 200',
+ type: 6 }
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '2a1cad71-3e49-434a-9914-3a58edf3826c' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-27.43489264412767}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":-27.43489264412767}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -27.43489264412767,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":0}
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -835.5639525857666,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-71.62713896644365}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-71.62713896644365}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563', data: 0, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","6d36177d-50d8-4c1e-8c1f-dba0809dfe46"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+Broadcast : 3f886fd6-7d94-445f-88ab-0e1077dbf480, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","8af1e1a7-3da5-4c53-a314-f0b6c892d9a6"],["5c207bd2-0390-5c35-8972-06d185f387fb","4233a5b1-f703-44d8-a4f1-55a230db04e7"],["2a238eef-0bbb-5b78-b173-37b574fec97f","8a50fbb3-768f-4f03-84b5-fc84aaa4f21c"],["911954a3-bebc-5b20-81f3-3091a2e11907","672c99e2-ba2a-419b-9f06-903d9aeba563"],["7b71638c-05b8-5573-9aa5-c737c9406a86","e45192a6-2f99-48aa-ac1f-06cc5fd219f9"],["13a3cc01-c286-57e1-8746-baa3ced34e76","82d314ed-e4d4-46e4-ab5c-6fdd8002ea19"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","cc496f45-ce13-4ce5-859c-215d8634bc61"],["ac03e21a-ec21-5402-a1ae-b66a7d8942a1","3a9af79b-cca5-4901-bf0a-1a657e5fdb98"],["43606ee9-0825-51a3-98b2-06d36fdfd153","026d1b3e-debe-4e63-8a93-54ebd635b78e"],["51529209-4838-51c5-a520-0044fddf139c","6d36177d-50d8-4c1e-8c1f-dba0809dfe46"]],"_id":"3f886fd6-7d94-445f-88ab-0e1077dbf480"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6d36177d-50d8-4c1e-8c1f-dba0809dfe46"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"6d36177d-50d8-4c1e-8c1f-dba0809dfe46"}
+Broadcast : 6d36177d-50d8-4c1e-8c1f-dba0809dfe46, sending data {"type":6,"data":"200 200","_id":"6d36177d-50d8-4c1e-8c1f-dba0809dfe46"}
+{ _id: '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '8af1e1a7-3da5-4c53-a314-f0b6c892d9a6' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '4233a5b1-f703-44d8-a4f1-55a230db04e7' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '8a50fbb3-768f-4f03-84b5-fc84aaa4f21c' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '672c99e2-ba2a-419b-9f06-903d9aeba563' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'cc496f45-ce13-4ce5-859c-215d8634bc61' ],
+ [ 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ '3a9af79b-cca5-4901-bf0a-1a657e5fdb98' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '026d1b3e-debe-4e63-8a93-54ebd635b78e' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '6d36177d-50d8-4c1e-8c1f-dba0809dfe46' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 584.8248202707501,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":410.9532106073798}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":410.9532106073798}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data: [ '2a1cad71-3e49-434a-9914-3a58edf3826c' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-51.27364965658168}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-51.27364965658168}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -51.27364965658168,
+ type: 0 }
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":0}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"cfaaa950-58dc-4f4f-807c-334a2eadb3a3"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"cfaaa950-58dc-4f4f-807c-334a2eadb3a3"}
+Broadcast : cfaaa950-58dc-4f4f-807c-334a2eadb3a3, sending data {"type":6,"data":"200 200","_id":"cfaaa950-58dc-4f4f-807c-334a2eadb3a3"}
+{ _id: 'cfaaa950-58dc-4f4f-807c-334a2eadb3a3',
+ data: '200 200',
+ type: 6 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+Broadcast : 0dc04257-8187-4391-a1bf-a63c30a9e922, sending data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+{ _id: '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '571ecd75-8263-47fc-9741-f9f876a4b2da' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '9d04275c-0bc8-4e43-8142-034824b2deae' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ 'f2822f08-9fd6-4816-ba61-0dc0ea45a0c0' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '9ffe2a20-7fcb-4460-aa91-922b69f91e24' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'd7d79305-cd6b-4653-a173-1284f76f5773' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'a59882d7-3daf-4574-b38e-4673bbac7db8' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '255415d7-52dd-4a1f-8b8f-4503a6f56771' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","cfaaa950-58dc-4f4f-807c-334a2eadb3a3"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+Broadcast : 80586583-40b0-4d17-9f6f-12c4bf633d3a, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","571ecd75-8263-47fc-9741-f9f876a4b2da"],["5c207bd2-0390-5c35-8972-06d185f387fb","9d04275c-0bc8-4e43-8142-034824b2deae"],["2a238eef-0bbb-5b78-b173-37b574fec97f","f2822f08-9fd6-4816-ba61-0dc0ea45a0c0"],["911954a3-bebc-5b20-81f3-3091a2e11907","78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b"],["7b71638c-05b8-5573-9aa5-c737c9406a86","9ffe2a20-7fcb-4460-aa91-922b69f91e24"],["13a3cc01-c286-57e1-8746-baa3ced34e76","d7d79305-cd6b-4653-a173-1284f76f5773"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","a59882d7-3daf-4574-b38e-4673bbac7db8"],["51529209-4838-51c5-a520-0044fddf139c","cfaaa950-58dc-4f4f-807c-334a2eadb3a3"]],"_id":"80586583-40b0-4d17-9f6f-12c4bf633d3a"}
+{ _id: '0dc04257-8187-4391-a1bf-a63c30a9e922',
+ data: {},
+ type: 12 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data: [],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+Broadcast : 21840dfa-8d74-465d-86ca-09b8e949a5a0, sending data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{ _id: '21840dfa-8d74-465d-86ca-09b8e949a5a0',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: '21840dfa-8d74-465d-86ca-09b8e949a5a0',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+Broadcast : 21840dfa-8d74-465d-86ca-09b8e949a5a0, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '21840dfa-8d74-465d-86ca-09b8e949a5a0' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"34cae9e4-f490-4dcb-939e-3a12aa5f8f15"}],"ok":1}
+Wrote {"type":6,"data":"a nested collection","_id":"34cae9e4-f490-4dcb-939e-3a12aa5f8f15"}
+Broadcast : 34cae9e4-f490-4dcb-939e-3a12aa5f8f15, sending data {"type":6,"data":"a nested collection","_id":"34cae9e4-f490-4dcb-939e-3a12aa5f8f15"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '21840dfa-8d74-465d-86ca-09b8e949a5a0' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: '34cae9e4-f490-4dcb-939e-3a12aa5f8f15',
+ data: 'a nested collection',
+ type: 6 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6"}],"ok":1}
+Wrote {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","type":0,"data":1}
+Broadcast : 011c260c-6b9a-400f-aed6-6bf3b2e658c6, sending data {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","type":0,"data":1}
+{ _id: '011c260c-6b9a-400f-aed6-6bf3b2e658c6', data: 1, type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"2de81eb6-3acc-41a5-9f70-7ec578a14d71"}],"ok":1}
+Wrote {"type":6,"data":"Transparent","_id":"2de81eb6-3acc-41a5-9f70-7ec578a14d71"}
+Broadcast : 2de81eb6-3acc-41a5-9f70-7ec578a14d71, sending data {"type":6,"data":"Transparent","_id":"2de81eb6-3acc-41a5-9f70-7ec578a14d71"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '21840dfa-8d74-465d-86ca-09b8e949a5a0' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34cae9e4-f490-4dcb-939e-3a12aa5f8f15' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: '2de81eb6-3acc-41a5-9f70-7ec578a14d71',
+ data: 'Transparent',
+ type: 6 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"73c54fd8-2d7b-4f1c-9169-d7be67a2a587"}],"ok":1}
+Wrote {"type":12,"data":{},"_id":"73c54fd8-2d7b-4f1c-9169-d7be67a2a587"}
+Broadcast : 73c54fd8-2d7b-4f1c-9169-d7be67a2a587, sending data {"type":12,"data":{},"_id":"73c54fd8-2d7b-4f1c-9169-d7be67a2a587"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '21840dfa-8d74-465d-86ca-09b8e949a5a0' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34cae9e4-f490-4dcb-939e-3a12aa5f8f15' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '011c260c-6b9a-400f-aed6-6bf3b2e658c6' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ '2de81eb6-3acc-41a5-9f70-7ec578a14d71' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"],["59b58624-916f-50a0-8efa-7003a805bfad","73c54fd8-2d7b-4f1c-9169-d7be67a2a587"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+Broadcast : a9ab3cae-9c8f-4d45-a84f-1c748c805792, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","21840dfa-8d74-465d-86ca-09b8e949a5a0"],["51529209-4838-51c5-a520-0044fddf139c","34cae9e4-f490-4dcb-939e-3a12aa5f8f15"],["771c0a88-bd02-5e92-953f-e9042a191928","011c260c-6b9a-400f-aed6-6bf3b2e658c6"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","2de81eb6-3acc-41a5-9f70-7ec578a14d71"],["59b58624-916f-50a0-8efa-7003a805bfad","73c54fd8-2d7b-4f1c-9169-d7be67a2a587"]],"_id":"a9ab3cae-9c8f-4d45-a84f-1c748c805792"}
+{ _id: 'a9ab3cae-9c8f-4d45-a84f-1c748c805792',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ '21840dfa-8d74-465d-86ca-09b8e949a5a0' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ '34cae9e4-f490-4dcb-939e-3a12aa5f8f15' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '011c260c-6b9a-400f-aed6-6bf3b2e658c6' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ '2de81eb6-3acc-41a5-9f70-7ec578a14d71' ],
+ [ '59b58624-916f-50a0-8efa-7003a805bfad',
+ '73c54fd8-2d7b-4f1c-9169-d7be67a2a587' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"d56974e0-5327-4f68-9268-128975957d7b"}],"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data: [],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"}],"ok":1}
+Wrote {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","type":0,"data":-520.2579153241427}
+Broadcast : f8cdda5e-254e-403b-bbbb-9e88ace7c7bc, sending data {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","type":0,"data":-520.2579153241427}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750"}],"ok":1}
+Wrote {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","type":0,"data":-993.9194875609688}
+Broadcast : 58c571c6-40c9-4d2d-9574-6abe806dd750, sending data {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","type":0,"data":-993.9194875609688}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: '58c571c6-40c9-4d2d-9574-6abe806dd750',
+ data: -993.9194875609688,
+ type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"}],"ok":1}
+Wrote {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","type":0,"data":1388.2590499750258}
+Broadcast : 93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209, sending data {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","type":0,"data":1388.2590499750258}
+{ _id: '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209',
+ data: 1388.2590499750258,
+ type: 0 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba"}],"ok":1}
+Wrote {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","type":0,"data":459.9653478832917}
+Broadcast : 17cda66f-a43a-46bd-a18f-0334e7ed54ba, sending data {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","type":0,"data":459.9653478832917}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: '17cda66f-a43a-46bd-a18f-0334e7ed54ba',
+ data: 459.9653478832917,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"}],"ok":1}
+Wrote {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","type":0,"data":0}
+Broadcast : 4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc, sending data {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","type":0,"data":0}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"}],"ok":1}
+Wrote {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","type":0,"data":0}
+Broadcast : bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2, sending data {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","type":0,"data":0}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"}],"ok":1}
+Wrote {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","type":0,"data":-1}
+Broadcast : 2a2713bd-a3d5-4fc4-bb4b-37f4149bed64, sending data {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","type":0,"data":-1}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: '2a2713bd-a3d5-4fc4-bb4b-37f4149bed64',
+ data: -1,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ 'd56974e0-5327-4f68-9268-128975957d7b' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[868.001134650883,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 868.001134650883, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+called update on data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+Broadcast : 6ea228be-7e01-4131-a9a9-b5b61b29f342, sending data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+{ _id: '6ea228be-7e01-4131-a9a9-b5b61b29f342',
+ data: [],
+ type: 1 }
+calling update on data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+called update on data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+Broadcast : 6ea228be-7e01-4131-a9a9-b5b61b29f342, sending data {"type":1,"data":[],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '2a2713bd-a3d5-4fc4-bb4b-37f4149bed64' ] ],
+ type: 5 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+undefined
+null
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+calling update on data {"type":1,"data":["bf792c34-1f36-4536-aba0-c0f9ecd3f410"],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+called update on data {"type":1,"data":["bf792c34-1f36-4536-aba0-c0f9ecd3f410"],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '6ea228be-7e01-4131-a9a9-b5b61b29f342',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}],"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[691.0387734062253,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 691.0387734062253, 228.98267394164577 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["bf792c34-1f36-4536-aba0-c0f9ecd3f410"],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+Broadcast : 6ea228be-7e01-4131-a9a9-b5b61b29f342, sending data {"type":1,"data":["bf792c34-1f36-4536-aba0-c0f9ecd3f410"],"_id":"6ea228be-7e01-4131-a9a9-b5b61b29f342"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 868.001134650883, -533.9541396776772 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[865.9103830695955,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '6ea228be-7e01-4131-a9a9-b5b61b29f342',
+ data: [ 'bf792c34-1f36-4536-aba0-c0f9ecd3f410' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.85727024365,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.85727024365,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.85727024365,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[686.85727024365,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 686.85727024365, 228.98267394164577 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[861.7288799070201,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 861.7288799070201, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.6757670810746,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.6757670810746,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.6757670810746,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[682.6757670810746,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 682.6757670810746, 222.7104191977827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[857.5473767444447,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 857.5473767444447, -540.2263944215402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[676.4035123372114,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[676.4035123372114,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[676.4035123372114,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[676.4035123372114,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 676.4035123372114, 216.43816445391963 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[851.2751220005815,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 851.2751220005815, -546.4986491654033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[672.222009174636,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[672.222009174636,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[672.222009174636,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[672.222009174636,216.43816445391963]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 672.222009174636, 216.43816445391963 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[847.0936188380061,-546.4986491654033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 847.0936188380061, -546.4986491654033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.5867481056223,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.5867481056223,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.5867481056223,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[657.5867481056223,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 657.5867481056223, 222.7104191977827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[832.4583577689924,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 832.4583577689924, -540.2263944215402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[809.4600903748279,-529.7726365151018]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 809.4600903748279, -529.7726365151018 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[786.4618229806632,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 786.4618229806632, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 773.9173134929371, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[769.7358103303617,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 769.7358103303617, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 767.6450587490741, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[765.5543071677863,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 765.5543071677863, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,-508.8651207022249]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 761.3728040052109, -508.8651207022249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[757.1913008426355,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 757.1913008426355, -510.9558722835126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 757.1913008426355, -510.9558722835126 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[755.100549261348,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 755.100549261348, -513.0466238648003 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[748.8282945174848,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[746.7375429361972,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 746.7375429361972, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[742.5560397736218,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 742.5560397736218, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[740.465288192334,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 740.465288192334, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[736.2837850297586,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[736.2837850297586,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[736.2837850297586,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[736.2837850297586,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 736.2837850297586, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[719.5577723794571,-510.9558722835126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 719.5577723794571, -510.9558722835126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[707.013262891731,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 707.013262891731, -504.6836175396495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[684.0149954975665,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 684.0149954975665, -492.13910805192336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 675.6519891724157, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[671.4704860098403,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 671.4704860098403, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[669.3797344285525,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 669.3797344285525, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 661.0167281034018, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 650.5629701969634, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[598.2941806647713,-485.8668533080603]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 598.2941806647713, -485.8668533080603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[571.1144101080312,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 571.1144101080312, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-494.22985963321105]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 546.0253911325789, -494.22985963321105 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[523.0271237384144,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 523.0271237384144, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[481.21209211266057,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 481.21209211266057, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[431.034054161756,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 431.034054161756, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 382.9467677921392, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 336.95023300381, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,-492.13910805192336]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, -492.13910805192336 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,-490.04835647063567]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 253.32016975230238, -490.04835647063567 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[219.86814445169932,-479.5945985641972]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 219.86814445169932, -479.5945985641972 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-475.41309540162183]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -475.41309540162183 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[182.2346159885209,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 182.2346159885209, -469.14084065775876 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[167.59935491950716,-464.9593374951834]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 167.59935491950716, -464.9593374951834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[148.78259068791783,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 148.78259068791783, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.69703692413657, -421.05355428814187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-12.20528107123414,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -12.20528107123414, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-152.28563701750932,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -152.28563701750932, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-350.90703723983984,-289.33620466701745]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -350.90703723983984, -289.33620466701745 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-224.52290564709904]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -568.3452016937596, -224.52290564709904 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-810.8723851231316,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-810.8723851231316,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-810.8723851231316,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-810.8723851231316,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-923.7729705126668,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-923.7729705126668,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -810.8723851231316, -172.25411611490676 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -810.8723851231316, -172.25411611490676 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-923.7729705126668,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-923.7729705126668,-155.52810346460524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+a user has connected
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-848.50591358631,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-848.50591358631,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-848.50591358631,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-848.50591358631,-513.0466238648003]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -848.50591358631, -513.0466238648003 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -371.81455305271675, -370.8755163372374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,-113.71307183885165]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 696.5595049852926, -113.71307183885165 ] ],
+ type: 14 }
+calling update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+called update on data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+Broadcast : 6c3acd53-3a16-59b2-bc11-62c6d79b2cea, sending data {"type":2,"data":"Prototype","_id":"6c3acd53-3a16-59b2-bc11-62c6d79b2cea"}
+{ _id: '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ data: 'Prototype',
+ type: 2 }
+calling update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+called update on data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+calling update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+called update on data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+calling update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+called update on data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+calling update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+called update on data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+calling update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+called update on data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+calling update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+called update on data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+calling update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+called update on data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+calling update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+called update on data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+calling update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+called update on data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+calling update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+called update on data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+calling update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+called update on data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+calling update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+called update on data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+calling update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+called update on data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+calling update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+called update on data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+calling update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+called update on data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+calling update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+called update on data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+calling update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+called update on data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+calling update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+called update on data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+calling update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+called update on data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+calling update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+called update on data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+calling update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+called update on data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+calling update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+called update on data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+calling update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+called update on data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+calling update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+called update on data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+calling update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+called update on data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+calling update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+called update on data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+calling update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+called update on data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+calling update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+called update on data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+calling update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+called update on data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+calling update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+called update on data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+calling update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+called update on data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+calling update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+called update on data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+calling update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+called update on data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+calling update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+called update on data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+calling update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+called update on data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+calling update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+called update on data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+calling update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+called update on data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+calling update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+called update on data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+calling update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+called update on data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+calling update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+called update on data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+calling update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+called update on data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+calling update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+called update on data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+Broadcast : 7b71638c-05b8-5573-9aa5-c737c9406a86, sending data {"type":2,"data":"X","_id":"7b71638c-05b8-5573-9aa5-c737c9406a86"}
+{ _id: '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ data: 'X',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+Broadcast : 13a3cc01-c286-57e1-8746-baa3ced34e76, sending data {"type":2,"data":"Y","_id":"13a3cc01-c286-57e1-8746-baa3ced34e76"}
+{ _id: '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ data: 'Y',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+Broadcast : 911954a3-bebc-5b20-81f3-3091a2e11907, sending data {"type":2,"data":"Page","_id":"911954a3-bebc-5b20-81f3-3091a2e11907"}
+{ _id: '911954a3-bebc-5b20-81f3-3091a2e11907',
+ data: 'Page',
+ type: 2 }
+{ _id: '51529209-4838-51c5-a520-0044fddf139c',
+ data: 'Title',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+Broadcast : 4cd12c43-3240-58dd-88bf-ce978edb2fde, sending data {"type":2,"data":"Author","_id":"4cd12c43-3240-58dd-88bf-ce978edb2fde"}
+{ _id: '4cd12c43-3240-58dd-88bf-ce978edb2fde',
+ data: 'Author',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+Broadcast : 51529209-4838-51c5-a520-0044fddf139c, sending data {"type":2,"data":"Title","_id":"51529209-4838-51c5-a520-0044fddf139c"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+Broadcast : 8efd3b8a-ce6c-5f44-9085-90a8b7cd2202, sending data {"type":2,"data":"PanX","_id":"8efd3b8a-ce6c-5f44-9085-90a8b7cd2202"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+Broadcast : 048d25ac-b841-5728-a599-e3a432137881, sending data {"type":2,"data":"PanY","_id":"048d25ac-b841-5728-a599-e3a432137881"}
+{ _id: '048d25ac-b841-5728-a599-e3a432137881',
+ data: 'PanY',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+Broadcast : f9f69d93-df75-5021-883a-efac00502b09, sending data {"type":2,"data":"Scale","_id":"f9f69d93-df75-5021-883a-efac00502b09"}
+{ _id: '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ data: 'PanX',
+ type: 2 }
+{ _id: 'f9f69d93-df75-5021-883a-efac00502b09',
+ data: 'Scale',
+ type: 2 }
+{ _id: '2e6a5061-4d6c-5895-8022-9b4f4fc7118b',
+ data: 'NativeWidth',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+Broadcast : ac03e21a-ec21-5402-a1ae-b66a7d8942a1, sending data {"type":2,"data":"NativeHeight","_id":"ac03e21a-ec21-5402-a1ae-b66a7d8942a1"}
+{ _id: 'ac03e21a-ec21-5402-a1ae-b66a7d8942a1',
+ data: 'NativeHeight',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+Broadcast : 2e6a5061-4d6c-5895-8022-9b4f4fc7118b, sending data {"type":2,"data":"NativeWidth","_id":"2e6a5061-4d6c-5895-8022-9b4f4fc7118b"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+Broadcast : 5c207bd2-0390-5c35-8972-06d185f387fb, sending data {"type":2,"data":"Width","_id":"5c207bd2-0390-5c35-8972-06d185f387fb"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+Broadcast : 2a238eef-0bbb-5b78-b173-37b574fec97f, sending data {"type":2,"data":"Height","_id":"2a238eef-0bbb-5b78-b173-37b574fec97f"}
+{ _id: '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ data: 'Height',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+Broadcast : 3559ca27-b3fa-5407-b822-07a1c9a0664c, sending data {"type":2,"data":"ZIndex","_id":"3559ca27-b3fa-5407-b822-07a1c9a0664c"}
+{ _id: '5c207bd2-0390-5c35-8972-06d185f387fb',
+ data: 'Width',
+ type: 2 }
+{ _id: '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ data: 'ZIndex',
+ type: 2 }
+{ _id: '530318f9-9b84-5b90-b926-530590cdd5c3',
+ data: 'Data',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+Broadcast : c4bbea89-4e57-551a-98fc-af3b6dacccb1, sending data {"type":2,"data":"Annotations","_id":"c4bbea89-4e57-551a-98fc-af3b6dacccb1"}
+{ _id: 'c4bbea89-4e57-551a-98fc-af3b6dacccb1',
+ data: 'Annotations',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+Broadcast : 530318f9-9b84-5b90-b926-530590cdd5c3, sending data {"type":2,"data":"Data","_id":"530318f9-9b84-5b90-b926-530590cdd5c3"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+Broadcast : 771c0a88-bd02-5e92-953f-e9042a191928, sending data {"type":2,"data":"ViewType","_id":"771c0a88-bd02-5e92-953f-e9042a191928"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+Broadcast : 32a999d2-06a3-534f-a12e-c2d710adf3e6, sending data {"type":2,"data":"Layout","_id":"32a999d2-06a3-534f-a12e-c2d710adf3e6"}
+{ _id: '32a999d2-06a3-534f-a12e-c2d710adf3e6',
+ data: 'Layout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+Broadcast : bf70b65d-62da-53e6-82b2-1b849418dc2e, sending data {"type":2,"data":"BackgroundColor","_id":"bf70b65d-62da-53e6-82b2-1b849418dc2e"}
+{ _id: '771c0a88-bd02-5e92-953f-e9042a191928',
+ data: 'ViewType',
+ type: 2 }
+{ _id: 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ data: 'BackgroundColor',
+ type: 2 }
+{ _id: '2588a9ff-2129-5018-84c9-7743d470a4cf',
+ data: 'BackgroundLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+Broadcast : f2b3b5fc-7f38-5783-9218-badc8dcab185, sending data {"type":2,"data":"OverlayLayout","_id":"f2b3b5fc-7f38-5783-9218-badc8dcab185"}
+{ _id: 'f2b3b5fc-7f38-5783-9218-badc8dcab185',
+ data: 'OverlayLayout',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+Broadcast : 2588a9ff-2129-5018-84c9-7743d470a4cf, sending data {"type":2,"data":"BackgroundLayout","_id":"2588a9ff-2129-5018-84c9-7743d470a4cf"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+Broadcast : d0c33158-59b4-5c4a-8a27-b24570e955f0, sending data {"type":2,"data":"LayoutKeys","_id":"d0c33158-59b4-5c4a-8a27-b24570e955f0"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+Broadcast : eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b, sending data {"type":2,"data":"LayoutFields","_id":"eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b"}
+{ _id: 'eb3eeb75-e2fc-5a13-92a7-7e4ff8c2c44b',
+ data: 'LayoutFields',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+Broadcast : 249e18fb-d914-5c26-a367-64a52fdd1daa, sending data {"type":2,"data":"SchemaColumns","_id":"249e18fb-d914-5c26-a367-64a52fdd1daa"}
+{ _id: 'd0c33158-59b4-5c4a-8a27-b24570e955f0',
+ data: 'LayoutKeys',
+ type: 2 }
+{ _id: '249e18fb-d914-5c26-a367-64a52fdd1daa',
+ data: 'SchemaColumns',
+ type: 2 }
+{ _id: 'e51646f0-30ef-5838-8371-9a88b0bc2a30',
+ data: 'SchemaSplitPercentage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+Broadcast : 29e3ad9f-39a2-5fe3-9258-08977e55d7ee, sending data {"type":2,"data":"Caption","_id":"29e3ad9f-39a2-5fe3-9258-08977e55d7ee"}
+{ _id: '29e3ad9f-39a2-5fe3-9258-08977e55d7ee',
+ data: 'Caption',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+Broadcast : e51646f0-30ef-5838-8371-9a88b0bc2a30, sending data {"type":2,"data":"SchemaSplitPercentage","_id":"e51646f0-30ef-5838-8371-9a88b0bc2a30"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+Broadcast : 87bcf74b-a9de-5523-a148-39e5f7e35c5f, sending data {"type":2,"data":"ActiveFrame","_id":"87bcf74b-a9de-5523-a148-39e5f7e35c5f"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+Broadcast : 77aeae9e-9bc5-5318-b4cf-219d29204f73, sending data {"type":2,"data":"ActiveWorkspace","_id":"77aeae9e-9bc5-5318-b4cf-219d29204f73"}
+{ _id: '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ data: 'ActiveWorkspace',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+Broadcast : ebdc0250-58e7-5b19-9061-fd9a60d42e07, sending data {"type":2,"data":"ActiveDB","_id":"ebdc0250-58e7-5b19-9061-fd9a60d42e07"}
+{ _id: '87bcf74b-a9de-5523-a148-39e5f7e35c5f',
+ data: 'ActiveFrame',
+ type: 2 }
+{ _id: 'ebdc0250-58e7-5b19-9061-fd9a60d42e07',
+ data: 'ActiveDB',
+ type: 2 }
+{ _id: 'db106646-3e58-5a71-8121-84753b400f96',
+ data: 'DocumentText',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+Broadcast : 91ed6e52-c6aa-57aa-b98b-04602411c3d3, sending data {"type":2,"data":"LinkedToDocs","_id":"91ed6e52-c6aa-57aa-b98b-04602411c3d3"}
+{ _id: '91ed6e52-c6aa-57aa-b98b-04602411c3d3',
+ data: 'LinkedToDocs',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+Broadcast : db106646-3e58-5a71-8121-84753b400f96, sending data {"type":2,"data":"DocumentText","_id":"db106646-3e58-5a71-8121-84753b400f96"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+Broadcast : 8b33881b-415d-5c37-9270-f26cc3a7935e, sending data {"type":2,"data":"LinkedFromDocs","_id":"8b33881b-415d-5c37-9270-f26cc3a7935e"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+Broadcast : 0c28246e-1e14-5c7c-897f-916c5e8695b8, sending data {"type":2,"data":"LinkDescription","_id":"0c28246e-1e14-5c7c-897f-916c5e8695b8"}
+{ _id: '0c28246e-1e14-5c7c-897f-916c5e8695b8',
+ data: 'LinkDescription',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+Broadcast : ae45a701-5adf-5ca2-822a-27127becbb91, sending data {"type":2,"data":"LinkTag","_id":"ae45a701-5adf-5ca2-822a-27127becbb91"}
+{ _id: '8b33881b-415d-5c37-9270-f26cc3a7935e',
+ data: 'LinkedFromDocs',
+ type: 2 }
+{ _id: 'ae45a701-5adf-5ca2-822a-27127becbb91',
+ data: 'LinkTag',
+ type: 2 }
+{ _id: '22b8e67b-50b6-5e6e-9f3d-9810b8d07619',
+ data: 'Thumbnail',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+Broadcast : 10fe3599-dd7d-5e3e-9a28-23c624c99140, sending data {"type":2,"data":"CurPage","_id":"10fe3599-dd7d-5e3e-9a28-23c624c99140"}
+{ _id: '10fe3599-dd7d-5e3e-9a28-23c624c99140',
+ data: 'CurPage',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+Broadcast : 22b8e67b-50b6-5e6e-9f3d-9810b8d07619, sending data {"type":2,"data":"Thumbnail","_id":"22b8e67b-50b6-5e6e-9f3d-9810b8d07619"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+Broadcast : 7860dbf1-c302-50ac-9f2f-4106c641dd8a, sending data {"type":2,"data":"NumPages","_id":"7860dbf1-c302-50ac-9f2f-4106c641dd8a"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+Broadcast : 59b58624-916f-50a0-8efa-7003a805bfad, sending data {"type":2,"data":"Ink","_id":"59b58624-916f-50a0-8efa-7003a805bfad"}
+{ _id: '59b58624-916f-50a0-8efa-7003a805bfad',
+ data: 'Ink',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+Broadcast : 43606ee9-0825-51a3-98b2-06d36fdfd153, sending data {"type":2,"data":"Cursors","_id":"43606ee9-0825-51a3-98b2-06d36fdfd153"}
+{ _id: '7860dbf1-c302-50ac-9f2f-4106c641dd8a',
+ data: 'NumPages',
+ type: 2 }
+{ _id: '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ data: 'Cursors',
+ type: 2 }
+{ _id: '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ data: 'OptionalRightCollection',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+Broadcast : 9cca7b47-80dc-5c45-8090-15f8e9082020, sending data {"type":2,"data":"Archives","_id":"9cca7b47-80dc-5c45-8090-15f8e9082020"}
+{ _id: '9cca7b47-80dc-5c45-8090-15f8e9082020',
+ data: 'Archives',
+ type: 2 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+Broadcast : 7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5, sending data {"type":2,"data":"OptionalRightCollection","_id":"7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+Broadcast : 1daeded7-02d2-50b9-8da8-1f1f36f7cc67, sending data {"type":2,"data":"Updated","_id":"1daeded7-02d2-50b9-8da8-1f1f36f7cc67"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+Broadcast : d5aa5533-2f9b-5ef2-bd26-787dcbccaca2, sending data {"type":2,"data":"Workspaces","_id":"d5aa5533-2f9b-5ef2-bd26-787dcbccaca2"}
+{ _id: 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ data: 'Workspaces',
+ type: 2 }
+{ _id: '1daeded7-02d2-50b9-8da8-1f1f36f7cc67',
+ data: 'Updated',
+ type: 2 }
+calling update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+called update on data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+Broadcast : f98e47b3-f8ee-4117-86fb-6948460f5cc9, sending data {"type":5,"data":[["d5aa5533-2f9b-5ef2-bd26-787dcbccaca2","eec28478-5239-485f-a4ef-f1b9716fab89"],["7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5","d9c82294-7b0b-4dd9-9cdc-b5f00bc84408"],["77aeae9e-9bc5-5318-b4cf-219d29204f73","66c1ad11-6717-4186-b5bd-ac182f1c4d3e"]],"_id":"f98e47b3-f8ee-4117-86fb-6948460f5cc9"}
+{ _id: 'f98e47b3-f8ee-4117-86fb-6948460f5cc9',
+ data:
+ [ [ 'd5aa5533-2f9b-5ef2-bd26-787dcbccaca2',
+ 'eec28478-5239-485f-a4ef-f1b9716fab89' ],
+ [ '7d590fe5-25ee-55dc-80b6-1d1b11d4f9d5',
+ 'd9c82294-7b0b-4dd9-9cdc-b5f00bc84408' ],
+ [ '77aeae9e-9bc5-5318-b4cf-219d29204f73',
+ '66c1ad11-6717-4186-b5bd-ac182f1c4d3e' ] ],
+ type: 5 }
+S sending : 52b01269-5377-480c-87c8-1155d86cc5ee, receiving Get Field with data {"_id":"52b01269-5377-480c-87c8-1155d86cc5ee","data":3,"type":0}
+S sending : 8dd0dbc7-bce1-4c1f-9d57-46090545a413, receiving Get Field with data {"_id":"8dd0dbc7-bce1-4c1f-9d57-46090545a413","data":1,"type":0}
+S sending : b8c25898-ab6c-438d-a7e2-85b9c40a4fe6, receiving Get Field with data {"_id":"b8c25898-ab6c-438d-a7e2-85b9c40a4fe6","data":54.69876952997183,"type":0}
+S sending : c968815c-6ac5-43ad-9592-e31f4587bf1e, receiving Get Field with data {"_id":"c968815c-6ac5-43ad-9592-e31f4587bf1e","data":-160.75498241782444,"type":0}
+S sending : 5d676023-b2f3-48c2-924f-487aae09368e, receiving Get Field with data {"_id":"5d676023-b2f3-48c2-924f-487aae09368e","data":0.4782969000000001,"type":0}
+S sending : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, receiving Get Field with data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","data":-1,"type":0}
+S sending : 2a2713bd-a3d5-4fc4-bb4b-37f4149bed64, receiving Get Field with data {"_id":"2a2713bd-a3d5-4fc4-bb4b-37f4149bed64","data":-1,"type":0}
+S sending : 62d2960c-ed63-4805-89c8-e01eada0f03e, receiving Get Field with data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","data":-530.7116732305813,"type":0}
+S sending : 9ff46b19-dc58-47d7-9752-340e49e29b16, receiving Get Field with data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","data":-157.61885504589304,"type":0}
+S sending : 483c9a83-c777-47db-a806-4a7c6e298a2d, receiving Get Field with data {"_id":"483c9a83-c777-47db-a806-4a7c6e298a2d","data":200,"type":0}
+S sending : 729e1f77-82c8-42ba-a781-7442f2011a48, receiving Get Field with data {"_id":"729e1f77-82c8-42ba-a781-7442f2011a48","data":200,"type":0}
+S sending : f8cdda5e-254e-403b-bbbb-9e88ace7c7bc, receiving Get Field with data {"_id":"f8cdda5e-254e-403b-bbbb-9e88ace7c7bc","data":-520.2579153241427,"type":0}
+S sending : e878ea28-b836-487a-9b2c-28a31657f37b, receiving Get Field with data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","data":4,"type":0}
+S sending : 93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209, receiving Get Field with data {"_id":"93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209","data":1388.2590499750258,"type":0}
+S sending : 58c571c6-40c9-4d2d-9574-6abe806dd750, receiving Get Field with data {"_id":"58c571c6-40c9-4d2d-9574-6abe806dd750","data":-993.9194875609688,"type":0}
+S sending : 17cda66f-a43a-46bd-a18f-0334e7ed54ba, receiving Get Field with data {"_id":"17cda66f-a43a-46bd-a18f-0334e7ed54ba","data":459.9653478832917,"type":0}
+S sending : 011c260c-6b9a-400f-aed6-6bf3b2e658c6, receiving Get Field with data {"_id":"011c260c-6b9a-400f-aed6-6bf3b2e658c6","data":1,"type":0}
+S sending : 4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc, receiving Get Field with data {"_id":"4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc","data":0,"type":0}
+S sending : bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2, receiving Get Field with data {"_id":"bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2","data":0,"type":0}
+S sending : ba3184a2-b966-432b-b8bd-83ae68ba1c8f, receiving Get Field with data {"_id":"ba3184a2-b966-432b-b8bd-83ae68ba1c8f","data":1,"type":0}
+S sending : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Get Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","data":0,"type":0}
+S sending : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Get Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","data":0,"type":0}
+S sending : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Get Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","data":0,"type":0}
+S sending : 42373536-4991-4b59-aaf5-34559e43adef, receiving Get Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","data":-587.2859013954222,"type":0}
+S sending : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Get Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","data":-151.09092722861064,"type":0}
+S sending : 47f3540c-7ded-4c5a-a35e-67b8770c7564, receiving Get Field with data {"_id":"47f3540c-7ded-4c5a-a35e-67b8770c7564","data":200,"type":0}
+S sending : 3585fbf3-f32c-497f-aae6-9afcba185724, receiving Get Field with data {"_id":"3585fbf3-f32c-497f-aae6-9afcba185724","data":299.5,"type":0}
+S sending : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Get Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","data":-27.43489264412767,"type":0}
+S sending : 9c48c01b-ff87-4633-ab32-620bbe191b04, receiving Get Field with data {"_id":"9c48c01b-ff87-4633-ab32-620bbe191b04","data":200,"type":0}
+S sending : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Get Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","data":1,"type":0}
+S sending : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Get Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","data":-71.62713896644365,"type":0}
+S sending : 4233a5b1-f703-44d8-a4f1-55a230db04e7, receiving Get Field with data {"_id":"4233a5b1-f703-44d8-a4f1-55a230db04e7","data":200,"type":0}
+S sending : 8a50fbb3-768f-4f03-84b5-fc84aaa4f21c, receiving Get Field with data {"_id":"8a50fbb3-768f-4f03-84b5-fc84aaa4f21c","data":200,"type":0}
+S sending : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Get Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","data":2,"type":0}
+S sending : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Get Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","data":299.5,"type":0}
+S sending : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Get Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","data":410.9532106073798,"type":0}
+S sending : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Get Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","data":-51.27364965658168,"type":0}
+S sending : 9d04275c-0bc8-4e43-8142-034824b2deae, receiving Get Field with data {"_id":"9d04275c-0bc8-4e43-8142-034824b2deae","data":200,"type":0}
+S sending : f2822f08-9fd6-4816-ba61-0dc0ea45a0c0, receiving Get Field with data {"_id":"f2822f08-9fd6-4816-ba61-0dc0ea45a0c0","data":200,"type":0}
+S sending : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Get Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","data":3,"type":0}
+S sending : 42d06ec3-2f96-4bf0-af73-568f20eb4ec5, receiving Get Field with data {"_id":"42d06ec3-2f96-4bf0-af73-568f20eb4ec5","data":300,"type":0}
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":300}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 300,
+ type: 0 }
+Incoming : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, receiving Set Field with data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+calling update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+called update on data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+Broadcast : 3a9af79b-cca5-4901-bf0a-1a657e5fdb98, sending data {"_id":"3a9af79b-cca5-4901-bf0a-1a657e5fdb98","type":0,"data":299.5}
+{ _id: '3a9af79b-cca5-4901-bf0a-1a657e5fdb98',
+ data: 299.5,
+ type: 0 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[911.9069178579247,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[911.9069178579247,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[911.9069178579247,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[911.9069178579247,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 911.9069178579247, -165.9818613710438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,11.732023038409807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, 11.732023038409807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-223.3711907812908,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -223.3711907812908, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-773.2388566599532,210.35342326074033]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -773.2388566599532, 210.35342326074033 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1022.7167516661722,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1022.7167516661722, 222.89793274846647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[842.9121156754308,222.89793274846647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 842.9121156754308, 222.89793274846647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,208.26267167945275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,208.26267167945275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,208.26267167945275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,208.26267167945275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 583.6589195957573, 208.26267167945275 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[439.39706048690675,174.8106463788497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[439.39706048690675,174.8106463788497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[439.39706048690675,174.8106463788497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[439.39706048690675,174.8106463788497]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 439.39706048690675, 174.8106463788497 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 370.40225830441307, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[347.40399091024835,124.63260842794512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 347.40399091024835, 124.63260842794512 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[339.0409845850976,116.26960210279435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 339.0409845850976, 116.26960210279435 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[332.76872984123463,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 332.76872984123463, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[316.0427171909331,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 316.0427171909331, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, 118.36035368408193 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 280.4999403090425, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,164.35688847241113]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 263.77392765874094, 164.35688847241113 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,181.08290112271266]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 251.2294181710148, 181.08290112271266 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 247.04791500843942, 183.17365270400046 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[247.04791500843942,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 247.04791500843942, 185.26440428528804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,185.26440428528804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, 185.26440428528804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,183.17365270400046]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 251.2294181710148, 183.17365270400046 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[255.41092133359018,176.90139796013727]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 255.41092133359018, 176.90139796013727 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,149.7216274033974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 280.4999403090425, 149.7216274033974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[299.3167045406316,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 299.3167045406316, 139.26786949695884 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[305.58895928449454,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 305.58895928449454, 137.17711791567126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,132.99561475309588]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 309.7704624470699, 132.99561475309588 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[301.40745612191915,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 301.40745612191915, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[244.9571634271516,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 244.9571634271516, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[109.05831064345182,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 109.05831064345182, 55.6378062454512 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-2.903238030603916]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -116.74286013561868, -2.903238030603916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -332.0902730082506, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-541.1654311370196,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-541.1654311370196,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-541.1654311370196,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-541.1654311370196,-99.0778107698377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -541.1654311370196, -99.0778107698377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-618.5232396446642,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-618.5232396446642,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-618.5232396446642,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-618.5232396446642,-111.62232025756384]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -618.5232396446642, -111.62232025756384 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-649.8845133639795,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-649.8845133639795,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-649.8845133639795,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-649.8845133639795,-109.53156867627627]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -649.8845133639795, -109.53156867627627 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-105.35006551370088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -660.3382712704179, -105.35006551370088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-660.3382712704179,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -660.3382712704179, -96.98705918855012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-656.1567681078425,-67.71653705052245]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -656.1567681078425, -67.71653705052245 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-639.430755457541,-38.446014912494775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-639.430755457541,-38.446014912494775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-639.430755457541,-38.446014912494775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-639.430755457541,-38.446014912494775]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -639.430755457541, -38.446014912494775 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-608.0694817382257,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-608.0694817382257,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-608.0694817382257,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-608.0694817382257,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -608.0694817382257, -7.084741193179298 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-564.1636985311842,9.64127145712223]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -564.1636985311842, 9.64127145712223 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,13.822774619697611]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -503.5319026738412, 13.822774619697611 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-461.7168710480874,5.459768294546848]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -461.7168710480874, 5.459768294546848 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-13.356995937042484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-13.356995937042484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-13.356995937042484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-13.356995937042484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -440.80935523521055, -13.356995937042484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-32.17376016863159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -32.17376016863159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-50.99052440022092]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -426.1740941661967, -50.99052440022092 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-426.1740941661967,-65.62578546923464]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -426.1740941661967, -65.62578546923464 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-428.2648457474844,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -428.2648457474844, -69.80728863181002 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-69.80728863181002]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -440.80935523521055, -69.80728863181002 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -478.4428836983889, -40.53676649378235 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,41.00254517643748]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -503.5319026738412, 41.00254517643748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-513.9856605802797,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -513.9856605802797, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-507.7134058364166,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-507.7134058364166,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-507.7134058364166,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-507.7134058364166,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -507.7134058364166, 137.17711791567126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-503.5319026738412,139.26786949695884]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -503.5319026738412, 139.26786949695884 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-442.90010681649824,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -442.90010681649824, 122.54185684665731 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-392.72206886559366,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -392.72206886559366, 78.63607363961592 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, 38.9117935951499 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-361.3607951462783,-7.084741193179298]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -361.3607951462783, -7.084741193179298 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -371.81455305271675, -40.53676649378235 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-57.26277914408388]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-57.26277914408388]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-57.26277914408388]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-384.3590625404429,-57.26277914408388]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -384.3590625404429, -57.26277914408388 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -403.1758267720321, -61.44428230665926 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-417.81108784104595,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -417.81108784104595, -61.44428230665926 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-61.44428230665926]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.9925910036213, -61.44428230665926 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -424.083342584909, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-421.9925910036213,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -421.9925910036213, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-359.2700435649906,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -359.2700435649906, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -265.1862224070446, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-59.353530725371684]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -64.47407060342641, -59.353530725371684 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-63.535033887947066]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-63.535033887947066]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-63.535033887947066]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[280.4999403090425,-63.535033887947066]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 280.4999403090425, -63.535033887947066 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,-107.44081709498846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 773.9173134929371, -107.44081709498846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-884.0486904682007,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-884.0486904682007,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-884.0486904682007,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-884.0486904682007,-174.34486769619457]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -884.0486904682007, -174.34486769619457 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-488.8966416048274,-276.7916951792913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -488.8966416048274, -276.7916951792913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[355.7669972353991,-487.957604889348]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 355.7669972353991, -487.957604889348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[630.4069775488824,180.895387572029]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[630.4069775488824,180.895387572029]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[630.4069775488824,180.895387572029]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[630.4069775488824,180.895387572029]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 630.4069775488824, 180.895387572029 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,-582.041426047294]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 805.2785872122525, -582.041426047294 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[876.3641409760338,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[876.3641409760338,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[876.3641409760338,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[876.3641409760338,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 876.3641409760338, -377.1477710811005 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 638.0184607092373, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[456.1230731372083,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 456.1230731372083, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[460.30457629978366,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 460.30457629978366, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 477.0305889500852, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[510.48261425068824,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 510.48261425068824, -400.14603847526496 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.39186266940044, -408.5090448004157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-416.8720511255665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-416.8720511255665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-416.8720511255665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-416.8720511255665]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 489.57509843781133, -416.8720511255665 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[435.21555732433137,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 435.21555732433137, -433.598063775868 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[382.9467677921392,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 382.9467677921392, -450.32407642616954 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[357.8577488166869,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 357.8577488166869, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,-458.6870827513203]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 336.95023300381, -458.6870827513203 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[326.49647509737144,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[326.49647509737144,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[326.49647509737144,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[326.49647509737144,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 326.49647509737144, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 313.9519656096453, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[290.9536982154808,-460.777834332608]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 290.9536982154808, -460.777834332608 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[211.50513812654856,-450.32407642616954]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 211.50513812654856, -450.32407642616954 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-448.23332484488185]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-448.23332484488185]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-448.23332484488185]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-448.23332484488185]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 175.96236124465793, -448.23332484488185 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-444.05182168230647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-444.05182168230647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-444.05182168230647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-444.05182168230647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 60.97102427383493, -444.05182168230647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[6.611483160355078,-437.7795669384434]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 6.611483160355078, -437.7795669384434 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-31.022045302823358,-441.9610701010188]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -31.022045302823358, -441.9610701010188 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-45.657306371837194,-454.5055795887449]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -45.657306371837194, -454.5055795887449 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.838809534412576,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.838809534412576,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.838809534412576,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.838809534412576,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -49.838809534412576, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.11106427827565,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.11106427827565,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.11106427827565,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-56.11106427827565,-481.6853501454849]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -56.11106427827565, -481.6853501454849 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-502.5928659583618]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-502.5928659583618]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-502.5928659583618]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-64.47407060342641,-502.5928659583618]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -64.47407060342641, -502.5928659583618 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-66.5648221847141,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -66.5648221847141, -504.6836175396495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-515.137375446088]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.83707692857718, -515.137375446088 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.83707692857718,-521.409630189951]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.83707692857718, -521.409630189951 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.01858009115256,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.01858009115256,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.83707692857718, -521.409630189951 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.01858009115256,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-77.01858009115256,-527.6818849338141]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-253.98094133581037,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -253.98094133581037, 228.98267394164577 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -79.10933167244025, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.07169291709806,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.07169291709806,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.07169291709806,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-256.07169291709806,222.7104191977827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -256.07169291709806, 222.7104191977827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-81.20008325372794,-540.2263944215402]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -81.20008325372794, -540.2263944215402 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.5254508235365,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.5254508235365,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.5254508235365,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-266.5254508235365,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -266.5254508235365, 212.25666129134424 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -91.6538411601664, -550.6801523279787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.06996031126266,195.53064864104272]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.06996031126266,195.53064864104272]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.06996031126266,195.53064864104272]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.06996031126266,195.53064864104272]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.06996031126266, 195.53064864104272 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-104.19835064789254,-567.4061649782802]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -104.19835064789254, -567.4061649782802 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.6144697989888,176.7138844094536]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.6144697989888,176.7138844094536]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.6144697989888,176.7138844094536]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-291.6144697989888,176.7138844094536]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -291.6144697989888, 176.7138844094536 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-116.74286013561868,-586.2229292098693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -116.74286013561868, -586.2229292098693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.431234030578,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.431234030578,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.431234030578,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-310.431234030578,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -310.431234030578, 162.07862334043978 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-135.5596243672079,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-135.5596243672079,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-135.5596243672079,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-135.5596243672079,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -135.5596243672079, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-339.7017561686056,139.08035594627518]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-339.7017561686056,139.08035594627518]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-339.7017561686056,139.08035594627518]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-339.7017561686056,139.08035594627518]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -339.7017561686056, 139.08035594627518 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-164.83014650523546,-623.8564576730478]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -164.83014650523546, -623.8564576730478 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-368.97227830663326,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-368.97227830663326,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-368.97227830663326,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-368.97227830663326,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -368.97227830663326, 99.35607590180905 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-194.10066864326313,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -194.10066864326313, -663.5807377175139 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.06129728208555,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.06129728208555,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.06129728208555,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-394.06129728208555,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -394.06129728208555, 74.26705692635676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-219.18968761871542,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -688.6697566929662 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.21377334183921,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.21377334183921,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.21377334183921,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[113.21377334183921,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 113.21377334183921, 249.2254098183683 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.1433858341961,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.1433858341961,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.1433858341961,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-511.1433858341961,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -511.1433858341961, 15.72601265030147 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-336.271776170826,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-336.271776170826,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -219.18968761871542, -688.6697566929662 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-336.271776170826,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-336.271776170826,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.49122590320849,239.81702770257363]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.49122590320849,239.81702770257363]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.49122590320849,239.81702770257363]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.49122590320849,239.81702770257363]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.49122590320849, 239.81702770257363 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-552.9584174599499,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-552.9584174599499,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-552.9584174599499,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-552.9584174599499,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -552.9584174599499, 9.453757906438398 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-378.0868077965798,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -378.0868077965798, -753.4830557128846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.721570068098572,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.721570068098572,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.721570068098572,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.721570068098572,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 9.721570068098572, 227.27251821484748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.1381880166899,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.1381880166899,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.1381880166899,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-580.1381880166899,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -580.1381880166899, 1.090751581287634 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -405.2665783533198, -761.8460620380354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,227.27251821484748]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 3.4493153242354992, 227.27251821484748 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -580.1381880166899, 1.090751581287634 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-761.8460620380354]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,1.090751581287634]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -409.4480815158952, -761.8460620380354 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,224.136390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,224.136390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,224.136390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,224.136390842916]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.31318795230390606, 224.136390842916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-1.0000000000000568]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-1.0000000000000568]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-1.0000000000000568]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-1.0000000000000568]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -586.410442760553, -1.0000000000000568 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-763.936813619323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -763.936813619323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,221.0002634709844]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,221.0002634709844]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,221.0002634709844]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,221.0002634709844]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.31318795230390606, 221.0002634709844 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-3.0907515812877477]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-3.0907515812877477]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-3.0907515812877477]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-3.0907515812877477]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -586.410442760553, -3.0907515812877477 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-766.0275652006108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-766.0275652006108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-766.0275652006108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-766.0275652006108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -766.0275652006108 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.31318795230390606, 214.72800872712133 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -586.410442760553, -7.2722547438631295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -766.0275652006108 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[0.31318795230390606,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 0.31318795230390606, 211.59188135518986 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-411.5388330971829,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -411.5388330971829, -772.2998199444737 ] ],
+ type: 14 }
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -586.410442760553, -7.2722547438631295 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-586.410442760553,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[3.4493153242354992,211.59188135518986]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 3.4493153242354992, 211.59188135518986 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-584.3196911792653,-9.36300632515082]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -584.3196911792653, -9.36300632515082 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-409.4480815158952,-772.2998199444737]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -409.4480815158952, -772.2998199444737 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.857697440030051,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.857697440030051,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.857697440030051,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[12.857697440030051,214.72800872712133]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 12.857697440030051, 214.72800872712133 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.0474364354022,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.0474364354022,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.0474364354022,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.0474364354022,-7.2722547438631295]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -578.0474364354022, -7.2722547438631295 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-403.1758267720321,-770.2090683631861]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -403.1758267720321, -770.2090683631861 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.94671641548234,242.95315507450522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.94671641548234,242.95315507450522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.94671641548234,242.95315507450522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[37.94671641548234,242.95315507450522]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 37.94671641548234, 242.95315507450522 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-561.3214237851007,11.544509487726089]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-561.3214237851007,11.544509487726089]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-561.3214237851007,11.544509487726089]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-561.3214237851007,11.544509487726089]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -561.3214237851007, 11.544509487726089 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -403.1758267720321, -770.2090683631861 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-386.4498141217306,-751.3923041315968]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.3079901347977,283.72281090961513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.3079901347977,283.72281090961513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.3079901347977,283.72281090961513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.3079901347977,283.72281090961513]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.3079901347977, 283.72281090961513 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-540.4139079722238,38.72428004446607]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-540.4139079722238,38.72428004446607]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-540.4139079722238,38.72428004446607]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-540.4139079722238,38.72428004446607]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -540.4139079722238, 38.72428004446607 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-365.5422983088537,-724.2125335748569]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -365.5422983088537, -724.2125335748569 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-521.5971437406346,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-521.5971437406346,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-521.5971437406346,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-521.5971437406346,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -521.5971437406346, 70.08555376378138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-346.72553407726446,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -346.72553407726446, -692.8512598555416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.68962792775767,93.08382115794598]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.68962792775767,93.08382115794598]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.68962792775767,93.08382115794598]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-500.68962792775767,93.08382115794598]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -500.68962792775767, 93.08382115794598 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-325.81801826438755,-669.852992461377]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.81801826438755, -669.852992461377 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,111.9005853895352]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,111.9005853895352]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,111.9005853895352]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-481.87286369616857,111.9005853895352]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -481.87286369616857, 111.9005853895352 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -325.81801826438755, -669.852992461377 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-307.00125403279844,-651.0362282297878]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -469.3283542084424, 118.17284013339827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -644.7639734859247 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-469.3283542084424,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -469.3283542084424, 118.17284013339827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-294.4567445450723,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -294.4567445450723, -644.7639734859247 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,118.17284013339827]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.23760262715473, 118.17284013339827 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-644.7639734859247]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -644.7639734859247 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.23760262715473, 113.99133697082289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -648.9454766485001 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-467.23760262715473,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -467.23760262715473, 105.62833064567212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -292.3659929637846, -648.9454766485001 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-292.3659929637846,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-471.4191057897301,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-471.4191057897301,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-471.4191057897301,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-471.4191057897301,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -471.4191057897301, 78.44856008893214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-296.54749612636,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -296.54749612636, -684.4882535303908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.6006089523055,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.6006089523055,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.6006089523055,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-475.6006089523055,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -475.6006089523055, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-300.72899928893537,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-300.72899928893537,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-300.72899928893537,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-300.72899928893537,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -300.72899928893537, -713.7587756684184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.2556839208122,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.2556839208122,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.2556839208122,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.2556839208122,249.2254098183683]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 160.2556839208122, 249.2254098183683 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-479.7821121148809,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-479.7821121148809,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-479.7821121148809,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-479.7821121148809,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -479.7821121148809, 15.72601265030147 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-304.91050245151075,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -304.91050245151075, -747.2108009690214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.57504706115458,217.86413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.57504706115458,217.86413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.57504706115458,217.86413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.57504706115458,217.86413609905293]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.57504706115458, 217.86413609905293 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,-5.181503162575439]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,-5.181503162575439]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,-5.181503162575439]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-490.23587002131933,-5.181503162575439]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -490.23587002131933, -5.181503162575439 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -304.91050245151075, -747.2108009690214 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-768.1183167818983]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3027923172915,186.50286237973756]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3027923172915,186.50286237973756]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3027923172915,186.50286237973756]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3027923172915,186.50286237973756]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3027923172915, 186.50286237973756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-494.4173731838947,-26.089018975452348]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-494.4173731838947,-26.089018975452348]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-494.4173731838947,-26.089018975452348]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-494.4173731838947,-26.089018975452348]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -494.4173731838947, -26.089018975452348 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-789.0258325947752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-789.0258325947752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-789.0258325947752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-319.5457635205246,-789.0258325947752]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -319.5457635205246, -789.0258325947752 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,158.2777160323538]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,158.2777160323538]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,158.2777160323538]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,158.2777160323538]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.75828282956536, 158.2777160323538 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-44.90578320704151]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-44.90578320704151]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-44.90578320704151]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-44.90578320704151]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -502.78037950904536, -44.90578320704151 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-807.8425968263645]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.90876984567524, -807.8425968263645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.62215545763377,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.62215545763377,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.62215545763377,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[122.62215545763377,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 122.62215545763377, 148.86933391655913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-504.87113109033305,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-504.87113109033305,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-504.87113109033305,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-504.87113109033305,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -504.87113109033305, -51.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.90876984567524, -807.8425968263645 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-329.99952142696293,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,145.73320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,145.73320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,145.73320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,145.73320654462765]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.48602808570229, 145.73320654462765 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-53.26878953219227]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-53.26878953219227]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-53.26878953219227]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-53.26878953219227]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -506.96188267162074, -53.26878953219227 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-816.2056031515152]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -332.0902730082506, -816.2056031515152 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.48602808570229,148.86933391655913]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.48602808570229, 148.86933391655913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-506.96188267162074,-51.17803795090458]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -506.96188267162074, -51.17803795090458 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-332.0902730082506,-814.1148515702275]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -332.0902730082506, -814.1148515702275 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621687]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.75828282956536, 164.54997077621687 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-40.72428004446613]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-40.72428004446613]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-40.72428004446613]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-502.78037950904536,-40.72428004446613]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -502.78037950904536, -40.72428004446613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-803.6610936637891]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-803.6610936637891]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-803.6610936637891]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-327.90876984567524,-803.6610936637891]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -327.90876984567524, -803.6610936637891 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+Broadcast : 21840dfa-8d74-465d-86ca-09b8e949a5a0, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{ _id: '21840dfa-8d74-465d-86ca-09b8e949a5a0',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":-1}
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ 'd56974e0-5327-4f68-9268-128975957d7b' ],
+ type: 1 }
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-176.15936304654326}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-176.15936304654326}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-176.15936304654326}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-176.15936304654326}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":-176.15936304654326}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: -176.15936304654326,
+ type: 0 }
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-238.7149800920099}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-238.7149800920099}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-238.7149800920099}
+Incoming : 16e78e95-49dd-4da5-bc98-f1e0a8d2655c, receiving Set Field with data {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","type":0,"data":1}
+calling update on data {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","type":0,"data":1}
+called update on data {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","16e78e95-49dd-4da5-bc98-f1e0a8d2655c"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","16e78e95-49dd-4da5-bc98-f1e0a8d2655c"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Incoming : e878ea28-b836-487a-9b2c-28a31657f37b, receiving Set Field with data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":2}
+calling update on data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":2}
+called update on data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":2}
+Incoming : e3b590f8-23f0-4feb-831d-cbc9a516828a, receiving Set Field with data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":3}
+calling update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":3}
+called update on data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":3}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.03053757342855,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.03053757342855,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-87.47233799759101,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-87.47233799759101,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-238.7149800920099}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-238.7149800920099}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c"}],"ok":1}
+Wrote {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","type":0,"data":1}
+Broadcast : 16e78e95-49dd-4da5-bc98-f1e0a8d2655c, sending data {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","type":0,"data":1}
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -238.7149800920099,
+ type: 0 }
+{ _id: '16e78e95-49dd-4da5-bc98-f1e0a8d2655c', data: 1, type: 0 }
+{ _id: 'd56974e0-5327-4f68-9268-128975957d7b',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ 'a9ab3cae-9c8f-4d45-a84f-1c748c805792' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ 'f8cdda5e-254e-403b-bbbb-9e88ace7c7bc' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '58c571c6-40c9-4d2d-9574-6abe806dd750' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '17cda66f-a43a-46bd-a18f-0334e7ed54ba' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ 'bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '2a2713bd-a3d5-4fc4-bb4b-37f4149bed64' ],
+ [ '43606ee9-0825-51a3-98b2-06d36fdfd153',
+ '6ea228be-7e01-4131-a9a9-b5b61b29f342' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":2}
+Broadcast : e878ea28-b836-487a-9b2c-28a31657f37b, sending data {"_id":"e878ea28-b836-487a-9b2c-28a31657f37b","type":0,"data":2}
+{ _id: 'e878ea28-b836-487a-9b2c-28a31657f37b', data: 2, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","16e78e95-49dd-4da5-bc98-f1e0a8d2655c"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+Broadcast : d56974e0-5327-4f68-9268-128975957d7b, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","a9ab3cae-9c8f-4d45-a84f-1c748c805792"],["7b71638c-05b8-5573-9aa5-c737c9406a86","f8cdda5e-254e-403b-bbbb-9e88ace7c7bc"],["13a3cc01-c286-57e1-8746-baa3ced34e76","58c571c6-40c9-4d2d-9574-6abe806dd750"],["5c207bd2-0390-5c35-8972-06d185f387fb","93ea1b7f-f490-4d51-b5f4-4e3a1d0ea209"],["2a238eef-0bbb-5b78-b173-37b574fec97f","17cda66f-a43a-46bd-a18f-0334e7ed54ba"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4f5acfac-311d-4e4c-af2a-6d9f7cd54dfc"],["048d25ac-b841-5728-a599-e3a432137881","bbb49dd6-6825-4ab8-8fb7-fbe5e517d4c2"],["911954a3-bebc-5b20-81f3-3091a2e11907","2a2713bd-a3d5-4fc4-bb4b-37f4149bed64"],["43606ee9-0825-51a3-98b2-06d36fdfd153","6ea228be-7e01-4131-a9a9-b5b61b29f342"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","16e78e95-49dd-4da5-bc98-f1e0a8d2655c"]],"_id":"d56974e0-5327-4f68-9268-128975957d7b"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":3}
+Broadcast : e3b590f8-23f0-4feb-831d-cbc9a516828a, sending data {"_id":"e3b590f8-23f0-4feb-831d-cbc9a516828a","type":0,"data":3}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.75828282956536,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.75828282956536, 164.54997077621692 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'e3b590f8-23f0-4feb-831d-cbc9a516828a', data: 3, type: 0 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -91.6538411601664, -128.34833290786537 ] ],
+ type: 14 }
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.75828282956536, 164.54997077621692 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-87.47233799759101,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-87.47233799759101,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -87.47233799759101, -128.34833290786537 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.03053757342855,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.03053757342855,164.54997077621692]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.16666494536003,155.14158866042249]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.16666494536003,155.14158866042249]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.16666494536003,155.14158866042249]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.16666494536003,155.14158866042249]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 135.16666494536003, 155.14158866042249 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-85.38158641630332,-134.62058765172833]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -85.38158641630332, -134.62058765172833 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.5750470611547,139.46095180076486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.5750470611547,139.46095180076486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.5750470611547,139.46095180076486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[144.5750470611547,139.46095180076486]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 144.5750470611547, 139.46095180076486 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-79.10933167244025,-145.0743455581669]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -79.10933167244025, -145.0743455581669 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.25568392081232,104.9635507095179]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.25568392081232,104.9635507095179]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.25568392081232,104.9635507095179]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[160.25568392081232,104.9635507095179]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 160.25568392081232, 104.9635507095179 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-68.6555737660018,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -68.6555737660018, -168.07261295233138 ] ],
+ type: 14 }
+S sending : 16e78e95-49dd-4da5-bc98-f1e0a8d2655c, receiving Get Field with data {"_id":"16e78e95-49dd-4da5-bc98-f1e0a8d2655c","data":1,"type":0}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[185.3447028962646,45.377130642818656]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[185.3447028962646,45.377130642818656]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[185.3447028962646,45.377130642818656]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+Broadcast : f7e01e7b-9646-44b8-8e8a-fa21569b07a0, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[185.3447028962646,45.377130642818656]],"_id":"f7e01e7b-9646-44b8-8e8a-fa21569b07a0"}
+{ _id: 'f7e01e7b-9646-44b8-8e8a-fa21569b07a0',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 185.3447028962646, 45.377130642818656 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -68.6555737660018, -168.07261295233138 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-51.92956111570027,-207.79689299679762]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-26.840542140247976,-272.6101920167159]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -26.840542140247976, -272.6101920167159 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[4.520731579067387,-337.42349103663435]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 4.520731579067387, -337.42349103663435 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[46.33576320482109,-408.5090448004157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 46.33576320482109, -408.5090448004157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-477.5038469829095]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.60628534284876, -477.5038469829095 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,228.98267394164577]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.08555376378126, 228.98267394164577 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-533.9541396776772]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.78605589958886, -533.9541396776772 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,172.53238124687823]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,172.53238124687823]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,172.53238124687823]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-42.81503162575382,172.53238124687823]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -42.81503162575382, 172.53238124687823 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,-590.4044323724447]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 132.0565780376163, -590.4044323724447 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -32.36127371931525, 116.08208855211058 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 132.0565780376163, -590.4044323724447 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -32.36127371931525, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 142.51033594405487, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -34.452025300603054, 82.63006325150752 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 140.41958436276707, -680.3067503678154 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,80.53931167021983]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,80.53931167021983]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,80.53931167021983]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,80.53931167021983]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -36.54277688189063, 80.53931167021983 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-682.3975019491031]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -682.3975019491031 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -36.54277688189063, 78.44856008893214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -684.4882535303908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,74.26705692635676]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -36.54277688189063, 74.26705692635676 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -684.4882535303908 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-688.6697566929662]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -36.54277688189063, 70.08555376378138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -692.8512598555416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-38.633528463178436,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -38.633528463178436, 59.63179585734292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.2380812001917,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.2380812001917,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.2380812001917,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[136.2380812001917,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 136.2380812001917, -703.30501776198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,47.087286369616834]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,47.087286369616834]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,47.087286369616834]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,47.087286369616834]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -44.905783207041395, 47.087286369616834 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-715.8495272497062]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 129.96582645632873, -715.8495272497062 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-46.9965347883292,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -46.9965347883292, 34.54277688189069 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[127.87507487504092,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 127.87507487504092, -728.3940367374323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,34.54277688189069]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -49.08728636961678, 34.54277688189069 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 127.87507487504092, -728.3940367374323 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-49.08728636961678,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -49.08728636961678, 30.361273719315307 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.78432329375335, -732.5755399000077 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,24.089018975452234]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,24.089018975452234]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,24.089018975452234]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-44.905783207041395,24.089018975452234]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -44.905783207041395, 24.089018975452234 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,-738.8477946438707]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 129.96582645632873, -738.8477946438707 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-32.36127371931525,15.72601265030147]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -32.36127371931525, 15.72601265030147 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[142.51033594405487,-747.2108009690214]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 142.51033594405487, -747.2108009690214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.97170210653394,117.48521793739167]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.97170210653394,117.48521793739167]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.97170210653394,117.48521793739167]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[22.97170210653394,117.48521793739167]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 22.97170210653394, 117.48521793739167 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.45375790643834,7.363006325150707]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.45375790643834,7.363006325150707]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.45375790643834,7.363006325150707]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-11.45375790643834,7.363006325150707]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -11.45375790643834, 7.363006325150707 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 142.51033594405487, -747.2108009690214 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,-755.5738072941722]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.33297582584919,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.33297582584919,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.33297582584919,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[54.33297582584919,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 54.33297582584919, 114.34909056546007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.453757906438568,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.453757906438568,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.453757906438568,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[9.453757906438568,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 9.453757906438568, 5.272254743863016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, -757.66455887546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.741357941643855,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.741357941643855,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.741357941643855,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.741357941643855,114.34909056546007]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 63.741357941643855, 114.34909056546007 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,5.272254743863016]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 15.726012650301527, 5.272254743863016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-757.66455887546]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -757.66455887546 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.14974005743852,120.62134530932315]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.14974005743852,120.62134530932315]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.14974005743852,120.62134530932315]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[73.14974005743852,120.62134530932315]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 73.14974005743852, 120.62134530932315 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[21.998267394164714,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[21.998267394164714,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[21.998267394164714,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[21.998267394164714,9.453757906438398]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 21.998267394164714, 9.453757906438398 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[196.86987705753484,-753.4830557128846]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 196.86987705753484, -753.4830557128846 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.42199480130148,133.1658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.42199480130148,133.1658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.42199480130148,133.1658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[79.42199480130148,133.1658547970493]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 79.42199480130148, 133.1658547970493 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[26.179770556740095,17.81676423158916]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[26.179770556740095,17.81676423158916]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[26.179770556740095,17.81676423158916]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[26.179770556740095,17.81676423158916]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 26.179770556740095, 17.81676423158916 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,-745.1200493877338]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 201.05138022011022, -745.1200493877338 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,148.84649165670692]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,148.84649165670692]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,148.84649165670692]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,148.84649165670692]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 82.55812217323296, 148.84649165670692 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,28.270522138027616]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,28.270522138027616]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,28.270522138027616]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,28.270522138027616]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 28.270522138027673, 28.270522138027616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-734.6662914812953]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -734.6662914812953 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,167.66325588829613]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,167.66325588829613]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,167.66325588829613]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,167.66325588829613]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 82.55812217323296, 167.66325588829613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,40.81503162575376]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,40.81503162575376]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,40.81503162575376]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,40.81503162575376]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 28.270522138027673, 40.81503162575376 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-722.1217819935691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-722.1217819935691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-722.1217819935691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-722.1217819935691]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -722.1217819935691 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[82.55812217323296,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 82.55812217323296, 180.20776537602228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[28.270522138027673,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 28.270522138027673, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 203.1421318013978, -722.1217819935691 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[203.1421318013978,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,192.75227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,192.75227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,192.75227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,192.75227486374843]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 70.01361268550681, 192.75227486374843 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,57.54104427605523]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,57.54104427605523]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,57.54104427605523]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,57.54104427605523]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 19.90751581287691, 57.54104427605523 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-705.3957693432677]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 194.77912547624703, -705.3957693432677 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.788466338123044,220.9774212111323]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.788466338123044,220.9774212111323]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.788466338123044,220.9774212111323]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[41.788466338123044,220.9774212111323]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 41.788466338123044, 220.9774212111323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1.0907515812878046,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1.0907515812878046,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1.0907515812878046,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1.0907515812878046,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1.0907515812878046, 76.35780850764445 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 194.77912547624703, -705.3957693432677 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[175.96236124465793,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-28.179770556739868,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -28.179770556739868, 82.63006325150752 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.69183910663025, -680.3067503678154 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-53.26878953219216,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -53.26878953219216, 90.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.69183910663025, -680.3067503678154 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-69.99480218249369,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-69.99480218249369,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-69.99480218249369,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-69.99480218249369,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -69.99480218249369, 90.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.87680748087644,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.87680748087644, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-72.08555376378126,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -72.08555376378126, 90.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[102.78605589958886,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 102.78605589958886, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-78.35780850764445,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -78.35780850764445, 90.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[96.51380115572567,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 96.51380115572567, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893203,88.9023179953706]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893203,88.9023179953706]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893203,88.9023179953706]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-80.44856008893203,88.9023179953706]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -80.44856008893203, 88.9023179953706 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-674.0344956239524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-674.0344956239524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-674.0344956239524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-674.0344956239524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.4230495744381, -674.0344956239524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,86.8115664140829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,86.8115664140829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,86.8115664140829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-86.72081483279521,86.8115664140829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -86.72081483279521, 86.8115664140829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[88.15079483057491,-676.12524720524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[88.15079483057491,-676.12524720524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[88.15079483057491,-676.12524720524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[88.15079483057491,-676.12524720524]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 88.15079483057491, -676.12524720524 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-92.99306957665817,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-92.99306957665817,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-92.99306957665817,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-92.99306957665817,82.63006325150752]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -92.99306957665817, 82.63006325150752 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[81.87854008671195,-680.3067503678154]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 81.87854008671195, -680.3067503678154 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-99.26532432052136,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-99.26532432052136,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-99.26532432052136,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-99.26532432052136,76.35780850764445]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -99.26532432052136, 76.35780850764445 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[75.60628534284876,-686.5790051116785]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 75.60628534284876, -686.5790051116785 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -105.53757906438443, 72.17630534506907 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 69.33403059898569, -690.7605082742539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-109.71908222695981,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-109.71908222695981,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-109.71908222695981,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-109.71908222695981,72.17630534506907]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -109.71908222695981, 72.17630534506907 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[65.15252743641031,-690.7605082742539]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 65.15252743641031, -690.7605082742539 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-103.44682748309674,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-103.44682748309674,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-103.44682748309674,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-103.44682748309674,70.08555376378138]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -103.44682748309674, 70.08555376378138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[71.42478218027338,-692.8512598555416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 71.42478218027338, -692.8512598555416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.53931167021983,61.72254743863061]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.53931167021983,61.72254743863061]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.53931167021983,61.72254743863061]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-82.53931167021983,61.72254743863061]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -82.53931167021983, 61.72254743863061 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[92.33229799315029,-701.2142661806923]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 92.33229799315029, -701.2142661806923 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-36.54277688189063,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -36.54277688189063, 59.63179585734292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, -703.30501776198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[32.380084222328605,189.61614749181695]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[32.380084222328605,189.61614749181695]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[32.380084222328605,189.61614749181695]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[32.380084222328605,189.61614749181695]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 32.380084222328605, 189.61614749181695 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.181503162575382,55.45029269476754]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.181503162575382,55.45029269476754]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.181503162575382,55.45029269476754]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-5.181503162575382,55.45029269476754]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -5.181503162575382, 55.45029269476754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,-707.4865209245554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, -707.4865209245554 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[70.01361268550681,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 70.01361268550681, 180.20776537602228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[19.90751581287691,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 19.90751581287691, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, -707.4865209245554 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[194.77912547624703,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[85.69424954516467,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[85.69424954516467,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[85.69424954516467,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[85.69424954516467,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 85.69424954516467, 180.20776537602228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.361273719315477,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.361273719315477,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.361273719315477,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[30.361273719315477,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 30.361273719315477, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[205.2328833826856,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 205.2328833826856, -713.7587756684184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.96650428902763,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.96650428902763,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.96650428902763,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[91.96650428902763,180.20776537602228]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 91.96650428902763, 180.20776537602228 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[34.54277688189086,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 34.54277688189086, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.41438654526098, -713.7587756684184 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289081,183.34389274795387]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289081,183.34389274795387]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289081,183.34389274795387]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289081,183.34389274795387]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 98.23875903289081, 183.34389274795387 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,51.26878953219216]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,51.26878953219216]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,51.26878953219216]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[38.72428004446624,51.26878953219216]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 38.72428004446624, 51.26878953219216 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.41438654526098, -713.7587756684184 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[213.59588970783636,-711.6680240871308]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+called update on data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+Broadcast : 21840dfa-8d74-465d-86ca-09b8e949a5a0, sending data {"type":1,"data":["80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{ _id: '21840dfa-8d74-465d-86ca-09b8e949a5a0',
+ data: [ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 672c99e2-ba2a-419b-9f06-903d9aeba563, receiving Set Field with data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+calling update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+called update on data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+Broadcast : 672c99e2-ba2a-419b-9f06-903d9aeba563, sending data {"_id":"672c99e2-ba2a-419b-9f06-903d9aeba563","type":0,"data":-1}
+{ _id: '672c99e2-ba2a-419b-9f06-903d9aeba563',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, receiving Set Field with data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":302.15233403453146}
+calling update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":302.15233403453146}
+called update on data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":302.15233403453146}
+{ _id: 'e45192a6-2f99-48aa-ac1f-06cc5fd219f9',
+ data: -27.43489264412767,
+ type: 0 }
+Incoming : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, receiving Set Field with data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-295.15004461354283}
+calling update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-295.15004461354283}
+called update on data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-295.15004461354283}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-295.15004461354283}
+Broadcast : 82d314ed-e4d4-46e4-ab5c-6fdd8002ea19, sending data {"_id":"82d314ed-e4d4-46e4-ab5c-6fdd8002ea19","type":0,"data":-295.15004461354283}
+Incoming : cc496f45-ce13-4ce5-859c-215d8634bc61, receiving Set Field with data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":4}
+calling update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":4}
+called update on data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":4}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289104,183.343892747954]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289104,183.343892747954]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ 'd56974e0-5327-4f68-9268-128975957d7b',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480' ],
+ type: 1 }
+{ _id: '82d314ed-e4d4-46e4-ab5c-6fdd8002ea19',
+ data: -295.15004461354283,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":302.15233403453146}
+Broadcast : e45192a6-2f99-48aa-ac1f-06cc5fd219f9, sending data {"_id":"e45192a6-2f99-48aa-ac1f-06cc5fd219f9","type":0,"data":302.15233403453146}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":4}
+Broadcast : cc496f45-ce13-4ce5-859c-215d8634bc61, sending data {"_id":"cc496f45-ce13-4ce5-859c-215d8634bc61","type":0,"data":4}
+{ _id: 'cc496f45-ce13-4ce5-859c-215d8634bc61', data: 4, type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,-172.25411611490676]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 98.23875903289081, 183.34389274795387 ] ],
+ type: 14 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 368.31150672312526, -172.25411611490676 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289104,183.343892747954]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[98.23875903289104,183.343892747954]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.37488640482252,192.75227486374865]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.37488640482252,192.75227486374865]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.37488640482252,192.75227486374865]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[101.37488640482252,192.75227486374865]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 101.37488640482252, 192.75227486374865 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,-165.9818613710438]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 370.40225830441307, -165.9818613710438 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.511013776754,186.4800201198857]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.511013776754,186.4800201198857]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.511013776754,186.4800201198857]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[104.511013776754,186.4800201198857]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 104.511013776754, 186.4800201198857 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[372.49300988570064,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 372.49300988570064, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.78326852061718,126.89360005318645]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.78326852061718,126.89360005318645]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.78326852061718,126.89360005318645]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[110.78326852061718,126.89360005318645]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 110.78326852061718, 126.89360005318645 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[376.674513048276,-209.88764457808531]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 376.674513048276, -209.88764457808531 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.87228749606925,64.17105261455572]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.87228749606925,64.17105261455572]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.87228749606925,64.17105261455572]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+Broadcast : 2fffd14d-dbbb-442d-858d-6dab6f4d4d8a, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[135.87228749606925,64.17105261455572]],"_id":"2fffd14d-dbbb-442d-858d-6dab6f4d4d8a"}
+{ _id: '2fffd14d-dbbb-442d-858d-6dab6f4d4d8a',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 135.87228749606925, 64.17105261455572 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[393.40052569857755,-251.70267620383902]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 393.40052569857755, -251.70267620383902 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[420.58029625531765,-297.6992109921682]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 420.58029625531765, -297.6992109921682 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[472.8490857875098,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 472.8490857875098, -352.0587521056482 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[537.6623848074281,-421.05355428814187]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 537.6623848074281, -421.05355428814187 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[564.8421553641682,-469.14084065775876]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 564.8421553641682, -469.14084065775876 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[583.6589195957573,-517.2281270273756]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 583.6589195957573, -517.2281270273756 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,212.25666129134424]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 410.878061513675, 212.25666129134424 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-550.6801523279787]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 585.7496711770451, -550.6801523279787 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,191.34914547846734]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,191.34914547846734]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,191.34914547846734]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[410.878061513675,191.34914547846734]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 410.878061513675, 191.34914547846734 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[585.7496711770451,-571.5876681408556]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 585.7496711770451, -571.5876681408556 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[400.4243036072364,174.62313282816592]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[400.4243036072364,174.62313282816592]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[575.2959132706065,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[575.2959132706065,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 410.878061513675, 191.34914547846734 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[400.4243036072364,174.62313282816592]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[400.4243036072364,174.62313282816592]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[575.2959132706065,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[575.2959132706065,-588.313680791157]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 575.2959132706065, -588.313680791157 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[371.15378146920875,145.35261069013825]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[371.15378146920875,145.35261069013825]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[371.15378146920875,145.35261069013825]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[371.15378146920875,145.35261069013825]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 371.15378146920875, 145.35261069013825 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 575.2959132706065, -588.313680791157 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[546.0253911325789,-617.5842029291847]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,124.44509487726134]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,124.44509487726134]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,124.44509487726134]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[341.8832593311811,124.44509487726134]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 341.8832593311811, 124.44509487726134 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[516.7548689945512,-638.4917187420616]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 516.7548689945512, -638.4917187420616 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[331.42950142474274,120.26359171468596]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[331.42950142474274,120.26359171468596]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[331.42950142474274,120.26359171468596]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[331.42950142474274,120.26359171468596]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 331.42950142474274, 120.26359171468596 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[506.30111108811286,-642.673221904637]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 506.30111108811286, -642.673221904637 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[314.7034887744412,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[314.7034887744412,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[314.7034887744412,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[314.7034887744412,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 314.7034887744412, 116.08208855211058 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[489.57509843781133,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 489.57509843781133, -646.8547250672124 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 312.6127371931534, 113.99133697082289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 487.48434685652353, -648.9454766485001 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[312.6127371931534,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 312.6127371931534, 113.99133697082289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 487.48434685652353, -648.9454766485001 ] ],
+ type: 14 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[487.48434685652353,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.8849919370166,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.8849919370166,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.8849919370166,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[318.8849919370166,113.99133697082289]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 318.8849919370166, 113.99133697082289 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[493.7566016003867,-648.9454766485001]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 493.7566016003867, -648.9454766485001 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.9740109124689,109.8098338082475]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.9740109124689,109.8098338082475]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.9740109124689,109.8098338082475]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[343.9740109124689,109.8098338082475]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 343.9740109124689, 109.8098338082475 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[518.845620575839,-653.1269798110754]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 518.845620575839, -653.1269798110754 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[375.33528463178413,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[375.33528463178413,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[375.33528463178413,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[375.33528463178413,105.62833064567212]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 375.33528463178413, 105.62833064567212 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[550.2068942951543,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[550.2068942951543,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[550.2068942951543,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[550.2068942951543,-657.3084829736508]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 550.2068942951543, -657.3084829736508 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.96881309496257,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.96881309496257,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.96881309496257,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[412.96881309496257,99.35607590180905]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 412.96881309496257, 99.35607590180905 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[587.8404227583327,-663.5807377175139]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 587.8404227583327, -663.5807377175139 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[442.23933523299024,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[442.23933523299024,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[442.23933523299024,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[442.23933523299024,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 442.23933523299024, 97.26532432052136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[617.1109448963604,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 617.1109448963604, -665.6714892988016 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[463.14685104586715,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[463.14685104586715,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[463.14685104586715,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[463.14685104586715,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 463.14685104586715, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[638.0184607092373,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 638.0184607092373, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[467.32835420844253,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[467.32835420844253,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[467.32835420844253,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[467.32835420844253,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 467.32835420844253, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[642.1999638718127,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 642.1999638718127, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[469.41910578973034,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[469.41910578973034,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[469.41910578973034,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[469.41910578973034,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 469.41910578973034, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[644.2907154531005,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 644.2907154531005, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[471.5098573710179,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[471.5098573710179,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[471.5098573710179,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[471.5098573710179,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 471.5098573710179, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 646.381467034388, -667.7622408800893 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[475.6913605335933,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[475.6913605335933,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[475.6913605335933,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[475.6913605335933,95.17457273923367]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 475.6913605335933, 95.17457273923367 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 646.381467034388, -667.7622408800893 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[650.5629701969634,-667.7622408800893]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.7821121148811,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.7821121148811,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.7821121148811,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.7821121148811,97.26532432052136]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 477.7821121148811, 97.26532432052136 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[652.6537217782512,-665.6714892988016]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 652.6537217782512, -665.6714892988016 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+called update on data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+Broadcast : 21840dfa-8d74-465d-86ca-09b8e949a5a0, sending data {"type":1,"data":[],"_id":"21840dfa-8d74-465d-86ca-09b8e949a5a0"}
+{ _id: '21840dfa-8d74-465d-86ca-09b8e949a5a0',
+ data: [],
+ type: 1 }
+Incoming : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, receiving Set Field with data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+calling update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+called update on data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+Broadcast : 78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b, sending data {"_id":"78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b","type":0,"data":-1}
+{ _id: '78fcb2f1-0b9e-4eb9-829c-c3c8a5e7476b',
+ data: -1,
+ type: 0 }
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","d56974e0-5327-4f68-9268-128975957d7b","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ 'd56974e0-5327-4f68-9268-128975957d7b',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, receiving Set Field with data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":608.8230876649144}
+calling update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":608.8230876649144}
+called update on data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":608.8230876649144}
+Incoming : d7d79305-cd6b-4653-a173-1284f76f5773, receiving Set Field with data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-316.61158692943457}
+calling update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-316.61158692943457}
+called update on data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-316.61158692943457}
+Incoming : a59882d7-3daf-4574-b38e-4673bbac7db8, receiving Set Field with data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":5}
+calling update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":5}
+called update on data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":5}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":5}
+Broadcast : a59882d7-3daf-4574-b38e-4673bbac7db8, sending data {"_id":"a59882d7-3daf-4574-b38e-4673bbac7db8","type":0,"data":5}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '9ffe2a20-7fcb-4460-aa91-922b69f91e24',
+ data: 410.9532106073798,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":608.8230876649144}
+Broadcast : 9ffe2a20-7fcb-4460-aa91-922b69f91e24, sending data {"_id":"9ffe2a20-7fcb-4460-aa91-922b69f91e24","type":0,"data":608.8230876649144}
+{ _id: 'd7d79305-cd6b-4653-a173-1284f76f5773',
+ data: -51.27364965658168,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-316.61158692943457}
+Broadcast : d7d79305-cd6b-4653-a173-1284f76f5773, sending data {"_id":"d7d79305-cd6b-4653-a173-1284f76f5773","type":0,"data":-316.61158692943457}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-168.07261295233138]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: 'a59882d7-3daf-4574-b38e-4673bbac7db8', data: 5, type: 0 }
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 675.6519891724157, -168.07261295233138 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[675.6519891724157,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 675.6519891724157, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[663.1074796846896,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[663.1074796846896,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[663.1074796846896,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[663.1074796846896,-184.79862560263302]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 663.1074796846896, -184.79862560263302 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,-216.1598993219484]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 640.1092122905251, -216.1598993219484 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[610.8386901524974,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 610.8386901524974, -247.52117304126364 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 581.5681680144697, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[531.3901300635652,-331.1512362927713]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 531.3901300635652, -331.1512362927713 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[502.1196079255375,-362.51251001208664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 502.1196079255375, -362.51251001208664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[474.9398373687976,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 474.9398373687976, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[437.3063089056192,-433.598063775868]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 437.3063089056192, -433.598063775868 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[391.30977411729,-467.05008907647107]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 391.30977411729, -467.05008907647107 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[353.67624565411154,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 353.67624565411154, -500.5021143770741 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[313.9519656096453,-531.8633880963895]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 313.9519656096453, -531.8633880963895 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.26532432052159,197.6214002223304]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.26532432052159,197.6214002223304]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.26532432052159,197.6214002223304]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[97.26532432052159,197.6214002223304]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 97.26532432052159, 197.6214002223304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[272.1369339838917,-565.3154133969925]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 272.1369339838917, -565.3154133969925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[57.541044276055345,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[57.541044276055345,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[57.541044276055345,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[57.541044276055345,162.07862334043978]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 57.541044276055345, 162.07862334043978 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[232.41265393942547,-600.8581902788832]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 232.41265393942547, -600.8581902788832 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,132.8081012024121]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,132.8081012024121]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,132.8081012024121]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[15.726012650301527,132.8081012024121]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 15.726012650301527, 132.8081012024121 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-630.1287124169108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-630.1287124169108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-630.1287124169108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[190.59762231367165,-630.1287124169108]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -630.1287124169108 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-13.544509487726145,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-13.544509487726145,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-13.544509487726145,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-13.544509487726145,116.08208855211058]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -13.544509487726145, 116.08208855211058 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 190.59762231367165, -630.1287124169108 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[161.32710017564398,-646.8547250672124]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,103.53757906438443]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,103.53757906438443]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,103.53757906438443]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-34.452025300603054,103.53757906438443]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -34.452025300603054, 103.53757906438443 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[140.41958436276707,-659.3992345549385]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 140.41958436276707, -659.3992345549385 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.359541113479736,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.359541113479736,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.359541113479736,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-55.359541113479736,90.99306957665829]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -55.359541113479736, 90.99306957665829 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-671.9437440426647]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.51206854989039, -671.9437440426647 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-74.17630534506907,78.44856008893214]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -74.17630534506907, 78.44856008893214 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[100.69530431830105,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[100.69530431830105,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[100.69530431830105,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[100.69530431830105,-684.4882535303908]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 100.69530431830105, -684.4882535303908 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-97.17457273923355,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-97.17457273923355,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-97.17457273923355,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-97.17457273923355,59.63179585734292]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -97.17457273923355, 59.63179585734292 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[77.69703692413657,-703.30501776198]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.69703692413657, -703.30501776198 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-105.53757906438443,49.178037950904525]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -105.53757906438443, 49.178037950904525 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 77.69703692413657, -703.30501776198 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[69.33403059898569,-713.7587756684184]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.8098338082475,42.90578320704145]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.8098338082475,42.90578320704145]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.8098338082475,42.90578320704145]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-111.8098338082475,42.90578320704145]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -111.8098338082475, 42.90578320704145 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[63.06177585512262,-720.0310304122816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 63.06177585512262, -720.0310304122816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-113.9005853895352,36.63352846317838]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-113.9005853895352,36.63352846317838]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-113.9005853895352,36.63352846317838]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-113.9005853895352,36.63352846317838]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -113.9005853895352, 36.63352846317838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[60.97102427383493,-726.3032851561445]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 60.97102427383493, -726.3032851561445 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,32.452025300603]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,32.452025300603]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,32.452025300603]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,32.452025300603]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -115.99133697082289, 32.452025300603 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-730.4847883187199]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -730.4847883187199 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,30.361273719315307]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -115.99133697082289, 30.361273719315307 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-732.5755399000077]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -732.5755399000077 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,26.179770556739925]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,26.179770556739925]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,26.179770556739925]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-115.99133697082289,26.179770556739925]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -115.99133697082289, 26.179770556739925 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 58.88027269254724, -732.5755399000077 ] ],
+ type: 14 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[58.88027269254724,-736.7570430625831]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.08208855211058,21.998267394164543]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.08208855211058,21.998267394164543]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.08208855211058,21.998267394164543]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+Broadcast : bf792c34-1f36-4536-aba0-c0f9ecd3f410, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-118.08208855211058,21.998267394164543]],"_id":"bf792c34-1f36-4536-aba0-c0f9ecd3f410"}
+{ _id: 'bf792c34-1f36-4536-aba0-c0f9ecd3f410',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -118.08208855211058, 21.998267394164543 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[56.789521111259546,-740.9385462251585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 56.789521111259546, -740.9385462251585 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[234.50340552071327,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 234.50340552071327, 38.9117935951499 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,72.36381889575273]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.41438654526098, 72.36381889575273 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[192.68837389495945,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 192.68837389495945, 84.90832838347887 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, 91.18058312734206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[173.87160966337012,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 173.87160966337012, 89.08983154605426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[163.41785175693178,78.63607363961592]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 163.41785175693178, 78.63607363961592 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,57.72855782673901]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.2363485943564, 57.72855782673901 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[146.69183910663025,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 146.69183910663025, 32.639538851286716 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[111.14906222473962,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 111.14906222473962, -30.08300858734401 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[115.330565387315,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 115.330565387315, -30.08300858734401 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[119.51206854989039,-30.08300858734401]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 119.51206854989039, -30.08300858734401 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[180.1438644072333,-40.53676649378235]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 180.1438644072333, -40.53676649378235 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[215.68664128912394,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 215.68664128912394, -55.1720275627963 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[477.0305889500852,-90.71480444468693]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 477.0305889500852, -90.71480444468693 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[709.1040144730188,-136.71133923301613]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 709.1040144730188, -136.71133923301613 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[916.0884210205,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[916.0884210205,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[916.0884210205,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[916.0884210205,-186.88937718392071]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 916.0884210205, -186.88937718392071 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[968.3572105526922,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[968.3572105526922,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[968.3572105526922,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[968.3572105526922,-199.43388667164686]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 968.3572105526922, -199.43388667164686 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[970.44796213398,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[970.44796213398,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[970.44796213398,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[970.44796213398,-201.52463825293455]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 970.44796213398, -201.52463825293455 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[951.6311979023907,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 951.6311979023907, -193.1616319277838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[936.995936833377,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[936.995936833377,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[936.995936833377,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[936.995936833377,-188.9801287652084]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 936.995936833377, -188.9801287652084 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[945.3589431585277,-180.61712244005764]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 945.3589431585277, -180.61712244005764 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1005.9907390158706,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1005.9907390158706,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1005.9907390158706,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[1005.9907390158706,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 1005.9907390158706, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[926.5421789269384,-878.928150590146]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 926.5421789269384, -878.928150590146 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,-728.3940367374323]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 717.4670207981695, -728.3940367374323 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[500.0288563442497,-575.769171303431]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 500.0288563442497, -575.769171303431 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[94.4230495744381,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 94.4230495744381, -312.33447206118205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-321.6365151018123,-86.53330128211155]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -321.6365151018123, -86.53330128211155 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -424.083342584909, -55.1720275627963 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-470.07987737323816,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-470.07987737323816,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-470.07987737323816,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-470.07987737323816,-55.1720275627963]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -470.07987737323816, -55.1720275627963 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -71.89804021309783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-80.26104653824859]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -80.26104653824859 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-96.98705918855012]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -96.98705918855012 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-124.16682974528999]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -124.16682974528999 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-486.8058900235397,-170.1633645336192]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -486.8058900235397, -170.1633645336192 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-474.26138053581354,-247.52117304126364]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -474.26138053581354, -247.52117304126364 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-440.80935523521055,-316.51597522375744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -440.80935523521055, -316.51597522375744 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-390.63131728430596,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -390.63131728430596, -379.23852266238816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-313.2735087766615,-462.8685859138957]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -313.2735087766615, -462.8685859138957 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-271.4584771509077,-496.32061121449874]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -271.4584771509077, -496.32061121449874 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-265.1862224070446,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -265.1862224070446, -504.6836175396495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-267.2769739883323,-504.6836175396495]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -267.2769739883323, -504.6836175396495 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-279.82148347605846,-500.5021143770741]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -279.82148347605846, -500.5021143770741 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-340.4532793334014,-483.7761017267726]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -340.4532793334014, -483.7761017267726 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-405.2665783533198,-446.14257326359416]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -405.2665783533198, -446.14257326359416 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-499.35039951126583,-400.14603847526496]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -499.35039951126583, -400.14603847526496 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-530.7116732305813,-377.1477710811005]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -530.7116732305813, -377.1477710811005 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-358.33100684951125]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -549.5284374621704, -358.33100684951125 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-352.0587521056482]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -352.0587521056482 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -557.8914437873211, -349.9680005243605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-347.8772489430728]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -559.9821953686088, -347.8772489430728 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-559.9821953686088,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -559.9821953686088, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-557.8914437873211,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -557.8914437873211, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-555.8006922060334,-343.6957457804974]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -555.8006922060334, -343.6957457804974 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-553.7099406247457,-345.7864973617851]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -553.7099406247457, -345.7864973617851 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -551.619189043458, -349.9680005243605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-549.5284374621704,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -549.5284374621704, -356.24025526822356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -547.4376858808827, -364.6032615933743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-547.4376858808827,-370.8755163372374]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -547.4376858808827, -370.8755163372374 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-551.619189043458,-379.23852266238816]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -551.619189043458, -379.23852266238816 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-568.3452016937596,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -568.3452016937596, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-582.9804627627734,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-582.9804627627734,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-582.9804627627734,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-582.9804627627734,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -582.9804627627734, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-593.4342206692119,-398.0552868939774]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -593.4342206692119, -398.0552868939774 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-603.8879785756503,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-603.8879785756503,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-603.8879785756503,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-603.8879785756503,-391.7830321501143]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -603.8879785756503, -391.7830321501143 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-381.32927424367585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-381.32927424367585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-381.32927424367585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-612.2509849008011,-381.32927424367585]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -612.2509849008011, -381.32927424367585 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-364.6032615933743]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, -364.6032615933743 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-356.24025526822356]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, -356.24025526822356 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-349.9680005243605]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, -349.9680005243605 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-616.4324880633765,-341.6049941992097]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -616.4324880633765, -341.6049941992097 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-614.3417364820888,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-614.3417364820888,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-614.3417364820888,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-614.3417364820888,-333.24198787405896]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -614.3417364820888, -333.24198787405896 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-601.7972269943626,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-601.7972269943626,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-601.7972269943626,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-601.7972269943626,-312.33447206118205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -601.7972269943626, -312.33447206118205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-578.798959600198,-280.9731983418667]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -578.798959600198, -280.9731983418667 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-532.8024248118688,-239.15816671611287]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -532.8024248118688, -239.15816671611287 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-478.4428836983889,-193.1616319277838]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -478.4428836983889, -193.1616319277838 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-424.083342584909,-157.61885504589304]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -424.083342584909, -157.61885504589304 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-371.81455305271675,-128.34833290786537]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -371.81455305271675, -128.34833290786537 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-101.1685623511255]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-101.1685623511255]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-101.1685623511255]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-315.3642603579492,-101.1685623511255]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -315.3642603579492, -101.1685623511255 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-258.91396766318155,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-258.91396766318155,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-258.91396766318155,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-258.91396766318155,-71.89804021309783]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -258.91396766318155, -71.89804021309783 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-185.73766231811237,-46.80902123764554]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -185.73766231811237, -46.80902123764554 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[-91.6538411601664,-11.26624435575468]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ -91.6538411601664, -11.26624435575468 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[50.51726636739647,24.276532526135952]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 50.51726636739647, 24.276532526135952 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.78432329375335, 32.639538851286716 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[184.3253675698087,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 184.3253675698087, 32.639538851286716 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[230.3219023581379,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 230.3219023581379, 32.639538851286716 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[265.8646792400285,32.639538851286716]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 265.8646792400285, 32.639538851286716 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,34.73029043257452]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,34.73029043257452]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,34.73029043257452]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[311.8612140283577,34.73029043257452]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 311.8612140283577, 34.73029043257452 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[370.40225830441307,38.9117935951499]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 370.40225830441307, 38.9117935951499 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,49.36555150158824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,49.36555150158824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,49.36555150158824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[428.9433025804684,49.36555150158824]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 428.9433025804684, 49.36555150158824 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[479.12134053137277,55.6378062454512]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 479.12134053137277, 55.6378062454512 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,64.00081257060197]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,64.00081257060197]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,64.00081257060197]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[508.39186266940044,64.00081257060197]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 508.39186266940044, 64.00081257060197 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,70.27306731446515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,70.27306731446515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,70.27306731446515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[525.117875319702,70.27306731446515]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 525.117875319702, 70.27306731446515 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,74.45457047704053]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,74.45457047704053]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,74.45457047704053]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[535.5716332261405,74.45457047704053]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 535.5716332261405, 74.45457047704053 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[556.4791490390174,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 556.4791490390174, 80.72682522090349 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[581.5681680144697,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 581.5681680144697, 93.27133470862964 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[600.3849322460588,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 600.3849322460588, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[623.3831996402236,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 623.3831996402236, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[646.381467034388,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 646.381467034388, 118.36035368408193 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[667.288982847265,122.54185684665731]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 667.288982847265, 122.54185684665731 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[696.5595049852926,130.90486317180807]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 696.5595049852926, 130.90486317180807 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[717.4670207981695,135.08636633438346]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 717.4670207981695, 135.08636633438346 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[732.1022818671833,137.17711791567126]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 732.1022818671833, 137.17711791567126 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[750.9190460987726,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 750.9190460987726, 143.44937265953422 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[759.2820524239233,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[759.2820524239233,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[759.2820524239233,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[759.2820524239233,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 759.2820524239233, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[761.3728040052109,145.54012424082202]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 761.3728040052109, 145.54012424082202 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[767.6450587490741,143.44937265953422]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 767.6450587490741, 143.44937265953422 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,141.35862107824664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,141.35862107824664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,141.35862107824664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[773.9173134929371,141.35862107824664]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 773.9173134929371, 141.35862107824664 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[780.1895682368003,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 780.1895682368003, 128.8141115905205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[792.7340777245264,118.36035368408193]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 792.7340777245264, 118.36035368408193 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[805.2785872122525,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 805.2785872122525, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[815.7323451186909,101.6343410337804]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 815.7323451186909, 101.6343410337804 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 95.36208628991744 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,95.36208628991744]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 95.36208628991744 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[824.0953514438417,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 824.0953514438417, 93.27133470862964 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 93.27133470862964 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,91.18058312734206]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 91.18058312734206 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 86.99907996476668 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,84.90832838347887]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 828.276854606417, 84.90832838347887 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[828.276854606417,82.8175768021913]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 828.276854606417, 82.8175768021913 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[830.3676061877048,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 830.3676061877048, 76.54532205832811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[826.1861030251295,76.54532205832811]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 826.1861030251295, 76.54532205832811 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[817.8230966999787,80.72682522090349]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 817.8230966999787, 80.72682522090349 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[776.0080650742249,86.99907996476668]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 776.0080650742249, 86.99907996476668 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[753.0097976800602,89.08983154605426]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 753.0097976800602, 89.08983154605426 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[640.1092122905251,93.27133470862964]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 640.1092122905251, 93.27133470862964 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[560.6606522015928,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 560.6606522015928, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[485.39359527523595,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 485.39359527523595, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[422.6710478366052,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[422.6710478366052,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[422.6710478366052,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[422.6710478366052,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 422.6710478366052, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[368.31150672312526,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 368.31150672312526, 99.54358945249282 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[336.95023300381,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 336.95023300381, 99.54358945249282 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[309.7704624470699,99.54358945249282]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 309.7704624470699, 99.54358945249282 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.40918872775467,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.40918872775467,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.40918872775467,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[278.40918872775467,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 278.40918872775467, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[267.9554308213163,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 267.9554308213163, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[263.77392765874094,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 263.77392765874094, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[261.68317607745314,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[261.68317607745314,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[261.68317607745314,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[261.68317607745314,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 261.68317607745314, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[259.59242449616556,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[259.59242449616556,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[259.59242449616556,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[259.59242449616556,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 259.59242449616556, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[253.32016975230238,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 253.32016975230238, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[251.2294181710148,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 251.2294181710148, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[249.138666589727,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 249.138666589727, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[242.86641184586404,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 242.86641184586404, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[228.2311507768501,105.81584419635578]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 228.2311507768501, 105.81584419635578 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[201.05138022011022,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 201.05138022011022, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[169.69010650079474,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 169.69010650079474, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.78432329375335, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 121.60282013117796, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd","3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd',
+ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+Incoming : 62d2960c-ed63-4805-89c8-e01eada0f03e, receiving Set Field with data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-283.296839264482}
+calling update on data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-283.296839264482}
+called update on data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-283.296839264482}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-283.296839264482}
+Broadcast : 62d2960c-ed63-4805-89c8-e01eada0f03e, sending data {"_id":"62d2960c-ed63-4805-89c8-e01eada0f03e","type":0,"data":-283.296839264482}
+{ _id: '62d2960c-ed63-4805-89c8-e01eada0f03e',
+ data: -283.296839264482,
+ type: 0 }
+Incoming : 9ff46b19-dc58-47d7-9752-340e49e29b16, receiving Set Field with data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-43.90578320704148}
+calling update on data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-43.90578320704148}
+called update on data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-43.90578320704148}
+Incoming : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, receiving Set Field with data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":0}
+calling update on data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":0}
+called update on data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":0}
+Broadcast : 40f594b5-c6ad-4926-9acb-fc33d688f1cd, sending data {"_id":"40f594b5-c6ad-4926-9acb-fc33d688f1cd","type":0,"data":0}
+{ _id: '40f594b5-c6ad-4926-9acb-fc33d688f1cd', data: 0, type: 0 }
+calling update on data {"type":6,"data":"200 200","_id":"6bbd8508-b01f-4b79-afa6-9faa9edbe480"}
+called update on data {"type":6,"data":"200 200","_id":"6bbd8508-b01f-4b79-afa6-9faa9edbe480"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6bbd8508-b01f-4b79-afa6-9faa9edbe480"}],"ok":1}
+Wrote {"type":6,"data":"200 200","_id":"6bbd8508-b01f-4b79-afa6-9faa9edbe480"}
+Broadcast : 6bbd8508-b01f-4b79-afa6-9faa9edbe480, sending data {"type":6,"data":"200 200","_id":"6bbd8508-b01f-4b79-afa6-9faa9edbe480"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"],["51529209-4838-51c5-a520-0044fddf139c","6bbd8508-b01f-4b79-afa6-9faa9edbe480"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"],["51529209-4838-51c5-a520-0044fddf139c","6bbd8508-b01f-4b79-afa6-9faa9edbe480"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Incoming : 42373536-4991-4b59-aaf5-34559e43adef, receiving Set Field with data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":71.25547091955599}
+calling update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":71.25547091955599}
+called update on data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":71.25547091955599}
+Incoming : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, receiving Set Field with data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-125.00190825315835}
+calling update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-125.00190825315835}
+called update on data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-125.00190825315835}
+Incoming : 7d5ef008-d5df-4ce3-9755-0c11310c5830, receiving Set Field with data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+called update on data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+calling update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+called update on data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+calling update on data {"type":5,"data":[],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":1,"data":[],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+called update on data {"type":1,"data":[],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+calling update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+called update on data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":6,"data":"a nested collection","_id":"cb7c4eb4-2963-4988-afb7-443dd92bf8f5"}
+called update on data {"type":6,"data":"a nested collection","_id":"cb7c4eb4-2963-4988-afb7-443dd92bf8f5"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Incoming : 6fd320d2-553c-4198-b6f0-fec09c0cb0b7, receiving Set Field with data {"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7","type":0,"data":1}
+calling update on data {"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7","type":0,"data":1}
+called update on data {"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7","type":0,"data":1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":6,"data":"Transparent","_id":"beb4c116-2022-4479-8432-47ba9025f5b3"}
+called update on data {"type":6,"data":"Transparent","_id":"beb4c116-2022-4479-8432-47ba9025f5b3"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":12,"data":{},"_id":"713a219f-e36a-4c69-a490-4ae5da7389a9"}
+called update on data {"type":12,"data":{},"_id":"713a219f-e36a-4c69-a490-4ae5da7389a9"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"],["59b58624-916f-50a0-8efa-7003a805bfad","713a219f-e36a-4c69-a490-4ae5da7389a9"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"],["59b58624-916f-50a0-8efa-7003a805bfad","713a219f-e36a-4c69-a490-4ae5da7389a9"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+calling update on data {"type":5,"data":[],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 485418f4-7846-4d5b-87a9-4aed3f98c2c2, receiving Set Field with data {"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2","type":0,"data":-616.4324880633765}
+calling update on data {"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2","type":0,"data":-616.4324880633765}
+called update on data {"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2","type":0,"data":-616.4324880633765}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : a228720f-41e0-4ef6-924f-505c82f7c980, receiving Set Field with data {"_id":"a228720f-41e0-4ef6-924f-505c82f7c980","type":0,"data":-341.6049941992097}
+calling update on data {"_id":"a228720f-41e0-4ef6-924f-505c82f7c980","type":0,"data":-341.6049941992097}
+called update on data {"_id":"a228720f-41e0-4ef6-924f-505c82f7c980","type":0,"data":-341.6049941992097}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 5033b111-456f-4570-b6a4-e10ff055ae7f, receiving Set Field with data {"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f","type":0,"data":738.0353081945544}
+calling update on data {"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f","type":0,"data":738.0353081945544}
+called update on data {"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f","type":0,"data":738.0353081945544}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 0120d01a-a82d-425a-b3fc-549398273140, receiving Set Field with data {"_id":"0120d01a-a82d-425a-b3fc-549398273140","type":0,"data":455.78384472071633}
+calling update on data {"_id":"0120d01a-a82d-425a-b3fc-549398273140","type":0,"data":455.78384472071633}
+called update on data {"_id":"0120d01a-a82d-425a-b3fc-549398273140","type":0,"data":455.78384472071633}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 4baa5232-50bc-4292-bcf2-21fb5325550c, receiving Set Field with data {"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c","type":0,"data":0}
+calling update on data {"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c","type":0,"data":0}
+called update on data {"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 3f474268-efca-4eec-97c4-933dcc673fbc, receiving Set Field with data {"_id":"3f474268-efca-4eec-97c4-933dcc673fbc","type":0,"data":0}
+calling update on data {"_id":"3f474268-efca-4eec-97c4-933dcc673fbc","type":0,"data":0}
+called update on data {"_id":"3f474268-efca-4eec-97c4-933dcc673fbc","type":0,"data":0}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Incoming : 45bfc2c1-49fe-451d-a41c-9208efabe88f, receiving Set Field with data {"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f","type":0,"data":-1}
+calling update on data {"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f","type":0,"data":-1}
+called update on data {"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f","type":0,"data":-1}
+calling update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"],["911954a3-bebc-5b20-81f3-3091a2e11907","45bfc2c1-49fe-451d-a41c-9208efabe88f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+called update on data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"],["911954a3-bebc-5b20-81f3-3091a2e11907","45bfc2c1-49fe-451d-a41c-9208efabe88f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+calling update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","809af21b-e4a4-4e37-bd26-60e41d847cca"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+called update on data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","809af21b-e4a4-4e37-bd26-60e41d847cca"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '9ff46b19-dc58-47d7-9752-340e49e29b16',
+ data: -157.61885504589304,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-43.90578320704148}
+Broadcast : 9ff46b19-dc58-47d7-9752-340e49e29b16, sending data {"_id":"9ff46b19-dc58-47d7-9752-340e49e29b16","type":0,"data":-43.90578320704148}
+{ _id: '6bbd8508-b01f-4b79-afa6-9faa9edbe480',
+ data: '200 200',
+ type: 6 }
+{ _id: '2a1cad71-3e49-434a-9914-3a58edf3826c',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '483c9a83-c777-47db-a806-4a7c6e298a2d' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '729e1f77-82c8-42ba-a781-7442f2011a48' ],
+ [ '911954a3-bebc-5b20-81f3-3091a2e11907',
+ '40f594b5-c6ad-4926-9acb-fc33d688f1cd' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '62d2960c-ed63-4805-89c8-e01eada0f03e' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ '9ff46b19-dc58-47d7-9752-340e49e29b16' ],
+ [ '3559ca27-b3fa-5407-b822-07a1c9a0664c',
+ 'e878ea28-b836-487a-9b2c-28a31657f37b' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"],["51529209-4838-51c5-a520-0044fddf139c","6bbd8508-b01f-4b79-afa6-9faa9edbe480"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+Broadcast : 2a1cad71-3e49-434a-9914-3a58edf3826c, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","3f66365b-1c1c-4c0b-9c3c-1a1d4b1c7526"],["5c207bd2-0390-5c35-8972-06d185f387fb","483c9a83-c777-47db-a806-4a7c6e298a2d"],["2a238eef-0bbb-5b78-b173-37b574fec97f","729e1f77-82c8-42ba-a781-7442f2011a48"],["911954a3-bebc-5b20-81f3-3091a2e11907","40f594b5-c6ad-4926-9acb-fc33d688f1cd"],["7b71638c-05b8-5573-9aa5-c737c9406a86","62d2960c-ed63-4805-89c8-e01eada0f03e"],["13a3cc01-c286-57e1-8746-baa3ced34e76","9ff46b19-dc58-47d7-9752-340e49e29b16"],["3559ca27-b3fa-5407-b822-07a1c9a0664c","e878ea28-b836-487a-9b2c-28a31657f37b"],["51529209-4838-51c5-a520-0044fddf139c","6bbd8508-b01f-4b79-afa6-9faa9edbe480"]],"_id":"2a1cad71-3e49-434a-9914-3a58edf3826c"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":71.25547091955599}
+Broadcast : 42373536-4991-4b59-aaf5-34559e43adef, sending data {"_id":"42373536-4991-4b59-aaf5-34559e43adef","type":0,"data":71.25547091955599}
+{ _id: '42373536-4991-4b59-aaf5-34559e43adef',
+ data: 71.25547091955599,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-125.00190825315835}
+Broadcast : 9a0e2341-8c47-4d60-84ec-5fa6158164b1, sending data {"_id":"9a0e2341-8c47-4d60-84ec-5fa6158164b1","type":0,"data":-125.00190825315835}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a' ],
+ type: 1 }
+{ _id: '9a0e2341-8c47-4d60-84ec-5fa6158164b1',
+ data: -125.00190825315835,
+ type: 0 }
+{ _id: '7d5ef008-d5df-4ce3-9755-0c11310c5830',
+ data: -1,
+ type: 0 }
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+Broadcast : 0dc04257-8187-4391-a1bf-a63c30a9e922, sending data {"type":12,"data":{},"_id":"0dc04257-8187-4391-a1bf-a63c30a9e922"}
+{ _id: '0dc04257-8187-4391-a1bf-a63c30a9e922',
+ data: {},
+ type: 12 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+Broadcast : 7d5ef008-d5df-4ce3-9755-0c11310c5830, sending data {"_id":"7d5ef008-d5df-4ce3-9755-0c11310c5830","type":0,"data":0}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}],"ok":1}
+Wrote {"type":5,"data":[],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}],"ok":1}
+Wrote {"type":1,"data":[],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+Broadcast : a254264d-6da8-4081-9051-25ebe0b49ccb, sending data {"type":1,"data":[],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ] ],
+ type: 5 }
+{ _id: 'a254264d-6da8-4081-9051-25ebe0b49ccb',
+ data: [],
+ type: 1 }
+{ _id: 'a254264d-6da8-4081-9051-25ebe0b49ccb',
+ data: [],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'a254264d-6da8-4081-9051-25ebe0b49ccb' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+Broadcast : a254264d-6da8-4081-9051-25ebe0b49ccb, sending data {"type":1,"data":["2a1cad71-3e49-434a-9914-3a58edf3826c","6eb58b00-a8e9-4c65-ba8c-028cc7a55ecd"],"_id":"a254264d-6da8-4081-9051-25ebe0b49ccb"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"cb7c4eb4-2963-4988-afb7-443dd92bf8f5"}],"ok":1}
+Wrote {"type":6,"data":"a nested collection","_id":"cb7c4eb4-2963-4988-afb7-443dd92bf8f5"}
+Broadcast : cb7c4eb4-2963-4988-afb7-443dd92bf8f5, sending data {"type":6,"data":"a nested collection","_id":"cb7c4eb4-2963-4988-afb7-443dd92bf8f5"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'a254264d-6da8-4081-9051-25ebe0b49ccb' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'cb7c4eb4-2963-4988-afb7-443dd92bf8f5' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7"}],"ok":1}
+Wrote {"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7","type":0,"data":1}
+Broadcast : 6fd320d2-553c-4198-b6f0-fec09c0cb0b7, sending data {"_id":"6fd320d2-553c-4198-b6f0-fec09c0cb0b7","type":0,"data":1}
+{ _id: 'cb7c4eb4-2963-4988-afb7-443dd92bf8f5',
+ data: 'a nested collection',
+ type: 6 }
+{ _id: '6fd320d2-553c-4198-b6f0-fec09c0cb0b7', data: 1, type: 0 }
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'a254264d-6da8-4081-9051-25ebe0b49ccb' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'cb7c4eb4-2963-4988-afb7-443dd92bf8f5' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"beb4c116-2022-4479-8432-47ba9025f5b3"}],"ok":1}
+Wrote {"type":6,"data":"Transparent","_id":"beb4c116-2022-4479-8432-47ba9025f5b3"}
+Broadcast : beb4c116-2022-4479-8432-47ba9025f5b3, sending data {"type":6,"data":"Transparent","_id":"beb4c116-2022-4479-8432-47ba9025f5b3"}
+{ _id: 'beb4c116-2022-4479-8432-47ba9025f5b3',
+ data: 'Transparent',
+ type: 6 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"713a219f-e36a-4c69-a490-4ae5da7389a9"}],"ok":1}
+Wrote {"type":12,"data":{},"_id":"713a219f-e36a-4c69-a490-4ae5da7389a9"}
+Broadcast : 713a219f-e36a-4c69-a490-4ae5da7389a9, sending data {"type":12,"data":{},"_id":"713a219f-e36a-4c69-a490-4ae5da7389a9"}
+{ _id: '713a219f-e36a-4c69-a490-4ae5da7389a9',
+ data: {},
+ type: 12 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"],["59b58624-916f-50a0-8efa-7003a805bfad","713a219f-e36a-4c69-a490-4ae5da7389a9"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+Broadcast : 20c6ad58-5924-480d-b0bc-4cc710b6fbbf, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","collectionProto"],["530318f9-9b84-5b90-b926-530590cdd5c3","a254264d-6da8-4081-9051-25ebe0b49ccb"],["51529209-4838-51c5-a520-0044fddf139c","cb7c4eb4-2963-4988-afb7-443dd92bf8f5"],["771c0a88-bd02-5e92-953f-e9042a191928","6fd320d2-553c-4198-b6f0-fec09c0cb0b7"],["bf70b65d-62da-53e6-82b2-1b849418dc2e","beb4c116-2022-4479-8432-47ba9025f5b3"],["59b58624-916f-50a0-8efa-7003a805bfad","713a219f-e36a-4c69-a490-4ae5da7389a9"]],"_id":"20c6ad58-5924-480d-b0bc-4cc710b6fbbf"}
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'a254264d-6da8-4081-9051-25ebe0b49ccb' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'cb7c4eb4-2963-4988-afb7-443dd92bf8f5' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '6fd320d2-553c-4198-b6f0-fec09c0cb0b7' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'beb4c116-2022-4479-8432-47ba9025f5b3' ],
+ [ '59b58624-916f-50a0-8efa-7003a805bfad',
+ '713a219f-e36a-4c69-a490-4ae5da7389a9' ] ],
+ type: 5 }
+{ _id: '20c6ad58-5924-480d-b0bc-4cc710b6fbbf',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea', 'collectionProto' ],
+ [ '530318f9-9b84-5b90-b926-530590cdd5c3',
+ 'a254264d-6da8-4081-9051-25ebe0b49ccb' ],
+ [ '51529209-4838-51c5-a520-0044fddf139c',
+ 'cb7c4eb4-2963-4988-afb7-443dd92bf8f5' ],
+ [ '771c0a88-bd02-5e92-953f-e9042a191928',
+ '6fd320d2-553c-4198-b6f0-fec09c0cb0b7' ],
+ [ 'bf70b65d-62da-53e6-82b2-1b849418dc2e',
+ 'beb4c116-2022-4479-8432-47ba9025f5b3' ],
+ [ '59b58624-916f-50a0-8efa-7003a805bfad',
+ '713a219f-e36a-4c69-a490-4ae5da7389a9' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}],"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2"}],"ok":1}
+Wrote {"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2","type":0,"data":-616.4324880633765}
+Broadcast : 485418f4-7846-4d5b-87a9-4aed3f98c2c2, sending data {"_id":"485418f4-7846-4d5b-87a9-4aed3f98c2c2","type":0,"data":-616.4324880633765}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a228720f-41e0-4ef6-924f-505c82f7c980"}],"ok":1}
+Wrote {"_id":"a228720f-41e0-4ef6-924f-505c82f7c980","type":0,"data":-341.6049941992097}
+Broadcast : a228720f-41e0-4ef6-924f-505c82f7c980, sending data {"_id":"a228720f-41e0-4ef6-924f-505c82f7c980","type":0,"data":-341.6049941992097}
+{ _id: '485418f4-7846-4d5b-87a9-4aed3f98c2c2',
+ data: -616.4324880633765,
+ type: 0 }
+{ _id: 'a228720f-41e0-4ef6-924f-505c82f7c980',
+ data: -341.6049941992097,
+ type: 0 }
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f"}],"ok":1}
+Wrote {"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f","type":0,"data":738.0353081945544}
+Broadcast : 5033b111-456f-4570-b6a4-e10ff055ae7f, sending data {"_id":"5033b111-456f-4570-b6a4-e10ff055ae7f","type":0,"data":738.0353081945544}
+{ _id: '5033b111-456f-4570-b6a4-e10ff055ae7f',
+ data: 738.0353081945544,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"0120d01a-a82d-425a-b3fc-549398273140"}],"ok":1}
+Wrote {"_id":"0120d01a-a82d-425a-b3fc-549398273140","type":0,"data":455.78384472071633}
+Broadcast : 0120d01a-a82d-425a-b3fc-549398273140, sending data {"_id":"0120d01a-a82d-425a-b3fc-549398273140","type":0,"data":455.78384472071633}
+{ _id: '0120d01a-a82d-425a-b3fc-549398273140',
+ data: 455.78384472071633,
+ type: 0 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'a228720f-41e0-4ef6-924f-505c82f7c980' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '5033b111-456f-4570-b6a4-e10ff055ae7f' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '0120d01a-a82d-425a-b3fc-549398273140' ] ],
+ type: 5 }
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'a228720f-41e0-4ef6-924f-505c82f7c980' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '5033b111-456f-4570-b6a4-e10ff055ae7f' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '0120d01a-a82d-425a-b3fc-549398273140' ] ],
+ type: 5 }
+undefined
+null
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'a228720f-41e0-4ef6-924f-505c82f7c980' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '5033b111-456f-4570-b6a4-e10ff055ae7f' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '0120d01a-a82d-425a-b3fc-549398273140' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4baa5232-50bc-4292-bcf2-21fb5325550c' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c"}],"ok":1}
+Wrote {"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c","type":0,"data":0}
+Broadcast : 4baa5232-50bc-4292-bcf2-21fb5325550c, sending data {"_id":"4baa5232-50bc-4292-bcf2-21fb5325550c","type":0,"data":0}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"3f474268-efca-4eec-97c4-933dcc673fbc"}],"ok":1}
+Wrote {"_id":"3f474268-efca-4eec-97c4-933dcc673fbc","type":0,"data":0}
+Broadcast : 3f474268-efca-4eec-97c4-933dcc673fbc, sending data {"_id":"3f474268-efca-4eec-97c4-933dcc673fbc","type":0,"data":0}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'a228720f-41e0-4ef6-924f-505c82f7c980' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '5033b111-456f-4570-b6a4-e10ff055ae7f' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '0120d01a-a82d-425a-b3fc-549398273140' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4baa5232-50bc-4292-bcf2-21fb5325550c' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '3f474268-efca-4eec-97c4-933dcc673fbc' ] ],
+ type: 5 }
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f"}],"ok":1}
+Wrote {"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f","type":0,"data":-1}
+Broadcast : 45bfc2c1-49fe-451d-a41c-9208efabe88f, sending data {"_id":"45bfc2c1-49fe-451d-a41c-9208efabe88f","type":0,"data":-1}
+{ _id: '3f474268-efca-4eec-97c4-933dcc673fbc', data: 0, type: 0 }
+{ _id: '45bfc2c1-49fe-451d-a41c-9208efabe88f',
+ data: -1,
+ type: 0 }
+{ _id: '809af21b-e4a4-4e37-bd26-60e41d847cca',
+ data:
+ [ [ '6c3acd53-3a16-59b2-bc11-62c6d79b2cea',
+ '20c6ad58-5924-480d-b0bc-4cc710b6fbbf' ],
+ [ '7b71638c-05b8-5573-9aa5-c737c9406a86',
+ '485418f4-7846-4d5b-87a9-4aed3f98c2c2' ],
+ [ '13a3cc01-c286-57e1-8746-baa3ced34e76',
+ 'a228720f-41e0-4ef6-924f-505c82f7c980' ],
+ [ '5c207bd2-0390-5c35-8972-06d185f387fb',
+ '5033b111-456f-4570-b6a4-e10ff055ae7f' ],
+ [ '2a238eef-0bbb-5b78-b173-37b574fec97f',
+ '0120d01a-a82d-425a-b3fc-549398273140' ],
+ [ '8efd3b8a-ce6c-5f44-9085-90a8b7cd2202',
+ '4baa5232-50bc-4292-bcf2-21fb5325550c' ],
+ [ '048d25ac-b841-5728-a599-e3a432137881',
+ '3f474268-efca-4eec-97c4-933dcc673fbc' ] ],
+ type: 5 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","809af21b-e4a4-4e37-bd26-60e41d847cca"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+Broadcast : 1fed038e-4afc-486a-a463-d65a676b6102, sending data {"type":1,"data":["3f886fd6-7d94-445f-88ab-0e1077dbf480","80586583-40b0-4d17-9f6f-12c4bf633d3a","809af21b-e4a4-4e37-bd26-60e41d847cca"],"_id":"1fed038e-4afc-486a-a463-d65a676b6102"}
+{ _id: '1fed038e-4afc-486a-a463-d65a676b6102',
+ data:
+ [ '3f886fd6-7d94-445f-88ab-0e1077dbf480',
+ '80586583-40b0-4d17-9f6f-12c4bf633d3a',
+ '809af21b-e4a4-4e37-bd26-60e41d847cca' ],
+ type: 1 }
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"],["911954a3-bebc-5b20-81f3-3091a2e11907","45bfc2c1-49fe-451d-a41c-9208efabe88f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+Broadcast : 809af21b-e4a4-4e37-bd26-60e41d847cca, sending data {"type":5,"data":[["6c3acd53-3a16-59b2-bc11-62c6d79b2cea","20c6ad58-5924-480d-b0bc-4cc710b6fbbf"],["7b71638c-05b8-5573-9aa5-c737c9406a86","485418f4-7846-4d5b-87a9-4aed3f98c2c2"],["13a3cc01-c286-57e1-8746-baa3ced34e76","a228720f-41e0-4ef6-924f-505c82f7c980"],["5c207bd2-0390-5c35-8972-06d185f387fb","5033b111-456f-4570-b6a4-e10ff055ae7f"],["2a238eef-0bbb-5b78-b173-37b574fec97f","0120d01a-a82d-425a-b3fc-549398273140"],["8efd3b8a-ce6c-5f44-9085-90a8b7cd2202","4baa5232-50bc-4292-bcf2-21fb5325550c"],["048d25ac-b841-5728-a599-e3a432137881","3f474268-efca-4eec-97c4-933dcc673fbc"],["911954a3-bebc-5b20-81f3-3091a2e11907","45bfc2c1-49fe-451d-a41c-9208efabe88f"]],"_id":"809af21b-e4a4-4e37-bd26-60e41d847cca"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[121.60282013117796,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 121.60282013117796, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[123.69357171246554,114.17885052150655]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 123.69357171246554, 114.17885052150655 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.78432329375335, 112.08809894021897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":0,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[125.78432329375335,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 125.78432329375335, 112.08809894021897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[129.96582645632873,112.08809894021897]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 129.96582645632873, 112.08809894021897 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 132.0565780376163, 109.99734735893117 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[132.0565780376163,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 132.0565780376163, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[138.3288327814795,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 138.3288327814795, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[159.2363485943564,107.90659577764359]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 159.2363485943564, 107.90659577764359 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[209.41438654526098,109.99734735893117]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 209.41438654526098, 109.99734735893117 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[295.1352013780562,120.45110526536973]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 295.1352013780562, 120.45110526536973 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[433.1248057430438,128.8141115905205]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 433.1248057430438, 128.8141115905205 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[661.0167281034018,97.45283787120502]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 661.0167281034018, 97.45283787120502 ] ],
+ type: 14 }
+calling update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+called update on data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{"n":1,"nModified":1,"ok":1}
+Wrote {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+Broadcast : 2fa3035c-14c5-4fd6-a8bd-fca408c591ef, sending data {"type":14,"data":[["5c94a611c92ed417082e86a5","tschicke@gmail.com"],[947.4496947398153,-17.538499099617866]],"_id":"2fa3035c-14c5-4fd6-a8bd-fca408c591ef"}
+{ _id: '2fa3035c-14c5-4fd6-a8bd-fca408c591ef',
+ data:
+ [ [ '5c94a611c92ed417082e86a5', 'tschicke@gmail.com' ],
+ [ 947.4496947398153, -17.538499099617866 ] ],
+ type: 14 }
+Terminate batch job (Y/N)?
diff --git a/package.json b/package.json
index 23fd9b275..0ff9306b3 100644
--- a/package.json
+++ b/package.json
@@ -5,8 +5,8 @@
"main": "index.js",
"scripts": {
"start": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev -- src/server/index.ts",
- "debug": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --inspect -- src/server/index.ts",
- "build": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --env production",
+ "debug": "cross-env NODE_OPTIONS=--max_old_space_size=8192 ts-node-dev --inspect -- src/server/index.ts",
+ "build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 webpack --env production",
"test": "mocha -r ts-node/register test/**/*.ts",
"tsc": "tsc"
},
@@ -51,7 +51,9 @@
"@hig/theme-context": "^2.1.3",
"@hig/theme-data": "^2.3.3",
"@trendmicro/react-dropdown": "^1.3.0",
+ "@types/adm-zip": "^0.4.32",
"@types/animejs": "^2.0.2",
+ "@types/archiver": "^3.0.0",
"@types/async": "^2.4.1",
"@types/bcrypt-nodejs": "0.0.30",
"@types/bluebird": "^3.5.25",
@@ -91,6 +93,7 @@
"@types/prosemirror-transform": "^1.1.0",
"@types/prosemirror-view": "^1.3.1",
"@types/pug": "^2.0.4",
+ "@types/rc-switch": "^1.8.0",
"@types/react": "^16.8.7",
"@types/react-autosuggest": "^9.3.9",
"@types/react-color": "^2.14.1",
@@ -99,12 +102,15 @@
"@types/request": "^2.48.1",
"@types/request-promise": "^4.1.42",
"@types/sharp": "^0.22.2",
+ "@types/shelljs": "^0.8.5",
"@types/socket.io": "^2.1.2",
"@types/socket.io-client": "^1.4.32",
"@types/typescript": "^2.0.0",
"@types/uuid": "^3.4.4",
"@types/webpack": "^4.4.25",
"@types/youtube": "0.0.38",
+ "adm-zip": "^0.4.13",
+ "archiver": "^3.0.3",
"async": "^2.6.2",
"babel-runtime": "^6.26.0",
"bcrypt-nodejs": "0.0.3",
@@ -160,8 +166,10 @@
"passport-local": "^1.0.0",
"pdfjs-dist": "^2.0.943",
"probe-image-size": "^4.0.0",
+ "prosemirror": "^0.11.1",
"prosemirror-commands": "^1.0.7",
"prosemirror-example-setup": "^1.0.1",
+ "prosemirror-find-replace": "^0.9.0",
"prosemirror-history": "^1.0.4",
"prosemirror-keymap": "^1.0.1",
"prosemirror-model": "^1.7.0",
@@ -173,6 +181,7 @@
"pug": "^2.0.3",
"query-string": "^6.8.1",
"raw-loader": "^1.0.0",
+ "rc-switch": "^1.9.0",
"react": "^16.8.4",
"react-anime": "^2.2.0",
"react-autosuggest": "^9.4.3",
@@ -197,9 +206,10 @@
"request-promise": "^4.2.4",
"serializr": "^1.5.1",
"sharp": "^0.22.1",
+ "shelljs": "^0.8.3",
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0",
- "solr-node": "^1.1.3",
+ "solr-node": "^1.2.1",
"standard-http-error": "^2.0.1",
"typescript-collections": "^1.3.2",
"url-loader": "^1.1.2",
diff --git a/report.20190510.131414.316.001.json b/report.20190510.131414.316.001.json
new file mode 100644
index 000000000..390db8ba6
--- /dev/null
+++ b/report.20190510.131414.316.001.json
@@ -0,0 +1,592 @@
+
+{
+ "header": {
+ "event": "Allocation failed - JavaScript heap out of memory",
+ "trigger": "FatalError",
+ "filename": "report.20190510.131414.316.001.json",
+ "dumpEventTime": "2019-05-10T13:14:14Z",
+ "processId": 316,
+ "commandLine": [
+ "C:\\Program Files\\nodejs\\node.exe",
+ "--max-old-space-size=2048",
+ "C:\\Users\\dash\\Documents\\Dash-Web\\node_modules\\ts-node-dev\\lib\\wrap.js",
+ "C:\\Users\\dash\\Documents\\Dash-Web\\node_modules\\fork-ts-checker-webpack-plugin\\lib\\service.js"
+ ],
+ "nodejsVersion": "v11.11.0",
+ "wordSize": 64,
+ "arch": "x64",
+ "platform": "win32",
+ "componentVersions": {
+ "node": "11.11.0",
+ "v8": "7.0.276.38-node.18",
+ "uv": "1.26.0",
+ "zlib": "1.2.11",
+ "brotli": "1.0.7",
+ "ares": "1.15.0",
+ "modules": "67",
+ "nghttp2": "1.34.0",
+ "napi": "4",
+ "llhttp": "1.1.1",
+ "http_parser": "2.8.0",
+ "openssl": "1.1.1a",
+ "cldr": "34.0",
+ "icu": "63.1",
+ "tz": "2018e",
+ "unicode": "11.0"
+ },
+ "release": {
+ "name": "node",
+ "headersUrl": "https://nodejs.org/download/release/v11.11.0/node-v11.11.0-headers.tar.gz",
+ "sourceUrl": "https://nodejs.org/download/release/v11.11.0/node-v11.11.0.tar.gz",
+ "libUrl": "https://nodejs.org/download/release/v11.11.0/win-x64/node.lib"
+ },
+ "osName": "Windows_NT",
+ "osRelease": "10.0.14393",
+ "osVersion": "Windows Server 2016 Datacenter",
+ "osMachine": "x86_64",
+ "host": "dashserver"
+ },
+ "javascriptStack": {
+ "message": "No stack.",
+ "stack": [
+ "Unavailable."
+ ]
+ },
+ "nativeStack": [
+ {
+ "pc": "0x00007ff6d814bc4e",
+ "symbol": "SSL_SESSION_get0_peer+15022"
+ },
+ {
+ "pc": "0x00007ff6d814ab04",
+ "symbol": "SSL_SESSION_get0_peer+10596"
+ },
+ {
+ "pc": "0x00007ff6d814a336",
+ "symbol": "SSL_SESSION_get0_peer+8598"
+ },
+ {
+ "pc": "0x00007ff6d823703a",
+ "symbol": "uv_loop_fork+86202"
+ },
+ {
+ "pc": "0x00007ff6d861e49e",
+ "symbol": "v8::internal::FatalProcessOutOfMemory+798"
+ },
+ {
+ "pc": "0x00007ff6d861e3d7",
+ "symbol": "v8::internal::FatalProcessOutOfMemory+599"
+ },
+ {
+ "pc": "0x00007ff6d86c91a4",
+ "symbol": "v8::internal::Heap::RootIsImmortalImmovable+14068"
+ },
+ {
+ "pc": "0x00007ff6d86befc8",
+ "symbol": "v8::internal::Heap::CollectGarbage+7256"
+ },
+ {
+ "pc": "0x00007ff6d86bd7c8",
+ "symbol": "v8::internal::Heap::CollectGarbage+1112"
+ },
+ {
+ "pc": "0x00007ff6d86c70f7",
+ "symbol": "v8::internal::Heap::RootIsImmortalImmovable+5703"
+ },
+ {
+ "pc": "0x00007ff6d86c7176",
+ "symbol": "v8::internal::Heap::RootIsImmortalImmovable+5830"
+ },
+ {
+ "pc": "0x00007ff6d8848481",
+ "symbol": "v8::internal::Factory::NewFillerObject+49"
+ },
+ {
+ "pc": "0x00007ff6d88fdbb6",
+ "symbol": "v8::internal::StoreBuffer::StoreBufferOverflow+27190"
+ },
+ {
+ "pc": "0x0000033e2e4d0481",
+ "symbol": ""
+ }
+ ],
+ "javascriptHeap": {
+ "totalMemory": 380211200,
+ "totalCommittedMemory": 380211200,
+ "usedMemory": 365246984,
+ "availableMemory": 1844483352,
+ "memoryLimit": 2217857988,
+ "heapSpaces": {
+ "read_only_space": {
+ "memorySize": 524288,
+ "committedMemory": 524288,
+ "capacity": 515584,
+ "used": 33520,
+ "available": 482064
+ },
+ "new_space": {
+ "memorySize": 1048576,
+ "committedMemory": 1048576,
+ "capacity": 1031168,
+ "used": 1031088,
+ "available": 80
+ },
+ "old_space": {
+ "memorySize": 341512192,
+ "committedMemory": 341512192,
+ "capacity": 335760416,
+ "used": 329680232,
+ "available": 6080184
+ },
+ "code_space": {
+ "memorySize": 4194304,
+ "committedMemory": 4194304,
+ "capacity": 3775360,
+ "used": 3762688,
+ "available": 12672
+ },
+ "map_space": {
+ "memorySize": 1585152,
+ "committedMemory": 1585152,
+ "capacity": 1550096,
+ "used": 852880,
+ "available": 697216
+ },
+ "large_object_space": {
+ "memorySize": 31346688,
+ "committedMemory": 31346688,
+ "capacity": 1867097712,
+ "used": 29886576,
+ "available": 1837211136
+ },
+ "new_large_object_space": {
+ "memorySize": 0,
+ "committedMemory": 0,
+ "capacity": 0,
+ "used": 0,
+ "available": 0
+ }
+ }
+ },
+ "libuv": [
+ ],
+ "environmentVariables": {
+ "ACLOCAL_PATH": "C:\\Program Files\\Git\\mingw64\\share\\aclocal;C:\\Program Files\\Git\\usr\\share\\aclocal",
+ "ALLUSERSPROFILE": "C:\\ProgramData",
+ "APPDATA": "C:\\Users\\dash\\AppData\\Roaming",
+ "CHECK_SYNTACTIC_ERRORS": "false",
+ "CLIENTNAME": "DESKTOP-7P5JHEB",
+ "COMMONPROGRAMFILES": "C:\\Program Files\\Common Files",
+ "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files",
+ "CommonProgramW6432": "C:\\Program Files\\Common Files",
+ "COMPILER_OPTIONS": "{}",
+ "COMPUTERNAME": "dashserver",
+ "COMSPEC": "C:\\Windows\\system32\\cmd.exe",
+ "CONFIG_SITE": "C:/Program Files/Git/mingw64/etc/config.site",
+ "CONTEXT": "C:\\Users\\dash\\Documents\\Dash-Web",
+ "DISPLAY": "needs-to-be-defined",
+ "EXEPATH": "C:\\Program Files\\Git",
+ "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer",
+ "FPS_BROWSER_USER_PROFILE_STRING": "Default",
+ "HOME": "C:\\Users\\dash",
+ "HOMEDRIVE": "C:",
+ "HOMEPATH": "\\Users\\dash",
+ "HOSTNAME": "dashserver",
+ "INFOPATH": "C:\\Program Files\\Git\\usr\\local\\info;C:\\Program Files\\Git\\usr\\share\\info;C:\\Program Files\\Git\\usr\\info;C:\\Program Files\\Git\\share\\info",
+ "INIT_CWD": "C:\\Users\\dash\\Documents\\Dash-Web",
+ "LANG": "en_US.UTF-8",
+ "LOCALAPPDATA": "C:\\Users\\dash\\AppData\\Local",
+ "LOGONSERVER": "\\\\dashserver",
+ "MANPATH": "C:\\Program Files\\Git\\mingw64\\local\\man;C:\\Program Files\\Git\\mingw64\\share\\man;C:\\Program Files\\Git\\usr\\local\\man;C:\\Program Files\\Git\\usr\\share\\man;C:\\Program Files\\Git\\usr\\man;C:\\Program Files\\Git\\share\\man",
+ "MEMORY_LIMIT": "2048",
+ "MINGW_CHOST": "x86_64-w64-mingw32",
+ "MINGW_PACKAGE_PREFIX": "mingw-w64-x86_64",
+ "MINGW_PREFIX": "C:/Program Files/Git/mingw64",
+ "MSYSTEM": "MINGW64",
+ "MSYSTEM_CARCH": "x86_64",
+ "MSYSTEM_CHOST": "x86_64-w64-mingw32",
+ "MSYSTEM_PREFIX": "C:/Program Files/Git/mingw64",
+ "NODE": "C:\\Program Files\\nodejs\\node.exe",
+ "NODE_ENV": "development",
+ "npm_config_access": "",
+ "npm_config_allow_same_version": "",
+ "npm_config_also": "",
+ "npm_config_always_auth": "",
+ "npm_config_argv": "{\"remain\":[],\"cooked\":[\"start\"],\"original\":[\"start\"]}",
+ "npm_config_audit": "true",
+ "npm_config_audit_level": "low",
+ "npm_config_auth_type": "legacy",
+ "npm_config_bin_links": "true",
+ "npm_config_browser": "",
+ "npm_config_ca": "",
+ "npm_config_cache": "C:\\Users\\dash\\AppData\\Roaming\\npm-cache",
+ "npm_config_cache_lock_retries": "10",
+ "npm_config_cache_lock_stale": "60000",
+ "npm_config_cache_lock_wait": "10000",
+ "npm_config_cache_max": "Infinity",
+ "npm_config_cache_min": "10",
+ "npm_config_cafile": "",
+ "npm_config_cert": "",
+ "npm_config_cidr": "",
+ "npm_config_color": "true",
+ "npm_config_commit_hooks": "true",
+ "npm_config_depth": "Infinity",
+ "npm_config_description": "true",
+ "npm_config_dev": "",
+ "npm_config_dry_run": "",
+ "npm_config_editor": "notepad.exe",
+ "npm_config_engine_strict": "",
+ "npm_config_fetch_retries": "2",
+ "npm_config_fetch_retry_factor": "10",
+ "npm_config_fetch_retry_maxtimeout": "60000",
+ "npm_config_fetch_retry_mintimeout": "10000",
+ "npm_config_force": "",
+ "npm_config_git": "git",
+ "npm_config_git_tag_version": "true",
+ "npm_config_global": "",
+ "npm_config_globalconfig": "C:\\Users\\dash\\AppData\\Roaming\\npm\\etc\\npmrc",
+ "npm_config_globalignorefile": "C:\\Users\\dash\\AppData\\Roaming\\npm\\etc\\npmignore",
+ "npm_config_global_style": "",
+ "npm_config_group": "",
+ "npm_config_ham_it_up": "",
+ "npm_config_heading": "npm",
+ "npm_config_https_proxy": "",
+ "npm_config_if_present": "",
+ "npm_config_ignore_prepublish": "",
+ "npm_config_ignore_scripts": "",
+ "npm_config_init_author_email": "",
+ "npm_config_init_author_name": "",
+ "npm_config_init_author_url": "",
+ "npm_config_init_license": "ISC",
+ "npm_config_init_module": "C:\\Users\\dash\\.npm-init.js",
+ "npm_config_init_version": "1.0.0",
+ "npm_config_json": "",
+ "npm_config_key": "",
+ "npm_config_legacy_bundling": "",
+ "npm_config_link": "",
+ "npm_config_local_address": "",
+ "npm_config_loglevel": "notice",
+ "npm_config_logs_max": "10",
+ "npm_config_long": "",
+ "npm_config_maxsockets": "50",
+ "npm_config_message": "%s",
+ "npm_config_metrics_registry": "https://registry.npmjs.org/",
+ "npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
+ "npm_config_node_options": "",
+ "npm_config_node_version": "11.11.0",
+ "npm_config_noproxy": "",
+ "npm_config_offline": "",
+ "npm_config_onload_script": "",
+ "npm_config_only": "",
+ "npm_config_optional": "true",
+ "npm_config_otp": "",
+ "npm_config_package_lock": "true",
+ "npm_config_package_lock_only": "",
+ "npm_config_parseable": "",
+ "npm_config_prefer_offline": "",
+ "npm_config_prefer_online": "",
+ "npm_config_prefix": "C:\\Users\\dash\\AppData\\Roaming\\npm",
+ "npm_config_preid": "",
+ "npm_config_production": "",
+ "npm_config_progress": "true",
+ "npm_config_proxy": "",
+ "npm_config_read_only": "",
+ "npm_config_rebuild_bundle": "true",
+ "npm_config_registry": "https://registry.npmjs.org/",
+ "npm_config_rollback": "true",
+ "npm_config_save": "true",
+ "npm_config_save_bundle": "",
+ "npm_config_save_dev": "",
+ "npm_config_save_exact": "",
+ "npm_config_save_optional": "",
+ "npm_config_save_prefix": "^",
+ "npm_config_save_prod": "",
+ "npm_config_scope": "",
+ "npm_config_scripts_prepend_node_path": "warn-only",
+ "npm_config_script_shell": "",
+ "npm_config_searchexclude": "",
+ "npm_config_searchlimit": "20",
+ "npm_config_searchopts": "",
+ "npm_config_searchstaleness": "900",
+ "npm_config_send_metrics": "",
+ "npm_config_shell": "C:\\Windows\\system32\\cmd.exe",
+ "npm_config_shrinkwrap": "true",
+ "npm_config_sign_git_commit": "",
+ "npm_config_sign_git_tag": "",
+ "npm_config_sso_poll_frequency": "500",
+ "npm_config_sso_type": "oauth",
+ "npm_config_strict_ssl": "true",
+ "npm_config_tag": "latest",
+ "npm_config_tag_version_prefix": "v",
+ "npm_config_timing": "",
+ "npm_config_tmp": "C:\\Users\\dash\\AppData\\Local\\Temp\\2",
+ "npm_config_umask": "0000",
+ "npm_config_unicode": "",
+ "npm_config_unsafe_perm": "true",
+ "npm_config_update_notifier": "true",
+ "npm_config_usage": "",
+ "npm_config_user": "",
+ "npm_config_userconfig": "C:\\Users\\dash\\.npmrc",
+ "npm_config_user_agent": "npm/6.7.0 node/v11.11.0 win32 x64",
+ "npm_config_version": "",
+ "npm_config_versions": "",
+ "npm_config_viewer": "browser",
+ "npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js",
+ "npm_lifecycle_event": "start",
+ "npm_lifecycle_script": "ts-node-dev -- src/server/index.ts",
+ "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe",
+ "npm_package_dependencies_async": "^2.6.2",
+ "npm_package_dependencies_babel_runtime": "^6.26.0",
+ "npm_package_dependencies_bcrypt_nodejs": "0.0.3",
+ "npm_package_dependencies_bluebird": "^3.5.3",
+ "npm_package_dependencies_body_parser": "^1.18.3",
+ "npm_package_dependencies_bootstrap": "^4.3.1",
+ "npm_package_dependencies_class_transformer": "^0.2.0",
+ "npm_package_dependencies_connect_flash": "^0.1.1",
+ "npm_package_dependencies_connect_mongo": "^2.0.3",
+ "npm_package_dependencies_cookie_parser": "^1.4.4",
+ "npm_package_dependencies_cookie_session": "^2.0.0-beta.3",
+ "npm_package_dependencies_crypto_browserify": "^3.11.0",
+ "npm_package_dependencies_d3_format": "^1.3.2",
+ "npm_package_dependencies_express": "^4.16.4",
+ "npm_package_dependencies_expressjs": "^1.0.1",
+ "npm_package_dependencies_express_flash": "0.0.2",
+ "npm_package_dependencies_express_session": "^1.15.6",
+ "npm_package_dependencies_express_validator": "^5.3.1",
+ "npm_package_dependencies_flexlayout_react": "^0.3.3",
+ "npm_package_dependencies_font_awesome": "^4.7.0",
+ "npm_package_dependencies_formidable": "^1.2.1",
+ "npm_package_dependencies_golden_layout": "^1.5.9",
+ "npm_package_dependencies_html_to_image": "^0.1.0",
+ "npm_package_dependencies_i": "^0.3.6",
+ "npm_package_dependencies_jsonwebtoken": "^8.5.0",
+ "npm_package_dependencies_jsx_to_string": "^1.4.0",
+ "npm_package_dependencies_lodash": "^4.17.11",
+ "npm_package_dependencies_mobile_detect": "^1.4.3",
+ "npm_package_dependencies_mobx": "^5.9.0",
+ "npm_package_dependencies_mobx_react": "^5.3.5",
+ "npm_package_dependencies_mobx_react_devtools": "^6.1.1",
+ "npm_package_dependencies_mongodb": "^3.1.13",
+ "npm_package_dependencies_mongoose": "^5.4.18",
+ "npm_package_dependencies_nodemailer": "^5.1.1",
+ "npm_package_dependencies_nodemon": "^1.18.10",
+ "npm_package_dependencies_node_sass": "^4.12.0",
+ "npm_package_dependencies_normalize_css": "^8.0.1",
+ "npm_package_dependencies_npm": "^6.9.0",
+ "npm_package_dependencies_passport": "^0.4.0",
+ "npm_package_dependencies_passport_local": "^1.0.0",
+ "npm_package_dependencies_prosemirror_commands": "^1.0.7",
+ "npm_package_dependencies_prosemirror_example_setup": "^1.0.1",
+ "npm_package_dependencies_prosemirror_history": "^1.0.4",
+ "npm_package_dependencies_prosemirror_keymap": "^1.0.1",
+ "npm_package_dependencies_prosemirror_model": "^1.7.0",
+ "npm_package_dependencies_prosemirror_schema_basic": "^1.0.0",
+ "npm_package_dependencies_prosemirror_schema_list": "^1.0.2",
+ "npm_package_dependencies_prosemirror_state": "^1.2.2",
+ "npm_package_dependencies_prosemirror_transform": "^1.1.3",
+ "npm_package_dependencies_prosemirror_view": "^1.8.3",
+ "npm_package_dependencies_pug": "^2.0.3",
+ "npm_package_dependencies_raw_loader": "^1.0.0",
+ "npm_package_dependencies_react": "^16.8.4",
+ "npm_package_dependencies_react_bootstrap": "^1.0.0-beta.5",
+ "npm_package_dependencies_react_bootstrap_dropdown_menu": "^1.1.15",
+ "npm_package_dependencies_react_color": "^2.17.0",
+ "npm_package_dependencies_react_dimensions": "^1.3.1",
+ "npm_package_dependencies_react_dom": "^16.8.4",
+ "npm_package_dependencies_react_golden_layout": "^1.0.6",
+ "npm_package_dependencies_react_image_lightbox": "^5.1.0",
+ "npm_package_dependencies_react_jsx_parser": "^1.15.0",
+ "npm_package_dependencies_react_measure": "^2.2.4",
+ "npm_package_dependencies_react_mosaic": "0.0.20",
+ "npm_package_dependencies_react_pdf": "^4.0.2",
+ "npm_package_dependencies_react_pdf_highlighter": "^2.1.2",
+ "npm_package_dependencies_react_pdf_js": "^4.0.2",
+ "npm_package_dependencies_react_simple_dropdown": "^3.2.3",
+ "npm_package_dependencies_react_split_pane": "^0.1.85",
+ "npm_package_dependencies_react_table": "^6.9.2",
+ "npm_package_dependencies_request": "^2.88.0",
+ "npm_package_dependencies_request_promise": "^4.2.4",
+ "npm_package_dependencies_serializr": "^1.5.1",
+ "npm_package_dependencies_socket_io": "^2.2.0",
+ "npm_package_dependencies_socket_io_client": "^2.2.0",
+ "npm_package_dependencies_solr_node": "^1.1.3",
+ "npm_package_dependencies_typescript_collections": "^1.3.2",
+ "npm_package_dependencies_url_loader": "^1.1.2",
+ "npm_package_dependencies_uuid": "^3.3.2",
+ "npm_package_dependencies_xoauth2": "^1.2.0",
+ "npm_package_dependencies__fortawesome_fontawesome_free_solid": "^5.0.13",
+ "npm_package_dependencies__fortawesome_fontawesome_svg_core": "^1.2.15",
+ "npm_package_dependencies__fortawesome_free_solid_svg_icons": "^5.7.2",
+ "npm_package_dependencies__fortawesome_react_fontawesome": "^0.1.4",
+ "npm_package_dependencies__hig_flyout": "^1.0.3",
+ "npm_package_dependencies__hig_theme_context": "^2.1.3",
+ "npm_package_dependencies__hig_theme_data": "^2.3.3",
+ "npm_package_dependencies__trendmicro_react_dropdown": "^1.3.0",
+ "npm_package_dependencies__types_async": "^2.4.1",
+ "npm_package_dependencies__types_bcrypt_nodejs": "0.0.30",
+ "npm_package_dependencies__types_bluebird": "^3.5.25",
+ "npm_package_dependencies__types_body_parser": "^1.17.0",
+ "npm_package_dependencies__types_connect_flash": "0.0.34",
+ "npm_package_dependencies__types_cookie_parser": "^1.4.1",
+ "npm_package_dependencies__types_cookie_session": "^2.0.36",
+ "npm_package_dependencies__types_d3_format": "^1.3.1",
+ "npm_package_dependencies__types_express": "^4.16.1",
+ "npm_package_dependencies__types_express_flash": "0.0.0",
+ "npm_package_dependencies__types_express_session": "^1.15.12",
+ "npm_package_dependencies__types_express_validator": "^3.0.0",
+ "npm_package_dependencies__types_formidable": "^1.0.31",
+ "npm_package_dependencies__types_jquery": "^3.3.29",
+ "npm_package_dependencies__types_jsonwebtoken": "^8.3.2",
+ "npm_package_dependencies__types_lodash": "^4.14.121",
+ "npm_package_dependencies__types_mobile_detect": "^1.3.4",
+ "npm_package_dependencies__types_mongodb": "^3.1.22",
+ "npm_package_dependencies__types_mongoose": "^5.3.21",
+ "npm_package_dependencies__types_node": "^10.12.30",
+ "npm_package_dependencies__types_nodemailer": "^4.6.6",
+ "npm_package_dependencies__types_passport": "^1.0.0",
+ "npm_package_dependencies__types_passport_local": "^1.0.33",
+ "npm_package_dependencies__types_prosemirror_commands": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_history": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_inputrules": "^1.0.2",
+ "npm_package_dependencies__types_prosemirror_keymap": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_menu": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_model": "^1.7.0",
+ "npm_package_dependencies__types_prosemirror_schema_basic": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_schema_list": "^1.0.1",
+ "npm_package_dependencies__types_prosemirror_state": "^1.2.3",
+ "npm_package_dependencies__types_prosemirror_transform": "^1.1.0",
+ "npm_package_dependencies__types_prosemirror_view": "^1.3.1",
+ "npm_package_dependencies__types_pug": "^2.0.4",
+ "npm_package_dependencies__types_react": "^16.8.7",
+ "npm_package_dependencies__types_react_color": "^2.14.1",
+ "npm_package_dependencies__types_react_measure": "^2.0.4",
+ "npm_package_dependencies__types_react_table": "^6.7.22",
+ "npm_package_dependencies__types_request": "^2.48.1",
+ "npm_package_dependencies__types_request_promise": "^4.1.42",
+ "npm_package_dependencies__types_socket_io": "^2.1.2",
+ "npm_package_dependencies__types_socket_io_client": "^1.4.32",
+ "npm_package_dependencies__types_typescript": "^2.0.0",
+ "npm_package_dependencies__types_uuid": "^3.4.4",
+ "npm_package_dependencies__types_webpack": "^4.4.25",
+ "npm_package_description": "Install Node.js, then, from the project directory, run",
+ "npm_package_devDependencies_awesome_typescript_loader": "^5.2.1",
+ "npm_package_devDependencies_chai": "^4.2.0",
+ "npm_package_devDependencies_copy_webpack_plugin": "^4.6.0",
+ "npm_package_devDependencies_css_loader": "^2.1.1",
+ "npm_package_devDependencies_file_loader": "^3.0.1",
+ "npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^1.0.2",
+ "npm_package_devDependencies_mocha": "^5.2.0",
+ "npm_package_devDependencies_sass_loader": "^7.1.0",
+ "npm_package_devDependencies_scss_loader": "0.0.1",
+ "npm_package_devDependencies_style_loader": "^0.23.1",
+ "npm_package_devDependencies_tslint": "^5.15.0",
+ "npm_package_devDependencies_tslint_loader": "^3.5.4",
+ "npm_package_devDependencies_ts_loader": "^5.3.3",
+ "npm_package_devDependencies_ts_node": "^7.0.1",
+ "npm_package_devDependencies_ts_node_dev": "^1.0.0-pre.32",
+ "npm_package_devDependencies_typescript": "^3.4.1",
+ "npm_package_devDependencies_webpack": "^4.29.6",
+ "npm_package_devDependencies_webpack_cli": "^3.2.3",
+ "npm_package_devDependencies_webpack_dev_middleware": "^3.6.1",
+ "npm_package_devDependencies_webpack_dev_server": "^3.3.1",
+ "npm_package_devDependencies_webpack_hot_middleware": "^2.24.3",
+ "npm_package_devDependencies__types_chai": "^4.1.7",
+ "npm_package_devDependencies__types_mocha": "^5.2.6",
+ "npm_package_devDependencies__types_react_dom": "^16.8.2",
+ "npm_package_devDependencies__types_webpack_dev_middleware": "^2.0.2",
+ "npm_package_devDependencies__types_webpack_hot_middleware": "^2.16.4",
+ "npm_package_gitHead": "f38d2de249ddf2cad533e2f92197738835688a73",
+ "npm_package_main": "index.js",
+ "npm_package_name": "dash",
+ "npm_package_readmeFilename": "README.md",
+ "npm_package_scripts_build": "webpack --env production",
+ "npm_package_scripts_debug": "ts-node-dev --inspect -- src/server/index.ts",
+ "npm_package_scripts_start": "ts-node-dev -- src/server/index.ts",
+ "npm_package_scripts_test": "mocha -r ts-node/register test/**/*.ts",
+ "npm_package_scripts_tsc": "tsc",
+ "npm_package_version": "1.0.0",
+ "NUMBER_OF_PROCESSORS": "1",
+ "OLDPWD": "C:/Program Files/Git/",
+ "ORIGINAL_PATH": "C:\\Program Files\\Git\\mingw64\\bin;C:\\Program Files\\Git\\usr\\bin;C:\\Users\\dash\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0;C:\\Program Files\\Microsoft\\Web Platform Installer;C:\\Program Files\\Microsoft SQL Server\\130\\Tools\\Binn;C:\\Program Files\\dotnet;C:\\Program Files\\nodejs;C:\\Users\\dash\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\dash\\AppData\\Roaming\\npm",
+ "ORIGINAL_TEMP": "C:/Users/dash/AppData/Local/Temp/2",
+ "ORIGINAL_TMP": "C:/Users/dash/AppData/Local/Temp/2",
+ "OS": "Windows_NT",
+ "PATH": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;C:\\Users\\dash\\Documents\\Dash-Web\\node_modules\\.bin;C:\\Users\\dash\\bin;C:\\Program Files\\Git\\mingw64\\bin;C:\\Program Files\\Git\\usr\\local\\bin;C:\\Program Files\\Git\\usr\\bin;C:\\Program Files\\Git\\usr\\bin;C:\\Program Files\\Git\\mingw64\\bin;C:\\Program Files\\Git\\usr\\bin;C:\\Users\\dash\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0;C:\\Program Files\\Microsoft\\Web Platform Installer;C:\\Program Files\\Microsoft SQL Server\\130\\Tools\\Binn;C:\\Program Files\\dotnet;C:\\Program Files\\nodejs;C:\\Users\\dash\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\dash\\AppData\\Roaming\\npm;C:\\Program Files\\Git\\usr\\bin\\vendor_perl;C:\\Program Files\\Git\\usr\\bin\\core_perl",
+ "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC",
+ "PKG_CONFIG_PATH": "C:\\Program Files\\Git\\mingw64\\lib\\pkgconfig;C:\\Program Files\\Git\\mingw64\\share\\pkgconfig",
+ "PLINK_PROTOCOL": "ssh",
+ "PROCESSOR_ARCHITECTURE": "AMD64",
+ "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 63 Stepping 2, GenuineIntel",
+ "PROCESSOR_LEVEL": "6",
+ "PROCESSOR_REVISION": "3f02",
+ "ProgramData": "C:\\ProgramData",
+ "PROGRAMFILES": "C:\\Program Files",
+ "ProgramFiles(x86)": "C:\\Program Files (x86)",
+ "ProgramW6432": "C:\\Program Files",
+ "PROMPT": "$P$G",
+ "PSModulePath": "C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules\\;C:\\Program Files (x86)\\Microsoft SDKs\\Azure\\PowerShell\\ResourceManager\\AzureResourceManager\\;C:\\Program Files (x86)\\Microsoft SDKs\\Azure\\PowerShell\\ServiceManagement\\;C:\\Program Files (x86)\\Microsoft SDKs\\Azure\\PowerShell\\Storage\\",
+ "PUBLIC": "C:\\Users\\Public",
+ "PWD": "C:/Users/dash/Documents/Dash-Web",
+ "SESSIONNAME": "RDP-Tcp#0",
+ "SHELL": "C:\\Program Files\\Git\\usr\\bin\\bash.exe",
+ "SHLVL": "2",
+ "SSH_ASKPASS": "C:/Program Files/Git/mingw64/libexec/git-core/git-gui--askpass",
+ "SYSTEMDRIVE": "C:",
+ "SYSTEMROOT": "C:\\Windows",
+ "TEMP": "C:\\Users\\dash\\AppData\\Local\\Temp\\2",
+ "TERM": "xterm",
+ "TMP": "C:\\Users\\dash\\AppData\\Local\\Temp\\2",
+ "TMPDIR": "C:\\Users\\dash\\AppData\\Local\\Temp\\2",
+ "TSCONFIG": "C:\\Users\\dash\\Documents\\Dash-Web\\tsconfig.json",
+ "TSLINT": "true",
+ "TSLINTAUTOFIX": "false",
+ "TYPESCRIPT_PATH": "C:\\Users\\dash\\Documents\\Dash-Web\\node_modules\\typescript\\lib\\typescript.js",
+ "USERDOMAIN": "dashserver",
+ "USERDOMAIN_ROAMINGPROFILE": "dashserver",
+ "USERNAME": "dash",
+ "USERPROFILE": "C:\\Users\\dash",
+ "USE_INCREMENTAL_API": "true",
+ "VUE": "false",
+ "WATCH": "",
+ "WINDIR": "C:\\Windows",
+ "WORK_DIVISION": "1",
+ "_": "C:/Program Files/nodejs/node.exe"
+ },
+ "sharedObjects": [
+ "C:\\Program Files\\nodejs\\node.exe",
+ "C:\\Windows\\SYSTEM32\\ntdll.dll",
+ "C:\\Windows\\System32\\KERNEL32.DLL",
+ "C:\\Windows\\System32\\KERNELBASE.dll",
+ "C:\\Windows\\System32\\PSAPI.DLL",
+ "C:\\Windows\\System32\\WS2_32.dll",
+ "C:\\Windows\\System32\\sechost.dll",
+ "C:\\Windows\\System32\\RPCRT4.dll",
+ "C:\\Windows\\System32\\ADVAPI32.dll",
+ "C:\\Windows\\System32\\msvcrt.dll",
+ "C:\\Windows\\System32\\USER32.dll",
+ "C:\\Windows\\System32\\win32u.dll",
+ "C:\\Windows\\System32\\GDI32.dll",
+ "C:\\Windows\\System32\\gdi32full.dll",
+ "C:\\Windows\\System32\\CRYPT32.dll",
+ "C:\\Windows\\System32\\ucrtbase.dll",
+ "C:\\Windows\\System32\\MSASN1.dll",
+ "C:\\Windows\\SYSTEM32\\dbghelp.dll",
+ "C:\\Windows\\SYSTEM32\\IPHLPAPI.DLL",
+ "C:\\Windows\\SYSTEM32\\USERENV.dll",
+ "C:\\Windows\\System32\\profapi.dll",
+ "C:\\Windows\\SYSTEM32\\bcrypt.dll",
+ "C:\\Windows\\SYSTEM32\\WINMM.dll",
+ "C:\\Windows\\SYSTEM32\\WINMMBASE.dll",
+ "C:\\Windows\\System32\\cfgmgr32.dll",
+ "C:\\Windows\\System32\\IMM32.DLL",
+ "C:\\Windows\\System32\\powrprof.dll",
+ "C:\\Windows\\system32\\mswsock.dll",
+ "C:\\Windows\\System32\\kernel.appcore.dll",
+ "C:\\Windows\\System32\\bcryptprimitives.dll",
+ "C:\\Windows\\system32\\napinsp.dll",
+ "C:\\Windows\\SYSTEM32\\DNSAPI.dll",
+ "C:\\Windows\\System32\\NSI.dll",
+ "C:\\Windows\\System32\\winrnr.dll",
+ "C:\\Windows\\system32\\NLAapi.dll"
+ ]
+} \ No newline at end of file
diff --git a/savedLog.txt b/savedLog.txt
new file mode 100644
index 000000000..5b7c5b2d3
--- /dev/null
+++ b/savedLog.txt
@@ -0,0 +1,13 @@
+Incoming : a1158484-13d0-4861-b873-b9d33f476338, receiving Set Field with data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":0}
+calling update on data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":0}
+called update on data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":0}
+Incoming : a1158484-13d0-4861-b873-b9d33f476338, receiving Set Field with data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":1}
+calling update on data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":1}
+called update on data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":1}
+{"n":1,"nModified":0,"upserted":[{"index":0,"_id":"a1158484-13d0-4861-b873-b9d33f476338"}],"ok":1}
+Wrote {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":1}
+Broadcast : a1158484-13d0-4861-b873-b9d33f476338, sending data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":1}
+Wrote {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":0}
+Broadcast : a1158484-13d0-4861-b873-b9d33f476338, sending data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","type":0,"data":0}
+S sending : a1158484-13d0-4861-b873-b9d33f476338, receiving Get Field with data {"_id":"a1158484-13d0-4861-b873-b9d33f476338","data":0,"type":0}
+
diff --git a/solr-8.1.1/CHANGES.txt b/solr-8.1.1/CHANGES.txt
new file mode 100644
index 000000000..15959bb6b
--- /dev/null
+++ b/solr-8.1.1/CHANGES.txt
@@ -0,0 +1,18889 @@
+ Apache Solr Release Notes
+
+Introduction
+------------
+Apache Solr is an open source enterprise search server based on the Apache Lucene Java
+search library, with XML/HTTP and JSON APIs, hit highlighting, faceted search,
+caching, replication, and a web administration interface.
+
+See http://lucene.apache.org/solr for more information.
+
+
+Getting Started
+---------------
+You need a Java 1.8 VM or later installed.
+In this release, there is an example Solr server including a bundled
+servlet container in the directory named "example".
+See the Solr tutorial at https://lucene.apache.org/solr/guide/solr-tutorial.html
+
+================== 8.1.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 2.0 and Velocity Tools 3.0
+Apache ZooKeeper 3.4.14
+Jetty 9.4.14.v20181114
+
+Bug Fixes
+----------------------
+* SOLR-13475: Null Pointer Exception when querying collection through collection alias. (Jörn Franke, ab)
+
+================== 8.1.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 2.0 and Velocity Tools 3.0
+Apache ZooKeeper 3.4.14
+Jetty 9.4.14.v20181114
+
+Upgrade Notes
+----------------------
+
+* Solr's default behavior when dealing with 'maxBooleanClauses' has changed to reduce the risk of exponential
+ query expansion when dealing with pathological query strings. A default upper limit of 1024 clauses
+ (The same default prior to Solr 7.0) is now enforced at the node level, and can be overridden in solr.xml.
+ The identically named solrconfig.xml setting is still available for limiting the size of 'explicit' boolean
+ query strings, but this per-collection limit is still ristricted by the upper-bound of the global limit
+ in solr.xml. See SOLR-13336 for more details.
+
+* When requesting the status of an async request via REQUESTSTATUS collections API, the response will
+ include the list of internal async requests (if any) in the "success" or "failed" keys (in addition
+ to them being included outside those keys for backwards compatibility). See SOLR-12708 for more
+ details
+
+* SOLR-12891: MacroExpander will no longer will expand URL parameters inside of the 'expr' parameter (used by streaming
+ expressions) Additionally, users are advised to use the 'InjectionDefense' class when constructing streaming
+ expressions that include user supplied data to avoid risks similar to SQL injection. The legacy behavior of
+ expanding the 'expr' parameter can be reinstated with -DStreamingExpressionMacros=true passed to the JVM at startup
+ (Gus Heck).
+
+* SOLR-13335: Velocity and Velocity Tools were both upgraded as part of this release. Velocity upgraded from 1.7 to 2.0.
+ Please see https://velocity.apache.org/engine/2.0/upgrading.html about upgrading. Velocity Tools upgraded from 2.0 to
+ 3.0. For more details, please see https://velocity.apache.org/tools/3.0/upgrading.html for details about the upgrade.
+
+* SOLR-13407: Update requests sent to non-routed aliases that point to multiple collections are no longer accepted. Until
+ now Solr followed an obscure convention of updating only the first collection from the list, which usually was not what
+ the user intended. This change explicitly rejects such update requests.
+
+* SolrGangliaReporter has been removed from Solr because support for Ganglia has been removed from Dropwizard Metrics 4
+ due to a transitive dependency on LGPL.
+
+* Custom TransientSolrCoreCache implementations no longer use the Observer/Observable pattern. To notify Solr that
+ a core has been aged out of the cache, call CoreContainer.queueCoreToClose(SolrCore). See SOLR-13400 for details.
+
+* SOLR-13394: The default GC has been changed from CMS to G1. To override this (in order to switch to CMS or any
+ other GC), use GC_TUNE section of bin/solr.in.sh or bin/solr.in.cmd.
+
+* SOLR-5970: Until now, the CREATE command of Collections API returned status 0 even in case of failure. Now, the status
+ code will be non-zero in case of failures (e.g. 4xx, 5xx).
+
+New Features
+----------------------
+* SOLR-13131: Category Routed Aliases are now available for data driven assignment of documents to collections based on
+ values of a field. The Ref Guide now has a page dedicated to explaining the different types of aliases. (Gus Heck,
+ Moshe Bla)
+
+* SOLR-13171 : A true streaming parser for javabin payload/stream without creating any objects (noble)
+
+* SOLR-13261: Make SortableTextField work with export/streaming. NOTE: requires that the field have
+ useDocValuesAsStored=true (either explicit or as the default).
+
+* SOLR-12121: JWT Token authentication plugin with OpenID Connect implicit flow login through Admin UI (janhoy)
+
+* SOLR-12120: New AuditLoggerPlugin type allowing custom Audit logger plugins (janhoy)
+
+* SOLR-10436: Add hashRollup Streaming Expression (Joel Bernstein)
+
+* SOLR-13276: Adding Http2 equivalent classes of CloudSolrClient and HttpClusterStateProvider (Cao Manh Dat)
+
+* SOLR-13287: Allow zplot to visualize probability distributions in Apache Zeppelin (Joel Bernstein)
+
+* SOLR-13271: Read-only mode for SolrCloud collections (ab, shalin)
+
+* SOLR-13292: Provide extended per-segment status of a collection. (ab)
+
+* SOLR-11127: REINDEXCOLLECTION command for re-indexing of existing collections. This issue also adds
+ a back-compat check of the .system collection to notify users of potential compatibility issues after
+ upgrades or schema changes. (ab)
+
+* SOLR-13374: Add fetchSize parameter to the jdbc Streaming Expression (Joel Bernstein)
+
+* SOLR-12638: Partial/Atomic Updates for nested documents. This enables atomic updates for nested documents, without
+ the need to supply the whole nested hierarchy (which would be overwritten if absent). This is done by fetching the
+ whole document hierarchy, updating the specific doc in the path that is to be updated, removing the old document
+ hierarchy and indexing the new one with the atomic update merged into it. Also, [child] Doc Transformer now works
+ with RealTimeGet. (Moshe Bla, David Smiley)
+
+* SOLR-13262: Add collection RENAME command and support using aliases in most collection admin commands. (ab)
+
+* SOLR-13391: Add variance and standard deviation stream evaluators (Nazerke Seidan, Joel Bernstein)
+
+* SOLR-13427: Support simulating the execution of autoscaling suggestions. (ab)
+
+Bug Fixes
+----------------------
+
+* SOLR-12330: 500 error code on json.facet syntax errors (Munendra S N, Mikhail Khludnev)
+
+* SOLR-13229: Cleanup replicasMetTragicEvent after all types of exception (Tomás Fernández Löbbe)
+
+* SOLR-11876: In-place update fails when resolving from Tlog if schema has a required field (Justin Deoliveira, janhoy,
+ Ishan Chattopadhyaya)
+
+* SOLR-12708: Async collection actions should not hide internal failures (Mano Kovacs, Varun Thacker, Tomás Fernández Löbbe)
+
+* SOLR-11883: 500 code on functional query syntax errors and parameter dereferencing errors
+(Munendra S N via Mikhail Khludnev)
+
+* SOLR-13285: Updates with enum fields and javabin cause ClassCastException (noble)
+
+* SOLR-13234: Prometheus Metric Exporter not threadsafe. This changes the prometheus exporter to collect metrics
+ from Solr on a fixed interval controlled by this tool and prevents concurrent collections. This change also improves
+ performance slightly by using the cluster state instead of sending multiple HTTP requests to each node to lookup
+ all the cores.
+ (Danyal Prout via shalin)
+
+* SOLR-9882: 500 error code on breaching timeAllowed by core and distributed (fsv) search,
+ old and json facets (Mikhail Khludnev)
+
+* SOLR-13295: Reproducible failure in TestDistributedGrouping (Erick Erickson)
+
+* SOLR-13254: Correct message that is logged in solrj's ConnectionManager when an exception
+ occurred while reconnecting to ZooKeeper. (hu xiaodong via Christine Poerschke)
+
+* SOLR-13284: NullPointerException with 500 http status on omitted or wrong wt param.
+ It's fixed by fallback to json (Munendra S N via Mikhail Khludnev)
+
+* SOLR-13244: Admin UI Nodes view fails and is empty when a node is temporarily down (janhoy)
+
+* SOLR-13253: IndexSchema.getResourceLoader was being used to load non-schema things, which can be a memory leak if
+ "shareSchema" and other circumstances occur. Furthermore it's reference to SolrConfig was removed. (David Smiley)
+
+* SOLR-7414: CSVResponseWriter & XLSXResponseWriter return empty field when fl alias is combined with '*' selector
+ (Michael Lawrence, Munendra S N, Ishan Chattopadhyaya)
+
+* SOLR-13351: Workaround for VELOCITY-908 (Kevin Risden)
+
+* SOLR-13349: High CPU usage in Solr due to Java 8 bug (Erick Erickson)
+
+* SOLR-13344: Admin UI inaccessible with RuleBasedAuthorizationPlugin (janhoy, Jason Gerlowski)
+
+* SOLR-13352: Remove risk of deadlock/threadleak when shutting down an Overseer(TriggerThread). (hossman)
+
+* SOLR-13362: Add 'includeIndexFieldFlags' support to SolrJ LukeRequest (Jason Gerlowski)
+
+* SOLR-13355: 'all' permission ignored by RuleBasedAuthorizationPlugin in most cases (Jason Gerlowski, janhoy)
+
+* SOLR-13331: Atomic Update 'remove' operations broken for certain field types in SolrJ (Thomas Wockinger via Jason Gerlowski)
+
+* SOLR-13388: Fix FileExchangeRateProvider to be a public class, as it appears in schema.xml (Uwe Schindler)
+
+* SOLR-12860: MetricsHistoryHandler now uses PKI Auth for metrics collection in background thread (janhoy, Lorenzo)
+
+* SOLR-13339: Prevent recovery, fetching index being kicked off after SolrCores already closed (Cao Manh Dat)
+
+* SOLR-13393: Fixed ZkClientClusterStateProvider to prevent risk of leaking ZkStateReader/threads when
+ processing concurrent requests during shutdown. This primarily affected tests, but may have also caused
+ odd errors/delays when restart/shutting down solr nodes. (hossman)
+
+* SOLR-13336: add maxBooleanClauses (default to 1024) setting to solr.xml, reverting previous effective
+ value of Integer.MAX_VALUE-1, to restrict risk of pathalogical query expansion. (hossman)
+
+* SOLR-13386: OverseerTaskQueue#remove should not throw an exception when no node exists after an exists
+ check and the Overseer work loop should not allow free spinning the loop when it hits a KeeperException.
+ (Mark Miller, Fernandez-Lobbe, Mike Drob)
+
+* SOLR-12371: Editing authorization config via REST API now works in standalone mode (janhoy)
+
+* SOLR-13408: Cannot start/stop DaemonStream repeatedly, other API improvements (Erick Erickson)
+
+* SOLR-13281: Fixed NPE in DocExpirationUpdateProcessorFactory (Munendra S N, Tomás Fernández Löbbe)
+
+* SOLR-13081: In-Place Update doesn't work with route.field (Dr Oleg Savrasov via Mikhail Khludnev)
+
+* SOLR-13343: Fix spacing issue in browser log (Marcus Eagan via Jason Gerlowski)
+
+* SOLR-12248, SOLR-4647: Grouping is broken on docValues-only fields (non-stored, non-indexed)
+ (Erick Ericsson, Adrien Grand, Munendra S N, Scott Stults, Ishan Chattopadhyaya)
+
+* SOLR-5970: Return correct status upon collection creation failure (Abraham Elmahrek, Ishan Chattopadhyaya,
+ Jason Gerlowski, Kesharee Nandan Vishwakarma)
+
+* SOLR-12291: prematurely reporting not yet finished async Collections API call as completed
+ when collection's replicas are collocated at least at one node (Varun Thacker, Mikhail Khludnev)
+
+* SOLR-13410: Designated overseer wasn't able to rejoin election queue at head upon restart (Ishan Chattopadhyaya,
+ Kesharee Nandan Vishwakarma)
+
+* SOLR-13318: Fix ClassCastException in SolrJ JsonFaceting classes (Munendra S N via Jason Gerlowski)
+
+* SOLR-13449: SolrClientNodeStateProvider always retries on requesting metrics from other nodes (Cao Manh Dat)
+
+Improvements
+----------------------
+
+* SOLR-12999: Index replication could delete segments before downloading segments from master if there is not enough
+ disk space (noble)
+
+* SOLR-12055 introduces async logging by default. There's a small window where log messages may be lost
+ in the event of some hard crash. Switch back to synchronous logging if this is unacceptable, see
+ see commeints in the log4j2 configuration files (log4j2.xml by default).
+
+* SOLR-12753: Async logging ring buffer and OOM error. When very long messages are written (1M messages or so),
+ it can produce an OOM error. Log messages are truncated at 10K via configuration in the log4j2.xml files.
+
+* SOLR-13227: Optimizing facet.range.other by avoiding expensive exceptions (Nikolay Khitrin via Mikhail Khludnev)
+
+* SOLR-9079: Remove commons-lang as a dependency (Kevin Risden)
+
+* SOLR-11473: Make HDFSDirectoryFactory support other prefixes (besides hdfs:/) (Kevin Risden)
+
+* SOLR-13359: Make UpdateHandler support other prefixes (besides hdfs:/) (Kevin Risden)
+
+* SOLR-13398: Move log line "Processing SSL Credential Provider chain..." from INFO to DEBUG (janhoy)
+
+* SOLR-13407: Reject update requests sent to non-routed multi collection aliases. (ab)
+
+* SOLR-11035: (at least) 2 distinct failures possible when clients attempt searches during SolrCore reload,
+ added test band-aid for DocValuesNotIndexedTest.
+
+* SOLR-13337: Only request the minimum required number of terms from each shard when using terms.sort=index and none
+ are discarded due to terms.min/maxcount (Morten Bøgeskov,Munendra S N via Mikhail Khludnev)
+
+* SOLR-12167: Throw an exception, instead of just a warning, when unknown atomic update operation is
+ encountered (Munendra S N via Ishan Chattopadhyaya)
+
+* SOLR-13394: Switch default GC from CMS to G1 (Ishan Chattopadhyaya, Kesharee Nandan Vishwakarma, Shawn Heisey,
+ Uwe Schindler, Erick Ericsson, shalin)
+
+* SOLR-13432: Add .toString methods to BitDocSet and SortedIntDocSet so that enabling "showItems" on the filter caches
+ shows some useful information about the values in the cache. (shalin)
+
+* SOLR-12833: Avoid unnecessary memory cost when DistributedUpdateProcessor timed-out lock is not used.
+ (jefferyyuan, ab)
+
+* SOLR-13348: Speed up collapsing by avoiding scoring of ineligible documents (Andrzej Wislowski via
+ Ishan Chattopadhyaya)
+
+Other Changes
+----------------------
+
+* SOLR-11763: Upgrade Guava to 25.1-jre (Markus Jelsma, Kevin Risden)
+
+* SOLR-13222: Improve logging in StreamingSolrClients (Peter Cseh via Kevin Risden)
+
+* SOLR-12055: Enable async logging by default. This change improves throughput for logging. This opens
+ up a small window where log messages could possibly be lost. If this is unacceptable, switching back to synchronous
+ logging can be done by changing the log4j2.xml file, no internal Solr code changed to make async logging the default.
+ (Erick Erickson)
+
+* SOLR-12753: Async logging ring buffer and OOM error. When very long messages are written (1M messages or so),
+ it can produce an OOM error. Log messages are truncated at 10K via configuration in the log4j2.xml files.
+
+* SOLR-9763: Remove the workaround implemented for HADOOP-12767 (Kevin Risden)
+
+* SOLR-13060: Improve HdfsAutoAddReplicasIntegrationTest and HdfsCollectionsAPIDistributedZkTest (Kevin Risden)
+
+* SOLR-13074: MoveReplicaHDFSTest leaks threads, falls into an endless loop, logging like crazy (Kevin Risden)
+
+* SOLR-9762: Remove the workaround implemented for HADOOP-13346 (Kevin Risden)
+
+* SOLR-7321: Remove reflection in FSHDFSUtils.java (Mike Drob, Kevin Risden)
+
+* SOLR-13268: Clean up any test failures resulting from defaulting to async logging (Erick Erickson)
+
+* SOLR-13307: Ensure HDFS tests clear System properties they set (Kevin Risden)
+
+* SOLR-13330: Improve HDFS tests (Kevin Risden)
+
+* SOLR-8033: Remove debug if branch in HdfsTransactionLog (Kevin Risden)
+
+* SOLR-12955: Refactored DistributedUpdateProcessor to put SolrCloud functionality into a subclass.
+ (Bar Rotstein, David Smiley)
+
+* SOLR-13342: Remove dom4j from Solr (Kevin Risden)
+
+* SOLR-13335: Upgrade to velocity 2.0 and velocity-tools 3.0 (Kevin Risden)
+
+* SOLR-13112: Upgrade jackson to 2.9.8 (Kevin Risden)
+
+* SOLR-13353: Add SolrCli AuthTool test (Kevin Risden)
+
+* SOLR-13363: Upgrade to ZooKeeper 3.4.14 (Erick Erickson)
+
+* SOLR-12809: Document recommended Java/Solr combinations (Erick Erickson, Jan Høydahl et.al.)
+
+* SOLR-13366: Clarify 'Invalid stage name' warning logging in AutoScalingConfig (Christine Poerschke)
+
+* SOLR-13409: Disable HTML directory listings in admin interface to prevent possible security issues (Uwe Schindler)
+
+* SOLR-12461: Upgrade Dropwizard Metrics to 4.0.5 release. (ab)
+
+* SOLR-13400: Replace Observable pattern in TransientSolrCoreCache (Erick Erickson)
+
+* SOLR-13425: Ref-Guide: Wrong color of text in left column of horizontal definition list (janhoy)
+
+* SOLR-13423: Upgrade RRD4j to version 3.5. (ab)
+
+* SOLR-13414: SolrSchema - Avoid NPE if Luke returns field with no type defined (Kevin Risden)
+
+* SOLR-13453: Adjust auth metrics asserts in tests caused by SOLR-13449 (janhoy)
+
+================== 8.0.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache ZooKeeper 3.4.13
+Jetty 9.4.14.v20181114
+
+Upgrade Notes
+----------------------
+
+* Due to the introduction of LIR redesign since Solr 7.3 (SOLR-11702) and the removing of old LIR implementation in Solr 8.
+ Rolling updates are not possible unless all nodes must be on Solr 7.3 or higher. If not updates can be lost.
+
+* Solr nodes can now listen and serve HTTP/2 requests. Most of internal requests (sent by UpdateShardHandler, HttpShardHandler)
+ Http2SolrClient is used. Since by default, internal requests are sent by using HTTP/2,
+ Solr 8.0 nodes can't talk to old nodes (7.x). However we can follow these steps to do rolling updates:
+ - Do rolling updates as normally, but the Solr 8.0 nodes must start with -Dsolr.http1=true as startup parameter.
+ By using this parameter internal requests are sent by using HTTP/1.1
+ - When all nodes are upgraded to 8.0, restart them, this time -Dsolr.http1 parameter should be removed.
+
+* ALPN is not supported in Java 8 or lower version therefore when a node started in Java 8 or a lower version with SSL enabled,
+ it will send and can only be able to handle HTTP/1.1 requests. In case of using SSL Java 9 or latter versions are recommended.
+
+* Custom AuthenticationPlugin must provide its own setup for Http2SolrClient through
+ implementing HttpClientBuilderPlugin.setup, if not internal requests can't be authenticated.
+
+* LUCENE-7996: The 'func' query parser now returns scores that are equal to 0
+ when a negative value is produced. This change is due to the fact that
+ Lucene now requires scores to be positive. (Adrien Grand)
+
+* SOLR-11882: SolrMetric registries retained references to SolrCores when closed. A
+ change of SolrMetricMAnager.registerGauge and SolrMetricProducer.initializeMetrics
+ method signatures was required to fix it. Third party components that use this API
+ need to be updated. (Eros Taborelli, Erick Erickson, ab)
+
+* LUCENE-8267: Memory codecs have been removed from the codebase (MemoryPostings,
+ MemoryDocValues). If you used postingsFormat="Memory" or docValuesFormat="Memory"
+ then either remove it to use the default or experiment with one of the others. (Dawid Weiss)
+
+* SOLR-12586: The date format patterns used by ParseDateFieldUpdateProcessorFactory (present in "schemaless mode")
+ are now interpreted by Java 8's java.time.DateTimeFormatter instead of Joda Time. The pattern language is very
+ similar but not the same. Typically, simply update the pattern by changing an uppercase 'Z' to lowercase 'z' and
+ that's it. For the current recommended set of patterns in schemaless mode, see "Schemaless Mode" in the ref guide,
+ or simply examine the default configSet. Also note that the set of patterns (formats) here have
+ expanded from before to subsume those patterns previously handled by the "extract" contrib (Solr Cell / Tika).
+ (David Smiley, Bar Rotstein)
+
+* SOLR-12593: The "extraction" contrib (Solr Cell) no longer does any date parsing, and thus no longer has the
+ "date.formats" configuration. To ensure date strings are properly parsed, use ParseDateFieldUpdateProcessorFactory
+ (an URP) commonly registered with the name "parse-date" in "schemaless mode". (David Smiley, Bar Rotstein)
+
+* SOLR-12643: Since Http2SolrClient does not support exposing connections related metrics. These metrics are no longer
+ available 'QUERY.httpShardHandler.{availableConnections, leasedConnections, maxConnections, pendingConnections}',
+ 'UPDATE.updateShardHandler.{availableConnections, leasedConnections, maxConnections, pendingConnections}'
+
+* SOLR-12605: UpdateShardHandler's updateOnlyClient is now a Http2SolrClient (previous HttpSolrClient). This new
+ client does not support 'maxConnections','maxConnectionsPerHost' parameters.
+
+* SOLR-12640: HttpShardHandlerFactory's defaultClient is now a Http2SolrClient (previous HttpSolrClient). This new
+ client does not support 'maxConnections','maxConnectionsPerHost' parameters. LBHttpSolrClient.Req and LBHttpSolrClient.Rsp
+ are marked as deprecated, uses LBSolrClient.Req and LBSolrClient.Rsp instead.
+
+* SOLR-12754: The UnifiedHighlighter hl.weightMatches now defaults to true. If there are unforseen highlight problems,
+ this may be the culprit.
+
+* If you explicitly use BM25SimilarityFactory in your schema, the absolute scoring will be lower due to SOLR-13025.
+ But ordering of documents will not change in the normal case. Use LegacyBM25SimilarityFactory if you need to force
+ the old 6.x/7.x scoring. Note that if you have not specified any similarity in schema or use the default
+ SchemaSimilarityFactory, then LegacyBM25Similarity is automatically selected for 'luceneMatchVersion' < 8.0.0.
+ See also explanation in Reference Guide chapter "Other Schema Elements".
+
+* SOLR-12535: Solr no longer accepts index time boosts in JSON provided to Solr. This used to be provided like so:
+ {'id':'1', 'val_s':{'value':'foo', 'boost':2.0}} but will now produce an error. A object/map structure will now only
+ be interpreted as a child document or an atomic update; nothing else. A uniqueKey is currently required on all child
+ documents to be interpreted as such, though this may change in the future. (David Smiley)
+
+* SOLR-12633: When JSON data is sent to Solr with nested child documents split using the "split" parameter, the child
+ docs will now be associated to their parents by the field/label string used in the JSON instead of anonymously. Most
+ users probably won't notice the distinction since the label is lost any way unless special fields are in the schema.
+ This choice used to be toggleable with an internal/expert "anonChildDocs" parameter flag which is now gone.
+ (David Smiley)
+
+* SOLR-11774: In 'langid' contrib, the LanguageIdentifierUpdateProcessor base class changed some method signatures.
+ If you have a custom language identifier implementation you will need to adapt your code.
+
+* SOLR-9515: Hadoop dependencies have been upgraded to Hadoop 3.2.0 from 2.7.2. (Mark Miller, Kevin Risden)
+
+* SOLR-5211: Deleting (or updating) documents by their uniqueKey is now scoped to only consider root documents, not
+ child/nested documents. Thus a delete-by-id won't work on a child doc (no-op), and an attempt to update a child doc
+ by providing a new doc with the same ID would add a new doc (probably erroneous). Both these actions were and still
+ are problematic. In-place-updates are safe though. If you want to delete certain child documents and if you know
+ they don't themselves have nested children then you must do so with a delete-by-query technique.
+
+* SOLR-13248: The default replica placement strategy used in Solr has been reverted to the 'legacy' policy used by Solr
+ 7.4 and previous versions. This is due to multiple bugs in the autoscaling based replica placement strategy that was
+ made default in Solr 7.5 which causes multiple replicas of the same shard to be placed on the same node in addition
+ to the maxShardsPerNode and createNodeSet parameters being ignored. Although the default has changed, autoscaling
+ will continue to be used if a cluster policy or preference is specified or a collection level policy is in use.
+ The default replica placement strategy can be changed to use autoscaling again by setting a cluster property:
+ curl -X POST -H 'Content-type:application/json' --data-binary '
+ {
+ "set-obj-property": {
+ "defaults" : {
+ "cluster": {
+ "useLegacyReplicaAssignment":false
+ }
+ }
+ }
+ }' http://$SOLR_HOST:$SOLR_PORT/api/cluster
+
+
+New Features
+----------------------
+
+* SOLR-12591: Expand the set of recognized date format patterns of schemaless mode to subsume those handled by the
+ "extract" contrib (Solr Cell / Tika). This is primarily a change in configuration of the default configSet for more
+ patterns, but also included enabling "lenient" parsing in ParseDateFieldUpdateProcessorFactory. The default
+ locale was changed from ROOT to en_US since well-known patterns assume this locale.
+ (David Smiley, Bar Rotstein)
+
+* SOLR-12879: MinHash query parser that builds queries providing a measure of Jaccard similarity (Andy Hind via Tommaso Teofili)
+
+* SOLR-12593: The default configSet now includes an "ignored_*" dynamic field. (David Smiley)
+
+* SOLR-12799: Allow Authentication Plugins to intercept internode requests on a per-request basis.
+ The BasicAuth plugin now supports a new parameter 'forwardCredentials', and when set to 'true',
+ user's BasicAuth credentials will be used instead of PKI for client initiated internode requests. (janhoy, noble)
+
+* SOLR-12791: Add Metrics reporting for AuthenticationPlugin (janhoy)
+
+* SOLR-12730: Implement staggered SPLITSHARD requests in IndexSizeTrigger. (ab)
+
+* SOLR-12639: Umbrella JIRA for adding support HTTP/2 (Cao Manh Dat)
+
+* SOLR-12768, SOLR-13129: Improved nested document support, and enabled in the default schema with the presence of _nest_path_.
+ When this field is present, certain things happen automatically. An internal URP is automatically used to populate
+ it. The [child] (doc transformer) will return a hierarchy with relationships; no params needed. The relationship
+ path is indexed for use in queries (can be disabled if not needed). Also, child documents needn't provide a uniqueKey
+ value as Solr will supply one automatically by concatenating a path to that of the parent document's key.
+ (David Smiley, Moshe Bla).
+
+* SOLR-13134: Allow the knnRegress Stream Evaluator to more easily perform bivariate regression.
+ (Joel Bernstein)
+
+* SOLR-13104: Add natural and repeat Stream Evaluators (Joel Bernstein)
+
+* SOLR-13147: Add movingMAD Stream Evaluator (Joel Bernstein)
+
+* SOLR-13155: Add command-line option for testing autoscaling configurations. (ab)
+
+* SOLR-13241: Add 'autoscaling' tool support to solr.cmd (Jason Gerlowski)
+
+* SOLR-11126: New Node-level health check handler at /admin/info/healthcheck and /node/health paths that
+ checks if the node is live, connected to zookeeper and not shutdown. (Anshum Gupta, Amrit Sarkar, shalin)
+
+Bug Fixes
+----------------------
+
+* SOLR-13058: Fix block that was synchronizing on the wrong collection in OverseerTaskProcessor (Gus Heck)
+
+* SOLR-11774: langid.map.individual now works together with langid.map.keepOrig. Also the detectLanguage() API
+ is changed to accept a Reader allowing for more memory efficient implementations (janhoy)
+
+* SOLR-13126: Query boosts were not being combined correctly for documents where not all boost queries
+ matched (Alan Woodward, Mikhail Khludnev)
+
+* SOLR-13248: Autoscaling based replica placement is broken out of the box. Solr 7.5 enabled autoscaling based replica
+ placement by default but in the absence of default cluster policies, autoscaling can place more than 1 replica of the
+ same shard on the same node. Also, the maxShardsPerNode and createNodeSet was not respected. Due to these reasons,
+ this issue reverts the default replica placement policy to the 'legacy' assignment policy that was the default until
+ Solr 7.4. (Gus Heck, Andrzej Bialecki, Bram Van Dam, shalin)
+
+* SOLR-13255 : ClasscastException when URPs try to read a String field which returns a ByteArrayUTF8CHarSequence . This is a regression
+ in release 7.7 (noble)
+
+*SOLR-13299: Fix Windows startup script to disable HTTP/2 if TLS is enabled on Java 8. (Uwe Schindler)
+
+
+Improvements
+----------------------
+
+* SOLR-5211: If _root_ is defined in the schema, it is now always populated automatically. This allows documents with
+ children to be updated with a document that does not have children, whereas before it would break block-join queries.
+ If you don't use nested documents then _root_ can be removed from the schema. (Dr Oleg Savrasov, Moshe Bla,
+ David Smiley, Mikhail Khludnev)
+
+* SOLR-6117: The response format has changed slightly for ReplicationHandler error-cases. All errors now have a non-200
+ 'status' field, a 'message' field giving more details on the error, and an optional 'exception' field. (Shalin Mangar,
+ Jason Gerlowski)
+
+* SOLR-12888: The NestedUpdateProcessor (which populates internal fields for nested child docs) is now auto-registered
+ to run immediately prior to RunUpdateProcessor. If the schema has no _nest_*_ fields then it's a no-op.
+ RunUpdateProcessorFactory looks up a special/internal URP chain "_preRun_" which is implicitly defined but could be
+ defined by an app for customization if desired. (David Smiley)
+
+Optimizations
+----------------------
+
+* SOLR-12725: ParseDateFieldUpdateProcessorFactory should reuse ParsePosition. (ab)
+
+* SOLR-13025: Due to LUCENE-8563, the BM25Similarity formula no longer includes the (k1+1) factor in the numerator
+ This gives a lower absolute score but doesn't affect ordering, as this is a constant factor which is the same
+ for every document. Use LegacyBM25SimilarityFactory if you need the old 6.x/7.x scoring. See also upgrade notes (janhoy)
+
+* SOLR-13130: during the ResponseBuilder.STAGE_GET_FIELDS directly copy string bytes and avoid creating String Objects (noble)
+
+Other Changes
+----------------------
+
+* SOLR-12614: Make "Nodes" view the default in AdminUI "Cloud" tab (janhoy)
+
+* SOLR-12586: Upgrade ParseDateFieldUpdateProcessorFactory (present in "schemaless mode") to use Java 8's
+ java.time.DateTimeFormatter instead of Joda time (see upgrade notes). "Lenient" is enabled. Removed Joda Time dependency.
+ (David Smiley, Bar Rotstein)
+
+* SOLR-5163: edismax now throws an exception when qf refers to a nonexistent field (Charles Sanders, David Smiley)
+
+* SOLR-12805: Store previous term (generation) of replica when start recovery process (Cao Manh Dat)
+
+* SOLR-12652: Remove SolrMetricManager.overridableRegistryName method (Peter Somogyi via David Smiley)
+
+* LUCENE-8513: SlowCompositeReaderWrapper now uses MultiTerms directly instead of MultiFields (David Smiley)
+
+* SOLR-11812: Remove backward compatibility of old LIR implementation in 8.0 (Cao Manh Dat)
+
+* SOLR-12620: Remove the Admin UI Cloud -> Graph (Radial) view (janhoy)
+
+* SOLR-12775: LowerCaseTokenizer is deprecated, and should be replaced by LetterTokenizer and
+ LowerCaseFilter (Alan Woodward)
+
+* SOLR-13036: Fix retry logic in JettySolrRunner (Gus Heck)
+
+* SOLR-12535: Solr no longer accepts index time boosts in JSON provided to Solr. (David Smiley)
+
+* SOLR-13086: Improve the error message reported by DocumentObjectBinder when a setter is not found (Gus Heck)
+
+* SOLR-12365: Renamed class Config to XmlConfigFile (David Smiley)
+
+* SOLR-9515: Hadoop dependencies have been upgraded to Hadoop 3.2.0 from 2.7.2. (Mark Miller, Kevin Risden)
+
+================== 7.7.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache ZooKeeper 3.4.13
+Jetty 9.4.14.v20181114
+
+Upgrade Notes
+----------------------
+
+ * SOLR-13248: The default replica placement strategy used in Solr has been reverted to the 'legacy' policy used by Solr
+ 7.4 and previous versions. This is due to multiple bugs in the autoscaling based replica placement strategy that was
+ made default in Solr 7.5 which causes multiple replicas of the same shard to be placed on the same node in addition
+ to the maxShardsPerNode and createNodeSet parameters being ignored. Although the default has changed, autoscaling
+ will continue to be used if a cluster policy or preference is specified or a collection level policy is in use.
+ The default replica placement strategy can be changed to use autoscaling again by setting a cluster property:
+ curl -X POST -H 'Content-type:application/json' --data-binary '
+ {
+ "set-obj-property": {
+ "defaults" : {
+ "cluster": {
+ "useLegacyReplicaAssignment":false
+ }
+ }
+ }
+ }' http://$SOLR_HOST:$SOLR_PORT/api/cluster
+
+Bug Fixes
+----------------------
+
+* SOLR-13255 : ClasscastException when URPs try to read a String field which returns a ByteArrayUTF8CHarSequence . This is a regression
+ in release 7.7 (noble)
+
+* SOLR-13248: Autoscaling based replica placement is broken out of the box. Solr 7.5 enabled autoscaling based replica
+ placement by default but in the absence of default cluster policies, autoscaling can place more than 1 replica of the
+ same shard on the same node. Also, the maxShardsPerNode and createNodeSet was not respected. Due to these reasons,
+ this issue reverts the default replica placement policy to the 'legacy' assignment policy that was the default until
+ Solr 7.4. (Gus Heck, Andrzej Bialecki, Bram Van Dam, shalin)
+
+================== 7.7.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache ZooKeeper 3.4.13
+Jetty 9.4.14.v20181114
+
+
+Upgrade Notes
+----------------------
+
+* SOLR-12770: The 'shards' parameter handling logic changes to use a new config element to determine what hosts can be
+ requested. Please see Apache Solr Reference Guide chapter "Distributed Requests" for details, as well as SOLR-12770.
+
+New Features
+----------------------
+
+* SOLR-12839: JSON 'terms' Faceting now supports a 'prelim_sort' option to use when initially selecting
+ the top ranking buckets, prior to the final 'sort' option used after refinement. (hossman)
+
+* SOLR-7896: Add a login page to Admin UI, with initial support for Basic Auth (janhoy)
+
+* SOLR-13116: Add Admin UI login support for Kerberos (janhoy, Jason Gerlowski)
+
+* SOLR-12770: Make it possible to configure a host whitelist for distributed search
+ (Christine Poerschke, janhoy, Erick Erickson, Tomás Fernández Löbbe)
+
+* SOLR-12373: Add a "tombstoneConfig" option to DocBasedVersionConstraintsProcessor that allows
+ users to configure which fields/values to add to tombstone documents. This can be useful to
+ make sure tombstone documents include fields that are marked as required in the schema
+ (Tomás Fernández Löbbe)
+
+* SOLR-12984: The search Streaming Expression should properly support and push down paging
+ when using the /select handler (Joel Bernstein)
+
+* SOLR-13088: Add zplot Stream Evaluator to plot math expressions in Apache Zeppelin (Joel Bernstein)
+
+Bug Fixes
+----------------------
+
+* SOLR-12546: CVSResponseWriter omits useDocValuesAsStored=true field when fl=*
+ (Munendra S N via Mikhail Khludnev)
+
+* SOLR-12933: Fix SolrCloud distributed commit. (Mark Miller)
+
+* SOLR-13014: URI Too Long with large streaming expressions in SolrJ (janhoy)
+
+* SOLR-13066: A failure while reloading a SolrCore can result in the SolrCore not being closed. (Mark Miller)
+
+* SOLR-11296: Spellcheck parameters not working in new UI (Matt Pearce via janhoy)
+
+* SOLR-10975: New Admin UI Query does not URL-encode the query produced in the URL box (janhoy)
+
+* SOLR-13072: Management of markers for nodeLost / nodeAdded events is broken. This bug could have caused
+ some events to be lost if they coincided with an Overseer leader crash. (ab)
+
+* SOLR-13080: The "terms" QParser's "automaton" method semi-required that the input terms/IDs be sorted. This
+ query parser now does this. Unclear if this is a perf issue or actual bug. (Daniel Lowe, David Smiley)
+
+* SOLR-13082: A trigger that creates trigger events more frequently than the cool down period can starve other triggers.
+ This is mitigated to some extent by randomly choosing the trigger to resume after cool down. It is recommended that
+ scheduled triggers not be used for very frequent operations to avoid this problem.
+ (ab, shalin)
+
+* SOLR-12514: Rule-base Authorization plugin skips authorization if querying node does not have collection replica (noble)
+
+* SOLR-11853: Solr installer fails on SuSE linux (Markus Mandalka via janhoy)
+
+* SOLR-12237: Fix incorrect SOLR_SSL_KEYSTORE_TYPE variable in solr start script (janhoy, Joel Bernstein)
+
+* SOLR-13053: NodeAddedTrigger and NodeLostTrigger do not reserve added/removed time populated by restoreState
+ (Cao Manh Dat)
+
+* SOLR-13137: NPE when /admin/zookeeper/status endpoint hit in standalone mode (janhoy)
+
+* SOLR-13091: REBALANCELEADERS is broken (Erick Erickson)
+
+* SOLR-11998: RebalanceLeaders API broken response format with wt=JSON (Erick Erickson)
+
+* SOLR-9735: Fix v2 API for AutoscalingHistoryHandler. (ab)
+
+* SOLR-13168: Fixed a bug in TestInjection that caused test only code to be invoked when TLOG replicas
+ recieved commits if java assertions were enabled. (hossman)
+
+Improvements
+----------------------
+
+* SOLR-12881: Remove unneeded import statements (Peter Somogyi via Erick Erickson)
+
+* SOLR-12992: When using binary format, ExportWriter to directly copy BytesRef instead of
+ creating new String (noble)
+
+* SOLR-12898: Replace cluster state polling with ZkStateReader#waitFor. (Mark Miller)
+
+* SOLR-12897: Introduce AlreadyClosedException to clean up silly close / shutdown logging. (Mark Miller)
+
+* SOLR-12896: Introduce more checks for shutdown and closed to improve clean close and shutdown. (Mark Miller)
+
+* SOLR-12804: Remove static modifier from Overseer queue access. (Mark Miller)
+
+* SOLR-12833: Add configurable timeout to VersionBucket lock. (Jeffery Yuan, Mark Miller)
+
+* SOLR-12885: BinaryResponseWriter (javabin format) should directly copy from BytesRef to output (noble)
+
+* SOLR-12973: Admin UI "Nodes" view support for replica* replica names. (Daniel Collins, Christine Poerschke, janhoy)
+
+* SOLR-13090: All shipped configurations still have `maxBooleanClauses` default to 1024. But if the
+ `solr.max.booleanClauses` sysprop is specified, that will override the 1024 default. This enables users to
+ update this property across the board more easily. (Jason Gerlowski)
+
+* SOLR-12983: JavabinLoader should avoid creating String Objects and create UTF8CharSequence fields from byte[] (noble)
+
+* SOLR-13016: Computing suggestions when policy have "#EQUAL" or "#ALL" rules take too long (noble)
+
+* SOLR-13029: solr.hdfs.buffer.size can be configured for HdfsBackupRepository for better performance (Tim Owen via Mikhail Khludnev)
+
+* SOLR-13156: support facet.sort for facet.field={!terms=foo,bar}field. (Konstantin Perikov via Mikhail Khludnev)
+
+* SOLR-13146: Allow derivatives to be computed for the oscillate Stream Evaluator (Joel Bernstein)
+
+Other Changes
+----------------------
+
+* SOLR-12972: deprecate unused SolrIndexConfig.luceneVersion (Christine Poerschke)
+
+* SOLR-12801: Make massive improvements to the tests. (Mark Miller)
+
+* SOLR-12923: The new AutoScaling tests are way too flaky and need special attention. (Mark Miller)
+
+* SOLR-12932: ant test (without badapples=false) should pass easily for developers. (Mark Miller)
+
+* SOLR-13036: Fix retry logic in JettySolrRunner (Gus Heck)
+
+* SOLR-12727: Upgrade ZooKeeper dependency to 3.4.13 (Kevin Risden, Erick Erickson, Cao Manh Dat)
+
+* SOLR-13086: Improve the error message reported by DocumentObjectBinder when a setter is not found (Gus Heck)
+
+
+================== 7.6.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.19.1
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache ZooKeeper 3.4.11
+Jetty 9.4.11.v20180605
+
+Upgrade Notes
+----------------------
+
+* SOLR-12767: The min_rf parameter is no longer needed, Solr will always return the achieved replication factor (rf)
+ in the response header.
+
+* SOLR-12827: The cluster wide defaults structure has changed from {collectionDefaults: {nrtReplicas : 2}} to
+ {defaults : {collection : {nrtReplicas : 2}}}. The old format continues to be supported and can be read from
+ ZK as well as written using the V2 set-obj-property syntax but it is deprecated and will be removed in Solr 9.
+ We recommend that users change their API calls to use the new format going forward.
+
+* SOLR-12739: Autoscaling policy framework is now used as the default strategy to select the nodes on which
+ new replicas or replicas of new collections are created. Previously, the maxShardsPerNode parameter was not allowed
+ on collections when autoscaling policy was configured. Also if an autoscaling policy was configured then the default
+ was to set an unlimited maxShardsPerNode automatically. Now the maxShardsPerNode parameter is always
+ allowed during collection creation and maxShardsPerNode should be set correctly (if required) regardless of whether
+ autoscaling policies are in effect or not. The default value of maxShardsPerNode continues to be 1 as before. It can
+ be set to -1 during collection creation to fall back to the old behavior of unlimited maxShardsPerNode when using
+ autoscaling policy.
+
+* SOLR-12861: Added a Solr factory for ByteBuffersDirectory, which will replace deprecated RAMDirectory in Solr 9.0.
+
+New Features
+----------------------
+
+* SOLR-6280: {!collapse}: if you attempt to use CollapseQParser on a field that is multi-valued, you will now get an
+ error. Previously, the collapsing behavior was unreliable and undefined despite no explicit error.
+ (Munendra S N, David Smiley)
+
+* SOLR-9317: ADDREPLICA command should be able to add more than one replica to a collection,shard at a time.
+ The API now supports 'nrtReplicas', 'tlogReplicas', 'pullReplicas' parameters as well 'createNodeSet' parameter.
+ As part of this change, the CREATESHARD API now delegates placing replicas entirely to the ADDREPLICA command
+ and uses the new parameters to add all the replicas in one API call. (shalin)
+
+* SOLR-11522: /autoscaling/suggestions now include rebalance options as well even if there are no violations (noble)
+
+* SOLR-12822: /autoscaling/suggestions to include suggestion to add-replica for lost replicas (noble)
+
+* SOLR-12815: Implement maxOps limit for IndexSizeTrigger. (ab)
+
+* SOLR-12843: Implement a MultiContentWriter in SolrJ to post multiple files/payload at once (noble)
+
+* SOLR-12780: Add support for Leaky ReLU and TanH activations in contrib/ltr NeuralNetworkModel class.
+ (Kamuela Lau, Christine Poerschke)
+
+* SOLR-12846: Added support for "host" variable in autoscaling policy rules (noble)
+
+* SOLR-5004: Splitshard collections API now supports splitting into more than 2 sub-shards directly i.e. by providing a
+ numSubShards parameter (Christine Poerschke, Anshum Gupta)
+
+* SOLR-12754: The UnifiedHighlighter has a new hl.weightMatches param defaulting to false (will be true in 8.0). It's
+ the highest query accuracy mode, and furthermore phrase queries are highlighted as one. (David Smiley)
+
+* SOLR-12828: Add oscillate Stream Evaluator to support sine wave analysis. (Joel Bernstein)
+
+* SOLR-11907: Add convexHull and associated geometric Stream Evaluators. (Joel Bernstein)
+
+* SOLR-12811: Add enclosingDisk and associated geometric Stream Evaluators. (Joel Bernstein)
+
+* SOLR-12840: Add pairSort Stream Evaluator (Joel Bernstein)
+
+* SOLR-12862: Add log10 Stream Evaluator and allow the pow Stream Evaluator to accept a vector of exponents (Joel Bernstein)
+
+* SOLR-12942: Add an option in IndexSizeTrigger to select the split shard method. (ab)
+
+* SOLR-12938: Cluster Status returns results for aliases, instead of throwing exceptions (Gus Heck)
+
+* SOLR-11997: Suggestions API/UI should show an entry where a violation could not be resolved (noble)
+
+* SOLR-12971: Add pivot Stream Evaluator to pivot facet co-occurrence counts into a matrix (Joel Bernstein)
+
+* SOLR-12795: Introduce 'rows' and 'offset' parameter in FacetStream (Joel Bernstein, Amrit Sarkar, Varun Thacker)
+
+* SOLR-11572: Add recip Stream Evaluator to support reciprocal transformations (Joel Bernstein)
+
+* SOLR-12936: Allow percentiles Stream Evaluator to accept an array of percentiles to calculate (Joel bernstein)
+
+* SOLR-12829: Add plist (parallel list) Streaming Expression (Joel Bernstein)
+
+* SOLR-12975: Add ltrim and rtrim Stream Evaluators (Joel Bernstein)
+
+* SOLR-12962: Added a new 'uninvertible' option for fields and fieldtypes. This defaults to 'true' for
+ backcompat allowing a FieldCache to be built for indexed fields as needed, but users are encouraged
+ to set this to false (using docValues as needed) to reduce the risk of large fluxuations in heap
+ size due to unexpected attempts to sort/facet/function on non-docValue fields. (hossman)
+
+
+Other Changes
+----------------------
+
+* SOLR-12762: Fix javadoc for SolrCloudTestCase.clusterShape() method and add a method that validates only against
+ Active slices (Anshum Gupta)
+
+* SOLR-12756: Refactor Assign and extract replica placement strategies out of it. Now, assignment is done with the help
+ of a builder class instead of calling a method with large number of arguments. The number of special cases that had
+ to be handled have been cut down as well. (shalin)
+
+* SOLR-12827: Migrate cluster wide defaults syntax in cluster properties to a nested structure. The structure has
+ changed from {collectionDefaults: {nrtReplicas : 2}} to {defaults : {collection : {nrtReplicas : 2}}}.
+ (ab, shalin)
+
+* SOLR-12835: Document statistics exposed by the Query Result Cache when maxRamMB is configured. (shalin)
+
+* SOLR-12423: Upgrade to Tika 1.19.1 when available (Tim Allison via Erick Erickson)
+
+* SOLR-12793: Move TestCloudJSONFacetJoinDomain and TestCloudJSONFacetSKG to the facet test package (Varun Thacker)
+
+* SOLR-12861: Add Solr factory for ByteBuffersDirectory.
+
+* SOLR-12746: Simplify the Ref Guide HTML structure and use semantic HTML tags where possible. Adds new template files
+ for Asciidoctor HTML conversion. Building the HTML version now requires the Slim gem. (Cassandra Targett)
+
+* SOLR-12956: Add Javadoc @since tag to Analyzer component classes (Alexandre Rafalovitch)
+
+* SOLR-12966: Add Javadoc @since tag to URP classes (Alexandre Rafalovitch)
+
+* SOLR-12600: Fix parameter names in Solr JSON documentation (Alexandre Rafalovitch)
+
+* SOLR-12497: Add documentation to use Hadoop credential provider-based keystore/trustsore.
+(Mano Kovacs, Cassandra Targett)
+
+* SOLR-13006: ZkNodeProps to be able to load from both javabin and JSON (noble)
+
+Bug Fixes
+----------------------
+
+* SOLR-12803: Ensure ConcurrentUpdateSolrClient sends documents to correct collection (Jason Gerlowski)
+
+* SOLR-11836: FacetStream works with bucketSizeLimit of -1 which will fetch all the buckets.
+ (Alfonso Muñoz-Pomer Fuentes, Amrit Sarkar via Varun Thacker)
+
+* SOLR-12776: Setting of TMP in solr.cmd causes invisibility of Solr to JDK tools (Petr Bodnar via Erick Erickson)
+
+* SOLR-12648: Autoscaling framework based replica placement is not used unless a policy is specified or
+ non-empty cluster policy exists. (shalin)
+
+* SOLR-12750: Migrate API should lock the collection instead of shard. (shalin)
+
+* SOLR-12767: When using min_rf, shard leader skipped bad replicas instead of marking them for recovery, this could
+ create inconsistencies between replicas of the same shard. min_rf parameter is now deprecated, and even if provided
+ replicas that don't ack an update from the leader will be marked for recovery. (Tomás Fernández Löbbe)
+
+* SOLR-12814: Metrics history causing "HttpParser URI is too large >8192" when many collections (janhoy)
+
+* SOLR-12836: ZkController creates a cloud solr client with no connection or read timeouts. Now the http client
+ created by the update shard handler is used instead. (shalin)
+
+* SOLR-12729: SplitShardCmd should lock the parent shard to prevent parallel splitting requests. (ab)
+
+* SOLR-12851: Improvements and fixes to let and select Streaming Expressions (Joel Bernstein)
+
+* SOLR-12874: Java 9+ GC Logging filesize parameter should use a unit. (Tim Underwood via Uwe Schindler)
+
+* SOLR-12868: Request forwarding for v2 API is broken (noble)
+
+* SOLR-7557: Fix parsing of child documents using queryAndStreamResponse (Marvin Bredal Lillehaug/Stian Østerhaug via janhoy)
+
+* SOLR-12875: fix ArrayIndexOutOfBoundsException when unique(field) or uniqueBlock(_root_) is
+used with DVHASH method in json.facet. (Tim Underwood via Mikhail Khludnev)
+
+* SOLR-12954: fix facet.pivot refinement bugs when using facet.sort=index and facet.mincount>1 (hossman)
+
+* SOLR-12023: Autoscaling policy engine shuffles replicas needlessly (noble)
+
+* SOLR-12243: Edismax missing phrase queries when phrases contain multiterm synonyms
+ (Elizabeth Haubert, Alessandro Benedetti, Uwe Schindler, Steve Rowe)
+
+* SOLR-12977: Autoscaling tries to fetch metrics from dead nodes (noble)
+
+* SOLR-12978: In autoscaling NPE thrown for nodes where value is absent (noble)
+
+Improvements
+----------------------
+
+* SOLR-12767: Solr now always includes in the response of update requests the achieved replication factor
+ (Tomás Fernández Löbbe)
+
+* SOLR-12782: UninvertingReader wrapping is now a bit more lightweight: Does not create FieldInfo for fields that
+ can't be uninverted (saves mem) and can avoid wrapping the reader altogether if there's nothing to uninvert.
+ IndexSchema.getUninversionMap refactored to getUninversionMapper and no longer merges FieldInfos. (David Smiley)
+
+* SOLR-12739: Make autoscaling policy based replica placement the default strategy for placing replicas. (shalin)
+
+* SOLR-12806: use autoscaling policies with strict=false to prioritize node allocation (noble)
+
+* SOLR-10981: Support for stream.url or stream.file pointing to gzipped data. It's detected by either a content
+ encoding header or file extension. (Andrew Lundgren via David Smiley, Jan Høydahl)
+
+* SOLR-12892: MapWriter to use CharSequence instead of String (noble)
+
+* SOLR-12882: Eliminate excessive lambda allocation in json facets FacetFieldProcessorByHashDV (Tim Underwood)
+
+* SOLR-12699: Make contrib/ltr LTRScoringModel immutable and cache its hashCode.
+ (Stanislav Livotov, Edward Ribeiro, Christine Poerschke)
+
+* LUCENE-8557: Some internal LeafReader.getFieldInfos implementations were being re-computed on-demand instead of
+ once up front leading to some slowdowns in places like JSON Facets and field collapsing. (Tim Underwood, David Smiley)
+
+* SOLR-12964: Json Facets: use DocValuesIterator advanceExact() instead of advance() in FacetFieldProcessorByHashDV and
+ UniqueSinglevaluedSlotAcc. (Tim Underwood)
+
+* SOLR-12880: Json Facets: Show the FacetProcessor class name instead of the FacetRequest in the JSON Facets debug-trace
+ output (Tim Underwood)
+
+================== 7.5.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.18
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache ZooKeeper 3.4.11
+Jetty 9.4.11.v20180605
+
+Upgrade Notes
+----------------------
+
+* The data-driven schema no longer returns the *_str field-copy of text fields by default. The *_str field is still
+ created and can be used for e.g. sorting, but to retrieve it you now need to explicitly list it in "fl" (SOLR-12350)
+
+* LUCENE-7976: TieredMergePolicy now respects maxSegmentSizeMB by default when executing
+ findForcedMerges (optimize) and findForcedDeletesMerges (expungeDeletes) (Erick Erickson)
+
+* SOLR-12395: SignificantTermsQParserPlugin's name is now 'significantTerms' and its old name 'sigificantTerms' is deprecated.
+
+* SOLR-11694: Extremely outdated UIMA contrib module has been removed (Alexandre Rafalovitch)
+
+* SOLR-12008: The configuration file for log4j2.xml is now in ../server/resources/log4j2.xml. All other copies have been removed.
+ WINDOWS USERS: This JIRA corrects a bug in the start scripts that put example logs under ...\server, solr.log is
+ now under ...\example. (Erick Erickson)
+
+* SOLR-12398: The heatmap facet response structure, when returned in JSON, changed from an even/odd name/value array to
+ an object style. Although the object style makes more sense, this was an overlooked back-compat break; sorry.
+
+
+
+New Features
+----------------------
+
+* SOLR-11865: The QueryElevationComponent now has a useConfiguredElevatedOrder setting. When multiple docs are elevated,
+ this specifies whether their relative order should be the order in the configuration file or if not then should they
+ be subject to whatever the sort criteria is. Additionally, QEC was extensively refactored to be more extensible.
+ (Bruno Roustant, David Smiley)
+
+* SOLR-12474: Add an UpdateRequest Object that implements RequestWriter.ContentWriter (noble)
+
+* SOLR-12361: Allow nested child documents to be in field values of a SolrInputDocument as an alternative to
+ add/get ChildDocuments off to the side. The latter is now referred to as "anonymous" child documents as opposed to
+ "labelled" (by the field name). Anonymous child docs might be deprecated in the future. This is an internal change
+ that should work for javabin/SolrJ; separate issues will address XML & JSON formats populating nested docs in this way.
+ AddUpdateCommand and it's relationship with DirectUpdateHandler2 was reworked substantially. (Moshe Bla, David Smiley)
+
+* SOLR-12362: Uploading docs in JSON now supports child documents as field values, thus providing a label to the
+ relationship instead of the current "anonymous" relationship. Use of this experimental feature sometimes requires a
+ anonChildDocs=false parameter until Solr 8 due to syntax ambiguities. (Moshe Bla, David Smiley)
+
+* SOLR-12485: Uploading docs in XML now supports child documents as field values, thus providing a label to the
+ relationship instead of the current "anonymous" relationship. (Moshe Bla, David Smiley)
+
+* SOLR-12441: (EXPERIMENTAL) New NestedUpdateProcessorFactory (URP) to populate special fields _nest_parent_ and
+ _nest_path_ of nested (child) documents. It will generate a uniqueKey of nested docs if they were blank too.
+ (Moshe Bla, David Smiley)
+
+* SOLR-12519: The [child] transformer now returns a nested child doc structure (attached as fields if provided this way)
+ provided the schema has the _nest_path_ field. This is part of a broader enhancement of nested docs.
+ (Moshe Bla, David Smiley)
+
+* SOLR-12722: The [child] transformer now takes an 'fl' param to specify which fields to return. It will evaluate
+ doc transformers if present. In 7.5 a missing 'fl' defaults to the current behavior of all fields, but in 8.0
+ defaults to the top/request "fl". (Moshe Bla, David Smiley)
+
+* SOLR-11578: Solr 7 Admin UI (Cloud > Graph) should reflect the Replica type to give a more accurate representation
+ of the cluster. (Rhoit Singh via Erick Erickson)
+
+* SOLR-12507: Modify collection API should support un-setting properties. (shalin)
+
+* SOLR-12506: Add SolrJ support for the modify collection API. (shalin)
+
+* SOLR-12398: The JSON Facet API now supports type=heatmap facets, just as classic faceting does. (David Smiley)
+
+* SOLR-11985: Support percentage values in replica attribute in autoscaling policy (noble)
+
+* SOLR-12511: Support non integer values for replica in autoscaling policy (noble)
+
+* SOLR-12517: Support range values for replica in autoscaling policy (noble)
+
+* SOLR-12530: Ability to disable configset upload via -Dconfigset.upload.enabled=false startup parameter
+ (Ishan Chattopadhyaya)
+
+* SOLR-12495: An #EQUAL function for replica in autoscaling policy to equally distribute replicas (noble)
+
+* SOLR-11986: Allow percentage in freedisk attribute in autoscaling policy rules (noble)
+
+* SOLR-12522: Support a runtime function `#ALL` for 'replica' in autoscaling policies (noble)
+
+* SOLR-12567: JSON Facet "functions" now support an extended "type:func" syntax, similar to other types
+ of facets. This also allows additional local params to be specified for if the aggregation function
+ can take advantage of them. (hossman)
+
+* SOLR-12581: the JSON Facet 'relatedness()' aggregate function now supports a 'min_popularity' option
+ using the extended type:func syntax (hossman)
+
+* SOLR-12536: autoscaling policy support to equally distribute replicas on the basis of arbitrary properties (noble)
+
+* SOLR-8207: Add "Nodes" view to the Admin UI "Cloud" tab, listing nodes and key metrics (janhoy)
+
+* SOLR-7767: "ZK Status" sub menu under "Cloud" tab to see status of zookeeper ensemble (janhoy)
+
+* SOLR-11990: Make it possible to co-locate replicas of multiple collections together in a node. A collection may be
+ co-located with another collection during collection creation time by specifying a 'withCollection' parameter. It can
+ also be co-located afterwards by using the modify collection API. The co-location guarantee is enforced regardless of
+ future cluster operations whether they are invoked manually via the Collection API or by the Autoscaling framework.
+ (noble, shalin)
+
+* SOLR-12402: Factor out SolrDefaultStreamFactory class. (Christine Poerschke)
+
+* SOLR-12592: support #EQUAL function, range operator, decimal and percentage in cores in autoscaling policies (noble)
+
+* SOLR-12655: Add Korean morphological analyzer ("nori") to default distribution. This also adds examples
+ for configuration in Solr's schema. (Uwe Schindler)
+
+* SOLR-11863: Add knnRegress Stream Evaluator to support nearest neighbor regression (Joel Bernstein)
+
+* SOLR-12702: Add zscores Stream Evaluator (Joel Bernstein)
+
+* SOLR-12687: Add functions to cache data structures and mathematical models (Joel Bernstein)
+
+* SOLR-12671: Add robust flag to knnRegress Stream Evaluator (Joel Bernstein)
+
+* SOLR-12660: Add outliers Stream Evaluator to support outlier detection with probability distributions
+ (Joel Bernstein)
+
+* SOLR-12634: Add gaussfit Stream Evaluator (Joel Bernstein)
+
+* SOLR-12629: The predict evaluator should work with the polyfit function (Joel Bernstein)
+
+* SOLR-12715: NodeAddedTrigger should support adding replicas to new nodes by setting preferredOperation=addreplica.
+ (shalin)
+
+* SOLR-11861: When creating a configSet via the API, the "baseConfigSet" parameter now defaults to "_default".
+ (Amrit Sarkar, David Smiley)
+
+* SOLR-12716: NodeLostTrigger should support deleting replicas from lost nodes by setting preferredOperation=deletenode.
+ (shalin)
+
+* SOLR-9418: Added a new (experimental) PhrasesIdentificationComponent for identifying potential phrases
+ in query input based on overlapping shingles in the index. (Akash Mehta, Trey Grainger, hossman)
+
+* SOLR-11943: Add machine learning functions for location data (Joel Bernstein)
+
+* SOLR-12612: Cluster properties restriction of known keys only is relaxed, and now unknown properties starting with "ext."
+ will be allowed. This allows custom to plugins set their own cluster properties. (Jeffery Yuan via Tomás Fernández Löbbe)
+
+* SOLR-12357: Time Routed Aliases now have a preemptiveCreateMath option to preemptively and asynchronously create the
+ next collection in advance as new data gets within this time window of the end. (Gus Heck, David Smiley)
+
+Bug Fixes
+----------------------
+
+* SOLR-12449: Response /autoscaling/diagnostics shows improper json (noble)
+
+* SOLR-11676: Keep nrtReplicas and replicationFactor in sync while creating a collection and modifying a collection
+ (Varun Thacker)
+
+* SOLR-12489: User specified replicationFactor and maxShardsPerNode is used when specified during a restore operation.
+ A user can now specify nrtReplicas/tlogReplicas/pullReplicas while restoring the collection.
+ Specifying replicationFactor or nrtReplicas have the same effect and only one can be specified (Varun Thacker)
+
+* SOLR-11216: Race condition in PeerSync (Cao Manh Dat)
+
+* SOLR-11807: Restoring collection now treats maxShardsPerNode=-1 as unlimited (Varun Thacker)
+
+* SOLR-12413: If Zookeeper was pre-loaded with data before first-use, then the aliases information would be ignored.
+ (David Smiley, Gaël Jourdan, Gus Heck)
+
+* SOLR-12482: Config API returns status 0 for failed operations. (Steve Rowe)
+
+* SOLR-12513: Reproducing TestCodecSupport.testMixedCompressionMode failure (Erick Erickson)
+
+* SOLR-11665: Improve error handling of shard splitting. Fix splitting of mixed replica types. (ab)
+
+* SOLR-12326: JSON Facet API: terms facet shard requests now indicate if they have more buckets to prevent
+ unnecessary refinement requests. (yonk)
+
+* SOLR-12427: Improve error message for invalid 'start', 'rows' parameters. (Munendra S N via Jason Gerlowski)
+
+* SOLR-12395: Make 'significantTerms' the SignificantTermsQParserPlugin's name and deprecate its old 'sigificantTerms' name.
+ (Tobias Kässmann, Christine Poerschke)
+
+* SOLR-12533 Collection collection fails if metrics are called during core creation (Peter Cseh, Mano Kovacs)
+
+* SOLR-2834: Fix SolrJ Field and Document analyzes for types that include CharacterFilter (Alexandre Rafalovitch)
+
+* SOLR-12516: Fix some bugs in 'type:range' Facet refinement when sub-facets are combined with non
+ default values for the 'other' and 'include' options. (hossman)
+
+* SOLR-12343: Fixed a bug in JSON Faceting that could cause incorrect counts/stats when using non default
+ sort options. This also adds a new configurable "overrefine" option. (Yonik Seeley, hossman)
+
+* SOLR-12553: Allow SignificantTerms Query Parser to use local parameters (Alexandre Rafalovitch)
+
+* SOLR-12570: OpenNLPExtractNamedEntitiesUpdateProcessor cannot support multi fields because pattern replacement
+ doesn't work correctly. (Koji Sekiguchi)
+
+* SOLR-12576: Update ref guide for additional information displayed in cloud view (Erick Erickson)
+
+* SOLR-12597: Migrate API should fail requests that do not specify split.key parameter (shalin)
+
+* SOLR-12477: An update would return a client error(400) if it hit a AlreadyClosedException.
+ We now return the error as a server error(500) instead (Jeffery via Varun Thacker)
+
+* SOLR-12606: Fix InfixSuggestersTest.testShutdownDuringBuild() failures. (Steve Rowe)
+
+* SOLR-12607: Fixed two separate bugs in shard splits which can cause data loss. The first case is when using TLOG
+ replicas only, the updates forwarded from parent shard leader to the sub-shard leader are written only in tlog and
+ not the index. If this happens after the buffered updates have been replayed then the updates can never be executed
+ even though they remain the transaction log. The second case is when synchronously forwarding updates to sub-shard
+ leader fails and the underlying errors are not propagated to the client. (Cao Manh Dat, shalin)
+
+* SOLR-12344: SolrSlf4jReporter doesn't set MDC context. (ab)
+
+* SOLR-12594: MetricsHistoryHandler.getOverseerLeader fails when hostname contains hyphen. (ab)
+
+* SOLR-12615: HashQParserPlugin will no longer throw an NPE if the hash key field is a string when there are documents
+ with empty values. All documents with empty values ( string , numeric ) will be processed by worker=0
+ This would fix the NPE when using the search stream with partitionKeys. (Varun Thacker)
+
+* SOLR-11770: NPE in tvrh if no field is specified and document doesn't contain any fields with term vectors
+
+* SOLR-12541: Metrics handler throws an error if there are transient cores. (ab)
+
+* SOLR-12470: Search Rate Trigger multiple bug fixes, improvements and documentation updates. (ab)
+
+* SOLR-12665: Autoscaling policy not being refreshed due to caching (noble)
+
+* SOLR-12649: CloudSolrClient retries requests unnecessarily exception from server (noble, shalin)
+
+* SOLR-12670: RecoveryStrategy logs wrong wait time when retrying recovery. (shalin)
+
+* SOLR-12668: Autoscaling trigger listeners should be executed in the order of their creation. (ab)
+
+* SOLR-12475: Fix MaxSizeAutoCommitTest failures (Rupa Shankar, Anshum Gupta)
+
+* SOLR-12674: RollupStream should not use the HashQueryParser for 1 worker. (Varun Thacker)
+
+* SOLR-12679: MiniSolrCloudCluster internal jetty list should never have duplicates (shalin)
+
+* SOLR-12598: Do not fetch non-stored fields (Nikolay Khitrin, Erick Erickson)
+
+* SOLR-12683: HashQuery will throw an exception if more than 4 partitionKeys is specified.
+ Earlier after the 4th partitionKey the keys would be silently ignored. (Varun Thacker)
+
+* SOLR-10028: Fix and improvements to SegmentsInfoRequestHandlerTest (Christine Poerschke, Tomás Fernández Löbbe)
+
+* SOLR-11585: Solr SQL does not work with point numeric fields (Joel Bernstein, Kiran Chitturi)
+
+* SOLR-12704: Guard AddSchemaFieldsUpdateProcessorFactory against null field names and field values.
+ (Steve Rowe, Varun Thacker)
+
+* SOLR-12733: SolrMetricReporterTest failure (Erick Erickson, David Smiley)
+
+* SOLR-12765: Incorrect format of JMX cache stats. (Bojan Smid, ab)
+
+* SOLR-12749: timeseries() expression missing sum() results for empty buckets (Joel Bernstein)
+
+Optimizations
+----------------------
+
+* SOLR-12350: Do not use docValues as stored for _str (copy)fields in _default configset (janhoy)
+
+* SOLR-12455: Refactor JSON serialization code into SolrJ package (noble)
+
+* SOLR-11654: Time Routed Alias will now route documents to the ideal shard of a collection, thus avoiding a hop.
+ Usually documents were already routed well but not always. (Gus Heck, David Smiley)
+
+* SOLR-11598: The export handler does not limit users to 4 sort fields and is now unlimited. However the speed at
+ which we can export is directly proportional to the number of sort fields specified. This change also allows streaming
+ expressions to group by on more than 4 fields. (Aroop Ganguly, Amrit Sarkar, Varun Thacker)
+
+* SOLR-12305: When a replica is applying updates, some kind of updates can skip buffering for faster recovery.
+ (Cao Manh Dat)
+
+* SOLR-12509: Improve SplitShardCmd performance and reliability. A new method of splitting has been
+ introduced (splitMethod=link) which uses hard-linking of index files when possible, resulting in
+ significant speedups and reduced CPU / IO load on shard leader. (ab)
+
+* SOLR-11881: Retry update requests sent by leaders to it's followers (Varun Thacker, Mark Miller, Tomás Fernández Löbbe)
+
+* SOLR-12616: Optimize Export writer upto 4 sort fields to get better performance.
+ This was removed in SOLR-11598 but brought back in the same version (Amrit Sarkar, Varun Thacker)
+
+* SOLR-12572: While exporting documents using the export writer, if a field is specified as a sort parameter and also
+ in the fl (field list) parameter, we save on one doc-value lookup. This can bring performance improvements of 15%
+ and upwards depending on how many fields are in common. (Amrit Sarkar, Varun Thacker)
+
+* SOLR-10697: HttpShardHandler now uses a default of 100k as maxConnections (10k previously) and default
+ maxConnectionsPerHost as 100k (20 previously). They are now consisent with the UpdateShardHandler defaults.
+ (Varun Thacker)
+
+* SOLR-12723: Reduce object creation in HashBasedRouter. (ab)
+
+* SOLR-12766: When retrying internal requests, backoff only once for the full batch of retries (Tomás Fernández Löbbe)
+
+Other Changes
+----------------------
+
+* SOLR-12208: Renamed the autoscaling variable 'INDEX.sizeInBytes' to 'INDEX.sizeInGB' (noble)
+
+* SOLR-12523: Improve error reporting and docs regarding Collection backup feature shared-fs requirement (janhoy)
+
+* SOLR-12468: Upgrade Jetty to 9.4.11.v20180605 (Michael Braun, shalin)
+
+* SOLR-12527: factor out a test-framework/ConfigRequest class (Christine Poerschke)
+
+* SOLR-12412: Leader should give up leadership when IndexWriter.tragedy occur (Cao Manh Dat, Tomas Fernandez-Lobbe)
+
+* SOLR-12551: Upgrade to Tika 1.18 (Tim Allison via Erick Erickson)
+
+* SOLR-12464: Reduce Overseer.close() logging (for non-Overseer leaders) (Christine Poerschke)
+
+* SOLR-12454: Tweak Overseer leadership transition related logging for easier troubleshooting. (Christine Poerschke)
+
+* SOLR-12574: Put under a common "significantTerms" bucket all output by SignificantTerms Query Parser (Alexandre Rafalovitch)
+
+* SOLR-12164: Improve Ref Guide main landing page. (Cassandra Targett)
+
+* SOLR-10984: Clean up web.xml, removing old redirects and outdated comments (Varun Thacker, janhoy)
+
+* SOLR-12617: Remove Commons BeanUtils as a dependency (Varun Thacker)
+
+* SOLR-11008: Use a lighter config for MetricsHandlerTest and ensure the core is up before the test starts (Varun Thacker)
+
+* SOLR-11766: Move Streaming Expressions section in Ref Guide to be a top-level section. (Cassandra Targett)
+
+* SOLR-12656: ShardSplitTest should extend AbstractFullDistribZkTestBase instead of BasicDistributedZkTest. (shalin)
+
+* LUCENE-8456: Upgrade Apache Commons Compress to v1.18 (Steve Rowe)
+
+* SOLR-12014: Cryptic error message when creating a collection with sharding that violates autoscaling policies (noble)
+
+* SOLR-12680: Fix ClassCastException and AIOOBE in TestSolrConfigHandlerConcurrent. (shalin)
+
+* SOLR-12675: Make LeaderVoteWaitTimeoutTest more resilient against side effects of test methods. (shalin)
+
+* SOLR-12130: CdcrReplicationDistributedZkTest is broken into two test classes, CdcrOpsAndBoundariesTest which does
+ not require node restarts and CdcrWithNodesRestartsTest which does. The tests themselves are made faster and more
+ resilient to spurious failures. (Varun Thacker, Amrit Sarkar via shalin)
+
+* SOLR-12625: Combine SolrDocumentFetcher and RetrieveFieldsOptimizer (Erick Erickson)
+
+* SOLR-12690: Regularize LoggerFactory declarations (Erick Erickson)
+
+* SOLR-12590: Improve Solr resource loader coverage in the ref guide.
+ (Steve Rowe, Cassandra Targett, Christine Poerschke)
+
+* SOLR-12744: Improve logging messages and verbosity around recoveries (Cao Manh Dat, Varun Thacker)
+
+* SOLR-8742: In HdfsDirectoryTest replace RAMDirectory usages with ByteBuffersDirectory.
+ (hossman, Mark Miller, Andrzej Bialecki, Steve Rowe)
+
+* SOLR-12771: Improve Autoscaling Policy and Preferences documentation. (hossman, Steve Rowe)
+
+================== 7.4.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.17
+Carrot2 3.16.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.11
+Jetty 9.4.10.v20180503
+
+Upgrade Notes
+----------------------
+
+* SOLR-7887: Solr now uses Log4J 2.11 . The log4j configuration is now in log4j2.xml rather than log4j.properties files.
+ This is a server side change only and clients using SolrJ won't need any changes. Clients can still use any logging
+ implementation which is compatible with SLF4J. We now let log4j2 handle rotation of solr logs at startup, and bin/solr
+ start scripts will no longer attempt this nor move existing console or GC logs into logs/archived either (SOLR-12144).
+
+* SOLR-11673: Slave doesn't commit empty index when completely new index is detected on master during replication.
+ To return the previous behavior pass false to skipCommitOnMasterVersionZero in slave section of replication
+ handler configuration, or pass it to the fetchindex command.
+
+* SOLR-11453: Configuring slowQueryThresholdMillis now logs slow requests to a separate file - solr_slow_requests.log.
+ Previously they would get logged in the solr.log file.
+
+New Features
+----------------------
+
+* SOLR-12396: Upgrade Carrot2 to 3.16.0, HPPC to 0.8.1, morfologik to 2.1.5. (Dawid Weiss)
+
+* SOLR-11200: A new CMS config option 'ioThrottle' to manually enable/disable
+ ConcurrentMergeSchedule.doAutoIOThrottle. (Amrit Sarkar, Nawab Zada Asad iqbal via Dawid Weiss)
+
+* SOLR-11670: Implement a periodic house-keeping task. This uses a scheduled autoscaling trigger and
+ currently performs cleanup of old inactive shards. (ab, shalin)
+
+* SOLR-12015: Add support "add-distinct" in AtomicURP so that we can use the 'add-distict' as a request parameter e.g:
+ atomic.<multival-field-name>=add-distict (Amrit Sarkar via noble)
+
+* SOLR-7887: Upgrade Solr to use Log4J 2.11
+ (Tim Potter, Keith Laban, Shawn Heisey, Ralph Goers, Erick Erickson, Varun Thacker)
+
+* SOLR-12139: The "eq" (equals) function query now works with string fields, string literals, and perhaps anything.
+ (Andrey Kudryavtsev, David Smiley)
+
+* SOLR-10783: Add support for Hadoop Credential Provider as SSL/TLS store password source.
+ (Mano Kovacs via Mark Miller)
+
+* SOLR-12036: Factor out DefaultStreamFactory solrj class. (Christine Poerschke)
+
+* SOLR-12151: Add abstract MultiSolrCloudTestCase class. (Christine Poerschke)
+
+* SOLR-12181: Add index size autoscaling trigger, based on document count or size in bytes. (ab)
+
+* SOLR-11982: Add possibility to define replica order with the shards.preference parameter to e.g. prefer PULL replicas
+ for distributed queries. (Ere Maijala, Tomás Fernández Löbbe)
+
+* SOLR-11336: DocBasedVersionConstraintsProcessorFactory is more extensible and now supports a list of versioned fields.
+ (versionField config may now be a comma-delimited list). (Michael Braun via David Smiley)
+
+* SOLR-11913: SolrJ SolrParams now implements Iterable<Map.Entry<String, String[]>> and also has a stream() method
+ using it for convenience. (David Smiley, Tapan Vaishnav)
+
+* SOLR-11924: Added the ability to listen to changes in the set of active collections in a cloud
+ in the ZkStateReader, through the CloudCollectionsListener. (Houston Putman, Dennis Gove)
+
+* SOLR-8998: introducing uniqueBlock(_root_) aggregation as faster alternative to unique(_root_) for counting
+ child value facets in parents via json.facet on block index (Dr Oleg Savrasov, Mikhail Khludnev)
+
+* SOLR-12278: Add IgnoreLargeDocumentProcessFactory (Cao Manh Dat, David Smiley)
+
+* SOLR-11277: Add auto hard-commit settings based on tlog size (Rupa Shankar, Anshum Gupta)
+
+* SOLR-9480: A new 'relatedness()' aggregate function for JSON Faceting to enable building Semantic
+ Knowledge Graphs. (Trey Grainger, hossman)
+
+* SOLR-11453: Configuring slowQueryThresholdMillis logs slow requests to a separate file - solr_slow_requests.log.
+ (Shawn Heisey, Remko Popma, Varun Thacker)
+
+* SOLR-12401: Add getValue() and setValue() Stream Evaluators (Joel Bernstein, janhoy)
+
+* SOLR-12378: Support missing versionField on indexed docs in DocBasedVersionConstraintsURP.
+ (Oliver Bates, Michael Braun via Mark Miller)
+
+* SOLR-12388: Enable a strict ZooKeeper-connected search request mode, in which search
+ requests will fail when the coordinating node can't communicate with ZooKeeper,
+ by setting the "shards.tolerant" param to "requireZkConnected". (Steve Rowe)
+
+* SOLR-9685: #Tagging queries in JSON Query DSL, equivalent to LocalParams based query/filter
+ tagging. Multiple tags are comma separated.
+ LocalParams Example : {!tag=colorfilt}color:blue
+ Equivalent JSON Example : { "#colorfilt" : "color:blue" }
+ (Dmitry Tikhonov, Mikhail Khludnev, yonik)
+
+* SOLR-12328: JSON Facet API: Domain change with graph query.
+ (Daniel Meehl, Kevin Watters, yonik)
+
+* SOLR-11453: Configuring slowQueryThresholdMillis logs slow requests to a separate file - solr_slow_requests.log.
+ (Shawn Heisey, Remko Popma, Varun Thacker)
+
+* SOLR-12401: Add getValue() and setValue() Stream Evaluators (Joel Bernstein, janhoy)
+
+* SOLR-11779, SOLR-12438: Basic long-term collection of aggregated metrics. Historical data is
+ maintained as multi-resolution time series using round-robin databases in the '.system'
+ collection. New /admin/metrics/history API allows retrieval of this data in numeric
+ or graph formats. (ab)
+
+* SOLR-12387: cluster-wide defaults for numShards, nrtReplicas, tlogReplicas, pullReplicas (noble)
+
+* SOLR-12389: support deeply nested json objects in clusterprops.json (noble)
+
+* SOLR-12376: Added the TaggerRequestHandler (AKA SolrTextTagger) for tagging text. It's used as a component of
+ NER/ERD systems including query-understanding. See the ref guide for more info. (David Smiley)
+
+* SOLR-12266: Add discrete Fourier transform Stream Evaluators (Joel Bernstein)
+
+* SOLR-12158: Allow the monteCarlo Stream Evaluator to support variables (Joel Bernstein)
+
+* SOLR-11734: Add ones and zeros Stream Evaluators (Joel Bernstein)
+
+* SOLR-12273: Create Stream Evaluators for distance measures (Joel Bernstein)
+
+* SOLR-12159: Add memset Stream Evaluator (Joel Bernstein)
+
+* SOLR-12221: Add valueAt Stream Evaluator (Joel Bernstein)
+
+* SOLR-12175: Add random field type and dynamic field to the default managed-schema (Joel Bernstein)
+
+Bug Fixes
+----------------------
+
+* SOLR-5351: Fixed More Like This Handler to use all fields provided in mlt.fl when used with
+ content stream. The similarity is calculated between the content stream's value and all
+ fields listed in mlt.fl. (Dawid Weiss)
+
+* SOLR-12103: Raise CryptoKeys.DEFAULT_KEYPAIR_LENGTH from 1024 to 2048. (Mark Miller)
+
+* SOLR-12107: Fixed a error in [child] transformer that could ocur if documentCache was not used (hossman)
+
+* SOLR-12108: Fixed the fallback behavior of [raw] and [xml] transformers when an incompatble 'wt' was
+ specified, the field value was lost if documentCache was not used. (hossman)
+
+* SOLR-11551: Standardize CoreAdmin API success/failure status codes (Jason Gerlowski, Steve Rowe)
+
+* SOLR-12035: ExtendedDismaxQParser fails to include charfilters in nostopanalyzer (Tim Allison via
+ Tomás Fernández Löbbe)
+
+* SOLR-10734: AtomicUpdateRequestProcessor can cause wrong/old values to be set under concurrent updates for the same
+ document. Multithreaded test for AtomicUpdateRequestProcessor was also beefed up and fixed.
+ (Ishan Chattopadhyaya, Noble Paul, Amrit Sarkar, shalin)
+
+* SOLR-11673: By default slave doesn't commit empty index when completely new index appears on master.
+ See Upgrade Notes to find a way to get back to the previous behavior. (Mikhail Khludnev)
+
+* SOLR-9399: Delete requests do not send credentials & fails for Basic Authentication
+ (Susheel Kumar, Aibao Luo, Nikkolay Martinov via Erick Erickson)
+
+* SOLR-12172: Fixed race condition that could cause an invalid set of collection properties to be kept in
+ memory when multiple collection property changes are done in a short period of time. (Tomás Fernández Löbbe)
+
+* SOLR-11929: UpdateLog metrics are not initialized on core reload. (ab, Steve Rowe)
+
+* SOLR-11882: SolrMetric registries retained references to SolrCores when closed. A
+ change of SolrMetricMAnager.registerGauge and SolrMetricProducer.initializeMetrics
+ method signatures was required to fix it. Third party components may continue to use the old API
+ but should be updated to avoid this bug (Eros Taborelli, Erick Erickson, ab)
+
+* SOLR-12199: TestReplicationHandler.doTestRepeater(): TEST_PORT interpolation failure:
+ Server refused connection at: http://127.0.0.1:TEST_PORT/solr (Mikhail Khludnev, Dawid Weiss, Steve Rowe)
+
+* SOLR-12096: Fixed inconsistent results format of subquery transformer for distributed search (multi-shard).
+ (Munendra S N, Mikhail Khludnev via Ishan Chattopadhyaya)
+
+* SOLR-12207: Just rethrowing AssertionError caused by jdk bug in reflection with invocation details.
+ (ab, Dawid Weiss, Mikhail Khludnev)
+
+* SOLR-12155: Exception from UnInvertedField constructor puts threads to infinite wait.
+ (Andrey Kudryavtsev, Mikhail Khludnev)
+
+* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnMasterRestart(): handle unexpected replication failures
+ (Steve Rowe)
+
+* SOLR-12190: Need to properly escape output in GraphMLResponseWriter. (yonik)
+
+* SOLR-12214: Leader may skip publish itself as ACTIVE when its last published state is DOWN (Cao Manh Dat)
+
+* SOLR-12150: Fix a test bug in CdcrBidirectionalTest.testBiDir (Steve Rowe, Amrit Sarkar via Varun Thacker)
+
+* SOLR-10513: ConjunctionSolrSpellChecker did not work with LuceneLevenshteinDistance (Amrit Sarkar via James Dyer)
+
+* SOLR-11840: Fix bin/solr help-text inconsistencies (Jason Gerlowski)
+
+* SOLR-10169: PeerSync will hit an NPE on no response errors when looking for fingerprint. (Erick Erickson)
+
+* SOLR-12187: Replica should watch clusterstate and unload itself if its entry is removed (Cao Manh Dat)
+
+* SOLR-6286: TestReplicationHandler.doTestReplicateAfterCoreReload(): stop checking for identical
+ commits before/after master core reload; and make non-nightly mode test 10 docs instead of 0.
+ (shalin, hossman, Mark Miller, Steve Rowe)
+
+* SOLR-9304: Fix Solr's HTTP handling to respect '-Dsolr.ssl.checkPeerName=false' aka SOLR_SSL_CHECK_PEER_NAME
+ (Shawn Heisey, Carlton Findley, Robby Pond, hossman)
+
+* SOLR-12250: NegativeArraySizeException on TransactionLog if previous document more than 1.9GB (Cao Manh Dat)
+
+* SOLR-12253: Remove optimize button from the core admin page (Erick Erickson)
+
+* SOLR-11833: Allow searchRate trigger to delete replicas. Improve configurability of the trigger by specifying
+ upper / lower thresholds and respective actions (ab)
+
+* SOLR-12261: If you attempt to delete a collection immediately after deleting an alias it used to be a part of, you may
+ get an error that's it's a member of that alias. This check now ensures the alias state is sync()'ed with ZK first.
+ (David Smiley)
+
+* SOLR-12275: wrong caching for {!filters} as well as for `filters` local param in {!parent} and {!child}
+ (David Smiley, Mikhail Khluldnev)
+
+* SOLR-12284: WordBreakSolrSpellchecker will no longer add parenthesis in collations when breaking words in
+ non-boolean queries. (James Dyer)
+
+* SOLR-12290: Do not close any servlet streams and improve our servlet stream closing prevention code for users
+ and devs. (Mark Miller, janhoy, Andrzej Bialecki)
+
+* SOLR-12293: Updates need to use their own connection pool to maintain connection reuse and prevent spurious
+ recoveries. (Mark Miller)
+
+* SOLR-12308: LISTALIASES is now assured to return an up-to-date response. Also, the test utility
+ MiniSolrCloudCluster.deleteAllCollections will now first delete aliases since a collection cannot be deleted if an
+ alias refers to it. (David Smiley)
+
+* SOLR-12192: Fixed a solr cli error message when ulimits are unlimited. (Martijn Koster)
+
+* SOLR-12258: A V2 request referencing a collection or alias may fail to resolve it if it was just recently created.
+ Now we sync with ZooKeeper and try one more time. V1 partially did this but only for aliases; now it does both.
+ (David Smiley)
+
+* SOLR-12170: JSON Facet API: Terms facet on a date field sometimes failed with an exception complaining
+ about "Invalid Date String". (yonik)
+
+* SOLR-12307: exiting OverseerTriggerThread without endless noise in log when Zookeeper session is expired
+ (Mikhail Khludnev)
+
+* SOLR-12200: abandon OverseerExitThread when ZkController is closed. (Mikhail Khludnev)
+
+* SOLR-12355: Fixes hash conflict in HashJoinStream and OuterHashJoinStream (Dennis Gove)
+
+* SOLR-12377: Don't spin off overseer when Zk controller is closed (Mikhail Khludnev)
+
+* SOLR-3567: Spellcheck custom parameters not being passed through due to wrong prefix creation.
+ (Josh Lucas via shalin)
+
+* SOLR-12358: Autoscaling suggestions fail randomly with sorting (noble)
+
+* SOLR-12294: update processors loaded from runtime jars fail to load if they are specified
+ in an update processor chain (noble)
+
+* SOLR-12314: Use http timeout's defined in solr.xml for creating ConcurrentUpdateSolrClient during
+ indexing requests between leader and replica ( Mark Miller, Varun Thacker)
+
+* SOLR-12290: Do not close any servlet streams and improve our servlet stream closing prevention code for users
+ and devs. (Mark Miller)
+
+* SOLR-12374: SnapShooter.getIndexCommit can forget to decref the searcher; though it's not clear in practice when.
+ (David Smiley)
+
+* SOLR-12417: velocity response writer should enforce valid function name for v.json parameter (Mano Kovacs, yonik)
+
+* SOLR-12271: Fixed bug in how Analytics component reads negative values from float and double fields. (Houston Putman)
+
+* SOLR-12433: Recovering flag of a replica is set equals to leader even it failed to receive update
+ on recovering. (Cao Manh Dat)
+
+* SOLR-12354: Register the /admin/info/key end-point at the startup time to avoid 404 (noble)
+
+* SOLR-12445: Upgrade Dropwizard Metrics to version 3.2.6. (ab)
+
+* SOLR-12434: bin/solr {config,healthcheck} ignore ZK_HOST in solr.in.{sh,cmd} (Steve Rowe)
+
+* SOLR-12481: update.autoCreateFields must be set via Config API command 'set-user-property',
+ but 'bin/solr create' tells users to use the default action 'set-property', which fails
+ because the property is not editable. (Steve Rowe)
+
+* SOLR-12416: When creating a time routed alias, the router.autoDeleteAge option wasn't considered.
+ (Joachim Sauer via David Smiley)
+
+* SOLR-12450: Don't allow referal to external resources in various config files (CVE-2018-8026).
+ (Yuyang Xiao, Uwe Schindler)
+
+Optimizations
+----------------------
+
+* SOLR-11920: IndexFetcher now fetches only those files (from master/leader) that are different. This
+ differential fetching now speeds up recovery times when full index replication is needed, but only
+ a few segments diverge. (Ishan Chattopadhyaya, Shaun Sabo, John Gallagher)
+
+* SOLR-11731: LatLonPointSpatialField can now decode points from docValues when stored=false docValues=true,
+ albeit with maximum precision of 1.37cm (Karthik Ramachandran, David Smiley)
+
+* SOLR-11891: DocStreamer now respects the ReturnFields when populating a SolrDocument, reducing the
+ number of unneccessary fields a ResponseWriter will see if documentCache is used (wei wang, hossman)
+
+* SOLR-12312: Replication IndexFetcher should cap its internal buffer size when the file being transferred is small.
+ (Jeff Miller, David Smiley)
+
+* SOLR-12333: Removed redundant lines for handling lists in JSON reponse writers. (David Smiley via Mikhail Khludnev)
+
+* SOLR-11880: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed
+ search and update operations. (Varun Thacker, shalin)
+
+* SOLR-12375: Optimize Lucene ScoreMode use:
+ A non-cached filter query could be told incorrectly that scores were needed.
+ The /export (ExportQParserPlugin) would declare incorrectly that scores are needed.
+ Expanded docs (expand component) could be told incorrectly that scores are needed. (David Smiley)
+
+* SOLR-12338: Replay buffering tlog in parallel. (Cao Manh Dat, David Smiley)
+
+* SOLR-12366: A slow "live docs" implementation was being used instead of a bitset. Affects classic faceting
+ enum method, JSON Facets enum method, UnInvertedField faceting, GraphTermsQParser, JoinQParser. (David Smiley)
+
+* SOLR-12337: Remove the obsolete QueryWrapperFilter intermediate wrapper, which also removed some needless uses of
+ SolrConstantScoreQuery as well. QWF since v5.4.0 sometimes needlessly internally executed and cached the query.
+ Affects ExpandComponent, ChildDocTransformer, CurrencyFieldType, TermsQParser. (David Smiley)
+
+* SOLR-9922: Write buffering updates to another tlog. (Cao Manh Dat)
+
+* SOLR-12233: QParserPlugin's built-in static registry now holds actual QParserPlugin instances instead of class
+ references. This is consistent with other plugin registries and allows a SolrCore to load faster.
+ (Jeff Miller, David Smiley)
+
+* SOLR-12198: Stream Evaluators should not copy matrices needlessly (Joel Bernstein)
+
+Other Changes
+----------------------
+
+* SOLR-12018: Remove comments.apache.org integration for the Ref Guide; the comments system has been down since December 2017 and there is no concrete plan to bring it back. (Cassandra Targett)
+
+* SOLR-12076: Remove unnecessary printLayout usage in CDCR tests (Varun Thacker)
+
+* SOLR-12086: Fix format problem in FastLRUCache description string shown on Cache Statistics page.
+ (Sathiya N Sundararajan via shalin)
+
+* SOLR-12090: Move DistribStateManager, NodeStateProvider and SolrCloudManager interfaces out of the
+ autoscaling package. (shalin)
+
+* SOLR-12091: Rename TimeSource.getTime to getTimeNs. (ab)
+
+* SOLR-12101: ZkTestServer was not handling connection timeout settings properly. (Gus Heck via Mark Miller)
+
+* SOLR-11331: Ability to run and debug standalone Solr and a single node SolrCloud server from Eclipse.
+ Also being able to run all Lucene and Solr tests as a configuration (Karthik Ramachandran via
+ Varun Thacker, Uwe Schindler)
+
+* SOLR-12118: Solr Ref-Guide can now use some ivy version props directly as attributes in content (hossman)
+
+* SOLR-12152: Split up TriggerIntegrationTest into multiple tests to isolate and increase reliability. (shalin)
+
+* SOLR-12133: Fix race conditions that caused TriggerIntegrationTest.testEventQueue and testNodeMarkersRegistration
+ to fail. (Mark Miller, shalin)
+
+* SOLR-12169: Fix ComputePlanActionTest.testSelectedCollections fails on jenkins by aggressively cleaning up
+ trigger state left by other test methods in the test setup. (shalin)
+
+* SOLR-12144: SOLR_LOG_PRESTART_ROTATION now defaults to false, we leverage log4j2 for log rotation on startup (janhoy)
+
+* SOLR-12095: AutoScalingHandler validates trigger configurations before updating Zookeeper. (ab)
+
+* SOLR-12165: Ref Guide: DisMax default mm param value is improperly documented as 100%. (Steve Rowe)
+
+* SOLR-12154: Disallow explicit usage of Log4j2 logger via forbidden APIs. (Varun Thacker, Tomás Fernández Löbbe)
+
+* SOLR-12176: Improve FORCELEADER to handle the case when a replica win the election but does not present
+ in clusterstate (Cao Manh Dat)
+
+* SOLR-12134: ref-guide 'bare-bones html' validation is now part of 'ant documentation' and validates
+ javadoc links locally. (hossman)
+
+* SOLR-12142: EmbeddedSolrServer should use req.getContentWriter (noble)
+
+* SOLR-12252: Fix minor compiler and intellij warnings in autoscaling policy framework. (shalin)
+
+* SOLR-11914: The following SolrParams methods are now deprecated: toSolrParams (use NamedList.toSolrParams instead),
+ toMap, toMultiMap, toFilteredSolrParams, getAll. The latter ones have no direct replacement but are easy to
+ implement yourself as-needed. (David Smiley)
+
+* SOLR-10036: Upgrade jackson from 2.5.4 to 2.9.5 (Shashank Pedamallu, Shawn Heisey, Varun Thacker)
+
+* SOLR-12289: Add more MDC logging information to collection admin requests (Varun Thacker)
+
+* SOLR-12288: Add more MDC logging information to core admin requests (Varun Thacker)
+
+* SOLR-12265: Upgrade Jetty to 9.4.10.v20180503 (Varun Thacker, Steve Rowe)
+
+* SOLR-12374: Added SolrCore.withSearcher(lambda) to make grabbing the searcher easier than the more awkward
+ RefCounted API. (David Smiley)
+
+* SOLR-12183: Refactor Streaming Expression test cases (Joel Bernstein)
+
+* SOLR-12437: Document 'bin/solr config' in the ref guide. (Steve Rowe)
+
+* SOLR-12435: Fix bin/solr help and ref guide text to describe ZK_HOST in solr.in.sh/solr.in.cmd
+ as an alternative to -z cmdline param. (Steve Rowe)
+
+* SOLR-12428: Solr LTR jar now included in _default configset's solrconfig.xml (Ishan Chattopadhyaya)
+
+================== 7.3.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.17
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.11
+Jetty 9.4.8.v20171121
+
+Bug Fixes
+----------------------
+
+* SOLR-12204: Upgrade commons-fileupload dependency to 1.3.3 to address CVE-2016-1000031. (Steve Rowe)
+
+* SOLR-12256: Fixed some eventual-consistency issues with collection aliases by using ZooKeeper.sync(). (David Smiley)
+
+* SOLR-12087: Deleting replicas sometimes fails and causes the replicas to exist in the down
+ state (Cao Manh Dat)
+
+* SOLR-12146: LIR should skip deleted replicas (Cao Manh Dat)
+
+* SOLR-12066: Cleanup deleted core when node start (Cao Manh Dat)
+
+* SOLR-12065: A successful restore collection should mark the shard state as active and not buffering
+ (Rohit, Varun Thacker)
+
+* SOLR-11724: Cdcr bootstrapping should ensure that non-leader replicas should sync with the leader
+ (Amrit Sarkar, Varun Thacker)
+
+* SOLR-12202: Fix errors in solr-exporter.cmd. (Minoru Osuka via koji)
+
+* SOLR-12316: Do not allow to use absolute URIs for including other files in solrconfig.xml
+ and schema parsing (CVE-2018-8010). (Ananthesh, Ishan Chattopadhyaya, Uwe Schindler)
+
+================== 7.3.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.16
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.11
+Jetty 9.4.8.v20171121
+
+Upgrade Notes
+----------------------
+
+* SOLR-11748: The throttling mechanism used to limit the rate of autoscaling events processed
+ has been removed. This deprecates the 'actionThrottlePeriodSeconds' setting in the set-properties
+ Autoscaling API which is now a no-op. Use the 'triggerCooldownPeriodSeconds' instead to pause event
+ processing.
+
+* SOLR-11798: The top-level <highlighting> syntax in solrconfig.xml is now formally
+ deprecated in favour of <searchComponent> equivalent syntax. See also SOLR-1696.
+
+* SOLR-11809: QueryComponent's rq parameter parsing no longer considers the defType parameter.
+
+* SOLR-11747: The behaviour of the autoscaling system has been modified to pause all triggers from execution between
+ the start of actions and end of cool down period. The triggers will be resumed after the cool down period expires.
+ Previously, the cool down period was a fixed period started after actions for a trigger event complete and during
+ this time, all triggers continued to run but any events were rejected to be tried later.
+
+* SOLR-11624: Collections created without specifying a configset name use a copy of the _default configset since 7.0.
+ Before 7.3, the copied over configset was named the same as the collection name, but 7.3 onwards it will be named
+ with an additional ".AUTOCREATED" suffix.
+
+* SOLR-11702: The old Leader-In-Recovery implementation (SOLR-5495) is now deprecated and replaced. Solr will support
+ rolling upgrades from old 7.x versions of Solr to future 7.x releases until the last release of
+ the 7.x major version. This means in order to upgrade to Solr 8 in the future, you must be on Solr 7.3 or higher.
+
+* LUCENE-8161: If you are using the spatial JTS library with Solr, you must upgrade to 1.15.0. This new version
+ of JTS is now dual-licensed to include a BSD style license.
+
+* SOLR-12051: A new mechanism is introduced in SOLR-11702 to maintain consistency in SolrCloud between leader and replicas.
+ This mechanism lets Solr know whether a replica is in-sync with the leader or not, even when the leader is not live.
+ If all the replicas who participate in the leader election are out-of-sync with previous leader, the election will
+ pause until a timeout (named "leaderVoteWait") before allowing an out-of-sync replica to become leader. Note that the
+ new leader still needs to contains more updates than any other active replicas in the same shard. Therefore by
+ increasing leaderVoteWait will increase the consistency (over availability) of the system. The default value of
+ leaderVoteWait is 180,000 ms (3 minutes) and it can be adjusted in the "solrcloud" section of the solr.xml
+
+* SOLR-11957: The default Solr log file size and number of backups is raised to 32MB and 10 respectively
+
+* SOLR-12067: The default value of `autoReplicaFailoverWaitAfterExpiration` has been increased to 120 seconds
+ from the earlier default of 30 seconds. This affects how soon Solr adds new replicas to replace the replicas
+ on nodes which have either crashed or shutdown.
+
+New Features
+----------------------
+
+* SOLR-11285: Simulation framework for autoscaling. (ab)
+
+* LUCENE-2899: In the Solr analysis-extras contrib, added support for the
+ OpenNLP-based analysis components in the Lucene analysis/opennlp module:
+ tokenization, part-of-speech tagging, phrase chunking, and lemmatization.
+ Also added OpenNLP-based named entity extraction as a Solr update request
+ processor. (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau,
+ Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe)
+
+* SOLR-11201: Implement autoscaling trigger for arbitrary metrics that creates events when
+ a given metric breaches a threshold (shalin)
+
+* SOLR-11653: TimeRoutedAlias URP now auto-creates new collections on the fly according to alias metadata
+ rules that sets the time interval for each collection. An internal Overseer command "ROUTEDALIAS_CREATECOLL"
+ was created to facilitate this. (David Smiley)
+
+* SOLR-11062: new tag "diskType" in autoscaling policy (noble)
+
+* SOLR-11063: Suggesters should accept required freedisk as a hint (noble)
+
+* SOLR-3218: Added range faceting support for CurrencyFieldType. This includes both "facet.range" as well
+ as json.facet's "type:range" (Andrew Morrison, Jan Høydahl, Vitaliy Zhovtyuk, hossman)
+
+* SOLR-11064: Collection APIs should use the disk space hint when using policy framework (noble)
+
+* SOLR-11854: multivalued primitive fields can now be sorted by implicitly choosing the min/max
+ value for asc/desc sort orders. (hossman)
+
+* SOLR-11592: Add OpenNLP language detection to the langid contrib. (Koji, Steve Rowe)
+
+* SOLR-11648: A new admin UI to display and execute suggestions (Apoorv Bhawsar , noble)
+
+* SOLR-11722: Added "time routed alias" creation support to the CREATEALIAS command. It's for managing multiple
+ collections partitioned by time. (Gus Heck, David Smiley)
+
+* SOLR-11782: Refactor LatchWatcher.await to protect against spurious wakeup (Tomás Fernández Löbbe, David Smiley, Dawid Weiss)
+
+* SOLR-11617: Alias properties (formerly "metadata") are now mutable via a new ALIASPROP command.
+ These properties are returned from LISTALIASES. (Gus Heck via David Smiley)
+
+* SOLR-11702: Redesign current LIR implementation (Cao Manh Dat, shalin)
+
+* SOLR-11376: Support computing plans for only specific collections. (ab)
+
+* SOLR-11681: Add ttest and pairedTtest Stream Evaluators (Joel Bernstein)
+
+* SOLR-11785: Add multiVariateNormalDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11789: Add integrate Stream Evaluator to support integral calculations (Joel Bernstein)
+
+* SOLR-11791: Add density Stream Evaluator (Joel Bernstein)
+
+* SOLR-11172: Add Mann-Whitney U test Stream Evaluator (Mathew Skaria, Joel Bernstein)
+
+* SOLR-11808: Add sumSq Stream Evaluator (Joel Bernstein)
+
+* SOLR-11430: Add lerp and akima Stream Evaluators to support linear and akima spline interpolation (Joel Bernstein)
+
+* SOLR-11683: Add chiSquareDataSet Stream Evaluator (Joel Bernstein)
+
+* SOLR-10716: Add termVectors Stream Evaluator (Joel Bernstein)
+
+* SOLR-11737: Add kmeans Stream Evaluator to support kmeans clustering (Joel Bernstein)
+
+* SOLR-11736: Rename knn Streaming Expression to knnSearch and add new knn Stream Evaluator (Joel Bernstein)
+
+* SOLR-11867: Add indexOf, rowCount and columnCount StreamEvaluators (Joel Bernstein)
+
+* SOLR-11862: Add fuzzyKmeans Stream Evaluatory (Joel Bernstein)
+
+* SOLR-11890: Add multiKmeans Stream Evaluator (Joel Bernstein)
+
+* SOLR-11916: new SortableTextField which supports analysis/searching just like TextField, but also
+ sorting/faceting just like StrField. By default uses only the first 1024 chars of the original
+ input string values, but this is configurable. (hossman)
+
+* SOLR-11778: Add per-stage RequestHandler metrics. (ab)
+
+* SOLR-11925: Time Routed Aliases can have their oldest collections automatically deleted via the "router.autoDeleteAge"
+ setting. (David Smiley)
+
+* SOLR-11941: Add abstract contrib/ltr AdapterModel to facilitate the development of scoring models that delegate
+ scoring to an opaque pre-trained model. (Christine Poerschke)
+
+* SOLR-11689: Add l1norm, l2norm and linfnorm Stream Evaluators (Joel Bernstein)
+
+* SOLR-11588: Add matrixMult Stream Evaluator to support matrix multiplication (Joel Bernstein)
+
+* SOLR-12006: Add a '*_t' and '*_t_sort' dynamic field for single valued text fields (Varun Thacker)
+
+* SOLR-11597: Add contrib/ltr NeuralNetworkModel class. (Michael A. Alcorn, Yuki Yano, Christine Poerschke)
+
+* SOLR-11066: Implement a scheduled autoscaling trigger that runs on a fixed interval beginning with a
+ given start time. (David Smiley, Gus Heck, ab, shalin)
+
+* SOLR-11795: Add Solr metrics exporter for Prometheus (Minoru Osuka via koji)
+
+* SOLR-11267: Add support for "add-distinct" atomic update operation (Amrit Sarkar via noble )
+
+* SOLR-11960: Add collection level properties similar to cluster properties (Peter Rusko, Tomás Fernández Löbbe)
+
+* SOLR-12077: Add support for autoAddReplicas in the collection creation dialog in Admin UI. (shalin)
+
+* SOLR-9510: introducing {!filters param=$fq excludeTags=f} query parser.
+ Introducing {!.. filters=$fq excludeTags=t,q} in {!parent} and {!child} (Dr. Oleg Savrasov via Mikhail Khludnev)
+
+Bug Fixes
+----------------------
+
+* SOLR-11783: Rename core in solr standalone mode is not persisted (Erick Erickson)
+
+* SOLR-11555: If the query terms reduce to nothing, filter(clause) produces an NPE whereas
+ fq=clause does not (Erick Erickson)
+
+* SOLR-11824: Fixed bucket ordering in distributed json.facet type:range when mincount>0 (hossman)
+
+* SOLR-11821: ConcurrentModificationException in SimSolrCloudTestCase.tearDown (shalin)
+
+* SOLR-11631: The Schema API should return non-zero status when there are failures.
+ (Noble Paul, Steve Rowe)
+
+* SOLR-11839: Fix test failures resulting from SOLR-11218 (Erick Erickson)
+
+* SOLR-11794: PULL replicas stop replicating after collection RELOAD (Samuel Tatipamula, Tomás Fernández Löbbe)
+
+* SOLR-11714: AddReplicaSuggester / ComputePlanAction infinite loop. (ab)
+
+* SOLR-11895: Logging Screen in the Admin UI will now show "No Events available" when there are no events to show.
+ Also, the spinner icon is removed to prevent users thinking the page has hung. (Cassandra Targett, Shawn Heisey)
+
+* SOLR-10525: Stacked recovery requests do no cancel an in progress recovery first. (Mike Drob via Cao Manh Dat)
+
+* SOLR-11873: Use time based expiration cache in all necessary places in HdfsDirectoryFactory. (Mihaly Toth via Mark Miller)
+
+* SOLR-11661: New HDFS collection reuses unremoved data from a deleted HDFS collection with same name causes
+ inconsistent view of documents (Cao Manh Dat, shalin)
+
+* SOLR-11459: In-place update of nonexistent doc following existing doc update fails to create the doc.
+ (Andrey Kudryavtsev via Mikhail Khludnev)
+
+* SOLR-11931: Fix contrib/ltr custom inner class feature/normaliser/model persistence. (Christine Poerschke)
+
+* SOLR-10261: In case of in-place updates, failure in leader to follower replica update request now throws the
+ follower replica in leader-initiated-recovery (Ishan Chattopadhyaya, Steve Rowe)
+
+* SOLR-11898: ConcurrentModificationException when calling org.apache.solr.core.SolrInfoBean.getMetricsSnapshot
+ (Jeff Miller via Erick Erickson)
+
+* SOLR-11950: Allow CLUSTERSTATUS "shard" parameter to accept comma (,) delimited list (Chris Ulicny via Jason Gerlowski)
+
+* SOLR-11739: Fix race condition that made Solr accept duplicate async IDs in collection API operations (Tomás Fernánadez Löbbe)
+
+* SOLR-11988: Fix exists() method in EphemeralDirectoryFactory/MockDirectoryFactory to prevent false positives (hossman)
+
+* SOLR-11971: Don't allow referal to external resources in DataImportHandler's dataConfig request parameter (CVE-2018-1308).
+ (麦 香浓éƒ, Uwe Schindler)
+
+* SOLR-12021: Fixed a bug in ApiSpec and other JSON resource loading that was causing unclosed file handles (hossman)
+
+* SOLR-10720: Aggressive removal of a collection breaks cluster status API. (Alexey Serba, shalin)
+
+* SOLR-12050: UTILIZENODE does not enforce policy rules (hossman, noble)
+
+* SOLR-11843: Admin UI collection creation was not properly handling the router.field and router.name parameters.
+ Also changed the display label in the Admin UI from routerField to router.field to match the actual API.
+ (Shawn Heisey via Cassandra Targett)
+
+* SOLR-12011: Consistence problem when in-sync replicas are DOWN. (Cao Manh Dat)
+
+* SOLR-12020: JSON Facet API: terms facet on date field fails in refinement phase with
+ "Invalid Date String" error. (yonik)
+
+* SOLR-12061: Fix substitution bug in API V1 to V2 migration when using SolrJ with V2 API. (Tomás Fernánadez Löbbe)
+
+* SOLR-11976: TokenizerChain.normalize: only the first filter that is a MultiTermAwareComponent was participating
+ in normalization instead of all. This bug normally doesn't matter since TextField doesn't call it.
+ (Tim Allison via David Smiley)
+
+* SOLR-12072: Invalid path string using ZkConfigManager.copyConfigDir(String fromConfig, String toConfig)
+ (Alessandro Hoss via Erick Erickson)
+
+* SOLR-12064: JSON Facet API: fix bug where a limit of -1 in conjunction with multiple facets or
+ missing=true caused an NPE or AIOOBE. (Karthik Ramachandran via yonik)
+
+* SOLR-12083: Fix RealTime GET to work on a cluster running CDCR when using Solr's in-place updates
+ (Amrit Sarkar, Varun Thacker)
+
+* SOLR-12063: Fix PeerSync, Leader Election failures and CDCR checkpoint inconsistencies on a cluster running CDCR
+ (Amrit Sarkar, Varun Thacker)
+
+* SOLR-12110: Replica which failed to register in Zk can become leader (Cao Manh Dat)
+
+* SOLR-12129: After the core is reloaded, term of the core will not be watched (Cao Manh Dat)
+
+* SOLR-12141: Fix "bin/solr" shell scripts (Windows/Linux/Mac) to correctly detect major Java version
+ and use numerical version comparison to enforce minimum requirements. Also remove obsolete "UseParNewGC" option.
+ This allows to start Solr with Java 10 or later. (Uwe Schindler)
+
+Optimizations
+----------------------
+
+* SOLR-11711: Fixed distributed processing of facet.field/facet.pivot sub requests to prevent requesting
+ unneccessary and excessive '0' count terms from each shard (Houston Putman via hossman)
+
+* LUCENE-8149: NRTCachingDirectory does not need to preemptively delete segment files and generate exceptions
+ (Erick Erickson)
+
+* SOLR-11879: avoid EOFException for empty input streams (noble)
+
+* SOLR-8327: Cluster state caching to avoid live fetch from ZK of cluster state for forwarding requests on nodes
+ that do not host any replica of the collection (Jessica Cheng Mallet, John Gallagher, Noble Paul, Ishan Chattopadhyaya)
+
+* SOLR-11769: Optimize when useFilterForSortedQuery=true and there are no filter queries by avoiding
+ needless match-all-docs bitset construction. (Betim Deva, David Smiley)
+
+Other Changes
+----------------------
+
+* SOLR-11629: Add more intuitive CloudSolrClient.Builder constructors (Varun Thacker, Jason Gerlowski)
+
+* SOLR-11575: Improve ref-guide solrj snippets via mock 'print()' method (Jason Gerlowski via hossman)
+
+* SOLR-11757: In tests, fix race condition on SolrException.ignoreException.
+ Also ensure we register "ignore_exception" in @BeforeClass (previously only @AfterClass) (David Smiley)
+
+* SOLR-11754: Remove AbstractSolrTestCase which has long been supplanted by SolrTestCaseJ4. (David Smiley)
+
+* SOLR-11701: Upgrade to Tika 1.17 when available (Tim Allison, Karthik Ramachandran via Erick Erickson)
+
+* SOLR-11703: Solr Should Send Log Notifications if Ulimits are too low (Kevin Cowan via Erick Eickson)
+
+* SOLR-11793: Reduce code duplication w.r.t. RestTestHarness(es). (Christine Poerschke)
+
+* SOLR-7733: remove "optimize" from the UI. (Erick Erickson)
+
+* SOLR-11748: Remove Autoscaling action throttle. (shalin)
+
+* SOLR-11805: SolrJ's SolrResponse.getElaspedTime was sometimes a millisecond off. (David Smiley)
+
+* SOLR-11798: Formally deprecate top-level <highlighting> syntax in solrconfig.xml
+ in favour of <searchComponent> equivalent syntax. (Christine Poerschke)
+
+* SOLR-11801: Support customisation of the "highlighting" query response element.
+ (Ramsey Haddad, Pranav Murugappan, David Smiley, Christine Poerschke)
+
+* SOLR-11692: SolrDispatchFilter's use of a "close shield" in tests should not be applied to
+ further servlet chain processing. (Jeff Miller, David Smiley)
+
+* SOLR-11218: Fail and return an error when attempting to delete a collection that's part of an alias (Erick Erickson)
+
+* SOLR-11817: Move Collections API classes to it's own package (Varun Thacker)
+
+* SOLR-11810: Upgrade Jetty to 9.4.8.v20171121 (Varun Thacker, Erick Erickson)
+
+* SOLR-11747: Pause triggers until actions finish executing and the cool down period expires. (shalin)
+
+* SOLR-11871: MoveReplicaSuggester should not suggest leader if other replicas are available (noble)
+
+* SOLR-11624: Collections created from _default configset will now be associated with a configset with a suffix
+ .AUTOCREATED. For example, a new collection "mycollection", created without specifying a configset name, will
+ use the _default configset and the associated configset name will be "mycollection.AUTOCREATED". If this
+ collection is deleted and re-created, the autocreated configset will be left behind and will be re-used for
+ the re-created collection (Ishan Chattopadhyaya, Abhishek Kumar Singh)
+
+* SOLR-11051: Use disk free metric in default cluster preferences (noble)
+
+* SOLR-11658: Upgrade ZooKeeper dependency to 3.4.11 (Jason Gerlowski, Steve Rowe, Erick Erickson)
+
+* SOLR-11480: Remove unused "Admin Extra" files and mentions. (Eric Pugh, Christine Poerschke)
+
+* SOLR-11067: REPLACENODE should identify appropriate nodes if targetNode is not provided (noble)
+
+* SOLR-11848: Update Ref Guide to include info on grouping operations and using curl for large files. (Dariusz Wojtas
+ via Cassandra Targett)
+
+* SOLR-11613: Make message for missing dataimport config in UI more explicit. (Shawn Heisey, Amrit Sarkar via
+ Cassandra Targett)
+
+* SOLR-11933: Make DIH UI page safer by not default checking the clean checkbox (Eric Pugh via Tomás Fernández Löbbe)
+
+* SOLR-11349: Rename ResponseBuilder's getQueryCommand to createQueryCommand. (Christine Poerschke)
+
+* SOLR-11902: Clarify in bin/solr help text whether commands can be run remotely (Jason Gerlowski)
+
+* SOLR-3089: RequestBuilder now exposes isDistrib() method. Using this, plugins can know whether a request is
+ distributed. (Rok Rejc, Frank Wesemann, Abhishek Kumar Singh, Mikhail Khludnev via Ishan Chattopadhyaya)
+
+* SOLR-8090: Make text elements in the UI darker for better contrast and readability (Cassandra Targett)
+
+* SOLR-6057: Change highlight color in UI Analysis screen (Cassandra Targett)
+
+* SOLR-11897: Add toggle to disable auto-refresh of Logging page in the UI (Tommy Marshment-Howell via
+ Cassandra Targett)
+
+* SOLR-12017: Remove BadApple and AwaitsFix annotations that link to closed JIRAs (Erick Erickson)
+
+* SOLR-12027: Increase thread lingering timeout to 80s. (Mikhail Khludnev)
+
+* SOLR-10809: Get precommit lint warnings out of Solr core (Erick Erickson)
+
+* SOLR-12028: BadApple and AwaitsFix annotations usage (Erick Erickson, Uwe Schindler)
+
+* SOLR-12031: Refactor Policy framework to make simulated changes affect more than a single node (noble)
+
+* SOLR-11957: Increase MaxFileSize=32MB and MaxBackupIndex=10 for RollingFileAppender in log4j.properties
+ (Varun Thacker, shalin)
+
+* SOLR-12047: Increase checkStateInZk timeout (Cao Manh Dat, Varun Thacker)
+
+* SOLR-12051: Election timeout when no replicas are qualified to become leader (Cao Manh Dat)
+
+* SOLR-12067: Increase autoAddReplicas default 30 second wait time to 120 seconds.
+ (Varun Thacker, Mark Miller via shalin)
+
+* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnMasterRestart that happened
+ due to using stale http connections. (Gus Heck, shalin)
+
+* SOLR-12099: Remove reopenReaders attribute from 'IndexConfig in SolrConfig' page in ref guide. (shalin)
+
+* SOLR-12098: Document the Lucene spins auto-detection and its effect on CMS dynamic defaults.
+ (Cassandra Targett, shalin)
+
+* SOLR-12097: Document the diskType policy attribute and usage of disk space in Collection APIs.
+ (Cassandra Targett, shalin)
+
+================== 7.2.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.16
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.20.v20170531
+
+Bug Fixes
+----------------------
+
+* SOLR-11771: Overseer can never process some last messages (Cao Manh Dat)
+
+* SOLR-11783: Rename core in solr standalone mode is not persisted (Erick Erickson)
+
+* SOLR-11809: QueryComponent.prepare rq parsing could fail under SOLR 7.2.0 - fix:
+ QueryComponent's rq parameter parsing no longer considers the defType parameter.
+ (Christine Poerschke and David Smiley in response to bug report/analysis
+ from Dariusz Wojtas and Diego Ceccarelli)
+
+* SOLR-11555: If the query terms reduce to nothing, filter(clause) produces an NPE whereas
+ fq=clause does not (Erick Erickson)
+
+================== 7.2.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.16
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.20.v20170531
+
+Upgrade Notes
+----------------------
+
+* SOLR-11501: Starting a query string with local-params {!myparser ...} is used to switch the query parser to another,
+ and is intended for use by Solr system developers, not end users doing searches. To reduce negative side-effects of
+ unintended hack-ability, we've limited the cases that local-params will be parsed to only contexts in which the
+ default parser is "lucene" or "func".
+ So if defType=edismax then q={!myparser ...} won't work. In that example, put the desired query parser into defType.
+ Another example is if deftype=edismax then hl.q={!myparser ...} won't work for the same reason. In that example,
+ either put the desired query parser into hl.qparser or set hl.qparser=lucene. Most users won't run into these cases
+ but some will and must change.
+ If you must have full backwards compatibility, use luceneMatchVersion=7.1.0 or something earlier. (David Smiley)
+
+* SOLR-11501: The edismax parser by default no longer allows subqueries that specify a Solr parser using either
+ local-params, or the older _query_ magic field trick. For example
+ {!prefix f=myfield v=enterp} or _query_:"{!prefix f=myfield v=enterp}" are not supported by default anymore.
+ If you want to allow power-users to do this, set uf=* _query_ or some other value that includes _query_.
+ If you must have full backwards compatibility, use luceneMatchVersion=7.1.0 or something earlier. (David Smiley)
+
+New Features
+----------------------
+* SOLR-11448: Implement an option in collection commands to wait for final results. (ab)
+
+* SOLR-11072: Implement trigger for searchRate event type. (ab)
+
+* SOLR-11524: A new autoscaling/suggestions API end-point which gives autoscaling suggestions (noble)
+
+* SOLR-11519: Implement autoscaling suggestions for replica count violations (noble)
+
+* SOLR-11518: Implement autoscaling Suggestions for freedisk violations (noble)
+
+* SOLR-10132: A new optional facet.matches parameter to return facet buckets only
+ for terms that match a regular expression. (Gus Heck, Christine Poerschke)
+
+* SOLR-11520: Implement autoscaling suggestions for cores count violations (noble)
+
+* SOLR-11438: Solr should return rf when min_rf is specified for deletes as well as adds (Erick Erickson)
+
+* SOLR-11003: Support bi-directional syncing of cdcr clusters. We still only support active indexing in one cluster,
+ but have the ability to switch indexing clusters and cdcr will replicate correctly. (Amrit Sarkar, Varun Thacker)
+
+* SOLR-11538: Implement suggestions for port,ip_*, nodeRole,sysprop.*, metrics:* (noble)
+
+* SOLR-11487: Collection Aliases may now have metadata (currently an internal feature).
+ (Gus Heck, David Smiley)
+
+* SOLR-11542: New TimeRoutedAliasUpdateProcessor URP that routes documents to another collection
+ in the same Alias defined set based on a time field (currently an internal feature).
+ (David Smiley)
+
+* SOLR-9743: A new UTILIZENODE command (noble)
+
+* SOLR-11202: Implement a set-property command for AutoScaling API. (ab, shalin)
+
+* SOLR-11250: A new DefaultWrapperModel class for loading of large and/or externally stored
+ LTRScoringModel definitions. (Yuki Yano, shalin, Christine Poerschke)
+
+* SOLR-11662: New synonymQueryStyle option to configure whether SynonymQuery, a DisjunctionMaxQuery, or BooleanQuery
+ occurs over query terms that overlap their position. (Doug Turnbull, David Smiley)
+
+* SOLR-11429: Add loess Stream Evaluator to support local regression (Joel Bernstein)
+
+* SOLR-11568: Add matrix Stream Evaluator to support efficient matrix operations (Joel Bernstein)
+
+* SOLR-11566: Add transpose Stream Evaluator to support transposing of matrices (Joel Bernstein)
+
+* SOLR-11565: Add unit Stream Evaluator to support unitizing of vectors (Joel Bernstein)
+
+* SOLR-11567: Add triangularDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11593: Add support for covariance matrices to the cov Stream Evaluator (Joel Bernstein)
+
+* SOLR-10680: Add minMaxScale Stream Evaluator (Joel Bernstein)
+
+* SOLR-11599: Change normalize function to standardize and make it work with matrices (Joel Bernstein)
+
+* SOLR-11602: Add Markov Chain Stream Evaluator (Joel Bernstein)
+
+* SOLR-11607: Add grandSum, sumRows, sumColumns, scalarDivide, scalarMultiply, scalarAdd,
+ scalarSubtract Stream Evaluators (Joel Bernstein)
+
+* SOLR-11571: Add diff Stream Evaluator to support time series differencing (Mathew Skaria, Joel Bernstein)
+
+* SOLR-11570: Add support for correlation matrices to the corr Stream Evaluator (Joel Bernstein)
+
+* SOLR-11569: Add support for distance matrices to the distance Stream Evaluator (Joel Bernstein)
+
+* SOLR-11674: Support ranges in the probability Stream Evaluator (Joel Bernstein)
+
+* SOLR-11680: Add normalizeSum Stream Evaluator (Joel Bernstein)
+
+* SOLR-11697: Add geometricDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11485: Add olsRegress, spline and derivative Stream Evaluators (Joel Bernstein)
+
+Bug Fixes
+----------------------
+
+* SOLR-11423: Overseer queue needs a hard cap (maximum size) that clients respect (Scott Blum, Joshua Humphries, Noble Paul)
+
+* SOLR-11445: Overseer should not hang when process bad message. (Cao Manh Dat, shalin)
+
+* SOLR-11447: ZkStateWriter should process commands in atomic. (Cao Manh Dat, shalin)
+
+* SOLR-11491: Support retrieval of cluster properties in HttpClusterStateProvider. (ab)
+
+* SOLR-11146: Small fixes to the mapping functions in the Analytics Component (Houston Putman)
+
+* SOLR-11326: A bootstrap of a target cluster does not need to download the tlog files from the source cluster
+ (Amrit Sarkar, Varun Thacker)
+
+* SOLR-10874: Fix AIOOBE caused by FloatPayloadValueSource calling PostingsEnum.nextPosition()
+ more than the given term's frequency in overridden FloatDocValues.floatVal().
+ (Michael Kosten, Erik Hatcher, Steve Rowe)
+
+* SOLR-11484: CloudSolrClient does not invalidate cache or retry for RouteException (noble, hossman)
+
+* SOLR-11532: Solr hits NPE when fl only contains DV fields and any of them is a spatial field. (Cao Manh Dat, David Smiley)
+
+* SOLR-11557: Fix SolrZkClient.checkInterrupted (Tomás Fernández Löbbe)
+
+* SOLR-11413: SolrGraphiteReporter fails to report metrics due to non-thread safe code. (Erik Persson, ab)
+
+* SOLR-9440: The ZkStateReader.removeCollectionStateWatcher method can cache a DocCollection reference and
+ never update it causing stale state to be returned in ClusterState. (shalin)
+
+* SOLR-11560: Specifying the replicationFactor parameter while restoring a collection would lead to extra tlog
+ and pull replicas being created (Peter Szantai-Kis, Varun Thacker)
+
+* SOLR-11586: Restored collection should use stateFormat=2 instead of 1. (Varun Thacker)
+
+* SOLR-11503: Collections created with legacyCloud=true cannot be opened if legacyCloud=false (Erick Erickson)
+
+* SOLR-11619: V2 requests that needed to be forwarded to other nodes would get an NPE. (David Smiley)
+
+* SOLR-11231: Guard against unset fields when performing language detection.
+ (Chris Beer via Steve Rowe)
+
+* SOLR-11553: JSON Facet API: facet refinement could use UIF in phase one and DV uninversion in phase 2, resulting
+ in too much memory use. (yonik)
+
+* SOLR-11645: When the java commandline had exact duplicate arguments, the
+ admin UI dashboard would not display any commandline arguments.
+ (Webster Homer via Shawn Heisey)
+
+* SOLR-11608: Correctly parse the new core-name in the V2 core rename API.
+ (Jason Gerlowski via Anshum Gupta)
+
+* SOLR-11256: The queue size for ConcurrentUpdateSolrClient should default to 10 instead of throwing an
+ IllegalArgumentException. (Jason Gerlowski, Anshum Gupta)
+
+* SOLR-11616: Snapshot the segments more robustly such that segments created during a backup does does not fail the
+ operation (Varun Thacker)
+
+* SOLR-11687: SolrCore.getNewIndexDir falsely returns {dataDir}/index on any IOException reading index.properties
+ (Nikolay Martynov, Erick Erickson)
+
+* SOLR-9137: bin/solr script ignored custom STOP_PORT on shutdown.
+ (Joachim Kohlhammer, Steve Rowe, Christine Poerschke)
+
+* SOLR-11458: Improve error handling in MoveReplicaCmd to avoid potential loss of data. (ab)
+
+* SOLR-11590: Synchronize ZK connect/disconnect handling so that they are processed in linear order
+ (noble, Varun Thacker)
+
+* SOLR-11664: JSON Facet API: range facets containing unique, hll, min, max aggregations over string fields
+ produced incorrect results since 7.0 (Volodymyr Rudniev, yonik)
+
+* SOLR-11691: V2 requests for create-alias didn't work when the collections param was an array.
+ (Jason Gerlowski, Gus Heck, David Smiley, noble)
+
+Optimizations
+----------------------
+* SOLR-11285: Refactor autoscaling framework to avoid direct references to Zookeeper and Solr
+ to make testing and large scale simulations easier. (ab)
+
+* SOLR-11443: Remove the usage of workqueue for Overseer. (Cao Manh Dat, Scott Blum)
+
+* SOLR-11320: Lock autoscaling triggers when changes they requested are being made. This helps to
+ ensure that cluster is in a stable state before processing any new trigger events. (ab)
+
+* SOLR-11641: Change `frange` to default to `cost=100` so default behavior is to PostFilter if user specifies
+ `cache=false` (hossman)
+
+* SOLR-11595: SolrIndexSearcher.localCollectionStatistics is now faster by leveraging an existing
+ cached MultiFields. Noticeable when many fields are searched. (David Smiley)
+
+Other Changes
+----------------------
+* SOLR-11478: Solr should remove itself from live_nodes in zk immediately on shutdown. (Cao Manh Dat)
+
+* SOLR-11145: Adds comprehensive unit tests for the Analytics Component v2 (Houston Putman)
+
+* SOLR-11389: For Solr(Shard|Cluster)Reporter instances the SolrMetricManager.registerReporter
+ method is now called after the SolrCore or CoreContainer has been set for the instance.
+ (Christine Poerschke)
+
+* SOLR-11464, SOLR-11493, SOLR-11511: Minor refactorings to DistributedUpdateProcessor. (Gus Heck, David Smiley)
+
+* SOLR-11444: Improved consistency of collection alias handling, and collection references that are
+ comma delimited lists of collections, across the various places collections can be referred to.
+ Updates are delivered to the first in a list. It's now possible to refer to a comma delimited list
+ of them in the path, ex: /solr/colA,colB/select?... (David Smiley)
+
+* SOLR-11165: Ref guide documentation for Autoscaling APIs, triggers, listeners, actions for Solr 7.1
+ (ab, Cassandra Targett, Noble Paul, shalin)
+
+* SOLR-11562: Restore Solr logo ASCII-art in startup log by removing unnecessary default confdir logging (janhoy)
+
+* SOLR-11380: SolrJ must stream docs to server instead of writing to a buffer first (noble)
+
+* SOLR-11603: Remove unused (public) LTRScoringModel.hasParams() method. (Christine Poerschke)
+
+* SOLR-11606: Disable tests automatically if Mockito does not work with Java runtime (Java 10).
+ (Uwe Schindler)
+
+* SOLR-11618: Tone down verbosity of BackupManager logging (Varun Thacker)
+
+* SOLR-11621: Fix spurious failures of TriggerIntegrationTest due to timing issues. (shalin)
+
+* SOLR-11628: Add documentation of maxRamMB for filter cache and query result cache. (shalin)
+
+* SOLR-11610: Refactored payload handling to use lucene's PayloadDecoder
+ framework (Alan Woodward)
+
+* SOLR-9120: Reduce log level for inconsequential NoSuchFileException that LukeRequestHandler may encounter (hossman)
+
+* SOLR-10469: Move CloudSolrClient.setParallelUpdates to its Builder. (David Smiley)
+
+* SOLR-11507: SOLR-11638: Randomize SolrTestCaseJ4.CloudSolrClientBuilder more, and simplify it.
+ (Jason Gerlowski, David Smiley)
+
+* SOLR-11291: Factor out abstract metrics/SolrCore[Container]Reporter classes.
+ (Omar Abdelnabi, Christine Poerschke)
+
+* SOLR-11713: Fixed CdcrUpdateLogTest.testSubReader() failure which was a test bug (Varun Thacker, Amrit Sarkar)
+
+================== 7.1.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.16
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.20.v20170531
+
+Detailed Change List
+----------------------
+
+Upgrade Notes
+----------------------
+
+* 'autoAddReplicas' feature is ported to autoscaling framework. Existing users of this feature should not have
+ to change anything. Note these changes:
+ 1. Behaviour: Changing the autoAddReplicas property from disabled to enabled using MODIFYCOLLECTION API
+ no longer replaces down replicas for the collection immediately. Instead, replicas are only added
+ if a node containing them went down while autoAddReplicas was enabled. The params
+ autoReplicaFailoverBadNodeExpiration and autoReplicaFailoverWorkLoopDelay are no longer used.
+ 2. Deprecations: Enabling/disabling autoAddReplicas cluster wide with the API will be deprecated; use
+ suspend/resume trigger APIs with name='.auto_add_replicas' instead.
+
+* SOLR-11195: shard and cluster metric reporter configuration now requires a class attribute.
+ If a reporter configures the group="shard" attribute then please also configure the
+ class="org.apache.solr.metrics.reporters.solr.SolrShardReporter" attribute.
+ If a reporter configures the group="cluster" attribute then please also configure the
+ class="org.apache.solr.metrics.reporters.solr.SolrClusterReporter" attribute.
+
+* SOLR-11254: the abstract DocTransformer class now has an abstract score-less transform method variant.
+
+* SOLR-11283: all Stream Evaluators in solrj.io.eval have been refactored to have a simplier and more
+ robust structure. This simplifies and condenses the code required to implement a new Evaluator and
+ makes it much easier for evaluators to handle differing data types (primitives, objects, arrays,
+ lists, and so forth). (Dennis Gove)
+
+* SOLR-10962: in the ReplicationHandler the master.commitReserveDuration sub-element is deprecated. Instead
+ please configure a direct commitReserveDuration element for use in all modes (master, slave, cloud).
+
+* SOLR-11482: RunExecutableListener was removed for security reasons. If you want to listen to
+ events caused by updates, commits, or optimize, write your own listener as native Java class
+ as part of a Solr plugin.
+
+* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
+ the resolving of external entities is now disallowed by default.
+
+New Features
+----------------------
+* SOLR-10339: New set-trigger and remove-trigger APIs for autoscaling. (shalin)
+
+* SOLR-10340: New set-listener and remove-listener API for autoscaling. (shalin)
+
+* SOLR-10358: New suspend-trigger and resume-trigger APIs for autoscaling. (shalin)
+
+* SOLR-10376: Implement autoscaling trigger for nodeAdded event. (shalin)
+
+* SOLR-10396: Implement trigger support for nodeLost event type (Cao Manh Dat, shalin)
+
+* SOLR-10496: New ComputePlanAction for autoscaling which uses the policy framework to compute cluster
+ operations upon a trigger fire. (Noble Paul, shalin)
+
+* SOLR-10965: New ExecutePlanAction for autoscaling which executes the operations computed by ComputePlanAction
+ against the cluster. (shalin)
+
+* SOLR-11019: Add addAll Stream Evaluator (Joel Bernstein)
+
+* SOLR-10996: Implement TriggerListener API (ab, shalin)
+
+* SOLR-11046: Add residuals Stream Evaluator (Joel Bernstein)
+
+* SOLR-10858: Make UUIDUpdateProcessorFactory as Runtime URP (Amit Sarkar, noble)
+
+* SOLR-11031: Implement SystemLogListener for autoscaling (ab)
+
+* SOLR-11205: Any metrics value can be directly accessed in autoscaling policies (noble)
+
+* SOLR-11199: Payloads supports an "operator" param. Supported operators are 'or', "phrase" ( default ).
+ A new "sum" function is also added. Example :
+ {!payload_score f=payload_field func=sum operator=or}A B C" (Varun Thacker)
+
+* SOLR-11215: Make a metric accessible through a single param. (ab)
+
+* SOLR-11244: Query DSL for Solr (Cao Manh Dat)
+
+* SOLR-11317: JSON Facet API: min/max aggregations on numeric fields are now typed better so int/long
+ fields return an appropriate integral type rather than a double. (yonik)
+
+* SOLR-11316: JSON Facet API: min/max aggregations are now supported on single-valued date fields.
+ (yonik)
+
+* SOLR-10962: Make ReplicationHandler's commitReserveDuration configurable in SolrCloud mode.
+ (Ramsey Haddad, Christine Poerschke, hossman)
+
+* SOLR-11382: Lucene's Geo3D (surface of sphere & ellipsoid) is now supported on spatial RPT fields by
+ setting spatialContextFactory="Geo3D". Furthermore, this is the first time Solr has out of the box
+ support for polygons. (David Smiley)
+
+* SOLR-11160: Add normalDistribution, uniformDistribution, sample and kolmogorovSmirnov Stream Evaluators
+ (Joel Bernstein)
+
+* SOLR-11225: Add cumulativeProbability Stream Evaluator (Joel Bernstein)
+
+* SOLR-11241: Add discrete counting and probability Stream Evaluators (Joel Bernstein)
+
+* SOLR-11321: Add ebeAdd, ebeSubtract, ebeDivide, ebeMultiply, dotProduct and cosineSimilarity Stream Evaluators
+ (Joel Bernstein)
+
+* SOLR-11338: Add Kendall's Tau-b rank and Spearmans rank correlation Stream Evaluators (Joel Bernstein)
+
+* SOLR-11339: Add Canberra, Chebyshev, Earth Movers and Manhattan Distance Stream Evaluators (Joel Bernstein)
+
+* SOLR-11342: Add sumDifference and meanDifference Stream Evaluators (Joel Bernstein)
+
+* SOLR-11350: Add primes Stream Evaluator (Joel Bernstein)
+
+* SOLR-11354: Add factorial and movingMedian Stream Evaluators (Joel Bernstein)
+
+* SOLR-11377: Add expMovingAverage (exponential moving average) and binomialCoefficient Stream Evaluators
+ (Mathew Skaria, Joel Bernstein)
+
+* SOLR-11388: Add monteCarlo Stream Evaluator to support Monte Carlo simulations (Joel Bernstein)
+
+* SOLR-11398: Add weibullDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11400: Add logNormalDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11401: Add zipFDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11414: Add gammaDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11415: Add betaDistribution Stream Evaluator (Joel Bernstein)
+
+* SOLR-11436: Add polyfit and polyfitDerivative Stream Evaluators (Joel Bernstein)
+
+* SOLR-11439: Add harmonicFit Stream Evaluator (Joel Bernstein)
+
+* SOLR-11076: New /autoscaling/history API to return past cluster events and actions. (ab)
+
+Bug Fixes
+----------------------
+
+* SOLR-10602: Triggers should be able to restore state from old instances when taking over. (shalin)
+
+* SOLR-10714: OverseerTriggerThread does not start triggers on overseer start until autoscaling
+ config watcher is fired. (shalin)
+
+* SOLR-10738: TriggerAction is initialised even if the trigger is never scheduled. (shalin)
+
+* SOLR-10668: fix NPE at sort=childfield(..) .. on absent values (Mikhail Khludnev)
+
+* SOLR-8984: EnumField's error reporting to now indicate the field name in failure log (Lanny Ripple,
+ Ann Addicks via Ishan Chattopadhyaya)
+
+* SOLR-11012: Fix three (JavaBinCodec not being closed) Resource Leak warnings. (Christine Poerschke)
+
+* SOLR-11026: MoveReplicaSuggester must check if the target becomes more 'loaded' than the source
+ if an operation is performed (noble)
+
+* SOLR-10994: CREATE, CREATESHARD & ADDREPLICA to use policy framework & support replica types (noble)
+
+* SOLR-11011: Assign.buildCoreName can lead to error in creating a new core when legacyCloud=false (Cao Manh Dat)
+
+* SOLR-10944: Get expression fails to return EOF tuple (Susheel Kumar, Joel Bernstein)
+
+* SOLR-6086: Replica is active during autowarming resulting in queries being sent to a replica that
+ may not have a registered searcher. This causes spikes in response times when adding a replica
+ in busy clusters. (Ludovic Boutros, Timothy Potter, shalin)
+
+* SOLR-11190: GraphQuery also supports string fields which are indexed=false and docValues=true. Please refer to the
+ Javadocs for DocValuesTermsQuery for it's performance characteristics. (Karthik Ramachandran, Varun Thacker)
+
+* SOLR-11084: Issue with starting script with solr.home (-s) == solr (Leil Ireson, Amrit Sarkar via Erick Erickson)
+
+* SOLR-11255: Fix occasional ConcurrentModificationException when using SolrInfoMBeanHandler. (ab)
+
+* SOLR-11272: fix NPE when EmbeddedSolrServer handles /admin/* request and so one (Stephen Allen via Mikhail Khludnev)
+
+* SOLR-11289: fix comma handling in terms component. (yonik)
+
+* SOLR-11164, SOLR-11180, SOLR-11220: Fix NullPointerException and always-returns-zero
+ contrib/ltr OriginalScoreFeature issues in SolrCloud mode.
+ (Yuki Yano, Jonathan Gonzalez, Ryan Yacyshyn, Christine Poerschke)
+
+* SOLR-11278: Stopping CDCR should cancel a running bootstrap operation. (Amrit Sarkar, shalin)
+
+* SOLR-11293: Potential data loss in TLOG replicas when masterVersion equals zero (noble, Cao Manh Dat)
+
+* SOLR-10101: TestLazyCores hangs (Erick Erickson)
+
+* SOLR-11332: Fix sorting on 'enum' fieldTypes that use sortMissingFirst or sortMissingLast (hossman)
+
+* SOLR-11348: Fix the DIH database example (James Dyer)
+
+* SOLR-11363: JSON Facet API: repeated values in a numeric points field with docValues enabled
+ were double counted. (Hossman, yonik)
+
+* SOLR-11085: Improve resiliency of autoscaling actions against overseer restarts and operation failures. (shalin)
+
+* SOLR-11297: Message "Lock held by this virtual machine" during startup. Solr is trying to start some cores twice.
+ (Luiz Armesto, Shawn Heisey, Erick Erickson)
+
+* SOLR-11399: The UnifiedHighlighter was ignoring the hl.fragsize parameter when hl.bs.type=SEPARATOR
+ (Marc Morissette via David Smiley)
+
+* SOLR-11224: SolrStream.close can hit an NPE (Erick Erickson)
+
+* SOLR-11278: Fix a race condition in the CDCR bootstrap process which could lead to bootstraps cancelling itself
+ (Amrit Sarkar, shalin, Varun Thacker)
+
+* SOLR-11425: SolrClientBuilder does not allow infinite timeout (value 0). (Peter Szantai-Kis via Mark Miller)
+
+* SOLR-11449: MoveReplicaCmd mistakenly called registerCollectionStateWatcher on failure. (ab)
+
+* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
+ (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+* SOLR-12444: Updating a cluster policy fails (noble)
+
+Optimizations
+----------------------
+
+* SOLR-10985: Remove unnecessary toString() calls in solr-core's search package's debug logging.
+ (Michael Braun via Christine Poerschke)
+
+* SOLR-11000: Changes made via AutoScalingHandler should be atomic. (ab, shalin)
+
+* SOLR-11124: MoveReplicaCmd should skip deleting old replica in case of its node is not live (Cao Manh Dat)
+
+* SOLR-10769: Allow nodeAdded / nodeLost events to report multiple nodes in one event. (ab)
+
+* SOLR-11242: QueryParser: re-use the LookaheadSuccess exception. (Michael Braun via David Smiley)
+
+* SOLR-11314: FastCharStream: re-use the READ_PAST_EOF exception. (Michael Braun via David Smiley)
+
+* SOLR-8344: Decide default when requested fields are both column and row stored. (Cao Manh Dat, David Smiley)
+
+* SOLR-10285: Skip LEADER messages when there are leader only shards (Cao Manh Dat, Joshua Humphries)
+
+* SOLR-11424: When legacyCloud=false, cores should not publish itself as DOWN on startup. (Cao Manh Dat)
+
+Other Changes
+----------------------
+* SOLR-10643: Throttling strategy for triggers and policy executions. (shalin)
+
+* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)
+
+* SOLR-10827: Factor out abstract FilteringSolrMetricReporter class. (Christine Poerschke)
+
+* SOLR-10957: Changed SolrCoreParser.init to use the resource loader from getSchema()
+ instead of the resource loader from getCore(). (Christine Poerschke)
+
+* SOLR-10748: Make stream.body configurable and disabled by default (janhoy)
+
+* SOLR-10964: Reduce SolrIndexSearcher casting in LTRRescorer. (Christine Poerschke)
+
+* SOLR-11075: Refactor handling of params in CloudSolrStream and FacetStream (Erick Erickson)
+
+* SOLR-11052: Remove unnecessary Long-to-Integer and back casts in ReplicationHandler.
+ (Ramsey Haddad via Christine Poerschke)
+
+* SOLR-11106: TestLBHttpSolrClient.testReliablity takes 30 seconds because of the wrong server name
+ (Kensho Hirasawa via Erick Erickson)
+
+* SOLR-10338: Configure SecureRandom non blocking for tests. (Mihaly Toth, hossman, Ishan Chattopadhyaya, via Mark Miller)
+
+* SOLR-10916: Convert tests that extend LuceneTestCase and use MiniSolrCloudCluster
+ to instead extend SolrCloudTestCase. (Steve Rowe)
+
+* SOLR-11131: Document 'assert' as a command option in bin/solr, and bin/solr.cmd scripts.
+ (Jason Gerlowski via Anshum Gupta)
+
+* SOLR-11140: Remove unused parameter in (private) SolrMetricManager.prepareCloudPlugins method.
+ (Omar Abdelnabi via Christine Poerschke)
+
+* SOLR-11187: contrib/ltr TestModelManagerPersistence improvements. (Yuki Yano via Christine Poerschke)
+
+* SOLR-10397: Port 'autoAddReplicas' feature to the autoscaling framework and make it work with non-shared filesystems
+ (Cao Manh Dat, shalin)
+
+* SOLR-11157: remove-policy must fail if a policy to be deleted is used by a collection (noble)
+
+* SOLR-11090: Add Replica.getProperty accessor. (Christine Poerschke)
+
+* SOLR-11061: Add a spins metric for data directory paths. (ab)
+
+* SOLR-11071: Improve TestIntervalFacets.testRandom (Tomás Fernández Löbbe)
+
+* SOLR-11195: Require class attribute for shard and cluster metric reporter configuration. (Christine Poerschke)
+
+* SOLR:10822: Share a Policy.session object between multiple collection admin calls to get the correct computations (noble)
+
+* SOLR-11249: Upgrade Jetty from 9.3.14.v20161028 to 9.3.20.v20170531 (Michael Braun via David Smiley)
+
+* SOLR-11270: Automatically added SystemLogListener should not prevent deleting a trigger. (ab)
+
+* SOLR-5129: Timeout property for waiting ZK get started. (Cao Manh Dat, Hrishikesh Gadre, Varun Thacker)
+
+* SOLR-10628: Less verbose output from bin/solr commands. (Jason Gerlowski, janhoy)
+
+* SOLR-11240: Raise UnInvertedField internal limit. (Toke Eskildsen)
+
+* SOLR-11254: Add score-less (abstract) DocTransformer.transform method. (Christine Poerschke)
+
+* SOLR-11209: Upgrade HttpClient to 4.5.3. (Hrishikesh Gadre via Mark Miller)
+
+* SOLR-11322: JSON Facet API: instead of returning NaN, min & max aggregations omit
+ the value for any bucket with no values in the numeric field. (yonik)
+
+* SOLR-10990: Breakup QueryComponent.process method for readability. (Christine Poerschke)
+
+* SOLR-11132: Refactor common getSortField logic in various FieldTypes (Jason Gerlowski, hossman)
+
+* SOLR-11351: Make LTRScoringModel model more extensible. (Christine Poerschke)
+
+* SOLR-10451: Remove contrib/ltr/lib from lib includes in the techproducts example config (sungjunyoung via janhoy)
+
+* SOLR-11306: Fix inaccurate comments on docValues and StrField in the example schemas
+ (Tom Burton-West, Jason Gerlowski, Varun Thacker)
+
+* SOLR-11482: RunExecutableListener was removed for security reasons. (Michael Stepankin,
+ Olga Barinova, Uwe Schindler, Tomás Fernández Löbbe)
+
+* SOLR-10335: Upgrade to Tika 1.16. (Tim Allison, Tomás Fernández Löbbe via shalin)
+
+================== 7.0.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.14.v20161028
+
+Bug Fixes
+----------------------
+
+* SOLR-11297: Message "Lock held by this virtual machine" during startup. Solr is trying to start some cores twice.
+ (Luiz Armesto, Shawn Heisey, Erick Erickson)
+
+* SOLR-11406: Solr 7.0 cannot read indexes from 6.x versions. (Shawn Heisey, Steve Rowe)
+
+================== 7.0.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.14.v20161028
+
+Upgrading from Solr 6.x
+----------------------
+
+* All Trie* numeric and date field types have been deprecated in favor of *Point field types.
+ Point field types are better at range queries (speed, memory, disk), however simple field:value queries underperform
+ relative to Trie. Either accept this, or continue to use Trie fields.
+ This shortcoming may be addressed in a future release.
+
+* The default response type is now JSON ("wt=json") instead of XML, and line indentation is now on by default
+ ("indent=on"). If you expect the responses to your queries to be returned in the previous format (XML
+ format, no indentation), you must now you must now explicitly pass in "wt=xml" and "indent=off" as query
+ parameters, or configure them as defaults on your request handlers. See SOLR-10494 for more details.
+
+* the cluster property 'legacyCloud' is set to false from 7.0. This means 'zookeeper is the truth' by
+ default. If an entry for a replica does not exist in the state.json, that replica cannot get
+ registered. This may affect users who use that feature where they bring up replicas and they are
+ automatically registered as a part of a shard. However, it is possible to fall back to the old behavior by
+ setting the property legacyCloud=true , in the cluster properties using the following command
+
+ ./server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:2181 -cmd clusterprop -name legacyCloud -val true
+
+* HttpClientInterceptorPlugin is now HttpClientBuilderPlugin and must work with a
+ SolrHttpClientBuilder rather than an HttpClientConfigurer.
+
+* HttpClientUtil now allows configuring HttpClient instances via SolrHttpClientBuilder
+ rather than an HttpClientConfigurer. Use of env variable SOLR_AUTHENTICATION_CLIENT_CONFIGURER
+ no longer works, please use SOLR_AUTHENTICATION_CLIENT_BUILDER
+
+* SolrClient implementations now use their own internal configuration for socket timeouts,
+ connect timeouts, and allowing redirects rather than what is set as the default when
+ building the HttpClient instance. Use the appropriate setters on the SolrClient instance.
+
+* HttpSolrClient#setAllowCompression has been removed and compression must be enabled as
+ a constructor param.
+
+* HttpSolrClient#setDefaultMaxConnectionsPerHost and
+ HttpSolrClient#setMaxTotalConnections have been removed. These now default very
+ high and can only be changed via param when creating an HttpClient instance.
+
+* Query time join with scoring {!join score=none} (even none) doesn't handle single value numeric fields.
+ Users are advised to convert these fields into string and reindex.
+
+* Deprecated collection and configset methods on MiniSolrCloudCluster have been
+ removed
+
+* Index-time boosts are not supported anymore. If any boosts are provided, they
+ will be ignored by the indexing chain. As a replacement, index-time scoring
+ factors should be indexed in a separate field and combined with the query
+ score using a function query.
+
+* Deprecated method getNumericType() has been removed from FieldType. Use getNumberType() instead
+
+* MBean names and attributes now follow hierarchical names used in metrics. This is reflected also in
+ /admin/mbeans and /admin/plugins output, and can be observed in the UI Plugins tab, because now all these
+ APIs get their data from the metrics API. The old (mostly flat) JMX view has been removed.
+
+* <jmx> element in solrconfig.xml is no longer supported. Equivalent functionality can be configured in
+ solr.xml using <metrics><reporter ...> element and SolrJmxReporter implementation. Limited back-compatibility
+ is offered by automatically adding a default instance of SolrJmxReporter if it's missing, AND when a local
+ MBean server is found (which can be activated either via ENABLE_REMOTE_JMX_OPTS in solr.in.sh or via system
+ properties, eg. -Dcom.sun.management.jmxremote). This default instance exports all Solr metrics from all
+ registries as hierarchical MBeans. This behavior can be also disabled by specifying a SolrJmxReporter
+ configuration with a boolean init arg "enabled" set to "false". For a more fine-grained control users
+ should explicitly specify at least one SolrJmxReporter configuration.
+
+* The sow (split-on-whitespace) request param now defaults to false (true in previous versions).
+ This affects the edismax and standard/"lucene" query parsers: if the sow param is not specified,
+ query text will not be split on whitespace before analysis. See
+ https://lucidworks.com/2017/04/18/multi-word-synonyms-solr-adds-query-time-support/ .
+
+* Setting <solrQueryParser defaultOperator="..."/> in schema is no longer allowed and will cause an exception.
+ Please use "q.op" parameter on the request instead. For more details, see SOLR-10584.
+
+* Setting <defaultSearchField> in schema is no longer allowed and will cause an exception.
+ Please use "df" parameter on the request instead. For more details, see SOLR-10585.
+
+* The PostingsSolrHighlighter is deprecated. Furthermore, it now internally works via a re-configuration
+ of the UnifiedSolrHighlighter.
+
+* Deprecated LatLonType, GeoHashField, SpatialPointVectorFieldType, and SpatialTermQueryPrefixTreeFieldType.
+ Instead, switch to LatLonPointSpatialField or SpatialRecursivePrefixTreeFieldType or RptWithGeometrySpatialField.
+
+* The 'lucenePlusSort' QParser has been deprecated, and is no longer implicitly defined. If you wish to continue using
+ this QParser untill Solr 8, you must explicitly register it in your solrconfig.xml:
+ '<queryParser name="lucenePlusSort" class="solr.OldLuceneQParserPlugin"/>'
+
+* In solrconfig.xml the deprecated <mergePolicy> and <mergeFactor> and <maxMergeDocs> elements have
+ been removed in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+
+* Custom SolrMetricReporter classes must implement a new, factored out doInit() method and the validate() method
+ must pass for all reporters including reporters that are not enabled, please see SOLR-10671 for details.
+
+* TemplateUpdateRequestProcessorFactory uses {} instead of ${} for template
+
+* SOLR-9565: The name of TemplateUpdateRequestProcessorFactory' is changed to 'template' from 'Template' and the
+ name of 'AtomicUpdateProcessorFactory' is changed to 'atomic' from 'Atomic'
+
+* The default for eDismax parameter 'lowercaseOperators' now depends on the luceneMatchVersion setting in solrconfig.
+ It remains 'true' for luceneMatchVersion < 7.0.0 and changes to 'false' from 7.0.0. See also SOLR-4646
+
+* The unused 'valType' option has been removed from ExternalFileField, if you have this in your schema you
+ can safely remove it. see SOLR-10929 for more details.
+
+* Config sets basic_configs and data_driven_schema_configs have now been merged into _default. It has data driven nature
+ enabled by default, and can be turned off (after creating a collection) with:
+ curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
+ Please see SOLR-10574 for details.
+
+* The data driven config (now _default) for auto-creating fields earlier defaulted to "string" for text input.
+ Now the default is to use "text_general" and to add a copyField to the schema, copying to a "*_str" dynamic field,
+ with a cutoff at 256 characters. This enables full text search as well as faceting. See SOLR-9526 for more.
+
+* SOLR-10123: The Analytics Component has been upgraded to support distributed collections, expressions over multivalued
+ fields, a new JSON request language, and more. DocValues are now required for any field used in the analytics expression
+ whereas previously docValues was not required. Please see SOLR-10123 for details.
+
+* solrconfig.xml: <requestDispatcher handleSelect="..."> now defaults to false when luceneMatchVersion >= 7.0,
+ thus ignoring "qt". Regardless, "qt" is still used as a SolrJ special parameter that specifies the request handler
+ (tail URL path) to use. If you have request handlers without a leading '/', you can set handleSelect="true"
+ or better yet consider migrating.
+
+* StandardRequestHandler is deprecated. Simply use SearchHandler instead.
+
+* The parameter names 'fromNode' for MOVEREPLICA and 'source', 'target' for REPLACENODE have been deprecated and
+ replaced with 'sourceNode' and 'targetNode' instead. The old names will continue to work for back-compatibility
+ but they will be removed in 8.0. See SOLR-11068 for more details.
+
+* All deperated methods of ClusterState (except getZkClusterStateVersion())
+ have been removed. Use DocCollection methods instead.
+
+* SOLR-11023: EnumField has been deprecated in favor of new EnumFieldType.
+
+* SOLR-11239: The use of maxShardsPerNode is not supported when a cluster policy is in effect or
+ when a collection specific policy is specified during collection creation.
+
+* V2 APIs are now available at /api, in addition to /v2 (which is now deprecated). Legacy APIs continue to remain
+ available at /solr.
+
+* Solr was tested and is compatible with the final release candidate of Java 9. All startup scripts
+ detect Java 9 correctly and setup Garbage Collector logging. If the configuration file contains
+ logging options that are no longer supported with Java 9, startup will fail.
+
+* SOLR-10307: If starting Jetty without the Solr start script, you must now pass keystore and truststore
+ passwords via the env variables SOLR_SSL_KEY_STORE_PASSWORD and SOLR_SSL_TRUST_STORE_PASSWORD rather
+ than system properties.
+
+* SOLR-10379: ManagedSynonymFilterFactory has been deprecated in favor of ManagedSynonymGraphFilterFactory.
+
+* SOLR-10503: CurrencyField has been deprecated in favor of new CurrencyFieldType.
+
+New Features
+----------------------
+* SOLR-9857, SOLR-9858: Collect aggregated metrics from nodes and shard leaders in overseer. (ab)
+
+* SOLR-9835: Create another replication mode for SolrCloud
+
+* SOLR-10356: Adds basic math Streaming Evaluators (Dennis Gove)
+
+* SOLR-10393: Adds UUID Streaming Evaluator (Dennis Gove)
+
+* SOLR-10046: Add UninvertDocValuesMergePolicyFactory class. (Keith Laban, Christine Poerschke)
+
+* SOLR-10547: JSON Facet API: Implement support for single-valued string fields for min/max aggregations.
+ (yonik)
+
+* SOLR-10262: Add support for configurable metrics implementations. (ab)
+
+* SOLR-10431: Make it possible to invoke v2 api calls using SolrJ (Cao Manh Dat, Noble Paul, shalin)
+
+* SOLR-10233: Add support for different replica types, that can handle updates differently:
+ - NRT: Writes updates to transaction log and indexes locally. Replicas of type “NRT†support NRT
+ (soft commits) and RTG. Any NRT replica can become a leader. This was the only type supported
+ in SolrCloud until now and it’s the default type.
+ - TLOG: Writes to transaction log, but not to index, uses replication to copy segment files from the
+ shard leader. Any TLOG replica can become leader (by first applying all local transaction log
+ elements). If a replica is of type TLOG but is also the leader, it will behave as a NRT. This
+ is exactly what was added in SOLR-9835 (non-realtime replicas), just the API and naming changes.
+ - PULL: Doesn’t index or writes to transaction log, just replicates from the shard leader. PULL replicas
+ can’t become shard leaders (i.e., if there are only PULL replicas in the collection at some point,
+ updates will fail same as if there is no leaders, queries continue to work), so they don’t even
+ participate in elections.
+ (Tomás Fernández Löbbe)
+
+* SOLR-10278: A new DSL to set cluster-wide preferences and policies on how to allocate replicas to nodes
+ (noble, shalin)
+
+* SOLR-10373: Implement read API for autoscaling configuration at /admin/autoscaling or
+ /cluster/autoscaling paths. (shalin)
+
+* SOLR-10677: Expose a diagnostics API to return nodes sorted by load in descending order and
+ any policy violations. (shalin)
+
+* SOLR-7452: Refinement for JSON Facet API: Adding refine:true to any terms facet will cause an
+ additional distributed search phase (overlapped with field retrieval) that requests additional info
+ for top facet buckets from shards that did not previously contribute to that bucket.
+ This will correct counts (and other statistics) for those top buckets collected in the first
+ phase. (yonik)
+
+* SOLR-10433: CollectionAdmin requests in SolrJ to support V2 calls (noble)
+
+* SOLR-9989: Add support for PointFields in FacetModule (JSON Facets) (Cao Manh Dat)
+
+* SOLR-10406: v2 API error messages list the URL request path as /solr/____v2/... when the original path was /v2/... (Cao Manh Dat, noble)
+
+* SOLR-10574: New _default config set replacing basic_configs and data_driven_schema_configs.
+ (Ishan Chattopadhyaya, noble, shalin, hossman, David Smiley, janhoy, Alexandre Rafalovitch)
+
+* SOLR-10272: Use _default config set if no collection.configName is specified with CREATE (Ishan Chattopadhyaya)
+
+* SOLR-9526: Data driven schema now indexes text field "foo" as both "foo" (text_general) and as "foo_str" (string)
+ to facilitate both search and faceting. AddSchemaFieldsUpdateProcessor now has the ability to add a "copyField" to
+ the type mappings, with an optional maxChars limitation. You can also define one typeMappings as default.
+ This also solves issues SOLR-8495, SOLR-6966, and SOLR-7058
+ (janhoy, Steve Rowe, hossman, Alexandre Rafalovitch, Shawn Heisey, Cao Manh Dat)
+
+* SOLR-10123: Upgraded the Analytics Component to version 2.0 which now supports distributed collections, expressions over
+ multivalued fields, a new JSON request language, and more. DocValues are now required for any field used in the analytics
+ expression whereas previously docValues was not required. Please see SOLR-10123 for details. (Houston Putman)
+
+* SOLR-10282: bin/solr support for enabling Kerberos authentication (Ishan Chattopadhyaya, Jason Gerlowski)
+
+* SOLR-11093: Add support for PointFields for {!graph} query. (yonik)
+
+* SOLR-10845: Add support for PointFields to {!graphTerms} query that is internally
+ used by some graph traversal streaming expressions. (yonik)
+
+* SOLR-10939: Add support for PointsFields to {!join} query. Joined fields should
+ also have docValues enabled. (yonik)
+
+* SOLR-11173 TermsComponent support for Points fields. (yonik)
+
+* SOLR-10849: MoreLikeThisComponent should expose setMaxDocFreqPct (maxDoc
+ frequency percentage). (Dawid Weiss)
+
+* SOLR-10307: Allow Passing SSL passwords through environment variables. (Mano Kovacs, Michael Suzuki via Mark Miller)
+
+* SOLR-10379: Add ManagedSynonymGraphFilterFactory, deprecate ManagedSynonymFilterFactory. (Steve Rowe)
+
+* SOLR-10479: Adds support for HttpShardHandlerFactory.loadBalancerRequests(MinimumAbsolute|MaximumFraction)
+ configuration. (Ramsey Haddad, Daniel Collins, Christine Poerschke)
+
+* SOLR-3702: concat(...) function query (Andrey Kudryavtsev via Mikhail Khludnev)
+
+* SOLR-10767: Add movingAvg Stream Evaluator (Joel Bernstein)
+
+* SOLR-10813: Add arraySort Stream Evaluator (Joel Bernstein)
+
+* SOLR-10696: Add cumulative probability function (Joel Bernstein)
+
+* SOLR-10765: Add anova Stream Evaluator (Joel Bernstein)
+
+* SOLR-10754: Add hist Stream Evaluator (Joel Bernstein)
+
+* SOLR-10753: Add array Stream Evaluator (Joel Bernstein)
+
+* SOLR-10747: Allow /stream handler to execute Stream Evaluators directly (Joel Bernstein)
+
+* SOLR-10743: Add sequence StreamEvaluator (Joel Bernstein)
+
+* SOLR-10684: Add finddelay Stream Evaluator (Joel Bernstein)
+
+* SOLR-10731: Add knn Streaming Expression (Joel Bernstein)
+
+* SOLR-10724: Add describe Stream Evaluator (Joel Bernstein)
+
+* SOLR-10693: Add copyOfRange Stream Evaluator (Joel Bernstein)
+
+* SOLR-10623: Add sql Streaming Expression (Joel Bernstein)
+
+* SOLR-10661: Add copyOf Stream Evaluator (Joel Bernstein)
+
+* SOLR-10663: Add distance Stream Evaluator (Joel Bernstein)
+
+* SOLR-10664: Add scale Stream Evaluator (Joel Bernstein)
+
+* SOLR-10666: Add rank transformation Stream Evaluator (Joel Bernstein)
+
+* SOLR-10662: Add length Stream Evaluator (Joel Bernstein)
+
+* SOLR-10660: Add reverse Stream Evaluator (Joel Bernstein)
+
+* SOLR-9910: Add solr/solr.cmd parameter to append jetty parameters to the start script.
+ (Mano Kovacs via Mark Miller)
+
+* SOLR-6671: Possible to set solr.data.home property as root dir for all data (janhoy, Shawn Heisey, Mark Miller)
+
+Bug Fixes
+----------------------
+* SOLR-9262: Connection and read timeouts are being ignored by UpdateShardHandler after SOLR-4509.
+ (Mark Miller, shalin)
+
+* SOLR-9837: Fix 55% performance regression of FieldCache uninvert time of
+ numeric fields. (yonik)
+
+* SOLR-10408: v2 API introspect should return useful message for non-existent command (Cao Manh Dat)
+
+* SOLR-10411: v2 Collection API "modify" command specification's replicationFactor property is incorrectly typed as string,
+ should be integer (Cao Manh Dat)
+
+* SOLR-10405: v2 API introspect response contains multiple copies of the experimental format WARNING (Cao Manh Dat)
+
+* SOLR-10412: v2 API: many API command specification properties are typed "number" but should instead be typed "integer"
+ (Steve Rowe, Cao Manh Dat)
+
+* SOLR-10413: v2 API: parsed JSON type should be coerced to expected type (Cao Manh Dat, Noble Paul)
+
+* SOLR-10223: Allow running examples as root on Linux with -force option (janhoy)
+
+* SOLR-10830: Solr now correctly enforces that the '_root_' field has the same fieldType as the
+ uniqueKey field. With out this enforcement, child document updating was unreliable. (hossman)
+
+* SOLR-10876: Regression in loading runtime UpdateRequestProcessors like TemplateUpdateProcessorFactory (noble)
+
+* SOLR-10886: Using V2Request.process(solrClient) method throws NPE if the API returns an error (Cao Manh Dat)
+
+* SOLR-10921: Work around the static Lucene BooleanQuery.maxClauseCount that causes Solr's maxBooleanClauses
+ setting behavior to be "last core wins". This patch sets BooleanQuery.maxClauseCount to its maximum value,
+ thus disabling the global check, and replaces it with specific checks where desired via
+ QueryUtils.build(). (yonik)
+
+* SOLR-10948: Fix extraction component to treat DatePointField the same as TrieDateField (hossman)
+
+* SOLR-10506: Fix memory leak (upon collection reload or ZooKeeper session expiry) in ZkIndexSchemaReader.
+ (Torsten Bøgh Köster, Christine Poerschke, Jörg Rathlev, Mike Drob)
+
+* SOLR-6807: CloudSolrClient's ZK state version check with the server was ignored when handleSelect=false
+ (David Smiley)
+
+* SOLR-10878: MOVEREPLICA command may lose data when replicationFactor is 1. (ab, shalin)
+
+* SOLR-10879: DELETEREPLICA and DELETENODE commands should prevent data loss when
+ replicationFactor is 1. (ab)
+
+* SOLR-10983: Fix DOWNNODE -> queue-work explosion (Scott Blum, Joshua Humphries)
+
+* SOLR-10826: Fix CloudSolrClient to expand the collection parameter correctly (Tim Owen via Varun Thacker)
+
+* SOLR-11039: Next button in Solr admin UI for collection list pagination does not work. (janhoy)
+
+* SOLR-11041: MoveReplicaCmd do not specify ulog dir in case of HDFS (Cao Manh Dat)
+
+* SOLR-11045: The new replica created by MoveReplica will have to have same name and coreName as the
+ old one in case of HDFS (Cao Manh Dat)
+
+* SOLR-11043: Fix facet.range.method=dv and interval facets on single-valued float fields with negative values.
+ (Tomás Fernández Löbbe, Steve Rowe)
+
+* SOLR-11073: Fix overflow in interval faceting when querying Long limits (e.g. (Long.MAX_VALUE TO Long.MAX_VALUE])
+ (Tomás Fernández Löbbe)
+
+* SOLR-11057: Fix overflow in point range queries when querying the type limits
+ (e.g. q=field_i:{Integer.MAX_VALUE TO Integer.MAX_VALUE]) (Tomás Fernández Löbbe)
+
+* SOLR-11136: Fix solrj XMLResponseParser when nested docs transformer is used with indented XML (hossman)
+
+* SOLR-11130: V2Request in SolrJ should return the correct collection name so that the request is forwarded to the
+ correct node (noble)
+
+* SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null.
+ (Steve Rowe)
+
+* SOLR-11154: Child documents' return fields now include useDocValuesAsStored fields (Mohammed Sheeri Shaketi Nauage via
+ Ishan Chattopadhyaya)
+
+* SOLR-11163: Fix contrib/ltr Normalizer persistence after solr core reload or restart.
+ (Yuki Yano via Christine Poerschke)
+
+* SOLR-11182: A split shard failure on IOException should be logged (Varun Thacker)
+
+* SOLR-10353: TestSQLHandler reproducible failure: No match found for function signature min(<NUMERIC>) (Kevin Risden)
+
+* SOLR-11221: SolrJmxReporter broken on core reload. This resulted in some or most metrics not being reported
+ via JMX after core reloads, depending on timing. (ab)
+
+* SOLR-11235: Some SolrCore metrics should check if core is closed before reporting. (ab)
+
+* SOLR-10698: StreamHandler should allow connections to be closed early (Joel Bernstein, Varun Thacker, Erick Erickson)
+
+* SOLR-11243: Replica Placement rules are ignored if a cluster policy exists. (shalin)
+
+* SOLR-11268: AtomicUpdateProcessor complains missing UpdateLog (noble, Ishan Chattopadhyaya)
+
+* SOLR-8689: Fix bin/solr.cmd so it can run properly on Java 9 (Uwe Schindler, hossman)
+
+* SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
+ resulting in exceptions when using a hashing faceting method and sorting by hll(numeric_field).
+ (yonik)
+
+* SOLR-10719: Creating a core.properties fails if the parent of core.properties is a symlinked dierctory
+ (Erick Erickson)
+
+* SOLR-10360: Solr HDFS snapshot export fails due to FileNotFoundException error when using MR1 instead of
+ yarn. (Hrishikesh via Mark Miller)
+
+* SOLR-10137: Ensure that ConfigSets created via API are mutable. (Hrishikesh via Mark Miller)
+
+* SOLR-10829: Fixed IndexSchema to enforce that uniqueKey can not be Points based for correctness (hossman)
+
+* SOLR-10836: The query parsers igain, significantTerms, and tlogit (used by streaming expressions by
+ the same name) might throw a NullPointerException if the referenced field had no indexed data in some
+ shards. The fix included an optimization to use Solr's cached AtomicReader instead of re-calculating.
+ (David Smiley)
+
+* SOLR-10715: /v2/ should not be an alias for /v2/collections (Cao Manh Dat)
+
+* SOLR-10835: Add support for point fields in Export Handler (Tomás Fernández Löbbe)
+
+* SOLR-10704: REPLACENODE may cause data loss when replicationFactor is 1. (ab, shalin)
+
+* SOLR-10833: Point numeric fields should throw SolrException(BAD_REQUEST) for malformed numbers in queries.
+ Trie numeric fields should throw SolrException(BAD_REQUEST) for malformed docValues range queries.
+ (hossman, Tomás Fernández Löbbe)
+
+* SOLR-10832: Fixed VersionInfo.getMaxVersionFromIndex when using PointsField with indexed="true" (hossman)
+
+* SOLR-10763: Admin UI replication tab sometimes empty when failed replications (janhoy, Bojan Vitnik)
+
+* SOLR-10824: fix NPE ExactSharedStatsCache, fixing maxdocs skew for terms which are absent at one of shards
+when using one of Exact*StatsCache (Mikhail Khludnev)
+
+* SOLR-10963: Fix example json in MultipleAdditiveTreesModel javadocs.
+ (Stefan Langenmaier via Christine Poerschke)
+
+* SOLR-10914: RecoveryStrategy's sendPrepRecoveryCmd can get stuck for 5 minutes if leader is unloaded. (shalin)
+
+* SOLR-11198: downconfig downloads empty file as folder (Erick Erickson)
+
+Optimizations
+----------------------
+
+* SOLR-4509: Move to non deprecated HttpClient impl classes to remove stale connection
+ check on every request and move connection lifecycle management towards the client.
+ (Ryan Zezeski, Mark Miller, Shawn Heisey, Steve Davids)
+
+* SOLR-9255: Rename SOLR_AUTHENTICATION_CLIENT_CONFIGURER -> SOLR_AUTHENTICATION_CLIENT_BUILDER (janhoy)
+
+* SOLR-9579: Make Solr's SchemaField implement Lucene's IndexableFieldType, removing the
+ creation of a Lucene FieldType every time a field is indexed. (John Call, yonik)
+
+* SOLR-9822: JSON Facet API: Recover performance lost due to the DocValues transition to
+ an iterator API (LUCENE-7407). This only fixes calculating counts for single-valued
+ string fields from the FieldCache, resulting in up to 56% better throughput for those cases.
+ (yonik)
+
+* SOLR-10727: Avoid polluting the filter cache for certain types of faceting (typically ranges) when
+ the base docset is empty. (David Smiley)
+
+* SOLR-11070: Make docValues range queries behave the same as Trie/Point fields for Double/Float Infinity cases
+ (Tomás Fernández Löbbe, Andrey Kudryavtsev)
+
+* SOLR-10634: JSON Facet API: When a field/terms facet will retrieve all buckets (i.e. limit:-1)
+ and there are no nested facets, aggregations are computed in the first collection phase
+ so that the second phase which would normally involve calculating the domain for the bucket
+ can be skipped entirely, leading to large performance improvements. (yonik)
+
+* SOLR-10722: Speed up Solr's use of the UnifiedHighlighter be re-using FieldInfos. (David Smiley)
+
+Other Changes
+----------------------
+* SOLR-10236: Removed FieldType.getNumericType(). Use getNumberType() instead. (Tomás Fernández Löbbe)
+
+* SOLR-10347: Removed index level boost support from "documents" section of the admin UI (Amrit Sarkar via
+ Tomás Fernández Löbbe)
+
+* SOLR-9959: SolrInfoMBean category and hierarchy cleanup. Per-component statistics are now obtained from
+ the metrics API, legacy JMX support has been replaced with SolrJmxReporter functionality. Several reporter
+ improvements (support for multiple prefix filters, "enabled" flag, reuse of service clients). (ab)
+
+* SOLR-10418: Expose safe system properties via metrics API as 'system.properties' in 'solr.jvm' group.
+ Add support for selecting specific properties from any compound metric using 'property' parameter to
+ /admin/metrics handler. (ab)
+
+* SOLR-10557: Make "compact" format default for /admin/metrics. (ab)
+
+* SOLR-10310: By default, stop splitting on whitespace prior to analysis
+ in edismax and standard/"lucene" query parsers. (Steve Rowe)
+
+* SOLR-10647: Move the V1 <-> V2 API mapping to SolrJ (noble)
+
+* SOLR-10584: We'll now always throw an exception if defaultOperator is found in schema. This config has
+ been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy)
+
+* SOLR-10585: We'll now always throw an exception if defaultSearchField is found in schema. This config has
+ been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy, David Smiley)
+
+* SOLR-10414: RecoveryStrategy is now a Runnable instead of a Thread. (Tomás Fernández Löbbe)
+
+* SOLR-10042: Delete old deprecated Admin UI, leaving the AngularJS UI the only one supported (janhoy)
+
+* SOLR-10378: Clicking Solr logo on AdminUI shows blank page (Takumi Yoshida via janhoy)
+
+* SOLR-10700: Deprecated and converted the PostingsSolrHighlighter to extend UnifiedSolrHighlighter and thus no
+ longer use the PostingsHighlighter. It should behave mostly the same. (David Smiley)
+
+* SOLR-10710: Fix LTR failing tests. (Diego Ceccarelli via Tomás Fernández Löbbe)
+
+* SOLR-10755: delete/refactor many solrj deprecations (hossman)
+
+* SOLR-10752: replicationFactor (nrtReplicas) default is 0 if tlogReplicas is specified when creating a collection
+ (Tomás Fernández Löbbe)
+
+* SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)
+
+* SOLR-10793: BlobHandler should have a well-known permission name (noble)
+
+* SOLR-10744: Update noggit to newer version (0.8) (noble)
+
+* SOLR-10792: Deprecate and remove implicit registration of "lucenePlusSort" aka OldLuceneQParser (hossman)
+
+* SOLR-10791: Remove deprecated options in SSLTestConfig (hossman)
+
+* LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
+* SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
+ support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+ (Christine Poerschke, hossman)
+
+* SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
+ to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)
+
+* SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)
+
+* SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
+ (Christine Poerschke, Anshum Gupta)
+
+* SOLR-10713: Ignore .pid and .out files in solr working directory (Jason Gerlowski via Mike Drob)
+
+* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)
+
+* SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)
+
+* SOLR-10419: All collection APIs should use the new Policy framework for replica placement. (Noble Paul, shalin)
+
+* SOLR-10800: Factor out HttpShardHandler.transformReplicasToShardUrls from HttpShardHandler.prepDistributed.
+ (Domenico Fabio Marino, Christine Poerschke)
+
+* SOLR-10779: JavaBinCodec should use close consistently rather than having marshal() and close() call finish()
+ (which closes the underlying stream). (Erick Erickson)
+
+* SOLR-9623: Disable remote streaming in example configs by default. Adjust Upload Limit defaults (janhoy, yonik)
+
+* SOLR-4646: eDismax lowercaseOperators now defaults to "false" for luceneMatchVersion >= 7.0.0 (janhoy, David Smiley)
+
+* SOLR-8256: Set legacyCloud=false as default (Cao Manh Dat)
+
+* SOLR-10929: Removed unused 'valType' option from ExternalFileField (hossman)
+
+* SOLR-10864: Simplified how Trie vs Points based numerics are randomized by SolrTestCaseJ4 by adding a static
+ option to PointsField to ignore 'precisionStep' attribute. This change also begins to attempt to randomize
+ 'docValues' on numeric field types unless tests explicity enable/disable them. (hossman, Steve Rowe)
+
+* LUCENE-7883: Solr no longer uses the context class loader when resolving
+ resources, they are only resolved against Solr's own or "core" class loader
+ by default. (Uwe Schindler)
+
+* SOLR-10915: Make builder based SolrClient constructors to be the only valid way to construct client objects and
+ increase the visibility of builder elements to be protected so extending the builder, and the clients is possible.
+ (Jason Gerlowski, Anshum Gupta)
+
+* SOLR-10823: Add reporting period to SolrMetricReporter base class. (Christine Poerschke)
+
+* SOLR-10807: Randomize Points based numeric field types in all existing tests & test schemas
+ where Trie numerics were previously hardcoded. (hossman, Steve Rowe, Anshum Gupta)
+
+* SOLR-6807: Changed requestDispatcher's handleSelect to default to false, thus ignoring "qt".
+ Simplified configs to not refer to handleSelect or "qt". Switch all tests that assumed true to assume false
+ (added leading '/' in request handlers). Switch all tests referring to "standard" request handler to
+ instead refer to "/select" with SearchHandler. Deprecated the old StandardRequestHandler. (David Smiley)
+
+* SOLR-10456: Deprecate timeout related setters from SolrClients, and replace with Builder based implementation
+ (Jason Gerlowski, Anshum Gupta)
+
+* SOLR-11004: Consolidate SolrClient builder code in an abstract base class (Jason Gerlowski, Anshum Gupta)
+
+* SOLR-10967: Cleanup the default configset. The changes involve some documentation corrections, removing the currency
+ field from the examples and a few dynamic fields (Varun Thacker)
+
+* SOLR-11016: Fix TestCloudJSONFacetJoinDomain test-only bug (hossman)
+
+* SOLR-11021: The elevate.xml config-file is made optional in the ElevationComponent.
+ The default configset doesn't ship with a elevate.xml file anymore (Varun Thacker)
+
+* SOLR-10898: Fix SOLR-10898 to not deterministicly fail 1/512 runs (hossman)
+
+* SOLR-10796: TestPointFields: increase randomized testing of non-trivial values. (Steve Rowe)
+
+* SOLR-11068: MOVEREPLICA and REPLACENODE API parameter names are now 'sourceNode' and 'targetNode'. The old names
+ viz. 'fromNode' for MOVEREPLICA and 'source', 'target' for REPLACENODE have been deprecated. (shalin)
+
+* SOLR-11088: Fix sporadic failures of MetricsHandlerTest.testPropertyFilter on jenkins (shalin)
+
+* SOLR-11037: Refactor to provide NodeConfig.getSolrDataHome internal API. (ab, janhoy, shalin)
+
+* SOLR-11119: Switch from Trie to Points field types in the .system collection schema. (Steve Rowe)
+
+* SOLR-10494: Make default response format JSON (wt=json), and also indent text responses formats
+ (indent=on) by default (Trey Grainger & Cassandra Targett via hossman)
+
+* SOLR-10760,SOLR-11315,SOLR-11313: Remove trie field types and fields from example schemas. (Steve Rowe)
+
+* SOLR-11056: Add random range query test that compares results across Trie*, *Point and DocValue-only fields
+ (Tomás Fernández Löbbe)
+
+* SOLR-10926: Increase the odds of randomly choosing point fields in our SolrTestCaseJ4 numeric type randomization.
+ (hossman, Steve Rowe)
+
+* SOLR-10846: ExternalFileField/FloatFieldSource should throw a clear exception on initialization with
+ a Points-based keyField, which is not supported. (hossman, Steve Rowe)
+
+* SOLR-11155: /analysis/field and /analysis/document requests should support points fields.
+ (Jason Gerlowski, Steve Rowe)
+
+* SOLR-10756: Undeprecate ZkStateReader.updateClusterState(), mark as @lucene.internal, and rename to
+ forciblyRefreshAllClusterStateSlow(). (hossman, shalin, Steve Rowe)
+
+* SOLR-11036: Separately report disk space metrics for solr.data.home and core root directory. (ab)
+
+* SOLR-10919: ord & rord functions give confusing errors with PointFields. (hossman, Steve Rowe)
+
+* SOLR-10847: Provide a clear exception when attempting to use the terms component with points fields.
+ (hossman, Steve Rowe)
+
+* SOLR-9321: Remove deprecated methods of ClusterState. (Jason Gerlowski, ishan, Cao Manh Dat)
+
+* SOLR-10033: When attempting to facet with facet.mincount=0 over points fields, raise mincount to 1
+ and log a warning. (Steve Rowe)
+
+* SOLR-11178: Change error handling in AutoScalingHandler to be consistent w/ other APIs (noble)
+
+* SOLR-11023: Added EnumFieldType, a non-Trie-based version of EnumField, and deprecated EnumField
+ in favor of EnumFieldType. (hossman, Steve Rowe)
+
+* SOLR-10803: Mark all Trie/LegacyNumeric based fields @deprecated in Solr7. (Steve Rowe)
+
+* SOLR-10821: Ref guide documentation for Autoscaling (Noble Paul, Cassandra Targett, shalin)
+
+* SOLR-11239: A special value of -1 can be specified for 'maxShardsPerNode' to denote that
+ there is no limit. The bin/solr script send maxShardsPerNode=-1 when creating collections. The
+ use of maxShardsPerNode is not supported when a cluster policy is in effect or when a
+ collection specific policy is specified during collection creation.
+ (Noble Paul, shalin)
+
+* SOLR-11183: V2 APIs are now available at /api endpoint. (Ishan Chattopadhyaya)
+
+* SOLR-10617: JDBCStream accepts columns of type TIME, DATE & TIMESTAMP as well as CLOBs and decimal
+ numeric types (James Dyer)
+
+* SOLR-10400: Replace (instanceof TrieFooField || instanceof FooPointField) constructs with
+ FieldType.getNumberType() or SchemaField.getSortField() where appropriate. (hossman, Steve Rowe)
+
+* SOLR-10438: Assign explicit useDocValuesAsStored values to all points field types in
+ schema-point.xml/TestPointFields. (hossman, Steve Rowe)
+
+* LUCENE-7705: Allow CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max token length.
+ (Amrit Sarkar via Erick Erickson)
+
+* SOLR-10659: Remove ResponseBuilder.getSortSpec use in SearchGroupShardResponseProcessor.
+ (Judith Silverman via Christine Poerschke)
+
+* SOLR-10741: Factor out createSliceShardsStr method from HttpShardHandler.prepDistributed.
+ (Domenico Fabio Marino via Christine Poerschke)
+
+* SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
+ (Christine Poerschke)
+
+* SOLR-8437: Improve RAMDirectory details in sample solrconfig files (Mark Miller, Varun Thacker)
+
+* SOLR-8762: return child docs in DIH debug (Gopikannan Venugopalsamy via Mikhail Khludnev)
+
+* SOLR-10501: Test sortMissing{First,Last} with points fields. (Steve Rowe)
+
+* SOLR-10761: Switch trie numeric/date fields to points in data-driven-enabled example and test schemas.
+ (Steve Rowe)
+
+* SOLR-10851: SolrClients should clarify expectations for solrServerUrl parameter (Jason Gerlowski
+ via Tomás Fernández Löbbe)
+
+* SOLR-10891: BBoxField should support point-based number sub-fields. (Steve Rowe)
+
+* SOLR-10834: Fixed tests and test configs to stop using numeric uniqueKey fields (hossman)
+
+* SOLR-10883: Ref guide: Escape replacement substitutions, e.g. => to right arrow, so that they are
+ rendered visibly in the PDF. Also add .adoc file checks to the top-level validate target, including
+ for the invisible substitutions PDF problem. (Steve Rowe)
+
+* SOLR-10503,SOLR-10502: Deprecate CurrencyField in favor of new CurrencyFieldType, which works
+ with point fields and provides control over dynamic fields used for the raw amount and currency
+ code sub-fields. (hossman, Steve Rowe)
+
+* SOLR-11261, SOLR-10966: Upgrade to Hadoop 2.7.4 to fix incompatibility with Java 9.
+ (Uwe Schindler)
+
+* SOLR-11324: Clean up mention of trie fields in documentation and source comments. (Steve Rowe)
+
+================== 6.6.5 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.14.v20161028
+
+New Features
+----------------------
+
+* SOLR-12530: Ability to disable configset upload via -Dconfigset.upload.enabled=false startup parameter
+ (Ishan Chattopadhyaya)
+
+Bug Fixes
+----------------------
+
+* SOLR-12450: Don't allow referal to external resources in various config files (CVE-2018-8026).
+ (Yuyang Xiao, Uwe Schindler)
+
+================== 6.6.4 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.17
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.11
+Jetty 9.4.10.v20180503
+
+Bug Fixes
+----------------------
+
+* SOLR-12316: Do not allow to use absolute URIs for including other files in solrconfig.xml and schema parsing.
+ (Ananthesh, Ishan Chattopadhyaya, Uwe Schindler)
+
+================== 6.6.3 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.17
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.11
+Jetty 9.4.8.v20171121
+
+Bug Fixes
+----------------------
+
+* SOLR-11971: Don't allow referal to external resources in DataImportHandler's dataConfig request parameter.
+ (麦 香浓éƒ, Uwe Schindler)
+
+* SOLR-11503: Collections created with legacyCloud=true cannot be opened if legacyCloud=false (Erick Erickson)
+
+* SOLR-11993: LeaderInitiatedRecoveryThread does not retry on UnknownHostException (shalin, Cao Manh Dat, Steve Rowe)
+
+================== 6.6.2 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.16
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.14.v20161028
+
+Upgrade Notes
+----------------------
+
+* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
+ the resolving of external entities is now disallowed by default.
+
+* SOLR-11482: RunExecutableListener was deprecated and is disabled by default for
+ security reasons. Legacy applications still using it must explicitely pass
+ '-Dsolr.enableRunExecutableListener=true' to the Solr command line.
+ Be aware that you should really disable API-based config editing at the same
+ time, using '-Ddisable.configEdit=true'! (Uwe Schindler)
+
+Bug Fixes
+----------------------
+
+* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
+ (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+
+* SOLR-11297: Message "Lock held by this virtual machine" during startup. Solr is trying to start some cores twice.
+ (Luiz Armesto, Shawn Heisey, Erick Erickson)
+
+Other Changes
+----------------------
+
+* SOLR-10335: Upgrade to Tika 1.16. (Tim Allison, Tomás Fernández Löbbe via shalin)
+
+================== 6.6.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-10857: standalone Solr loads UNLOADed core on request (Erick Erickson, Mikhail Khludnev)
+
+* SOLR-11024: ParallelStream should set the StreamContext when constructing SolrStreams (Joel Bernstein)
+
+* SOLR-10908: CloudSolrStream.toExpression incorrectly handles fq clauses (Rohit via Erick Erickson)
+
+* SOLR-11177: CoreContainer.load needs to send lazily loaded core descriptors to the proper list rather than send
+ them all to the transient lists. (Erick Erickson)
+
+* SOLR-11122: Creating a core should write a core.properties file first and clean up on failure
+ (Erick Erickson)
+
+* SOLR-10910: Clean up a few details left over from pluggable transient core and untangling
+ CoreDescriptor/CoreContainer references (Erick Erickson)
+
+* SOLR-10721: Provide a way to know when Core Discovery is finished and when all async cores are done loading
+ (Erick Erickson)
+
+* SOLR-11069: CDCR bootstrapping can get into an infinite loop when a core is reloaded (Amrit Sarkar, Erick Erickson)
+
+* SOLR-11221: SolrJmxReporter broken on core reload. This resulted in some or most metrics not being reported
+ via JMX after core reloads, depending on timing. (ab)
+
+* SOLR-11261, SOLR-10966: Upgrade to Hadoop 2.7.4 to fix incompatibility with Java 9.
+ (Uwe Schindler)
+
+* SOLR-11228: Exclude static html files in the partials directory from authentication and authorization checks. The UI
+ will open correctly with kerberos enabled (Ishan Chattopadhyaya, Varun Thacker)
+
+================== 6.6.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.10
+Jetty 9.3.14.v20161028
+
+Upgrade Notes
+----------------------
+
+* Solr contribs map-reduce, morphlines-core and morphlines-cell have been removed.
+
+* JSON Facet API now uses hyper-log-log for numBuckets cardinality calculation and
+ calculates cardinality before filtering buckets by any mincount greater than 1.
+
+* ZooKeeper dependency has been upgraded from 3.4.6 to 3.4.10.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-9992: Add support for grouping with PointFIelds. (Cao Manh Dat)
+
+* SOLR-9994: Add support for CollapseQParser with PointFields. (Varun Thacker, Cao Manh Dat)
+
+* SOLR-10076: Hide keystore and truststore passwords from /admin/info/* outputs. (Mano Kovacs via Mark Miller)
+
+* SOLR-6736: Adding support for uploading zipped configsets using ConfigSets API (Varun Rajput, Ishan Chattopadhyaya,
+ Noble Paul, Anshum Gupta, Gregory Chanan)
+
+* SOLR-10349: Add totalTermFreq support to TermsComponent. (Shai Erera)
+
+* SOLR-9993: Add support for ExpandComponent with PointFields. (Cao Manh Dat)
+
+* SOLR-10239: MOVEREPLICA API (Cao Manh Dat, Noble Paul, shalin)
+
+* SOLR-9936: Allow configuration for recoveryExecutor thread pool size. (Tim Owen via Mark Miller)
+
+* SOLR-10447: Collections API now supports a LISTALIASES command to return a list of all collection aliases.
+ (Yago Riveiro, Ishan Chattopadhyaya, Mark Miller, Steve Molloy, Shawn Heisey, Mike Drob, janhoy)
+
+* SOLR-10446: CloudSolrClient can now be initialized using the base URL of a Solr instance instead of
+ ZooKeeper hosts. This is possible through the use of newly introduced HttpClusterStateProvider.
+ To fetch a list of collection aliases, this depends on LISTALIASES command, and hence this way of
+ initializing CloudSolrClient would not work if you have collection aliases on older versions of Solr
+ server that doesn't support LISTALIASES. (Ishan Chattopadhyaya, Noble Paul)
+
+* SOLR-10082: Variance and Standard Deviation aggregators for the JSON Facet API.
+ Example: json.facet={x:"stddev(field1)", y:"variance(field2)"}
+ (Rustam Hashimov, yonik)
+
+* SOLR-10505: Add multi-field support to TermsComponent when requesting terms' statistics. (Shai Erera)
+
+* SOLR-10537: SolrJ: Added SolrParams.toLocalParamsString() and ClientUtils.encodeLocalParamVal. (David Smiley)
+
+* SOLR-10507: Core Admin status command to emit collection details of each core (noble)
+
+* SOLR-10521: introducing sort=childfield(field) asc for searching by {!parent} (Mikhail Khludnev)
+
+* SOLR-9596: Add Solr support for SimpleTextCodec, via <codecFactory class="solr.SimpleTextCodecFactory"/>
+ in solrconfig.xml (per-field specification in the schema is not possible). (Steve Rowe)
+
+* SOLR-1485: Add payload support with payload() value source and {!payload_score} and {!payload_check}
+ query parsers. (Erik Hatcher)
+
+* SOLR-10430: Add ls command to ZkCLI for listing only sub-directories. (Peter Szantai-Kis via Mark Miller)
+
+* SOLR-10583: JSON Faceting now supports a query time 'join' domain change option (hossman)
+
+* SOLR-9530: An Update Processor to convert normal update operation to an atomic operations such as
+ add, set,inc, remove ,set, removeregex (Amrit Sarkar, noble)
+
+* SOLR-10303: Add date/time Stream Evaluators (Gethin James, Dennis Gove, Joel Bernstein)
+
+* SOLR-10351: Add analyze Stream Evaluator to support streaming NLP (Joel Bernstein)
+
+* SOLR-10426: Add shuffle Streaming Expression (Joel Bernstein)
+
+* SOLR-10274: The search Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)
+
+* SOLR-10504: Add echo Streaming Expression (Joel Bernstein)
+
+* SOLR-10516: Add eval Streaming Expression (Joel Bernstein)
+
+* SOLR-10566: Add timeseries Streaming Expression (Joel Bernstein)
+
+* SOLR-10559: Add let, get and tuple Streaming Expressions (Dennis Gove, Joel Bernstein)
+
+* SOLR-10582: Add Correlation Stream Evaluator (Joel Bernstein)
+
+* SOLR-10536: stats Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)
+
+* SOLR-10622: Add regress and predict Stream Evaluators (Joel Bernstein)
+
+* SOLR-10626: Add covariance Stream Evaluator (Joel Bernstein)
+
+* SOLR-10625: Add convolution Stream Evaluator (Joel Bernstein)
+
+* SOLR-10638: Add normalize Stream Evaluator (Joel Bernstein)
+
+* SOLR-8440: Support for enabling basic authentication using bin/solr|bin/solr.cmd. (Ishan Chattopadhyaya, janhoy,
+ Noble Paul, Hrishikesh Gadre)
+
+* SOLR-10292: Adds CartesianProductStream which turns a single tuple with a multi-valued field into N
+ tuples, one for each value in the multi-valued field. (Dennis Gove)
+
+Optimizations
+----------------------
+
+* SOLR-9184: Add a static convenience method ModifiableSolrParams#of(SolrParams) which returns the same
+ instance if it already is modifiable, otherwise creates a new ModifiableSolrParams instance.
+ (Jörg Rathlev via Koji)
+
+* SOLR-10499: facet.heatmap is now significantly faster when the docset (base query) matches everything and there are no
+ deleted docs. It's also faster when the docset matches a small fraction of the index or none. (David Smiley)
+
+* SOLR-9217: Reduced heap consumption for filter({!join ... score=...})
+ (Andrey Kudryavtsev, Gopikannan Venugopalsamy via Mikhail Khludnev)
+
+* SOLR-10548: JSON Facet API now uses hyper-log-log++ for determining the number of buckets
+ when merging requests from a multi-shard distributed request. (yonik)
+
+* SOLR-10524: Better ZkStateWriter batching (Cao Manh Dat, Noble Paul, shalin, Scott Blum)
+
+* SOLR-10619: Optimize using cache for DistributedQueue in case of single-consumer (Cao Manh Dat, Scott Blum)
+
+Bug Fixes
+----------------------
+* SOLR-10281: ADMIN_PATHS is duplicated in two places and inconsistent. This can cause automatic
+ retries to /admin/metrics handler by the CloudSolrClient. (shalin)
+
+* SOLR-10108: bin/solr script recursive copy broken (Erick Erickson)
+
+* SOLR-10362: "Memory Pool not found" error when reporting JVM metrics. (ab)
+
+* SOLR-10369: bin\solr.cmd delete and healthcheck now works again; fixed continuation chars ^ (Luis Goes via janhoy)
+
+* SOLR-10387: zkTransfer normalizes destination path incorrectly if source is a windows directory
+ (gopikannan venugopalsamy, Erick Erickson)
+
+* SOLR-10323: fix to SpellingQueryConverter to properly strip out colons in field-specific queries.
+ (Amrit Sarkar via James Dyer)
+
+* SOLR-10264: Fixes multi-term synonym parsing in ManagedSynonymFilterFactory.
+ (Jörg Rathlev, Steve Rowe, Christine Poerschke)
+
+* SOLR-8807: fix Spellcheck "collateMaxCollectDocs" parameter to work with queries that have the
+ CollpasingQParserPlugin applied. (James Dyer)
+
+* SOLR-10474: TestPointFields.testPointFieldReturn() depends on order of unsorted hits. (Steve Rowe)
+
+* SOLR-10473: Correct LBHttpSolrClient's confusing SolrServerException message when timeAllowed is exceeded.
+ (Christine Poerschke)
+
+* SOLR-10047: Mismatched Docvalues segments cause exception in Sorting/Faceting. Solr now uninverts per segment
+ to avoid such exceptions. (Keith Laban via shalin)
+
+* SOLR-10472: Fixed uninversion (aka: FieldCache) bugs with the numeric PointField classes, and CurrencyField (hossman)
+
+* SOLR-5127: Multiple highlight fields and wildcards are now supported e.g. hl.fl=title,text_*
+ (Sven-S. Porst, Daniel Debray, Simon Endele, Christine Poerschke)
+
+* SOLR-10493: Investigate SolrCloudExampleTest failures. (Erick Erickson)
+
+* SOLR-10552: JSON Facet API numBuckets was not consistent between distributed and non-distributed requests
+ when there was a mincount > 1. This has been corrected by changing numBuckets cardinality processing to
+ ignore mincount > 1 for non-distributed requests. (yonik)
+
+* SOLR-10520: child.facet.field doubled counts at least when rows>0. (Dr. Oleg Savrasov via Mikhail Khludnev)
+
+* SOLR-10480: Full pagination in JSON Facet API using offset does not work. (yonik)
+
+* SOLR-10526: facet.heatmap didn't honor facet exclusions ('ex') for distributed search. (David Smiley)
+
+* SOLR-10500: nested child docs are adopted by neighbour when several parents come in update/json/docs
+ (Alexey Suprun,noble via Mikhail Khludnev)
+
+* SOLR-10316: Unloading a core can remove a ZK SolrCore registration entry for the wrong SolrCore. (Mark Miller)
+
+* SOLR-10588: Prevent redundant core reload on config update (Mikhail Khludnev)
+
+* SOLR-10549: The new 'large' attribute had been forgotten in /schema/fieldtypes?showDefaults=true (David Smiley)
+
+* SOLR-10615: requests are suspended until SolrDispatchFilter initialization is completed.
+ After core container shutdown or severe initialization problem Solr responds with
+ http stauts 404 Not Found instead of 500 as it was before (Mikhail Khludnev)
+
+* SOLR-8149: Admin UI - Plugins / Stats - active item is now highlighted (Labuzov Dmitriy via janhoy)
+
+* SOLR-10630: HttpSolrCall.getAuthCtx().new AuthorizationContext() {...}.getParams()
+ sometimes throws java.lang.NullPointerException (hu xiaodong via shalin)
+
+* SOLR-9527: Improve distribution of replicas when restoring a collection
+ (Hrishikesh Gadre, Stephen Lewis, Rohit, Varun Thacker)
+
+* LUCENE-7821: The classic and flexible query parsers, as well as Solr's
+ "lucene"/standard query parser, should require " TO " in range queries,
+ and accept "TO" as endpoints in range queries. (hossman, Steve Rowe)
+
+* SOLR-10735: Windows script (solr.cmd) didn't work properly with directory containing spaces. Adding quotations
+ to fix (Uwe Schindler, janhoy, Tomas Fernandez-Lobbe, Ishan Chattopadhyaya)
+
+Ref Guide
+----------------------
+
+* SOLR-10758: Modernize the Solr ref guide's Chinese language analysis coverage. (Steve Rowe)
+
+Other Changes
+----------------------
+
+* SOLR-9221: Remove Solr contribs: map-reduce, morphlines-core and morphlines-cell. (Steve Rowe)
+
+* SOLR-10249: Refactor IndexFetcher.doFetch() to return a more detailed result. (Jeff Miller via David Smiley)
+
+* SOLR-10304: Refactor Document handling out of SolrIndexSearcher into a new class "SolrDocumentFetcher".
+ Deprecated SolrPluginUtils.docListToSolrDocumentList(). (David Smiley)
+
+* SOLR-10352: bin/solr script now prints warning when available system entropy is lower than 300 (Esther Quansah via
+ Ishan Chattopadhyaya)
+
+* SOLR-10344: Update Solr default/example and test configs to use WordDelimiterGraphFilterFactory. (Steve Rowe)
+
+* SOLR-10343: Update Solr default/example and test configs to use SynonymGraphFilterFactory. (Steve Rowe)
+
+* SOLR-10365: Handle a SolrCoreInitializationException while publishing core state during SolrCore creation
+ (Ishan Chattopadhyaya)
+
+* SOLR-10357: Enable edismax and standard query parsers to handle the option combination
+ sow=false / autoGeneratePhraseQueries="true" by setting QueryBuilder.autoGenerateMultiTermSynonymsQuery.
+ (Steve Rowe)
+
+* SOLR-10147: Admin UI -> Cloud -> Graph: Impossible to see shard state (Amrit Sarkar, janhoy)
+
+* SOLR-10399: Generalize some internal facet logic to simplify points/non-points field handling (Adrien Grand, hossman)
+
+* SOLR-7383: New DataImportHandler 'atom' example, replacing broken 'rss' example (Alexandre Rafalovitch)
+
+* SOLR-9601: Redone DataImportHandler 'tika' example, removing all unused and irrelevant definitions (Alexandre Rafalovitch)
+
+* SOLR-8906: Make transient core cache pluggable (Erick Erickson)
+
+* SOLR-9745: print errors from solr.cmd (Gopikannan Venugopalsamy via Mikhail Khludnev)
+
+* SOLR-10394: Rename getSortWithinGroup to getWithinGroupSort in search.grouping.Command class.
+ (Judith Silverman, Christine Poerschke)
+
+* SOLR-10440: LBHttpSolrClient.doRequest is now always wrapped in a Mapped Diagnostic Context (MDC).
+ (Christine Poerschke)
+
+* SOLR-10429: UpdateRequest#getRoutes()should copy the response parser (noble)
+
+* SOLR-10007: Clean up references to CoreContainer and CoreDescriptors (Erick Erickson)
+
+* SOLR-10151: Use monotonically incrementing counter for doc ids in TestRecovery. (Peter Szantai-Kis, Mano Kovacs via Mark Miller)
+
+* SOLR-10514: Upgrade Metrics library to 3.2.2. (ab)
+
+* SOLR-9386: Upgrade Zookeeper to 3.4.10. (Shawn Heisey, Steve Rowe)
+
+* SOLR-10519: SolrCLI.atPath cannot handle children that begin with a slash. (Erick Erickson)
+
+* SOLR-9867: Adding isLoading=true as core status. Fixing start after stop scenario in bin/solr
+ (Andrey Kudryavtsev, Mikhail Khludnev)
+
+* SOLR-7041: Cutover tests to using 'q.op' and 'df' instead of schema 'defaultOperator' and 'defaultSearchField' (janhoy)
+
+* SOLR-10601: StreamExpressionParser should handle white space around = in named parameters (Joel Bernstein)
+
+* SOLR-10614: Static fields have turned to instance's field in SimplePostTool.
+ Enabled TestSolrCLIRunExample.testTechproductsExample(). (Andrey Kudryavtsev, Mikhail Khludnev)
+
+* SOLR-10522: Revert SpellCheckComponent response format change from SOLR-9972 (rel. 6.5.0). While this
+ was an improvement for the json "arrntv" format, it caused problems for the default json format.
+ (James Dyer, reported by Nikita Pchelintsev)
+
+* SOLR-10644: solr.in.sh installed by install script should be writable by solr user (janhoy)
+
+* SOLR-10729: Deprecated LatLonType, GeoHashField, SpatialPointVectorFieldType, and SpatialTermQueryPrefixTreeFieldType.
+ Instead, switch to LatLonPointSpatialField or SpatialRecursivePrefixTreeFieldType or RptWithGeometrySpatialField.
+ (David Smiley)
+
+================== 6.5.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-10383: Fix debug related NullPointerException in solr/contrib/ltr OriginalScoreFeature class.
+ (Vitezslav Zak, Christine Poerschke)
+
+* SOLR-10416: The JSON output of /admin/metrics is fixed to write the container as a
+ map (SimpleOrderedMap) instead of an array (NamedList). (shalin)
+
+* SOLR-10277: On 'downnode', lots of wasteful mutations are done to ZK.
+ (Joshua Humphries, Scott Blum, Varun Thacker, shalin)
+
+* SOLR-10421: Fix params persistence for solr/contrib/ltr (MinMax|Standard)Normalizer classes.
+ (Jianxiong Dong, Christine Poerschke)
+
+* SOLR-10404: The fetch() streaming expression wouldn't work if a value included query syntax chars (like :+-).
+ Fixed, and enhanced the generated query to not pollute the queryCache. (David Smiley)
+
+* SOLR-10423: Disable graph query production via schema configuration <fieldtype ... enableGraphQueries="false">.
+ This fixes broken queries for ShingleFilter-containing query-time analyzers when request param sow=false.
+ (Steve Rowe)
+
+* SOLR-10425: Fix indexed="false" on numeric PointFields (Tomás Fernández Löbbe, hossman)
+
+* SOLR-10341: SQL AVG function mis-interprets field type. (Joel Bernstein)
+
+* SOLR-10444: SQL interface does not use client cache. (Joel Bernstein)
+
+* SOLR-10420: Solr 6.x leaking one SolrZkClient instance per second (Scott Blum, Cao Manh Dat, Markus Jelsma, Steve Rowe)
+
+* SOLR-10439: The new 'large' attribute had been forgotten in /schema/fields?showDefaults=true (David Smiley)
+
+* SOLR-10527: edismax with sow=false fails to create dismax-per-term queries when any field is boosted.
+ (Steve Rowe)
+
+================== 6.5.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.14.v20161028
+Apache Calcite 1.11.0
+
+Detailed Change List
+----------------------
+
+Upgrade Notes
+----------------------
+* SOLR-10226: JMX metric "avgTimePerRequest" (and the corresponding metric in the metrics API for
+ each handler) used to be a simple non-decaying average based on total cumulative time and the
+ number of requests. New Codahale Metrics implementation applies exponential decay to this value,
+ which heavily biases the average towards the last 5 minutes. (ab)
+
+* SOLR-8593: Parallel SQL now uses Apache Calcite as its SQL framework. As part of this change
+ the default aggregation mode has been changed to facet rather than map_reduce. There has also been changes
+ to the SQL aggregate response and some SQL syntax changes. Consult the documentation for full details.
+
+
+New Features
+----------------------
+
+* SOLR-9836: Add ability to recover from leader when index corruption is detected on SolrCore creation.
+ (Mike Drob via Mark Miller)
+
+* SOLR-9926: Allow passing arbitrary java system properties to zkcli. (Hrishikesh Gadre via Mark Miller)
+
+* SOLR-9885: Allow pre-startup Solr log management in Solr bin scripts to be disabled. (Mano Kovacs via Mark Miller)
+
+* SOLR-9481: Authentication and Authorization plugins now work in standalone mode if security.json is placed in
+ SOLR_HOME on every node. Editing config through API is supported but affects only that one node. (janhoy)
+
+* SOLR-8029: Added new style APIs and a framework for creating new APIs and mapping old APIs to new
+ (noble, Steve Rowe, Cassandra Targett, Timothy Potter)
+
+* SOLR-9933: SolrCoreParser now supports configuration of custom SpanQueryBuilder classes.
+ (Daniel Collins, Christine Poerschke)
+
+* SOLR-7955: Auto create .system collection on first request if it does not exist (noble)
+
+* SOLR-10087: StreamHandler now supports registering custom streaming expressions from the blob store (Kevin Risden)
+
+* SOLR-9997: Enable configuring SolrHttpClientBuilder via java system property. (Hrishikesh Gadre via Mark Miller)
+
+* SOLR-9912: Add facet.excludeTerms parameter support. (Jonny Marks, David Smiley, Christine Poerschke)
+
+* SOLR-9916: Adds Stream Evaluators to support evaluating values from tuples. Supports boolean,
+ numeric, and conditional evaluators. BooleanOperations have been removed in preference of
+ BooleanEvaluators. (Dennis Gove)
+
+* SOLR-9903: Stop interrupting the update executor on shutdown, it can cause graceful shutdowns to put replicas into Leader
+ Initiated Recovery among other undesirable things. (Mark Miller)
+
+* SOLR-8396: Add support for PointFields in Solr (Ishan Chattopadhyaya, Tomás Fernández Löbbe)
+
+* SOLR-9987: Add support for MultiValued DocValues in PointFields using SortedNumericDocValues (Tomás Fernández Löbbe)
+
+* SOLR-5944: In-place updates of Numeric DocValues. To leverage this, the _version_ field and the updated
+ field must both be stored=false, indexed=false, docValues=true. (Ishan Chattopadhyaya, hossman, noble,
+ shalin, yonik)
+
+* SOLR-10158: Add support for "preload" option in MMapDirectoryFactory.
+ (Amrit Sarkar via Uwe Schindler)
+
+* SOLR-10153 & SOLR-10152: The Unified and Postings based highlighters: Add hl.bs.type=SEPARATOR along with new param
+ hl.bs.separator to break passages by a provided single character. (Amrit Sarkar, David Smiley)
+
+* SOLR-10156: Add significantTerms Streaming Expression (Joel Bernstein)
+
+* SOLR-8593: Integrate Apache Calcite into the SQLHandler (Kevin Risden, Cao Manh Dat, Joel Bernstein)
+
+* SOLR-10146: Added button to the Admin UI 'Collection' tab for deleting an inactive shard (Amrit Sarkar, janhoy)
+
+* SOLR-9999: Instrument DirectUpdateHandler2. This registers existing statistics under metrics API and adds
+ more metrics to track the rates of update and delete commands. (ab)
+
+* SOLR-9986: Implement DatePointField (Cao Manh Dat, Tomás Fernández Löbbe)
+
+* SOLR-8045: Deploy V2 API at /v2 instead of /solr/v2 (Cao Manh Dat, Noble Paul)
+
+* SOLR-10039: New LatLonPointSpatialField replacement for LatLonType (and some uses of RPT). Multi-value capable
+ indexed geo lat-lon points, query by rect or circle. Efficient distance sorting/boosting too. (David Smiley)
+
+* SOLR-10250: CloudSolrClient can now return versions for documents added or deleted when "versions=true" is passed.
+ However, if there is a leader election while this request is in transit, the versions may not be returned from that
+ shard. (Boris Naguet, Ishan Chattopadhyaya)
+
+* SOLR-9045: Make RecoveryStrategy settings configurable. (Christine Poerschke)
+
+* SOLR-10224: Add disk total and disk free metrics. (ab)
+
+* SOLR-10085: SQL result set fields should be ordered by the field list (Joel Bernstein)
+
+* SOLR-10254: significantTerms Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)
+
+* SOLR-10286: string/text fields may now declare themselves as large="true" in the schema. Large fields are always
+ lazy loaded and will only take up space in the document cache if the actual value is < 512KB. This option
+ requires "stored" and must not be multiValued. It's intended for fields that might have very large values so that
+ they don't get cached in memory. (David Smiley)
+
+* SOLR-9185: Solr's edismax and "Lucene"/standard query parsers will no longer split on whitespace before sending
+ terms to analysis, if given the "sow=false" request param ("sow"=>"split on whitespace"). This enables multi-term
+ source synonyms to match at query-time using SynonymGraphFilterFactory; other analysis components will also now
+ work at query time, e.g. ShingleFilterFactory. By default, and when the "sow=true" param is specified, these
+ parsers' behavior remains the same: queries will be split on whitespace before sending individual terms to analysis.
+ (Steve Rowe)
+
+Bug Fixes
+----------------------
+
+* SOLR-9976: Fix init bug in SegmentsInfoRequestHandlerTest (hossman)
+
+* SOLR-9977: Fix config bug in DistribDocExpirationUpdateProcessorTest that allowed false assumptions
+ about when index version changes (hossman)
+
+* SOLR-9979: Macro expansion should not be done in shard requests (Tomás Fernández Löbbe)
+
+* SOLR-9114: NPE using TermVectorComponent, MoreLikeThisComponent in combination with ExactStatsCache (Cao Manh Dat, Varun Thacker)
+
+* SOLR-10049: Collection deletion leaves behind the snapshot metadata (Hrishikesh Gadre via yonik)
+
+* SOLR-10120: A SolrCore reload can remove the index from the previous SolrCore during replication index rollover. (Mark Miller)
+
+* SOLR-10124: Replication can skip removing a temporary index directory in some cases when it should not. (Mark Miller)
+
+* SOLR-9996: Unstored IntPointField returns Long type (Ishan Chattopadhyaya)
+
+* SOLR-10104: BlockDirectoryCache release hooks do not work with multiple directories. (Mike Drob, Mark Miller)
+
+* SOLR-10121: Fix race conditions in HDFS BlockCache that can contribute to corruption in high
+ concurrency situations. (yonik)
+
+* SOLR-10141: Upgrade to Caffeine 2.4.0 since v1.0.1 contributed to BlockCache corruption because the
+ removal listener was called more than once for some items and not at all for other items. (Ben Manes, yonik)
+
+* SOLR-10114: Reordered delete-by-query causes inconsistenties between shards that have
+ child documents (Mano Kovacs, Mihaly Toth, yonik)
+
+* SOLR-10159: When DBQ is reordered with an in-place update, upon whose updated value the DBQ is based
+ on, the DBQ fails due to excessive caching in DeleteByQueryWrapper (Ishan Chattopadhyaya)
+
+* SOLR-10020: CoreAdminHandler silently swallows some errors. (Mike Drob via Erick Erickson)
+
+* SOLR-10063: CoreContainer shutdown has race condition that can cause a hang on shutdown. (Mark Miller)
+
+* SOLR-10170: ClassCastException in RecoveryStrategy. (Mark Miller)
+
+* SOLR-9846: Overseer is not always closed after being started. (Mark Miller)
+
+* SOLR-10168: ShardSplit can fail with NPE in OverseerCollectionMessageHandler#waitForCoreAdminAsyncCallToComplete. (Mark Miller)
+
+* SOLR-9824: Some bulk update paths could be very slow due to CUSC polling. (David Smiley, Mark Miller)
+
+* SOLR-10055: Linux installer now renames existing bin/solr.in.* as bin/solr.in.*.orig to make the installed config in
+ /etc/defaults be the one found by default when launching solr manually. (janhoy)
+
+* SOLR-10196: ElectionContext#runLeaderProcess can hit NPE on core close. (Mark Miller)
+
+* SOLR-10225: Fix HDFS BlockCache evictions metric to not count explicit removal
+ due to a directory close. (yonik)
+
+* SOLR-10088: Installer script does not put zoo.cfg in SOLR_HOME (janhoy)
+
+* SOLR-10226: add back "totalTime" metric to all handlers. See also the back-compat note. (ab)
+
+* SOLR-9838: "inc" atomic update doesn't respect default field value (hoss, Amrit Sarkar, Ishan Chattopadhyaya)
+
+* SOLR-10269: MetricsHandler JSON output incorrect. (ab)
+
+* SOLR-10279: The autoAddReplica feature can result in SolrCores being assigned new shards when using
+ legacyCloud=false and will also fail on a state check when taking over a core registration with a new
+ core. (Mark Miller, Hrishikesh Gadre, Patrick Dvorack)
+
+* SOLR-10184: Fix bin/solr so it can run properly on java9 (hossman, Uwe Schindler)
+
+* SOLR-9516: Admin UI (angular) now works with Kerberos, by excluding serving of /solr/libs/* through
+ SolrDispatchFilter. (Cassandra Targett, Amrit Sarkar via Ishan Chattopadhyaya)
+
+* SOLR-10302: Solr's zkcli scripts now able to find the metrics libraries, which it couldn't earlier (kiran, Ishan Chattopadhyaya)
+
+* SOLR-10283: Learning to Rank (LTR) SolrFeature to reject searches with missing efi (External Feature Information) used by fq.
+ (Christine Poerschke)
+
+* SOLR-10237: Poly-fields should work with subfields that have docValues=true (Tomás Fernández Löbbe, David Smiley)
+
+* SOLR-10218: The Schema API commands "add-field-type" and "replace-field-type" improperly specify SimilarityFactory params.
+ (Benjamin Deininger, Troy Mohl, Steve Rowe)
+
+* SOLR-10319: SolrCore "instanceDir" metric not visible in JMX. (ab)
+
+Optimizations
+----------------------
+
+* SOLR-9941: Clear the deletes lists at UpdateLog before replaying from log. This prevents redundantly pre-applying
+ DBQs, during the log replay, to every update in the log as if the DBQs were out of order. (hossman, Ishan Chattopadhyaya)
+
+* SOLR-9764: All filters that match all documents in the index now share the same memory (DocSet).
+ (Michael Sun, yonik)
+
+* SOLR-9584: Support Solr being proxied with another endpoint than default /solr, by using relative links
+ in AdminUI javascripts (Yun Jie Zhou via janhoy)
+
+* SOLR-10143: PointFields will create IndexOrDocValuesQuery when a field is both, indexed=true and docValues=true
+ (Tomás Fernández Löbbe)
+
+* SOLR-10273: The field with the longest value (if it exceeds 4K) is moved to be last in the Lucene Document in order
+ to benefit from stored field optimizations in Lucene that can avoid reading it when it's not needed. If the field is
+ multi-valued, they all move together to the end to retain order. (David Smiley)
+
+Other Changes
+----------------------
+* SOLR-9980: Expose configVersion in core admin status (Jessica Cheng Mallet via Tomás Fernández Löbbe)
+
+* SOLR-9972: SpellCheckComponent collations and suggestions returned as a JSON object rather than a list
+ (Christine Poerschke in response to bug report from Ricky Oktavianus Lazuardy)
+
+* SOLR-9983: Fixing NullPointerException failure by TestManagedSchemaThreadSafety
+ adding check for Zookeeper session expiration (Steve Rowe, Mikhail Khludnev)
+
+* SOLR-10043: Reduce logging of pre-start log rotation (janhoy)
+
+* SOLR-10018: Increase the default hl.maxAnalyzedChars to 51200 for the Unified & Postings Highlighter so that all
+ highlighters now have this same default. (David Smiley)
+
+* SOLR-6246: Added tests to check that the changes in LUCENE-7564 and LUCENE-7670
+ enable AnalyzingInfixSuggester and BlendedInfixSuggester to play nicely with core reload.
+ SolrSuggester.build() now throws SolrCoreState.CoreIsClosedException when interrupted
+ by a core reload/shutdown. (Steve Rowe)
+
+* SOLR-9800: Factor out FacetComponent.newSimpleFacets method. (Jonny Marks via Christine Poerschke)
+
+* SOLR-9914: SimpleFacets: refactor "contains" check into "SubstringBytesRefFilter" class.
+ (Jonny Marks, David Smiley, Christine Poerschke)
+
+* SOLR-10072: The test TestSelectiveWeightCreation appears to be unreliable. (Michael Nilsson via Mark Miller)
+
+* SOLR-10011: Refactor PointField & TrieField to now have a common base class, NumericFieldType. The
+ TrieField.TrieTypes and PointField.PointTypes are now consolidated to NumericFieldType.NumberType. This
+ refactoring also fixes a bug whereby PointFields were not using DocValues for range queries for
+ indexed=false, docValues=true fields. (Ishan Chattopadhyaya, Tomás Fernández Löbbe)
+
+* SOLR-9890: factor out ShardResultTransformerUtils.[un]marshSortValue methods
+ (Judith Silverman, Christine Poerschke)
+
+* SOLR-9966: Convert/migrate tests using EasyMock to Mockito (Cao Manh Dat, Uwe Schindler)
+
+* SOLR-10173: Make HttpShardHandlerFactory.getReplicaListTransformer more extensible.
+ (Ramsey Haddad via Christine Poerschke)
+
+* SOLR-9842: UpdateRequestProcessors have no way to guarantee the closing of resources used for a request.
+ (Mark Miller)
+
+* SOLR-9848: Lower solr.cloud.wait-for-updates-with-stale-state-pause back down from 7 seconds.
+ (Mark Miller)
+
+* SOLR-10020: Cannot reload a core if it fails initialization. (Mike Drob via Erick Erickson)
+
+* SOLR-9450: The docs/ folder in the binary distribution now contains a single index.html file linking
+ to the online documentation, reducing the size of the download (janhoy, Shawn Heisey, Uwe Schindler)
+
+* SOLR-7453: Remove replication & backup scripts in the solr/scripts directory of the checkout (Varun Thacker)
+
+* SOLR-10214: Remove unused HDFS BlockCache metrics and add storeFails, as well as adding total
+ counts for lookups, hits, and evictions. (yonik)
+
+* SOLR-10134: EmbeddedSolrServer responds on Schema API requests (Robert Alexandersson via Mikhail Khludnev)
+
+* SOLR-10219: re-enable HDFS tests under JDK9 (hossman, Uwe Schindler)
+
+* SOLR-10155: For numeric types facet.contains= and facet.prefix= are now rejected.
+ (Gus Heck, Christine Poerschke)
+
+* SOLR-10171: Add Constant Reduction Rules to Calcite Planner (Kevin Risden)
+
+* SOLR-10230: default TTL of PKIAuthenticationPlugin increased to 10secs (noble)
+
+* SOLR-10235: Fix DIH's TestJdbcDataSource to work with Java 9 and other Java runtimes that
+ do not use the same DriverManager implementation like Oracle's original one. The test now
+ uses a fully implemented Driver instance returning a mock connection. The test also works
+ correct now if other drivers were installed before test execution (e.g., through IDE).
+ (hossman, Uwe Schindler)
+
+* SOLR-8876: change morphline test config files to work around 'importCommands' bug when using java9 (hossman)
+
+* SOLR-10247: Support non-numeric metrics and a "compact" format of /admin/metrics output. (ab)
+
+* SOLR-9990: Add PointFields in example/default schemas (Tomás Fernández Löbbe)
+
+================== 6.4.2 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.14.v20161028
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+* SOLR-10130, SOLR-10182: Serious performance degradation in Solr 6.4.1 due to the new metrics collection.
+ Default settings in solrconfig.xml /config/indexConfig/metrics have been changed to turn off
+ IndexWriter metrics collection. Directory level metrics collection has been completely removed until
+ a better design is found. (ab, ishan)
+
+* SOLR-10138: Transaction log replay can hit an NPE due to new Metrics code. (ab)
+
+* SOLR-10083: Fix instanceof check in ConstDoubleSource.equals (Pushkar Raste via Christine Poerschke)
+
+* SOLR-10190: Fix NPE in CloudSolrClient when reading stale alias (Janosch Woschitz via Tomás Fernández Löbbe)
+
+* SOLR-10192: Fix copy/paste in solr-ltr pom.xml template. (Christine Poerschke)
+
+================== 6.4.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.14.v20161028
+
+Bug Fixes
+----------------------
+* SOLR-9969: "Plugin/Stats" section of the UI doesn't display empty metric types (Tomás Fernández Löbbe)
+
+* SOLR-8491: solr.cmd SOLR_SSL_OPTS is overwritten (Sam Yi, Andy Hind, Marcel Berteler, Kevin Risden)
+
+* SOLR-10031: Validation of filename params in ReplicationHandler (Hrishikesh Gadre, janhoy)
+
+* SOLR-10054: Core swapping doesn't work with new metrics changes in place (ab)
+
+================== 6.4.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.14.v20161028
+
+Detailed Change List
+----------------------
+
+Upgrade Notes
+----------------------
+
+* SOLR-9166: Export handler returns zero for numeric fields that are not in the original doc. One
+ consequence of this change is that you must be aware that some tuples will not have values if
+ there were none in the original document.
+
+* SOLR-8785: Metrics related classes in org.apache.solr.util.stats have been removed in favor of
+ the dropwizard metrics library. Any custom plugins using these classes should be changed to use
+ the equivalent classes from the metrics library.
+ As part of this, the following changes were made to the output of Overseer Status API:
+ * The "totalTime" metric has been removed because it is no longer supported
+ * The metrics "75thPctlRequestTime", "95thPctlRequestTime", "99thPctlRequestTime"
+ and "999thPctlRequestTime" in Overseer Status API have been renamed to "75thPcRequestTime", "95thPcRequestTime"
+ and so on for consistency with stats output in other parts of Solr.
+ * The metrics "avgRequestsPerMinute", "5minRateRequestsPerMinute" and "15minRateRequestsPerMinute" have been
+ replaced by corresponding per-second rates viz. "avgRequestsPerSecond", "5minRateRequestsPerSecond"
+ and "15minRateRequestsPerSecond" for consistency with stats output in other parts of Solr.
+
+* SOLR-9708: You are encouraged to try out the UnifiedHighlighter by setting hl.method=unified and report feedback. It
+ might become the default in 7.0. It's more efficient/faster than the other highlighters, especially compared to the
+ original Highlighter. That said, some options aren't supported yet.
+ It will get more features in time, especially with your input. See HighlightParams.java
+ for a listing of highlight parameters annotated with which highlighters use them.
+ hl.useFastVectorHighlighter is now considered deprecated in lieu of hl.method=fastVector.
+
+* SOLR-9712: maxWarmingSearchers now defaults to 1, and more importantly commits will now block if this
+ limit is exceeded instead of throwing an exception (a good thing). Consequently there is no longer a
+ risk in overlapping commits. Nonetheless users should continue to avoid excessive committing. Users are
+ advised to remove any pre-existing maxWarmingSearchers entries from their solrconfig.xml files.
+
+* SOLR-7466: complexphrase query parser now supports leading wildcards, beware of its' possible heaviness.
+ Users are encouraged to use ReversedWildcardFilter in index time analysis.
+
+New Features
+----------------------
+* SOLR-9918: Add SkipExistingDocumentsProcessor that skips duplicate inserts and ignores updates to missing docs
+ (Tim Owen via koji)
+
+* SOLR-9293: Solrj client support for hierarchical clusters and other topics
+ marker. (Dawid Weiss)
+
+* SOLR-9681: FacetModule / JSON Facet API added the ability to add filters directly to
+ any facet command. The filters are applied after any domain change operations.
+ Example: { type:terms, field:category, filter:"user:yonik" }
+ (yonik)
+
+* SOLR-9442, SOLR-9787: Adds Array of Name Type Value (json.nl=arrntv) style to JSONResponseWriter.
+ (Jonny Marks, Christine Poerschke, hossman)
+
+* SOLR-8542: Adds Solr Learning to Rank (LTR) plugin for reranking results with machine learning models.
+ (Michael Nilsson, Diego Ceccarelli, Joshua Pantony, Jon Dorando, Naveen Santhapuri, Alessandro Benedetti, David Grohmann, Christine Poerschke)
+
+* SOLR-9055: Make collection backup/restore extensible. (Hrishikesh Gadre, Varun Thacker, Mark Miller)
+
+* SOLR-9682: JSON Facet API: added "param" query type to facet domain filter specification to obtain
+ filters via query parameters. (yonik)
+
+* SOLR-9038: Add a command-line tool to manage the snapshots functionality (Hrishikesh Gadre via yonik)
+
+* SOLR-9633: Limit memory consumed by FastLRUCache with a new 'maxRamMB' config parameter.
+ (yonik, Michael Sun, shalin)
+
+* SOLR-9666: SolrJ LukeResponse support dynamic fields (Fengtan via Kevin Risden)
+
+* SOLR-9077: Streaming expressions should support collection alias (Kevin Risden)
+
+* SOLR-9324: Support Secure Impersonation / Proxy User for solr authentication
+ (Gregory Chanan, Hrishikesh Gadre via yonik)
+
+* SOLR-9721: javabin Tuple parser for streaming and other end points (noble)
+
+* SOLR-9708: Added UnifiedSolrHighlighter, a highlighter adapter for Lucene's UnifiedHighlighter. The adapter is a
+ derivative of the PostingsSolrHighlighter, supporting mostly the same parameters with some differences.
+ Introduced "hl.method" parameter which can be set to original|fastVector|postings|unified to pick the highlighter at
+ runtime without the need to modify solrconfig from the default configuration. hl.useFastVectorHighlighter is now
+ considered deprecated in lieu of hl.method=fastVector. (Timothy Rodriguez, David Smiley)
+
+* SOLR-9728: Ability to specify Key Store type in solr.in.sh file for SSL (Michael Suzuki, Kevin Risden)
+
+* SOLR-5043: New solr.dns.prevent.reverse.lookup system property that can be used to prevent long core
+ (re)load delays on systems with missconfigured hostname/DNS (hossman)
+
+* SOLR-9844: FieldCache information fetched via the mbeans handler or seen via the UI now displays the total size used.
+ The individual cache entries in the response are now formatted better as well. (Varun Thacker)
+
+* SOLR-9513: Generic authentication plugins (GenericHadoopAuthPlugin and ConfigurableInternodeAuthHadoopPlugin) that delegate
+ all functionality to Hadoop authentication framework. (Hrishikesh Gadre via Ishan Chattopadhyaya)
+
+* SOLR-9860: Enable configuring invariantParams via HttpSolrClient.Builder (Hrishikesh Gadre, Ishan Chattopadhyaya)
+
+* SOLR-4735, SOLR-9921: Improve metrics reporting. This uses the dropwizard metric library, adding an internal
+ API for registering and reporting metrics from Solr components. Several new metrics and an improved JMX
+ reporter have been added (Alan Woodward, Jeff Wartes, Christine Poerschke, Kelvin Wong, shalin, ab)
+
+* SOLR-9788: Use instrumented jetty classes provided by the dropwizard metric library. (shalin)
+
+* SOLR-9805: Use metrics-jvm library to instrument jvm internals such as GC, memory usage and others. (shalin)
+
+* SOLR-9812, SOLR-9911, SOLR-9960: Added a new /admin/metrics API to return all metrics collected by Solr via API.
+ API supports four optional multi-valued parameters:
+ - 'group' (all,jvm,jetty,node,core),
+ - 'type' (all,counter,timer,gauge,histogram),
+ - 'prefix' that filters the returned metrics,
+ - 'registry' that selects one or more registries by prefix (eg. solr.jvm,solr.core.collection1)
+ - Example: http://localhost:8983/solr/admin/metrics?group=jvm,jetty&type=counter
+ - Example: http://localhost:8983/solr/admin/metrics?group=jvm&prefix=buffers,os
+ - Example: http://localhost:8983/solr/admin/metrics?registry=solr.node,solr.core&prefix=ADMIN
+ (shalin, ab)
+
+* SOLR-9884: Add version to segments handler output (Steven Bower via Erick Erickson)
+
+* SOLR-9725: Substitute properties into JdbcDataSource configuration ( Jamie Jackson, Yuri Sashevsky via Mikhail Khludnev)
+
+* SOLR-9877: SOLR-9923: SOLR-9948: Use instrumented http client and connection pool in HttpShardHandler and
+ UpdateShardHandler. The metrics are collected per query-less URL and method by default but it can be configured
+ to host/method and per-method as well. (shalin)
+
+* SOLR-9880: Add Ganglia, Graphite and SLF4J metrics reporters. (ab)
+
+* SOLR-9897: Add hl.requireFieldMatch toggle support when using the UnifiedHighlighter. Defaults to false like the
+ other highlighters that support this. (David Smiley)
+
+* SOLR-9905: Add NullStream to isolate the performance of the ExportWriter (Joel Bernstein)
+
+* SOLR-9891: Add mkroot command to bin/solr and bin/solr.cmd (Erick Erickson)
+
+* SOLR-9668,SOLR-7197: introduce cursorMark='true' in SolrEntityProcessor (Yegor Kozlov, Raveendra Yerraguntl via Mikhail Khludnev)
+
+* SOLR-9684: Add priority Streaming Expression (Joel Bernstein, David Smiley)
+
+* SOLR-9896: Instrument and collect metrics from query, update, core admin and core load thread pools. (shalin)
+
+* SOLR-9854: Collect metrics for index merges and index store IO (ab)
+
+* SOLR-8530: Add HavingStream to Streaming API and StreamingExpressions (Joel Bernstein)
+
+* SOLR-7466: Enable leading wildcard in complexphrase query parser, optimize it with ReversedWildcardFilterFactory
+ when it's provided (Mikhail Khludnev)
+
+* SOLR-9935: Add hl.fragsize support when using the UnifiedHighlighter to avoid snippets/Passages that are too small.
+ Defaults to 70. (David Smiley)
+
+* SOLR-9856: Collect metrics for shard replication and tlog replay on replicas (ab).
+
+* SOLR-9886: Add a 'enable' flag to caches to enable/disable them (Pushkar Raste, noble)
+
+* SOLR-9947: Clean up some SolrInfoMBean categories. Add an alternative hierarchical view in JMX
+ for SolrInfoMBeans, which uses similar conventions to SolrJmxReporter. (ab)
+
+Optimizations
+----------------------
+* SOLR-9704: Facet Module / JSON Facet API: Optimize blockChildren facets that have
+ filters specified by using those filters as acceptDocs. (yonik)
+
+* SOLR-9726: Reduce number of lookupOrd calls made by the DocValuesFacets.getCounts method.
+ (Jonny Marks via Christine Poerschke)
+
+* SOLR-9772: Deriving distributed sort values (fieldSortValues) should reuse
+ comparator and only invalidate leafComparator. (John Call via yonik)
+
+* SOLR-9786: FieldType has a new getSetQuery() method that can take a set of terms
+ and create a more efficient query (such as TermsQuery). The solr query parser has been
+ changed to use this method when appropriate. The parser also knows when it is being
+ used to parse a filter and will create TermsQueries from large lists of normal terms
+ or numbers, resulting in a query that will execute faster. This also acts to avoid
+ BooleanQuery maximum clause limit. Query parsing itself has also been optimized,
+ resulting in less produced garbage and 5-7% better performance.
+ (yonik)
+
+* SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation. (Mark Miller, Mike Drob)
+
+Bug Fixes
+----------------------
+* SOLR-9701: NPE in export handler when "fl" parameter is omitted.
+ (Erick Erickson)
+
+* SOLR-9433: SolrCore clean-up logic uses incorrect path to delete dataDir on failure to create a core.
+ (Evan Sayer, shalin)
+
+* SOLR-9360: Solr script not properly checking SOLR_PID
+ (Alessandro Benedetti via Erick Erickson)
+
+* SOLR-9716: RecoveryStrategy sends prep recovery command without setting read time out which can cause
+ replica recovery to hang indefinitely on network partitions. (Cao Manh Dat, shalin)
+
+* SOLR-9624: In Admin UI, do not attempt to highlight CSV output (Alexandre Rafalovitch)
+
+* SOLR-9005: In files example, add a guard condition to javascript URP script (Alexandre Rafalovitch)
+
+* SOLR-9519: JSON Facet API: don't stop at an empty facet bucket if any sub-facets still have a chance
+ of matching something due to filter exclusions (which can widen the domain again).
+ (Michael Sun, yonik)
+
+* SOLR-9740: A bug in macro expansion of multi-valued parameters caused non-expanded values
+ after the first expanded value in the same multi-valued parameter to be dropped.
+ (Erik Hatcher, yonik)
+
+* SOLR-9751: PreAnalyzedField can cause managed schema corruption. (Steve Rowe)
+
+* SOLR-9736: Solr resolves the collection name against the first available leader or first replica
+ of the first slice. This puts undue pressure on leader cores and likely on the wrong ones. This is
+ fixed to randomly pick a leader on updates or a replica core otherwise. (Cao Manh Dat via shalin)
+
+* SOLR-9284: The HDFS BlockDirectoryCache should not let it's keysToRelease or names maps grow indefinitely.
+ (Mark Miller, Michael Sun)
+
+* SOLR-9729: JDBCStream improvements (Kevin Risden)
+
+* SOLR-9626: new Admin UI now also highlights matched terms in the Analysis screen. (Alexandre Rafalovitch)
+
+* SOLR-9512: CloudSolrClient's cluster state cache can break direct updates to leaders (noble)
+
+* SOLR-5260: Facet search on a docvalue field in a multi shard collection (Trym Møller, Erick Erickson)
+
+* SOLR-9768: RecordingJsonParser produces incomplete json (Wojciech Stryszyk via ab)
+
+* SOLR-9616: Solr throws exception when expand=true on empty index (Timo Hund via Ishan Chattopadhyaya)
+
+* SOLR-9832: Schema modifications are not immediately visible on the coordinating node. (Steve Rowe)
+
+* SOLR-9834: A variety of spots in the code can create a collection zk node after the collection has been
+ removed. (Mark Miller)
+
+* SOLR-9707: Don't forward DeleteByQuery requests to down replicas. (Jessica Cheng Mallet via Varun Thacker)
+
+* SOLR-9823: CoreContainer incorrectly setting MDCLoggingContext for core (Jessica Cheng Mallet via Erick Erickson)
+
+* SOLR-1953: It may be possible for temporary files to accumulate until the Solr process is shut down.
+ (Karl Wright, Mark Miller)
+
+* SOLR-9847: Stop blocking further schema updates while waiting for a pending update to propagate to other replicas.
+ This reduces the likelihood of a (time-limited) distributed deadlock during concurrent schema updates.
+ (Mark Miller, Steve Rowe)
+
+* SOLR-9760: Windows script doesn't need write permission (Alex Crome by Mikhail Khludnev)
+
+* SOLR-9699,SOLR-4668: fix exception from core status in parallel with core reload (Mikhail Khludnev)
+
+* SOLR-9859: replication.properties cannot be updated after being written and neither replication.properties or
+ index.properties are durable in the face of a crash. (Pushkar Raste, Chris de Kok, Cao Manh Dat, Mark Miller)
+
+* SOLR-9901: Implement move in HdfsDirectoryFactory. (Mark Miller)
+
+* SOLR-9900: fix false positives on range queries with ReversedWildcardFilterFactory (Yonik Seeley via Mikhail Khludnev)
+
+* SOLR-9495: AIOBE with confusing message for incomplete sort spec in Streaming Expression (Gus Heck, Joel Bernstein)
+
+* SOLR-9154: Fix DirectSolrSpellChecker to work when added through the Config API. (Anshum Gupta)
+
+* SOLR-9919: random Streaming Expression is not registered in /stream or /graph handler (Joel Bernstein)
+
+* SOLR-7495: Support Facet.field on a non-DocValued, single-value, int field (Varun Thacker, Scott Stults)
+
+* SOLR-9917: JSON Facet API percentile function caused a NullPointerException in distributed mode when
+ there were no values in a bucket from a shard. (yonik)
+
+* SOLR-9931: JSON Facet API hll (hyper-log-log) function returned 0 for non-empty buckets with no field values
+ in local mode, but nothing for distributed mode. Both modes now return 0. (yonik)
+
+* SOLR-9503: NPE in Replica Placement Rules when using Overseer Role with other rules (Tim Owen via noble)
+
+* SOLR-9883: Example schemaless solr config files can lead to invalid tlog replays: when updates are buffered,
+ update processors ordered before DistributedUpdateProcessor, e.g. field normalization, are never run. (Steve Rowe)
+
+* SOLR-9644: SimpleMLTQParser and CloudMLTQParser did not handle field boosts properly
+ and CloudMLTQParser included extra strings from the field definitions in the query.
+ (Ere Maijala via Anshum Gupta)
+
+* SOLR-9954: Prevent against failure during failed snapshot cleanup from swallowing the actual cause
+ for the snapshot to fail. (thelabdude)
+
+Other Changes
+----------------------
+
+* SOLR-7539: Upgrade the clustering plugin to Carrot2 3.15.0. (Dawid Weiss)
+
+* SOLR-9621: Remove several Guava & Apache Commons calls in favor of java 8 alternatives.
+ (Michael Braun via David Smiley)
+
+* SOLR-9720: Refactor Responsewriters to remove dependencies on TupleStream,
+ Tuple, Explanation (noble)
+
+* SOLR-9717: Refactor '/export' to not hardcode the JSON output and to use an API (noble)
+
+* SOLR-9739: JavabinCodec implements PushWriter interface (noble)
+
+* SOLR-8332: Factor HttpShardHandler[Factory]'s url shuffling out into a ReplicaListTransformer class.
+ (Christine Poerschke, Noble Paul)
+
+* SOLR-9597: Add setReadOnly(String ...) to ConnectionImpl (Kevin Risden)
+
+* SOLR-9609: Change hard-coded keysize from 512 to 1024 (Jeremy Martini via Erick Erickson)
+
+* SOLR-8785: Use Dropwizard Metrics library for core metrics. The copied over code in
+ org.apache.solr.util.stats has been removed. (Jeff Wartes, Kelvin Wong, Christine Poerschke, shalin)
+
+* SOLR-9784: Refactor CloudSolrClient to eliminate direct dependency on ZK (noble)
+
+* SOLR-9801: Upgrade jetty to 9.3.14.v20161028 (shalin)
+
+* SOLR-9783: (Search|Top)Group[s]ShardResponseProcessor.process: turned sortWithinGroup null check into assert.
+ (Christine Poerschke)
+
+* SOLR-9660: in GroupingSpecification factor [group](sort|offset|limit) into [group](sortSpec)
+ (Judith Silverman, Christine Poerschke)
+
+* SOLR-9819: Upgrade commons-fileupload to 1.3.2, fixing a potential vulnerability CVE-2016-3092 (Anshum Gupta)
+
+* SOLR-9827: ConcurrentUpdateSolrClient creates a RemoteSolrException if the remote host responded with a non-ok
+ response (instead of a SolrException) and includes the remote error message as part of the exception message
+ (Tomás Fernández Löbbe)
+
+* SOLR-9846: OverseerAutoReplicaFailoverThread can take too long to stop and leak out of unit tests. (Mark Miller)
+
+* SOLR-8959: Refactored TestSegmentSorting out of TestMiniSolrCloudCluster (hossman)
+
+* SOLR-9874: Solr will reject CREATEALIAS requests if target collections don't exist (Tomás Fernández Löbbe)
+
+* SOLR-9878: fixing lazy logic for retrieving ReversedWildcardFilterFactory in SolrQueryParserBase (Mikhail Khludnev)
+
+* SOLR-9758: refactor preferLocalShards implementation (Christine Poerschke)
+
+* SOLR-9448: providing a test to workaround a differently named uniqueKey field (Mikhail Khludnev)
+
+* SOLR-9899: StandardDirectoryFactory should use optimizations for all FilterDirectorys not just NRTCachingDirectory.
+ (Mark Miller)
+
+* SOLR-9915: PeerSync alreadyInSync check is not backwards compatible and results in full replication during a rolling restart
+ (Tim Owen via noble)
+
+* SOLR-3990: Moves getIndexSize() from ReplicationHandler to SolrCore (Shawn Heisey)
+
+* SOLR-9944: Map the nodes function name to the GatherNodesStream (Joel Bernstein)
+
+* SOLR-9777: IndexFingerprinting should use getCombinedCoreAndDeletesKey() instead of getCoreCacheKey() for per-segment caching (Ishan Chattopadhyaya)
+
+* SOLR-9934: SolrTestCase.clearIndex has been improved to take advantage of low level test specific logic that
+ clears the index metadata more completely then a normal *:* DBQ can due to update versioning. (hossman)
+
+* SOLR-9893: Update Mockito to version 2.6.2 for Java 9 support. Disable all legacy EasyMock tests when running
+ on Java 9 until they were migrated to Mockito. (Uwe Schindler)
+
+================== 6.3.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.12.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.8.v20160314
+
+Detailed Change List
+----------------------
+
+Upgrade Notes
+----------------------
+
+* If you use the JSON Facet API (json.facet) with method=stream, you must now set sort='index asc' to get the streaming
+ behavior; otherwise it won't stream. Reminder: "method" is a hint that doesn't change defaults of other parameters.
+
+* If you use the JSON Facet API (json.facet) to facet on a numeric field and if you use mincount=0 or if you set the
+ prefix, then you will now get an error as these options are incompatible with numeric faceting.
+
+* Solr's logging verbosity at the INFO level has been greatly reduced, and
+ you may need to update the log configs to use the DEBUG level to see all the
+ logging messages you used to see at INFO level before.
+
+* We are no longer backing up solr.log and solr_gc.log files in date-stamped copies forever. If you relied on
+ the solr_log_<date> or solr_gc_log_<date> being in the logs folder that will no longer be the case.
+ See SOLR-9570 for details.
+
+* The create/deleteCollection methods on MiniSolrCloudCluster have been
+ deprecated. Clients should instead use the CollectionAdminRequest API. In
+ addition, MiniSolrCloudCluster#uploadConfigDir(File, String) has been
+ deprecated in favour of #uploadConfigSet(Path, String)
+
+* The bin/solr.in.sh (bin/solr.in.cmd on Windows) is now completely commented by default. Previously, this wasn't so,
+ which had the effect of masking existing environment variables.
+
+New Features
+----------------------
+* SOLR-5725: facet.method=enum can bypass exact counts calculation with facet.exists=true, it just returns 1 for
+ terms which exists in result docset. (Alexey Kozhemiakin, Sebastian Koziel, Radoslaw Zielinski via Mikhail Khludnev)
+
+* SOLR-9127: Excel workbook (.xlsx) response writer. use 'wt=xlsx' (Tony Moriarty, noble)
+
+* SOLR-9469: JettySolrRunner now has the option of restarting using a different
+ port (Alan Woodward)
+
+* SOLR-9319: DELETEREPLICA can accept a 'count' and remove appropriate replicas (Nitin Sharma, noble)
+
+* SOLR-8186: Reduce logging to logs/solr-<port>-console.log when not running in foreground mode
+ Show timestamp also in foreground log. Also removes some logging noise. (janhoy)
+
+* SOLR-8487: Adds CommitStream to support sending commits to a collection being updated. (Dennis Gove)
+
+* SOLR-9534: You can now set Solr's log level through environment variable SOLR_LOG_LEVEL
+ Also adds conveience arguments -q (quiet: WARN) and -v (verbose: DEBUG) to bin/solr (janhoy)
+
+* SOLR-9537: Support facet scoring with the scoreNodes expression (Joel Bernstein)
+
+* SOLR-9558: DIH TemplateTransformerto to support multivalued fields (Ted Sullivan via noble)
+
+* SOLR-9557: Every implicit requesthandler now has a default 'useParams' attribute (noble)
+
+* SOLR-9572: config API to show expanded useParams for request handlers inline (noble)
+
+* SOLR-9258: Optimizing, storing and deploying AI models with Streaming Expressions (Cao Manh Dat, Joel Bernstein)
+
+* SOLR-9205: Added method LukeResponse.getSchemaFlags() which returns field
+ information as an EnumSet (Fengtan, Alan Woodward)
+
+* SOLR-9520: Kerberos delegation support in SolrJ (Ishan Chattopadhyaya, noble)
+
+* SOLR-9146: Parallel SQL engine should support >, >=, <, <=, <>, != syntax (Timothy Potter, Joel Bernstein, Kevin Risden)
+
+* SOLR-9337: Add fetch Streaming Expression (Joel Bernstein)
+
+* SOLR-9103: Restore ability for users to add custom Streaming Expressions (Cao Manh Dat)
+
+* SOLR-9657: New TemplateUpdateProcessorFactory added (noble)
+
+* SOLR-9417: Allow daemons to terminate when they finish iterating a topic (Joel Bernstein)
+
+* SOLR-8370: Display configured Similarity in Schema-Browser, both global/default and per-field/field-type
+ (janhoy, Alexandre Rafalovitch)
+
+* SOLR-9326: Ability to create/delete/list snapshots at collection level.
+ (Hrishikesh Gadre via yonik)
+
+* SOLR-9662: New parameter -u <user:pass> in bin/post to pass basicauth credentials (janhoy)
+
+* SOLR-9654: Add "overrequest" parameter to JSON Facet API to control amount of overrequest
+ on a distributed terms facet. (yonik)
+
+* SOLR-2212: Add a factory class corresponding to Lucene's NoMergePolicy. (Lance Norskog, Cao Manh Dat via shalin)
+
+* SOLR-9670: Support SOLR_AUTHENTICATION_OPTS in solr.cmd (janhoy)
+
+* SOLR-9559: Add ExecutorStream to execute stored Streaming Expressions (Joel Bernstein)
+
+* SOLR-1085: Add support for MoreLikeThis queries and responses in SolrJ client.
+ (Maurice Jumelet, Bill Mitchell, Cao Manh Dat via shalin)
+
+Bug Fixes
+----------------------
+
+* SOLR-9310: PeerSync fails on a node restart due to IndexFingerPrint mismatch (Pushkar Raste, noble)
+
+* SOLR-9484: The modify collection API should wait for the modified properties to show up in the
+ cluster state. (Cao Manh Dat, shalin)
+
+* SOLR-9507: CoreContainer threads now correctly set their MDC logging values
+ (Alan Woodward)
+
+* SOLR-9522: Improve error handling in ZKPropertiesWriter (Varun Thacker)
+
+* SOLR-8080: bin/solr start script now exits with informative message if using wrong Java version (janhoy)
+
+* SOLR-9475: bin/install_solr_service.sh script got improved detection of Linux distro, especially within
+ virtualized/Docker environment through parsing of /etc/*-release files. Now also supports CentOS. (janhoy)
+
+* SOLR-9524: SolrIndexSearcher.getIndexFingerprint uses dubious synchronization (Mike Drob, noble)
+
+* SOLR-9542: Kerberos delegation tokens requires Jackson library (Ishan Chattopadhyaya via noble)
+
+* SOLR-9330: Fix AlreadyClosedException on admin/mbeans?stats=true (Mikhail Khludnev)
+
+* SOLR-9411: Better validation for Schema API add-field and add-dynamic-field (janhoy, Steve Rowe)
+
+* SOLR-9504: A replica with an empty index becomes the leader even when other more qualified replicas
+ are in line. (shalin)
+
+* SOLR-9554: Fix NullPointerException when cores are loaded in parallel and switch schema.xml to managed-scheme.
+ (Alan Woodward, Mikhail Khludnev)
+
+* SOLR-9556: OverseerAutoFailoverReplicaThread was not exiting on interrupt
+ (Alan Woodward)
+
+* SOLR-9563: Collection creation could fail if an ADDREPLICA subrequest arrived
+ at a node before its local state had updated with the new collection data
+ (Alan Woodward)
+
+* SOLR-9278: Index replication interactions with IndexWriter can cause deadlock. (Xunlong via Mark Miller)
+
+* SOLR-9604: Pooled SSL connections were not being re-used (Alan Woodward,
+ Mikhail Khludnev, hossman)
+
+* SOLR-9325: solr.log is now written to $SOLR_LOGS_DIR without changing log4j.properties (janhoy)
+
+* SOLR-9518: Kerberos Delegation Tokens don't work without a chrooted ZK (Ishan Chattopadhyaya,via noble)
+
+* SOLR-9687: Fixed Interval Facet count issue in cases of open/close intervals on the same values
+ (Andy Chillrud, Tomás Fernández Löbbe)
+
+* SOLR-9441: Solr collection backup on HDFS can only be manipulated by the Solr process owner.
+ (Hrishikesh Gadre via Mark Miller)
+
+* SOLR-9536: OldBackupDirectory timestamp field needs to be initialized to avoid NPE.
+ (Hrishikesh Gadre, hossman via Mark Miller)
+
+* SOLR-2039: Multivalued fields with dynamic names does not work properly with DIH.
+ (K A, ruslan.shv, Cao Manh Dat via shalin)
+
+* SOLR-4164: group.limit=-1 was not supported for grouping in distributed mode.
+ (Cao Manh Dat, Lance Norskog, Webster Homer, hossman, yonik)
+
+* SOLR-9692: blockUnknown property makes inter-node communication impossible (noble)
+
+* SOLR-2094: XPathEntityProcessor should reinitialize the XPathRecordReader instance if
+ the 'forEach' or 'xpath' attributes are templates & it is not a root entity (Cao Manh Dat, noble)
+
+* SOLR-9697: zk upconfig broken on windows (Xavier Jmlucjav via janhoy)
+
+Optimizations
+----------------------
+
+* SOLR-9374: Speed up Jmx MBean retrieval for FieldCache. (Tim Owen via shalin)
+
+* SOLR-9449: Example schemas do not index _version_ field anymore because the field
+ has DocValues enabled already. (shalin)
+
+* SOLR-9447: Do not clone SolrInputDocument if update processor chain does not contain custom processors.
+ (shalin)
+
+* SOLR-9452: JsonRecordReader should not deep copy document before handler.handle(). (noble, shalin)
+
+* SOLR-9142: JSON Facet API: new method=dvhash can be chosen for fields with high cardinality. (David Smiley)
+
+* SOLR-9446: Leader failure after creating a freshly replicated index can send nodes into recovery even if
+ index was not changed (Pushkar Raste, noble)
+
+* SOLR-9592: retrieving docValues as stored values was sped up by using the proper leaf
+ reader rather than ask for a global view. In extreme cases, this leads to a 100x speedup.
+ (Takahiro Ishikawa, yonik)
+
+* SOLR-9566: Don't put replicas into recovery when first creating a Collection
+ (Alan Woodward)
+
+* SOLR-9546: Eliminate unnecessary boxing/unboxing going on in SolrParams (Pushkar Raste, noble)
+
+* SOLR-9506: cache IndexFingerprint for each segment (Pushkar Raste, yonik, noble)
+
+* SOLR-7506: Roll over GC logs by default via bin/solr scripts (shalin, janhoy)
+
+Other Changes
+----------------------
+
+* SOLR-9412: Add failOnMissingParams option to MacroExpander, add TestMacroExpander class.
+ (Jon Dorando, Christine Poerschke)
+
+* SOLR-9406: SolrSuggester should selectively register close hook (Gethin James, Joel Bernstein)
+
+* SOLR-8961: Add a test module for solr-test-framework (Alan Woodward)
+
+* SOLR-9474: MiniSolrCloudCluster will not reuse ports by default when
+ restarting its JettySolrRunners (Alan Woodward)
+
+* SOLR-9498: Remove HDFS properties from DIH solrconfig.xml, as started in SOLR-6943 (Alexandre Rafalovitch)
+
+* SOLR-9365: Reduce noise in solr logs during graceful shutdown. (Cao Manh Dat via shalin)
+
+* SOLR-9451: Make clusterstatus command logging less verbose. (Varun Thacker)
+
+* SOLR-9502: ResponseWriters should natively support MapSerializable (noble)
+
+* SOLR-9538: Relocate (BinaryResponse|JSON|Smile)Writer tests to org.apache.solr.response
+ which is the package of the classes they test. (Jonny Marks via Christine Poerschke)
+
+* SOLR-9508: Install script install_solr_service.sh now checks existence of tools.
+ New option -n to avoid starting service after installation (janhoy)
+
+* SOLR-7826: Refuse "bin/solr create" if run as root, unless -force is specified (janhoy, Binoy Dalal)
+
+* SOLR-6871: Updated the quickstart tutorial to cover the 6.2.0 release, and added ant target
+ "generate-website-quickstart" to convert the bundled version of the tutorial into one suitable
+ for the website.
+
+* SOLR-5563: Move lots of SolrCloud logging from 'info' to 'debug' (janhoy, Alan
+ Woodward)
+
+* SOLR-9544: Allow ObjectReleaseTracker more time to check for asynchronously
+ closing resources (Alan Woodward)
+
+* SOLR-6677: Reduced logging during startup and shutdown, moved more logs to DEBUG level
+ (janhoy, Shawn Heisey, Alan Woodward)
+
+* SOLR-6090: Remove unreachable printLayout usage in cloud tests. (Cao Manh Dat via shalin)
+
+* SOLR-9551: Add JSONWriter constructor variant, JSONWriterTest.testConstantsUnchanged test.
+ (Jonny Marks, Christine Poerschke)
+
+* SOLR-9500: Add a LogLevel annotation to set log levels on specific tests (Alan
+ Woodward)
+
+* SOLR-9548: The beginning of solr.log now starts with a more informative welcome message (janhoy)
+
+* SOLR-9547: Do not allow bin/solr start as root user, unless -force param specified (janhoy)
+
+* SOLR-9567: Make ReRankQParserPlugin's private ReRankCollector a public class of its own. (Christine Poerschke)
+
+* SOLR-7436: Solr stops printing stacktraces in log and output (janhoy, hossman, Markus Jelsma)
+
+* SOLR-9576: Make FieldAnalysisRequestHandler, DocumentAnalysisRequestHandler & DumpRequestHandler
+ implicit (noble)
+
+* SOLR-9574: Factor out AbstractReRankQuery from ReRankQParserPlugin's private ReRankQuery. (Christine Poerschke)
+
+* SOLR-5041: Add a test to make sure that a leader always recovers from log on startup. (Cao Manh Dat, shalin)
+
+* SOLR-9588: Remove Guava dependency from SolrJ (Ishan Chattopadhyaya, noble)
+
+* SOLR-8140: Remove mentions of unimplemented admin-extra from the new Admin UI (Alexandre Rafalovitch)
+
+* SOLR-9589: Remove jackson dependency from SolrJ (Ishan Chattopadhyaya, noble)
+
+* SOLR-8385: Narrow StreamFactory.withFunctionName clazz parameter to prevent misconfiguration (Jason Gerlowski, Kevin Risden)
+
+* SOLR-8969: SQLHandler causes NPE in non-cloud mode (Markus Jelsma, Kevin Risden)
+
+* SOLR-9610: New AssertTool in SolrCLI for easier cross platform assertions from command line (janhoy)
+
+* SOLR-9680: Better error messages in SolrCLI when authentication required (janhoy)
+
+* SOLR-9639: Test only fix. Prevent CDCR tests from removing collection during recovery that used to blow up jvm (Mikhail Khludnev)
+
+* SOLR-9625: Add HelloWorldSolrCloudTestCase class (Christine Poerschke, Alan Woodward, Alexandre Rafalovitch)
+
+* SOLR-9642: Refactor the core level snapshot cleanup mechanism to rely on Lucene (Hrishikesh Gadre via yonik)
+
+* SOLR-9627: Add QParser.getSortSpec, deprecate misleadingly named QParser.getSort (Judith Silverman, Christine Poerschke)
+
+* SOLR-9632: Add MiniSolrCloudCluster#deleteAllCollections() method (Alan Woodward)
+
+* SOLR-9634: Deprecate collection methods on MiniSolrCloudCluster (Alan Woodward)
+
+* SOLR-7850: Moved defaults within bin/solr.in.sh (and bin/solr.in.cmd on Windows) to bin/solr (and bin/solr.cmd)
+ such that the default state of these files is to set nothing. This makes Solr work better with Docker. (David Smiley)
+
+* SOLR-9570: Various log tidying now happens at Solr startup:
+ Old solr_log_<date> and solr_gc_log_<date> files are removed, avoiding disks to fill up,
+ solr.log.X files are rotated, preserving solr.log from last run in solr.log.1, solr.log.1 => solr.log.2 etc
+ solr-*-console.log files are moved into $SOLR_LOGS_DIR/archived/ instead of being overwritten
+ Last JVM garbage collection log solr_gc.log is moved into $SOLR_LOGS_DIR/archived/
+ (janhoy)
+
+* SOLR-4531: Add tests to ensure that recovery does not fail on corrupted tlogs.
+ (Simon Scofield, Cao Manh Dat via shalin)
+
+* SOLR-5245: Add a test to ensure that election contexts are keyed off both collection name and coreNodeName
+ so that killing a shard in one collection does not result in leader election in a different collection.
+ See SOLR-5243 for the related bug. (Cao Manh Dat via shalin)
+
+* SOLR-9533: Reload core config when a core is reloaded (Gethin James, Joel Bernstein)
+
+* SOLR-9371: Fix bin/solr calculations for start/stop wait time and RMI_PORT.
+ (Shawn Heisey via Erick Erickson)
+
+================== 6.2.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-9494: Use of {!collapse} sometimes doesn't correctly return true for Collector.needsScores(), especially when the
+ query was cached. This can cause an exception when 'q' is a SpanQuery or potentially others. (David Smiley)
+
+* SOLR-6744: fl renaming / alias of uniqueKey field generates null pointer exception in SolrCloud configuration
+ (Mike Drob via Tomás Fernández Löbbe)
+
+* SOLR-9445: Admin requests are retried by CloudSolrClient and LBHttpSolrClient on failure. (shalin)
+
+* SOLR-9439: Shard split clean up logic for older failed splits is faulty. The delete shard API
+ has also been made more resilient against failures resulting from non-existent cores. (shalin)
+
+* SOLR-9430: Fix locale lookup in DIH <propertyWriter/> to use BCP47 language tags
+ to be consistent with other places in Solr. Language names still work for backwards
+ compatibility. (Uwe Schindler, Boris Steiner)
+
+* SOLR-9389: HDFS Transaction logs stay open for writes which leaks Xceivers. (Tim Owen via Mark Miller)
+
+* SOLR-9188: blockUnknown property makes inter-node communication impossible (noble)
+
+* SOLR-9455: Deleting a sub-shard in recovery state can mark parent shard as inactive. (shalin)
+
+* SOLR-9461: DELETENODE, REPLACENODE should pass down the 'async' param to subcommands (shalin, noble)
+
+* SOLR-9444: Fix path usage for cloud backup/restore. (Hrishikesh Gadre, Uwe Schindler, Varun Thacker)
+
+* SOLR-9381: Snitch for freedisk uses '/' instead of 'coreRootDirectory' (Tim Owen, noble)
+
+* SOLR-9488: Shard split can fail to write commit data on shutdown/restart causing replicas to recover
+ without replicating the index. This can cause data loss. (shalin)
+
+* SOLR-9490: Fixed bugs in BoolField that caused it to erroneously return "false" for all docs depending
+ on usage (Colvin Cowie, Dan Fox, hossman)
+
+* SOLR-9438: Shard split can be marked successful and sub-shard states switched to 'active' even when
+ one or more sub-shards replicas do not recover due to the leader crashing or restarting between the time
+ the replicas are created and before they can recover. This can cause data loss. (shalin)
+
+* SOLR-9408: Fix TreeMergeOutputFormat to add timestamp metadata to a commit. SolrCloud replication relies on this.
+ (Jessica Cheng Mallet via Varun Thacker)
+
+Other Changes
+----------------------
+
+* SOLR-7362: Fix TestReqParamsAPI test failures (noble, Varun Thacker)
+
+================== 6.2.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.12.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.8.v20160314
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-9187: Support dates and booleans in /export handler, support boolean DocValues fields (Erick Erickson)
+
+* SOLR-8048: bin/solr script should support basic auth credentials provided in solr.in.sh (noble)
+
+* SOLR-7374: Core level Backup/Restore now supports specifying the directory implementation to use
+ via the "repository" parameter. (Hrishikesh Gadre, Varun Thacker, Mark Miller)
+
+* SOLR-9216: Support collection.configName in MODIFYCOLLECTION request (Keith Laban, noble)
+
+* SOLR-9251: Support for a new tag 'role' in replica placement rules (noble)
+
+* SOLR-9194: Enhance the bin/solr script to perform file operations to/from Zookeeper (Erick Erickson, janhoy)
+
+* SOLR-9242: Collection Backup/Restore now supports specifying the directory implementation to use
+ via the "repository" parameter. (Hrishikesh Gadre, Varun Thacker)
+
+* SOLR-9193: Add scoreNodes Streaming Expression (Joel Bernstein)
+
+* SOLR-9243: Add terms.list parameter to the TermsComponent to fetch the docFreq for a list of terms
+ (Joel Bernstein)
+
+* SOLR-9090: Add directUpdatesToLeadersOnly flag to solrj CloudSolrClient.
+ (Marvin Justice, Christine Poerschke)
+
+* SOLR-9270: Allow spatialContextFactory to be simply "JTS". And if any spatial params include the old
+ Spatial4j package "com.spatial4j.core" it is rewritten to "org.locationtech.spatial4j" with a warning.
+ (David Smiley)
+
+* SOLR-9240: Support parallel ETL with the topic expression (Joel Bernstein)
+
+* SOLR-9275: XML QueryParser support (defType=xmlparser) now extensible via configuration.
+ (Christine Poerschke)
+
+* SOLR-9200: Add Delegation Token Support to Solr.
+ (Gregory Chanan)
+
+* SOLR-9038: Solr core snapshots: The current commit can be snapshotted which retains the commit and associates it with
+ a name. The core admin API can create snapshots, list them, and delete them. Snapshot names can be referenced in
+ doing a core backup, and in replication. Snapshot metadata is stored in a new snapshot_metadata/ dir.
+ (Hrishikesh Gadre via David Smiley)
+
+* SOLR-9279: New boolean comparison function queries comparing numeric arguments: gt, gte, lt, lte, eq
+ (Doug Turnbull, David Smiley)
+
+* SOLR-9252: Feature selection and logistic regression on text (Cao Manh Dat, Joel Bernstein)
+
+* SOLR-6465: CDCR: fall back to whole-index replication when tlogs are insufficient.
+ (Noble Paul, Renaud Delbru, shalin)
+
+* SOLR-9320: A REPLACENODE command to decommission an existing node with another new node
+ (noble, Nitin Sharma, Varun Thacker)
+
+* SOLR-9318: A DELETENODE command to delete all replicas in that node (noble, Nitin Sharma, Varun Thacker)
+
+Bug Fixes
+----------------------
+
+* SOLR-9191: OverseerTaskQueue.peekTopN() fatally flawed (Scott Blum, Noble Paul)
+
+* SOLR-9199: ZkController#publishAndWaitForDownStates logic is inefficient (Hrishikesh Gadre)
+
+* SOLR-9161: Change SolrPluginUtils.invokeSetters implementation to accommodate setter variants.
+ (Christine Poerschke, Steve Rowe, Uwe Schindler)
+
+* SOLR-9234: srcField parameter works only when all fields are captured in the /update/json/docs
+ endpoint (noble)
+
+* SOLR-8546: SOLR-8546: TestLazyCores is failing a lot on the Jenkins cluster. (Erick Erickson)
+
+* SOLR-9237: DefaultSolrHighlighter.doHighlightingByFastVectorHighlighter can't be overidden (janhoy)
+
+* SOLR-8626: 404 error when clicking nodes in cloud graph view in angular UI. (janhoy, Trey Grainger via shalin)
+
+* SOLR-9254: GraphTermsQueryQParserPlugin throws NPE when field being searched is not present in segment
+ (Joel Bernstein)
+
+* SOLR-8657: Fix SolrRequestInfo error logs if QuerySenderListener is being used (Pascal Chollet,
+ Tomás Fernández Löbbe)
+
+* SOLR-8777: Duplicate Solr process can cripple a running process. (Jessica Cheng Mallet, Scott Blum, shalin)
+
+* SOLR-9246: If the JDBCStream sees an unknown column type it will now throw a detailed exception. (Dennis Gove)
+
+* SOLR-9181: Fix some races in CollectionStateWatcher API (Alan Woodward, Scott
+ Blum)
+
+* SOLR-9235: Fixed NPE when using non-numeric range query in deleteByQuery (hossman)
+
+* SOLR-9088: Fixed TestManagedSchemaAPI failures which exposed race conditions in the schema API ( Varun Thacker, noble)
+
+* SOLR-9207: PeerSync recovery failes if number of updates requested is high. A new useRangeVersions config option
+ is introduced (defaults to true) to send version ranges instead of individual versions for peer sync.
+ (Pushkar Raste, shalin)
+
+* SOLR-8858: SolrIndexSearcher#doc() completely ignores field filters unless lazy field loading is enabled.
+ (Caleb Rackliffe, David Smiley, shalin)
+
+* SOLR-9236: AutoAddReplicas will append an extra /tlog to the update log location on replica failover.
+ (Eungsop Yoo, Mark Miller)
+
+* SOLR-9291: ZkSolrResourceLoader should not retry fetching resources if the server has been shutdown.
+ (shalin)
+
+* SOLR-9287: Including 'score' in the 'fl' param when doing an RTG no longer causes an NPE
+ (hossman, Ishan Chattopadhyaya)
+
+* SOLR-7280: In cloud-mode sort the cores smartly before loading & limit threads to improve cluster stability
+ (noble, Erick Erickson, shalin)
+
+* SOLR-9285: Fixed AIOOBE when using ValueSourceAugmenter in single node RTG (hossman)
+
+* SOLR-9288: Fix [docid] transformer to return -1 when used in RTG with uncommitted doc (hossman)
+
+* SOLR-9309: Fix SolrCloud RTG response structure when multi ids requested but only 1 found (hossman)
+
+* SOLR-9334: CloudSolrClient.collectionStateCache is unbounded (noble)
+
+* SOLR-9339: NPE in CloudSolrClient when the response is null (noble)
+
+* SOLR-8596: Web UI doesn't correctly generate queries which include local parameters (Alexandre Rafalovitch, janhoy)
+
+* SOLR-8645: managed-schema is now syntax highlighted in cloud->Tree view (Alexandre Rafalovitch via janhoy)
+
+* SOLR-8379: UI Cloud->Tree view now shows .txt files correctly (Alexandre Rafalovitch via janhoy)
+
+* SOLR-9003: New Admin UI's Dataimport screen now correctly displays DIH Debug output (Alexandre Rafalovitch)
+
+* SOLR-9308: Fix distributed RTG to forward request params, fixes fq and non-default fl params (hossman)
+
+* SOLR-9179: NPE in IndexSchema using IBM JDK (noble, Colvin Cowie)
+
+* SOLR-9397: Config API does not support adding caches (noble)
+
+* SOLR-9405: ConcurrentModificationException in ZkStateReader.getStateWatchers.
+ (Alan Woodward, Edward Ribeiro, shalin)
+
+* SOLR-9232: Admin UI now fully implements Swap Cores interface (Alexandre Rafalovitch)
+
+* SOLR-8715: Admin UI's Schema screen now works for fields with stored=false and some content indexed (Alexandre Rafalovitch)
+
+* SOLR-8911: In Admin UI, enable scrolling for overflowing Versions and JVM property values (Alexandre Rafalovitch)
+
+* SOLR-9002: Admin UI now correctly displays json and text files in the collection/Files screen (Upayavira, Alexandre Rafalovitch)
+
+* SOLR-8993: Admin UI now correctly supports multiple DIH handler end-points (Upayavira, Alexandre Rafalovitch)
+
+* SOLR-9032: Admin UI now correctly implements Create Alias command (Upayavira, Alexandre Rafalovitch)
+
+* SOLR-9391: LBHttpSolrClient.request now correctly returns Rsp.server when
+ previously skipped servers were successfully tried. (Christine Poerschke)
+
+
+Optimizations
+----------------------
+
+* SOLR-9219: Make hdfs blockcache read buffer sizes configurable and improve cache concurrency. (Mark Miller)
+
+* SOLR-9264: Optimize ZkController.publishAndWaitForDownStates to not read all collection states and
+ watch relevant collections instead. (Hrishikesh Gadre, shalin)
+
+* SOLR-9335: Solr cache/search/update stats counters now use LongAdder which are supposed to have higher throughput
+ under high contention. (Varun Thacker)
+
+* SOLR-9350: JSON Facets: method="stream" will no longer always uses & populates the filter cache, likely
+ flushing it. 'cacheDf' can be configured to set a doc frequency threshold, now defaulting to 1/16th doc count.
+ Using -1 Disables use of the cache. (David Smiley, yonik)
+
+Other Changes
+----------------------
+
+* SOLR-9195: Remove unnecessary allocation and null check in UpdateRequestProcessorChain's
+ getReqProcessors method. (Christine Poerschke)
+
+* SOLR-8981: Upgraded Extraction module to Apache Tika 1.13.
+ (Tim Allison, Lewis John McGibbney via Uwe Schindler)
+
+* SOLR-9076: Update to Hadoop 2.7.2
+ (Mark Miller, Gregory Chanan)
+
+* SOLR-8787: TestAuthenticationFramework should not extend TestMiniSolrCloudCluster. (Trey Cahill via shalin)
+
+* SOLR-9180: More comprehensive tests of psuedo-fields for RTG and SolrCloud requests (hossman)
+
+* SOLR-7930: Comment out trappy references to example docs in elevate.xml files (Erick Erickson)
+
+* SOLR-9277: Clean up some more remnants of supporting old and new style solr.xml in tests (Erick Erickson)
+
+* SOLR-9163: Sync up basic_configs and data_driven_schema_configs, removing almost all differences
+ except what is required for schemaless. (yonik)
+
+* SOLR-9340: Change ZooKeeper disconnect and session expiry related logging from INFO to WARN to
+ make debugging easier (Varun Thacker)
+
+* SOLR-9358: [AngularUI] In Cloud->Tree file view area, collapse metadata by default (janhoy)
+
+* SOLR-9256: asserting hasNext() contract in JdbcDataSource in DataImportHandler (Kristine Jetzke via Mikhai Khludnev)
+
+* SOLR-9209: extracting JdbcDataSource.createResultSetIterator() for extension (Kristine Jetzke via Mikhai Khludnev)
+
+* SOLR-9353: Factor out ReRankQParserPlugin.ReRankQueryRescorer private class. (Christine Poerschke)
+
+* SOLR-9392: Fixed CDCR Test failures which were due to leaked resources. (shalin)
+
+* SOLR-9385: Add QParser.getParser(String,SolrQueryRequest) variant. (Christine Poerschke)
+
+* SOLR-9367: Improved TestInjection's randomization logic to use LuceneTestCase.random() (hossman)
+
+* SOLR-9331: Remove ReRankQuery's length constructor argument and member. (Christine Poerschke)
+
+* SOLR-9092: For the delete replica command we attempt to send the core admin delete request only
+ if that node is actually up. (Jessica Cheng Mallet, Varun Thacker)
+
+* SOLR-9410: Make ReRankQParserPlugin's private ReRankWeight a public class of its own. (Christine Poerschke)
+
+* SOLR-9404: Refactor move/renames in JSON FacetProcessor and FacetFieldProcessor. (David Smiley)
+
+* SOLR-9421: Refactored out OverseerCollectionMessageHandler to smaller classes (noble)
+
+* SOLR-8643: BlockJoinFacetComponent is substituted by BlockJoinFacetDocSetComponent. It doesn't need to change solrconfig.xml (Mikhail Khludnev)
+
+* SOLR-8644: Test asserts that block join facets work with parent level fq exclusions. (Dr. Oleg Savrasov via Mikhail Khludnev)
+
+================== 6.1.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.12.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.8.v20160314
+
+Upgrading from Solr any prior release
+----------------------
+
+* If you use historical dates, specifically on or before the year 1582, you should re-index.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-8782: Add asynchronous sugar methods to the SolrJ Collections API. You
+ can now call .processAsync() to run a method asynchronously, or
+ .processAndWait() to wait for a call to finish without holding HTTP
+ collections open. (Alan Woodward)
+
+* SOLR-8765: Enforce required parameters at query construction time in the SolrJ
+ Collections API, add static factory methods, and deprecate old setter methods.
+ (Alan Woodward, Jason Gerlowski)
+
+* SOLR-8842: authorization APIs do not use name as an identifier for a permission
+ for update, delete commands and 'before' attribute (noble)
+
+* SOLR-8814: Support GeoJSON response writer and general spatial formatting. Adding
+ &wt=geojson&geojson.field=<your geometry field>
+ Will return a FeatureCollection for each SolrDocumentList and a Feature with the
+ requested geometry for each SolrDocument. The requested geometry field needs
+ to either extend AbstractSpatialFieldType or store a GeoJSON string. This also adds
+ a [geo] DocumentTransformer that can return the Shape in a variety of formats:
+ &fl=[geo f=<your geometry field> w=(GeoJSON|WKT|POLY)]
+ The default format is GeoJSON. For information on the supported formats, see:
+ https://github.com/locationtech/spatial4j/blob/master/FORMATS.md
+ To return the FeatureCollection as the root element, add '&omitHeader=true" (ryan)
+
+* SOLR-8859: Spatial fields like RPT can now be configured to use Spatial4j registered shape formats
+ e.g. via format="GeoJSON". (ryan, David Smiley)
+
+* SOLR-445: new TolerantUpdateProcessorFactory to support skipping update commands that cause
+ failures when sending multiple updates in a single request.
+ (Erick Erickson, Tomás Fernández Löbbe, Anshum Gupta, hossman)
+
+* SOLR-8890: New static method in DistributedUpdateProcessorFactory to allow UpdateProcessorFactories
+ to indicate request params that should be forwarded when DUP distributes updates. (hossman)
+
+* SOLR-8888: Add shortestPath Streaming Expression. This expression performs a breadth first
+ graph traversal to find the shortest path(s) in an unweighted, directed graph stored in a
+ SolrCloud collection. (Joel Bernstein)
+
+* SOLR-8938: Add optional --excluderegex argument to ZkCLI. (Christine Poerschke)
+
+* SOLR-8976: Add SolrJ support for REBALANCELEADERS Collections API (Anshum Gupta)
+
+* SOLR-8962: Add sort Streaming Expression. The expression takes a single input stream and a
+ comparator and outputs tuples in stable order of the comparator. (Dennis Gove)
+
+* SOLR-8349: Allow sharing of large in memory data structures across cores (Gus Heck, noble)
+
+* SOLR-9009: Adds ability to get an Explanation of a Streaming Expression (Dennis Gove)
+
+* SOLR-8918: Adds Streaming to the admin page under the collections section. Includes
+ ability to see graphically the expression explanation (Dennis Gove)
+
+* SOLR-8913: When using a shared filesystem we should store data dir and tlog dir locations in
+ the cluster state. (Mark Miller)
+
+* SOLR-8809: Implement Connection.prepareStatement (Kevin Risden)
+
+* SOLR-9020: Implement StatementImpl/ResultSetImpl get/set fetch* methods and proper errors for traversal methods (Kevin Risden)
+
+* SOLR-9041: 'core-admin-read' and 'core-admin-edit' are well known permissions (noble)
+
+* SOLR-8986: Add Random Streaming Expression (Joel Bernstein)
+
+* SOLR-8925: Add gatherNodes Streaming Expression to support breadth first traversals (Joel Bernstein)
+
+* SOLR-9027: Add GraphTermsQuery to limit traversal on high frequency nodes (Joel Bernstein, David Smiley)
+
+* SOLR-5750: Add /admin/collections?action=BACKUP and RESTORE assuming access to a shared file system.
+ (Varun Thacker, David Smiley)
+
+* SOLR-9049: RuleBasedAuthorizationPlugin supports regex in param values eg: "command" : "REGEX:(i?)create" (noble)
+
+* SOLR-8972: Add GraphHandler and GraphMLResponseWriter to support graph visualizations (Joel Bernstein)
+
+* SOLR-9026: Extend facet telemetry support to legacy (non-json) facets under "debug/facet-debug" in
+ the response. (Michael Sun, yonik)
+
+* SOLR-7117: Provide an option to limit the maximum number of cores that can be created on a node by the
+ Auto Add Replica feature. For this you can set a "maxCoresPerNode" property via the Cluster Property API
+ (Varun Thacker, Mark Miller)
+
+* SOLR-8208: [subquery] document transformer executes separate requests per result document. (Cao Manh Dat via Mikhail Khludnev)
+
+* SOLR-8323, SOLR-9113: Add CollectionStateWatcher API (Alan Woodward, Scott Blum)
+
+* SOLR-8988: Adds query option facet.distrib.mco which when set to true allows the use of facet.mincount=1 in cloud mode.
+ (Keith Laban, Dennis Gove)
+
+* SOLR-8583: Apply highlighting to hl.alternateField by default for Default and FastVectorHighlighter.
+ Turn off with hl.highlightAlternate=false (janhoy, David Smiley)
+
+* SOLR-7123: '/update/json/docs' path supports nested documents (noble)
+
+* SOLR-8610: Resolve variables in encryptKeyFile of DIH's JdbcDataSource (Kristine Jetzke via Mikhail Khludnev)
+
+* SOLR-7739: Add a new ClassificationUpdateProcessorFactory. (Alessandro Benedetti via Tommaso Teofili)
+
+Bug Fixes
+----------------------
+
+* SOLR-8855: The HDFS BlockDirectory should not clean up it's cache on shutdown. (Mark Miller)
+
+* SOLR-8948: OverseerTaskQueue.containsTaskWithRequestId encounters json parse error if a
+ SolrResponse node is in the overseer queue. (Jessica Cheng Mallet via shalin)
+
+* SOLR-7729: ConcurrentUpdateSolrClient ignores the collection parameter in some methods.
+ (Nicolas Gavalda, Jorge Luis Betancourt Gonzalez via Mark Miller)
+
+* SOLR-8662: SchemaManager waits correctly for replicas to be notified of a new change.
+ (sarowe, Noble Paul, Varun Thacker)
+
+* SOLR-8983: Cleanup clusterstate and replicas for a failed create collection request
+ (Varun Thacker, Anshum Gupta)
+
+* SOLR-9029: fix rare ZkStateReader visibility race during collection state format update (Scott Blum, hossman)
+
+* SOLR-9046: Fix solr.cmd that wrongly assumes Jetty will always listen on 0.0.0.0.
+ (Bram Van Dam, Uwe Schindler)
+
+* SOLR-9064: Adds an explanation of the incoming stream to an UpdateStream's explanation (Dennis Gove)
+
+* SOLR-9128: Fix error handling issues in Streaming classes (Joel Bernstein)
+
+* SOLR-9151: Fix SolrCLI so that bin/solr -e cloud example can be run from any CWD (janhoy)
+
+* SOLR-9141: Fix ClassCastException when using the /sql handler count() function with
+ single-shard collections (Minoru Osuka via James Dyer)
+
+* SOLR-9165: Spellcheck does not return collations if "maxCollationTries" is used with "cursorMark".
+ (James Dyer)
+
+* SOLR-8940: Fix group.sort option (hossman)
+
+* SOLR-8612: closing JDBC Statement on failures in DataImportHandler (DIH) (Kristine Jetzke via Mikhail Khludnev)
+
+* SOLR-8676: keep LOG4J_CONFIG in solr.cmd (Kristine Jetzke via Mikhail Khludnev)
+
+* SOLR-9198: config APIs unable to add multiple values with same name (noble)
+
+* SOLR-8812: edismax: turn off mm processing if no explicit mm spec is provided
+ and there are explicit operators (except for AND) - addresses problems caused by SOLR-2649.
+ (Greg Pendlebury, Jan Høydahl, Erick Erickson, Steve Rowe)
+
+* SOLR-9176: facet method ENUM was sometimes unnecessarily being rewritten to
+ FCS, causing slowdowns (Alessandro Benedetti, Jesse McLaughlin, Alan Woodward)
+
+Optimizations
+----------------------
+* SOLR-8722: Don't force a full ZkStateReader refresh on every Overseer operation.
+ (Scott Blum via shalin)
+
+* SOLR-8745: Deprecate costly ZkStateReader.updateClusterState(), replace with a narrow
+ forceUpdateCollection(collection) (Scott Blum via shalin)
+
+* SOLR-8856: Do not cache merge or 'read once' contexts in the hdfs block cache. (Mark Miller, Mike Drob)
+
+* SOLR-8922: Optimize filter creation (DocSetCollector) to minimize the amount of garbage
+ produced. This resulted in up to 3x throughput when small filter creation was the bottleneck,
+ as well as orders of magnitude less garbage. (Jeff Wartes, yonik)
+
+* SOLR-8937: bin/post (SimplePostTool) now streams the standard input instead of buffering fully.
+ (David Smiley)
+
+* SOLR-8973: Zookeeper frenzy when a core is first created. (Janmejay Singh, Scott Blum, shalin)
+
+* SOLR-9014: Deprecate and reduce usage of ClusterState methods which may make calls to ZK via
+ the lazy collection reference. (Scott Blum, shalin)
+
+* SOLR-9106: Cluster properties are now cached on ZkStateReader. (Alan Woodward)
+
+* SOLR-9147: Upgrade commons-io to 2.5, avoid expensive array resizing in EmbeddedSolrServer (Mikhail Khludnev)
+
+* SOLR-8744: Overseer operations performed with fine grained mutual exclusion (noble, Scott Blum)
+
+* SOLR-9204: Improve performance of getting directory size with hdfs. (Mark Miller)
+
+Other Changes
+----------------------
+* SOLR-8860: Remove back-compat handling of router format made in SOLR-4221 in 4.5.0. (shalin)
+
+* SOLR-8866: UpdateLog will now throw an exception if it doesn't know how to serialize a value.
+ (David Smiley)
+
+* SOLR-8842: security rules made more foolproof by asking the requesthandler about the well known
+ permission name.
 The APIs are also modified to ue 'index' as the unique identifier instead of name.
+ Name is an optional attribute
 now and only to be used when specifying well-known permissions (noble)
+
+* SOLR-5616: Simplifies grouping code to use ResponseBuilder.needDocList() to determine if it needs to
+ generate a doc list for grouped results. (Steven Bower, Keith Laban, Dennis Gove)
+
+* SOLR-8869: Optionally disable printing field cache entries in SolrFieldCacheMBean (Gregory Chanan)
+
+* SOLR-8892: Allow SolrInfoMBeans to return different statistics for /jmx vs web ui calls.
+ (Gregory Chanan, Mark Miller)
+
+* SOLR-8097: Implement builder pattern design for constructing SolrJ clients and also deprecate direct construction
+ of client objects. (Jason Gerlowski, Shawn Heisey, Anshum Gupta)
+
+* SOLR-9015: Adds SelectStream as a default function in the StreamHandler (Dennis Gove)
+
+* SOLR-8929: Add an idea module for solr/server to enable launching start.jar (Scott Blum, Steve Rowe)
+
+* SOLR-8933: Solr should not close container streams. (Mike Drob, Uwe Schindler, Mark Miller)
+
+* SOLR-9037: Replace multiple "/replication" strings with one static constant. (Christine Poerschke)
+
+* SOLR-9047: zkcli should allow alternative locations for log4j configuration (Gregory Chanan)
+
+* SOLR-9066: Make CountMetric return long instead of double (Kevin Risden)
+
+* SOLR-9065, SOLR-9072, SOLR-9132: Migrate some distributed tests to SolrCloudTestCase. (Alan Woodward)
+
+* SOLR-8184: Negative tests for JDBC Connection String (Susheel Kumar, Jason Gerlowski, Kevin Risden)
+
+* SOLR-8458: Add Streaming Expressions tests for parameter substitution (Joel Bernstein, Cao Manh Dat, Dennis Gove, Kevin Risden)
+
+* SOLR-8467: CloudSolrStream and FacetStream should take a SolrParams object rather than a
+ Map<String, String> to allow more complex Solr queries to be specified. (Erick Erickson)
+
+* SOLR-9083: Remove all <types> and <fields> from schemas. NOTE: as in the JIRA I left a few in to insure the (no cost)
+ back compat. (Erick Erickson)
+
+* SOLR-9105: Fix a bunch of typos across 103 files (Bartosz Krasiński via janhoy)
+
+* SOLR-9159: New cloud based concurrent atomic update test (hossman)
+
+* SOLR-9119: several static methods in ValueSourceParser have been made private (hossman)
+
+* SOLR-9110: Move JoinFromCollection- SubQueryTransformer- BlockJoinFacet- Distrib Tests to SolrCloudTestCase (Mikhail Khludnev)
+
+* SOLR-9136: Separate out the error statistics into server-side error vs client-side error
+ (Jessica Cheng Mallet via Erick Erickson)
+
+* SOLR-9107: new @RandomizeSSL annotation for more fine grained control of SSL testing (hossman, sarowe)
+
+* SOLR-9081: Make SolrTestCaseJ4.beforeClass() / .afterClass() public so it
+ works with Mockito (Georg Sorst, Alan Woodward)
+
+* SOLR-8445: fix line separator in log4j.properties files (Ahmet Arslan via Mikhail Khludnev)
+
+* SOLR-2199: DataImportHandler (DIH) JdbcDataSource supports multiple resultsets per query (Kristine Jetzke, Mark Waddle via Mikhail Khludnev)
+
+================== 6.0.1 ==================
+
+Upgrade Notes
+----------------------
+
+* If you use historical dates, specifically on or before the year 1582, you should re-index.
+
+Bug Fixes
+----------------------
+
+* SOLR-8914: ZkStateReader's refreshLiveNodes(Watcher) is not thread safe. (Scott Blum, hoss,
+ sarowe, Erick Erickson, Mark Miller, shalin)
+
+* SOLR-9016: Fix SolrIdentifierValidator to not allow empty identifiers. (Shai Erera)
+
+* SOLR-8992: Restore Schema API GET method functionality removed in 6.0 (noble, Steve Rowe)
+
+* SOLR-9080, SOLR-9085: (6.0 bug) For years <= 1582, date math (round,add,sub) introduced error. Range faceting
+ on such dates was also affected. With this fixed, this is the first release range faceting works on BC years.
+ (David Smiley)
+
+* SOLR-8857: HdfsUpdateLog does not use configured or new default number of version buckets and is
+ hard coded to 256. (Mark Miller, yonik, Gregory Chanan)
+
+* SOLR-8902: Make sure ReturnFields only returns the requested fields from (fl=) evn when
+ DocumentTransformers ask for getExtraRequestFields() (ryan)
+
+* SOLR-8875: SolrCloud Overseer clusterState could unexpectedly be null resulting in NPE.
+ (Scott Blum via David Smiley)
+
+* SOLR-8946: bin/post failed to detect stdin usage on Ubuntu; maybe other unixes. (David Smiley)
+
+* SOLR-9004: Fix "name" field type definition in films example. (Alexandre Rafalovitch via Varun Thacker)
+
+* SOLR-8990: Fix top term links from schema browser page to use {!term} parser (hossman)
+
+* SOLR-8971: Preserve root cause when wrapping exceptions (hossman)
+
+* SOLR-9034: Atomic updates failed to work when there were copyField targets that had docValues
+ enabled. (Karthik Ramachandran, Ishan Chattopadhyaya, yonik)
+
+* SOLR-9028: Fixed some test related bugs preventing SSL + ClientAuth from ever being tested (hossman)
+
+* SOLR-9059: NPE in SolrClientCache following collection reload (Joel Bernstein, Ryan Yacyshyn)
+
+* SOLR-8792: ZooKeeper ACL support fixed. (Esther Quansah, Ishan Chattopadhyaya, Steve Rowe)
+
+* SOLR-9030: The 'downnode' overseer command can trip asserts in ZkStateWriter.
+ (Scott Blum, Mark Miller, shalin)
+
+* SOLR-9036: Solr slave is doing full replication (entire index) of index after master restart.
+ (Lior Sapir, Mark Miller, shalin)
+
+* SOLR-9058: Makes HashJoinStream and OuterHashJoinStream support different field names in the
+ incoming streams, eg. fieldA=fieldB. (Dennis Gove, Stephan Osthold)
+
+* SOLR-9093: Fix NullPointerException in TopGroupsShardResponseProcessor. (Christine Poerschke)
+
+* SOLR-9118: HashQParserPlugin should trim partition keys (Joel Bernstein)
+
+* SOLR-9117: The first SolrCore is leaked after reload. (Jessica Cheng Mallet via shalin)
+
+* SOLR-9116: Race condition causing occasional SolrIndexSearcher leak when SolrCore is reloaded.
+ (Jessica Cheng Mallet via shalin)
+
+* SOLR-8801: /bin/solr create script always returns exit code 0 when a collection/core already exists.
+ (Khalid Alharbi, Marius Grama via Steve Rowe)
+
+* SOLR-9134: Fix RestManager.addManagedResource return value. (Christine Poerschke)
+
+Other Changes
+----------------------
+* SOLR-7516: Improve javadocs for JavaBinCodec, ObjectResolver and enforce the single-usage policy.
+ (Jason Gerlowski, Benoit Vanalderweireldt, shalin)
+
+* SOLR-8967: In SolrCloud mode, under the 'Core Selector' dropdown in the UI the Replication tab won't be displayed
+ anymore. The Replication tab is only beneficial to users running Solr in master-slave mode. (Varun Thacker)
+
+* SOLR-8985: Added back support for 'includeDynamic' flag to /schema/fields endpoint (noble)
+
+* SOLR-9131: Fix "start solr" text in cluster.vm Velocity template (janhoy)
+
+* SOLR-9053: Upgrade commons-fileupload to 1.3.1, fixing a potential vulnerability (Jeff Field, Mike Drob via janhoy)
+
+* SOLR-9115: Get rid of javax.xml.bind.DatatypeConverter in SimplePostTool
+ for Java 9 compatibility. (Uwe Schindler)
+
+* SOLR-5776,SOLR-9068,SOLR-8970:
+ - Refactor SSLConfig so that SSLTestConfig can provide SSLContexts using a NullSecureRandom
+ to prevent SSL tests from blocking on entropy starved machines.
+ - SSLTestConfig: Alternate (psuedo random) NullSecureRandom for Constants.SUN_OS.
+ - SSLTestConfig: Replace NullSecureRandom w/ NotSecurePsuedoRandom.
+ - Change SSLTestConfig to use a keystore file that is included as a resource in the
+ test-framework jar so users subclassing SolrTestCaseJ4 don't need to preserve magic paths.
+ (hossman)
+
+================== 6.0.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.12.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.8.v20160314
+
+System Requirements
+----------------------
+* LUCENE-5950: Move to Java 8 as minimum Java version.
+ (Ryan Ernst, Uwe Schindler)
+
+Upgrading from Solr 5.x
+----------------------
+
+* The deprecated SolrServer and subclasses have been removed, use SolrClient
+ instead.
+
+* The deprecated <nrtMode> configuration in solrconfig.xml has been removed.
+ Please remove it from solrconfig.xml.
+
+* SolrClient.shutdown() has been removed, use SolrClient.close() instead.
+
+* The deprecated zkCredientialsProvider element in solrcloud section of solr.xml
+ is now removed. Use the correct spelling (zkCredentialsProvider) instead.
+
+* SOLR-7957: internal/expert - ResultContext was significantly changed and expanded
+ to allow for multiple full query results (DocLists) per Solr request.
+ TransformContext was rendered redundant and was removed. (yonik)
+
+* Several changes have been made regarding the "Similarity" used in Solr, in order to provide
+ better default behavior for new users. There are 3 key impacts of these changes on existing
+ users who upgrade:
+ * DefaultSimilarityFactory has been removed. If you currently have DefaultSimilarityFactory explicitly
+ referenced in your schema.xml, edit your config to use the functionally identical
+ ClassicSimilarityFactory. See SOLR-8239 for more details.
+ * The implicit default Similarity used when no <similarity/> is configured in schema.xml has
+ been changed to SchemaSimilarityFactory. Users who wish to preserve back-compatible behavior should
+ either explicitly configure ClassicSimilarityFactory, or ensure that the luceneMatchVersion
+ for the collection is less then 6.0. See SOLR-8270 + SOLR-8271 for details.
+ * SchemaSimilarityFactory has been modified to use BM25Similarity as the default for fieldTypes that
+ do not explicitly declare a Similarity. The legacy behavior of using ClassicSimilarity as the
+ default will occur if the luceneMatchVersion for the collection is less then 6.0, or the
+ 'defaultSimFromFieldType' configuration option may be used to specify any default of your choosing.
+ See SOLR-8261 + SOLR-8329 for more details.
+
+* If your solrconfig.xml file doesn't explicitly mention the schemaFactory to use then Solr will choose
+ the ManagedIndexSchemaFactory by default. Previously it would have chosen ClassicIndexSchemaFactory.
+ This means that the Schema APIs ( /<collection>/schema ) are enabled and the schema is mutable.
+ When Solr starts your schema.xml file will be renamed to managed-schema. If you want to retain the old behaviour
+ then please ensure that the solrconfig.xml explicitly uses the ClassicIndexSchemaFactory :
+ <schemaFactory class="ClassicIndexSchemaFactory"/> or your luceneMatchVersion in the solrconfig.xml is less than 6.0
+
+* SolrIndexSearcher.QueryCommand and QueryResult were moved to their own classes. If you reference them
+ in your code, you should import them under o.a.s.search (or use your IDE's "Organize Imports").
+
+* SOLR-8698: 'useParams' attribute specified in request handler cannot be overridden from request params
+
+* When requesting stats in date fields, "sum" is now a double value instead of a date. See SOLR-8671
+
+* SOLR-8736: The deprecated GET methods for schema are now accessible through the bulk API. The output
+ has less details and is not backward compatible.
+
+* In the past, Solr guaranteed that retrieval of multi-valued fields would preserve the order of values.
+ Because values may now be retrieved from column-stored fields (docValues="true"), in conjunction with the
+ fact that docValues do not currently preserve order, means that users should set useDocValuesAsStored="false"
+ to prevent future optizations from using the column-stored values over the row-stored values when
+ fields have both stored="true" and docValues="true".
+
+* Formatted date-times from Solr have some differences. If the year is more than 4 digits, there is a leading '+'.
+ When there is a non-zero number of milliseconds, it is padded with zeros to 3 digits. Negative year (BC) dates are
+ now possible. Parsing: It is now an error to supply a portion of the date out of its, range, like 67 seconds.
+
+* SolrJ no longer includes DateUtil. If for some reason you need to format or parse dates, simply use Instant.format()
+ and Instant.parse().
+
+* If you are using an RPT or other spatial field referencing Spatial4j in its configuration, then replace the string
+ "com.spatial4j.core" with "org.locationtech.spatial4j". Consider updating direct to Solr 6.2 which accepts the
+ old value, albeit with a warning.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-3085: New edismax param mm.autoRelax which helps in certain cases of the stopwords/zero-hits issue (janhoy)
+
+* SOLR-7560: Parallel SQL Support (Joel Bernstein)
+
+* SOLR-7707: Add StreamExpression Support to RollupStream (Dennis Gove, Joel Bernstein)
+
+* SOLR-7903: Add the FacetStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)
+
+* SOLR-7986: JDBC Driver for SQL Interface (Uwe Schindler, Joel Bernstein)
+
+* SOLR-8038: Add the StatsStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)
+
+* SOLR-8086: Add support for SELECT DISTINCT queries to the SQL interface (Joel Bernstein)
+
+* SOLR-7543: Basic graph traversal query
+ Example: {!graph from="node_id" to="edge_id"}id:doc_1
+ (Kevin Watters, yonik)
+
+* SOLR-6273: Cross Data Center Replication. Active/passive replication for separate
+ SolrClouds hosted on separate data centers. (Renaud Delbru, Yonik Seeley via Erick Erickson)
+
+* SOLR-7938: MergeStream now supports merging more than 2 streams together (Dennis Gove)
+
+* SOLR-8198: Change ReducerStream to use StreamEqualitor instead of StreamComparator (Dennis Gove)
+
+* SOLR-8268: StatsStream now implements the Expressible interface (Dennis Gove)
+
+* SOLR-7584: Adds Inner and LeftOuter Joins to the Streaming API and Streaming Expressions (Dennis Gove, Corey Wu)
+
+* SOLR-8188: Adds Hash and OuterHash Joins to the Streaming API and Streaming Expressions (Dennis Gove)
+
+* SOLR-7669: Add SelectStream and Tuple Operations to the Streaming API and Streaming Expressions (Dennis Gove)
+
+* SOLR-8337: Add ReduceOperation and wire it into the ReducerStream (Joel Bernstein)
+
+* SOLR-7904: Add StreamExpression Support to FacetStream (Dennis Gove)
+
+* SOLR-6398: Add IterativeMergeStrategy to support running Parallel Iterative Algorithms inside of Solr
+ (Joel Bernstein)
+
+* SOLR-8436: Real-time get now supports filters. (yonik)
+
+* SOLR-7535: Add UpdateStream to Streaming API and Streaming Expression (Jason Gerlowski, Joel Bernstein)
+
+* SOLR-8479: Add JDBCStream to Streaming API and Streaming Expressions for integration with external data sources
+ (Dennis Gove)
+
+* SOLR-8002: Add column alias support to the Parallel SQL Interface (Joel Bernstein)
+
+* SOLR-7525: Add ComplementStream and IntersectStream to the Streaming API and Streaming Expressions
+ (Dennis Gove, Jason Gerlowski, Joel Bernstein)
+
+* SOLR-8415: Provide command to switch between non/secure mode in ZK
+ (Mike Drob, Gregory Chanan)
+
+* SOLR-8556: Add ConcatOperation to be used with the SelectStream (Joel Bernstein, Dennis Gove)
+
+* SOLR-8550: Add asynchronous DaemonStreams to the Streaming API (Joel Bernstein)
+
+* SOLR-8285: Ensure the /export handler works with NULL field values (Joel Bernstein)
+
+* SOLR-8502: Improve Solr JDBC Driver to support SQL Clients like DBVisualizer (Kevin Risden, Joel Bernstein)
+
+* SOLR-8588: Add TopicStream to the streaming API to support publish/subscribe messaging (Joel Bernstein, Kevin Risden)
+
+* SOLR-8666: Adds header 'zkConnected' to response of SearchHandler and PingRequestHandler to notify the client when
+ a connection to zookeeper has been lost and there is a possibility of stale data on the node the request is coming
+ from. (Keith Laban, Dennis Gove)
+
+* SOLR-8522: Make it possible to use ip fragments in replica placement rules , such as ip_1, ip_2 etc (Arcadius Ahouansou, noble)
+
+* SOLR-8698: params.json can now specify 'appends' and 'invariants' (noble)
+
+* SOLR-8831: allow _version_ field to be retrievable via docValues (yonik)
+
+
+Bug Fixes
+----------------------
+* SOLR-8386: Add field option in the new admin UI schema page loads up even when no schemaFactory has been
+ explicitly specified since the default is ManagedIndexSchemaFactory. (Erick Erickson, Upayavira, Varun Thacker)
+
+* SOLR-8191: Guard against CloudSolrStream close method NullPointerException
+ (Kevin Risden, Joel Bernstein)
+
+* SOLR-8485: SelectStream now properly handles non-lowercase and/or quoted select field names (Dennis Gove)
+
+* SOLR-8525: Fix a few places that were failing to pass dimensional
+ values settings when copying a FieldInfo (Ishan Chattopadhyaya via
+ Mike McCandless)
+
+* SOLR-8409: Ensures that quotes in solr params (eg. q param) are properly handled (Dennis Gove)
+
+* SOLR-8640: CloudSolrClient does not send credentials for update request (noble, hoss)
+
+* SOLR-8461: CloudSolrStream and ParallelStream can choose replicas that are not active
+ (Cao Manh Dat, Varun Thacker, Joel Bernstein)
+
+* SOLR-8527: Improve JdbcTest to cleanup properly on failures (Kevin Risden, Joel Bernstein)
+
+* SOLR-8578: Successful or not, requests are not always fully consumed by Solrj clients and we
+ count on HttpClient or the JVM. (Mark Miller)
+
+* SOLR-8683: Always consume the full request on the server, not just in the case of an error.
+ (Mark Miller)
+
+* SOLR-8416: The collections create API should return after all replicas are active.
+ (Michael Sun, Mark Miller, Alexey Serba)
+
+* SOLR-8701: CloudSolrClient decides that there are no healthy nodes to handle a request too early.
+ (Mark Miller)
+
+* SOLR-8694: DistributedMap/Queue can create too many Watchers and some code simplification.
+ (Scott Blum via Mark Miller)
+
+* SOLR-8695: Ensure ZK watchers are not triggering our watch logic on connection events and
+ make this handling more consistent. (Scott Blum via Mark Miller)
+
+* SOLR-8633: DistributedUpdateProcess processCommit/deleteByQuery call finish on DUP and
+ SolrCmdDistributor, which violates the lifecycle and can cause bugs. (hossman via Mark Miller)
+
+* SOLR-8656: PeerSync should use same nUpdates everywhere. (Ramsey Haddad via Mark Miller)
+
+* SOLR-8697, SOLR-8837: Scope ZK election nodes by session to prevent elections from interfering with each other
+ and other small LeaderElector improvements. (Scott Blum via Mark Miller, Alan
+ Woodward)
+
+* SOLR-8599: After a failed connection during construction of SolrZkClient attempt to retry until a connection
+ can be made. (Keith Laban, Dennis Gove)
+
+* SOLR-8497: Merge index does not mark the Directory objects it creates as 'done' and they are retained in the
+ Directory cache. (Sivlio Sanchez, Mark Miller)
+
+* SOLR-8696: Start the Overseer before actions that need the overseer on init and when reconnecting after
+ zk expiration and improve init logic. (Scott Blum, Mark Miller)
+
+* SOLR-8420: Fix long overflow in sumOfSquares for Date statistics. (Tom Hill, Christine Poerschke,
+ Tomás Fernández Löbbe)
+
+* SOLR-8748: OverseerTaskProcessor limits number of concurrent tasks to just 10 even though the thread pool
+ size is 100. The limit has now been increased to 100. (Scott Blum, shalin)
+
+* SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)
+
+* SOLR-8738: Fixed false success response when invalid deleteByQuery requests intially hit non-leader
+ cloud nodes (hossman)
+
+* SOLR-8771: Multi-threaded core shutdown creates executor per core. (Mike Drob via Mark Miller)
+
+* SOLR-8145: Fix position of OOM killer script when starting Solr in the background (Jurian Broertjes via
+ Timothy Potter)
+
+* SOLR-8769: Fix document exclusion in mlt query parser in Cloud mode for schemas that have non-"id"
+ unique field (Erik Hatcher, Anshum Gupta)
+
+* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
+ placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)
+
+* SOLR-8779: Fix missing InterruptedException handling in ZkStateReader.java (Varun Thacker)
+
+* SOLR-8449: Fix the core restore functionality to allow restoring multiple times on the same core
+ (Johannes Brucher, Varun Thacker)
+
+* SOLR-8155: JSON Facet API - field faceting on a multi-valued string field without
+ docValues (i.e. UnInvertedField implementation), but with a prefix or with a sort
+ other than count, resulted in incorrect results. This has been fixed, and facet.prefix
+ support for facet.method=uif has been enabled. (Mikhail Khludnev, yonik)
+
+* SOLR-8790: Collections API responses contain node name in the core-level responses that are
+ returned. (Anshum Gupta)
+
+* SOLR-8804: Fix a race condition in the ClusterStatus API call whereby the call would fail when a concurrent delete
+ collection api command was executed (Alexey Serba, Varun Thacker)
+
+* SOLR-8835: JSON Facet API: fix faceting exception on multi-valued numeric fields that
+ have docValues. (yonik)
+
+* SOLR-8838: Returning non-stored docValues is incorrect for negative floats and doubles.
+ (Ishan Chattopadhyaya, Steve Rowe)
+
+* SOLR-8867: {!frange} queries will now avoid matching documents without a value in the
+ numeric field. For more complex functions, FunctionValues.exists() must also return true
+ for the document to match. (yonik)
+
+* SOLR-8886: Fix TrieField.toObject(IndexableField) to work for field with docValues
+ enabled. (yonik)
+
+* SOLR-8891: Fix StrField.toObject and toExternal to work with docValue IndexableField
+ instances. (yonik)
+
+* SOLR-8865: Real-time get sometimes fails to retrieve stored fields from docValues.
+ (Ishan Chattopadhyaya, yonik)
+
+Optimizations
+----------------------
+* SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been
+ specified. Speedups of up to 8% were observed. (yonik)
+
+* SOLR-8037: Speed up creation of filters from term range queries (i.e. non-numeric range queries)
+ and use the filter cache for term range queries that are part of larger queries. Some observed
+ speedups were up to 2.5x for production of filters, and up to 10x for query evaluation with
+ embedded term range queres that resulted in filter cache hits. (yonik)
+
+* SOLR-8559: FCS facet performance optimization which significantly speeds up processing when terms
+ are high cardinality and the matching docset is small. When facet minCount > 0 and the number of
+ matching documents is small (or 0) this enhancement prevents considering terms which have a 0
+ count. Also includes change to move to the next non-zero term value when selecting a segment
+ position. (Keith Laban, Steve Bower, Dennis Gove)
+
+* SOLR-8532: Optimize GraphQuery when maxDepth is set by not collecting edges at the maxDepth level.
+ (Kevin Watters via yonik)
+
+* SOLR-8669: Non binary responses use chunked encoding because we flush the outputstream early.
+ (Mark Miller)
+
+* SOLR-8720: ZkController#publishAndWaitForDownStates should use #publishNodeAsDown. (Mark Miller)
+
+* SOLR-8082: Can't query against negative float or double values when indexed="false"
+ docValues="true" multiValued="false". (hossman, Ishan Chattopadhyaya, yonik, Steve Rowe)
+
+Other Changes
+----------------------
+
+* SOLR-6127: Improve example docs, using films data (Varun Thacker via ehatcher)
+
+* SOLR-6895: Deprecated SolrServer classes have been removed (Alan Woodward,
+ Erik Hatcher)
+
+* SOLR-6954: Deprecated SolrClient.shutdown() method removed (Alan Woodward)
+
+* SOLR-7355: Switch from Google's ConcurrentLinkedHashMap to Caffeine. Only
+ affects HDFS support. (Ben Manes via Shawn Heisey)
+
+* SOLR-7624: Remove deprecated zkCredientialsProvider element in solrcloud section of solr.xml.
+ (Xu Zhang, Per Steffensen, Ramkumar Aiyengar, Mark Miller)
+
+* SOLR-7513: Add Equalitors to Streaming Expressions (Dennis Gove, Joel Bernstein)
+
+* SOLR-7528: Simplify Interfaces used in Streaming Expressions (Dennis Gove, Joel Bernstein)
+
+* SOLR-7554: Add checks in Streams for incoming stream order (Dennis Gove, Joel Bernstein)
+
+* SOLR-7441: Improve overall robustness of the Streaming stack: Streaming API,
+ Streaming Expressions, Parallel SQL (Joel Bernstein)
+
+* SOLR-8153: Support upper case and mixed case column identifiers in the SQL interface
+ (Joel Bernstein)
+
+* SOLR-8132: HDFSDirectoryFactory now defaults to using the global block cache. (Mark Miller)
+
+* SOLR-8261: Change SchemaSimilarityFactory default to BM25Similarity (hossman)
+
+* SOLR-8259: Remove deprecated JettySolrRunner.getDispatchFilter()
+
+* SOLR-8258: Change default hdfs tlog replication factor from 1 to 3. (Mark Miller)
+
+* SOLR-8270: Change implicit default Similarity to use BM25 when luceneMatchVersion >= 6 (hossman)
+
+* SOLR-8271: Change implicit default Similarity to use SchemaSimilarityFactory when luceneMatchVersion >= 6 (hossman)
+
+* SOLR-8179: SQL JDBC - DriverImpl loadParams doesn't support keys with no values in the connection string
+ (Kevin Risden, Joel Bernstein)
+
+* SOLR-8131: Make ManagedIndexSchemaFactory the default schemaFactory when luceneMatchVersion >= 6
+ (Uwe Schindler, shalin, Varun Thacker)
+
+* SOLR-8266: Remove Java Serialization from the Streaming API. The /stream handler now only accepts
+ Streaming Expressions. (Jason Gerlowski, Joel Bernstein)
+
+* SOLR-8426: Enable /export, /stream and /sql handlers by default and remove them from example configs. (shalin)
+
+* SOLR-8443: Change /stream handler http param from "stream" to "expr" (Joel Bernstein, Dennis Gove)
+
+* SOLR-5209: Unloading or deleting the last replica of a shard now no longer
+ cascades to remove the shard from the clusterstate. (Christine Poerschke)
+
+* SOLR-8190: Implement Closeable on TupleStream (Kevin Risden, Joel Bernstein)
+
+* SOLR-8529: Improve JdbcTest to not use plain assert statements (Kevin Risden, Joel Bernstein)
+
+* SOLR-7339: Upgrade Jetty to v9.3.8.v20160314. (Gregg Donovan, shalin, Mark Miller, Steve Rowe)
+
+* SOLR-5730: Make Lucene's SortingMergePolicy and EarlyTerminatingSortingCollector configurable in Solr.
+ (Christine Poerschke, hossmann, Tomás Fernández Löbbe, Shai Erera)
+
+* SOLR-8677: Prevent shards containing invalid characters from being created. Checks added server-side
+ and in SolrJ. (Shai Erera, Jason Gerlowski, Anshum Gupta)
+
+* SOLR-8693: Improve ZkStateReader logging. (Scott Blum via Mark Miller)
+
+* SOLR-8710: Upgrade morfologik-stemming to version 2.1.0. (Dawid Weiss)
+
+* SOLR-8711: Upgrade Carrot2 clustering dependency to 3.12.0. (Dawid Weiss)
+
+* SOLR-8690: Make peersync fingerprinting optional with solr.disableFingerprint system
+ property. (yonik)
+
+* SOLR-8691: Cache index fingerprints per searcher. (yonik)
+
+* SOLR-8746: Renamed Overseer.getInQueue to getStateUpdateQueue, getInternalQueue to getInternalWorkQueue
+ and added javadocs. (Scott Blum, shalin)
+
+* SOLR-8752: Add a test for SizeLimitedDistributedMap and improve javadocs. (shalin)
+
+* SOLR-8671: Date statistics: make "sum" a double instead of a long/date (Tom Hill, Christine Poerschke,
+ Tomás Fernández Löbbe)
+
+* SOLR-8713: new UI and example solrconfig files point to Reference Guide for Solr Query Syntax instead
+ of the wiki. (Marius Grama via Tomás Fernández Löbbe)
+
+* SOLR-8758: Add a new SolrCloudTestCase class, using MiniSolrCloudCluster (Alan
+ Woodward)
+
+* SOLR-8736: schema GET operations on fields, dynamicFields, fieldTypes, copyField are
+ reimplemented as a part of the bulk API with less details (noble)
+
+* SOLR-8766: Remove deprecated <admin> tag in solrconfig.xml and support for admin/gettableFiles
+ (noble, Jason Gerlowski, Varun Thacker)
+
+* SOLR-8799: Improve error message when tuple can't be read by SolrJ JDBC (Kevin Risden, Joel Bernstein)
+
+* SOLR-8836: Return 400, and a SolrException when an invalid json is provided to the update handler
+ instead of 500. (Jason Gerlowski via Anshum Gupta)
+
+* SOLR-8740: docValues are now enabled by default for most non-text (string, date, and numeric) fields
+ in the schema templates. (yonik)
+
+* SOLR-8819: Implement DatabaseMetaDataImpl getTables() and fix getSchemas(). (Trey Cahill,
+ Joel Bernstein, Kevin Risden)
+
+* SOLR-8810: Implement Connection.setReadOnly, Statement.set/getFetchSize,
+ ResultSet.getType (Kevin Risden)
+
+* SOLR-8904: All dates are formatted via Instant.toString() (ISO-8601); see Solr upgrade notes for differences. Will
+ now parse (and format) dates with a leading '+' or '-' (BC dates or dates > 4 digit year.
+ [value] and ms() and contrib/analytics now parse with date math. (David Smiley)
+
+* SOLR-8904: DateUtil in SolrJ moved to the extraction contrib as ExtractionDateUtil. Obsolete methods were removed.
+ (David Smiley)
+
+======================= 5.5.5 =======================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.10.4
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.13.v20150730
+
+Upgrade Notes
+----------------------
+
+* SOLR-11477: in the XML query parser (defType=xmlparser or {!xmlparser ... })
+ the resolving of external entities is now disallowed by default.
+
+* SOLR-11482: RunExecutableListener was deprecated and is disabled by default for
+ security reasons. Legacy applications still using it must explicitely pass
+ '-Dsolr.enableRunExecutableListener=true' to the Solr command line.
+ Be aware that you should really disable API-based config editing at the same
+ time, using '-Ddisable.configEdit=true'! (Uwe Schindler)
+
+Bug Fixes
+----------------------
+
+* SOLR-10420: Leaking one SolrZkClient instance per second (Scott Blum, Cao Manh Dat, Markus Jelsma, Steve Rowe)
+
+* SOLR-11477: Disallow resolving of external entities in the XML query parser (defType=xmlparser).
+ (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+Other
+----------------------
+
+* SOLR-11486: Update jmatio to 1.2 and prevent deserialization inside Matlab files.
+ (Uwe Schindler, Steve Rowe)
+
+======================= 5.5.4 =======================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.15.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.14.v20161028
+
+
+Other Changes
+----------------------
+
+* SOLR-9819: Upgrade commons-fileupload to 1.3.2, fixing a potential vulnerability CVE-2016-3092 (Anshum Gupta)
+
+* SOLR-10031: Validation of filename params in ReplicationHandler (Hrishikesh Gadre, janhoy)
+
+
+======================= 5.5.3 =======================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.13
+Carrot2 3.12.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.3.8.v20160314
+
+
+(No Changes)
+
+
+======================= 5.5.2 =======================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.10.4
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.13.v20150730
+
+Bug Fixes
+---------------------
+
+* SOLR-8695: Ensure ZK watchers are not triggering our watch logic on connection events and
+ make this handling more consistent. (Scott Blum via Mark Miller)
+
+* SOLR-9198: config APIs unable to add multiple values with same name (noble)
+
+* SOLR-9191: OverseerTaskQueue.peekTopN() fatally flawed (Scott Blum, Noble Paul)
+
+* SOLR-8812: edismax: turn off mm processing if no explicit mm spec is provided
+ and there are explicit operators (except for AND) - addresses problems caused by SOLR-2649.
+ (Greg Pendlebury, Jan Høydahl, Erick Erickson, Steve Rowe)
+
+* SOLR-9034: Atomic updates failed to work when there were copyField targets that had docValues
+ enabled. (Karthik Ramachandran, Ishan Chattopadhyaya, yonik)
+
+* SOLR-8940: Fix group.sort option (hossman)
+
+* SOLR-8857: HdfsUpdateLog does not use configured or new default number of version buckets and is
+ hard coded to 256. (Mark Miller, yonik, Gregory Chanan)
+
+* SOLR-8875: SolrCloud Overseer clusterState could unexpectedly be null resulting in NPE.
+ (Scott Blum via David Smiley)
+
+* SOLR-8946: bin/post failed to detect stdin usage on Ubuntu; maybe other unixes. (David Smiley)
+
+* SOLR-9004: Fix "name" field type definition in films example. (Alexandre Rafalovitch via Varun Thacker)
+
+* SOLR-8990: Fix top term links from schema browser page to use {!term} parser (hossman)
+
+* SOLR-8971: Preserve root cause when wrapping exceptions (hossman)
+
+* SOLR-8792: ZooKeeper ACL support fixed. (Esther Quansah, Ishan Chattopadhyaya, Steve Rowe)
+
+* SOLR-9030: The 'downnode' overseer command can trip asserts in ZkStateWriter.
+ (Scott Blum, Mark Miller, shalin)
+
+* SOLR-9036: Solr slave is doing full replication (entire index) of index after master restart.
+ (Lior Sapir, Mark Miller, shalin)
+
+* SOLR-9093: Fix NullPointerException in TopGroupsShardResponseProcessor. (Christine Poerschke)
+
+* SOLR-9118: HashQParserPlugin should trim partition keys (Joel Bernstein)
+
+* SOLR-9117: The first SolrCore is leaked after reload. (Jessica Cheng Mallet via shalin)
+
+* SOLR-9116: Race condition causing occasional SolrIndexSearcher leak when SolrCore is reloaded.
+ (Jessica Cheng Mallet via shalin)
+
+* SOLR-8801: /bin/solr create script always returns exit code 0 when a collection/core already exists.
+ (Khalid Alharbi, Marius Grama via Steve Rowe)
+
+* SOLR-9134: Fix RestManager.addManagedResource return value. (Christine Poerschke)
+
+* SOLR-9151: Fix SolrCLI so that bin/solr -e cloud example can be run from any CWD (janhoy)
+
+* SOLR-9165: Spellcheck does not return collations if "maxCollationTries" is used with "cursorMark".
+ (James Dyer)
+
+* SOLR-8612: closing JDBC Statement on failures in DataImportHandler (DIH) (Kristine Jetzke via Mikhail Khludnev)
+
+* SOLR-8676: keep LOG4J_CONFIG in solr.cmd (Kristine Jetzke via Mikhail Khludnev)
+
+* SOLR-9176: facet method ENUM was sometimes unnecessarily being rewritten to
+ FCS, causing slowdowns (Alessandro Benedetti, Jesse McLaughlin, Alan Woodward)
+
+Other Changes
+----------------------
+
+* SOLR-7516: Improve javadocs for JavaBinCodec, ObjectResolver and enforce the single-usage policy.
+ (Jason Gerlowski, Benoit Vanalderweireldt, shalin)
+
+* SOLR-8967: In SolrCloud mode, under the 'Core Selector' dropdown in the UI the Replication tab won't be displayed
+ anymore. The Replication tab is only beneficial to users running Solr in master-slave mode. (Varun Thacker)
+
+* SOLR-9131: Fix "start solr" text in cluster.vm Velocity template (janhoy)
+
+* SOLR-9053: Upgrade commons-fileupload to 1.3.1, fixing a potential vulnerability (Jeff Field, Mike Drob via janhoy)
+
+* SOLR-8866: UpdateLog will now throw an exception if it doesn't know how to serialize a value.
+ (David Smiley)
+
+* SOLR-8933: Solr should not close container streams. (Mike Drob, Uwe Schindler, Mark Miller)
+
+* SOLR-9037: Replace multiple "/replication" strings with one static constant. (Christine Poerschke)
+
+* SOLR-9047: zkcli should allow alternative locations for log4j configuration (Gregory Chanan)
+
+* SOLR-9105: Fix a bunch of typos across 103 files (Bartosz Krasiński via janhoy)
+
+* SOLR-8445: fix line separator in log4j.properties files (Ahmet Arslan via Mikhail Khludnev)
+
+* SOLR-8674: Stop ignoring sysprop solr.tests.mergePolicy, and make tests randomly choose between
+ setting <mergePolicy> and <mergePolicyFactory>, which was added in SOLR-8621. (Christine Poerschke)
+
+======================= 5.5.1 =======================
+
+Bug Fixes
+----------------------
+
+* SOLR-8737: Managed synonym lists do not include the original term in the expand (janhoy)
+
+* SOLR-8734: fix (maxMergeDocs|mergeFactor) deprecation warnings: in solrconfig.xml
+ <maxMergeDocs|mergeFactor> may not be combined with <mergePolicyFactory> and
+ <maxMergeDocs|mergeFactor> on their own or combined with <mergePolicy> is a warning.
+ (Christine Poerschke, Shai Erera)
+
+* SOLR-8712: Variable solr.core.instanceDir was not being resolved (Kristine
+ Jetzke, Shawn Heisey, Alan Woodward)
+
+* SOLR-8793: Fix Core admin status API to not fail when computing the size of the segments_N
+ file if the file no longer exists (for example, if a commit happened and the IndexReader
+ hasn't refreshed yet). In this case the reported size of the file is -1.
+ (Shai Erera, Alexey Serba, Richard Coggins)
+
+* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
+ placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)
+
+* SOLR-8838: Returning non-stored docValues is incorrect for negative floats and doubles.
+ (Ishan Chattopadhyaya, Steve Rowe)
+
+* SOLR-8870: AngularJS Query tab no longer URL-encodes the /select part of the request, fixing possible 404 issue
+ when Solr is behind a proxy. Also, now supports old-style &qt param when handler not prefixed with "/" (janhoy)
+
+* SOLR-8725: Allow hyphen in collection, core, shard, and alias name as the non-first character
+ (Anshum Gupta) (from 6.0)
+
+* SOLR-8155: JSON Facet API - field faceting on a multi-valued string field without
+ docValues (i.e. UnInvertedField implementation), but with a prefix or with a sort
+ other than count, resulted in incorrect results. This has been fixed, and facet.prefix
+ support for facet.method=uif has been enabled. (Mikhail Khludnev, yonik)
+
+* SOLR-8835: JSON Facet API: fix faceting exception on multi-valued numeric fields that
+ have docValues. (yonik)
+
+* SOLR-8908: Fix to OnReconnect listener registration to allow listeners to deregister, such
+ as when a core is reloaded or deleted to avoid a memory leak. (Timothy Potter)
+
+* SOLR-8662: SchemaManager waits correctly for replicas to be notified of a new change
+ (sarowe, Noble Paul, Varun Thacker)
+
+* SOLR-9007: Remove mention of the managed_schema_configs as valid config directory when creating
+ the collection for the SolrCloud example. (Timothy Potter)
+
+* SOLR-8983: Cleanup clusterstate and replicas for a failed create collection request
+ (Varun Thacker, Anshum Gupta)
+
+* SOLR-8578: Successful or not, requests are not always fully consumed by Solrj clients and we
+ count on HttpClient or the JVM. (Mark Miller)
+
+* SOLR-8683: Always consume the full request on the server, not just in the case of an error.
+ (Mark Miller)
+
+* SOLR-8701: CloudSolrClient decides that there are no healthy nodes to handle a request too early.
+ (Mark Miller)
+
+* SOLR-8416: The collections create API should return after all replicas are active.
+ (Michael Sun, Mark Miller, Alexey Serba)
+
+* SOLR-8914: ZkStateReader's refreshLiveNodes(Watcher) is not thread safe. (Scott Blum, hoss,
+ sarowe, Erick Erickson, Mark Miller, shalin)
+
+* SOLR-8973: Zookeeper frenzy when a core is first created. (Janmejay Singh, Scott Blum, shalin)
+
+* SOLR-8694: DistributedMap/Queue can create too many Watchers and some code simplification.
+ (Scott Blum via Mark Miller)
+
+* SOLR-8633: DistributedUpdateProcess processCommit/deleteByQuery call finish on DUP and
+ SolrCmdDistributor, which violates the lifecycle and can cause bugs. (hossman via Mark Miller)
+
+* SOLR-8656: PeerSync should use same nUpdates everywhere. (Ramsey Haddad via Mark Miller)
+
+* SOLR-8697, SOLR-8837: Scope ZK election nodes by session to prevent elections from interfering with each other
+ and other small LeaderElector improvements. (Scott Blum via Mark Miller, Alan
+ Woodward)
+
+* SOLR-8599: After a failed connection during construction of SolrZkClient attempt to retry until a connection
+ can be made. (Keith Laban, Dennis Gove)
+
+* SOLR-8420: Fix long overflow in sumOfSquares for Date statistics. (Tom Hill, Christine Poerschke,
+ Tomás Fernández Löbbe)
+
+* SOLR-8748: OverseerTaskProcessor limits number of concurrent tasks to just 10 even though the thread pool
+ size is 100. The limit has now been increased to 100. (Scott Blum, shalin)
+
+* SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)
+
+* SOLR-8738: Fixed false success response when invalid deleteByQuery requests intially hit non-leader
+ cloud nodes (hossman)
+
+* SOLR-8771: Multi-threaded core shutdown creates executor per core. (Mike Drob via Mark Miller)
+
+* SOLR-8145: Fix position of OOM killer script when starting Solr in the background (Jurian Broertjes via
+ Timothy Potter)
+
+* SOLR-8769: Fix document exclusion in mlt query parser in Cloud mode for schemas that have non-"id"
+ unique field (Erik Hatcher, Anshum Gupta)
+
+* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
+ placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)
+
+* SOLR-8779: Fix missing InterruptedException handling in ZkStateReader.java (Varun Thacker)
+
+* SOLR-8449: Fix the core restore functionality to allow restoring multiple times on the same core
+ (Johannes Brucher, Varun Thacker)
+
+* SOLR-8790: Collections API responses contain node name in the core-level responses that are
+ returned. (Anshum Gupta)
+
+* SOLR-8804: Fix a race condition in the ClusterStatus API call whereby the call would fail when a concurrent delete
+ collection api command was executed (Alexey Serba, Varun Thacker)
+
+* SOLR-9016: Fix SolrIdentifierValidator to not allow empty identifiers. (Shai Erera)
+
+* SOLR-8886: Fix TrieField.toObject(IndexableField) to work for field with docValues
+ enabled. (yonik)
+
+* SOLR-8891: Fix StrField.toObject and toExternal to work with docValue IndexableField
+ instances. (yonik)
+
+* SOLR-8865: Real-time get sometimes fails to retrieve stored fields from docValues.
+ (Ishan Chattopadhyaya, yonik)
+
+* SOLR-9046: Fix solr.cmd that wrongly assumes Jetty will always listen on 0.0.0.0.
+ (Bram Van Dam, Uwe Schindler)
+
+Other Changes
+----------------------
+
+* SOLR-8758: Add a new SolrCloudTestCase class, using MiniSolrCloudCluster (Alan
+ Woodward)
+
+======================= 5.5.0 =======================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.10.4
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.13.v20150730
+
+Upgrading from Solr 5.4
+-----------------------
+
+* The Solr schema version has been increased to 1.6. Since schema version 1.6, all non-stored docValues fields
+ will be returned along with other stored fields when all fields (or pattern matching globs) are specified
+ to be returned (e.g. fl=*) for search queries. This behavior can be turned on and off by setting
+ 'useDocValuesAsStored' parameter for a field or a field type to true (default since schema version 1.6)
+ or false (default till schema version 1.5).
+ Note that enabling this property has performance implications because DocValues are column-oriented and may
+ therefore incur additional cost to retrieve for each returned document. All example schema are upgraded to
+ version 1.6 but any older schemas will default to useDocValuesAsStored=false and continue to work as in
+ older versions of Solr. If this new behavior is desirable, then you should set version attribute in your
+ schema file to '1.6'. Re-indexing is not necessary to upgrade the schema version.
+ Also note that while returning non-stored fields from docValues (default in schema versions 1.6+, unless
+ useDocValuesAsStored is false), the values of a multi-valued field are returned in sorted order.
+ If you require the multi-valued fields to be returned in the original insertion order, then make your
+ multi-valued field as stored. This requires re-indexing.
+ See SOLR-8220 for more details.
+
+* All protected methods from CoreAdminHandler other than handleCustomAction() is removed by SOLR-8476 and can
+ no more be overridden. If you still wish to override those methods, override the handleRequestBody()
+
+* The PERSIST CoreAdmin action which was a NOOP and returned a deprecated message has been removed. See SOLR-8476
+ for more details. The corresponding SolrJ action has also been removed.
+
+* bin/post now defaults application/json files to the /update/json/docs end-point. Use `-format solr` to force
+ files to the /update end-point. See SOLR-7042 for more details.
+
+* In solrconfig.xml the <mergePolicy> element is deprecated in favor of a similar <mergePolicyFactory> element,
+ the <mergeFactor> and <maxMergeDocs> elements are also deprecated, please see SOLR-8621 for full details.
+
+ To migrate your existing solrconfig.xml, you can replace elements as follows:
+
+ <!-- TieredMergePolicy example -->
+ <!-- deprecated -->
+ <mergeFactor>??</mergeFactor>
+ <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
+ <bool name="useCompoundFile">???</bool> <!-- deprecated since Lucene/Solr 4.4.0 -->
+ ...
+ </mergePolicy>
+ <!-- replacement -->
+ <useCompoundFile>???</useCompoundFile> <!-- since Lucene/Solr 4.4.0 -->
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">??</int> <!-- formerly the <mergeFactor> element implicitly set this -->
+ <int name="segmentsPerTier">??</int> <!-- formerly the <mergeFactor> element implicitly set this -->
+ ...
+ </mergePolicyFactory>
+
+ <!-- Log(ByteSize|Doc)MergePolicy example -->
+ <!-- deprecated -->
+ <maxMergeDocs>????</maxMergeDocs>
+ <mergeFactor>??</mergeFactor>
+ <mergePolicy class="org.apache.lucene.index.Log?MergePolicy">
+ <bool name="useCompoundFile">???</bool> <!-- deprecated since Lucene/Solr 4.4.0 -->
+ ...
+ </mergePolicy>
+ <!-- replacement -->
+ <useCompoundFile>???</useCompoundFile> <!-- since Lucene/Solr 4.4.0 -->
+ <mergePolicyFactory class="org.apache.solr.index.Log?MergePolicyFactory">
+ <int name="maxMergeDocs">????</int> <!-- formerly the <maxMergeDocs> element set this -->
+ <int name="mergeFactor">??</int> <!-- formerly the <mergeFactor> element set this -->
+ ...
+ </mergePolicyFactory>
+
+* Clearing up stored async collection api responses via REQUESTSTATUS call is now deprecated and would be
+ removed in 6.0. See SOLR-8648 for more details.
+
+* SOLR-6594: Deprecated the old schema API which will be removed in a later major release
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-7928: Improve CheckIndex to work against HdfsDirectory
+ (Mike Drob, Gregory Chanan)
+
+* SOLR-8378: Add upconfig and downconfig commands to the bin/solr script
+ (Erick Erickson)
+
+* SOLR-8434: Add wildcard support to role, to match any role in RuleBasedAuthorizationPlugin (noble)
+
+* SOLR-4280: Allow specifying "spellcheck.maxResultsForSuggest" as a percentage of filter
+ query results (Markus Jelsma via James Dyer)
+
+* SOLR-8429: Add a flag 'blockUnknown' to BasicAuthPlugin to block unauthenticated requests (noble)
+
+* SOLR-8230: JSON Facet API: add "facet-info" into debug section of response when debugQuery=true
+ (Michael Sun, yonik)
+
+* SOLR-8428: RuleBasedAuthorizationPlugin adds an 'all' permission (noble)
+
+* SOLR-5743: BlockJoinFacetComponent and BlockJoinDocSetFacetComponent for calculating facets by
+ child.facet.field parameter with {!parent ..}.. query. They count facets on children documents
+ aggregating (deduplicating) counts by parent documents (Dr. Oleg Savrasov via Mikhail Khludnev)
+
+* SOLR-8220: Read field from DocValues for non stored fields.
+ (Keith Laban, yonik, Erick Erickson, Ishan Chattopadhyaya, shalin)
+
+* SOLR-8470: Make TTL of PKIAuthenticationPlugin's tokens configurable through a system property
+ (pkiauth.ttl) (noble)
+
+* SOLR-8477: Let users choose compression mode in SchemaCodecFactory (Tomás Fernández Löbbe)
+
+* SOLR-839: XML QueryParser support (defType=xmlparser)
+ Lucene includes a queryparser that supports the creation of Lucene queries from XML.
+ The queries supported by lucene.queryparser.xml.CoreParser are now supported by the newly
+ created solr.search.SolrCoreParser and in future SolrCoreParser could support additional
+ queries also.
+ Example: <BooleanQuery fieldName="description">
+ <Clause occurs="must"> <TermQuery>shirt</TermQuery> </Clause>
+ <Clause occurs="mustnot"> <TermQuery>plain</TermQuery> </Clause>
+ <Clause occurs="should"> <TermQuery>cotton</TermQuery> </Clause>
+ <Clause occurs="must">
+ <BooleanQuery fieldName="size">
+ <Clause occurs="should"> <TermsQuery>S M L</TermsQuery> </Clause>
+ </BooleanQuery>
+ </Clause>
+ </BooleanQuery>
+ (Erik Hatcher, Karl Wettin, Daniel Collins, Nathan Visagan, Ahmet Arslan, Christine Poerschke)
+
+* SOLR-8312: Add domain size and numBuckets to facet telemetry info (facet debug info
+ for the new Facet Module). (Michael Sun, yonik)
+
+* SOLR-8534: Add generic support for collection APIs to be async. Thus more actions benefit from having async
+ support. The commands that additionally get async support are: delete/reload collection, create/delete alias,
+ create/delete shard, delete replica, add/delete replica property, add/remove role,
+ overseer status, balance shard unique, rebalance leaders, modify collection, migrate state format (Varun Thacker)
+
+* SOLR-4619: Improve PreAnalyzedField query analysis. (Andrzej Bialecki, Steve Rowe)
+
+* SOLR-8560: Added RequestStatusState enum which can be used when comparing states of
+ asynchronous requests. (Shai Erera)
+
+* SOLR-8586: added index fingerprint, a hash over all versions currently in the index.
+ PeerSync now uses this to check if replicas are in sync. (yonik)
+
+* SOLR-8500: Allow the number of threads ConcurrentUpdateSolrClient StreamingSolrClients configurable by a
+ system property. NOTE: this is an expert option and can result in more often needing to do full index replication
+ for recovery, the sweet spot for using this is very high volume, leader-only indexing. (Tim Potter, Erick Erickson)
+
+* SOLR-8642: SOLR allows creation of collections with invalid names
+ (Jason Gerlowski via Erick Erickson)
+
+* SOLR-8621: Deprecate <mergePolicy> in favor of <mergePolicyFactory>. It allows to configure
+ both the "simple" merge policies, but also more advanced ones, e.g. UpgradeIndexMergePolicy.
+ (Christine Poerschke, Shai Erera)
+
+* SOLR-8648: DELETESTATUS API for selective deletion and flushing of stored async collection API responses.
+ (Anshum Gupta)
+
+* SOLR-8466: adding facet.method=uif to bring back UnInvertedField faceting which is used to work on
+ facet.method=fc. It's more performant for rarely changing indexes. Note: it ignores prefix and contains yet.
+ (Jamie Johnson via Mikhail Khludnev)
+
+Bug Fixes
+----------------------
+
+* SOLR-8175: Word Break Spellchecker would throw AIOOBE with certain queries containing
+ "should" clauses. (Ryan Josal via James Dyer)
+
+* SOLR-2556: The default spellcheck query converter was ignoring terms consisting entirely
+ of digits. (James Dyer)
+
+* SOLR-8366: ConcurrentUpdateSolrClient attempts to use response's content type as charset encoding
+ for parsing exception. (shalin)
+
+* SOLR-6271: Fix ConjunctionSolrSpellChecker to not compare StringDistance by instance.
+ (Igor Kostromin via James Dyer)
+
+* SOLR-7304: Fix Spellcheck Collate to not invalidate range queries. (James Dyer)
+
+* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
+ fetch TGT for every request (Ishan Chattopadhyaya via noble)
+
+* SOLR-8367: Fix the LeaderInitiatedRecovery 'all replicas participate' fail-safe.
+ (Mark Miller, Mike Drob)
+
+* SOLR-8401: Windows start script fails when executed from a different drive.
+ (Nicolas Gavalda via Erick Erickson)
+
+* SOLR-6992: Fix "Files" UI to show the managed-schema file as well.
+ (Shawn Heisey, Varun Thacker)
+
+* SOLR-2649: MM ignored in edismax queries with operators.
+ (Greg Pendlebury, Jan Høydahl et. al. via Erick Erickson)
+
+* SOLR-8372: Canceled recovery can rarely lead to inconsistent shards:
+ If a replica is recovering via index replication, and that recovery fails
+ (for example if the leader goes down), and then some more updates are received
+ (there could be a few left to be processed from the leader that just went down),
+ and then that replica is brought down, it will think it is up-to-date when
+ restarted. (shalin, Mark Miller, yonik)
+
+* SOLR-8419: TermVectorComponent for distributed search when distrib.singlePass could include term
+ vectors for documents that matched the query yet weren't in the returned documents. (David Smiley)
+
+* SOLR-8015: HdfsLock may fail to close a FileSystem instance if it cannot immediately
+ obtain an index lock. (Mark Miller)
+
+* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
+ the collection (noble)
+
+* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
+ automatically) could result in an NPE. (David Smiley, Markus Jelsma)
+
+* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)
+
+* SOLR-8276: Atomic updates and realtime-get do not work with non-stored docvalues.
+ (Ishan Chattopadhyaya, yonik via shalin)
+
+* SOLR-7462: AIOOBE in RecordingJSONParser (Scott Dawson, noble)
+
+* SOLR-8494: SimplePostTool and therefore the bin/post script cannot upload files larger than 2.1GB. (shalin)
+
+* SOLR-8451: We should not call method.abort in HttpSolrClient or HttpSolrCall#remoteQuery and
+ HttpSolrCall#remoteQuery should not close streams. (Mark Miller)
+
+* SOLR-8450: Our HttpClient retry policy is too permissive. (Mark Miller, shalin)
+
+* SOLR-8533: Raise default maxUpdateConnections and maxUpdateConnectionsPerHost to 100k each.
+ (Mark Miller)
+
+* SOLR-8453: Solr should attempt to consume the request inputstream on errors as we cannot
+ count on the container to do it. (Mark Miller, Greg Wilkins, yonik, Joakim Erdfelt)
+
+* SOLR-6279: cores?action=UNLOAD now waits for the core to close before unregistering it from ZK.
+ (Christine Poerschke)
+
+* SOLR-2798: Fixed local params to work correctly with multivalued params
+ (Demian Katz via hossman)
+
+* SOLR-8541: Highlighting a geo RPT field would throw an NPE instead of doing nothing.
+ (Pawel Rog via David Smiley)
+
+* SOLR-8548: Core discovery was not following symlinks (Aaron LaBella via Alan
+ Woodward)
+
+* SOLR-8564: Fix Embedded ZooKeeper to use <solrHome>/zoo_data for it's data directory
+
+* SOLR-8371: Try and prevent too many recovery requests from stacking up and clean up some faulty
+ cancel recovery logic. (Mark Miller)
+
+* SOLR-8582 : memory leak in JsonRecordReader affecting /update/json/docs. Large payloads
+ cause OOM (noble, shalin)
+
+* SOLR-8605: Regular expression queries starting with escaped forward slash caused
+ an exception. (Scott Blum, yonik)
+
+* SOLR-8607: The Schema API refuses to add new fields that match existing dynamic fields.
+ (Jan Høydahl, Steve Rowe)
+
+* SOLR-8575: Fix HDFSLogReader replay status numbers, a performance bug where we can reopen
+ FSDataInputStream much too often, and an hdfs tlog data integrity bug.
+ (Mark Miller, Patrick Dvorack, yonik)
+
+* SOLR-8651: The commitWithin parameter is not passed on for deleteById in UpdateRequest in
+ distributed queries (Jessica Cheng Mallet via Erick Erickson)
+
+* SOLR-8551: Make collection deletion more robust. (Mark Miller)
+
+Optimizations
+----------------------
+
+* SOLR-8501: Specify the entity request size when known in HttpSolrClient. (Mark Miller)
+
+* SOLR-8615: Just like creating cores, we should use multiple threads when closing cores.
+ (Mark Miller)
+
+* SOLR-7281: Add an overseer action to publish an entire node as 'down'. (Mark Miller, shalin)
+
+* SOLR-8669: Non binary responses use chunked encoding because we flush the outputstream early.
+ (Mark Miller)
+
+Other Changes
+----------------------
+
+* LUCENE-6900: Added test for score ordered grouping, and refactored TopGroupsResultTransformer.
+ (David Smiley)
+
+* SOLR-8336: CoreDescriptor now takes a Path for its instance directory, rather
+ than a String (Alan Woodward)
+
+* SOLR-8351: Improve HdfsDirectory toString representation
+ (Mike Drob via Gregory Chanan)
+
+* SOLR-8321: add a (SolrQueryRequest free) SortSpecParsing.parseSortSpec variant
+ (Christine Poerschke)
+
+* SOLR-8338: in OverseerTest replace strings such as "collection1" and "state" with variable
+ or enum equivalent (Christine Poerschke)
+
+* SOLR-8333: Several API tweaks so that public APIs were no longer refering to private classes
+ (ehatcher, Shawn Heisey, hossman)
+
+* SOLR-8357: UpdateLog.RecentUpdates now implements Closeable (Alan Woodward)
+
+* SOLR-8339: Refactor SolrDocument and SolrInputDocument to have a common base abstract class
+ called SolrDocumentBase. Deprecated methods toSolrInputDocument and toSolrDocument in ClientUtils.
+ (Ishan Chattopadhyaya via shalin)
+
+* SOLR-8353: Support regex for skipping license checksums (Gregory Chanan)
+
+* SOLR-8313: SimpleQueryParser doesn't use MultiTermAnalysis for Fuzzy Queries (Tom Hill via Erick Erickson)
+
+* SOLR-8359: Restrict child classes from using parent logger's state
+ (Jason Gerlowski, Mike Drob, Anshum Gupta)
+
+* SOLR-8131: All example config sets now explicitly use the ManagedIndexSchemaFactory
+ instead of ClassicIndexSchemaFactory. This means that the Schema APIs ( /<collection>/schema )
+ are enabled by default and the schema is mutable. The schema file will be called managed-schema
+ (Uwe Schindler, shalin, Varun Thacker)
+
+* SOLR-8381: Cleanup data_driven managed-schema and solrconfig.xml files. Commented out copyFields are removed
+ and solrconfig.xml doesn't refer to field which are not defined. (Varun Thacker)
+
+* SOLR-7774: revise BasicDistributedZkTest.test logic w.r.t. 'commitWithin did not work on some nodes'
+ (Christine Poerschke)
+
+* SOLR-8360: simplify ExternalFileField.getValueSource implementation (Christine Poerschke)
+
+* SOLR-8387: All example configs shipped with Solr explicitly use ManagedIndexSchemaFactory, the schema file will
+ be called managed-schema instead of schema.xml . It is not advised to use hand edit the managed-schema. You should
+ use the schema APIs instead ( /<collection>/schema ) . If you do not want this behaviour in the example configs,
+ before you start solr rename managed-schema to schema.xml and change the schemaFactory in solrconfig.xml file
+ to explicitly use ClassicIndexSchemaFactory instead : <schemaFactory class="ClassicIndexSchemaFactory"/>
+ (Varun Thacker)
+
+* SOLR-8305: replace LatLonType.getValueSource's QParser use (Christine Poerschke)
+
+* SOLR-8388: factor out response/TestSolrQueryResponse.java from servlet/ResponseHeaderTest.java
+ more TestSolrQueryResponse.java tests; add SolrReturnFields.toString method, ReturnFieldsTest.testToString test;
+ (Christine Poerschke)
+
+* SOLR-8383: SolrCore.java + QParserPlugin.java container initialCapacity tweaks
+ (Christine Poerschke, Mike Drob)
+
+* LUCENE-6925: add RandomForceMergePolicy class in test-framework (Christine Poerschke)
+
+* SOLR-8404: tweak SolrQueryResponse.getToLogAsString, add TestSolrQueryResponse.testToLog (Christine Poerschke)
+
+* SOLR-8352: randomise unload order in UnloadDistributedZkTest.testUnloadShardAndCollection (Christine Poerschke)
+
+* SOLR-8414: AbstractDistribZkTestBase.verifyReplicaStatus could throw NPE (Christine Poerschke)
+
+* SOLR-8410: Add all read paths to 'read' permission in RuleBasedAuthorizationPlugin (noble)
+
+* SOLR-8279: Add a new test fault injection approach and a new SolrCloud test that stops and starts the cluster
+ while indexing data and with random faults. (Mark Miller)
+
+* SOLR-8419: TermVectorComponent for distributed search now requires a uniqueKey in the schema. Also, it no longer
+ returns "uniqueKeyField" in the response. (David Smiley)
+
+* SOLR-8317: add & use responseHeader and response accessors to SolrQueryResponse. (Christine Poerschke)
+
+* SOLR-8452: replace "partialResults" occurrences with SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY
+ (Christine Poerschke)
+
+* SOLR-8454: ZkStateReader logging improvements and cleanup of dead code (Shai Erera, Anshum Gupta)
+
+* SOLR-8455: RecovertStrategy logging improvements and sleep-between-recovery-attempts bug fix.
+ (Shai Erera)
+
+* SOLR-8481: TestSearchPerf no longer needs to duplicate SolrIndexSearcher.(NO_CHECK_QCACHE|NO_CHECK_FILTERCACHE)
+ (Christine Poerschke)
+
+* SOLR-8486: No longer require jar/unzip for bin/solr (Steven E. Harris, janhoy)
+
+* SOLR-8483: relocate 'IMPORTANT NOTE' in open-exchange-rates.json test-file to avoid
+ OpenExchangeRatesOrgProvider.java warnings (Christine Poerschke)
+
+* SOLR-8489: TestMiniSolrCloudCluster.createCollection to support extra & alternative collectionProperties
+ (Christine Poerschke)
+
+* SOLR-8482: add & use QueryCommand.[gs]etTerminateEarly accessors. (Christine Poerschke)
+
+* SOLR-8498: Improve error message when a large value is stored in an indexed string field. (shalin)
+
+* SOLR-8484: refactor update/SolrIndexConfig.LOCK_TYPE_* into core/DirectoryFactory.LOCK_TYPE_*
+ (Christine Poerschke)
+
+* SOLR-8504: (IndexSchema|SolrIndexConfig)Test: private static finals for
+ solrconfig.xml and schema.xml String literals. (Christine Poerschke)
+
+* SOLR-8505: core/DirectoryFactory.LOCK_TYPE_HDFS - add & use it instead of String literals
+ (Christine Poerschke)
+
+* SOLR-7042: bin/post now uses /update/json/docs for application/json content types, including support for
+ .jsonl (JSON Lines) files. (Erik Hatcher and shalin)
+
+* SOLR-8476: Refactor and cleanup CoreAdminHandler (noble, Varun Thacker)
+
+* SOLR-8535: Support forcing define-lucene-javadoc-url to be local (Gregory Chanan)
+
+* SOLR-8549: Solr start script checks for cores which have failed to load as well before attempting to
+ create a core with the same name (Varun Thacker)
+
+* SOLR-8555: SearchGroupShardResponseProcessor (initialCapacity) tweaks (Christine Poerschke)
+
+* LUCENE-6978: Refactor several code places that lookup locales
+ by string name to use BCP47 locale tag instead. LuceneTestCase
+ now also prints locales on failing tests this way. In addition,
+ several places in Solr now additionally support BCP47 in config
+ files. (Uwe Schindler, Robert Muir)
+
+* SOLR-7907: Remove CLUSTERSTATUS related exclusivity checks while running commands in the Overseer because the
+ CLUSTERSTATUS request is served by the individual nodes itself and not via the Overseer node (Varun Thacker)
+
+* SOLR-8566: various initialCapacity tweaks (Fix Versions: trunk 5.5)
+ (Christine Poerschke)
+
+* SOLR-8565: add & use CommonParams.(ROWS|START)_DEFAULT constants (Christine Poerschke)
+
+* SOLR-8595: Use BinaryRequestWriter by default in HttpSolrClient and ConcurrentUpdateSolrClient. (shalin)
+
+* SOLR-8597: add default, no-op QParserPlugin.init(NamedList) method (Christine Poerschke)
+
+* SOLR-7968: Make QueryComponent more extensible. (Markus Jelsma via David Smiley)
+
+* SOLR-8600: add & use ReRankQParserPlugin parameter [default] constants,
+ changed ReRankQuery.toString to use StringBuilder. (Christine Poerschke)
+
+* SOLR-8308: Core gets inaccessible after RENAME operation with special characters
+ (Erik Hatcher, Erick Erickson)
+
+* SOLR-3141: Warn in logs when expensive optimize calls are made (yonik, janhoy)
+
+================== 5.4.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)
+
+* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
+ fetch TGT for every request (Ishan Chattopadhyaya via noble)
+
+* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
+ automatically) could result in an NPE. (David Smiley, Markus Jelsma)
+
+* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
+ the collection (noble)
+
+* SOLR-7462: AIOOBE in RecordingJSONParser (Scott Dawson, noble)
+
+* SOLR-8496: SolrIndexSearcher.getDocSet(List<Query>) incorrectly included deleted documents
+ when all of the queries were uncached (or there was no filter cache). This caused
+ multi-select faceting (including the JSON Facet API) to include deleted doc counts
+ when the remaining non-excluded filters were all uncached. This bug was first introduced in 5.3.0
+ (Andreas Müller, Vasiliy Bout, Erick Erickson, Shawn Heisey, Hossman, yonik)
+
+* SOLR-8418: Adapt to changes in LUCENE-6590 for use of boosts with MLTHandler and
+ Simple/CloudMLTQParser (Jens Wille, Ramkumar Aiyengar)
+
+New Features
+----------------------
+
+* SOLR-8470: Make TTL of PKIAuthenticationPlugin's tokens configurable through a system property
+ (pkiauth.ttl) (noble)
+
+================== 5.4.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.10.4
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.13.v20150730
+
+Upgrading from Solr 5.3
+-----------------------
+
+* DefaultSimilarityFactory has been renamed to ClassicSimilarityFactory to match the underlying rename of
+ DefaultSimilarity to ClassicSimilarity and the (eventual) move away from using it as a default.
+ If you currently have DefaultSimilarityFactory explicitly referenced in your schema.xml, you will now get
+ a warning urging you to edit your config to use the functionally identical ClassicSimilarityFactory.
+ DefaultSimilarityFactory will be removed completely in Solr 6. See SOLR-8239 for more details.
+
+* SOLR-7859: The following APIs are now deprecated:
+ - SolrCore.getStartTime: Use SolrCore.getStartTimeStamp instead.
+ - SolrIndexSearcher.getOpenTime: Use SolrIndexSearcher.getOpenTimeStamp instead.
+
+* SOLR-8307: EmptyEntityResolver was moved from core to solrj, and moved from the org.apache.solr.util
+ package to org.apache.solr.common. If you are using this class, you will need to adjust the import package.
+
+* Logger declarations in most source files have changed to code that
+ no longer needs to explicitly state the class name. This fixes situations
+ where a logger for a different class was incorrectly used. See SOLR-8324
+ and its sub-issues for details.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-5756: A utility Collection API to move a collection from shared clusterstate.json (stateFormat=1,
+ default until 4.x) to the per-collection state.json stored in ZooKeeper (stateFormat=2,
+ default since 5.0) seamlessly without any application down-time.
+ Example:
+ http://localhost:8983/solr/admin/collections?action=MIGRATESTATEFORMAT&collection=<collection_name>
+ (Noble Paul, Scott Blum, shalin)
+
+* SOLR-7219: filterCache access added to the solr query syntax.
+ Example: description:HDTV OR filter(+promotion:tv +promotion_date:[NOW/DAY TO NOW/DAY+7DAY])
+ (yonik)
+
+* SOLR-7775: Allow fromIndex parameter to ScoreJoinQParserPlugin {!join score=.. fromIndex=..}..
+ to refer to a single-sharded collection that has a replica on all nodes where there is a
+ replica in the to index (Andrei Beliakov via Mikhail Khludnev)
+
+* SOLR-7961: Print Solr's version with command bin/solr version (janhoy)
+
+* SOLR-7789: Introduce a ConfigSet management API (Gregory Chanan)
+
+* SOLR-4316: Add a collections dropdown to angular admin UI (Upayavira, Shalin Shekhar Mangar)
+
+* SOLR-7915: Provide pluggable context tool support for VelocityResponseWriter (Erik Hatcher)
+
+* LUCENE-6795: SystemInfoHandler was improved to also show detailed operating
+ system statistics on IBM J9 virtual machines. It also no longer fails on Java 9
+ with Jigsaw module system. (Uwe Schindler)
+
+* SOLR-8053: Basic auth support in SolrJ (noble)
+
+* SOLR-7995: Add a LIST command to ConfigSets API (Gregory Chanan)
+
+* SOLR-4388: In Angular UI, add a Collections UI when in cloud mode (Upayavira)
+
+* SOLR-7858, SOLR-8199: Add links between original and new Admin UIs (Upayavira)
+
+* SOLR-7888: Analyzing suggesters can now filter suggestions by a context field (Arcadius Ahouansou, janhoy)
+
+* SOLR-8217: JSON Facet API: add "method" param to terms/field facets to give an execution
+ hint for what method should be used to facet. (yonik)
+
+* SOLR-8113: CloneFieldUpdateProcessorFactory now supports choosing a "dest" field name based on a regex
+ pattern and replacement init options. (Gus Heck, hossman)
+
+* SOLR-8139: Create/delete fields/dynamic fields/copy fields via schema tab on Angular UI
+
+* SOLR-8166: Introduce possibility to configure ParseContext in
+ ExtractingRequestHandler/ExtractingDocumentLoader (Andriy Binetsky
+ via Uwe Schindler)
+
+* SOLR-7569: A collection API to force elect a leader, called FORCELEADER, when all replicas in a shard are down
+ (Ishan Chattopadhyaya, Mark Miller, shalin, noble)
+
+* SOLR-6168: Add a 'sort' local param to the collapse QParser to support using complex sort options
+ to select the representitive doc for each collapsed group. (Umesh Prasad, hossman)
+
+* SOLR-8329: SchemaSimilarityFactory now supports a 'defaultSimFromFieldType' init option for using
+ a fieldType name to identify which Similarity to use as a default. (hossman)
+
+* SOLR-7912: Add boost support, and also exclude the queried document in MoreLikeThis QParser
+ (Jens Wille via Anshum Gupta)
+
+Bug Fixes
+----------------------
+
+* SOLR-7859: Fix usage of currentTimeMillis instead of nanoTime in multiple places,
+ whitelist valid uses of currentTimeMillis (Ramkumar Aiyengar)
+
+* SOLR-7836: Possible deadlock when closing refcounted index writers.
+ (Jessica Cheng Mallet, Erick Erickson, Mark Miller, yonik)
+
+* SOLR-7869: Overseer does not handle BadVersionException correctly and, in some cases,
+ can go into an infinite loop if cluster state in ZooKeeper is modified externally.
+ (Scott Blum, shalin)
+
+* SOLR-7920: Resolve XSS issue in Admin UI Schema Browser (David Chiu via Upayavira)
+
+* SOLR-7935: Fix very rare race condition that can cause an update to fail
+ via NullPointerException during a core reload. (yonik)
+
+* SOLR-7941: multivalued params are concatenated when using config API (noble)
+
+* SOLR-7956: There are interrupts on shutdown in places that can cause ChannelAlreadyClosed
+ exceptions which prevents proper closing of transaction logs, interfere with the IndexWriter,
+ the hdfs client and other things. (Mark Miller, Scott Blum)
+
+* SOLR-7954: Fixed an integer overflow bug in the HyperLogLog code used by the 'cardinality' option
+ of stats.field to prevent ArrayIndexOutOfBoundsException in a distributed search when a large precision
+ is selected and a large number of values exist in each shard (hossman)
+
+* SOLR-7844: Zookeeper session expiry during shard leader election can cause multiple leaders.
+ (Mike Roberts, Mark Miller, Jessica Cheng)
+
+* SOLR-7984: wrong and misleading error message 'no default request handler is registered' (noble, hossman)
+
+* SOLR-8001: Fixed bugs in field(foo,min) and field(foo,max) when some docs have no values
+ (David Smiley, hossman)
+
+* SOLR-7819: ZK connection loss or session timeout do not stall indexing threads anymore. All activity
+ related to leader initiated recovery is performed by a dedicated LIR thread in the background.
+ (Ramkumar Aiyengar, shalin)
+
+* SOLR-7746: Ping requests stopped working with distrib=true in Solr 5.2.1.
+ (Alexey Serba, Michael Sun via Gregory Chanan)
+
+* SOLR-6547: ClassCastException in SolrResponseBase.getQTime on update response from CloudSolrClient
+ when parallelUpdates is enabled (default) and multiple docs are sent as a single update.
+ (kevin, hossman, shalin)
+
+* SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl
+ can be accessed. (Upayavira, Steve Rowe, Anshum Gupta)
+
+* SOLR-8069: Ensure that only the valid ZooKeeper registered leader can put a replica into Leader
+ Initiated Recovery. (Mark Miller, Jessica Cheng, Anshum Gupta)
+
+* SOLR-8077: Replication can still cause index corruption. (Mark Miller)
+
+* SOLR-8104: Config API does not work for spellchecker (noble)
+
+* SOLR-8095: Allow disabling HDFS Locality Metrics and disable by default as it may have performance
+ implications on rapidly changing indexes. (Mike Drob via Mark Miller)
+
+* SOLR-8085: Fix a variety of issues that can result in replicas getting out of sync. (yonik, Mark Miller)
+
+* SOLR-8094: HdfsUpdateLog should not replay buffered documents as a replacement to dropping them.
+ (Mark Miller)
+
+* SOLR-8075: Leader Initiated Recovery should not stop a leader that participated in an election with all
+ of it's replicas from becoming a valid leader. (Mark Miller)
+
+* SOLR-8072: Rebalance leaders feature does not set CloudDescriptor#isLeader to false when bumping leaders.
+ (Mark Miller)
+
+* SOLR-7666: Many small fixes to Angular UI (Upayavira, Alexandre Rafalovitch)
+
+* SOLR-7967: AddSchemaFieldsUpdateProcessorFactory does not check if the ConfigSet is immutable (Gregory Chanan)
+
+* SOLR-6188: Skip the automatic loading of resources in the "lib" subdirectory
+ by SolrResourceLoader, but only if we are loading resources from the solr
+ home directory. Fixes the inability to use ICU analysis components with a
+ "solr." prefix on the classname. (Shawn Heisey)
+
+* SOLR-8130: Solr's hdfs safe mode detection does not catch all cases of being in safe mode.
+ (Mark Miller, Mike Drob)
+
+* SOLR-8128: Set v.locale specified locale for all LocaleConfig extending VelocityResponseWriter tools.
+ (Erik Hatcher)
+
+* SOLR-8152: Overseer Task Processor/Queue can miss responses, leading to timeouts.
+ (Gregory Chanan)
+
+* SOLR-8107: bin/solr -f should use exec to start the JVM (Martijn Koster via Timothy Potter)
+
+* SOLR-8050: Partial update on document with multivalued date field fails to parse date and can
+ also fail to remove dates in some cases. (Burkhard Buelte, Luc Vanlerberghe, shalin)
+
+* SOLR-8167: Authorization framework does not work with POST params (noble)
+
+* SOLR-8162: JmxMonitoredMap#clear triggers a query on all the MBeans thus generating lots of warnings.
+ (Marius Dumitru Florea, shalin)
+
+* SOLR-7843: DataImportHandler's delta imports leak memory because the delta keys are kept in memory
+ and not cleared after the process is finished. (Pablo Lozano via shalin)
+
+* SOLR-8189: eTag calculation during HTTP Cache Validation uses unsynchronized WeakHashMap causing
+ threads to be stuck in runnable state. (shalin)
+
+* SOLR-7993: Raw json output for fields stopped working in 5.3.0 when requested fields do not include
+ the unique key field name. (Bill Bell, Ryan McKinley via shalin)
+
+* SOLR-8192: JSON Facet API allBuckets:true did not work correctly when faceting
+ on a multi-valued field with sub-facets / facet functions. (yonik)
+
+* SOLR-8206: JSON Facet API limit:0 did not always work correctly. (yonik)
+
+* SOLR-8126: update-<component-name> does not work if the component is only
+ present in solrconfig.xml (noble)
+
+* SOLR-8203: Stop processing updates more quickly on node shutdown. When a node
+ is shut down, streaming updates would continue, but new update requests would
+ be aborted. This can cause big update reorders that can cause replicas to
+ get out of sync. (Mark Miller, yonik)
+
+* SOLR-6406: ConcurrentUpdateSolrClient hang in blockUntilFinished. If updates are still
+ flowing and shutdown is called on the executor service used by ConcurrentUpdateSolrClient,
+ a race condition can cause that client to hang in blockUntilFinished.
+ (Mark Miller, yonik)
+
+
+* SOLR-8215: Only active replicas should handle incoming requests against a collection (Varun Thacker)
+
+* SOLR-8223: Avoid accidentally swallowing OutOfMemoryError (in LeaderInitiatedRecoveryThread.java
+ or CoreContainer.java) (Mike Drob via Christine Poerschke)
+
+* SOLR-8255: MiniSolrCloudCluster needs to use a thread-safe list to keep track
+ of its child nodes (Alan Woodward)
+
+* SOLR-8254: HttpSolrCore.getCoreByCollection() can throw NPE (Alan Woodward,
+ Mark Miller)
+
+* SOLR-8262: Comment out /stream handler from sample solrconfig.xml's for security reasons
+ (Joel Bernstein)
+
+* SOLR-7989: After a new leader is elected it should change it's state to ACTIVE even
+ if the last published state is something else if it has already registered with ZK.
+ (Ishan Chattopadhyaya, Mark Miller via noble)
+
+* SOLR-8287: TrieDoubleField and TrieLongField now override toNativeType
+ (Ishan Chattopadhyaya via Christine Poerschke)
+
+* SOLR-8284: JSON Facet API - fix NPEs when short form "sort:index" or "sort:count"
+ are used. (Michael Sun via yonik)
+
+* SOLR-8295: Fix NPE in collapse QParser when collapse field is missing from all docs in a segment (hossman)
+
+* SOLR-8280: Fixed bug in SimilarityFactory initialization that prevented SolrCoreAware factories -- such
+ as SchemaSimilarityFactory -- from functioning properly with managed schema features. (hossman)
+
+* SOLR-5971: Fix error 'Illegal character in query' when proxying request.
+ (Uwe Schindler, Ishan Chattopadhyaya, Eric Bus)
+
+* SOLR-8307: Fix XXE vulnerability in MBeansHandler "diff" feature (Erik Hatcher)
+
+* SOLR-8073: Solr fails to start on Windows with obscure errors when using relative path.
+ (Alexandre Rafalovitch, Ishan Chattopadhyaya via shalin)
+
+* SOLR-7169: bin/solr status should return exit code 3, not 0 if Solr is not running
+ (Dominik Siebel via Timothy Potter)
+
+* SOLR-8341: Fix JSON Facet API excludeTags when specified in the
+ form of domain:{excludeTags:mytag} (yonik)
+
+* SOLR-8326: If BasicAuth enabled, inter node requests fail after node restart (noble, Anshum Gupta)
+
+* SOLR-8340: Fixed NullPointerException in HighlightComponent.
+ (zengjie via Christine Poerschke)
+
+* SOLR-8355: update permissions were failing node recovery (noble , Anshum Gupta)
+
+Optimizations
+----------------------
+
+* SOLR-7918: Filter (DocSet) production from term queries has been optimized and
+ is anywhere from 20% to over 100% faster and produces less garbage on average.
+ (yonik)
+
+* SOLR-6760: New optimized DistributedQueue implementation for overseer increases
+ message processing performance by ~470%.
+ (Noble Paul, Scott Blum, shalin)
+
+* SOLR-6629: Watch /collections zk node on all nodes so that cluster state updates
+ are more efficient especially when cluster has a mix of collections in stateFormat=1
+ and stateFormat=2. (Scott Blum, shalin)
+
+* SOLR-7971: Reduce memory allocated by JavaBinCodec to encode small strings by an amount
+ equal to the string.length(). JavaBinCodec now uses a double pass approach to write strings
+ larger than 64KB to avoid allocating buffer memory equal to string's UTF8 size.
+ (yonik, Steve Rowe, Mikhail Khludnev, Noble Paul, shalin)
+
+* SOLR-7983: Utils.toUTF8 uses larger buffer than necessary for holding UTF8 data. (shalin)
+
+* SOLR-8222: JSON Facet API optimization to faceting by count on docvalue fields (or indexed fields
+ with method=dv) when there are multiple hits expected for enoug buckets. For example, this
+ more than doubled the performance of faceting 5M documents over a field with 1M unique values.
+ (yonik)
+
+* SOLR-8288: DistributedUpdateProcessor#doFinish should explicitly check and ensure it
+ does not try to put itself into LIR. (Mark Miller)
+
+Other Changes
+----------------------
+
+* SOLR-8294: Cleanup solrconfig.xmls under solr/example/example-DIH/solr (removed
+ obsolete clustering handler sections). (Dawid Weiss)
+
+* SOLR-7969: Unavailable clustering engines should not fail the core. (Dawid Weiss)
+
+* SOLR-7790, SOLR-7791: Update Carrot2 clustering component to
+ version 3.10.4. Upgrade HPPC library to version 0.7.1. (Dawid Weiss)
+
+* SOLR-7831: Start Scripts: Allow a configurable stack size [-Xss] (Steve Davids via Mark Miller)
+
+* SOLR-7870: Write a test which asserts that requests to stateFormat=2 collection succeed on a node
+ even after all local replicas of that collection have been removed.
+ (Scott Blum via shalin)
+
+* SOLR-7902: Split out use of child timers from RTimer to a sub-class
+ (Ramkumar Aiyengar)
+
+* SOLR-7943: Upgrade Jetty to 9.2.13.v20150730. (Bill Bell, shalin)
+
+* SOLR-7007: DistributedUpdateProcessor now logs replay flag as boolean instead of int
+ (Mike Drob via Christine Poerschke)
+
+* SOLR-7960: Start scripts now gives generic help for bin/solr -h and bin/solr --help (janhoy)
+
+* SOLR-7970: Factor out a SearchGroupsFieldCommandResult class.
+ (Christine Poerschke)
+
+* SOLR-7942: Previously removed unlockOnStartup option (LUCENE-6508) now logs warning if configured,
+ will be an error in 6.0. Also improved error msg if an index is locked on startup (hossman)
+
+* SOLR-7979: Fix two typos (in a CoreAdminHandler log message and a TestCloudPivotFacet comment).
+ (Mike Drob via Christine Poerschke)
+
+* SOLR-7966: Solr Admin UI Solr now sets the HTTP header X-Frame-Options to DENY
+ to avoid clickjacking. (yonik)
+
+* SOLR-7999: SolrRequestParser tests no longer depend on external URLs
+ that may fail to work. (Uwe Schindler)
+
+* SOLR-8034: Leader no longer puts replicas in recovery in case of a failed update, when minRF
+ isn't achieved. (Jessica Cheng, Timothy Potter, Anshum Gupta)
+
+* SOLR-8066: SolrCore.checkStale method doesn't restore interrupt status. (shalin)
+
+* SOLR-8068: Throw a SolrException if the core container has initialization errors or is
+ shutting down (Ishan Chattopadhyaya, Noble Paul, Anshum Gupta)
+
+* SOLR-8083: Convert the ZookeeperInfoServlet to a handler at /admin/zookeeper (noble)
+
+* SOLR-8025: remove unnecessary ResponseBuilder.getQueryCommand() calls (Christine Poerschke)
+
+* SOLR-8150: Fix build failure due to too much output from QueryResponseTest (janhoy)
+
+* SOLR-8151: OverseerCollectionMessageHandler was logging info data as WARN
+ (Alan Woodward)
+
+* SOLR-8116: SearchGroupsResultTransformer tweaks (String literals, list/map initialCapacity)
+ (Christine Poerschke)
+
+* SOLR-8114: in Grouping.java rename groupSort and sort to withinGroupSort and groupSort
+ (Christine Poerschke)
+
+* SOLR-8074: LoadAdminUIServlet directly references admin.html (Mark Miller, Upayavira)
+
+* SOLR-8195: IndexFetcher download trace now includes bytes-downloaded[-per-second]
+ (Christine Poerschke)
+
+* SOLR-4854: Add a test to assert that [elevated] DocTransfer works correctly with javabin
+ response format. (Ray, shalin)
+
+* SOLR-8196: TestMiniSolrCloudCluster.testStopAllStartAll case plus necessary
+ MiniSolrCloudCluster tweak (Christine Poerschke)
+
+* SOLR-8221: MiniSolrCloudCluster should create subdirectories for its nodes
+ (Alan Woodward)
+
+* SOLR-8218: DistributedUpdateProcessor (initialCapacity) tweaks
+ (Christine Poerschke)
+
+* SOLR-8147: contrib/analytics FieldFacetAccumulator now throws IOException instead of SolrException
+ (Scott Stults via Christine Poerschke)
+
+* SOLR-8239: Added ClassicSimilarityFactory, marked DefaultSimilarityFactory as deprecated. (hossman)
+
+* SOLR-8253: AbstractDistribZkTestBase can sometimes fail to shut down its
+ ZKServer (Alan Woodward)
+
+* SOLR-8260: Use NIO2 APIs in core discovery (Alan Woodward)
+
+* SOLR-8259: Deprecate JettySolrRunner.getDispatchFilter(), add
+ .getSolrDispatchFilter() and .getCoreContainer() (Alan Woodward)
+
+* SOLR-8278: Use NIO2 APIs in ConfigSetService (Alan Woodward)
+
+* SOLR-8286: Remove instances of solr.hdfs.blockcache.write.enabled from tests
+ and docs (Gregory Chanan)
+
+* SOLR-8269: Upgrade commons-collections to 3.2.2. This fixes a known serialization vulnerability (janhoy)
+
+* SOLR-8246: Fix SolrCLI to clean the config directory in case creating a core failed.
+ (Jason Gerlowski via Shai Erera)
+
+* SOLR-8290: remove SchemaField.checkFieldCacheSource's unused QParser argument (Christine Poerschke)
+
+* SOLR-8300: Use constants for the /overseer_elect znode (Varun Thacker)
+
+* SOLR-8283: factor out StrParser from QueryParsing.StrParser and SortSpecParsing[Test]
+ from QueryParsing[Test] (Christine Poerschke)
+
+* SOLR-8298: small preferLocalShards implementation refactor (Christine Poerschke)
+
+* SOLR-8315: Removed default core checks in the dispatch filter since we don't have a default
+ core anymore (Varun Thacker)
+
+* SOLR-8302: SolrResourceLoader now takes a Path as its instance directory (Alan
+ Woodward, Shawn Heisey)
+
+* SOLR-8303: CustomBufferedIndexInput now includes resource description when
+ throwing EOFException. (Mike Drob via Uwe Schindler)
+
+* SOLR-8194: Improve error reporting for null documents in UpdateRequest (Markus
+ Jelsma, Alan Woodward)
+
+* SOLR-8277: (Search|Top)GroupsFieldCommand tweaks (Christine Poerschke)
+
+* SOLR-8299: ConfigSet DELETE operation no longer allows deletion of config sets that
+ are currently in use by other collections (Anshum Gupta)
+
+* SOLR-8101: Improve Linux service installation script (Sergey Urushkin via Timothy Potter)
+
+* SOLR-8180: jcl-over-slf4j should have officially been a SolrJ dependency; it now is.
+ (David Smiley, Kevin Risden)
+
+* SOLR-8330: Standardize and fix logger creation and usage so that they aren't shared
+ across source files.(Jason Gerlowski, Uwe Schindler, Anshum Gupta)
+
+* SOLR-8363: Fix check-example-lucene-match-version Ant task and addVersion.py script to
+ check and update luceneMatchVersion under solr/example/ configs as well logic. (Varun Thacker)
+
+================== 5.3.2 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-8460: /analysis/field could throw exceptions for custom attributes. (David Smiley, Uwe Schindler)
+
+* SOLR-8373: KerberosPlugin: Using multiple nodes on same machine leads clients to
+ fetch TGT for every request (Ishan Chattopadhyaya via noble)
+
+* SOLR-8340: Fixed NullPointerException in HighlightComponent. (zengjie via Christine Poerschke)
+
+* SOLR-8059: &debug=results for distributed search when distrib.singlePass (sometimes activated
+ automatically) could result in an NPE. (David Smiley, Markus Jelsma)
+
+* SOLR-8167: Authorization framework does not work with POST params (noble)
+
+* SOLR-8355: update permissions were failing node recovery (noble , Anshum Gupta)
+
+* SOLR-8326: If BasicAuth enabled, inter node requests fail after node restart (noble, Anshum Gupta)
+
+* SOLR-8269: Upgrade commons-collections to 3.2.2. This fixes a known serialization vulnerability (janhoy)
+
+* SOLR-8422: When authentication enabled, requests fail if sent to a node that doesn't host
+ the collection (noble)
+
+* SOLR-8496: SolrIndexSearcher.getDocSet(List<Query>) incorrectly included deleted documents
+ when all of the queries were uncached (or there was no filter cache). This caused
+ multi-select faceting (including the JSON Facet API) to include deleted doc counts
+ when the remaining non-excluded filters were all uncached. This bug was first introduced in 5.3.0
+ (Andreas Müller, Vasiliy Bout, Erick Erickson, Shawn Heisey, Hossman, yonik)
+
+
+================== 5.3.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-7949: Resolve XSS issue in Admin UI stats page (David Chiu via janhoy)
+
+* SOLR-8000: security.json is not loaded on server start (noble)
+
+* SOLR-8004: RuleBasedAuthorization plugin does not work for the collection-admin-edit permission (noble)
+
+* SOLR-7972: Fix VelocityResponseWriter template encoding issue.
+ Templates must be UTF-8 encoded. (Erik Hatcher)
+
+* SOLR-7929: SimplePostTool (also bin/post) -filetypes "*" now works properly in 'web' mode (Erik Hatcher)
+
+* SOLR-7978: Fixed example/files update-script.js to be Java 7 and 8 compatible. (Erik Hatcher)
+
+* SOLR-7988: SolrJ could not make requests to handlers with '/admin/' prefix (noble , ludovic Boutros)
+
+* SOLR-7990: Use of timeAllowed can cause incomplete filters to be cached and incorrect
+ results to be returned on subsequent requests. (Erick Erickson, yonik)
+
+* SOLR-8041: Fix VelocityResponseWriter's $resource.get(key,baseName,locale) to use specified locale.
+ (Erik Hatcher)
+
+================== 5.3.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.11.v20150529
+
+Upgrading from Solr 5.2
+-----------------------
+
+* SolrJ's CollectionAdminRequest class is now marked as abstract. Use one of its concrete
+ sub-classes instead.
+
+* Solr no longer supports forcefully unlocking an index.
+ This is no longer supported by the underlying Lucene locking
+ framework. The setting in solrconfig.xml has no effect anymore.
+ Background: If you use native lock factory, unlocking should
+ not be needed, because the locks are cleared after process
+ shutdown automatically by the operating system. If you are
+ using simple lock factory (not recommended) or hdfs lock
+ factory, you may need to manually unlock by deleting the lock
+ file from filesystem / HDFS.
+
+* The zkCredientialsProvider element in solrcloud section of solr.xml is now deprecated.
+ Use the correct spelling (zkCredentialsProvider) instead.
+
+* class TransformerWithContext is deprecated . Use DocTransformer directly
+
+* The "name" parameter in ADDREPLICA Collections API call has be deprecated. One cannot specify
+ the core name for a replica. See SOLR-7499 for more info.
+
+* The ShardHandler interface has changed. The interface used to provide a
+ `checkDistributed` function which doubled up in purpose to determine if the
+ request is distributed, and to prepare for distributed requests. This unfortunately
+ meant that the object had to be instantiated even when the request is not
+ distributed. The task of initially determining if the request is distributed
+ is now done by SearchHandler using the distrib/shards parameters, and a
+ ShardHandler object is created only if the request is distributed. The interface
+ now has a `prepDistributed` function instead of the `checkDistributed` function,
+ which can then be used to prepare for the distributed request. Users with custom
+ ShardHandler implementations would need to modify their code to this effect.
+
+* The system property "solr.solrxml.location" is not supported any more. Now, solr.xml is first
+ looked up in zookeeper, and if not found, fallback to SOLR_HOME. See SOLR-7735 for more info.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-7724: SolrJ now supports parsing the output of the clustering component.
+ (Alessandro Benedetti via Dawid Weiss)
+
+* SOLR-7389: Expose znodeVersion property for each of the collections returned for the clusterstatus
+ operation in the collections API (Marius Grama via shalin)
+
+* SOLR-7622: A DocTransformer can now request fields from the SolrIndexSearcher that are not
+ necessarily returned in the file SolrDocument by returning a list of fields from
+ DocTransformer#getExtraRequestFields (ryan)
+
+* SOLR-7458: Expose HDFS Block Locality Metrics via JMX (Mike Drob via Mark Miller)
+
+* SOLR-7676: Faceting on nested objects / Block-join faceting with the new JSON Facet API.
+ Example: Assuming books with nested pages and an input domain of pages, the following
+ will switch the domain to books before faceting on the author field:
+ authors:{ type:terms, field:author, domain:{toParent:"type:book"} }
+ (yonik)
+
+* SOLR-7668: Add 'port' tag support in replica placement rules (Adam McElwee, Noble Paul)
+
+* SOLR-5886: Response for an async call is now stored in zk so that it can be returned by the REQUESTSTATUS API.
+ Also, the number of stored (failed and successful) responses are now restricted to 10,000 each as a safety net.
+ (Anshum Gupta)
+
+* SOLR-7639: MoreLikeThis QParser now supports all options provided by the MLT Handler i.e. mintf, mindf,
+ minwl, maxwl, maxqt, and maxntp.
+
+* SOLR-7182: Make the Schema-API a first class citizen of SolrJ. The new SchemaRequest and its inner
+ classes can be used to make requests to the Schema API. (Sven Windisch, Marius Grama via shalin)
+
+* SOLR-7651: New response format added wt=smile (noble)
+
+* SOLR-4212: SOLR-6353: Let facet queries and facet ranges hang off of pivots. Example:
+ facet.range={!tag=r1}price&facet.query={!tag=q1}somequery&facet.pivot={!range=r1 query=q1}category,manufacturer
+ (Steve Molloy, hossman, shalin)
+
+* SOLR-7742: Support for Immutable ConfigSets (Gregory Chanan)
+
+* SOLR-2522: new two argument option for the existing field() function; picks the min/max value of a
+ docValues field to use as a ValueSource: "field(field_name,min)" and "field(field_name,max)" (hossman)
+
+* SOLR-6234: Scoring for query time join (Mikhail Khludnev)
+
+* SOLR-5882: score local parameter for block join query parser {!parent} (Andrey Kudryavtsev, Mikhail Khludnev)
+
+* SOLR-7799: Added includeIndexFieldFlags (backwards compatible default is true) to /admin/luke.
+ When there are many fields in the index, setting this flag to false can dramatically speed up requests. (ehatcher)
+
+* SOLR-7769: Add bin/post -p alias for -port parameter. (ehatcher)
+
+* SOLR-7766: support creation of a coreless collection via createNodeSet=EMPTY (Christine Poerschke)
+
+* SOLR-7849: Solr-managed inter-node authentication when authentication enabled (Noble Paul)
+
+* SOLR-7220: Nested C-style comments in queries. (yonik)
+
+* SOLR-7757: Improved security framework where security components can be edited/reloaded, Solr
+ now watches /security.json. Components can choose to make their config editable
+ (Noble Paul, Anshum Gupta, Ishan Chattopadhyaya)
+
+* SOLR-7838: An authorizationPlugin interface where the access control rules are stored/managed in
+ ZooKeeper (Noble Paul, Anshum Gupta, Ishan Chattopadhyaya)
+
+* SOLR-7837: An AuthenticationPlugin which implements the HTTP BasicAuth protocol and stores credentials
+ securely in ZooKeeper (Noble Paul, Anshum Gupta,Ishan Chattopadhyaya)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-7361: Slow loading SolrCores should not hold up all other SolrCores that have finished loading from serving
+ requests. (Mark Miller, Timothy Potter, Ramkumar Aiyengar)
+
+* SOLR-4506: Clean-up old (unused) index directories in the background after initializing a new index;
+ previously, Solr would leave old index.yyyyMMddHHmmssSSS directories left behind after failed recoveries
+ in the data directory, which unnecessarily consumes disk space. (Mark Miller, Timothy Potter)
+
+* SOLR-7108: Change default query used by /admin/ping to not rely on other parameters such as query parser or
+ default field. (ehatcher)
+
+* SOLR-6835: ReRankQueryParserPlugin checks now whether the reRankQuery parameter is present and not empty.
+ (帅广应, Marius Grama via shalin)
+
+* SOLR-7566: Search requests should return the shard name that is down. (Marius Grama, shalin)
+
+* SOLR-7675: Add missing _root_ field to managed-schema template so that the default data driven
+ config set can index nested documents by default. (yonik)
+
+* SOLR-7635: Limit lsof port check in bin/solr to just listening ports
+ (Upayavira, Ramkumar Aiyengar)
+
+* SOLR-7091: Nested documents with unknown fields don't work in schemaless mode.
+ (Steve Rowe)
+
+* SOLR-7682: Schema API: add-copy-field should accept the maxChars parameter. (Steve Rowe)
+
+* SOLR-7693: Fix the bin/solr -e cloud example to work if lsof is not installed
+ on the local machine by waiting for 10 seconds before starting the second node.
+ (hossman, Timothy Potter)
+
+* SOLR-7689: ReRankQuery rewrite method can change the QueryResultKey causing cache misses.
+ (Emad Nashed, Yonik Seeley, Joel Bernstein)
+
+* SOLR-7697: Schema API doesn't take class or luceneMatchVersion attributes into
+ account for the analyzer when adding a new field type. (Marius Grama, Steve Rowe)
+
+* SOLR-7679: Schema API doesn't take similarity attribute into account when adding
+ field types. (Marius Grama, Steve Rowe)
+
+* SOLR-7664: Throw correct exception (RemoteSolrException) on receiving a HTTP 413.
+ (Ramkumar Aiyengar, Eirik Lygre)
+
+* SOLR-6686: facet.threads can return wrong results when using facet.prefix multiple
+ times on same field. (Michael Ryan, Tim Underwood via shalin)
+
+* SOLR-7673: Race condition in shard splitting can cause operation to hang indefinitely
+ or sub-shards to never become active. (shalin)
+
+* SOLR-7741: Add missing fields to SolrIndexerConfig.toMap
+ (Mike Drob, Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7748: Fix bin/solr to start on IBM J9. (Shai Erera)
+
+* SOLR-7143: MoreLikeThis Query parser should handle multiple field names
+ (Jens Wille, Anshum Gupta)
+
+* SOLR-7132: The Collections API ADDREPLICA command property.name is not reflected
+ in the clusterstate until after Solr restarts (Erick Erickson)
+
+* SOLR-7172: addreplica API fails with incorrect error msg "cannot create collection"
+ (Erick Erickson)
+
+* SOLR-7705: CoreAdminHandler Unload no longer handles null core name and throws NPE
+ instead of a bad request error. (John Call, Edward Ribeiro via shalin)
+
+* SOLR-7529: CoreAdminHandler Reload throws NPE on null core name instead of a bad
+ request error. (Jellyfrog, Edward Ribeiro via shalin)
+
+* SOLR-7781: JSON Facet API: Terms facet on string/text fields with sub-facets caused
+ a bug that resulted in filter cache lookup misses as well as the filter cache
+ exceeding it's configured size. (yonik)
+
+* SOLR-7810: map-reduce contrib script to set classpath for convenience refers to example
+ rather than server. (Mark Miller)
+
+* SOLR-7765: Hardened the behavior of TokenizerChain when null arguments are used in constructor.
+ This prevents NPEs in some code paths. (Konstantin Gribov, hossman)
+
+* SOLR-7829: Fixed a bug in distributed pivot faceting that could result in a facet.missing=true count
+ which was lower then the correct count if facet.sort=index and facet.pivot.mincount > 1 (hossman)
+
+* SOLR-7842: ZK connection loss or session expiry events should not fire config directory listeners.
+ (noble, shalin)
+
+* SOLR-6357: Allow delete documents by doing a score join query. (Mikhail Khludnev, Timothy Potter)
+
+* SOLR-7756: Fixed ExactStatsCache and LRUStatsCache to not throw an NPE when a term is not present on a shard.
+ (Varun Thacker, Anshum Gupta)
+
+* SOLR-7818: Fixed distributed stats to be calculated for all the query terms. Earlier the stats were calculated with
+ the terms that are present in the last shard of a distributed request. (Varun Thacker, Anshum Gupta)
+
+* SOLR-7866: VersionInfo caused an unhandled NPE when trying to determine the max value for the
+ version field. (Timothy Potter)
+
+* SOLR-7666 (and linked tickets): Many fixes to AngularJS Admin UI bringing it close to feature
+ parity with existing UI. (Upayavira)
+
+* SOLR-7908: SegmentsInfoRequestHandler gets a ref counted IndexWriter and does not properly release it.
+ (Mark Miller, shalin)
+
+* SOLR-7921: The techproducts example fails when running in a directory that contains spaces.
+ (Ishan Chattopadhyaya via Timothy Potter)
+
+* SOLR-7934: SolrCLI masks underlying cause of create collection failure. (Timothy Potter)
+
+
+Optimizations
+----------------------
+
+* SOLR-7660: Avoid redundant 'exists' calls made to ZK while fetching cluster state updates. (shalin)
+
+* SOLR-7714: Reduce SearchHandler's use of ShardHandler objects across shards in a search,
+ from one for each shard and the federator, to just one for the federator.
+ (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7751: Minor optimizations to QueryComponent.process (reduce eager instantiations,
+ cache method calls) (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7455: Terms facets with the JSON Facet API now defer calculating non-sorting stats
+ until a second phase, after the top N facets are found. This improves performance
+ proportional to the number of non-sorting statistics being calculated in addition to
+ the number of buckets and domain documents.
+ For Example: The facet request {type:terms, field:field1, facet:{x:"unique(field2)"}}
+ saw a 7x improvement when field1 and 1M unique terms and field2 had 1000 unique terms.
+ (yonik)
+
+* SOLR-7840: ZkStateReader.updateClusterState fetches watched collections twice from ZK. (shalin)
+
+* SOLR-7875: Speedup SolrQueryTimeoutImpl. Avoid setting a timeout time when timeAllowed
+ parameter is not set. (Tomás Fernández Löbbe)
+
+Other Changes
+----------------------
+
+* SOLR-7787: Removed fastutil and java-hll dependency, integrated HyperLogLog from java-hll
+ into Solr core. (Dawid Weiss)
+
+* SOLR-7595: Allow method chaining for all CollectionAdminRequests in Solrj. (shalin)
+
+* SOLR-7146: MiniSolrCloudCluster based tests can fail with ZooKeeperException NoNode for /live_nodes.
+ (Vamsee Yarlagadda via shalin)
+
+* SOLR-7590: Finish and improve MDC context logging support. (Mark Miller)
+
+* SOLR-7599: Remove cruft from SolrCloud tests. (shalin)
+
+* SOLR-7636: CLUSTERSTATUS API is executed at CollectionsHandler (noble)
+
+* LUCENE-6508: Remove ability to forcefully unlock an index.
+ This is no longer supported by the underlying Lucene locking
+ framework. (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* SOLR-3719: Add as-you-type "instant search" to example/files /browse.
+ (Esther Quansah, ehatcher)
+
+* SOLR-7645: Remove explicitly defined request handlers from example and test solrconfig's that are
+ already defined implicitly, such as /admin/ping, /admin/system, and several others. (ehatcher)
+
+* SOLR-7603: Fix test only bug in UpdateRequestProcessorFactoryTest (hossman)
+
+* SOLR-7634: Upgrade Jetty to 9.2.11.v20150529 (Bill Bell, shalin)
+
+* SOLR-7659: Rename releaseCommitPointAndExtendReserve in DirectoryFileStream
+ to extendReserveAndReleaseCommitPoint, and reverse the code to match.
+ (shalin, Shawn Heisey)
+
+* SOLR-7624: Add correct spelling (zkCredentialsProvider) as an alternative to
+ zkCredientialsProvider element in solrcloud section of solr.xml.
+ (Xu Zhang, Per Steffensen, Ramkumar Aiyengar, Mark Miller)
+
+* SOLR-7619: Fix SegmentsInfoRequestHandlerTest when more than one segment is created.
+ (Ramkumar Aiyengar, Steve Rowe)
+
+* SOLR-7678: Switch RTimer to use nanoTime (improves accuracy of QTime, and other times
+ returned by Solr handlers) (Ramkumar Aiyengar)
+
+* SOLR-7680: Use POST instead of GET when finding versions for mismatches with
+ CloudInspectUtil for tests (Ramkumar Aiyengar)
+
+* SOLR-7665: deprecate the class TransformerWithContext (noble)
+
+* SOLR-7629: Have RulesTest consider disk space limitations of where the test is
+ being run (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7499: The "name" parameter in ADDREPLICA Collections API call has be deprecated. One cannot specify
+ the core name for a replica (Varun Thacker, noble, Erick Erickson)
+
+* SOLR-7711: Correct initial capacity for the list that holds the default components for the SearchHandler
+ (Christine Poerschke via Varun Thacker)
+
+* SOLR-7485: Replace shards.info occurrences with ShardParams.SHARDS_INFO
+ (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7710: Replace async occurrences with CommonAdminParams.ASYNC
+ (Christine Poerschke, Ramkumar Aiyengar)
+
+* SOLR-7712: fixed test to account for aggregate floating point precision loss (hossman)
+
+* SOLR-7740: Fix typo bug with TestConfigOverlay (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7750: Change TestConfig.testDefaults to cover all SolrIndexConfig fields
+ (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7703: Authentication plugin is now loaded using the ResourceLoader.
+ (Avi Digmi via Anshum Gupta)
+
+* SOLR-7800: JSON Facet API: the avg() facet function now skips missing values
+ rather than treating them as a 0 value. The def() function can be used to
+ treat missing values as 0 if that is desired.
+ Example: facet:{ mean:"avg(def(myfield,0))" }
+
+* SOLR-7805: Update Kite Morphlines to 1.1.0 (Mark Miller)
+
+* SOLR-7803: Prevent class loading deadlock in TrieDateField; refactor date
+ formatting and parsing out of TrieDateField and move to static utility class
+ DateFormatUtil. (Markus Heiden, Uwe Schindler)
+
+* SOLR-7825: Forbid all usages of log4j and java.util.logging classes in Solr except
+ classes which are specific to logging implementations. Remove accidental usage of log4j
+ logger from a few places. The default log level for org.apache.zookeeper is changed from
+ ERROR to WARN for zkcli.{sh,cmd} only.
+ (Oliver Schrenk, Tim Potter, Uwe Schindler, shalin)
+
+* SOLR-7735: Look for solr.xml in Zookeeper by default in SolrCloud mode. If not found, it will be loaded
+ from $SOLR_HOME/solr.xml as before. Sysprop solr.solrxml.location is now gone. (janhoy)
+
+* SOLR-7227: Ship Solr with the Web application directory exploded into
+ server/solr-webapp, solr.war is no longer included in the distribution
+ bundles. (Timothy Potter, Uwe Schindler)
+
+* SOLR-6625: Enable registering interceptors for the calls made using HttpClient and make the
+ request object available at the interceptor context ( Ishan Chattopadhyay, Gregory Chanan, noble, Anshum Gupta)
+
+* SOLR-5022: On Java 7 raise permgen for running tests. (Uwe Schindler)
+
+* SOLR-7823: TestMiniSolrCloudCluster.testCollectionCreateSearchDelete async collection-creation (sometimes)
+ (Christine Poerschke)
+
+* SOLR-7854: Remove unused ZkStateReader.updateClusterState(false) method. (Scott Blum via shalin)
+
+* SOLR-7863: Lowercase the CLUSTERPROP command in ZkCLI for consistency, print error for unknown cmd (janhoy)
+
+* SOLR-7832: bin/post now allows either -url or -c, rather than requiring both. (ehatcher)
+
+* SOLR-7847: Implement run example logic in Java instead of OS-specific scripts in
+ bin/solr and bin\solr.cmd (Timothy Potter)
+
+* SOLR-7877: TestAuthenticationFramework.testBasics to preserve/restore the original request(Username|Password)
+ (Christine Poerschke)
+
+* SOLR-7900: example/files improvements - added language detection and faceting, added title field, relocated .js files.
+ (Esther Quansah and Erik Hatcher)
+
+================== 5.2.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.10.v20150310
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-7588: Fix javascript bug introduced by SOLR-7409 that breaks the
+ dataimport screen in the admin UI. (Bill Bell via Shawn Heisey)
+
+* SOLR-7616: Faceting on a numeric field with a unique() subfacet function on another numeric field
+ can result in incorrect results or an exception. (yonik)
+
+* SOLR-7518: New Facet Module should respect shards.tolerant and process all non-failing shards
+ instead of throwing an exception. (yonik)
+
+* SOLR-7574: A request with a json content type but no body caused a null pointer exception (yonik)
+
+* SOLR-7512: SolrOutputFormat creates an invalid solr.xml in the solr home zip for MapReduceIndexerTool.
+ (Mark Miller, Adam McElwee)
+
+* SOLR-7652: Fix example/files update-script.js to work with Java 7 (ehatcher)
+
+* SOLR-7638: Fix new (Angular-based) admin UI Cloud pane (Upayavira via ehatcher)
+
+* SOLR-7655: The DefaultSolrHighlighter since 5.0 was determining if payloads were present in a way
+ that was slow, especially when lots of fields were highlighted. It's now fast. (David Smiley)
+
+* SOLR-7493: Requests aren't distributed evenly if the collection isn't present locally.
+ (Jeff Wartes, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-7623: Fix regression from SOLR-7484 that made it impossible to override
+ SolrDispatchFilter#execute() and SolrDispatchFilter#sendError(). You can now override these
+ functions in HttpSolrCall. (ryan)
+
+* SOLR-7648: Expose remote IP and Host via the AuthorizationContext to be used by the authorization plugin.
+ (Ishan Chattopadhyaya via Anshum Gupta)
+
+================== 5.2.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 9.2.10.v20150310
+
+Upgrading from Solr 5.1
+-----------------------
+
+* A bug was introduced in Solr 4.10 that caused index time document boosts to trigger excessive field
+ boosts in multivalued fields -- the result being that some field norms might be excessively large.
+ This bug has now been fixed, but users of document boosts are strongly encouraged to re-index.
+ See SOLR-7335 for more details.
+
+* The Slice and Replica classes have been changed to use State enums instead of string constants
+ to track the respective stats. Advanced users with client code manipulating these objects will
+ need to update their code accordingly. See SOLR-7325 and SOLR-7336 for more info.
+
+* Solr has internally been upgraded to use Jetty 9. See SOLR-4839 for full details, but there are
+ a few key details all Solr users should know when upgrading:
+
+ - It is no longer possible to run "java -jar start.jar" from inside the server directory.
+ The bin/solr script is the only supported way to run Solr. This is necessary to support
+ HTTP and HTTPS modules in Jetty which can be selectively enabled by the bin/solr scripts.
+ In case you have a pressing need to run solr the old way, you can run
+ "java -jar start.jar --module=http" to get the same behavior as before.
+
+ - The way SSL support is configured has been changed. Before this release,
+ the SOLR_SSL_OPTS property configured in solr.in.sh (linux/mac) or solr.in.cmd (windows)
+ was used to enable/disable SSL but starting in 5.2.0, new properties named as
+ SOLR_SSL_KEY_STORE, SOLR_SSL_KEY_STORE_PASSWORD, SOLR_SSL_TRUST_STORE,
+ SOLR_SSL_TRUST_STORE_PASSWORD, SOLR_SSL_NEED_CLIENT_AUTH and SOLR_SSL_WANT_CLIENT_AUTH
+ have been introduced. The bin/solr scripts configure the SOLR_SSL_OPTS property
+ automatically based on the above new properties.
+
+ You should *not* configure the SOLR_SSL_OPTS property directly inside solr.in.{sh,cmd}.
+
+ - Support for SOLR_SSL_PORT property has been removed. Instead use the regular SOLR_PORT
+ property or specify the port while invoking the bin/solr script using the "-p" switch.
+
+ - Furthermore, it is now possible to configure the HTTP client with
+ different SSL properties than the ones used for Jetty using the same files.
+
+ - Please refer to the "Enabling SSL" section in the Solr Reference Guide for complete details.
+
+* Support for pathPrefix has been completely removed from Solr. Since 5.0, Solr no longer officially
+ supports being run as a webapp but allowed users to play around with the web.xml to have a path prefix.
+ That would no longer be true. See SOLR-7500 for more info.
+
+* The package structure under org.apache.solr.client.solrj.io has been changed to support
+ the Streaming Expression Language (SOLR-7377). Any code written with the 5.1 Streaming API will have to
+ be updated to reflect these changes.
+
+* Merge Policy's "noCFSRatio" is no longer set based on <useCompoundFile> element in the indexConfig section
+ of solrconfig.xml. This means that Solr will start using Lucene's default for MP "noCFSRatio", with this
+ new default Solr will decide if a segment should use cfs or not based on the size of the segment in relation
+ the size of the complete index. For TieredMergePolicy for example (current default), segments will use cfs
+ if they are less than 10% of the index, otherwise cfs is disabled. Old values for this setting
+ (1.0 for useCompoundFile=true and 0.0 for useCompoundFile=false) as well as any other value can be set
+ inside the <mergePolicy> element in solrconfig.xml. <useCompoundFile> will only apply to newly created
+ segments. See SOLR-7463.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-6637: Restore a Solr core from a backed up index.
+ Restore API Example -
+ http://localhost:8983/solr/techproducts/replication?command=restore&name=backup_name
+ Restore Status API Example -
+ http://localhost:8983/solr/techproducts/replication?command=restorestatus
+ (Varun Thacker, noble, shalin)
+
+* SOLR-7241, SOLR-7263, SOLR-7279, SOLR-7300, SOLR-7396, SOLR-7397, SOLR-7492:
+ Admin UI - Refactoring using AngularJS. More functionality moving the Admin
+ UI to Angular JS (Upayavira via Erick)
+
+* SOLR-7372: Limit memory consumed by LRUCache with a new 'maxRamMB' config parameter.
+ (yonik, shalin)
+
+* SOLR-7376: Return raw XML or JSON (in the appropriate writer) using DocumentTransformers.
+ ?fl=id,name,json_s:[json],xml_s:[xml] (ryan)
+
+* SOLR-7422: Optional flatter form for the JSON Facet API via a "type" parameter:
+ top_authors : { type:terms, field:author, limit:5 } is equivalent to
+ top_authors : { terms : { field:author, limit:5 } }
+ (yonik)
+
+* SOLR-7176: zkcli script can perfrom the CLUSTERPROP command without a running Solr cluster
+ (Hrishikesh Gadre, Per Steffensen, Noble Paul)
+
+* SOLR-7417: JSON Facet API - unique() is now implemented for numeric and date fields.
+ (yonik)
+
+* SOLR-7406: Add a new "facet.range.method" parameter to let users choose how to do range
+ faceting between an implementation based on filters (previous algorithm, using
+ "facet.range.method=filter") or DocValues ("facet.range.method=dv").
+ Input parameters and output of both methods are the same. (Tomás Fernández Löbbe)
+
+* SOLR-7473: Facet Module (Json Facet API) range faceting now supports the "mincount"
+ parameter in range facets to supress buckets less than that count. The default
+ for "mincount" remains 0 for range faceting.
+ Example: prices:{ type:range, field:price, mincount:1, start:0, end:100, gap:10 }
+ (yonik)
+
+* SOLR-7437: Make HDFS transaction log replication factor configurable. (Mark Miller)
+
+* SOLR-7477: Multi-select faceting support for the Facet Module via the "excludeTags"
+ parameter which disregards any matching tagged filters for that facet. Example:
+ & q=shoes
+ & fq={!tag=COLOR}color:blue
+ & json.facet={ colors:{type:terms, field:color, excludeTags=COLOR} }
+ (yonik)
+
+* SOLR-7231: DIH-TikaEntityprocessor, create lat-lon field from Metadata
+ (Tim Allison via Noble Paul)
+
+* SOLR-6220: Rule Based Replica Assignment during collection, shard creation
+ and replica creation (Noble Paul)
+
+* SOLR-6968: New 'cardinality' option for stats.field, uses HyperLogLog to efficiently
+ estimate the cardinality of a field w/bounded RAM. (hossman)
+
+* SOLR-4392: Make it possible to specify AES encrypted password in dataconfig.xml (Noble Paul)
+
+* SOLR-7461: stats.field now supports individual local params for 'countDistinct' and 'distinctValues'.
+ 'calcdistinct' is still supported as an alias for both options (hossman)
+
+* SOLR-7522: Facet Module - Implement field/terms faceting over single-valued
+ numeric fields. (yonik)
+
+* SOLR-7275: Authorization framework for Solr. It defines an interface and a mechanism to create,
+ load, and use an Authorization plugin. (Noble Paul, Ishan Chattopadhyaya, Anshum Gupta)
+
+* SOLR-7377: Solr Streaming Expressions (Dennis Gove, Joel Bernstein, Steven Bower)
+
+* SOLR-7553: Facet Analytics Module: new "hll" function that uses HyperLogLog to calculate
+ distributed cardinality. The original "unique" function is still available.
+ Example: json.facet={ numProducts : "hll(product_id)" }
+ (yonik)
+
+* SOLR-7546: bin/post (and SimplePostTool in -Dauto=yes mode) now sends rather than skips files
+ without a known content type, as "application/octet-stream", provided it still is in the
+ allowed filetypes setting. (ehatcher)
+
+* SOLR-7274: Pluggable authentication module in Solr. This defines an interface and a mechanism to create,
+ load, and use an Authentication plugin. (Noble Paul, Ishan Chattopadhyaya, Gregory Chanan, Anshum Gupta)
+
+* SOLR-7379: (experimental) New spatial RptWithGeometrySpatialField, based on CompositeSpatialStrategy,
+ which blends RPT indexes for speed with serialized geometry for accuracy. Includes a Lucene segment based
+ in-memory shape cache. (David Smiley)
+
+* SOLR-7465, SOLR-7610: New file indexing example, under example/files. (Esther Quansah, Erik Hatcher)
+
+* SOLR-7468: Kerberos authenticaion plugin for Solr. This would allow running a Kerberized Solr.
+ (Noble Paul, Ishan Chattopadhyaya, Gregory Chanan, Anshum Gupta)
+
+Bug Fixes
+----------------------
+
+* SOLR-6709: Fix QueryResponse to deal with the "expanded" section when using the XMLResponseParser
+ (Varun Thacker, Joel Bernstein)
+
+* SOLR-7066: autoAddReplicas feature has bug when selecting replacement nodes. (Mark Miller)
+
+* SOLR-7370: FSHDFSUtils#recoverFileLease tries to recover the lease every one second after
+ the first four second wait. (Mark Miller)
+
+* SOLR-7369: AngularJS UI insufficient URLDecoding in cloud/tree view (janhoy)
+
+* SOLR-7380: SearchHandler should not try to load runtime components in inform() (Noble Paul)
+
+* SOLR-7385: The clusterstatus API now returns the config set used to create a collection
+ inside a 'configName' key. (Shai Erera, shalin)
+
+* SOLR-7401: Fixed a NullPointerException when concurrently creating and deleting collections,
+ while accessing other collections. (Shai Erera)
+
+* SOLR-7412: Fixed range.facet.other parameter for distributed requests.
+ (Will Miller, Tomás Fernández Löbbe)
+
+* SOLR-6087: SolrIndexSearcher makes no DelegatingCollector.finish() call when IndexSearcher
+ throws an expected exception. (Christine Poerschke via shalin)
+
+* SOLR-7420: Overseer stats are not reset on loss of ZK connection. (Jessica Cheng, shalin)
+
+* SOLR-7392: Fix SOLR_JAVA_MEM and SOLR_OPTS customizations in solr.in.sh being ignored
+ (Ramkumar Aiyengar, Ere Maijala)
+
+* SOLR-7426: SolrConfig#getConfigOverlay does not clean up it's resources. (Mark Miller)
+
+* SOLR-6665: ZkController.publishAndWaitForDownStates can return before all local cores are
+ marked as 'down' if multiple replicas with the same core name exist in the cluster.
+ (shalin)
+
+* SOLR-7418: Check and raise a SolrException instead of an NPE when an invalid doc id is sent
+ to the MLTQParser. (Anshum Gupta)
+
+* SOLR-7443: Implemented range faceting over date fields in the new facet module
+ (JSON Facet API). (yonik)
+
+* SOLR-7440: DebugComponent does not return the right requestPurpose for pivot facet refinements.
+ (shalin)
+
+* SOLR-7408: Listeners set by SolrCores on config directories in ZK could be removed if collections
+ are created/deleted in paralle against the same config set. (Shai Erera, Anshum Gupta)
+
+* SOLR-7450: Fix edge case which could cause `bin/solr stop` to hang forever
+ (Ramkumar Aiyengar)
+
+* SOLR-7157: initParams must support tags other than appends, defaults and, invariants (Noble Paul)
+
+* SOLR-7387: Facet Module - distributed search didn't work when sorting terms
+ facet by min, max, avg, or unique functions. (yonik)
+
+* SOLR-7469: Fix check-licenses to correctly detect if start.jar.sha1 is incorrect (hossman)
+
+* SOLR-7449: solr/server/etc/jetty-https-ssl.xml hard codes the key store file and password rather
+ than pulling them from the sysprops defined in solr/bin/solr.in.{sh,cmd}
+
+* SOLR-7470: Fix sample data to eliminate file order dependency for successful indexing, also
+ fixed SolrCloudExampleTest to help catch this in the future. (hossman)
+
+* SOLR-7478: UpdateLog#close shuts down it's executor with interrupts before running it's close logic,
+ possibly preventing a clean close. (Mark Miller)
+
+* SOLR-7494: Facet Module - unique() facet function was wildly inaccurate for high cardinality
+ fields. (Andy Crossen, yonik)
+
+* SOLR-7502: start script should not try to create configset for .system collection (Noble Paul)
+
+* SOLR-7514: SolrClient.getByIds fails with ClassCastException (Tom Farnworth, Ramkumar Aiyengar)
+
+* SOLR-7531: config API shows a few keys merged together (Noble Paul)
+
+* SOLR-7542: Schema API: Can't remove single dynamic copy field directive
+ (Steve Rowe)
+
+* SOLR-7472: SortingResponseWriter does not log fl parameters that don't exist. (Joel Bernstein)
+
+* SOLR-7545: Honour SOLR_HOST parameter with bin/solr{,.cmd}
+ (Ishan Chattopadhyaya via Ramkumar Aiyengar)
+
+* SOLR-7503: Recovery after ZK session expiration should happen in parallel for all cores
+ using the thread-pool managed by ZkContainer instead of a single thread.
+ (Jessica Cheng Mallet, Timothy Potter, shalin, Mark Miller)
+
+* SOLR-7335: Fix doc boosts to no longer be multiplied in each field value in multivalued fields that
+ are not used in copyFields (Shingo Sasaki via hossman)
+
+* SOLR-7585: Fix NoSuchElementException in LFUCache resulting from heavy writes
+ making concurrent put() calls. (Maciej Zasada via Shawn Heisey)
+
+* SOLR-7587: Seeding bucket versions from index when the firstSearcher event fires has a race condition
+ that leads to an infinite wait on VersionInfo's ReentrantReadWriteLock because the read-lock acquired
+ during a commit cannot be upgraded to a write-lock needed to block updates; solution is to move the
+ call out of the firstSearcher event path and into the SolrCore constructor. (Timothy Potter)
+
+* SOLR-7625: Ensure that the max value for seeding version buckets is updated after recovery even if
+ the UpdateLog is not replayed. (Timothy Potter)
+
+* SOLR-7610: Fix VelocityResponseWriter's $resource.locale to accurately report locale in use.
+ (ehatcher)
+
+* SOLR-7614: Distributed pivot facet refinement was broken due to a single correlation counter
+ used across multiple requests as if it was private to each request. (yonik)
+
+
+Optimizations
+----------------------
+
+* SOLR-7324: IndexFetcher does not need to call isIndexStale if full copy is already needed
+ (Stephan Lagraulet via Varun Thacker)
+
+* SOLR-7547: Short circuit SolrDisptachFilter for static content request. Right now it creates
+ a new HttpSolrCall object and tries to process it. (Anshum Gupta)
+
+* SOLR-7333: Make the poll queue time a leader uses when distributing updates to replicas
+ configurable and use knowledge that a batch is being processed to poll efficiently.
+ (Timothy Potter)
+
+* SOLR-7332: Initialize the highest value for all version buckets with the max value from
+ the index or recent updates to avoid unnecessary lookups to the index to check for reordered
+ updates when processing new documents. (Timothy Potter, yonik)
+
+* SOLR-5855: DefaultSolrHighlighter now re-uses the document's term vectors instance when highlighting
+ more than one field. Applies to the standard and FVH highlighters. (David Smiley, Daniel Debray)
+
+Other Changes
+----------------------
+
+* SOLR-6865: Upgrade HttpClient to 4.4.1 (Shawn Heisey)
+
+* SOLR-7358: TestRestoreCore fails in Windows (Ishan Chattopadhyaya via Varun Thacker)
+
+* SOLR-7371: Make DocSet implement Accountable to estimate memory usage. (yonik, shalin)
+
+* SOLR-7381: Improve logging by adding node name in MDC in SolrCloud mode and adding MDC to
+ all thread pools. A new MDCAwareThreadPoolExecutor is introduced and usages of
+ Executors#newFixedThreadPool, #newSingleThreadExecutor, #newCachedThreadPool as well as
+ ThreadPoolExecutor directly is now forbidden in Solr. MDC keys are now exposed in thread
+ names automatically so that a thread dump can give hints on what the thread was doing.
+ Uncaught exceptions thrown by tasks in the pool are logged along with submitter's stack trace.
+ (shalin)
+
+* SOLR-7384: Fix spurious failures in FullSolrCloudDistribCmdsTest. (shalin)
+
+* SOLR-6692: Default highlighter changes:
+ - hl.maxAnalyzedChars now applies cumulatively on a multi-valied field.
+ - fragment ranking on a multi-valued field should be more relevant.
+ - hl.usePhraseHighlighter is now toggleable on a per-field basis.
+ - Much more extensible (get values from another source; return snippet scores and offsets).
+ - When using hl.maxMultiValuedToMatch with hl.preserveMulti, only count matched snippets.
+ (David Smiley)
+
+* SOLR-6886: Removed redundant size check and added missing calls to
+ DelegatingCollection.finish inside Grouping code. (Christine Poerschke via shalin)
+
+* SOLR-7421: RecoveryAfterSoftCommitTest fails frequently on Jenkins due to full index
+ replication taking longer than 30 seconds. (Timothy Potter, shalin)
+
+* SOLR-7081: Add new test case to test if create/delete/re-create collections work.
+ (Christine Poerschke via Ramkumar Aiyengar)
+
+* SOLR-7467: Upgrade t-digest to 3.1 (hossman)
+
+* SOLR-7471: Stop requiring docValues for interval faceting (Tomás Fernández Löbbe)
+
+* SOLR-7391: Use a time based expiration cache for one off HDFS FileSystem instances.
+ (Mark Miller)
+
+* SOLR-5213: Log when shard splitting unexpectedly leads to documents going to
+ no or multiple shards (Christine Poerschke, Ramkumar Aiyengar)
+
+* SOLR-7425: Improve MDC based logging format. (Mark Miller)
+
+* SOLR-4839: Upgrade Jetty to 9.2.10.v20150310 and restlet-jee to 2.3.0
+ (Bill Bell, Timothy Potter, Uwe Schindler, Mark Miller, Steve Rowe, Steve Davids, shalin)
+
+* SOLR-7457: Make DirectoryFactory publishing MBeanInfo extensible.
+ (Mike Drob via Mark Miller)
+
+* SOLR-7325: Slice.getState() now returns a State enum instead of a String. This helps
+ clarify the states a Slice can be in, as well comparing the state of a Slice.
+ (Shai Erera)
+
+* SOLR-7336: Added Replica.getState() and removed ZkStateReader state-related constants.
+ You should use Replica.State to compare a replica's state. (Shai Erera)
+
+* SOLR-7487: Fix check-example-lucene-match-version Ant task to check luceneMatchVersion
+ in solr/server/solr/configsets instead of example and harden error checking / validation
+ logic. (hossman, Timothy Potter)
+
+* SOLR-7409: When there are multiple dataimport handlers defined, the admin UI
+ was listing them in a random order. Now they are sorted in a natural order
+ that handles numbers properly. (Jellyfrog via Shawn Heisey)
+
+* SOLR-7484: Refactor SolrDispatchFilter to extract all Solr specific implementation detail
+ to HttpSolrCall and also extract methods from within the current SDF.doFilter(..) logic
+ making things easier to manage. HttpSolrCall converts the processing to a 3-step process
+ i.e. Construct, Init, and Call so the context of the request would be available after Init
+ and before the actual call operation. (Anshum Gupta, Noble Paul)
+
+* SOLR-6878: Allow symmetric lists of synonyms to be added using the managed synonym REST
+ API to support legacy expand=true type mappings; previously the API only allowed adding
+ explicit mappings, with this feature you can now add a list and have the mappings
+ expanded when the update is applied (Timothy Potter, Vitaliy Zhovtyuk, hossman)
+
+* SOLR-7102: bin/solr should activate cloud mode if ZK_HOST is set (Timothy Potter)
+
+* SOLR-7500: Remove pathPrefix from SolrDispatchFilter as Solr no longer runs as a part
+ of a bigger webapp. (Anshum Gupta)
+
+* SOLR-7243: CloudSolrClient was always returning SERVER_ERROR for exceptions,
+ even when a more relevant ErrorCode was available, via SolrException. Now
+ the actual ErrorCode is used when available.
+ (Hrishikesh Gadre via Shawn Heisey)
+
+* SOLR-7544: CollectionsHandler refactored to be more modular (Noble Paul)
+
+* SOLR-7532: Removed occurrences of the unused 'commitIntervalLowerBound' property for
+ updateHandler elements from Solr configuration. (Marius Grama via shalin)
+
+* SOLR-7541: Removed CollectionsHandler#createNodeIfNotExists. All calls made to this method now call
+ ZkCmdExecutor#ensureExists as they were doing the same thing. Also ZkCmdExecutor#ensureExists now respects the
+ CreateMode passed to it. (Varun Thacker)
+
+* SOLR-6820: Make the number of version buckets used by the UpdateLog configurable as
+ increasing beyond the default 256 has been shown to help with high volume indexing
+ performance in SolrCloud; helps overcome a limitation where Lucene uses the request
+ thread to perform expensive index housekeeping work. (Mark Miller, yonik, Timothy Potter)
+
+* SOLR-7463: Stop forcing MergePolicy's "NoCFSRatio" based on the IWC "useCompoundFile" configuration
+ (Tomás Fernández Löbbe)
+
+* SOLR-7582: Allow auto-commit to be set with system properties in data_driven_schema_configs and
+ enable auto soft-commits for the bin/solr -e cloud example using the Config API.
+ (Timothy Potter)
+
+* SOLR-7183: Fix Locale blacklisting for Minikdc based tests. (Ishan Chattopadhyaya, hossman
+ via Anshum Gupta)
+
+* SOLR-7662: Refactored response writing to consolidate the logic in one place (Noble Paul)
+
+* SOLR-7110: Added option to optimize JavaBinCodec to minimize string Object creation (Noble Paul)
+
+================== 5.1.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 8.1.10.v20130312
+
+Upgrading from Solr 5.0
+-----------------------
+
+* SolrClient query functions now declare themselves as throwing IOException in
+ addition to SolrServerException, to bring them in line with the update
+ functions.
+
+* SolrRequest.process() is now final. Subclasses should instead be parameterized
+ by their corresponding SolrResponse type, and implement createResponse()
+
+* The signature of SolrDispatchFilter.createCoreContainer() has changed to take
+ (String,Properties) arguments
+
+* Deprecated the 'lib' option added to create-requesthandler as part of SOLR-6801 in 5.0 release.
+ Please use the add-runtimelib command
+
+* Tika's runtime dependency of 'jhighlight' was removed as the latter was found to
+ contain some LGPL-only code. Until that's resolved by Tika, you can download the
+ .jar yourself and place it under contrib/extraction/lib.
+
+* The _text catch-all field in data_driven_schema_configs has been renamed to _text_.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-6909: Extract atomic update handling logic into AtomicUpdateDocumentMerger class
+ and enable subclassing. (Steve Davids, yonik)
+
+* SOLR-6845: Add a “buildOnStartup†option for suggesters. (Tomás Fernández Löbbe)
+
+* SOLR-6449: Add first class support for Real Time Get in Solrj.
+ (Anurag Sharma, Steve Davids via shalin)
+
+* SOLR-6954: SolrClient now implements Closeable, and shutdown() has been
+ deprecated in favour of close(). (Mark Miller, Tomás Fernández Löbbe, Alan
+ Woodward)
+
+* SOLR-4905: Allow fromIndex parameter to JoinQParserPlugin to refer to a single-sharded
+ collection that has a replica on all nodes where there is a replica in the to index
+ (Jack Lo, Timothy Potter)
+
+* SOLR-6648: Add support in AnalyzingInfixLookupFactory and BlendedInfixLookupFactory
+ for setting 'highlight' and 'allTermsRequired' in the suggester configuration.
+ (Boon Low, Varun Thacker via Tomás Fernández Löbbe)
+
+* SOLR-7083: Support managing all named components in solrconfig such as
+ requestHandler, queryParser, queryResponseWriter, valueSourceParser,
+ transformer, queryConverter (Noble Paul)
+
+* SOLR-7005: Spatial 2D heatmap faceting on RPT fields via new facet.heatmap with PNG and
+ 2D int array formats. (David Smiley)
+
+* SOLR-7019: Support changing field key when using interval faceting.
+ (Tomás Fernández Löbbe)
+
+* SOLR-6832: Queries be served locally rather than being forwarded to another replica.
+ (Sachin Goyal, Timothy Potter)
+
+* SOLR-1945: Add support for child docs in DocumentObjectBinder (Noble Paul, Mark Miller)
+
+* SOLR-7125, SOLR-7158: You can upload and download configurations via CloudSolrClient
+ (Alan Woodward, Ishan Chattopadhyaya)
+
+* SOLR-5507: Admin UI - Refactoring using AngularJS, first part (Upayavira via
+ Erick Erickson)
+
+* SOLR-7164: BBoxField defaults sub fields to not-stored (ryan)
+
+* SOLR-7155,SOLR-7201: All SolrClient methods now take an optional 'collection' argument
+ (Alan Woodward, Shawn Heisey)
+
+* SOLR-6359: Allow number of logs and records kept by UpdateLog to be configured
+ (Ramkumar Aiyengar)
+
+* SOLR-7189: Allow DIH to extract content from embedded documents via Tika.
+ (Tim Allison via shalin)
+
+* SOLR-6841: Visualize lucene segment information in Admin UI.
+ (Alexey Kozhemiakin, Michal Bienkowski, hossman, Shawn Heisey, Varun Thacker via shalin)
+
+* SOLR-5846: EnumField supports DocValues functionality. (Elran Dvir, shalin)
+
+* SOLR-4044: CloudSolrClient.connect() throws a more useful exception if the
+ cluster is not ready, and can now take an optional timeout argument to wait
+ for the cluster. (Alan Woodward, shalin, yonik, Mark Miller, Vitaliy Zhovtyuk)
+
+* SOLR-7073: Support adding a jar to a collections classpath (Noble Paul)
+
+* SOLR-7126: Secure loading of runtime external jars (Noble Paul)
+
+* SOLR-6349: Added support for stats.field localparams to enable/disable individual stats to
+ limit the amount of computation done and the amount of data returned.
+ eg: stats.field={!min=true max=true}field_name
+ (Tomas Fernandez-Lobbe, Xu Zhang, hossman)
+
+* SOLR-7218: lucene/solr query syntax to give any query clause a constant score.
+ General Form: <clause>^=<constant_score>
+ Example: (color:blue color:green)^=2.0 text:shoes
+ (yonik)
+
+* SOLR-7214: New Facet module with a JSON API, facet functions, aggregations, and analytics.
+ Any facet type can have sub facets, and facets can be sorted by arbitrary aggregation functions.
+ Examples:
+ json.facet={x:'avg(price)', y:'unique(color)'}
+ json.facet={count1:{query:"price:[10 TO 20]"}, count2:{query:"color:blue AND popularity:[0 TO 50]"} }
+ json.facet={categories:{terms:{field:cat, sort:"x desc", facet:{x:"avg(price)", y:"sum(price)"}}}}
+ (yonik)
+
+* SOLR-6141: Schema API: Remove fields, dynamic fields, field types and copy
+ fields; and replace fields, dynamic fields and field types. (Steve Rowe)
+
+* SOLR-7217: HTTP POST body is auto-detected when the client is curl and the content
+ type is form data (curl's default), allowing users to use curl to send
+ JSON or XML without having to specify the content type. (yonik)
+
+* SOLR-6892: Update processors can now be top-level components and they can be
+ specified in request to create a new custom update chain (Noble Paul)
+
+* SOLR-7216: Solr JSON Request API:
+ - HTTP search requests can have a JSON body.
+ - JSON request can also be passed via the "json" parameter.
+ - Smart merging of multiple JSON parameters: ruery parameters starting with "json."
+ will be merged into the JSON request.
+ - Legacy query parameters can also be passed in the "params" block of
+ the JSON request.
+ (yonik)
+
+* SOLR-7245: Temporary ZK election or connection loss should not stall indexing
+ due to leader initiated recovery (Ramkumar Aiyengar)
+
+* SOLR-6350: StatsComponent now supports Percentiles (Xu Zhang, hossman)
+
+* SOLR-7306: Percentiles support for the new facet module. Percentiles
+ can be calculated for all facet buckets and field faceting can sort
+ by percentile values.
+ Examples:
+ json.facet={ median_age : "percentile(age,50)" }
+ json.facet={ salary_percentiles : "percentile(salary,25,50,75)" }
+ (yonik)
+
+* SOLR-7307: EmbeddedSolrServer can now be started up by passing a path to a
+ solr home directory, or a NodeConfig object (Alan Woodward, Mike Drob)
+
+* SOLR-1387: Add facet.contains and facet.contains.ignoreCase options (Tom Winch
+ via Alan Woodward)
+
+* SOLR-7082: Streaming Aggregation for SolrCloud (Joel bernstein, Yonik Seeley)
+
+* SOLR-7212: Parameter substitution / macro expansion across entire request.
+ Substitution can contain further expansions and default values are supported.
+ Example: q=price:[ ${low:0} TO ${high} ]&low=100&high=200
+ (yonik)
+
+* SOLR-7226: Make /query/* jmx/* , requestDispatcher/*, <listener> <initParams>
+ properties in solrconfig.xml editable (Noble Paul)
+
+* SOLR-7240: '/' redirects to '/solr/' for convenience (Martijn Koster, hossman)
+
+* SOLR-5911: Added payload support for term vectors. New "termPayloads" option for fields
+ / types in the schema, and "tv.payloads" param for the term vector component.
+ (Mike McCandless, David Smiley)
+
+* SOLR-5132: Added a new collection action MODIFYCOLLECTION (Noble Paul)
+
+Bug Fixes
+----------------------
+
+* SOLR-7046: NullPointerException when group.function uses query() function.
+ (Jim Musil via Erick Erickson)
+
+* SOLR-7072: Multiple mlt.fl does not work. (Constantin Mitocaru, shalin)
+
+* SOLR-6775: Creating backup snapshot results in null pointer exception.
+ (Ryan Hesson, Varun Thacker via shalin)
+
+* SOLR-5890: Delete silently fails if not sent to shard where document was
+ added (Ishan Chattopadhyaya, Noble Paul)
+
+* SOLR-7101: JmxMonitoredMap can throw an exception in clear when queryNames fails.
+ (Mark Miller, Wolfgang Hoschek)
+
+* SOLR-6214: Snapshots numberToKeep param only keeps n-1 backups.
+ (Mathias H., Ramana, Varun Thacker via shalin)
+
+* SOLR-7084: FreeTextSuggester: Better error message when doing a lookup
+ during dictionary build. Used to be nullpointer (janhoy)
+
+* SOLR-6956: OverseerCollectionProcessor and replicas on the overseer node can sometimes
+ operate on stale cluster state due to overseer holding the state update lock for a
+ long time. (Mark Miller, shalin)
+
+* SOLR-7104: Propagate property prefix parameters for ADDREPLICA Collections API call.
+ (Varun Thacker via Anshum Gupta)
+
+* SOLR-7113: Multiple calls to UpdateLog#init is not thread safe with respect to the
+ HDFS FileSystem client object usage. (Mark Miller, Vamsee Yarlagadda)
+
+* SOLR-7128: Two phase distributed search is fetching extra fields in GET_TOP_IDS phase.
+ (Pablo Queixalos, shalin)
+
+* SOLR-7139: Fix SolrContentHandler for TIKA to ignore multiple startDocument events.
+ (Chris A. Mattmann, Uwe Schindler)
+
+* SOLR-7178: OverseerAutoReplicaFailoverThread compares Integer objects using ==
+ (shalin)
+
+* SOLR-7171: BaseDistributedSearchTestCase now clones getSolrHome() for each subclass,
+ and consistently uses getSolrXml(). (hossman)
+
+* SOLR-6657: DocumentDictionaryFactory requires weightField to be mandatory, but it shouldn't
+ (Erick Erickson)
+
+* SOLR-7206: MiniSolrCloudCluster wasn't dealing with SSL mode correctly (Alan
+ Woodward)
+
+* SOLR-4464: DIH Processed documents counter resets to zero after first entity is processed.
+ (Dave Cook, Shawn Heisey, Aaron Greenspan, Thomas Champagne via shalin)
+
+* SOLR-7209: /update/json/docs carry forward fields from previous records (Noble Paul)
+
+* SOLR-7195: Fixed a bug where the bin/solr shell script would incorrectly
+ detect another Solr process listening on the same port number. If the
+ requested listen port was 8983, it would match on another Solr using port
+ 18983 for any purpose. Also escapes the dot character in all grep commands
+ looking for start.jar.
+ (Xu Zhang via Shawn Heisey)
+
+* SOLR-6682: Fix response when using EnumField with StatsComponent
+ (Xu Zhang via hossman)
+
+* SOLR-7109: Indexing threads stuck during network partition can put leader into down state.
+ (Mark Miller, Anshum Gupta, Ramkumar Aiyengar, yonik, shalin)
+
+* SOLR-7092: Stop the HDFS lease recovery retries in HdfsTransactionLog on close and try
+ to avoid lease recovery on closed files. (Mark Miller)
+
+* SOLR-7285: ActionThrottle will not pause if getNanoTime first returns 0.
+ (Mark Miller, Gregory Chanan)
+
+* SOLR-7141: RecoveryStrategy: Raise time that we wait for any updates from the leader before
+ they saw the recovery state to have finished. (Mark Miller)
+
+* SOLR-7248: In legacyCloud=false mode we should check if the core was hosted on the same node before registering it
+ (Varun Thacker, Noble Paul, Mark Miller)
+
+* SOLR-7294: Migrate API fails with 'Invalid status request: notfoundretried 6times' message.
+ (Jessica Cheng Mallet, shalin)
+
+* SOLR-7254: Make an invalid negative start/rows throw a HTTP 400 error (Bad Request) instead
+ of causing a 500 error. (Ramkumar Aiyengar, Hrishikesh Gadre, yonik)
+
+* SOLR-7305: BlendedInfixLookupFactory swallows root IOException when it occurs.
+ (Stephan Lagraulet via shalin)
+
+* SOLR-7293: Fix bug that Solr server does not listen on IPv6 interfaces by default.
+ (Uwe Schindler, Sebastian Pesman)
+
+* SOLR-7298: Fix Collections API calls (SolrJ) to not add name parameter when not needed.
+ (Shai Erera, Anshum Gupta)
+
+* SOLR-7134: Replication can still cause index corruption. (Mark Miller, shalin, Mike Drob)
+
+* SOLR-7309: Make bin/solr, bin/post work when Solr installation directory contains spaces
+ (Ramkumar Aiyengar, Martijn Koster)
+
+* SOLR-6924: The config API forcefully refreshes all replicas in the collection to ensure all are
+ updated (Noble Paul)
+
+* SOLR-7266: The IgnoreCommitOptimizeUpdateProcessor blocks commit requests from
+ replicas needing to recover. (Jessica Cheng Mallet, Timothy Potter)
+
+* SOLR-7299: bin\solr.cmd doesn't use jetty SSL configuration. (Steve Rowe)
+
+* SOLR-7334: Admin UI does not show "Num Docs" and "Deleted Docs". (Erick Erickson, Timothy Potter)
+
+* SOLR-7338, SOLR-6583: A reloaded core will never register itself as active after a ZK session expiration
+ (Mark Miller, Timothy Potter)
+
+* SOLR-7366: Can't index example XML docs into the cloud example using bin/post due to regression in
+ ManagedIndexSchema's handling of ResourceLoaderAware objects used by field types (Steve Rowe, Timothy Potter)
+
+* SOLR-7284: HdfsUpdateLog is using hdfs FileSystem.get without turning off the cache.
+ (Mark Miller)
+
+* SOLR-7286: Using HDFS's FileSystem.newInstance does not guarantee a new instance.
+ (Mark Miller)
+
+* SOLR-7508: SolrParams.toMultiMap() does not handle arrays (Thomas Scheffler , Noble Paul)
+
+Optimizations
+----------------------
+
+ * SOLR-7049: Move work done by the LIST Collections API call to the Collections
+ Handler (Varun Thacker via Anshum Gupta).
+
+ * SOLR-7116: Distributed facet refinement requests would needlessly compute other types
+ of faceting that have already been computed. (David Smiley, Hossman)
+
+ * SOLR-7239: improved performance of min & max in StatsComponent, as well as situations
+ where local params disable all stats (hossman)
+
+ * SOLR-7050: realtime get should internally load only fields specified in fl.
+ (yonik, Noble Paul)
+
+Other Changes
+----------------------
+
+* SOLR-7014: Collapse identical catch branches in try-catch statements. (shalin)
+
+* SOLR-6500: Refactor FileFetcher in SnapPuller, add debug logging.
+ (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-7076: In DIH, TikaEntityProcessor should have support for onError=skip
+ (Noble Paul)
+
+* SOLR-7094: Better error reporting of JSON parse issues when indexing docs
+ (Ishan Chattopadhyaya via Timothy Potter)
+
+* SOLR-7103: Remove unused method params in faceting code. (shalin)
+
+* SOLR-6311: When performing distributed queries, SearchHandler should use path
+ when no qt or shard.qt parameter is specified; fix also resolves SOLR-4479.
+ (Steve Molloy, Timothy Potter)
+
+* SOLR-7112: Fix DeleteInactiveReplicaTest.deleteLiveReplicaTest test failures.
+ (shalin)
+
+* SOLR-6902: Use JUnit rules instead of inheritance with distributed Solr
+ tests to allow for multiple tests without the same class.
+ (Ramkumar Aiyengar, Erick Erickson, Mike McCandless)
+
+* SOLR-7032: Clean up test remnants of old-style solr.xml (Erick Erickson)
+
+* SOLR-7145: SolrRequest is now parametrized by its response type (Alan
+ Woodward)
+
+* SOLR-7142: Fix TestFaceting.testFacets. (Michal Kroliczek via shalin)
+
+* SOLR-7156: Fix test failures due to resource leaks on windows.
+ (Ishan Chattopadhyaya via shalin)
+
+* SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests
+ are sent to shards during tests. (hossman, shalin)
+
+* SOLR-7160: Rename ConfigSolr to NodeConfig, and decouple it from xml
+ representation (Alan Woodward)
+
+* SOLR-7166: Encapsulate JettySolrRunner configuration (Alan Woodward)
+
+* SOLR-7130: Make stale state notification work without failing the requests
+ (Noble Paul, shalin)
+
+* SOLR-7151: SolrClient query methods throw IOException (Alan Woodward)
+
+* SOLR-7179: JettySolrRunner no longer passes configuration to
+ SolrDispatchFilter via system properties, but instead uses a Properties
+ object in the servlet context (Alan Woodward)
+
+* SOLR-6275: Improve accuracy of QTime reporting (Ramkumar Aiyengar)
+
+* SOLR-7174: DIH should reset TikaEntityProcessor so that it is capable
+ of re-use (Alexandre Rafalovitch , Gary Taylor via Noble Paul)
+
+* SOLR-6804: Untangle SnapPuller and ReplicationHandler (Ramkumar Aiyengar)
+
+* SOLR-7180: MiniSolrCloudCluster will startup and shutdown its jetties in
+ parallel (Alan Woodward, Tomás Fernández Löbbe, Vamsee Yarlagadda)
+
+* SOLR-7173: Fix ReplicationFactorTest on Windows by adding better retry
+ support after seeing no response exceptions. (Ishan Chattopadhyaya via Timothy Potter)
+
+* SOLR-7246: Speed up BasicZkTest, TestManagedResourceStorage (Ramkumar Aiyengar)
+
+* SOLR-7258: Forbid MessageFormat.format and MessageFormat single-arg constructor.
+ (shalin)
+
+* SOLR-7162: Remove unused SolrSortField interface. (yonik, Connor Warrington via shalin)
+
+* SOLR-6414: Update to Hadoop 2.6.0. (Mark Miller)
+
+* SOLR-6673: MDC based logging of collection, shard, replica, core
+ (Ishan Chattopadhyaya , Noble Paul)
+
+* SOLR-7291: Test indexing on ZK disconnect with ChaosMonkey tests (Ramkumar Aiyengar)
+
+* SOLR-7203: Remove buggy no-op retry code in HttpSolrClient (Alan Woodward,
+ Mark Miller, Greg Solovyev)
+
+* SOLR-7202: Remove deprecated string action types in Overseer and OverseerCollectionProcessor -
+ "deletecollection", "createcollection", "reloadcollection", "removecollection", "removeshard".
+ (Varun Thacker, shalin)
+
+* SOLR-7290: Rename catchall _text field in data_driven_schema_configs
+ to _text_ (Steve Rowe)
+
+* SOLR-7346: Stored XSS in Admin UI Schema-Browser page and Analysis page (Mei Wang via Timothy Potter)
+
+================== 5.0.0 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+NOTE: Solr 5.0 only supports creating and removing SolrCloud collections through
+ the collections API, unlike previous versions. While not using the
+ collections API may still work in 5.0, it is unsupported, not recommended,
+ and the behavior will change in a 5.x release.
+
+Versions of Major Components
+---------------------
+Apache Tika 1.7
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+Jetty 8.1.10.v20130312
+
+Upgrading from Solr 4.x
+----------------------
+
+* Apache Solr has no support for Lucene/Solr 3.x and earlier indexes anymore.
+ Be sure to run Lucene's IndexUpgrader on the previous 4.10 version if you might
+ still have old segments in your index. Alternatively fully optimize your index
+ with Solr 4.10 to make sure it consists only of one up-to-date index segment.
+
+* The "file" attribute of infoStream in solrconfig.xml is removed. Control this
+ via your logging configuration (org.apache.solr.update.LoggingInfoStream) instead.
+
+* UniqFieldsUpdateProcessorFactory no longer supports the <lst named="fields"> init
+ param style that was deprecated in Solr 4.5. If you are still using this syntax,
+ update your configs to use <arr name="fieldName"> instead. See SOLR-4249 for more
+ details.
+
+* The following legacy numeric and date field types, deprecated in Solr 4.8, are no
+ longer supported: BCDIntField, BCDLongField, BCDStrField, IntField, LongField,
+ FloatField, DoubleField, SortableIntField, SortableLongField, SortableFloatField,
+ SortableDoubleField, and DateField. Convert these types in your schema to the
+ corresponding Trie-based field type and then re-index. See SOLR-5936 for more
+ information.
+
+* getAnalyzer() in IndexSchema and FieldType that was deprecated in Solr 4.9 has
+ been removed. Use getIndexAnalyzer() instead. See SOLR-6022 for more information.
+
+* The spellcheck response format has changed, affecting xml and json clients. In
+ particular, the "correctlySpelled" and "collations" subsections have been moved outside
+ the "suggestions" subsection, and now are directly under "spellcheck".
+ See SOLR-3029 for more information.
+
+* The CollectionsAPI SolrJ calls createCollection(), reloadCollection(),
+ deleteCollection(), requestStatus(), createShard(), splitShard(), deleteShard(),
+ createAlias() and deleteAlias() which were deprecated in 4.11 have been removed.
+ The new usage involves a builder style construction of the call.
+
+* The OVERSEERSTATUS API returns new key names for operations such as "create"
+ for "createcollection", "delete" for "removecollection" and "deleteshard" for
+ "removeshard".
+
+* If you have been using the /update/json/docs to index documents, SOLR-6617 introduces
+ backward incompatible change. the key names created are fully qualified paths of keys .
+ If you need the old functionality back , please add an extra parameter f=/**
+ example: /update/json/docs?f=/**
+
+* Bugs fixed in several ValueSource functions may result in different behavior in
+ situations where some documents do not have values for fields wrapped in other value
+ sources. Users who want to preserve the previous behavior may need to wrap fields
+ in the "def()" function. Example: changing "fl=sum(fieldA,fieldB)" to
+ "fl=sum(def(fieldA,0.0),def(fieldB,0.0))". See LUCENE-5961 for more details.
+
+* AdminHandlers is deprecated, /admin/* are implicitly defined, /get, /replication and
+ handlers are also implicitly registered (refer to SOLR-6792)
+
+* SolrCore.reload(ConfigSet coreConfig, SolrCore prev) was deprecated in 4.10.3 and
+ removed in 5.0. use SolrCore.reload(ConfigSet coreConfig). See SOLR-5864.
+
+* The "termIndexInterval" option in solrconfig.xml has been a No-Op in the default codec
+ since Solr 4.0, and has been removed completely in 5.0. If you get an "Illegal parameter
+ 'termIndexInterval'" error when upgrading, you can safely remove this option from your
+ configs. If you have a strong need to configure this, you must explicitly configure your
+ schema with a custom codec. See SOLR-6560 and for more details.
+
+* The "checkIntegrityAtMerge" option in solrconfig.xml is now a No-Op and should be removed
+ from any solrconfig.xml files -- these integrity checks are now done automatically at a very
+ low level during the segment merging process. See SOLR-6834 for more details.
+
+* SimplePostTool (post.jar) no longer defaults to collection1, making either of core/collection
+ name or update URL mandatory. An existing call without an explicit update URL needs to now
+ have the core/collection name passed as "-Dc=<collection/core name>" e.g.:
+ java -jar -Dc=<collection_name> post.jar *.xml (new call with collection name)
+ See SOLR-6852 for more details.
+
+* Relative paths specified in the solr.xml coreRootDirectory parameter for core
+ discovery are now resolved relative to SOLR_HOME, rather than cwd. See
+ SOLR-6718.
+
+* SolrServer and associated classes have been deprecated. Applications using
+ SolrJ should use the equivalent SolrClient classes instead.
+
+* Spatial fields originating from Solr 4 (e.g. SpatialRecursivePrefixTreeFieldType, BBoxField)
+ have the 'units' attribute deprecated, now replaced with 'distanceUnits'. If you change it to
+ a unit other than 'degrees' (or if you don't specify it, which will default to kilometers if
+ geo=true), then be sure to update maxDistErr as it's in those units. If you keep units=degrees
+ then it should be backwards compatible but you'll get a deprecation warning on startup. See
+ SOLR-6797.
+
+* The <nrtMode> configuration in solrconfig.xml has been discontinued and should be removed from
+ solrconfig.xml. Solr defaults to using NRT searchers regardless of the value in configuration
+ and a warning is logged on startup if the solrconfig.xml has <nrtMode> specified.
+
+* There was an old spatial syntax to specify a circle using Circle(x,y d=...) which should be
+ replaced with simply using {!geofilt} (if you can) or BUFFER(POINT(x y),d). Likewise a rect syntax
+ comprised of minX minY maxX maxY that should now be replaced with
+ ENVELOPE(minX, maxX, maxY, minY).
+
+* Due to changes in the underlying commons-codec package, users of the BeiderMorseFilterFactory
+ will need to rebuild their indexes after upgrading. See LUCENE-6058 for more details.
+
+* CachedSqlEntityProcessor has been removed, use SqlEntityProcessor with the
+ cacheImpl parameter.
+
+* HttpDataSource has been removed, use URLDataSource instead.
+
+* LegacyHTMLStripCharFilter has been removed
+
+* CoreAdminRequest.persist() call has been removed. All changes made via
+ CoreAdmin are persistent.
+
+* SpellCheckResponse.getSuggestions() and getSuggestionFrequencies() have been
+ removed, use getAlternatives() and getAlternativeFrequencies() instead.
+
+* SolrQuery deprecated methods have been removed:
+ - setMissing() is now setFacetMissing()
+ - getFacetSort() is now getFacetSortString()
+ - setFacetSort(boolean) should instead use setFacetSort(String) with
+ FacetParams.FACET_SORT_COUNT or FacetParams.FACET_SORT_INDEX
+ - setSortField(String, ORDER) should use setSort(SortClause)
+ - addSortField(String, ORDER) should use addSort(SortClause)
+ - removeSortField(String, ORDER) should use removeSort(SortClause)
+ - getSortFields() should use getSorts()
+ - set/getQueryType() should use set/getRequestHandler()
+
+* ClientUtil deprecated date methods have been removed, use DateUtil instead
+
+* FacetParams.FacetDateOther has been removed, use FacetRangeOther
+
+* ShardParams.SHARD_KEYS has been removed, use ShardParams._ROUTE_
+
+* The 'old-style' solr.xml format is no longer supported, and cores must be
+ defined using core.properties files. See
+ https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-6103: Added DateRangeField for indexing date ranges, especially multi-valued ones.
+ Supports facet.range, DateMath, and is mostly interoperable with TrieDateField.
+ Based on LUCENE-5648. (David Smiley)
+
+* SOLR-6403: TransactionLog replay status logging. (Mark Miller)
+
+* SOLR-4580: Support for protecting content in ZooKeeper. (Per Steffensen, Mark Miller)
+
+* SOLR-6365: specify appends, defaults, invariants outside of the request handler.
+ (Noble Paul, Erik Hatcher, shalin)
+
+* SOLR-5097: Schema API: Add REST support for adding dynamic fields to the schema.
+ (Steve Rowe)
+
+* SOLR-5098: Schema API: Add REST support for adding field types to the schema.
+ (Timothy Potter)
+
+* SOLR-5473 : Split clusterstate.json per collection and watch states selectively
+ (Noble Paul, Mark Miller, shalin, Jessica Cheng Mallet, Timothy Potter, Anshum Gupta)
+
+* SOLR-5474 : Support for SOLR-5473 in SolrJ (Timothy Potter, Noble Paul, Mark Miller)
+
+* SOLR-5810 : Support for SOLR-5473 in solr admin UI (Timothy Potter, Noble Paul)
+
+* SOLR-6482: Add an onlyIfDown flag for DELETEREPLICA collections API command
+ (Erick Erickson)
+
+* SOLR-6354: stats.field can now be used to generate stats over the numeric results
+ of arbitrary functions, ie: stats.field={!func}product(price,popularity)
+ (hossman)
+
+* SOLR-6485: ReplicationHandler should have an option to throttle the speed of
+ replication (Varun Thacker, Noble Paul)
+
+* SOLR-6543: Give HttpSolrClient the ability to send PUT requests (Gregory Chanan)
+
+* SOLR-5986: Don't allow runaway queries from harming Solr cluster health or search
+ performance (Anshum Gupta, Steve Rowe, Robert Muir)
+
+* SOLR-6565: SolrRequest support for query params (Gregory Chanan)
+
+* SOLR-6476: Create a bulk mode for schema API (Noble Paul, Steve Rowe)
+
+* SOLR-6512: Add a collections API call to add/delete arbitrary properties
+ to a specific replica. Optionally adding sliceUnique=true will remove
+ this property from all other replicas within a particular slice.
+ (Erick Erickson)
+
+* SOLR-6513: Add a collectionsAPI call BALANCESLICEUNIQUE. Allows the even
+ distribution of custom replica properties across nodes making up a
+ collection, at most one node per slice will have the property.
+
+* SOLR-6605: Make ShardHandlerFactory maxConnections configurable.
+ (Christine Poerschke via shalin)
+
+* SOLR-6585: RequestHandlers can optionally handle sub paths as well (Noble Paul)
+
+* SOLR-6617: /update/json/docs path will use fully qualified node names by default
+ (Noble Paul)
+
+* SOLR-4715: Add CloudSolrClient constructors which accept a HttpClient instance.
+ (Hardik Upadhyay, Shawn Heisey, shalin)
+
+* SOLR-5992: add "removeregex" as an atomic update operation
+ (Vitaliy Zhovtyuk via Erick Erickson)
+
+* SOLR-6633: /update/json/docs path can now save the underlying json doc asa string field
+ and better support added to the default example (Noble Paul)
+
+* SOLR-6650: Add optional slow request logging at WARN level
+ (Jessica Cheng Mallet via Timothy Potter)
+
+* SOLR-6655: SimplePostTool now features -Dhost, -Dport, and -Dc (for core/collection)
+ properties to allow easier overriding of just the right piece of the Solr URL.
+ (ehatcher)
+
+* SOLR-6248: MoreLikeThis QParser that accepts a document id and returns documents that
+ have similar content. It works in standalone/cloud mode and shares logic with the
+ Lucene MoreLikeThis class (Anshum Gupta).
+
+* SOLR-6670: change BALANCESLICEUNIQUE to BALANCESHARDUNIQUE. Also, the parameter
+ for ADDREPLICAPROP that used to be sliceUnique is now shardUnique. (Erick Erickson)
+
+* SOLR-6351: Stats can now be nested under pivot values by adding a 'stats' local param to
+ facet.pivot which refers to a 'tag' local param in one or more stats.field params.
+ (hossman, Vitaliy Zhovtyuk, Steve Molloy)
+
+* SOLR-6533: Support editing common solrconfig.xml values (Noble Paul)
+
+* SOLR-6607: Managing requesthandlers through API (Noble Paul)
+
+* SOLR-4799: faster join using join="zipper" aka merge join for nested DIH EntityProcessors
+ (Mikhail Khludnev via Noble Paul)
+
+* SOLR-6787: API to manage blobs in Solr (Noble Paul)
+
+* SOLR-6801: Load RequestHandler from blob store (Noble Paul)
+
+* SOLR-1632: Support Distributed IDF (Andrzej Bialecki, Mark Miller, Yonik Seeley,
+ Robert Muir, Markus Jelsma, Vitaliy Zhovtyuk, Anshum Gupta)
+
+* SOLR-6729: createNodeSet.shuffle=(true|false) support for /admin/collections?action=CREATE.
+ (Christine Poerschke, Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6851: Scripts to support installing and running Solr as a service on Linux
+ (Timothy Potter, Hossman, Steve Rowe)
+
+* SOLR-6770: Add/edit param sets and use them in Requests (Noble Paul)
+
+* SOLR-6879: Have an option to disable autoAddReplicas temporarily for all collections.
+ (Varun Thacker via Steve Rowe)
+
+* SOLR-6435: Add bin/post script to simplify posting content to Solr (Erik Hatcher)
+
+* SOLR-6761: Ability to ignore commit and/or optimize requests from clients when running in
+ SolrCloud mode using the IgnoreCommitOptimizeUpdateProcessorFactory. (Timothy Potter)
+
+* SOLR-6797: Spatial fields that used to require units=degrees like
+ SpatialRecursivePrefixTreeFieldType (RPT) now take distanceUnits=degrees|kilometers|miles
+ instead. It is applied to nearly all distance measurements involving the field: maxDistErr,
+ distErr, d, geodist, score=distance|area|area2d. score now accepts these units as well. It does
+ NOT affect distances embedded in WKT strings like BUFFER(POINT(200 10),0.2)).
+ (Ishan Chattopadhyaya, David Smiley)
+
+* SOLR-6766: Expose HdfsDirectoryFactory Block Cache statistics via JMX.
+ (Mike Drob, Mark Miller)
+
+* SOLR-2035: Add a VelocityResponseWriter $resource tool for locale-specific string lookups.
+ (Erik Hatcher)
+
+* SOLR-6916: Toggle payload support for the default highlighter via hl.payloads. It's auto
+ enabled when the index has payloads. (David Smiley)
+
+* SOLR-6581: Efficient DocValues support and numeric collapse field implementations
+ for Collapse and Expand (Joel Bernstein)
+
+* SOLR-6937: In schemaless mode ,replace spaces and special characters with underscore (Noble Paul)
+
+* SOLR-5147: Support child documents in DIH
+ (Vadim Kirilchuk, Shawn Heisey, Thomas Champagne, Mikhail Khludnev via Noble Paul)
+
+Bug Fixes
+----------------------
+
+* SOLR-4895: An error should be returned when a rollback is attempted in SolrCloud mode.
+ (Vamsee Yarlagadda via Mark Miller)
+
+* SOLR-6424: The hdfs block cache BLOCKCACHE_WRITE_ENABLED is not defaulting to false like it
+ should. (Mark Miller)
+
+* SOLR-6426: SolrZkClient clean can fail due to a race with children nodes. (Mark Miller)
+
+* SOLR-5966: Admin UI Menu is fixed and doesn't respect smaller viewports.
+ (Aman Tandon, steffkes via shalin)
+
+* SOLR-4406: Fix RawResponseWriter to respect 'base' writer
+ (Steve Davids, hossman)
+
+* SOLR-6297: Fix WordBreakSolrSpellChecker to not lose suggestions in shard/cloud
+ environments (James Dyer)
+
+* SOLR-6467: bin/solr script should direct stdout/stderr when starting in the background
+ to the solr-PORT-console.log in the logs directory instead of bin. (Timothy Potter)
+
+* SOLR-6187: SOLR-6154: facet.mincount ignored in range faceting using distributed search
+ NOTE: This does NOT fixed for the (deprecated) facet.date idiom, use facet.range
+ instead. (Erick Erickson, Zaccheo Bagnati, Ronald Matamoros, Vamsee Yalargadda)
+
+* SOLR-6457: LBHttpSolrClient: ArrayIndexOutOfBoundsException risk if counter overflows
+ (longkey via Noble Paul)
+
+* SOLR-6499: Log warning about multiple update request handlers
+ (Noble Paul, Andreas Hubold, hossman)
+
+* SOLR-6507: Fixed several bugs involving stats.field used with local params (hossman)
+
+* SOLR-6481: CLUSTERSTATUS should check if the node hosting a replica is live when
+ reporting replica status (Timothy Potter)
+
+* SOLR-6484: SolrCLI's healthcheck action needs to check live nodes as part of reporting
+ the status of a replica (Timothy Potter)
+
+* SOLR-6540 Fix NPE from strdist() func when doc value source does not exist in a doc (hossman)
+
+* SOLR-6624 Spelling mistakes in the Java source (Hrishikesh Gadre)
+
+* SOLR-6307: Atomic update remove does not work for int array or date array
+ (Anurag Sharma , noble)
+
+* SOLR-6224: Post soft-commit callbacks are called before soft commit actually happens.
+ (shalin)
+
+* SOLR-6591: Overseer can use stale cluster state and lose updates for collections
+ with stateFormat > 1. (shalin)
+
+* SOLR-6631: DistributedQueue spinning on calling zookeeper getChildren()
+ (Jessica Cheng Mallet, Mark Miller, Timothy Potter)
+
+* SOLR-6579: SnapPuller Replication blocks clean shutdown of tomcat
+ (Philip Black-Knight via Noble Paul)
+
+* SOLR-6721: ZkController.ensureReplicaInLeaderInitiatedRecovery puts replica
+ in local map before writing to ZK. (shalin)
+
+* SOLR-6679: Disabled suggester component from techproduct solrconfig.xml since
+ it caused long startup times on large indexes even when it wasn't used.
+ (yonik, hossman)
+
+* SOLR-6738: Admin UI - Escape Data on Plugins-View (steffkes)
+
+* SOLR-3774: Solr adds RequestHandler SolrInfoMBeans twice to the JMX server.
+ (Tomás Fernández Löbbe, hossman, Mark Miller)
+
+* SOLR-6763: Shard leader elections should not persist across session expiry
+ (Alan Woodward, Mark Miller)
+
+* SOLR-3881: Avoid OOMs in LanguageIdentifierUpdateProcessor:
+ - Added langid.maxFieldValueChars and langid.maxTotalChars params to limit
+ input, by default 10k and 20k chars, respectively.
+ - Moved input concatenation to Tika implementation; the langdetect
+ implementation instead appends each input piece via the langdetect API.
+ (Vitaliy Zhovtyuk, Tomás Fernández Löbbe, Rob Tulloh, Steve Rowe)
+
+* SOLR-6626: NPE in FieldMutatingUpdateProcessor when indexing a doc with
+ null field value (Noble Paul)
+
+* SOLR-6604: SOLR-6812: Fix NPE with distrib.singlePass=true and expand
+ component. Increased test coverage of expand component with docValues.
+ (Christine Poerschke, Per Steffensen, shalin)
+
+* SOLR-6718: Core discovery was walking paths relative to the Jetty working
+ directory, rather than SOLR_HOME. (Andreas Hubold, Alan Woodward)
+
+* SOLR-6864: Support registering searcher listeners in SolrCoreAware.inform(SolrCore)
+ method. Existing components rely on this. (Tomás Fernández Löbbe)
+
+* SOLR-6850: AutoAddReplicas makes a call to wait to see live replicas that times
+ out after 30 milliseconds instead of 30 seconds. (Varun Thacker via Mark Miller)
+
+* SOLR-6397: zkcli script put/putfile should allow overwriting an existing znode's data
+ (Timothy Potter)
+
+* SOLR-6873: Lib relative path is incorrect for techproduct configset
+ (Alexandre Rafalovitch via Erick Erickson)
+
+* SOLR-6899: Change public setter for CollectionAdminRequest.action to protected.
+ (Anshum Gupta)
+
+* SOLR-6779: fix /browse for schemaless example (ehatcher)
+
+* SOLR-6874: There is a race around SocketProxy binding to it's port the way we setup
+ JettySolrRunner and SocketProxy. (Mark Miller, Timothy Potter)
+
+* SOLR-6735: Make CloneFieldUpdateProcessorFactory null safe (Steve Davids via ehatcher)
+
+* SOLR-6907: URLEncode documents directory in MorphlineMapperTest to handle spaces etc.
+ in file name. (Ramkumar Aiyengar via Erick Erickson)
+
+* SOLR-6880: Harden ZkStateReader to expect that getCollectionLive may return null
+ as it's contract states. (Mark Miller, shalin)
+
+* SOLR-6643: Fix error reporting & logging of low level JVM Errors that occur when
+ loading/reloading a SolrCore (hossman)
+
+* SOLR-6839: Direct routing with CloudSolrServer will ignore the Overwrite document option.
+ (Mark Miller)
+
+* SOLR-6793: ReplicationHandler does not destroy all of it's created SnapPullers.
+ (Mark Miller)
+
+* SOLR-6946: Document -p port option for the create_core and create_collection actions in
+ bin/solr (Timothy Potter)
+
+* SOLR-6923: AutoAddReplicas also consults live_nodes to see if a state change has happened.
+ (Varun Thacker via Anshum Gupta)
+
+* SOLR-6941: DistributedQueue#containsTaskWithRequestId can fail with NPE. (Mark Miller)
+
+* SOLR-6764: Field types need to be re-informed after reloading a managed schema from ZK
+ (Timothy Potter)
+
+* SOLR-6931: We should do a limited retry when using HttpClient.
+ (Mark Miller, Hrishikesh Gadre, Gregory Chanan)
+
+* SOLR-7004: Add a missing constructor for CollectionAdminRequest.BalanceShardUnique that
+ sets the collection action. (Anshum Gupta)
+
+* SOLR-6993: install_solr_service.sh won't install on RHEL / CentOS
+ (David Anderson via Timothy Potter)
+
+* SOLR-6928: solr.cmd stop works only in english (john.work, Jan Høydahl, Timothy Potter)
+
+* SOLR-7011: Delete collection returns before collection is actually removed.
+ (Christine Poerschke via shalin)
+
+* SOLR-6640: Close searchers before rollback and recovery to avoid index corruption.
+ (Robert Muir, Varun Thacker, shalin)
+
+* SOLR-6847: LeaderInitiatedRecoveryThread compares wrong replica's state with lirState.
+ (shalin)
+
+* SOLR-6856: Restore ExtractingRequestHandler's ability to capture all HTML tags when
+ parsing (X)HTML. (hossman, Uwe Schindler, ehatcher, Steve Rowe)
+
+* SOLR-7024: Improved error messages when java is not found by the bin/solr
+ shell script, particularly when JAVA_HOME has an invalid location.
+ (Shawn Heisey)
+
+* SOLR-7038: Validate the presence of configset before trying to create a collection.
+ (Anshum Gupta, Mark Miller)
+
+* SOLR-7037: bin/solr start -e techproducts -c fails to start Solr in cloud mode
+ (Timothy Potter)
+
+* SOLR-7016: Fix bin\solr.cmd to work in a directory with spaces in the name.
+ (Timothy Potter, Uwe Schindler)
+
+* SOLR-6969: When opening an HDFSTransactionLog for append we must first attempt to recover
+ it's lease to prevent data loss. (Mark Miller, Praneeth Varma, Colin McCabe)
+
+* SOLR-7067: bin/solr won't run under bash 4.2+. (Steve Rowe)
+
+* SOLR-7068: Collapse on numeric field breaks when min/max values are negative.
+ (Joel Bernstein)
+
+* SOLR-6780: Fixed a bug in how default/appends/invariants params were affecting the set
+ of all "keys" found in the request parameters, resulting in some key=value param pairs
+ being duplicated. This was noticeably affecting some areas of the code where iteration
+ was done over the set of all params:
+ - literal.* in ExtractingRequestHandler
+ - facet.* in FacetComponent
+ - spellcheck.[dictionary name].* and spellcheck.collateParam.* in SpellCheckComponent
+ - olap.* in AnalyticsComponent
+ (Alexandre Rafalovitch & hossman)
+
+* SOLR-6920: A replicated index can end up corrupted when small files end up with the same
+ file name and size. (Varun Thacker, Mark Miller)
+
+* SOLR-7033, SOLR-5961: RecoveryStrategy should not publish any state when
+ closed / cancelled and there should always be a pause between recoveries
+ even when recoveries are rapidly stopped and started as well as when a
+ node attempts to become the leader for a shard.
+ (Mark Miller, Maxim Novikov)
+
+* SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to
+ parenthesis in JAVA_HOME. (Timothy Potter, Christopher Hewitt, Jan Høydahl)
+
+* SOLR-12662: Reproducing TestPolicy failures: NPE and NoClassDefFoundError.
+ (Steve Rowe)
+
+Optimizations
+----------------------
+
+* SOLR-6603: LBHttpSolrClient - lazily allocate skipped-zombie-servers list.
+ (Christine Poerschke via shalin)
+
+* SOLR-6554: Speed up overseer operations avoiding cluster state reads from
+ zookeeper at the start of each loop and instead relying on local state and
+ compare-and-set writes. This change also adds batching for consecutive messages
+ belonging to the same collection with stateFormat=2. (shalin)
+
+* SOLR-6680: DefaultSolrHighlighter can sometimes avoid CachingTokenFilter with
+ hl.usePhraseHighlighter, and can be more efficient handling data from term vectors.
+ (David Smiley)
+
+* SOLR-6666: Dynamic copy fields are considering all dynamic fields, causing
+ a significant performance impact on indexing documents. (Liram Vardi via Erick
+ Erickson, Steve Rowe)
+
+Other Changes
+----------------------
+
+* SOLR-4622: Hardcoded SolrCloud defaults for hostContext and hostPort that
+ were deprecated in 4.3 have been removed completely. (hossman)
+
+* SOLR-5936: Removed deprecated non-Trie-based numeric & date field types.
+ (Steve Rowe)
+
+* SOLR-6169: Finish removal of CoreAdminHandler handleAlias action begun in 4.9
+ (Alan Woodward)
+
+* SOLR-6215: TrieDateField should directly extend TrieField instead of
+ forwarding to a wrapped TrieField. (Steve Rowe)
+
+* SOLR-3029: Changes to spellcheck response format (Nalini Kartha via James Dyer)
+
+* SOLR-3957: Removed RequestHandlerUtils#addExperimentalFormatWarning(), which
+ removes "experimental" warning from two places: replication handler details
+ command and DataImportHandler responses. (ehatcher)
+
+* SOLR-6073: Remove helper methods from CollectionsRequest (SolrJ) for CollectionsAPI
+ calls and move to a builder design for the same. (Varun Thacker, Anshum Gupta)
+
+* SOLR-6519: Make DirectoryFactory#create() take LockFactory.
+ (Uwe Schindler)
+
+* SOLR-6400: SolrCloud tests are not properly testing session expiration. (Mark Miller)
+
+* LUCENE-5650: Tests can no longer write to CWD. Update log dir is now made relative
+ to the instance dir if it is not an absolute path. (Ryan Ernst, Dawid Weiss)
+
+* SOLR-6390: Remove unnecessary checked exception for CloudSolrClient
+ constructors, improve javadocs for CloudSolrClient constructors.
+ (Steve Davids via Shawn Heisey)
+
+* LUCENE-5901: Replaced all occurrences of LUCENE_CURRENT with LATEST for luceneMatchVersion.
+ (Ryan Ernst)
+
+* SOLR-6445: Upgrade Noggit to version 0.6 to support more flexible JSON input (Noble Paul, Yonik Seeley)
+
+* SOLR-6073: Remove helper methods from CollectionsRequest (SolrJ) for CollectionsAPI
+ calls and move to a builder design for the same. (Varun Thacker, Anshum Gupta)
+
+* SOLR-5322: core discovery can fail w/NPE and no explanation if a non-readable directory exists
+ (Said Chavkin, Erick Erickson)
+
+* SOLR-6488, SOLR-6991: Update to Apache Tika 1.7. This adds support for parsing Outlook PST and
+ Matlab MAT files. Parsing for NetCDF files was removed because of license issues; if you need
+ support for this format, download the parser JAR yourself and add it to contrib/extraction/lib
+ folder: http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
+ (Uwe Schindler)
+
+* SOLR-6115: Cleanup enum/string action types in Overseer, OverseerCollectionProcessor and
+ CollectionHandler. (Erick Erickson, shalin)
+
+* SOLR-6453: Stop throwing an error message from Overseer when node exits (Ramkumar Aiyengar, Noble Paul)
+
+* SOLR-6550: Provide simple mechanism for passing additional metadata / context about a server-side
+ SolrException back to the client-side (Timothy Potter)
+
+* SOLR-6249: Schema API changes return success before all cores are updated; client application
+ can provide the optional updateTimeoutSecs parameter to cause the server handling the
+ managed schema update to block until all replicas of the same collection have processed the
+ update or until the specified timeout is reached (Timothy Potter)
+
+* SOLR-6597: SolrIndexConfig parameter in one of the SolrIndexSearcher constructor has been removed.
+ It was just passed and never used via that constructor. (Anshum Gupta)
+
+* SOLR-5852: Add CloudSolrClient helper method to connect to a ZK ensemble. (Varun Thacker, Furkan KAMACI,
+ Shawn Heisey, Mark Miller, Erick Erickson via shalin)
+
+* SOLR-6592: Avoid waiting for the leader to see the down state if that leader is not live.
+ (Timothy Potter)
+
+* SOLR-6641: SystemInfoHandler should include the zkHost the node is using (when running in solrcloud mode)
+ (Timothy Potter)
+
+* SOLR-6295: Fix child filter query creation to never match parent docs in SolrExampleTests.
+ (Varun Thacker, Mikhail Khludnev via shalin)
+
+* SOLR-6578: Update commons-io dependency to the latest 2.4 version
+ (Steve Rowe, Shawn Heisey)
+
+* SOLR-6651: Fix wrong timeout logged in waitForReplicasToComeUp. (shalin)
+
+* SOLR-6698: Solr is not consistent wrt ZkCredentialsProvider / ZkCredentialProvider.
+ References to zkCredentialProvider in System properties or configurations should be
+ changed to zkCredentialsProvider. (Gregory Chanan)
+
+* SOLR-6715: ZkSolrResourceLoader constructors accept a parameter called 'collection'
+ but it should be 'configName'. (shalin)
+
+* SOLR-6697: bin/solr start scripts allow setting SOLR_OPTS in solr.in.* (janhoy)
+
+* SOLR-6739: Admin UI - Sort list of command line args (steffkes)
+
+* SOLR-6740: Admin UI - improve Files View (steffkes)
+
+* SOLR-6570: Run SolrZkClient session watch asynchronously.
+ (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6747: Add an optional caching option as a workaround for SOLR-6586.
+ (Mark Miller, Gregory Chanan)
+
+* SOLR-6459: Normalize logging of operations in Overseer and log current queue size.
+ (Ramkumar Aiyengar, shalin via Mark Miller)
+
+* SOLR-6754: ZkController.publish doesn't use the updateLastState parameter.
+ (shalin)
+
+* SOLR-6751: Exceptions thrown in the analysis chain in DirectUpdateHandler2
+ should return a BAD_REQUEST status (Alan Woodward)
+
+* SOLR-6792: deprecate AdminHandlers, Clean up solrconfig.xml of
+ unnecessary plugin definitions, implicit registration of /replication,
+ /get and /admin/* handlers (Noble Paul)
+
+* SOLR-5864: Remove previous SolrCore as parameter on reload.
+ (Tomás Fernández Löbbe)
+
+* SOLR-4792: Stop shipping a .war. (Robert Muir, Ramkumar Aiyengar, Mark Miller)
+
+* SOLR-6799: Update Saxon-HE to 9.6.0-2. (Mark Miller)
+
+* SOLR-6454: Suppress EOFExceptions in SolrDispatchFilter.
+ (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6370: Allow tests to report/fail on many ZK watches being parallelly
+ requested on the same data (Ramkumar Aiyengar via Timothy Potter)
+
+* SOLR-6752: Buffer Cache allocate/lost metrics should be exposed.
+ (Mike Drob via Mark Miller)
+
+* SOLR-6560: Purge termIndexInterval from example/test configs
+ (Tom Burton-West, hossman)
+
+* SOLR-6773: Remove the multicore example as the DIH and cloud examples
+ illustrate multicore behavior (hossman, Timothy Potter)
+
+* SOLR-6834: Warn if checkIntegrityAtMerge is configured. This option is no longer meaningful
+ since the checks are done automatically at a very low level in the segment merging.
+ This warning will become an error in Solr 6.0. (hossman)
+
+* SOLR-6833: Examples started with bin/solr -e should use a solr.solr.home directory under
+ the example directory instead of server/solr. (Alexandre Rafalovitch, Anshum Gupta, hossman,
+ Timothy Potter)
+
+* SOLR-6826: fieldType capitalization is not consistent with the rest of case-sensitive field names.
+ (Alexandre Rafalovitch via Erick Erickson)
+
+* SOLR-6849: HttpSolrClient.RemoteSolrException reports the URL of the remote
+ host where the exception occurred. (Alan Woodward)
+
+* SOLR-6852: SimplePostTool no longer defaults to collection1 making core/collection/update URL
+ mandatory. (Anshum Gupta)
+
+* SOLR-6861: post.sh from exampledocs directory has been removed as there no longer is a default update
+ URL. (Anshum Gupta)
+
+* SOLR-5922: Add support for adding core properties to SolrJ Collection Admin Request calls.
+ (Varun Thacker via Anshum Gupta).
+
+* SOLR-6523: Provide SolrJ support for specifying stateFormat while creating Collections.
+ (Anshum Gupta)
+
+* SOLR-6881: Add split.key support for SPLITSHARD via SolrJ (Anshum Gupta)
+
+* SOLR-6883: CLUSTERPROP API switch case does not call break. (Varun Thacker via shalin)
+
+* SOLR-6882: Misspelled collection API actions in ReplicaMutator exception messages.
+ (Steve Rowe via shalin)
+
+* SOLR-6867: SolrCLI should check for existence before creating a new core/collection,
+ more user-friendly error reporting (no stack trace), and the ability to pass a
+ directory when using bin/solr to create a core or collection (Timothy Potter)
+
+* SOLR-6885: Add core name to RecoveryThread name. (Christine Poerschke via shalin)
+
+* SOLR-6855: bin/solr -e dih launches, but has some path cruft issues preventing some of the
+ imports don't work (Hossman, Timothy Potter)
+
+* SOLR-3711: Truncate long strings in /browse field facets (ehatcher)
+
+* SOLR-6876: Remove unused legacy scripts.conf (Alexandre Rafalovitch via Erick Erickson)
+
+* SOLR-6896: Speed up tests by dropping SolrJettyRunner thread max idle time
+ (Alan Woodward)
+
+* SOLR-6448: Add SolrJ support for all current Collection API calls. (Anshum Gupta)
+
+* Fixed a typo in various solrconfig.xml files. (sdumitriu - pull request #120)
+
+* SOLR-6895: SolrServer classes are renamed to *SolrClient. The existing
+ classes still exist, but are deprecated. (Alan Woodward, Erik Hatcher)
+
+* SOLR-6483: Refactor some methods in MiniSolrCloudCluster tests (Steve Davids via
+ Erick Erickson)
+
+* SOLR-6906: Fix typo bug in DistributedDebugComponentTest.testCompareWithNonDistributedRequest
+ (Ramkumar Aiyengar via Erick Erickson)
+
+* SOLR-6905: Test pseudo-field retrieval in distributed search.
+ (Ramkumar Aiyengar via shalin)
+
+* SOLR-6897: Nuke non-NRT mode from code and configuration. (Hossman, shalin)
+
+* SOLR-6830: Update Woodstox to 4.4.1 and StAX to 3.1.4. (ab)
+
+* SOLR-6918: No need to log exceptions (as warn) generated when creating MBean stats if
+ the core is shutting down (Timothy Potter)
+
+* SOLR-6932: All HttpClient ConnectionManagers and SolrJ clients should always be shutdown
+ in tests and regular code. (Mark Miller)
+
+* SOLR-1723: VelocityResponseWriter improvements (Erik Hatcher)
+
+* SOLR-6324: Set finite default timeouts for select and update. (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6952: bin/solr create action should copy configset directory instead of reusing
+ an existing configset in ZooKeeper by default (Timothy Potter)
+
+* SOLR-6933: bin/solr should provide a single "create" action that creates a core
+ or collection depending on whether Solr is running in standalone or cloud mode
+ (Timothy Potter)
+
+* SOLR-6496: LBHttpSolrClient stops server retries after the timeAllowed threshold is met.
+ (Steve Davids, Anshum Gupta)
+
+* SOLR-6904: Removed deprecated Circle & rect syntax. See upgrading notes. (David Smiley)
+
+* SOLR-6943: HdfsDirectoryFactory should fall back to system props for most of it's config
+ if it is not found in solrconfig.xml. (Mark Miller, Mike Drob)
+
+* SOLR-6926: "ant example" makes no sense anymore - should be "ant server"
+ (Ramkumar Aiyengar, Timothy Potter)
+
+* SOLR-6982: bin/solr and SolrCLI should support SSL-related Java System Properties
+ (Timothy Potter)
+
+* SOLR-6981: Add a delete action to the bin/solr script to allow deleting of cores /
+ collections (with delete collection config directory from ZK) (Timothy Potter)
+
+* SOLR-6840: Remove support for old-style solr.xml (Erick Erickson, Alan Woodward)
+
+* SOLR-6976: Remove classes and methods deprecated in 4.x (Alan Woodward, Noble
+ Paul, Chris Hostetter)
+
+* SOLR-6521: CloudSolrClient should synchronize cache cluster state loading
+ ( Noble Paul, Jessica Cheng Mallet)
+
+* SOLR-7018: bin/solr stop should stop if there is only one node running or generate
+ an error message prompting the user to be explicit about which of multiple nodes
+ to stop using the -p or -all options (Timothy Potter)
+
+* SOLR-5918: ant clean does not remove ZooKeeper data (Varun Thacker, Steve Rowe)
+
+* SOLR-7020: 'bin/solr start' should automatically use an SSL-enabled alternate jetty
+ configuration file when in SSL mode, eliminating the need for manual jetty.xml edits.
+ (Steve Rowe)
+
+* SOLR-6227: Avoid spurious failures of ChaosMonkeySafeLeaderTest by ensuring there's
+ at least one jetty to kill. (shalin)
+
+================== 4.10.4 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-6931: We should do a limited retry when using HttpClient.
+ (Mark Miller, Hrishikesh Gadre, Gregory Chanan)
+
+* SOLR-6780: Fixed a bug in how default/appends/invariants params were affecting the set
+ of all "keys" found in the request parameters, resulting in some key=value param pairs
+ being duplicated. This was noticeably affecting some areas of the code where iteration
+ was done over the set of all params:
+ - literal.* in ExtractingRequestHandler
+ - facet.* in FacetComponent
+ - spellcheck.[dictionary name].* and spellcheck.collateParam.* in SpellCheckComponent
+ - olap.* in AnalyticsComponent
+ (Alexandre Rafalovitch & hossman)
+
+* SOLR-6426: SolrZkClient clean can fail due to a race with children nodes. (Mark Miller)
+
+* SOLR-6457: LBHttpSolrClient: ArrayIndexOutOfBoundsException risk if counter overflows
+ (longkey via Noble Paul)
+
+* SOLR-6481: CLUSTERSTATUS should check if the node hosting a replica is live when
+ reporting replica status (Timothy Potter)
+
+* SOLR-6631: DistributedQueue spinning on calling zookeeper getChildren()
+ (Jessica Cheng Mallet, Mark Miller, Timothy Potter)
+
+* SOLR-6579: SnapPuller Replication blocks clean shutdown of tomcat
+ (Philip Black-Knight via Noble Paul)
+
+* SOLR-6763: Shard leader elections should not persist across session expiry
+ (Alan Woodward, Mark Miller)
+
+* SOLR-3881: Avoid OOMs in LanguageIdentifierUpdateProcessor:
+ - Added langid.maxFieldValueChars and langid.maxTotalChars params to limit
+ input, by default 10k and 20k chars, respectively.
+ - Moved input concatenation to Tika implementation; the langdetect
+ implementation instead appends each input piece via the langdetect API.
+ (Vitaliy Zhovtyuk, Tomás Fernández Löbbe, Rob Tulloh, Steve Rowe)
+
+* SOLR-6850: AutoAddReplicas makes a call to wait to see live replicas that times
+ out after 30 milliseconds instead of 30 seconds. (Varun Thacker via Mark Miller)
+
+* SOLR-6839: Direct routing with CloudSolrServer will ignore the Overwrite document option.
+ (Mark Miller)
+
+* SOLR-7139: Fix SolrContentHandler for TIKA to ignore multiple startDocument events.
+ (Chris A. Mattmann, Uwe Schindler)
+
+* SOLR-6941: DistributedQueue#containsTaskWithRequestId can fail with NPE. (Mark Miller)
+
+* SOLR-7011: Delete collection returns before collection is actually removed.
+ (Christine Poerschke via shalin)
+
+* SOLR-6856: Restore ExtractingRequestHandler's ability to capture all HTML tags when
+ parsing (X)HTML. (hossman, Uwe Schindler, ehatcher, Steve Rowe)
+
+* SOLR-6928: solr.cmd stop works only in english (john.work, Jan Høydahl, Timothy Potter)
+
+* SOLR-7038: Validate the presence of configset before trying to create a collection.
+ (Anshum Gupta, Mark Miller)
+
+* SOLR-7016: Fix bin\solr.cmd to work in a directory with spaces in the name.
+ (Timothy Potter, Uwe Schindler)
+
+* SOLR-6693: bin\solr.cmd doesn't support 32-bit JRE/JDK running on Windows due to
+ parenthesis in JAVA_HOME. (Timothy Potter, Christopher Hewitt, Jan Høydahl)
+
+* SOLR-7067: bin/solr won't run under bash 4.2+. (Steve Rowe)
+
+* SOLR-7033, SOLR-5961: RecoveryStrategy should not publish any state when
+ closed / cancelled and there should always be a pause between recoveries
+ even when recoveries are rapidly stopped and started as well as when a
+ node attempts to become the leader for a shard.
+ (Mark Miller, Maxim Novikov)
+
+* SOLR-6847: LeaderInitiatedRecoveryThread compares wrong replica's state with lirState.
+ (shalin)
+
+* SOLR-7128: Two phase distributed search is fetching extra fields in GET_TOP_IDS phase.
+ (Pablo Queixalos, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests
+ are sent to shards during tests. (hossman, shalin)
+
+================== 4.10.3 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-6696: bin/solr start script should not enable autoSoftCommit by default (janhoy)
+
+* SOLR-6704: TrieDateField type drops schema properties in branch 4.10 (Tomás Fernández Löbbe)
+
+* SOLR-6085: Suggester crashes when prefixToken is longer than surface form (janhoy)
+
+* SOLR-6323: ReRankingQParserPlugin cleaner paging and fix bug with fuzzy, range and other queries
+ that need to be re-written. (Adair Kovac, Joel Bernstein)
+
+* SOLR-6684: Fix-up /export JSON. (Joel Bernstein)
+
+* SOLR-6781: BBoxField didn't support dynamic fields. (David Smiley)
+
+* SOLR-6784: BBoxField's 'score' mode should have been optional. (David Smiley)
+
+* SOLR-6510: The collapse QParser would throw a NPE when used on a DocValues field on
+ an empty segment/index. (Christine Poerschke, David Smiley)
+
+* SOLR-2927: Solr does not unregister all mbeans upon exception in constructor
+ causing memory leaks. (tom liu, Sharath Babu, Cyrille Roy, shalin)
+
+* SOLR-6685: ConcurrentModificationException in Overseer Status API. (shalin)
+
+* SOLR-6706: /update/json/docs throws RuntimeException if a nested structure
+ contains a non-leaf float field (Noble Paul, shalin)
+
+* SOLR-6610: Slow startup of new clusters because ZkController.publishAndWaitForDownStates
+ always times out. (Jessica Cheng Mallet, shalin, Noble Paul)
+
+* SOLR-6662: better validation when parsing command-line options that expect a value
+ (Timothy Potter)
+
+* SOLR-6732: Fix handling of leader-initiated recovery state was String in older versions
+ and is now a JSON map, caused backwards compatibility issues when doing rolling upgrades of
+ a live cluster while indexing (Timothy Potter)
+
+* SOLR-6705: Better strategy for dealing with JVM specific options in the start
+ scripts; remove -XX:+AggressiveOpts and only set -XX:-UseSuperWord for Java 1.7u40
+ to u51. (Uwe Schindler, janhoy, hossman, Timothy Potter)
+
+* SOLR-6726: better strategy for selecting the JMX RMI port based on SOLR_PORT in bin/solr
+ script (Timothy Potter)
+
+* SOLR-6795: distrib.singlePass returns score even though not asked for.
+ (Per Steffensen via shalin)
+
+* SOLR-6796: distrib.singlePass does not return correct set of fields for multi-fl-parameter
+ requests. (Per Steffensen via shalin)
+
+* SOLR-6776: Transaction log was not flushed at the end of update requests with softCommit
+ specified, which could lead to data loss if the server were killed immediately after the
+ update finished. (Jeffery Yuan via yonik)
+
+Other Changes
+----------------------
+
+* SOLR-6661: Adjust all example configurations to allow overriding error-prone
+ relative paths for solrconfig.xml <lib> references with solr.install.dir
+ system property; bin/solr scripts will set it appropriately. (ehatcher)
+
+* SOLR-6694: Auto-detect JAVA_HOME using the Windows registry if it is not set
+ (janhoy, Timothy Potter)
+
+* SOLR-6653: bin/solr script should return error code >0 when something fails
+ (janhoy, Timothy Potter)
+
+* SOLR-6829: Added getter/setter for lastException in DIH's ContextImpl (ehatcher)
+
+================== 4.10.2 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-6509: Solr start scripts interactive mode doesn't honor -z argument (Timothy Potter)
+
+* SOLR-6511: Fencepost error in LeaderInitiatedRecoveryThread (Timothy Potter)
+
+* SOLR-6530: Commits under network partitions can put any node in down state.
+ (Ramkumar Aiyengar, Alan Woodward, Mark Miller, shalin)
+
+* SOLR-6573: QueryElevationComponent now works with localParams in the query (janhoy)
+
+* SOLR-6524: Collections left in recovery state after node restart because recovery sleep time
+ increases exponentially between retries. (Mark Miller, shalin)
+
+* SOLR-6587: Misleading exception when creating collections in SolrCloud with bad configuration.
+ (Tomás Fernández Löbbe)
+
+* SOLR-6452: StatsComponent's stat 'missing' will work on fields with docValues=true and
+ indexed=false (Xu Zhang via Tomás Fernández Löbbe)
+
+* SOLR-6646: bin/solr start script fails to detect solr on non-default port and then after
+ 30s tails wrong log file (janhoy)
+
+* SOLR-6647: Bad error message when missing resource from ZK when parsing Schema (janhoy)
+
+* SOLR-6545: Query field list with wild card on dynamic field fails.
+ (Burke Webster, Xu Zhang, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-6550: Provide simple mechanism for passing additional metadata / context about a server-side
+ SolrException back to the client-side (Timothy Potter)
+
+* SOLR-6486: solr start script can have a debug flag option; use -a to set arbitrary options
+ (Noble Paul, Timothy Potter)
+
+* SOLR-6549: bin/solr script should support a -s option to set the -Dsolr.solr.home property.
+ (Timothy Potter)
+
+* SOLR-6529: Stop command in the start scripts should only stop the instance that it had started.
+ (Varun Thacker, Timothy Potter)
+
+================== 4.10.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-6425: If using the new global hdfs block cache option, you can end up
+ reading corrupt files on file name reuse. (Mark Miller, Gregory Chanan)
+
+* SOLR-5814: CoreContainer reports incorrect & misleading path for solrconfig.xml
+ when there are loading problems (Pradeep via hossman)
+
+* SOLR-6024: Fix StatsComponent when using docValues="true" multiValued="true"
+ (Vitaliy Zhovtyuk & Tomas Fernandez-Lobbe via hossman)
+
+* SOLR-6493: Fix fq exclusion via "ex" local param in multivalued stats.field (hossman)
+
+* SOLR-6447: bin/solr script needs to pass -DnumShards=1 for boostrapping collection1
+ when starting Solr in cloud mode. (Timothy Potter)
+
+* SOLR-6501: Binary Response Writer does not return wildcard fields.
+ (Mike Hugo, Constantin Mitocaru, sarowe, shalin)
+
+Other Changes
+---------------------
+
+* SOLR-6503: Removed support for parsing netcdf files in Solr Cell because
+ of license issues. If you need support for this format, download the parser
+ JAR yourself (version 4.2) and add it to contrib/extraction/lib folder:
+ http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
+ (Uwe Schindler)
+
+================== 4.10.0 =================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+Apache Tika 1.5 (with upgraded Apache POI 3.10.1)
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+
+Upgrading from Solr 4.9
+----------------------
+
+* In Solr 3.6, all primitive field types were changed to omit norms by default when the
+ schema version is 1.5 or greater (SOLR-3140), but TrieDateField's default was mistakenly
+ not changed. As of Solr 4.10, TrieDateField omits norms by default (see SOLR-6211).
+
+* Creating a SolrCore via CoreContainer.create() no longer requires an
+ additional call to CoreContainer.register() to make it available to clients
+ (see SOLR-6170).
+
+* CoreContainer.remove() has been removed. You should now use CoreContainer.unload() to
+ delete a SolrCore (see SOLR-6232).
+
+* solr.xml parsing has been improved to better account for the expected data types of
+ various options. As part of this fix, additional error checking has also been added to
+ provide errors in the event of duplicated options, or unknown option names that may
+ indicate a typo. Users who have modified their solr.xml in the past and now upgrade may
+ get errors on startup if they have typos or unexpected options specified in their solr.xml
+ file. (See SOLR-5746 for more information.)
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-6196: The overseerstatus collection API instruments amILeader and ZK state update calls.
+ (shalin)
+
+* SOLR-6069: The 'clusterstatus' API should return 'roles' information. (shalin)
+
+* SOLR-6044: The 'clusterstatus' API should return live_nodes as well. (shalin)
+
+* SOLR-5768: Add a distrib.singlePass parameter to make EXECUTE_QUERY phase fetch all fields
+ and skip GET_FIELDS. (Gregg Donovan, shalin)
+
+* SOLR-6183: New spatial BBoxField for indexing rectangles with search support for most predicates.
+ It includes extra score relevancy modes in addition to distance: score=overlapRatio|area|area2D.
+ (David Smiley, Ryan McKinley)
+
+* SOLR-6232: You can now unload/delete cores that have failed to initialize (Alan Woodward)
+
+* SOLR-2245: Improvements to the MailEntityProcessor:
+ - Support for server-side date filtering if using GMail; requires new
+ dependency on the Sun Gmail Java mail extensions
+ - Support for using the last_index_time from the previous run as the
+ value for the fetchMailsSince filter.
+ (Peter Sturge, Timothy Potter)
+
+* SOLR-6258: Added onRollback event handler hook to Data Import Handler (DIH).
+ (ehatcher)
+
+* SOLR-6263: Add DIH handler name to variable resolver as ${dih.handlerName}. (ehatcher)
+
+* SOLR-6216: Better faceting for multiple intervals on DV fields (Tomas Fernandez-Lobbe
+ via Erick Erickson)
+
+* SOLR-6267: Let user override Interval Faceting key with LocalParams (Tomas Fernandez_Lobbe
+ via Erick Erickson)
+
+* SOLR-6020: Auto-generate a unique key in schema-less example if data does not have an id field.
+ The UUIDUpdateProcessor was improved to not require a field name in configuration and generate
+ a UUID into the unique Key field.
+ (Vitaliy Zhovtyuk, hossman, Steve Rowe, Erik Hatcher, shalin)
+
+* SOLR-6294: SOLR-6437: Remove the restriction of adding json by only wrapping it in an array in a
+ new path /update/json/docs (Noble Paul , hossman, Yonik Seeley, Steve Rowe)
+
+* SOLR-6302: UpdateRequestHandlers are registered implicitly /update ,
+ /update/json, /update/csv , /update/json/docs (Noble Paul)
+
+* SOLR-6318: New "terms" QParser for efficiently filtering documents by a list of values. For
+ many values, it's more appropriate than a boolean query. (David Smiley)
+
+* SOLR-6283: Add support for Interval Faceting in SolrJ. (Tomás Fernández Löbbe)
+
+* SOLR-6304 : JsonLoader should be able to flatten an input JSON to multiple docs (Noble Paul)
+
+* SOLR-2894: Distributed query support for facet.pivot (Dan Cooper, Erik Hatcher, Chris Russell,
+ Andrew Muldowney, Brett Lucey, Mark Miller, hossman)
+
+* SOLR-5656: Add autoAddReplicas feature for shared file systems. (Mark Miller, Gregory Chanan)
+
+* SOLR-5244: Exporting Full Sorted Result Sets (Erik Hatcher, Joel Bernstein)
+
+* SOLR-3617: bin/solr and bin/solr.cmd scripts for starting, stopping, and running Solr examples
+ (Timothy Potter)
+
+* SOLR-6233: Provide basic command line tools for checking Solr status and health.
+ (Timothy Potter)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-6095 : SolrCloud cluster can end up without an overseer with overseer roles (Noble Paul, Shalin Mangar)
+
+* SOLR-6165: DataImportHandler should write BigInteger and BigDecimal values as strings.
+ (Anand Sengamalai via shalin)
+
+* SOLR-6189: Avoid publishing the state as down if the node is not live when determining
+ if a replica should be in leader-initiated recovery. (Timothy Potter)
+
+* SOLR-6197: The MIGRATE collection API doesn't work when legacyCloud=false is set
+ in cluster properties. (shalin)
+
+* SOLR-6206: The migrate collection API fails on retry if temp collection already exists.
+ (shalin)
+
+* SOLR-6072: The 'deletereplica' API should remove the data and instance directory by default.
+ (shalin)
+
+* SOLR-6211: TrieDateField doesn't default to omitNorms=true. (Michael Ryan, Steve Rowe)
+
+* SOLR-6159: A ZooKeeper session expiry during setup can keep LeaderElector from joining elections.
+ (Steven Bower, shalin)
+
+* SOLR-6223: SearchComponents may throw NPE when using shards.tolerant and there is a failure
+ in the 'GET_FIELDS/GET_HIGHLIGHTS/GET_DEBUG' phase. (Tomás Fernández Löbbe via shalin)
+
+* SOLR-6180: Callers of ManagedIndexSchema mutators should hold the schemaUpdateLock.
+ (Gregory Chanan via Steve Rowe)
+
+* SOLR-6229: Make SuggestComponent return 400 instead of 500 for bad dictionary selected in request.
+ (Tomás Fernández Löbbe via shalin)
+
+* SOLR-6235: Leader initiated recovery should use coreNodeName instead of coreName to avoid marking
+ all replicas having common core name as down. (shalin)
+
+* SOLR-6208: JettySolrRunner QueuedThreadPool's configuration code is never executed. (dweiss via shalin)
+
+* SOLR-6245: Socket and Connection configuration are ignored in HttpSolrServer when passing in HttpClient.
+ (Patanachai Tangchaisin, shalin)
+
+* SOLR-6137: Schemaless concurrency improvements:
+ - Fixed an NPE when reloading a managed schema with no dynamic copy fields
+ - Moved parsing and schema fields addition to after the distributed phase
+ - AddSchemaFieldsUpdateProcessor now uses a fixed schema rather than always
+ retrieving the latest, and holds the schema update lock through the entire
+ schema swap-out process
+ (Gregory Chanan via Steve Rowe)
+
+* SOLR-6136: ConcurrentUpdateSolrServer includes a Spin Lock (Brandon Chapman, Timothy Potter)
+
+* SOLR-6257: More than two "!"-s in a doc ID throws an
+ ArrayIndexOutOfBoundsException when using the composite id router.
+ (Steve Rowe)
+
+* SOLR-5746: Bugs in solr.xml parsing have been fixed to more correctly deal with the various
+ datatypes of options people can specify, additional error handling of duplicated/unidentified
+ options has also been added. (Maciej Zasada, hossman)
+
+* SOLR-5847: Fixed data import abort button in admin UI. (ehatcher)
+
+* SOLR-6264: Distributed commit and optimize are executed serially across all
+ replicas. (Mark Miller, Timothy Potter)
+
+* SOLR-6163: Correctly decode special characters in managed stopwords and synonym endpoints.
+ (Vitaliy Zhovtyuk, Timo Schmidt via Timothy Potter)
+
+* SOLR-6336: DistributedQueue can easily create too many ZooKeeper Watches.
+ (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6347: DELETEREPLICA throws a NPE while removing the last Replica in a Custom
+ sharded collection. (Anshum Gupta)
+
+* SOLR-6062: Fix undesirable edismax query parser effect (introduced in SOLR-2058) in how phrase queries
+ generated from pf, pf2, and pf3 are merged into the main query. (Michael Dodsworth via ehatcher)
+
+* SOLR-6372: HdfsDirectoryFactory should use supplied Configuration for communicating with secure kerberos.
+ (Gregory Chanan via Mark Miller)
+
+* SOLR-6284: Fix NPE in OCP when non-existent sliceId is used for a
+ deleteShard request (Ramkumar Aiyengar via Anshum Gupta)
+
+* SOLR-6380: Added missing context info to log message if IOException occurs in processing tlog
+ (Steven Bower via hossman)
+
+* SOLR-6383: RegexTransformer returns no results after replaceAll if regex does not match a value.
+ (Alexander Kingson, shalin)
+
+* SOLR-6387: Add better error messages throughout Solr and supply a work around for
+ Java bug #8047340 to SystemInfoHandler: On Turkish default locale, some JVMs fail
+ to fork on MacOSX, BSD, AIX, and Solaris platforms. (hossman, Uwe Schindler)
+
+* SOLR-6338: coreRootDirectory requires trailing slash, or SolrCloud cores are created in wrong location.
+ (Primož Skale via Erick Erickson)
+
+* SOLR-6314: Facet counts duplicated in the response if specified more than once on the request.
+ (Vamsee Yarlagadda, Erick Erickson)
+
+* SOLR-6378: Fixed example/example-DIH/ issues with "tika" and "solr" configurations, and tidied up README.txt
+ (Daniel Shchyokin via ehatcher)
+
+* SOLR-6393: TransactionLog replay performance on HDFS is very poor. (Mark Miller)
+
+* SOLR-6268: HdfsUpdateLog has a race condition that can expose a closed HDFS FileSystem instance and should
+ close its FileSystem instance if either inherited close method is called. (Mark Miller)
+
+* SOLR-6089: When using the HDFS block cache, when a file is deleted, its underlying data entries in the
+ block cache are not removed, which is a problem with the global block cache option.
+ (Mark Miller, Patrick Hunt)
+
+* SOLR-6402: OverseerCollectionProcessor should not exit for ZooKeeper ConnectionLoss.
+ (Jessica Cheng via Mark Miller)
+
+* SOLR-6405: ZooKeeper calls can easily not be retried enough on ConnectionLoss.
+ (Jessica Cheng, Mark Miller)
+
+* SOLR-6410: Ensure all Lookup instances are closed via CloseHook
+ (hossman, Areek Zillur, Ryan Ernst, Dawid Weiss)
+
+Optimizations
+---------------------
+
+* LUCENE-5803: Solr's schema now uses DelegatingAnalyzerWrapper. This uses less heap
+ for cached TokenStreamComponents because it caches per FieldType not per Field, so
+ indexes with many fields of same type just use one TokenStream per thread.
+ (Shay Banon, Uwe Schindler, Robert Muir)
+
+* SOLR-6259: Reduce CPU usage by avoiding repeated costly calls to Document.getField inside
+ DocumentBuilder.toDocument for use-cases with large number of fields and copyFields.
+ (Steven Bower via shalin)
+
+* SOLR-5968: BinaryResponseWriter fetches unnecessary stored fields when only pseudo-fields
+ are requested. (Gregg Donovan via shalin)
+
+* SOLR-6261: Run ZooKeeper watch event callbacks in parallel to the ZooKeeper
+ event thread. (Ramkumar Aiyengar via Mark Miller)
+
+Other Changes
+---------------------
+
+* SOLR-6173: Fixed wrong failure message in TestDistributedSearch. (shalin)
+
+* SOLR-5902: Corecontainer level mbeans are not exposed (noble)
+
+* SOLR-6194: Allow access to DataImporter and DIHConfiguration from DataImportHandler.
+ (Aaron LaBella via shalin)
+
+* SOLR-6170: CoreContainer.preRegisterInZk() and CoreContainer.register() commands
+ are merged into CoreContainer.create(). (Alan Woodward)
+
+* SOLR-6171: Remove unused SolrCores coreNameToOrig map (Alan Woodward)
+
+* SOLR-5596: Set system property zookeeper.forceSync=no for Solr test cases. (shalin)
+
+* SOLR-2853: Add a unit test for the case when "spellcheck.maxCollationTries=0" (James Dyer)
+
+* SOLR-6240: Removed unused coreName parameter in ZkStateReader.getReplicaProps. (shalin)
+
+* SOLR-6241: Harden the HttpPartitionTest. (shalin)
+
+* SOLR-6228: Fixed bug in TestReplicationHandler.doTestIndexAndConfigReplication. (shalin)
+
+* SOLR-6120: On Windows, when the war is not extracted, the zkcli.bat script
+ will print a helpful message indicating that the war must be unzipped instead
+ of a java error about a missing class. (shalin, Shawn Heisey)
+
+* SOLR-6179: Better strategy for handling empty managed data to avoid spurious
+ warning messages in the logs. (Timothy Potter)
+
+* SOLR-6232: CoreContainer.remove() replaced with CoreContainer.unload(). A call to
+ unload will also close the core.
+
+* SOLR-3893: DIH should not depend on mail.jar,activation.jar (Timothy Potter, Steve Rowe)
+
+* SOLR-6252: A couple of small improvements to UnInvertedField class.
+ (Vamsee Yarlagadda, Gregory Chanan, Mark Miller)
+
+* SOLR-3345: BaseDistributedSearchTestCase should always ignore QTime.
+ (Vamsee Yarlagadda, Benson Margulies via Mark Miller)
+
+* SOLR-6270: Increased timeouts for MultiThreadedOCPTest. (shalin)
+
+* SOLR-6274: UpdateShardHandler should log the params used to configure its
+ HttpClient. (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-6194: Opened up "public" access to DataSource, DocBuilder, and EntityProcessorWrapper
+ in DIH. (Aaron LaBella via ehatcher)
+
+* SOLR-6269: Renamed "rollback" to "error" in DIH internals, including renaming onRollback
+ to onError introduced in SOLR-6258. (ehatcher)
+
+* SOLR-3622: When using DIH in SolrCloud-mode, rollback will no longer be called when
+ an error occurs. (ehatcher)
+
+* SOLR-6231: Increased timeouts and hardened the RollingRestartTest. (Noble Paul, shalin)
+
+* SOLR-6290: Harden and speed up CollectionsAPIAsyncDistributedZkTest. (Mark Miller, shalin)
+
+* SOLR-6281: Made PostingsSolrHighlighter more configurable via subclass extension. (David Smiley)
+
+* SOLR-6309: Increase timeouts for AsyncMigrateRouteKeyTest. (shalin)
+
+* SOLR-2168: Added support for facet.missing in /browse field and pivot faceting. (ehatcher)
+
+* SOLR-4702: Added support for multiple spellcheck collations to /browse UI. (ehatcher)
+
+* SOLR-5664: Added support for multi-valued field highlighting in /browse UI. (ehatcher)
+
+* SOLR-6313: Improve SolrCloud cloud-dev scripts. (Mark Miller, Vamsee Yarlagadda)
+
+* SOLR-6360: Remove bogus "Content-Charset" header in HttpSolrServer. (Michael Ryan,
+ Uwe Schindler)
+
+* SOLR-6362: Fix bug in TestSqlEntityProcessorDelta. (James Dyer)
+
+* SOLR-6388: Force upgrade of Apache POI dependency in Solr Cell to version
+ 3.10.1 to fix CVE-2014-3529 and CVE-2014-3574. (Uwe Schindler)
+
+* SOLR-6391: Improve message for CREATECOLLECTION failure due to missing
+ numShards (Anshum Gupta)
+
+================== 4.9.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.5 (with upgraded Apache POI 3.10.1)
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+
+Detailed Change List
+----------------------
+
+Other Changes
+---------------------
+
+* SOLR-6503: Removed support for parsing netcdf files in Solr Cell because
+ of license issues. If you need support for this format, download the parser
+ JAR yourself (version 4.2) and add it to contrib/extraction/lib folder:
+ http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/
+ (Uwe Schindler)
+
+* SOLR-6388: Force upgrade of Apache POI dependency in Solr Cell to version
+ 3.10.1 to fix CVE-2014-3529 and CVE-2014-3574. (Uwe Schindler)
+
+================== 4.9.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.5
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+
+Upgrading from Solr 4.8
+----------------------
+
+* Support for DiskDocValuesFormat (ie: fieldTypes configured with docValuesFormat="Disk")
+ has been removed due to poor performance. If you have an existing fieldTypes using
+ DiskDocValuesFormat please modify your schema.xml to remove the 'docValuesFormat'
+ attribute, and optimize your index to rewrite it into the default codec, prior to
+ upgrading to 4.9. See LUCENE-5761 for more details.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-5999: Add checkIntegrityAtMerge support to solrconfig.xml.
+ (Varun Thacker via Ryan Ernst)
+
+* SOLR-6043: Add ability to set http headers in solr response
+ (Tomás Fernández Löbbe via Ryan Ernst)
+
+* SOLR-5973: Pluggable Ranking Collectors and Merge Strategies
+ (Joel Bernstein)
+
+* SOLR-6108: Add support for 'addreplica' Collection API in SolrJ. (shalin)
+
+* SOLR-5468: Allow a client application to request the minium achieved
+ replication factor for an update request (single or batch) by sending
+ an optional parameter "min_rf". (Timothy Potter)
+
+* SOLR-6088: Add query re-ranking with the ReRankingQParserPlugin
+ (Joel Bernstein)
+
+* SOLR-5285: Added a new [child ...] DocTransformer for optionally including
+ Block-Join descendant documents inline in the results of a search. This works
+ independent of whether the search itself is a block-join related query and is
+ supported by he xml, json, and javabin response formats.
+ (Varun Thacker via hossman)
+
+* SOLR-6150: Add new AnalyticsQuery to support pluggable analytics
+ (Joel Bernstein)
+
+* SOLR-6125: Allow SolrIndexWriter to close without waiting for merges
+ (Christine Poerschke via Alan Woodward)
+
+* SOLR-6064: DebugComponent track output should be returned as a JSON
+ object rather than a list (Christine Poerschke, Alan Woodward)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-5956: Use coreDescriptor.getInstanceDir() instead of getRawInstanceDir()
+ in the SnapShooter to avoid problems when solr.solr.home is a symbolic link.
+ (Timothy Potter)
+
+* SOLR-6002: Fix a couple of ugly issues around SolrIndexWriter close and
+ rollback as well as how SolrIndexWriter manages its ref counted directory
+ instance. (Mark Miller, Gregory Chanan)
+
+* SOLR-6015: Better way to handle managed synonyms when ignoreCase=true
+ (Timothy Potter)
+
+* SOLR-6104: The 'addreplica' Collection API does not support 'async' parameter.
+ (shalin)
+
+* SOLR-6101: Shard splitting doesn't work when legacyCloud=false is set in
+ cluster properties. (shalin)
+
+* SOLR-6111: The 'deleteshard' collection API should be able to delete a shard
+ in 'construction' state. (shalin)
+
+* SOLR-6118: 'expand.sort' didn't support function queries. (David Smiley)
+
+* SOLR-6120: zkcli.sh should expand solr.war automatically instead of throwing
+ ClassNotFoundException. (sebastian badea, shalin)
+
+* SOLR-6149: Specifying the query value without any index value does not work in
+ Analysis browser. (Aman Tandon, shalin)
+
+* SOLR-6145: Fix Schema API optimistic concurrency by moving it out of
+ ManagedIndexSchema.add(Copy)Fields() into the consumers of those methods:
+ CopyFieldCollectionResource, FieldCollectionResource, FieldResource,
+ and AddSchemaFieldsUpdateProcessorFactory.
+ (Gregory Chanan, Alexey Serba, Steve Rowe)
+
+* SOLR-6146: Incorrect configuration such as wrong chroot in zk server address can
+ cause CloudSolrServer to leak resources. (Jessica Cheng, Varun Thacker, shalin)
+
+* SOLR-6158: Relative configSetBase directories were resolved relative to the
+ container CWD, rather than solr.home. (Simon Endele, Alan Woodward)
+
+* SOLR-5426: Fixed a bug in ReverseWildCardFilter that could cause
+ InvalidTokenOffsetsException when highlighting. (Uwe Schindler, Arun Kumar, via hossman)
+
+* SOLR-6175: DebugComponent throws NPE on shard exceptions when using shards.tolerant.
+ (Tomás Fernández Löbbe via shalin)
+
+* SOLR-6129: DateFormatTransformer doesn't resolve dateTimeFormat. (Aaron LaBella via shalin)
+
+* SOLR-6164: Copy Fields Schema additions are not distributed to other nodes.
+ (Gregory Chanan via Steve Rowe)
+
+* SOLR-6160: An error was sometimes possible if a distributed search included grouping
+ with group.facet, faceting on facet.field and either facet.range or facet.query.
+ (David Smiley)
+
+* SOLR-6182: Data stored by the RestManager could not be reloaded after core restart, causing
+ the core to fail to load; cast the data loaded from storage to the correct data type.
+ (Timothy Potter)
+
+Other Changes
+---------------------
+
+* SOLR-5980: AbstractFullDistribZkTestBase#compareResults always returns false
+ for shouldFail. (Mark Miller, Gregory Chanan)
+
+* SOLR-5987: Add "collection" to UpdateParams. (Mark Miller, Greg Solovyev)
+
+* SOLR-3862: Add remove" as update option for atomically removing a value
+ from a multivalued field (Jim Musli, Steven Bower, Alaknantha via Erick Erickson)
+
+* SOLR-5974: Remove ShardDoc.score and use parent's ScoreDoc.score.
+ (Tomás Fernández Löbbe via Ryan Ernst)
+
+* SOLR-6025: Replace mentions of CommonsHttpSolrServer with HttpSolrServer and
+ StreamingUpdateSolrServer with ConcurrentUpdateSolrServer. (Ahmet Arslan via shalin)
+
+* SOLR-6013: Fix method visibility of Evaluator, refactor DateFormatEvaluator for
+ extensibility. (Aaron LaBella via shalin)
+
+* SOLR-6022: Deprecate getAnalyzer() in IndexField and FieldType, and add getIndexAnalyzer().
+ (Ryan Ernst)
+
+* SOLR-3671: Fix DIHWriter interface usage so users may implement writers that output
+ documents to a location external to Solr (ex. a NoSql db). (Roman Chyla via James Dyer)
+
+* SOLR-5340: Add support for named snapshots (Varun Thacker via Noble Paul)
+
+* SOLR-5495: Recovery strategy for leader partitioned from replica case. Hardening
+ recovery scenarios after the leader receives an error trying to forward an
+ update request to a replica. (Timothy Potter)
+
+* SOLR-6116: Refactor DocRouter.getDocRouter to accept routerName as a String. (shalin)
+
+* SOLR-6026: REQUESTSTATUS Collection API now also checks for submitted tasks which are
+ yet to begin execution.
+
+* SOLR-6067: Refactor duplicate Collector code in SolrIndexSearcher
+ (Christine Poerschke via hossman)
+
+* SOLR-5940: post.jar reports back detailed error in case of error responses.
+ (Sameer Maggon, shalin, Uwe Schindler)
+
+* SOLR-6161: SolrDispatchFilter should throw java.lang.Error back even if wrapped in
+ another exception. (Miklos Christine via shalin)
+
+* SOLR-6153: ReplicationHandler backup response format should contain backup name.
+ (Varun Thacker via shalin)
+
+* SOLR-6169: Remove broken handleAlias action in CoreAdminHandler (Alan
+ Woodward)
+
+* SOLR-6128: Removed deprecated analysis factories and fieldTypes from the example
+ schema.xml (hossman)
+
+* SOLR-5868: HttpClient should be configured to use ALLOW_ALL_HOSTNAME hostname
+ verifier to simplify SSL setup. (Steve Davids via Mark Miller)
+
+
+Optimizations
+----------------------
+
+* SOLR-5681: Make the processing of Collection API calls multi-threaded.
+ (Anshum Gupta, shalin, Noble Paul)
+
+Build
+---------------------
+
+* SOLR-6006: Separate test and compile scope dependencies in the Solrj and
+ Solr contrib ivy.xml files, so that the derived Maven dependencies get
+ filled out properly in the corresponding POMs. (Steven Scott, Steve Rowe)
+
+* SOLR-6130: Added com.uwyn:jhighlight dependency to, and removed asm:asm
+ dependency from the extraction contrib - dependencies weren't fully
+ upgraded with the Tika 1.4->1.5 upgrade (SOLR-5763). (Steve Rowe)
+
+================== 4.8.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-5904: ElectionContext can cancel an election when it should not if there
+ was an exception while trying to register as the leader.
+ (Mark Miller, Alan Woodward)
+
+* SOLR-5993: ZkController can warn about shard leader conflict even after the conflict
+ is resolved. (Gregory Chanan via shalin)
+
+* SOLR-6017: Fix SimpleQParser to use query analyzer
+ (Ryan Ernst)
+
+* SOLR-6029: CollapsingQParserPlugin throws ArrayIndexOutOfBoundsException
+ if elevated doc has been deleted from a segment. (Greg Harris, Joel Bernstein)
+
+* SOLR-6030: Use System.nanoTime() instead of currentTimeInMills() in LRUCache.warm.
+ (Tomás Fernández Löbbe via shalin)
+
+* SOLR-6037: Fixed incorrect max/sum/stddev for Date fields in StatsComponent
+ (Brett Lucey, hossman)
+
+* SOLR-6023: FieldAnalysisRequestHandler throws NPE if no parameters are supplied.
+ (shalin)
+
+* SOLR-5090: SpellCheckComponent sometimes throws NPE if
+ "spellcheck.alternativeTermCount" is set to zero (James Dyer).
+
+* SOLR-6039: fixed debug output when no results in response
+ (Tomás Fernández Löbbe, hossman)
+
+* SOLR-6035: CloudSolrServer directUpdate routing should use getCoreUrl.
+ (Marvin Justice, Joel Bernstein)
+
+================== 4.8.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.5
+Carrot2 3.9.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.6
+
+Upgrading from Solr 4.7
+----------------------
+
+* In previous versions of Solr, Terms that exceeded Lucene's MAX_TERM_LENGTH were
+ silently ignored when indexing documents. Beginning with Solr 4.8, a document
+ an error will be generated when attempting to index a document with a term
+ that is too large. If you wish to continue to have large terms ignored,
+ use "solr.LengthFilterFactory" in all of your Analyzers. See LUCENE-5472 for
+ more details.
+
+* Solr 4.8 requires Java 7 or greater, Java 8 is verified to be
+ compatible and may bring some performance improvements. When using
+ Oracle Java 7 or OpenJDK 7, be sure to not use the GA build 147 or
+ update versions u40, u45 and u51! We recommend using u55 or later.
+ An overview of known JVM bugs can be found on
+ http://wiki.apache.org/lucene-java/JavaBugs
+
+* ZooKeeper is upgraded from 3.4.5 to 3.4.6.
+
+* <fields> and <types> tags have been deprecated. There is no longer any reason to
+ keep them in the schema file, they may be safely removed. This allows intermixing of
+ <fieldType>, <field> and <copyField> definitions if desired. Currently, these tags
+ are supported so either style may be implemented. TBD is whether they'll be
+ deprecated formally for 5.0
+
+
+Detailed Change List
+----------------------
+
+System Requirements
+----------------------
+
+* LUCENE-4747, LUCENE-5514: Move to Java 7 as minimum Java version.
+ (Robert Muir, Uwe Schindler)
+
+New Features
+----------------------
+
+* SOLR-5130: Implement addReplica Collections API (Noble Paul)
+
+* SOLR-5183: JSON updates now support nested child documents using a
+ "_childDocument_" object key. (Varun Thacker, hossman)
+
+* SOLR-5714: You can now use one pool of memory for for the HDFS block cache
+ that all collections share. (Mark Miller, Gregory Chanan)
+
+* SOLR-5720: Add ExpandComponent to expand results collapsed by the
+ CollapsingQParserPlugin. (Joel Bernstein)
+
+* SOLR-3177: Enable tagging and excluding filters in StatsComponent via the
+ localParams syntax. (Mathias H., Nikolai Luthman, Vitaliy Zhovtyuk, shalin)
+
+* SOLR-1604: Wildcards, ORs etc inside Phrase Queries. (Ahmet Arslan via Erick Erickson)
+
+* SOLR-5477: Async execution of OverseerCollectionProcessor(CollectionsAPI)
+ tasks. (Anshum Gupta)
+
+* SOLR-5865: Provide a MiniSolrCloudCluster to enable easier testing.
+ (Greg Chanan via Mark Miller)
+
+* SOLR-5860: Use leaderConflictResolveWait in WaitForState during recovery/startup,
+ improve logging and force refresh cluster state every 15 seconds.
+ (Timothy Potter via shalin)
+
+* SOLR-5749: A new Overseer status collection API exposes overseer queue sizes, timing
+ statistics, success and error counts and last N failures per operation. (shalin)
+
+* SOLR-5858: Add a hl.qparser parameter to allow you to define a queryparser
+ for hl.q highlight queries. If no queryparser is defined, Solr will use
+ the overall query's defType. (Alan Woodward)
+
+* SOLR-4478: Allow cores to use configuration from a configsets directory
+ outside their instance directory. (Alan Woodward, Erick Erickson)
+
+* SOLR-5466: A new List collections and cluster status API which clients can use
+ to read collection and shard information instead of reading data directly from ZooKeeper.
+ (Dave Seltzer, Varun Thacker, Vitaliy Zhovtyuk, Erick Erickson, shalin)
+
+* SOLR-5795: New DocExpirationUpdateProcessorFactory supports computing an expiration
+ date for documents from the "TTL" expression, as well as automatically deleting expired
+ documents on a periodic basis. (hossman)
+
+* SOLR-5829: Allow ExpandComponent to accept query and filter query parameters
+ (Joel Bernstein)
+
+* SOLR-5653: Create a RestManager to provide REST API endpoints for
+ reconfigurable plugins. (Tim Potter, Steve Rowe)
+
+* SOLR-5655: Create a stopword filter factory that is (re)configurable,
+ and capable of reporting its configuration, via REST API.
+ (Tim Potter via Steve Rowe)
+
+* SOLR-5654: Create a synonym filter factory that is (re)configurable, and
+ capable of reporting its configuration, via REST API.
+ (Tim Potter via Steve Rowe)
+
+* SOLR-5960: Add support for basic authentication in post.jar tool, e.g.:
+ java -Durl="http://username:password@hostname:8983/solr/update" -jar post.jar sample.xml
+ (Sameer Maggon via Uwe Schindler)
+
+* SOLR-4864: RegexReplaceProcessorFactory should support pattern capture group
+ substitution in replacement string.
+ (Sunil Srinivasan, Jack Krupansky via Steve Rowe)
+
+Bug Fixes
+----------------------
+
+* SOLR-5858, SOLR-4812: edismax and dismax query parsers can be used for parsing
+ highlight queries. (Alan Woodward, Tien Nguyen Manh)
+
+* SOLR-5893: On restarting overseer designate , move itself to front of the queue (Noble Paul)
+
+* SOLR-5915: Attempts to specify the parserImpl for
+ solr.PreAnalyzedField fieldtype failed. (Mike McCandless)
+
+* SOLR-5943: SolrCmdDistributor does not distribute the openSearcher parameter.
+ (ludovic Boutros via shalin)
+
+* SOLR-5954: Slower DataImportHandler process caused by not reusing jdbc
+ connections. (Mark Miller, Paco Garcia, Raja Nagendra Kumar)
+
+* SOLR-5897: Upgraded to jQuery 1.7.2, Solr was previously using 1.4.3, the file was
+ mistakenly named 1.7.2 (steffkes)
+
+Optimizations
+----------------------
+* SOLR-1880: Distributed Search skips GET_FIELDS stage if EXECUTE_QUERY
+ stage gets all fields. Requests with fl=id or fl=id,score are now single-pass.
+ (Shawn Smith, Vitaliy Zhovtyuk, shalin)
+
+* SOLR-5783: Requests to open a new searcher will now reuse the current registered
+ searcher (w/o additional warming) if possible in situations where the underlying
+ index has not changed. This reduces overhead in situations such as deletes that
+ do not modify the index, and/or redundant commits. (hossman)
+
+* SOLR-5884: When recovery is cancelled, any call to the leader to wait to see
+ the replica in the right state for recovery should be aborted. (Mark Miller)
+
+Other Changes
+---------------------
+
+* SOLR-5909: Upgrade Carrot2 clustering dependency to 3.9.0. (Dawid Weiss)
+
+* SOLR-5764: Fix recently added tests to not use absolute paths to load test-files,
+ use SolrTestCaseJ4.getFile() and getResource() instead; fix morphlines/map-reduce
+ to not duplicate test resources and fix dependencies among them.
+ (Uwe Schindler)
+
+* SOLR-5765: Update to SLF4J 1.7.6. (Mark Miller)
+
+* SOLR-5609: If legacy mode is disabled don't let cores create slices/replicas/collections .
+ All operations should be performed through collection API (Noble Paul)
+
+* SOLR-5613: Upgrade to commons-codec 1.9 for better BeiderMorseFilter performance.
+ (Thomas Champagne, Shawn Heisey via shalin)
+
+* SOLR-5771: Add SolrTestCaseJ4.SuppressSSL annotation to disable SSL (instead of static boolean).
+ (Robert Muir)
+
+* SOLR-5799: When registering as the leader, if an existing ephemeral
+ registration exists, wait a short time to see if it goes away.
+ (Mark Miller)
+
+* LUCENE-5472: IndexWriter.addDocument will now throw an IllegalArgumentException
+ if a Term to be indexed exceeds IndexWriter.MAX_TERM_LENGTH. To recreate previous
+ behavior of silently ignoring these terms, use LengthFilter in your Analyzer.
+ (hossman, Mike McCandless, Varun Thacker)
+
+* SOLR-5825: Separate http request creating and execution in SolrJ
+ (Steven Bower via Erick Erickson)
+
+* SOLR-5837: Add hashCode/equals to SolrDocument, SolrInputDocument
+ and SolrInputField for testing purposes. (Varun Thacker, Noble Paul,
+ Mark Miller)
+
+* SOLR-5853: The createCollection methods in the test framework now reports
+ result of operation in the returned CollectionAdminResponse (janhoy)
+
+* SOLR-5838: Relative SolrHome Path Bug At AbstractFullDistribZkTestBase.
+ (Furkan KAMACI via shalin)
+
+* SOLR-5763: Upgrade to Tika 1.5 (Vitaliy Zhovtyuk via Steve Rowe)
+
+* SOLR-5881: Upgrade ZooKeeper to 3.4.6 (Shawn Heisey)
+
+* SOLR-5883: Many tests do not shutdown SolrServer.
+ (Tomás Fernández Löbbe via Mark Miller)
+
+* SOLR-5898: Update to latest Kite Morphlines release: Version 0.12.1.
+ (Mark Miller)
+
+* SOLR-5228: Don't require <field> or <dynamicField> be inside of <fields> -- or
+ that <fieldType> be inside of <types>. (Erick Erickson)
+
+* SOLR-5903: SolrCore implements Closeable, cut over to using try-with-resources
+ where possible. (Alan Woodward)
+
+* SOLR-5914: Cleanup and fix Solr's test cleanup code.
+ (Mark Miller, Uwe Schindler)
+
+* SOLR-5936: Deprecate non-Trie-based numeric & date field types. (Steve Rowe)
+
+* SOLR-5934: LBHttpSolrServer exception handling improvement and small test
+ improvements. (Gregory Chanan via Mark Miller)
+
+* SOLR-5773: CollapsingQParserPlugin should make elevated documents the
+ group head. (David Boychuck, Joel Bernstein)
+
+* SOLR-5937: Modernize the DIH example config sets. (Steve Rowe)
+
+================== 4.7.2 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-5951: Fixed SolrDispatchFilter to throw useful exception on startup if
+ SLF4j logging jars are missing. (Uwe Schindler, Hossman, Shawn Heisey)
+
+* SOLR-5950: Maven config: make the org.slf4j:slf4j-api dependency transitive
+ (i.e., not optional) in all modules in which it's a dependency, including
+ solrj, except for the WAR, where it will remain optional.
+ (Uwe Schindler, Steve Rowe)
+
+================== 4.7.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-5647: The lib paths in example-schemaless will now load correctly.
+ (Paul Westin via Shawn Heisey)
+
+* SOLR-5770: All attempts to match a SolrCore with its state in clusterstate.json
+ should be done with the CoreNodeName. (Steve Davids via Mark Miller)
+
+* SOLR-5875: QueryComponent.mergeIds() unmarshals all docs' sort field values once
+ per doc instead of once per shard.
+ (Alexey Serba, hoss, Martin de Vries via Steve Rowe)
+
+* SOLR-5800: Admin UI - Analysis form doesn't render results correctly when a
+ CharFilter is used. (steffkes)
+
+* SOLR-5870: Admin UI - Reload on Core Admin doesn't show errors (steffkes)
+
+* SOLR-5867: OverseerCollectionProcessor isn't properly generating https urls in some
+ cases. (Steve Davids via shalin)
+
+* SOLR-5866: UpdateShardHandler needs to use the system default scheme registry to
+ properly handle https via javax.net.ssl.* properties. (Steve Davids via shalin)
+
+* SOLR-5782: The full MapReduceIndexer help text does not display when using --help.
+ (Mark Miller, Wolfgang Hoschek)
+
+* SOLR-5824: Merge up Solr MapReduce contrib code to latest external changes.
+ Includes a few minor bug fixes.
+ (Mark Miller)
+
+* SOLR-5818: distrib search with custom comparator does not quite work correctly
+ (Ryan Ernst)
+
+* SOLR-5895: JavaBinLoader hides IOExceptions. (Mike Sokolov via shalin)
+
+* SOLR-5861: Recovery should not set onlyIfLeaderActive=true for slice in 'recovery'
+ state. (shalin)
+
+* SOLR-5423: CSV output doesn't include function field
+ (Arun Kumar, hossman, Steve Rowe)
+
+* SOLR-5550: shards.info is not returned by a short circuited distributed query.
+ (Timothy Potter, shalin)
+
+* SOLR-5777: Fix ordering of field values in JSON updates where
+ field name key is repeated (hossman)
+
+* SOLR-5734: We should use System.nanoTime rather than System.currentTimeMillis
+ when calculating elapsed time. (Mark Miller, Ramkumar Aiyengar)
+
+* SOLR-5760: ConcurrentUpdateSolrServer has a blockUntilFinished call when
+ streamDeletes is true that should be tucked into the if statement below it.
+ (Mark Miller, Gregory Chanan)
+
+* SOLR-5761: HttpSolrServer has a few fields that can be set via setters but
+ are not volatile. (Mark Miller, Gregory Chanan)
+
+* SOLR-5907: The hdfs write cache can cause a reader to see a corrupted state.
+ It now defaults to off, and if you were using solr.hdfs.blockcache.write.enabled
+ explicitly, you should set it to false.
+ (Mark Miller)
+
+* SOLR-5811: The Overseer will retry work items until success, which is a serious
+ problem if you hit a bad work item. (Mark Miller)
+
+* SOLR-5796: Increase how long we are willing to wait for a core to see the ZK
+ advertised leader in its local state. (Timothy Potter, Mark Miller)
+
+* SOLR-5834: Overseer threads are only being interrupted and not closed.
+ (hossman, Mark Miller)
+
+* SOLR-5839: ZookeeperInfoServlet does not trim path properly.
+ (Furkan KAMACI via Mark Miller)
+
+* SOLR-5874: Unsafe cast in CloudSolrServer's RouteException. Change
+ RouteException to handle Throwable rather than Exception.
+ (Mark Miller, David Arthur)
+
+* SOLR-5899: CloudSolrServer's RouteResponse and RouteException should be
+ publicly accessible. (Mark Miller, shalin)
+
+* SOLR-5905: CollapsingQParserPlugin throws a NPE if required 'field' param is missing.
+ (Spyros Kapnissis via shalin)
+
+* SOLR-5906: Collection create API ignores property.instanceDir parameter.
+ (Varun Thacker, shalin)
+
+* SOLR-5920: Distributed sort on DateField, BoolField and BCD{Int,Long,Str}Field
+ returns string cast exception (Eric Bus, AJ Lemke, hossman, Steve Rowe)
+
+Other Changes
+---------------------
+
+* SOLR-5796: Make how long we are willing to wait for a core to see the ZK
+ advertised leader in its local state configurable.
+ (Timothy Potter via Mark Miller)
+
+================== 4.7.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.6.0
+----------------------
+
+* CloudSolrServer and LBHttpSolrServer no longer declare MalformedURLException
+ as thrown from their constructors.
+
+* Due to a bug in previous versions the default value of the 'discountOverlap' property
+ of DefaultSimilarity was not being set appropriately if you were using the implicit
+ DefaultSimilarityFactory instead of explicitly configuring it. To preserve
+ consistent behavior for people who upgrade, the implicit behavior is now contingent
+ on the <luceneMatchVersion/> -- discountOverlap=false for 4.6 and below,
+ discountOverlap=true for 4.7 and above. See SOLR-5561 for more information.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-5308: SOLR-5601: SOLR-5710: A new 'migrate' collection API to split all
+ documents with a route key into another collection (shalin)
+
+* SOLR-5441: Expose number of transaction log files and their size via JMX.
+ (Rafał Kuć via shalin)
+
+* SOLR-5320: Added support for tri-level compositeId routing.
+ (Anshum Gupta via shalin)
+
+* SOLR-5458: Admin UI - Added a new "Files" conf directory browser/file viewer.
+ (steffkes)
+
+* SOLR-5447, SOLR-5490: Add a QParserPlugin for Lucene's SimpleQueryParser.
+ (Jack Conradson via shalin)
+
+* SOLR-5208: Support for the setting of core.properties key/values at create-time on
+ Collections API (Erick Erickson)
+
+* SOLR-5428: SOLR-5690: New 'stats.calcdistinct' parameter in StatsComponent returns
+ set of distinct values and their count. This can also be specified per field
+ e.g. 'f.field.stats.calcdistinct'. (Elran Dvir via shalin)
+
+* SOLR-5378, SOLR-5528: A new SuggestComponent that fully utilizes the Lucene suggester
+ module and adds pluggable dictionaries, payloads and better distributed support.
+ This is intended to eventually replace the Suggester support through the
+ SpellCheckComponent. (Areek Zillur, Varun Thacker via shalin)
+
+* SOLR-5492: Return the replica that actually served the query in shards.info
+ response. (shalin)
+
+* SOLR-5506: Support docValues in CollationField and ICUCollationField.
+ (Robert Muir)
+
+* SOLR-5023: Add support for deleteInstanceDir to be passed from SolrJ for Core
+ Unload action. (Lyubov Romanchuk, shalin)
+
+* SOLR-1871: The 'map' function query accepts a ValueSource as target and
+ default value. (Chris Harris, shalin)
+
+* SOLR-5556: Allow class of CollectionsHandler and InfoHandler to be specified
+ in solr.xml. (Gregory Chanan, Alan Woodward)
+
+* SOLR-5581: Give ZkCLI the ability to get files. (Gregory Chanan via Mark Miller)
+
+* SOLR-5536: Add ValueSource collapse criteria to CollapsingQParsingPlugin (Joel Bernstein)
+
+* SOLR-5541: Allow QueryElevationComponent to accept elevateIds and excludeIds
+ as http parameters (Joel Bernstein)
+
+* SOLR-5463: new 'cursorMark' request param for deep paging of sorted result sets
+ (sarowe, hossman)
+
+* SOLR-5529: Add support for queries to use multiple suggesters.
+ (Areek Zillur, Erick Erickson, via Robert Muir)
+
+* SOLR-1301: Add a Solr contrib that allows for building Solr indexes via
+ Hadoop's MapReduce. (Matt Revelle, Alexander Kanarsky, Steve Rowe,
+ Mark Miller, Greg Bowyer, Jason Rutherglen, Kris Jirapinyo, Jason Venner ,
+ Andrzej Bialecki, Patrick Hunt, Wolfgang Hoschek, Roman Shaposhnik,
+ Eric Wong)
+
+* SOLR-5631: Add support for Lucene's FreeTextSuggester.
+ (Areek Zillur via Robert Muir)
+
+* SOLR-5695: Add support for Lucene's BlendedInfixSuggester.
+ (Areek Zillur)
+
+* SOLR-5476: Overseer Role for nodes (Noble Paul)
+
+* SOLR-5594: Allow FieldTypes to specify custom PrefixQuery behavior
+ (Anshum Gupta via hossman)
+
+* LUCENE-5395: Upgrade to Spatial4j 0.4. Various new options are now exposed
+ automatically for an RPT field type. See Spatial4j CHANGES & javadocs.
+ https://github.com/spatial4j/spatial4j/blob/master/CHANGES.md (David Smiley)
+
+* SOLR-5670: allow _version_ to use DocValues. (Per Steffensen via yonik)
+
+* SOLR-5535: Set "partialResults" header for shards that error out if
+ shards.tolerant is specified. (Steve Davids via shalin)
+
+* SOLR-5610: Support cluster-wide properties with an API called CLUSTERPROP (Noble Paul)
+
+* SOLR-5623: Better diagnosis of RuntimeExceptions in analysis
+ (Benson Margulies)
+
+* SOLR-5530: Added a NoOpResponseParser for SolrJ which puts the entire raw
+ response into an entry in the NamedList.
+ (Upayavira, Vitaliy Zhovtyuk via shalin)
+
+* SOLR-5682: Make the admin InfoHandler more pluggable / derivable.
+ (Greg Chanan via Mark Miller)
+
+* SOLR-5672: Add logParamsList parameter to support reduced logging.
+ (Christine Poerschke via Mark Miller)
+
+* SOLR-3854: SSL support for SolrCloud. (Sami Siren, hossman, Steve Davids,
+ Alexey Serba, Mark Miller)
+
+Bug Fixes
+----------------------
+
+* SOLR-5438: DebugComponent throws NPE when used with grouping.
+ (Tomás Fernández Löbbe via shalin)
+
+* SOLR-4612: Admin UI - Analysis Screen contains empty table-columns (steffkes)
+
+* SOLR-5451: SyncStrategy closes its http connection manager before the
+ executor that uses it in its close method. (Mark Miller)
+
+* SOLR-5460: SolrDispatchFilter#sendError can get a SolrCore that it does not
+ close. (Mark Miller)
+
+* SOLR-5461: Request proxying should only set con.setDoOutput(true) if the
+ request is a post. (Mark Miller)
+
+* SOLR-5481: SolrCmdDistributor should not let the http client do its own
+ retries. (Mark Miller)
+
+* LUCENE-5347: Fixed Solr's Zookeeper Client to copy files to Zookeeper using
+ binary transfer. Previously data was read with default encoding and stored
+ in zookeeper as UTF-8. This bug was found after upgrading to forbidden-apis
+ 1.4. (Uwe Schindler)
+
+* SOLR-4376: DataImportHandler uses wrong date format for last_index_time if
+ a delta-import is run first before any full-imports.
+ (Sebastien Lorber, Arcadius Ahouansou via shalin)
+
+* SOLR-5494: CoreContainer#remove throws NPE rather than returning null when
+ a SolrCore does not exist in core discovery mode. (Mark Miller)
+
+* SOLR-5354: Distributed sort is broken with CUSTOM FieldType.
+ (Steve Rowe, hossman, Robert Muir, Jessica Cheng)
+
+* SOLR-5515: NPE when getting stats on date field with empty result on
+ SolrCloud. (Alexander Sagen, shalin)
+
+* SOLR-5204: StatsComponent and SpellCheckComponent do not support the
+ shards.tolerant=true parameter. (Anca Kopetz, shalin)
+
+* SOLR-5527: DIH logs spurious warning for special commands. (shalin)
+
+* SOLR-5524: Exception when using Query Function inside Scale Function.
+ (Trey Grainger, yonik)
+
+* SOLR-5562: ConcurrentUpdateSolrServer constructor ignores supplied httpclient.
+ (Kyle Halliday via Mark Miller)
+
+* SOLR-5567: ZkController getHostAddress duplicates url prefix.
+ (Kyle Halliday, Alexey Serba, shalin)
+
+* SOLR-4992: Solr eats OutOfMemoryError exceptions in many cases.
+ (Mark Miller, Daniel Collins)
+
+* LUCENE-5399, SOLR-5354 sort wouldn't work correctly with
+ distributed searching for some field types such as legacy numeric
+ types (Rob Muir, Mike McCandless)
+
+* SOLR-5643: ConcurrentUpdateSolrServer will sometimes not spawn a new Runner
+ thread even though there are updates in the queue. (Mark Miller)
+
+* SOLR-5650: When a replica becomes a leader, only peer sync with other replicas
+ that last published an ACTIVE state. (Mark Miller)
+
+* SOLR-5657: When a SolrCore starts on HDFS, it should gracefully handle HDFS
+ being in safe mode. (Mark Miller)
+
+* SOLR-5663: example-DIH uses non-existing column for mapping (case-sensitive)
+ (steffkes)
+
+* SOLR-5666: Using the hdfs write cache can result in appearance of corrupted
+ index. (Mark Miller)
+
+* SOLR-5230: Call DelegatingCollector.finish() during grouping.
+ (Joel Bernstein, ehatcher)
+
+* SOLR-5679: Shard splitting fails with ClassCastException on collections
+ upgraded from 4.5 and earlier versions. (Brett Hoerner, shalin)
+
+* SOLR-5673: HTTPSolrServer doesn't set own property correctly in
+ setFollowRedirects. (Frank Wesemann via shalin)
+
+* SOLR-5676: SolrCloud updates rejected if talking to secure ZooKeeper.
+ (Greg Chanan via Mark Miller)
+
+* SOLR-5634: SolrJ GroupCommand.getNGroups returns null if group.format=simple
+ and group.ngroups=true. (Artem Lukanin via shalin)
+
+* SOLR-5667: Performance problem when not using hdfs block cache. (Mark Miller)
+
+* SOLR-5526: Fixed NPE that could arise when explicitly configuring some built
+ in QParserPlugins (Nikolay Khitrin, Vitaliy Zhovtyuk, hossman)
+
+* SOLR-5598: LanguageIdentifierUpdateProcessor ignores all but the first value
+ of multiValued string fields. (Andreas Hubold, Vitaliy Zhovtyuk via shalin)
+
+* SOLR-5593: Replicas should accept the last updates from a leader that has just
+ lost its connection to ZooKeeper. (Christine Poerschke via Mark Miller)
+
+* SOLR-5678: SolrZkClient should throw a SolrException when connect times out
+ rather than a RuntimeException. (Karl Wright, Anshum Gupta, Mark Miller)
+
+* SOLR-4072: Error message is incorrect for linkconfig in ZkCLI.
+ (Vamsee Yarlagadda, Adam Hahn, via Mark Miller)
+
+* SOLR-5691: Sharing non thread safe WeakHashMap across thread can cause
+ problems. (Bojan Smid, Mark Miller)
+
+* SOLR-5693: Running on HDFS does work correctly with NRT search. (Mark Miller)
+
+* SOLR-5644: SplitShard does not handle not finding a shard leader well.
+ (Mark Miller, Anshum Gupta via shalin)
+
+* SOLR-5704: coreRootDirectory was not respected when creating new cores
+ via CoreAdminHandler (Jesse Sipprell, Alan Woodward)
+
+* SOLR-5709: Highlighting grouped duplicate docs from different shards with
+ group.limit > 1 throws ArrayIndexOutOfBoundsException. (Steve Rowe)
+
+* SOLR-5561: Fix implicit DefaultSimilarityFactory initialization in IndexSchema
+ to properly specify discountOverlap option.
+ (Isaac Hebsh, Ahmet Arslan, Vitaliy Zhovtyuk, hossman)
+
+* SOLR-5689: On reconnect, ZkController cancels election on first context rather
+ than latest. (Gregory Chanan, Mark Miller via shalin)
+
+* SOLR-5649: Clean up some minor ConnectionManager issues.
+ (Mark Miller, Gregory Chanan)
+
+* SOLR-5365: Fix bug with compressed files in ExtractingRequestHandler by
+ upgrading commons-compress to 1.7 (Jan Høydahl, hossman)
+
+* SOLR-5675: cloud-scripts/zkcli.bat: quote option log4j
+ (Günther Ruck via steffkes
+
+* SOLR-5721: ConnectionManager can become stuck in likeExpired.
+ (Gregory Chanan via Mark Miller)
+
+* SOLR-5731: In ConnectionManager, we should catch and only log exceptions
+ from BeforeReconnect. (Mark Miller)
+
+* SOLR-5718: Make LBHttpSolrServer zombie checks non-distrib and non-scoring.
+ (Christine Poerschke via Mark Miller)
+
+* SOLR-5727: LBHttpSolrServer should only retry on Connection exceptions when
+ sending updates. Affects CloudSolrServer. (Mark Miller)
+
+* SOLR-5739: Sub-shards created by shard splitting have their update log set
+ to buffering mode on restarts. (Günther Ruck, shalin)
+
+* SOLR-5741: UpdateShardHandler was not correctly setting max total connections
+ on the HttpClient. (Shawn Heisey)
+
+* SOLR-5620: ZKStateReader.aliases should be volatile to ensure all threads see
+ the latest aliases. (Ramkumar Aiyengar via Mark Miller)
+
+* SOLR-5448: ShowFileRequestHandler treats everything as Directory, when in
+ Cloud-Mode. (Erick Erickson, steffkes)
+
+Optimizations
+----------------------
+
+* SOLR-5436: Eliminate the 1500ms wait in overseer loop as well as
+ polling the ZK distributed queue. (Noble Paul, Mark Miller)
+
+* SOLR-5189: Solr 4.x Web UI Log Viewer does not display 'date' column from
+ logs (steffkes)
+
+* SOLR-5512: Optimize DocValuesFacets. (Robert Muir)
+
+* SOLR-2960: fix DIH XPathEntityProcessor to add the correct number of "null"
+ placeholders for multi-valued fields (Michael Watts via James Dyer)
+
+* SOLR-5214: Reduce memory usage for shard splitting by merging segments one
+ at a time. (Christine Poerschke via shalin)
+
+* SOLR-4227: Wrap XML RequestWriter's OutputStreamWriter in a BufferedWriter
+ to avoid frequent converter invocations. (Conrad Herrmann, shalin)
+
+* SOLR-5624: Enable QueryResultCache for CollapsingQParserPlugin.
+ (David Boychuck, Joel Bernstein)
+
+* LUCENE-5440: DocSet decoupled from OpenBitSet. DocSetBase moved to use
+ FixedBitSet instead of OpenBitSet. As a result BitDocSet now only works
+ with FixedBitSet. (Shai Erera)
+
+Other Changes
+---------------------
+
+* SOLR-5399: Add distributed request tracking information to DebugComponent
+ (Tomás Fernández Löbbe via Ryan Ernst)
+
+* SOLR-5421: Remove double set of distrib.from param in processAdd method of
+ DistributedUpdateProcessor. (Anshum Gupta via shalin)
+
+* SOLR-5404: The example config references deprecated classes.
+ (Uwe Schindler, Rafał Kuć via Mark Miller)
+
+* SOLR-5487: Replication factor error message doesn't match constraint.
+ (Patrick Hunt via shalin)
+
+* SOLR-5499: Log a warning if /get is not registered when using SolrCloud.
+ (Daniel Collins via shalin)
+
+* SOLR-5517: Return HTTP error on POST requests with no Content-Type.
+ (Ryan Ernst, Uwe Schindler)
+
+* SOLR-5502: Added a test for tri-level compositeId routing with documents
+ having a "/" in a document id. (Anshum Gupta via Mark Miller)
+
+* SOLR-5533: Improve out of the box support for running Solr on hdfs with
+ SolrCloud. (Mark Miller)
+
+* SOLR-5548: Give DistributedSearchTestCase / JettySolrRunner the ability to
+ specify extra filters. (Greg Chanan via Mark Miller)
+
+* SOLR-5555: LBHttpSolrServer and CloudSolrServer constructors don't need to
+ declare MalformedURLExceptions (Sushil Bajracharya, Alan Woodward)
+
+* SOLR-5565: Raise default ZooKeeper session timeout to 30 seconds from 15
+ seconds. (Mark Miller)
+
+* SOLR-5574: CoreContainer shutdown publishes all nodes as down and waits to
+ see that and then again publishes all nodes as down. (Mark Miller)
+
+* SOLR-5590: Upgrade HttpClient/HttpComponents to 4.3.x.
+ (Karl Wright via Shawn Heisey)
+
+* SOLR-2794: change the default of hl.phraseLimit to 5000.
+ (Michael Della Bitta via Robert Muir, Koji, zarni - pull request #11)
+
+* SOLR-5632: Improve response message for reloading a non-existent core.
+ (Anshum Gupta via Mark Miller)
+
+* SOLR-5633: HttpShardHandlerFactory should make its http client available to subclasses.
+ (Ryan Ernst)
+
+* SOLR-5684: Shutdown SolrServer clients created in BasicDistributedZk2Test and
+ BasicDistributedZkTest. (Tomás Fernández Löbbe via shalin)
+
+* SOLR-5629: SolrIndexSearcher.name should include core name.
+ (Shikhar Bhushan via shalin)
+
+* SOLR-5702: Log config name found for collection at info level.
+ (Christine Poerschke via Mark Miller)
+
+* SOLR-5659: Add test for compositeId ending with an '!'.
+ (Markus Jelsma, Anshum Gupta via shalin)
+
+* SOLR-5700: Improve error handling of remote queries (proxied requests).
+ (Greg Chanan, Steve Davids via Mark Miller)
+
+* SOLR-5585: Raise Collections API timeout to 3 minutes from one minute.
+ (Mark Miller)
+
+* SOLR-5257: Improved error/warn messages when Update XML contains unexpected XML nodes
+ (Vitaliy Zhovtyuk, hossman)
+
+
+================== 4.6.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-5408: CollapsingQParserPlugin scores incorrectly when multiple sort criteria are used
+ (Brandon Chapman, Joel Bernstein)
+
+* SOLR-5416: CollapsingQParserPlugin breaks Tag/Exclude Faceting (David Boychuck, Joel Bernstein)
+
+* SOLR-5442: Python client cannot parse proxied response when served by Tomcat.
+ (Patrick Hunt, Gregory Chanan, Vamsee Yarlagadda, Romain Rigaux, Mark Miller)
+
+* SOLR-5445: Proxied responses should propagate all headers rather than the
+ first one for each key. (Patrick Hunt, Mark Miller)
+
+* SOLR-5479: SolrCmdDistributor retry logic stops if a leader for the request
+ cannot be found in 1 second. (Mark Miller)
+
+* SOLR-5532: SolrJ Content-Type validation is too strict for some
+ webcontainers / proxies. (Jakob Furrer, hossman, Shawn Heisey, Uwe Schindler,
+ Mark Miller)
+
+* SOLR-5547: Creating a collection alias using SolrJ's CollectionAdminRequest
+ sets the alias name and the collections to alias to the same value.
+ (Aaron Schram, Mark Miller)
+
+* SOLR-5577: Likely ZooKeeper expiration should not slow down updates a given
+ amount, but instead cut off updates after a given time.
+ (Mark Miller, Christine Poerschke, Ramkumar Aiyengar)
+
+* SOLR-5580: NPE when creating a core with both explicit shard and coreNodeName.
+ (YouPeng Yang, Mark Miller)
+
+* SOLR-5552: Leader recovery process can select the wrong leader if all replicas
+ for a shard are down and trying to recover as well as lose updates that should
+ have been recovered. (Timothy Potter, Mark Miller)
+
+* SOLR-5569 A replica should not try and recover from a leader until it has
+ published that it is ACTIVE. (Mark Miller)
+
+* SOLR-5568 A SolrCore cannot decide to be the leader just because the cluster
+ state says no other SolrCore's are active. (Mark Miller)
+
+* SOLR-5496: We should share an http connection manager across non search
+ HttpClients and ensure all http connection managers get shutdown.
+ (Mark Miller)
+
+* SOLR-5583: ConcurrentUpdateSolrServer#blockUntilFinished may wait forever if
+ the executor service is shutdown. (Mark Miller)
+
+* SOLR-5586: All ZkCmdExecutor's should be initialized with the zk client
+ timeout. (Mark Miller)
+
+* SOLR-5587: ElectionContext implementations should use
+ ZkCmdExecutor#ensureExists to ensure their election paths are properly
+ created. (Mark Miller)
+
+* SOLR-5540: HdfsLockFactory should explicitly create the lock parent directory if
+ necessary. (Mark Miller)
+
+* SOLR-4709: The core reload after replication if config files have changed
+ can fail due to a race condition. (Mark Miller, Hossman)
+
+* SOLR-5503: Retry 'forward to leader' requests less aggressively - rather
+ than on IOException and status 500, ConnectException. (Mark Miller)
+
+* SOLR-5588: PeerSync doesn't count all connect failures as success.
+ (Mark Miller)
+
+* SOLR-5564: hl.maxAlternateFieldLength should apply to original field when
+ fallback is attempted (janhoy)
+
+* SOLR-5608: Don't allow a closed SolrCore to publish state to ZooKeeper.
+ (Mark Miller, Shawn Heisey)
+
+* SOLR-5615: Deadlock while trying to recover after a ZK session expiration.
+ (Ramkumar Aiyengar, Mark Miller)
+
+* SOLR-5543: Core swaps resulted in duplicate core entries in solr.xml when
+ using solr.xml persistence. (Bill Bell, Alan Woodward)
+
+* SOLR-5618: Fix false cache hits in queryResultCache when hashCodes are equal
+ and duplicate filter queries exist in one of the requests (hossman)
+
+* SOLR-4260: ConcurrentUpdateSolrServer#blockUntilFinished can return before
+ all previously added updates have finished. This could cause distributed
+ updates meant for replicas to be lost. (Markus Jelsma, Timothy Potter,
+ Joel Bernstein, Mark Miller)
+
+* SOLR-5645: A SolrCore reload via the CoreContainer will try and register in
+ zk again with the new SolrCore. (Mark Miller)
+
+* SOLR-5636: SolrRequestParsers does some xpath lookups on every request, which
+ can cause concurrency issues. (Mark Miller)
+
+* SOLR-5658: commitWithin and overwrite are not being distributed to replicas
+ now that SolrCloud uses javabin to distribute updates.
+ (Mark Miller, Varun Thacker, Elodie Sannier, shalin)
+
+Optimizations
+----------------------
+
+* SOLR-5576: Improve concurrency when registering and waiting for all
+ SolrCore's to register a DOWN state. (Christine Poerschke via Mark Miller)
+
+================== 4.6.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.5.0
+----------------------
+
+* If you are using methods from FieldMutatingUpdateProcessorFactory for getting
+ configuration information (oneOrMany or getBooleanArg), those methods have
+ been moved to NamedList and renamed to removeConfigArgs and removeBooleanArg,
+ respectively. The original methods are deprecated, to be removed in 5.0.
+ See SOLR-5264.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-5167: Add support for AnalyzingInfixSuggester (AnalyzingInfixLookupFactory).
+ (Areek Zillur, Varun Thacker via Robert Muir)
+
+* SOLR-5246: Shard splitting now supports collections configured with router.field.
+ (shalin)
+
+* SOLR-5274: Allow JettySolrRunner SSL config to be specified via a constructor.
+ (Mark Miller)
+
+* SOLR-5300: Shards can be split by specifying arbitrary number of hash ranges
+ within the shard's hash range. (shalin)
+
+* SOLR-5226: Add Lucene index heap usage to the Solr admin UI.
+ (Areek Zillur via Robert Muir)
+
+* SOLR-5324: Make sub shard replica recovery and shard state switch asynchronous.
+ (Yago Riveiro, shalin)
+
+* SOLR-5338: Split shards by a route key using split.key parameter. (shalin)
+
+* SOLR-5353: Enhance CoreAdmin api to split a route key's documents from an index
+ and leave behind all other documents. (shalin)
+
+* SOLR-5027: CollapsingQParserPlugin for high performance field collapsing on high cardinality fields.
+ (Joel Bernstein)
+
+* SOLR-5395: Added a RunAlways marker interface for UpdateRequestProcessorFactory
+ implementations indicating that they should not be removed in later stages
+ of distributed updates (usually signalled by the update.distrib parameter)
+ (yonik)
+
+ * SOLR-5310: Add a collection admin command to remove a replica (noble)
+
+ * SOLR-5311: Avoid registering replicas which are removed (noble)
+
+ * SOLR-5406: CloudSolrServer failed to propagate request parameters
+ along with delete updates. (yonik)
+
+ * SOLR-5374: Support user configured doc-centric versioning rules
+ via the optional DocBasedVersionConstraintsProcessorFactory
+ update processor (Hossman, yonik)
+
+* SOLR-5392: Extend solrj apis to cover collection management.
+ (Roman Shaposhnik via Mark Miller)
+
+* SOLR-5084: new field type EnumField. (Elran Dvir via Erick Erickson)
+
+* SOLR-5464: Add option to ConcurrentSolrServer to stream pure delete
+ requests. (Mark Miller)
+
+Bug Fixes
+----------------------
+
+* SOLR-5216: Document updates to SolrCloud can cause a distributed deadlock.
+ (Mark Miller)
+
+* SOLR-5367: Unmarshalling delete by id commands with JavaBin can lead to class cast
+ exception. (Mark Miller)
+
+* SOLR-5359: ZooKeeper client is not closed when it fails to connect to an ensemble.
+ (Mark Miller, Klaus Herrmann)
+
+* SOLR-5042: MoreLikeThisComponent was using the rows/count value in place of
+ flags, which caused a number of very strange issues, including NPEs and
+ ignoring requests for the results to include the score.
+ (Anshum Gupta, Mark Miller, Shawn Heisey)
+
+* SOLR-5371: Solr should consistently call SolrServer#shutdown (Mark Miller)
+
+* SOLR-5363: Solr doesn't start up properly with Log4J2 (Petar Tahchiev via Alan
+ Woodward)
+
+* SOLR-5380: Using cloudSolrServer.setDefaultCollection(collectionId) does not
+ work as intended for an alias spanning more than 1 collection.
+ (Thomas Egense, Shawn Heisey, Mark Miller)
+
+* SOLR-5418: Background merge after field removed from solr.xml causes error.
+ (Reported on user's list, Robert M's patch via Erick Erickson)
+
+* SOLR-5318: Creating a core via the admin API doesn't respect transient property
+ (Olivier Soyez via Erick Erickson)
+
+* SOLR-5388: Creating a new core via the HTTP API that results in a transient being
+ unloaded results in a " Too many close [count:-1]" error.
+ (Olivier Soyez via Erick Erickson)
+
+* SOLR-5453: Raise recovery socket read timeouts. (Mark Miller)
+
+* SOLR-5397: Replication can fail silently in some cases. (Mark Miller)
+
+* SOLR-5465: SolrCmdDistributor retry logic has a concurrency race bug.
+ (Mark Miller)
+
+* SOLR-5452: Do not attempt to proxy internal update requests. (Mark Miller)
+
+Optimizations
+----------------------
+
+* SOLR-5232: SolrCloud should distribute updates via streaming rather than buffering.
+ (Mark Miller)
+
+* SOLR-5223: SolrCloud should use the JavaBin binary format for communication by default.
+ (Mark Miller)
+
+* SOLR-5370: Requests to recover when an update fails should be done in
+ background threads. (Mark Miller)
+
+* LUCENE-5300,LUCENE-5304: Specialized faceting for fields which are declared as
+ multi-valued in the schema but are actually single-valued. (Adrien Grand)
+
+Security
+----------------------
+
+* SOLR-4882: SolrResourceLoader was restricted to only allow access to resource
+ files below the instance dir. The reason for this is security related: Some
+ Solr components allow to pass in resource paths via REST parameters
+ (e.g. XSL stylesheets, velocity templates,...) and load them via resource
+ loader. For backwards compatibility, this security feature can be disabled
+ by a new system property: solr.allow.unsafe.resourceloading=true
+ (Uwe Schindler)
+
+Other Changes
+----------------------
+
+* SOLR-5237: Add indexHeapUsageBytes to LukeRequestHandler, indicating how much
+ heap memory is being used by the underlying Lucene index structures.
+ (Areek Zillur via Robert Muir)
+
+* SOLR-5241: Fix SimplePostToolTest performance problem - implicit DNS lookups
+ (hossman)
+
+* SOLR-5273: Update HttpComponents to 4.2.5 and 4.2.6. (Mark Miller)
+
+* SOLR-5264: Move methods for getting config information from
+ FieldMutatingUpdateProcessorFactory to NamedList. (Shawn Heisey)
+
+* SOLR-5319: Remove unused and incorrect router name from Collection ZK nodes.
+ (Jessica Cheng via shalin)
+
+* SOLR-5321: Remove unnecessary code in Overseer.updateState method which tries to
+ use router name from message where none is ever sent. (shalin)
+
+* SOLR-5401: SolrResourceLoader logs a warning if a deprecated (factory) class
+ is used in schema or config. (Uwe Schindler)
+
+* SOLR-3397: Warn if master or slave replication is enabled in SolrCloud mode. (Erick
+ Erickson)
+
+================== 4.5.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-4590: Collections API should return a nice error when not in SolrCloud mode.
+ (Anshum Gupta, Mark Miller)
+
+* SOLR-5295: The CREATESHARD collection API creates maxShardsPerNode number of
+ replicas if replicationFactor is not specified. (Brett Hoerner, shalin)
+
+* SOLR-5296: Creating a collection with implicit router adds shard ranges
+ to each shard. (shalin)
+
+* SOLR-5263: Fix CloudSolrServer URL cache update race. (Jessica Cheng, Mark Miller)
+
+* SOLR-5297: Admin UI - Threads Screen missing Icon (steffkes)
+
+* SOLR-5301: DELETEALIAS command prints CREATEALIAS in logs (janhoy)
+
+* SOLR-5255: Remove unnecessary call to fetch and watch live nodes in ZkStateReader
+ cluster watcher. (Jessica Cheng via shalin)
+
+* SOLR-5305: Admin UI - Reloading System-Information on Dashboard does not work
+ anymore (steffkes)
+
+* SOLR-5314: Shard split action should use soft commits instead of hard commits
+ to make sub shard data visible. (Kalle Aaltonen, shalin)
+
+* SOLR-5327: SOLR-4915, "The root cause should be returned to the user when a SolrCore create
+ call fails", was reverted. (Mark Miller)
+
+* SOLR-5317: SolrCore persistence bugs if defining SolrCores in solr.xml.
+ (Mark Miller, Yago Riveiro)
+
+ * SOLR-5306: Extra collection creation parameters like collection.configName are
+ not being respected. (Mark Miller, Liang Tianyu, Nathan Neulinger)
+
+* SOLR-5325: ZooKeeper connection loss can cause the Overseer to stop processing
+ commands. (Christine Poerschke, Mark Miller, Jessica Cheng)
+
+* SOLR-4327: HttpSolrServer can leak connections on errors. (Karl Wright, Mark Miller)
+
+* SOLR-5349: CloudSolrServer - ZK timeout arguments passed to ZkStateReader are flipped.
+ (Ricardo Merizalde via shalin)
+
+* SOLR-5330: facet.method=fcs on single values fields could sometimes result
+ in incorrect facet labels. (Michael Froh, yonik)
+
+
+Other Changes
+----------------------
+
+* SOLR-5323: Disable ClusteringComponent by default in collection1 example.
+ The solr.clustering.enabled system property needs to be set to 'true'
+ to enable the clustering contrib (reverts SOLR-4708). (Dawid Weiss)
+
+================== 4.5.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.8.0
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.4.0
+----------------------
+
+* XML configuration parsing is now more strict about situations where a single
+ setting is allowed but multiple values are found. In the past, one value
+ would be chosen arbitrarily and silently. Starting with 4.5, configuration
+ parsing will fail with an error in situations like this. If you see error
+ messages such as "solrconfig.xml contains more than one value for config path:
+ XXXXX" or "Found Z configuration sections when at most 1 is allowed matching
+ expression: XXXXX" check your solrconfig.xml file for multiple occurrences of
+ XXXXX and delete the ones that you do not wish to use. See SOLR-4953 &
+ SOLR-5108 for more details.
+
+* In the past, schema.xml parsing would silently ignore "default" or "required"
+ options specified on <dynamicField/> declarations. Beginning with 4.5, attempting
+ to do configured these on a dynamic field will cause an init error. If you
+ encounter one of these errors when upgrading an existing schema.xml, you can
+ safely remove these attributes, regardless of their value, from your config and
+ Solr will continue to behave exactly as it did in previous versions. See
+ SOLR-5227 for more details.
+
+* The UniqFieldsUpdateProcessorFactory has been improved to support all of the
+ FieldMutatingUpdateProcessorFactory selector options. The <lst named="fields">
+ init param option is now deprecated and should be replaced with the more standard
+ <arr name="fieldName">. See SOLR-4249 for more details.
+
+* UpdateRequestExt has been removed as part of SOLR-4816. You should use UpdateRequest
+ instead.
+
+* CloudSolrServer can now use multiple threads to add documents by default. This is a
+ small change in runtime semantics when using the bulk add method - you will still
+ end up with the same exception on a failure, but some documents beyond the one that
+ failed may have made it in. To get the old, single threaded behavior, set parallel updates
+ to false on the CloudSolrServer instance.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-5219: Rewritten selection of the default search and document clustering
+ algorithms. (Dawid Weiss)
+
+* SOLR-5202: Support easier overrides of Carrot2 clustering attributes via
+ XML data sets exported from the Workbench. (Dawid Weiss)
+
+* SOLR-5126: Update Carrot2 clustering to version 3.8.0, update Morfologik
+ to version 1.7.1 (Dawid Weiss)
+
+* SOLR-2345: Enhanced geodist() to work with an RPT field, provided that the
+ field is referenced via 'sfield' and the query point is constant.
+ (David Smiley)
+
+* SOLR-5082: The encoding of URL-encoded query parameters can be changed with
+ the "ie" (input encoding) parameter, e.g. "select?q=m%FCller&ie=ISO-8859-1".
+ The default is UTF-8. To change the encoding of POSTed content, use the
+ "Content-Type" HTTP header. (Uwe Schindler, Shawn Heisey)
+
+* SOLR-4221: Custom sharding (Noble Paul)
+
+* SOLR-4808: Persist and use router,replicationFactor and maxShardsPerNode at Collection
+ and Shard level (Noble Paul, Shalin Mangar)
+
+* SOLR-5006: CREATESHARD command for 'implicit' shards (Noble Paul)
+
+* SOLR-5017: Allow sharding based on the value of a field (Noble Paul)
+
+* SOLR-4222: create custom sharded collection via collections API (Noble Paul)
+
+* SOLR-4718: Allow solr.xml to be stored in ZooKeeper. (Mark Miller, Erick Erickson)
+
+* SOLR-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK. (Erick Erickson)
+
+* SOLR-5165: Single-valued docValues fields no longer require a default value.
+ Additionally they work with sortMissingFirst, sortMissingLast, facet.missing,
+ exists() in function queries, etc. (Robert Muir)
+
+* SOLR-5182: Add NoOpRegenerator, a regenerator for custom per-segment caches
+ where items are preserved across commits. (Robert Muir)
+
+* SOLR-4249: UniqFieldsUpdateProcessorFactory now extends
+ FieldMutatingUpdateProcessorFactory and supports all of its selector options. Use
+ of the "fields" init param is now deprecated in favor of "fieldName" (hossman)
+
+* SOLR-2548: Allow multiple threads to be specified for faceting. When threading, one
+ can specify facet.threads to parallelize loading the uninverted fields. In at least
+ one extreme case this reduced warmup time from 20 seconds to 3 seconds. (Janne Majaranta,
+ Gun Akkor via Erick Erickson, David Smiley)
+
+* SOLR-4816: CloudSolrServer can now route updates locally and no longer relies on inter-node
+ update forwarding. (Joel Bernstein, Shikhar Bhushan, Stephen Riesenberg, Mark Miller)
+
+* SOLR-3249: Allow CloudSolrServer and SolrCmdDistributor to use JavaBin. (Mark Miller)
+
+Bug Fixes
+----------------------
+
+* SOLR-3633: web UI reports an error if CoreAdminHandler says there are no
+ SolrCores (steffkes)
+
+* SOLR-4489: SpellCheckComponent can throw StringIndexOutOfBoundsException
+ when generating collations involving multiple word-break corrections.
+ (James Dyer)
+
+* SOLR-5087 - CoreAdminHandler.handleMergeAction generating NullPointerException
+ (Patrick Hunt via Erick Erickson)
+
+* SOLR-5107: Fixed NPE when using numTerms=0 in LukeRequestHandler
+ (Ahmet Arslan, hossman)
+
+* SOLR-4679, SOLR-4908, SOLR-5124: Text extracted from HTML or PDF files
+ using Solr Cell was missing ignorable whitespace, which is inserted by
+ TIKA for convenience to support plain text extraction without using the
+ HTML elements. This bug resulted in glued words. (hossman, Uwe Schindler)
+
+* SOLR-5121: zkcli usage help for makepath doesn't match actual command.
+ (Daniel Collins via Mark Miller)
+
+* SOLR-5119: Managed schema problems after adding fields via Schema Rest API.
+ (Nils Kübler, Steve Rowe)
+
+* SOLR-5133: HdfsUpdateLog can fail to close a FileSystem instance if init
+ is called more than once. (Mark Miller)
+
+* SOLR-5135: Harden Collection API deletion of /collections/$collection
+ ZooKeeper node. (Mark Miller)
+
+* SOLR-4764: When using NRT, just init the first reader from IndexWriter.
+ (Robert Muir, Mark Miller)
+
+* SOLR-5122: Fixed bug in spellcheck.collateMaxCollectDocs. Eliminates risk
+ of divide by zero, and makes estimated hit counts meaningful in non-optimized
+ indexes. (hossman)
+
+* SOLR-3936: Fixed QueryElevationComponent sorting when used with Grouping
+ (Michael Garski via hossman)
+
+* SOLR-5171: SOLR Admin gui works in IE9, breaks in IE10. (Joseph L Howard via
+ steffkes)
+
+* SOLR-5174: Admin UI - Query View doesn't highlight (json) Result if it
+ contains HTML Tags (steffkes)
+
+* SOLR-4817 Solr should not fall back to the back compat built in solr.xml in SolrCloud
+ mode (Erick Erickson)
+
+* SOLR-5112: Show full message in Admin UI Logging View (Matthew Keeney via
+ steffkes)
+
+* SOLR-5190: SolrEntityProcessor substitutes variables only once in child entities
+ (Harsh Chawla, shalin)
+
+* SOLR-3852: Fixed ZookeeperInfoServlet so that the SolrCloud Admin UI pages will
+ work even if ZK contains nodes with data which are not utf8 text. (hossman)
+
+* SOLR-5206: Fixed OpenExchangeRatesOrgProvider to use refreshInterval correctly
+ (Catalin, hossman)
+
+* SOLR-5215: Fix possibility of deadlock in ZooKeeper ConnectionManager.
+ (Mark Miller, Ricardo Merizalde)
+
+* SOLR-4909: Use DirectoryReader.openIfChanged in non-NRT mode.
+ (Michael Garski via Robert Muir)
+
+* SOLR-5227: Correctly fail schema initialization if a dynamicField is configured to
+ be required, or have a default value. (hossman)
+
+* SOLR-5231: Fixed a bug with the behavior of BoolField that caused documents w/o
+ a value for the field to act as if the value were true in functions if no other
+ documents in the same index segment had a value of true.
+ (Robert Muir, hossman, yonik)
+
+* SOLR-5233: The "deleteshard" collections API doesn't wait for cluster state to update,
+ can fail if some nodes of the deleted shard were down and had incorrect logging.
+ (Christine Poerschke, shalin)
+
+* SOLR-5150: HdfsIndexInput may not fully read requested bytes. (Mark Miller, Patrick Hunt)
+
+* SOLR-5240: All solr cores will now be loaded in parallel (as opposed to a fixed number)
+ in zookeeper mode to avoid deadlocks due to replicas waiting for other replicas
+ to come up. (yonik)
+
+* SOLR-5243: Killing a shard in one collection can result in leader election in a different
+ collection if they share the same coreNodeName. (yonik, Mark Miller)
+
+* SOLR-5281: IndexSchema log message was printing '[null]' instead of
+ '[<core name>]' (Jun Ohtani via Steve Rowe)
+
+* SOLR-5279: Implicit properties don't seem to exist on core RELOAD
+ (elyograg, hossman, Steve Rowe)
+
+* SOLR-5291: Solrj does not propagate the root cause to the user for many errors.
+ (Mark Miller)
+
+Optimizations
+----------------------
+
+* SOLR-5044: Admin UI - Note on Core-Admin about directories while creating
+ core (steffkes)
+
+* SOLR-5134: Have HdfsIndexOutput extend BufferedIndexOutput.
+ (Mark Miller, Uwe Schindler)
+
+ * SOLR-5057: QueryResultCache should not related with the order of fq's list (Feihong Huang via Erick Erickson)
+
+* SOLR-4816: CloudSolrServer now uses multiple threads to send updates by default.
+ (Joel Bernstein via Mark Miller)
+
+* SOLR-3530: Better error messages / Content-Type validation in SolrJ. (Mark Miller, hossman)
+
+Other Changes
+----------------------
+
+* SOLR-4708: Enable ClusteringComponent by default in collection1 example.
+ The solr.clustering.enabled system property is set to 'true' by default.
+ (ehatcher, Dawid Weiss)
+
+* SOLR-4914, SOLR-5162: Factor out core list persistence and discovery into a
+ new CoresLocator interface. (Alan Woodward, Shawn Heisey)
+
+* SOLR-5056: Improve type safety of ConfigSolr class. (Alan Woodward)
+
+* SOLR-4951: Better randomization of MergePolicy in Solr tests (hossman)
+
+* SOLR-4953, SOLR-5108: Make XML Configuration parsing fail if an xpath matches
+ multiple nodes when only a single value or plugin instance is expected.
+ (hossman)
+
+* The routing parameter "shard.keys" is deprecated as part of SOLR-5017 .The new parameter name is '_route_' .
+ The old parameter should continue to work for another release (Noble Paul)
+
+* SOLR-5173: Solr-core's Maven configuration includes test-only Hadoop
+ dependencies as indirect compile-time dependencies.
+ (Chris Collins, Steve Rowe)
+
+================== 4.4.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.4
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.3.0
+----------------------
+
+* TieredMergePolicy and the various subtypes of LogMergePolicy no longer have
+ an explicit "setUseCompoundFile" method. Instead the behavior of new
+ segments is determined by the IndexWriter configuration, and the MergePolicy
+ is only consulted to determine if merge segments should use the compound
+ file format (based on the value of "setNoCFSRatio"). If you have explicitly
+ configured one of these classes using <mergePolicy> and include an init arg
+ like this...
+ <bool name="useCompoundFile">true</bool>
+ ...this will now be treated as if you specified...
+ <useCompoundFile>true</useCompoundFile>
+ ...directly on the <indexConfig> (overriding any value already set using that
+ syntax) and a warning will be logged to updated your configuration. Users
+ with an explicitly declared <mergePolicy> are encouraged to review the
+ current javadocs for their MergePolicy subclass and review their configured
+ options carefully. See SOLR-4941, SOLR-4934 and LUCENE-5038 for more
+ information.
+
+* SOLR-4778: The signature of LogWatcher.registerListener has changed, from
+ (ListenerConfig, CoreContainer) to (ListenerConfig). Users implementing their
+ own LogWatcher classes will need to change their code accordingly.
+
+* LUCENE-5063: ByteField and ShortField have been deprecated and will be removed
+ in 5.0. If you are still using these field types, you should migrate your
+ fields to TrieIntField.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-3251: Dynamically add fields to schema. (Steve Rowe, Robert Muir, yonik)
+
+* SOLR-4761, SOLR-4976: Add option to plugin a merged segment warmer into solrconfig.xml.
+ Info about segments warmed in the background is available via infostream.
+ (Mark Miller, Ryan Ernst, Mike McCandless, Robert Muir)
+
+* SOLR-3240: Add "spellcheck.collateMaxCollectDocs" option so that when testing
+ potential Collations against the index, SpellCheckComponent will only collect
+ n documents, thereby estimating the hit-count. This is a performance optimization
+ in cases where exact hit-counts are unnecessary. Also, when "collateExtendedResults"
+ is false, this optimization is always made (James Dyer).
+
+* SOLR-4785: New MaxScoreQParserPlugin returning max() instead of sum() of terms (janhoy)
+
+* SOLR-4234: Add support for binary files in ZooKeeper. (Eric Pugh via Mark Miller)
+
+* SOLR-4048: Add findRecursive method to NamedList. (Shawn Heisey)
+
+* SOLR-4228: SolrJ's SolrPing object has new methods for ping, enable, and
+ disable. (Shawn Heisey, hossman, Steve Rowe)
+
+* SOLR-4893: Extend FieldMutatingUpdateProcessor.ConfigurableFieldNameSelector
+ to enable checking whether a field matches any schema field. To select field
+ names that don't match any fields or dynamic fields in the schema, add
+ <bool name="fieldNameMatchesSchemaField">false</bool> to an update
+ processor's configuration in solrconfig.xml. (Steve Rowe, hossman)
+
+* SOLR-4921: Admin UI now supports adding documents to Solr (gsingers, steffkes)
+
+* SOLR-4916: Add support to write and read Solr index files and transaction log
+ files to and from HDFS. (phunt, Mark Miller, Gregory Chanan)
+
+* SOLR-4892: Add FieldMutatingUpdateProcessorFactory subclasses
+ Parse{Date,Integer,Long,Float,Double,Boolean}UpdateProcessorFactory. These
+ factories have a default selector that matches all fields that either don’t
+ match any schema field, or are in the schema with the corresponding
+ typeClass. If they see a value that is not a CharSequence, or can't parse
+ the value, they leave it as is. For multi-valued fields, these processors
+ will not convert any values unless all are first successfully parsed, or
+ already are instances of the target class. Ordering the processors, e.g.
+ [Boolean, Long, Double, Date] will allow e.g. values ["2", "5", "8.6"] to
+ be left alone by the Boolean and Long processors, but then converted by the
+ Double processor. (Steve Rowe, hossman)
+
+* SOLR-4972: Add PUT command to ZkCli tool. (Roman Shaposhnik via Mark Miller)
+
+* SOLR-4973: Adding getter method for defaultCollection on CloudSolrServer.
+ (Furkan KAMACI via Mark Miller)
+
+* SOLR-4897: Add solr/example/example-schemaless/, an example config set
+ for schemaless mode. (Steve Rowe)
+
+* SOLR-4655: Add option to have Overseer assign generic node names so that
+ new addresses can host shards without naming confusion. (Mark Miller, Anshum Gupta)
+
+* SOLR-4977: Add option to send IndexWriter's infostream to the logging system.
+ (Ryan Ernst via Robert Muir)
+
+* SOLR-4693: A "deleteshard" collections API that unloads all replicas of a given
+ shard and then removes it from the cluster state. It will remove only those shards
+ which are INACTIVE or have no range (created for custom sharding).
+ (Anshum Gupta, shalin)
+
+* SOLR-5003: CSV Update Handler supports optionally adding the line number/row id to
+ a document (gsingers)
+
+* SOLR-5010: Add support for creating copy fields to the Schema REST API (gsingers)
+
+* SOLR-4991: Register QParserPlugins as SolrInfoMBeans (ehatcher)
+
+* SOLR-4943: Add a new system wide info admin handler that exposes the system info
+ that could previously only be retrieved using a SolrCore. (Mark Miller)
+
+* SOLR-3076: Block joins. Documents and their sub-documents must be indexed
+ as a block.
+ {!parent which=<allParents>}<someChildren> takes in a query that matches child
+ documents and results in matches on their parents.
+ {!child of=<allParents>}<someParents> takes in a query that matches some parent
+ documents and results in matches on their children.
+ (Mikhail Khludnev, Vadim Kirilchuk, Alan Woodward, Tom Burton-West, Mike McCandless,
+ hossman, yonik)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-4333: edismax parser to not double-escape colons if already escaped by
+ the client application (James Dyer, Robert J. van der Boon)
+
+* SOLR-4776: Solrj doesn't return "between" count in range facets
+ (Philip K. Warren via shalin)
+
+* SOLR-4616: HitRatio on caches is now exposed over JMX MBeans as a float.
+ (Greg Bowyer)
+
+* SOLR-4803: Fixed core discovery mode (ie: new style solr.xml) to treat
+ 'collection1' as the default core name. (hossman)
+
+* SOLR-4790: Throw an error if a core has the same name as another core, both old and
+ new style solr.xml
+
+* SOLR-4842: Fix facet.field local params from affecting other facet.field's.
+ (ehatcher, hossman)
+
+* SOLR-4814: If a SolrCore cannot be created it should remove any information it
+ published about itself from ZooKeeper. (Mark Miller)
+
+* SOLR-4863: Removed non-existent attribute sourceId from dynamic JMX stats
+ to fix AttributeNotFoundException (suganuma, hossman via shalin)
+
+* SOLR-4891: JsonLoader should preserve field value types from the JSON content stream.
+ (Steve Rowe)
+
+* SOLR-4805: SolrCore#reload should not call preRegister and publish a DOWN state to
+ ZooKeeper. (Mark Miller, Jared Rodriguez)
+
+* SOLR-4899: When reconnecting after ZooKeeper expiration, we need to be willing to wait
+ forever, not just for 30 seconds. (Mark Miller)
+
+* SOLR-4920: JdbcDataSource incorrectly suppresses exceptions when retrieving a connection from
+ a JNDI context and falls back to trying to use DriverManager to obtain a connection. Additionally,
+ if a SQLException is thrown while initializing a connection, such as in setAutoCommit(), the
+ connection will not be closed. (Chris Eldredge via shalin)
+
+* SOLR-4915: The root cause should be returned to the user when a SolrCore create call fails.
+ (Mark Miller)
+
+* SOLR-4925 : Collection create throws NPE when 'numShards' param is missing (Noble Paul)
+
+* SOLR-4910: persisting solr.xml is broken. More stringent testing of persistence fixed
+ up a number of issues and several bugs with persistence. Among them are
+ - don't persisting implicit properties
+ - should persist zkHost in the <solr> tag (user's list)
+ - reloading a core that has transient="true" returned an error. reload should load
+ a transient core if it's not yet loaded.
+ - No longer persisting loadOnStartup or transient core properties if they were not
+ specified in the original solr.xml
+ - Testing flushed out the fact that you couldn't swap a core marked transient=true
+ loadOnStartup=false because it hadn't been loaded yet.
+ - SOLR-4862, CREATE fails to persist schema, config, and dataDir
+ - SOLR-4363, not persisting coreLoadThreads in <solr> tag
+ - SOLR-3900, logWatcher properties not persisted
+ - SOLR-4850, cores defined as loadOnStartup=true, transient=false can't be searched
+ (Erick Erickson)
+
+* SOLR-4923: Commits to non leaders as part of a request that also contain updates
+ can execute out of order. (hossman, Ricardo Merizalde, Mark Miller)
+
+* SOLR-4932: persisting solr.xml saves some parameters it shouldn't when they weren't
+ defined in the original. Benign since the default values are saved, but still incorrect.
+ (Erick Erickson, thanks Shawn Heisey for helping test!)
+
+* SOLR-4934, SOLR-4941: Fix handling of <mergePolicy> init arg
+ "useCompoundFile" needed after changes in LUCENE-5038 (hossman)
+
+* SOLR-4456: Admin UI: Displays dashboard even if Solr is down (steffkes)
+
+* SOLR-4949: UI Analysis page dropping characters from input box (steffkes)
+
+* SOLR-4960: Fix race conditions in shutdown of CoreContainer
+ and getCore that could cause a request to attempt to use a core that
+ has shut down. (yonik)
+
+* SOLR-4926: Fixed rare replication bug that normally only manifested when
+ using compound file format. (yonik, Mark Miller)
+
+* SOLR-4974: Outgrowth of SOLR-4960 that includes transient cores and pending cores
+ (Erick Erickson)
+
+* SOLR-3369: shards.tolerant=true is broken for group queries
+ (Russell Black, Martijn van Groningen, Jabouille jean Charles, Ryan McKinley via shalin)
+
+* SOLR-4452: Hunspell stemmer should not merge duplicate dictionary entries (janhoy)
+
+* SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after calling addFields
+ method. (Jun Ohtani, Steve Rowe)
+
+* SOLR-4982: Creating a core while referencing system properties looks like it loses files
+ Actually, instanceDir, config, dataDir and schema are not dereferenced properly
+ when creating cores that reference sys vars (e.g. &dataDir=${dir}). In the dataDir
+ case in particular this leads to the index being put in a directory literally named
+ ${dir} but on restart the sysvar will be properly dereferenced.
+
+* SOLR-4788: Multiple Entities DIH delta import: dataimporter.[entityName].last_index_time
+ is empty. (chakming wong, James Dyer via shalin)
+
+* SOLR-4978: Time is stripped from datetime column when imported into Solr date field
+ if convertType=true. (Bill Au, shalin)
+
+* SOLR-5019: spurious ConcurrentModificationException when spell check component
+ was in use with filters. (yonik)
+
+* SOLR-5018: The Overseer should avoid publishing the state for collections that do not
+ exist under the /collections zk node. (Mark Miller)
+
+* SOLR-5028,SOLR-5029: ShardHandlerFactory was not being created properly when
+ using new-style solr.xml, and was not being persisted properly when using
+ old-style. (Tomás Fernández Löbbe, Ryan Ernst, Alan Woodward)
+
+* SOLR-4997: The splitshard api doesn't call commit on new sub shards before
+ switching shard states. Multiple bugs related to sub shard recovery and
+ replication are also fixed. (shalin)
+
+* SOLR-5034: A facet.query that parses or analyzes down to a null Query would
+ throw a NPE. Fixed. (David Smiley)
+
+* SOLR-5039: Admin/Schema Browser displays -1 for term counts for multiValued fields.
+
+* SOLR-5037: The CSV loader now accepts field names that are not in the schema.
+ (gsingers, ehatcher, Steve Rowe)
+
+* SOLR-4791: solr.xml sharedLib does not work in 4.3.0 (Ryan Ernst, Jan Høydahl via
+ Erick Erickson)
+
+Optimizations
+----------------------
+
+* SOLR-4923: Commit to all nodes in a collection in parallel rather than locally and
+ then to all other nodes. (hossman, Ricardo Merizalde, Mark Miller)
+
+* SOLR-3838: Admin UI - Multiple filter queries are not supported in Query UI (steffkes)
+
+* SOLR-4719 : Admin UI - Default to wt=json on Query-Screen (steffkes)
+
+* SOLR-4611: Admin UI - Analysis-Urls with empty parameters create empty result table
+ (steffkes)
+
+* SOLR-4955: Admin UI - Show address bar on top for Schema + Config (steffkes)
+
+* SOLR-4412: New parameter langid.lcmap to map detected language code to be placed
+ in "language" field (janhoy)
+
+* SOLR-4815: Admin-UI - DIH: Let "commit" be checked by default (steffkes)
+
+* SOLR-5002: optimize numDocs(Query,DocSet) when filterCache is null (Robert Muir)
+
+* SOLR-5012: optimize search with filter when filterCache is null (Robert Muir)
+
+Other Changes
+----------------------
+
+* SOLR-4737: Update Guava to 14.0.1 (Mark Miller)
+
+* SOLR-2079: Add option to pass HttpServletRequest in the SolrQueryRequest context map.
+ (Tomás Fernández Löbbe via Robert Muir)
+
+* SOLR-4738: Update Jetty to 8.1.10.v20130312 (Mark Miller, Robert Muir)
+
+* SOLR-4749: Clean up and refactor CoreContainer code around solr.xml and SolrCore
+ management. (Mark Miller)
+
+* SOLR-4547: Move logging of filenames on commit from INFO to DEBUG.
+ (Shawn Heisey, hossman)
+
+* SOLR-4757: Change the example to use the new solr.xml format and core
+ discovery by directory structure. (Mark Miller)
+
+* SOLR-4759: Velocity (/browse) template cosmetic cleanup.
+ (Mark Bennett, ehatcher)
+
+* SOLR-4778: LogWatcher init code moved out of CoreContainer (Alan Woodward)
+
+* SOLR-4784: Make class LuceneQParser public (janhoy)
+
+* SOLR-4448: Allow the solr internal load balancer to be more easily pluggable.
+ (Philip Hoy via Robert Muir)
+
+* SOLR-4224: Refactor JavaBinCodec input stream definition to enhance reuse.
+ (phunt via Mark Miller)
+
+* SOLR-4931: SolrDeletionPolicy onInit and onCommit methods changed to override
+ exact signatures (with generics) from IndexDeletionPolicy (shalin)
+
+* SOLR-4942: test improvements to randomize use of compound files (hossman)
+
+* SOLR-4966: CSS, JS and other files in webapp without license (uschindler,
+ steffkes)
+
+* SOLR-4986: Upgrade to Tika 1.4 (Markus Jelsma via janhoy)
+
+* SOLR-4948, SOLR-5009: Tidied up CoreContainer construction logic.
+ (Alan Woodward, Uwe Schindler, Steve Rowe)
+
+* LUCENE-5107: Properties files by Solr are now written in UTF-8 encoding,
+ Unicode is no longer escaped. Reading of legacy properties files with
+ \u escapes is still possible. (Uwe Schindler, Robert Muir)
+
+================== 4.3.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.3
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-4795: Sub shard leader should not accept any updates from parent after
+ it goes active (shalin)
+
+* SOLR-4798: shard splitting does not respect the router for the collection
+ when executing the index split. One effect of this is that documents
+ may be placed in the wrong shard when the default compositeId router
+ is used in conjunction with IDs containing "!". (yonik)
+
+* SOLR-4797: Shard splitting creates sub shards which have the wrong hash
+ range in cluster state. This happens when numShards is not a power of two
+ and router is compositeId. (shalin)
+
+* SOLR-4806: Shard splitting does not abort if WaitForState times out (shalin)
+
+* SOLR-4807: The zkcli script now works with log4j. The zkcli.bat script
+ was broken on Windows in 4.3.0, now it works. (Shawn Heisey)
+
+* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
+ tokenizer factory used when parsing synonyms file. (Shingo Sasaki, hossman)
+
+* SOLR-4829: Fix transaction log leaks (a failure to clean up some old logs)
+ on a shard leader, or when unexpected exceptions are thrown during log
+ recovery. (Steven Bower, Mark Miller, yonik)
+
+* SOLR-4751: Fix replication problem of files in sub directory of conf directory.
+ (Minoru Osuka via Koji)
+
+* SOLR-4741: Deleting a collection should set DELETE_DATA_DIR to true.
+ (Mark Miller)
+
+* SOLR-4752: There are some minor bugs in the Collections API parameter
+ validation. (Mark Miller)
+
+* SOLR-4563: RSS DIH-example not working (janhoy)
+
+* SOLR-4796: zkcli.sh should honor JAVA_HOME (Roman Shaposhnik via Mark Miller)
+
+* SOLR-4734: Leader election fails with an NPE if there is no UpdateLog.
+ (Mark Miller, Alexander Eibner)
+
+* SOLR-4868: Setting the log level for the log4j root category results in
+ adding a new category, the empty string. (Shawn Heisey)
+
+* SOLR-4855: DistributedUpdateProcessor doesn't check for peer sync requests (shalin)
+
+* SOLR-4867: Admin UI - setting loglevel on root throws RangeError (steffkes)
+
+* SOLR-4870: RecentUpdates.update() does not increment numUpdates loop counter
+ (Alexey Kudinov via shalin)
+
+* SOLR-4877, LUCENE-5023: Removed SolrIndexSearcher#getDocSetNC()'s special
+ case for handling TermQuery to prevent NullPointerException if reader does
+ not have fields. (Bao Yang Yang, Uwe Schindler)
+
+* SOLR-4881: Fix DocumentAnalysisRequestHandler to correctly use
+ EmptyEntityResolver to prevent loading of external entities like
+ UpdateRequestHandler does. (Hossman, Uwe Schindler)
+
+* SOLR-4858: SolrCore reloading was broken when the UpdateLog
+ was enabled. (Hossman, Anshum Gupta, Alexey Serba, Mark Miller, yonik)
+
+* SOLR-4853: Fixed SolrJettyTestBase so it may be reused by end users
+ (hossman)
+
+* SOLR-4744: Update failure on sub shard is not propagated to clients by parent
+ shard (Anshum Gupta, yonik, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-4760: Include core name in logs when loading schema.
+ (Shawn Heisey)
+
+================== 4.3.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.3
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.2.0
+----------------------
+
+* In the schema REST API, the output path for copyFields and dynamicFields
+ has been changed from all lowercase "copyfields" and "dynamicfields" to
+ camelCase "copyFields" and "dynamicFields", respectively, to align with all
+ other schema REST API outputs, which use camelCase. The URL format remains
+ the same: all resource names are lowercase. See SOLR-4623 for details.
+
+* Slf4j/logging jars are no longer included in the Solr webapp. All logging
+ jars are now in example/lib/ext. Changing logging impls is now as easy as
+ updating the jars in this folder with those necessary for the logging impl
+ you would like. If you are using another webapp container, these jars will
+ need to go in the corresponding location for that container.
+ In conjunction, the dist-excl-slf4j and dist-war-excl-slf4 build targets
+ have been removed since they are redundant. See the Slf4j documentation,
+ SOLR-3706, and SOLR-4651 for more details.
+
+* The hardcoded SolrCloud defaults for 'hostContext="solr"' and
+ 'hostPort="8983"' have been deprecated and will be removed in Solr 5.0.
+ Existing solr.xml files that do not have these options explicitly specified
+ should be updated accordingly. See SOLR-4622 for more details.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-4648 PreAnalyzedUpdateProcessorFactory allows using the functionality
+ of PreAnalyzedField with other field types. See javadoc for details and
+ examples. (Andrzej Bialecki)
+
+* SOLR-4623: Provide REST API read access to all elements of the live schema.
+ Add a REST API request to return the entire live schema, in JSON, XML, and
+ schema.xml formats. Move REST API methods from package org.apache.solr.rest
+ to org.apache.solr.rest.schema, and rename base functionality REST API
+ classes to remove the current schema focus, to prepare for other non-schema
+ REST APIs. Change output path for copyFields and dynamicFields from
+ "copyfields" and "dynamicfields" (all lowercase) to "copyFields" and
+ "dynamicFields", respectively, to align with all other REST API outputs, which
+ use camelCase.
+ (Steve Rowe)
+
+* SOLR-4658: In preparation for REST API requests that can modify the schema,
+ a "managed schema" is introduced.
+ Add '<schemaFactory class="ManagedSchemaFactory" mutable="true"/>' to solrconfig.xml
+ in order to use it, and to enable schema modifications via REST API requests.
+ (Steve Rowe, Robert Muir)
+
+* SOLR-4656: Added two new highlight parameters, hl.maxMultiValuedToMatch and
+ hl.maxMultiValuedToExamine. maxMultiValuedToMatch stops looking for snippets after
+ finding the specified number of matches, no matter how far into the multivalued field
+ you've gone. maxMultiValuedToExamine stops looking for matches after the specified
+ number of multiValued entries have been examined. If both are specified, the limit
+ hit first stops the loop. Also this patch cuts down on the copying of the document
+ entries during highlighting. These optimizations are probably unnoticeable unless
+ there are a large number of entries in the multiValued field. Conspicuously, this will
+ prevent the "best" match from being found if it appears later in the MV list than the
+ cutoff specified by either of these params. (Erick Erickson)
+
+* SOLR-4675: Improve PostingsSolrHighlighter to support per-field/query-time overrides
+ and add additional configuration parameters. See the javadocs for more details and
+ examples. (Robert Muir)
+
+* SOLR-3755: A new collections api to add additional shards dynamically by splitting
+ existing shards. (yonik, Anshum Gupta, shalin)
+
+* SOLR-4530: DIH: Provide configuration to use Tika's IdentityHtmlMapper
+ (Alexandre Rafalovitch via shalin)
+
+* SOLR-4662: Discover SolrCores by directory structure rather than defining them
+ in solr.xml. Also, change the format of solr.xml to be closer to that of solrconfig.xml.
+ This version of Solr will ship the example in the old style, but you can manually
+ try the new style. Solr 4.4 will ship with the new style, and Solr 5.0 will remove
+ support for the old style. (Erick Erickson, Mark Miller)
+ Additional Work:
+ - SOLR-4347: Ensure that newly-created cores via Admin handler are persisted in solr.xml
+ (Erick Erickson)
+ - SOLR-1905: Cores created by the admin request handler should be persisted to solr.xml.
+ Also fixed a problem whereby properties like solr.solr.datadir would be persisted
+ to solr.xml. Also, cores that didn't happen to be loaded were not persisted.
+ (Erick Erickson)
+
+* SOLR-4717/SOLR-1351: SimpleFacets now work with localParams allowing faceting on the
+ same field multiple ways (ryan, Uri Boness)
+
+* SOLR-4671: CSVResponseWriter now supports pseudo fields. (ryan, nihed mbarek)
+
+* SOLR-4358: HttpSolrServer sends the stream name and exposes 'useMultiPartPost'
+ (Karl Wright via ryan)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-4543: setting shardHandlerFactory in solr.xml/solr.properties does not work.
+ (Ryan Ernst, Robert Muir via Erick Erickson)
+
+* SOLR-4634: Fix scripting engine tests to work with Java 8's "Nashorn" Javascript
+ implementation. (Uwe Schindler)
+
+* SOLR-4636: If opening a reader fails for some reason when opening a SolrIndexSearcher,
+ a Directory can be left unreleased. (Mark Miller)
+
+* SOLR-4405: Admin UI - admin-extra files are not rendered into the core-menu (steffkes)
+
+* SOLR-3956: Fixed group.facet=true to work with negative facet.limit
+ (Chris van der Merwe, hossman)
+
+* SOLR-4650: copyField doesn't work with source globs that don't match any
+ explicit or dynamic fields. This regression was introduced in Solr 4.2.
+ (Daniel Collins, Steve Rowe)
+
+* SOLR-4641: Schema now throws exception on illegal field parameters. (Robert Muir)
+
+* SOLR-3758: Fixed SpellCheckComponent to work consistently with distributed grouping
+ (James Dyer)
+
+* SOLR-4652: Fix broken behavior with shared libraries in resource loader for
+ solr.xml plugins. (Ryan Ernst, Robert Muir, Uwe Schindler)
+
+* SOLR-4664: ZkStateReader should update aliases on construction.
+ (Mark Miller, Elodie Sannier)
+
+* SOLR-4682: CoreAdminRequest.mergeIndexes can not merge multiple cores or indexDirs.
+ (Jason.D.Cao via shalin)
+
+* SOLR-4581: When faceting on numeric fields in Solr 4.2, negative values (constraints)
+ were sorted incorrectly. (Alexander Buhr, shalin, yonik)
+
+* SOLR-4699: The System admin handler should not assume a file system based data directory
+ location. (Mark Miller)
+
+* SOLR-4695: Fix core admin SPLIT action to be useful with non-cloud setups (shalin)
+
+* SOLR-4680: Correct example spellcheck configuration's queryAnalyzerFieldType and
+ use "text" field instead of narrower "name" field (ehatcher, Mark Bennett)
+
+* SOLR-4702: Fix example /browse "Did you mean?" suggestion feature. (ehatcher, Mark Bennett)
+
+* SOLR-4710: You cannot delete a collection fully from ZooKeeper unless all nodes are up and
+ functioning correctly. (Mark Miller)
+
+* SOLR-4487: SolrExceptions thrown by HttpSolrServer will now contain the
+ proper HTTP status code returned by the remote server, even if that status
+ code is not something Solr itself returned -- eg: from the Servlet Container,
+ or an intermediate HTTP Proxy (hossman)
+
+* SOLR-4661: Admin UI Replication details now correctly displays the current
+ replicable generation/version of the master. (hossman)
+
+* SOLR-4716,SOLR-4584: SolrCloud request proxying does not work on Tomcat and
+ perhaps other non Jetty containers. (Po Rui, Yago Riveiro via Mark Miller)
+
+* SOLR-4746: Distributed grouping used a NamedList instead of a SimpleOrderedMap
+ for the top level group commands, causing output formatting differences
+ compared to non-distributed grouping. (yonik)
+
+* SOLR-4705: Fixed bug causing NPE when querying a single replica in SolrCloud
+ using the shards param (Raintung Li, hossman)
+
+* SOLR-4729: LukeRequestHandler: Using a dynamic copyField source that is
+ not also a dynamic field triggers error message 'undefined field: "(glob)"'.
+ (Adam Hahn, hossman, Steve Rowe)
+
+Optimizations
+----------------------
+
+Other Changes
+----------------------
+
+* SOLR-4653: Solr configuration should log inaccessible/ non-existent relative paths in lib
+ dir=... (Dawid Weiss)
+
+* SOLR-4317: SolrTestCaseJ4: Can't avoid "collection1" convention (Tricia Jenkins, via Erick Erickson)
+
+* SOLR-4571: SolrZkClient#setData should return Stat object. (Mark Miller)
+
+* SOLR-4603: CachingDirectoryFactory should use an IdentityHashMap for
+ byDirectoryCache. (Mark Miller)
+
+* SOLR-4544: Refactor HttpShardHandlerFactory so load-balancing logic can be customized.
+ (Ryan Ernst via Robert Muir)
+
+* SOLR-4607: Use noggit 0.5 release jar rather than a forked copy. (Yonik Seeley, Robert Muir)
+
+* SOLR-3706: Ship setup to log with log4j. (ryan, Mark Miller)
+
+* SOLR-4651: Remove dist-excl-slf4j build target. (Shawn Heisey)
+
+* SOLR-4622: The hardcoded SolrCloud defaults for 'hostContext="solr"' and
+ 'hostPort="8983"' have been deprecated and will be removed in Solr 5.0.
+ Existing solr.xml files that do not have these options explicitly specified
+ should be updated accordingly. (hossman)
+
+* SOLR-4672: Requests attempting to use SolrCores which had init failures
+ (that would be reported by CoreAdmin STATUS requests) now result in 500
+ error responses with the details about the init failure, instead of 404
+ error responses. (hossman)
+
+* SOLR-4730: Make the wiki link more prominent in the release documentation.
+ (Uri Laserson via Robert Muir)
+
+
+================== 4.2.1 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.3
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Detailed Change List
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-4567: copyField source glob matching explicit field(s) stopped working
+ in Solr 4.2. (Alexandre Rafalovitch, Steve Rowe)
+
+* SOLR-4475: Fix various places that still assume File based paths even when
+ not using a file based DirectoryFactory. (Mark Miller)
+
+* SOLR-4551: CachingDirectoryFactory needs to create CacheEntry's with the
+ fullpath not path. (Mark Miller)
+
+* SOLR-4555: When forceNew is used with CachingDirectoryFactory#get, the old
+ CacheValue should give up its path as it will be used by a new Directory
+ instance. (Mark Miller)
+
+* SOLR-4578: CoreAdminHandler#handleCreateAction gets a SolrCore and does not
+ close it in SolrCloud mode when a core with the same name already exists.
+ (Mark Miller)
+
+* SOLR-4574: The Collections API will silently return success on an unknown
+ ACTION parameter. (Mark Miller)
+
+* SOLR-4576: Collections API validation errors should cause an exception on
+ clients and otherwise act as validation errors with the Core Admin API.
+ (Mark Miller)
+
+* SOLR-4577: The collections API should return responses (success or failure)
+ for each node it attempts to work with. (Mark Miller)
+
+* SOLR-4568: The lastPublished state check before becoming a leader is not
+ working correctly. (Mark Miller)
+
+* SOLR-4570: Even if an explicit shard id is used, ZkController#preRegister
+ should still wait to see the shard id in its current ClusterState.
+ (Mark Miller)
+
+* SOLR-4585: The Collections API validates numShards with < 0 but should use
+ <= 0. (Mark Miller)
+
+* SOLR-4592: DefaultSolrCoreState#doRecovery needs to check the CoreContainer
+ shutdown flag inside the recoveryLock sync block. (Mark Miller)
+
+* SOLR-4595: CachingDirectoryFactory#close can throw a concurrent
+ modification exception. (Mark Miller)
+
+* SOLR-4573: Accessing Admin UI files in SolrCloud mode logs warnings.
+ (Mark Miller, Phil John)
+
+* SOLR-4594: StandardDirectoryFactory#remove accesses byDirectoryCache
+ without a lock. (Mark Miller)
+
+* SOLR-4597: CachingDirectoryFactory#remove should not attempt to empty/remove
+ the index right away but flag for removal after close. (Mark Miller)
+
+* SOLR-4598: The Core Admin unload command's option 'deleteDataDir', should use
+ the DirectoryFactory API to remove the data dir. (Mark Miller)
+
+* SOLR-4599: CachingDirectoryFactory calls close(Directory) on forceNew if the
+ Directory has a refCnt of 0, but it should call closeDirectory(CacheValue).
+ (Mark Miller)
+
+* SOLR-4602: ZkController#unregister should cancel its election participation
+ before asking the Overseer to delete the SolrCore information. (Mark Miller)
+
+* SOLR-4601: A Collection that is only partially created and then deleted will
+ leave pre allocated shard information in ZooKeeper. (Mark Miller)
+
+* SOLR-4604: UpdateLog#init is over called on SolrCore#reload. (Mark Miller)
+
+* SOLR-4605: Rollback does not work correctly. (Mark S, Mark Miller)
+
+* SOLR-4609: The Collections API should only send the reload command to ACTIVE
+ cores. (Mark Miller)
+
+* SOLR-4297: Atomic update request containing null=true sets all subsequent
+ fields to null (Ben Pennell, Rob, shalin)
+
+* SOLR-4371: Admin UI - Analysis Screen shows empty result (steffkes)
+
+* SOLR-4318: NPE encountered with querying with wildcards on a field that uses
+ the DefaultAnalyzer (i.e. no analysis chain defined). (Erick Erickson)
+
+* SOLR-4361: DataImportHandler would throw UnsupportedOperationException if
+ handler-level parameters were specified containing periods in the name
+ (James Dyer)
+
+* SOLR-4538: Date Math expressions were being truncated to 32 characters
+ when used in field:value queries in the lucene QParser. (hossman, yonik)
+
+* SOLR-4617: SolrCore#reload needs to pass the deletion policy to the next
+ SolrCore through its constructor rather than setting a field after.
+ (Mark Miller)
+
+* SOLR-4589: Fixed CPU spikes and poor performance in lazy field loading
+ of multivalued fields. (hossman)
+
+* SOLR-4608: Update Log replay and PeerSync replay should use the default
+ processor chain to update the index. (Ludovic Boutros, yonik)
+
+* SOLR-4625: The solr (lucene syntax) query parser lost top-level boost
+ values and top-level phrase slops on queries produced by nested
+ sub-parsers. (yonik)
+
+* SOLR-4624: CachingDirectoryFactory does not need to support forceNew any
+ longer and it appears to be causing a missing close directory bug. forceNew
+ is no longer respected and will be removed in 4.3. (Mark Miller)
+
+* SOLR-3819: Grouped faceting (group.facet=true) did not respect filter
+ exclusions. (Petter Remen, yonik)
+
+* SOLR-4637: Replication can sometimes wait until shutdown or core unload until
+ removing some tmp directories. (Mark Miller)
+
+* SOLR-4638: DefaultSolrCoreState#getIndexWriter(null) is a way to avoid
+ creating the IndexWriter earlier than necessary, but it's not
+ implemented quite right. (Mark Miller)
+
+* SOLR-4640: CachingDirectoryFactory can fail to close directories in some race
+ conditions. (Mark Miller)
+
+* SOLR-4642: QueryResultKey is not calculating the correct hashCode for filters.
+ (Joel Bernstein via Mark Miller)
+
+Optimizations
+----------------------
+
+* SOLR-4569: waitForReplicasToComeUp should bail right away if it doesn't see the
+ expected slice in the clusterstate rather than waiting. (Mark Miller)
+
+* SOLR-4311: Admin UI - Optimize Caching Behaviour (steffkes)
+
+Other Changes
+----------------------
+
+* SOLR-4537: Clean up schema information REST API. (Steve Rowe)
+
+* SOLR-4596: DistributedQueue should ensure its full path exists in the constructor.
+ (Mark Miller)
+
+================== 4.2.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.3
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.1.0
+----------------------
+
+(No upgrade instructions yet)
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-4043: Add ability to get success/failure responses from Collections API.
+ (Raintung Li, Mark Miller)
+
+* SOLR-2827: RegexpBoost Update Processor (janhoy)
+
+* SOLR-4370: Allow configuring commitWithin to do hard commits.
+ (Mark Miller, Senthuran Sivananthan)
+
+* SOLR-4451: SolrJ, and SolrCloud internals, now use SystemDefaultHttpClient
+ under the covers -- allowing many HTTP connection related properties to be
+ controlled via 'standard' java system properties. (hossman)
+
+* SOLR-3855, SOLR-4490: Doc values support. (Adrien Grand, Robert Muir)
+
+* SOLR-4417: Reopen the IndexWriter on SolrCore reload. (Mark Miller)
+
+* SOLR-4477: Add support for queries (match-only) against docvalues fields.
+ (Robert Muir)
+
+* SOLR-4488: Return slave replication details for a master if the master has
+ also acted like a slave. (Mark Miller)
+
+* SOLR-4498: Add list command to ZkCLI that prints out the contents of
+ ZooKeeper. (Roman Shaposhnik via Mark Miller)
+
+* SOLR-4481: SwitchQParserPlugin registered by default as 'switch' using
+ syntax: {!switch case=XXX case.foo=YYY case.bar=ZZZ default=QQQ}foo
+ (hossman)
+
+* SOLR-4078: Allow custom naming of SolrCloud nodes so that a new host:port
+ combination can take over for a previous shard. (Mark Miller)
+
+* SOLR-4210: Requests to a Collection that does not exist on the receiving node
+ should be proxied to a suitable node. (Mark Miller, Po Rui, yonik)
+
+* SOLR-1365: New SweetSpotSimilarityFactory allows customizable TF/IDF based
+ Similarity when you know the optimal "Sweet Spot" of values for the field
+ length and TF scoring factors. (hossman)
+
+* SOLR-4138: CurrencyField fields can now be used in a ValueSources to
+ get the "raw" value (using the default number of fractional digits) in
+ the default currency of the field type. There is also a new
+ currency(field,[CODE]) function for generating a ValueSource of the
+ "natural" value, converted to an optionally specified currency to
+ override the default for the field type.
+ (hossman)
+
+* SOLR-4503: Add REST API methods, via Restlet integration, for reading schema
+ elements, at /schema/fields/, /schema/dynamicfields/, /schema/fieldtypes/,
+ and /schema/copyfields/. (Steve Rowe)
+
+Bug Fixes
+----------------------
+
+* SOLR-2850: Do not refine facets when minCount == 1
+ (Matt Smith, lundgren via Adrien Grand)
+
+* SOLR-4309: /browse: Improve JQuery autosuggest behavior (janhoy)
+
+* SOLR-4330: group.sort is ignored when using group.truncate and ex/tag
+ local params together (koji)
+
+* SOLR-4321: Collections API will sometimes use a node more than once, even
+ when more unused nodes are available.
+ (Eric Falcao, Brett Hoerner, Mark Miller)
+
+* SOLR-4345 : Solr Admin UI doesn't work in IE 10 (steffkes)
+
+* SOLR-4349 : Admin UI - Query Interface does not work in IE
+ (steffkes)
+
+* SOLR-4359: The RecentUpdates#update method should treat a problem reading the
+ next record the same as a problem parsing the record - log the exception and
+ break. (Mark Miller)
+
+* SOLR-4225: Term info page under schema browser shows incorrect count of terms
+ (steffkes)
+
+* SOLR-3926: Solr should support better way of finding active sorts (Eirik Lygre via
+ Erick Erickson)
+
+* SOLR-4342: Fix DataImportHandler stats to be a proper Map (hossman)
+
+* SOLR-3967: langid.enforceSchema option checks source field instead of target field (janhoy)
+
+* SOLR-4380: Replicate after startup option would not replicate until the
+ IndexWriter was lazily opened. (Mark Miller, Gregg Donovan)
+
+* SOLR-4400: Deadlock can occur in a rare race between committing and
+ closing a SolrIndexWriter. (Erick Erickson, Mark Miller)
+
+* SOLR-3655: A restarted node can briefly appear live and active before it really
+ is in some cases. (Mark Miller)
+
+* SOLR-4426: NRTCachingDirectoryFactory does not initialize maxCachedMB and maxMergeSizeMB
+ if <directoryFactory> is not present in solrconfig.xml (Jack Krupansky via shalin)
+
+* SOLR-4463: Fix SolrCoreState reference counting. (Mark Miller)
+
+* SOLR-4459: The Replication 'index move' rather than copy optimization doesn't
+ kick in when using NRTCachingDirectory or the rate limiting feature.
+ (Mark Miller)
+
+* SOLR-4421,SOLR-4165: On CoreContainer shutdown, all SolrCores should publish their
+ state as DOWN. (Mark Miller, Markus Jelsma)
+
+* SOLR-4467: Ephemeral directory implementations may not recover correctly
+ because the code to clear the tlog files on startup is off. (Mark Miller)
+
+* SOLR-4413: Fix SolrCore#getIndexDir() to return the current index directory.
+ (Gregg Donovan, Mark Miller)
+
+* SOLR-4469: A new IndexWriter must be opened on SolrCore reload when the index
+ directory has changed and the previous SolrCore's state should not be
+ propagated. (Mark Miller, Gregg Donovan)
+
+* SOLR-4471: Replication occurs even when a slave is already up to date.
+ (Mark Miller, Andre Charton)
+
+* SOLR-4484: ReplicationHandler#loadReplicationProperties still uses Files
+ rather than the Directory to try and read the replication properties files.
+ (Mark Miller)
+
+* SOLR-4352: /browse pagination now supports and preserves sort context
+ (Eric Spiegelberg, Erik Hatcher)
+
+* LUCENE-4796, SOLR-4373: Fix concurrency issue in NamedSPILoader and
+ AnalysisSPILoader when doing concurrent core loads in multicore
+ Solr configs. (Uwe Schindler, Hossman)
+
+* SOLR-4504: Fixed CurrencyField range queries to correctly exclude
+ documents w/o values (hossman)
+
+* SOLR-4480: A trailing + or - caused the edismax parser to throw
+ an exception. (Fiona Tay, Jan Høydahl, yonik)
+
+* SOLR-4507: The Cloud tab does not show up in the Admin UI if you
+ set zkHost in solr.xml. (Alfonso Presa, Mark Miller)
+
+* SOLR-4505: Possible deadlock around SolrCoreState update lock.
+ (Erick Erickson, Mark Miller)
+
+* SOLR-4511: When a new index is replicated into place, we need
+ to update the most recent replicatable index point without
+ doing a commit. This is important for repeater use cases, as
+ well as when nodes may switch master/slave roles.
+ (Mark Miller, Raúl Grande)
+
+* SOLR-4515: CurrencyField's OpenExchangeRatesOrgProvider now requires
+ a ratesFileLocation init param, since the previous global default
+ no longer works (hossman)
+
+* SOLR-4518: Improved CurrencyField error messages when attempting to
+ use a Currency that is not supported by the current JVM. (hossman)
+
+* SOLR-3798: Fix copyField implementation in IndexSchema to handle
+ dynamic field references that aren't string-equal to the name of
+ the referenced dynamic field. (Steve Rowe)
+
+* SOLR-4497: Collection Aliasing. (Mark Miller)
+
+Optimizations
+----------------------
+
+* SOLR-4339: Admin UI - Display Field-Flags on Schema-Browser
+ (steffkes)
+
+* SOLR-4340: Admin UI - Analysis's Button Spinner goes wild
+ (steffkes)
+
+* SOLR-4341: Admin UI - Plugins/Stats Page contains loooong
+ Values which result in horizontal Scrollbar (steffkes)
+
+* SOLR-3915: Color Legend for Cloud UI (steffkes)
+
+* SOLR-4306: Utilize indexInfo=false when gathering core names in UI
+ (steffkes)
+
+* SOLR-4284: Admin UI - make core list scrollable separate from the rest of
+ the UI (steffkes)
+
+* SOLR-4364: Admin UI - Locale based number formatting (steffkes)
+
+* SOLR-4521: Stop using the 'force' option for recovery replication. This
+ will keep some less common unnecessary replications from happening.
+ (Mark Miller, Simon Scofield)
+
+* SOLR-4529: Improve Admin UI Dashboard legibility (Felix Buenemann via
+ steffkes)
+
+* SOLR-4526: Admin UI depends on optional system info (Felix Buenemann via
+ steffkes)
+
+Other Changes
+----------------------
+
+* SOLR-4259: Carrot2 dependency should be declared on the mini version, not the core.
+ (Dawid Weiss).
+
+* SOLR-4348: Make the lock type configurable by system property by default.
+ (Mark Miller)
+
+* SOLR-4353: Renamed example jetty context file to reduce confusion (hossman)
+
+* SOLR-4384: Make post.jar report timing information (Upayavira via janhoy)
+
+* SOLR-4415: Add 'state' to shards (default to 'active') and read/write them to
+ ZooKeeper (Anshum Gupta via shalin)
+
+* SOLR-4394: Tests and example configs demonstrating SSL with both server
+ and client certs (hossman)
+
+* SOLR-3060: SurroundQParserPlugin highlighting tests
+ (Ahmet Arslan via hossman)
+
+* SOLR-2470: Added more tests for VelocityResponseWriter
+
+* SOLR-4471: Improve and clean up TestReplicationHandler.
+ (Amit Nithian via Mark Miller)
+
+* SOLR-3843: Include lucene codecs jar and enable per-field postings and docvalues
+ support in the schema.xml (Robert Muir, Steve Rowe)
+
+* SOLR-4511: Add new test for 'repeater' replication node. (Mark Miller)
+
+* SOLR-4458: Sort directions (asc, desc) are now case insensitive
+ (Shawn Heisey via hossman)
+
+* SOLR-2996: A bare * without a field specification is treated as *:*
+ by the lucene and edismax query parsers.
+ (hossman, Jan Høydahl, Alan Woodward, yonik)
+
+* SOLR-4416: Upgrade to Tika 1.3. (Markus Jelsma via Mark Miller)
+
+* SOLR-4200: Reduce INFO level logging from CachingDirectoryFactory
+ (Shawn Heisey via hossman)
+
+================== 4.1.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.2
+Carrot2 3.6.2
+Velocity 1.7 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.4.5
+
+Upgrading from Solr 4.0.0
+----------------------
+
+Custom java parsing plugins need to migrate from throwing the internal
+ParseException to throwing SyntaxError.
+
+BaseDistributedSearchTestCase now randomizes the servlet context it uses when
+creating Jetty instances. Subclasses that assume a hard coded context of
+"/solr" should either be fixed to use the "String context" variable, or should
+take advantage of the new BaseDistributedSearchTestCase(String) constructor
+to explicitly specify a fixed servlet context path. See SOLR-4136 for details.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-2255: Enhanced pivot faceting to use local-params in the same way that
+ regular field value faceting can. This means support for excluding a filter
+ query, using a different output key, and specifying 'threads' to do
+ facet.method=fcs concurrently. PivotFacetHelper now extends SimpleFacet and
+ the getFacetImplementation() extension hook was removed. (dsmiley)
+
+* SOLR-3897: A highlighter parameter "hl.preserveMulti" to return all of the
+ values of a multiValued field in their original order when highlighting.
+ (Joel Bernstein via yonik)
+
+* SOLR-3929: Support configuring IndexWriter max thread count in solrconfig.
+ (phunt via Mark Miller)
+
+* SOLR-3906: Add support for AnalyzingSuggester (LUCENE-3842), where the
+ underlying analyzed form used for suggestions is separate from the returned
+ text. (Robert Muir)
+
+* SOLR-3985: ExternalFileField caches can be reloaded on firstSearcher/
+ newSearcher events using the ExternalFileFieldReloader (Alan Woodward)
+
+* SOLR-3911: Make Directory and DirectoryFactory first class so that the majority
+ of Solr's features work with any custom implementations. (Mark Miller)
+ Additional Work:
+ - SOLR-4032: Files larger than an internal buffer size fail to replicate.
+ (Mark Miller, Markus Jelsma)
+ - SOLR-4033: Consistently use the solrconfig.xml lockType everywhere.
+ (Mark Miller, Markus Jelsma)
+ - SOLR-4144: Replication using too much RAM. (yonik, Markus Jelsma)
+ - SOLR-4187: NPE on Directory release (Mark Miller, Markus Jelsma)
+
+* SOLR-4051: Add <propertyWriter /> element to DIH's data-config.xml file,
+ allowing the user to specify the location, filename and Locale for
+ the "data-config.properties" file. Alternatively, users can specify their
+ own property writer implementation for greater control. This new configuration
+ element is optional, and defaults mimic prior behavior. The one exception is
+ that the "root" locale is default. Previously it was the machine's default locale.
+ (James Dyer)
+
+* SOLR-4084: Add FuzzyLookupFactory, which is like AnalyzingSuggester except that
+ it can tolerate typos in the input. (Areek Zillur via Robert Muir)
+
+* SOLR-4088: New and improved auto host detection strategy for SolrCloud.
+ (Raintung Li via Mark Miller)
+
+* SOLR-3970: SystemInfoHandler now exposes more details about the
+ JRE/VM/Java version in use. (hossman)
+
+* SOLR-4101: Add support for storing term offsets in the index via a
+ 'storeOffsetsWithPositions' flag on field definitions in the schema.
+ (Tom Winch, Alan Woodward)
+
+* SOLR-4093: Solr QParsers may now be directly invoked in the lucene
+ query syntax without the _query_ magic field hack.
+ Example: foo AND {!term f=myfield v=$qq}
+ (yonik)
+
+* SOLR-4087: Add MAX_DOC_FREQ option to MoreLikeThis.
+ (Andrew Janowczyk via Mark Miller)
+
+* SOLR-4114: Allow creating more than one shard per instance with the
+ Collection API. (Per Steffensen, Mark Miller)
+
+* SOLR-3531: Allowing configuring maxMergeSizeMB and maxCachedMB when
+ using NRTCachingDirectoryFactory. (Andy Laird via Mark Miller)
+
+* SOLR-4118: Fix replicationFactor to align with industry usage.
+ replicationFactor now means the total number of copies
+ of a document stored in the collection (or the total number of
+ physical indexes for a single logical slice of the collection).
+ For example if replicationFactor=3 then for a given shard there
+ will be a total of 3 replicas (one of which will normally be
+ designated as the leader.) (yonik)
+
+* SOLR-4124: You should be able to set the update log directory with the
+ CoreAdmin API the same way as the data directory. (Mark Miller)
+
+* SOLR-4028: When using ZK chroot, it would be nice if Solr would create the
+ initial path when it doesn't exist. (Tomás Fernández Löbbe via Mark Miller)
+
+* SOLR-3948: Calculate/display deleted documents in admin interface.
+ (Shawn Heisey via Mark Miller)
+
+* SOLR-4030: Allow rate limiting Directory IO based on the IO context.
+ (Mark Miller, Radim Kolar)
+
+* SOLR-4166: LBHttpSolrServer ignores ResponseParser passed in constructor.
+ (Steve Molloy via Mark Miller)
+
+* SOLR-4140: Allow access to the collections API through CloudSolrServer
+ without referencing an existing collection. (Per Steffensen via Mark Miller)
+
+* SOLR-788: Distributed search support for MLT.
+ (Matthew Woytowitz, Mike Anderson, Jamie Johnson, Mark Miller)
+
+* SOLR-4120: Collection API: Support for specifying a list of Solr addresses to
+ spread a new collection across. (Per Steffensen via Mark Miller)
+
+* SOLR-4110: Configurable Content-Type headers for PHPResponseWriters and
+ PHPSerializedResponseWriter. (Dominik Siebel via Mark Miller)
+
+* SOLR-1028: The ability to specify "transient" and "loadOnStartup" as a new properties of
+ <core> tags in solr.xml. Can specify "transientCacheSize" in the <cores> tag. Together
+ these allow cores to be loaded only when needed and only transientCacheSize transient
+ cores will be loaded at a time, the rest aged out on an LRU basis.
+
+* SOLR-4246: When update.distrib is set to skip update processors before
+ the distributed update processor, always include the log update processor
+ so forwarded updates will still be logged. (yonik)
+
+* SOLR-4230: The new Solr 4 spatial fields now work with the {!geofilt} and
+ {!bbox} query parsers. The score local-param works too. (David Smiley)
+
+* SOLR-1972: Add extra statistics to RequestHandlers - 5 & 15-minute reqs/sec
+ rolling averages; median, 75th, 95th, 99th, 99.9th percentile request times
+ (Alan Woodward, Shawn Heisey, Adrien Grand, Uwe Schindler)
+
+* SOLR-4271: Add support for PostingsHighlighter. (Robert Muir)
+
+* SOLR-4255: The new Solr 4 spatial fields now have a 'filter' boolean local-param
+ that can be set to false to not filter. It's useful when there is already a spatial
+ filter query but you also need to sort or boost by distance. (David Smiley)
+
+* SOLR-4265, SOLR-4283: Solr now parses request parameters (in URL or sent with POST
+ using content-type application/x-www-form-urlencoded) in its dispatcher code. It no
+ longer relies on special configuration settings in Tomcat or other web containers
+ to enable UTF-8 encoding, which is mandatory for correct Solr behaviour. Query
+ strings passed in via the URL need to be properly-%-escaped, UTF-8 encoded
+ bytes, otherwise Solr refuses to handle the request. The maximum length of
+ x-www-form-urlencoded POST parameters can now be configured through the
+ requestDispatcher/requestParsers/@formdataUploadLimitInKB setting in
+ solrconfig.xml (defaults to 2 MiB). Solr now works out of the box with
+ e.g. Tomcat, JBoss,... (Uwe Schindler, Dawid Weiss, Alex Rocher)
+
+* SOLR-2201: DIH's "formatDate" function now supports a timezone as an optional
+ fourth parameter (James Dyer, Mark Waddle)
+
+* SOLR-4302: New parameter 'indexInfo' (defaults to true) in CoreAdmin STATUS
+ command can be used to omit index specific information (Shahar Davidson via shalin)
+
+* SOLR-2592: Collection specific document routing. The "compositeId"
+ router is the default for collections with hash based routing (i.e. when
+ numShards=N is specified on collection creation). Documents with ids sharing
+ the same domain (prefix) will be routed to the same shard, allowing for
+ efficient querying.
+
+ Example:
+ The following two documents will be indexed to the same shard
+ since they share the same domain "customerB!".
+ <code>
+ {"id" : "customerB!doc1" [...] }
+ {"id" : "customerB!doc2" [...] }
+ </code>
+ At query time, one can specify a "shard.keys" parameter that lists what
+ shards the query should cover.
+ http://.../query?q=my_query&shard.keys=customerB!
+
+ Collections that do not specify numShards at collection creation time
+ use custom sharding and default to the "implicit" router. Document updates
+ received by a shard will be indexed to that shard, unless a "_shard_" parameter
+ or document field names a different shard.
+ (Michael Garski, Dan Rosher, yonik)
+
+
+Optimizations
+----------------------
+
+* SOLR-3788: Admin Cores UI should redirect to newly created core details
+ (steffkes)
+
+* SOLR-3895: XML and XSLT UpdateRequestHandler should not try to resolve
+ external entities. This improves speed of loading e.g. XSL-transformed
+ XHTML documents. (Martin Herfurt, uschindler, hossman)
+
+* SOLR-3614: Fix XML parsing in XPathEntityProcessor to correctly expand
+ named entities, but ignore external entities. (uschindler, hossman)
+
+* SOLR-3734: Improve Schema-Browser Handling for CopyField using
+ dynamicField's (steffkes)
+
+* SOLR-3941: The "commitOnLeader" part of distributed recovery can use
+ openSearcher=false. (Tomás Fernández Löbbe via Mark Miller)
+
+* SOLR-4063: Allow CoreContainer to load multiple SolrCores in parallel rather
+ than just serially. (Mark Miller)
+
+* SOLR-4199: When doing zk retries due to connection loss, rather than just
+ retrying for 2 minutes, retry in proportion to the session timeout.
+ (Mark Miller)
+
+* SOLR-4262: Replication Icon on Dashboard does not reflect Master-/Slave-
+ State (steffkes)
+
+* SOLR-4264: Missing Error-Screen on UI's Cloud-Page (steffkes)
+
+* SOLR-4261: Percentage Infos on Dashboard have a fixed width (steffkes)
+
+* SOLR-3851: create a new core/delete an existing core should also update
+ the main/left list of cores on the admin UI (steffkes)
+
+* SOLR-3840: XML query response display is unreadable in Solr Admin Query UI
+ (steffkes)
+
+* SOLR-3982: Admin UI: Various Dataimport Improvements (steffkes)
+
+* SOLR-4296: Admin UI: Improve Dataimport Auto-Refresh (steffkes)
+
+* SOLR-3458: Allow multiple Items to stay open on Plugins-Page (steffkes)
+
+Bug Fixes
+----------------------
+
+* SOLR-4288: Improve logging for FileDataSource (basePath, relative
+ resources). (Dawid Weiss)
+
+* SOLR-4007: Morfologik dictionaries not available in Solr field type
+ due to class loader lookup problems. (Lance Norskog, Dawid Weiss)
+
+* SOLR-3560: Handle different types of Exception Messages for Logging UI
+ (steffkes)
+
+* SOLR-3637: Commit Status at Core-Admin UI is always false (steffkes)
+
+* SOLR-3917: Partial State on Schema-Browser UI is not defined for Dynamic
+ Fields & Types (steffkes)
+
+* SOLR-3939: Consider a sync attempt from leader to replica that fails due
+ to 404 a success. (Mark Miller, Joel Bernstein)
+
+* SOLR-3940: Rejoining the leader election incorrectly triggers the code path
+ for a fresh cluster start rather than fail over. (Mark Miller)
+
+* SOLR-3961: Fixed error using LimitTokenCountFilterFactory
+ (Jack Krupansky, hossman)
+
+* SOLR-3933: Distributed commits are not guaranteed to be ordered within a
+ request. (Mark Miller)
+
+* SOLR-3939: An empty or just replicated index cannot become the leader of a
+ shard after a leader goes down. (Joel Bernstein, yonik, Mark Miller)
+
+* SOLR-3971: A collection that is created with numShards=1 turns into a
+ numShards=2 collection after starting up a second core and not specifying
+ numShards. (Mark Miller)
+
+* SOLR-3988: Fixed SolrTestCaseJ4.adoc(SolrInputDocument) to respect
+ field and document boosts (hossman)
+
+* SOLR-3981: Fixed bug that resulted in document boosts being compounded in
+ <copyField/> destination fields. (hossman)
+
+* SOLR-3920: Fix server list caching in CloudSolrServer when using more than one
+ collection list with the same instance. (Grzegorz Sobczyk, Mark Miller)
+
+* SOLR-3938: prepareCommit command omits commitData causing a failure to trigger
+ replication to slaves. (yonik)
+
+* SOLR-3992: QuerySenderListener doesn't populate document cache.
+ (Shotaro Kamio, yonik)
+
+* SOLR-3995: Recovery may never finish on SolrCore shutdown if the last reference to
+ a SolrCore is closed by the recovery process. (Mark Miller)
+
+* SOLR-3998: Atomic update on uniqueKey field itself causes duplicate document.
+ (Eric Spencer, yonik)
+
+* SOLR-4001: In CachingDirectoryFactory#close, if there are still refs for a
+ Directory outstanding, we need to wait for them to be released before closing.
+ (Mark Miller)
+
+* SOLR-4005: If CoreContainer fails to register a created core, it should close it.
+ (Mark Miller)
+
+* SOLR-4009: OverseerCollectionProcessor is not resilient to many error conditions
+ and can stop running on errors. (Raintung Li, milesli, Mark Miller)
+
+* SOLR-4019: Log stack traces for 503/Service Unavailable SolrException if not
+ thrown by PingRequestHandler. Do not log exceptions if a user tries to view a
+ hidden file using ShowFileRequestHandler. (Tomás Fernández Löbbe via James Dyer)
+
+* SOLR-3589: Edismax parser does not honor mm parameter if analyzer splits a token.
+ (Tom Burton-West, Robert Muir)
+
+* SOLR-4031: Upgrade to Jetty 8.1.7 to fix a bug where in very rare occasions
+ the content of two concurrent requests get mixed up. (Per Steffensen, yonik)
+
+* SOLR-4060: ReplicationHandler can try and do a snappull and open a new IndexWriter
+ after shutdown has already occurred, leaving an IndexWriter that is not closed.
+ (Mark Miller)
+
+* SOLR-4055: Fix a thread safety issue with the Collections API that could
+ cause actions to be targeted at the wrong SolrCores.
+ (Raintung Li, Per Steffensen via Mark Miller)
+
+* SOLR-3993: If multiple SolrCore's for a shard coexist on a node, on cluster
+ restart, leader election would stall until timeout, waiting to see all of
+ the replicas come up. (Mark Miller, Alexey Kudinov)
+
+* SOLR-2045: Databases that require a commit to be issued before closing the
+ connection on a non-read-only database leak connections. Also expanded the
+ SqlEntityProcessor test to sometimes use Derby as well as HSQLDB (Derby is
+ one db affected by this bug). (Fenlor Sebastia, James Dyer)
+
+* SOLR-4064: When there is an unexpected exception while trying to run the new
+ leader process, the SolrCore will not correctly rejoin the election.
+ (Po Rui via Mark Miller)
+
+* SOLR-3989: SolrZkClient constructor dropped exception cause when throwing
+ a new RuntimeException. (Colin Bartolome, yonik)
+
+* SOLR-4036: field aliases in fl should not cause properties of target field
+ to be used. (Martin Koch, yonik)
+
+* SOLR-4003: The SolrZKClient clean method should not try and clear zk paths
+ that start with /zookeeper, as this can fail and stop the removal of
+ further nodes. (Mark Miller)
+
+* SOLR-4076: SolrQueryParser should run fuzzy terms through
+ MultiTermAwareComponents to ensure that (for example) a fuzzy query of
+ foobar~2 is equivalent to FooBar~2 on a field that includes lowercasing.
+ (yonik)
+
+* SOLR-4081: QueryParsing.toString, used during debugQuery=true, did not
+ correctly handle ExtendedQueries such as WrappedQuery
+ (used when cache=false), spatial queries, and frange queries.
+ (Eirik Lygre, yonik)
+
+* SOLR-3959: Ensure the internal comma separator of poly fields is escaped
+ for CSVResponseWriter. (Areek Zillur via Robert Muir)
+
+* SOLR-4075: A logical shard that has had all of its SolrCores unloaded should
+ be removed from the cluster state. (Mark Miller, Gilles Comeau)
+
+* SOLR-4034: Check if a collection already exists before trying to create a
+ new one. (Po Rui, Mark Miller)
+
+* SOLR-4097: Race can cause NPE in logging line on first cluster state update.
+ (Mark Miller)
+
+* SOLR-4099: Allow the collection api work queue to make forward progress even
+ when its watcher is not fired for some reason. (Raintung Li via Mark Miller)
+
+* SOLR-3960: Fixed a bug where Distributed Grouping ignored PostFilters
+ (Nathan Visagan, hossman)
+
+* SOLR-3842: DIH would not populate multivalued fields if the column name
+ derives from a resolved variable (James Dyer)
+
+* SOLR-4117: Retrieving the size of the index may use the wrong index dir if
+ you are replicating.
+ (Mark Miller, Markus Jelsma)
+
+* SOLR-2890: Fixed a bug that prevented omitNorms and omitTermFreqAndPositions
+ options from being respected in some <fieldType/> declarations (hossman)
+
+* SOLR-4159: When we are starting a shard from rest, a potential leader should
+ not consider its last published state when deciding if it can be the new
+ leader. (Mark Miller)
+
+* SOLR-4158: When a core is registering in ZooKeeper it may not wait long
+ enough to find the leader due to how long the potential leader waits to see
+ replicas. (Mark Miller, Alain Rogister)
+
+* SOLR-4162: ZkCli usage examples are not correct because the zkhost parameter
+ is not present and it is mandatory for all commands.
+ (Tomás Fernández Löbbe via Mark Miller)
+
+* SOLR-4071: Validate that name is pass to Collections API create, and behave the
+ same way as on startup when collection.configName is not explicitly passed.
+ (Po Rui, Mark Miller)
+
+* SOLR-4127: Added explicit error message if users attempt Atomic document
+ updates with either updateLog or DistribUpdateProcessor. (hossman)
+
+* SOLR-4136: Fix SolrCloud behavior when using "hostContext" containing "_"
+ or"/" characters. This fix also makes SolrCloud more accepting of
+ hostContext values with leading/trailing slashes. (hossman)
+
+* SOLR-4168: Ensure we are using the absolute latest index dir when getting
+ list of files for replication. (Mark Miller)
+
+* SOLR-4171: CachingDirectoryFactory should not return any directories after it
+ has been closed. (Mark Miller)
+
+* SOLR-4102: Fix UI javascript error if canonical hostname can not be resolved
+ (steffkes via hossman)
+
+* SOLR-4178: ReplicationHandler should abort any current pulls and wait for
+ its executor to stop during core close. (Mark Miller)
+
+* SOLR-3918: Fixed the 'dist-war-excl-slf4j' ant target to exclude all
+ slf4j jars, so that the resulting war is usable as is provided the servlet
+ container includes the correct slf4j api and impl jars.
+ (Shawn Heisey, hossman)
+
+* SOLR-4198: OverseerCollectionProcessor should implement ClosableThread.
+ (Mark Miller)
+
+* SOLR-4213: Directories that are not shutdown until DirectoryFactory#close
+ do not have close listeners called on them. (Mark Miller)
+
+* SOLR-4134: Standard (XML) request writer cannot "set" multiple values into
+ multivalued field with partial updates. (Luis Cappa Banda, Will Butler, shalin)
+
+* SOLR-3972: Fix ShowFileRequestHandler to not log a warning in the
+ (expected) situation of a file not found. (hossman)
+
+* SOLR-4133: Cannot "set" field to null with partial updates when using the
+ standard RequestWriter. (Will Butler, shalin)
+
+* SOLR-4223: "maxFormContentSize" in jetty.xml is not picked up by jetty 8
+ so set it via solr webapp context file. (shalin)
+
+* SOLR-4175:SearchComponent chain can't contain two components of the
+ same class and use debugQuery. (Tomás Fernández Löbbe via ehatcher)
+
+* SOLR-4244: When coming back from session expiration we should not wait for
+ the leader to see us in the down state if we are the node that must become
+ the leader. (Mark Miller)
+
+* SOLR-4245: When a core is registering with ZooKeeper, the timeout to find the
+ leader in the cluster state is 30 seconds rather than leaderVoteWait + extra
+ time. (Mark Miller)
+
+* SOLR-4238: Fix jetty example requestLog config (jm via hossman)
+
+* SOLR-4251: Fix SynonymFilterFactory when an optional tokenizerFactory is supplied.
+ (Chris Bleakley via rmuir)
+
+* SOLR-4253: Misleading resource loading warning from Carrot2 clustering
+ component fixed (Stanisław Osiński)
+
+* SOLR-4257: PeerSync updates and Log Replay updates should not wait for
+ a ZooKeeper connection in order to proceed. (yonik)
+
+* SOLR-4045: SOLR admin page returns HTTP 404 on core names containing
+ a '.' (dot) (steffkes)
+
+* SOLR-4176: analysis ui: javascript not properly handling URL decoding
+ of input (steffkes)
+
+* SOLR-4079: Long core names break web gui appearance and functionality
+ (steffkes)
+
+* SOLR-4263: Incorrect Link from Schema-Browser to Query From for Top-Terms
+ (steffkes)
+
+* SOLR-3829: Admin UI Logging events broken if schema.xml defines a catch-all
+ dynamicField with type ignored (steffkes)
+
+* SOLR-4275: Fix TrieTokenizer to no longer throw StringIndexOutOfBoundsException
+ in admin UI / AnalysisRequestHandler when you enter no number to tokenize.
+ (Uwe Schindler)
+
+* SOLR-4279: Wrong exception message if _version_ field is multivalued (shalin)
+
+* SOLR-4170: The 'backup' ReplicationHandler command can sometimes use a stale
+ index directory rather than the current one. (Mark Miller, Marcin Rzewucki)
+
+* SOLR-3876: Solr Admin UI is completely dysfunctional on IE 9 (steffkes)
+
+* SOLR-4112: Fixed DataImportHandler ZKAwarePropertiesWriter implementation so
+ import works fine with SolrCloud clusters (Deniz Durmus, James Dyer,
+ Erick Erickson, shalin)
+
+* SOLR-4291: Harden the Overseer work queue thread loop. (Mark Miller)
+
+* SOLR-3820: Solr Admin Query form is missing some edismax request parameters
+ (steffkes)
+
+* SOLR-4217: post.jar no longer ignores -Dparams when -Durl is used.
+ (Alexandre Rafalovitch, ehatcher)
+
+* SOLR-4303: On replication, if the generation of the master is lower than the
+ slave we need to force a full copy of the index. (Mark Miller, Gregg Donovan)
+
+* SOLR-4266: HttpSolrServer does not release connection properly on exception
+ when no response parser is used. (Steve Molloy via Mark Miller)
+
+* SOLR-2298: Updated JavaDoc for SolrDocument.addField and SolrInputDocument.addField
+ to have more information on name and value parameters. (Siva Natarajan)
+
+Other Changes
+----------------------
+
+* SOLR-4106: Javac/ ivy path warnings with morfologik fixed by
+ upgrading to Morfologik 1.5.5 (Robert Muir, Dawid Weiss)
+
+* SOLR-3899: SolrCore should not log at warning level when the index directory
+ changes - it's an info event. (Tobias Bergman, Mark Miller)
+
+* SOLR-3861: Refactor SolrCoreState so that it's managed by SolrCore.
+ (Mark Miller, hossman)
+
+* SOLR-3966: Eliminate superfluous warning from LanguageIdentifierUpdateProcessor
+ (Markus Jelsma via hossman)
+
+* SOLR-3932: SolrCmdDistributorTest either takes 3 seconds or 3 minutes.
+ (yonik, Mark Miller)
+
+* SOLR-3856: New tests for SqlEntityProcessor/CachedSqlEntityProcessor
+ (James Dyer)
+
+* SOLR-4067: ZkStateReader#getLeaderProps should not return props for a leader
+ that it does not think is live. (Mark Miller)
+
+* SOLR-4086: DIH refactor of VariableResolver and Evaluator. VariableResolver
+ and each built-in Evaluator are separate concrete classes. DateFormatEvaluator
+ now defaults with the ROOT Locale. However, users may specify a different
+ Locale using an optional new third parameter. (James Dyer)
+
+* SOLR-3602: Update ZooKeeper to 3.4.5 (Mark Miller)
+
+* SOLR-4095: DIH NumberFormatTransformer & DateFormatTransformer default to the
+ ROOT Locale if none is specified. These previously used the machine's default.
+ (James Dyer)
+
+* SOLR-4096: DIH FileDataSource & FieldReaderDataSource default to UTF-8 encoding
+ if none is specified. These previously used the machine's default.
+ (James Dyer)
+
+* SOLR-1916: DIH to not use Lucene-forbidden Java APIs
+ (default encoding, locale, etc.) (James Dyer, Robert Muir)
+
+* SOLR-4111: SpellCheckCollatorTest#testContextSensitiveCollate to test against
+ both DirectSolrSpellChecker & IndexBasedSpellChecker
+ (Tomás Fernández Löbbe via James Dyer)
+
+* SOLR-2141: Better test coverage for Evaluators (James Dyer)
+
+* SOLR-4119: Update Guava to 13.0.1 (Mark Miller)
+
+* SOLR-4074: Raise default ramBufferSizeMB to 100 from 32.
+ (yonik, Mark Miller)
+
+* SOLR-4062: The update log location in solrconfig.xml should default to
+ ${solr.ulog.dir} rather than ${solr.data.dir:} (Mark Miller)
+
+* SOLR-4155: Upgrade Jetty to 8.1.8. (Robert Muir)
+
+* SOLR-2986: Add MoreLikeThis to warning about features that require uniqueKey.
+ Also, change the warning to warn log level. (Shawn Heisey via Mark Miller)
+
+* SOLR-4163: README improvements (Shawn Heisey via hossman)
+
+* SOLR-4248: "ant eclipse" should declare .svn directories as derived.
+ (Shawn Heisey via Mark Miller)
+
+* SOLR-3279: Upgrade Carrot2 to 3.6.2 (Stanisław Osiński)
+
+* SOLR-4254: Harden the 'leader requests replica to recover' code path.
+ (Mark Miller, yonik)
+
+* SOLR-4226: Extract fl parsing code out of ReturnFields constructor.
+ (Ryan Ernst via Robert Muir)
+
+* SOLR-4208: ExtendedDismaxQParserPlugin has been refactored to make
+ subclassing easier. (Tomás Fernández Löbbe, hossman)
+
+* SOLR-3735: Relocate the example mime-to-extension mapping, and
+ upgrade Velocity Engine to 1.7 (ehatcher)
+
+* SOLR-4287: Removed "apache-" prefix from Solr distribution and artifact
+ filenames. (Ryan Ernst, Robert Muir, Steve Rowe)
+
+* SOLR-4016: Deduplication does not work with atomic/partial updates so
+ disallow atomic update requests which change signature generating fields.
+ (Joel Nothman, yonik, shalin)
+
+* SOLR-4308: Remove the problematic and now unnecessary log4j-over-slf4j.
+ (Mark Miller)
+
+================== 4.0.0 ==================
+
+Versions of Major Components
+---------------------
+Apache Tika 1.2
+Carrot2 3.5.0
+Velocity 1.6.4 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.3.6
+
+Upgrading from Solr 4.0.0-BETA
+----------------------
+
+In order to better support distributed search mode, the TermVectorComponent's
+response format has been changed so that if the schema defines a
+uniqueKeyField, then that field value is used as the "key" for each document in
+its response section, instead of the internal lucene doc id. Users w/o a
+uniqueKeyField will continue to see the same response format. See SOLR-3229
+for more details.
+
+If you are using SolrCloud's distributed update request capabilities and a non
+string type id field, you must re-index.
+
+Upgrading from Solr 4.0.0-ALPHA
+----------------------
+
+Solr is now much more strict about requiring that the uniqueKeyField feature
+(if used) must refer to a field which is not multiValued. If you upgrade from
+an earlier version of Solr and see an error that your uniqueKeyField "can not
+be configured to be multivalued" please add 'multiValued="false"' to the
+<field /> declaration for your uniqueKeyField. See SOLR-3682 for more details.
+
+In addition, please review the notes above about upgrading from 4.0.0-BETA
+
+Upgrading from Solr 3.6
+----------------------
+
+* The Lucene index format has changed and as a result, once you upgrade,
+ previous versions of Solr will no longer be able to read your indices.
+ In a master/slave configuration, all searchers/slaves should be upgraded
+ before the master. If the master were to be updated first, the older
+ searchers would not be able to read the new index format.
+
+* Setting abortOnConfigurationError=false is no longer supported
+ (since it has never worked properly). Solr will now warn you if
+ you attempt to set this configuration option at all. (see SOLR-1846)
+
+* The default logic for the 'mm' param of the 'dismax' QParser has
+ been changed. If no 'mm' param is specified (either in the query,
+ or as a default in solrconfig.xml) then the effective value of the
+ 'q.op' param (either in the query or as a default in solrconfig.xml
+ or from the 'defaultOperator' option in schema.xml) is used to
+ influence the behavior. If q.op is effectively "AND" then mm=100%.
+ If q.op is effectively "OR" then mm=0%. Users who wish to force the
+ legacy behavior should set a default value for the 'mm' param in
+ their solrconfig.xml file.
+
+* The VelocityResponseWriter is no longer built into the core. Its JAR and
+ dependencies now need to be added (via <lib> or solr/home lib inclusion),
+ and it needs to be registered in solrconfig.xml like this:
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>
+
+* The update request parameter to choose Update Request Processor Chain is
+ renamed from "update.processor" to "update.chain". The old parameter was
+ deprecated but still working since Solr3.2, but is now removed
+ entirely.
+
+* The <indexDefaults> and <mainIndex> sections of solrconfig.xml are discontinued
+ and replaced with the <indexConfig> section. There are also better defaults.
+ When migrating, if you don't know what your old settings mean, simply delete
+ both <indexDefaults> and <mainIndex> sections. If you have customizations,
+ put them in <indexConfig> section - with same syntax as before.
+
+* Two of the SolrServer subclasses in SolrJ were renamed/replaced.
+ CommonsHttpSolrServer is now HttpSolrServer, and
+ StreamingUpdateSolrServer is now ConcurrentUpdateSolrServer.
+
+* The PingRequestHandler no longer looks for a <healthcheck/> option in the
+ (legacy) <admin> section of solrconfig.xml. Users who wish to take
+ advantage of this feature should configure a "healthcheckFile" init param
+ directly on the PingRequestHandler. As part of this change, relative file
+ paths have been fixed to be resolved against the data dir. See the example
+ solrconfig.xml and SOLR-1258 for more details.
+
+* Due to low level changes to support SolrCloud, the uniqueKey field can no
+ longer be populated via <copyField/> or <field default=...> in the
+ schema.xml. Users wishing to have Solr automatically generate a uniqueKey
+ value when adding documents should instead use an instance of
+ solr.UUIDUpdateProcessorFactory in their update processor chain. See
+ SOLR-2796 for more details.
+
+In addition, please review the notes above about upgrading from 4.0.0-BETA, and 4.0.0-ALPHA
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-3670: New CountFieldValuesUpdateProcessorFactory makes it easy to index
+ the number of values in another field for later use at query time. (hossman)
+
+* SOLR-2768: new "mod(x,y)" function for computing the modulus of two value
+ sources. (hossman)
+
+* SOLR-3238: Numerous small improvements to the Admin UI (steffkes)
+
+* SOLR-3597: seems like a lot of wasted whitespace at the top of the admin screens
+ (steffkes)
+
+* SOLR-3304: Added Solr adapters for Lucene 4's new spatial module. With
+ SpatialRecursivePrefixTreeFieldType ("location_rpt" in example schema), it is
+ possible to index a variable number of points per document (and sort on them),
+ index not just points but any Spatial4j supported shape such as polygons, and
+ to query on these shapes too. Polygons requires adding JTS to the classpath.
+ (David Smiley)
+
+* SOLR-3825: Added optional capability to log what ids are in a response
+ (Scott Stults via gsingers)
+
+* SOLR-3821: Added 'df' to the UI Query form (steffkes)
+
+* SOLR-3822: Added hover titles to the edismax params on the UI Query form
+ (steffkes)
+
+Optimizations
+----------------------
+
+* SOLR-3715: improve concurrency of the transaction log by removing
+ synchronization around log record serialization. (yonik)
+
+* SOLR-3807: Currently during recovery we pause for a number of seconds after
+ waiting for the leader to see a recovering state so that any previous updates
+ will have finished before our commit on the leader - we don't need this wait
+ for peersync. (Mark Miller)
+
+* SOLR-3837: When a leader is elected and asks replicas to sync back to him and
+ that fails, we should ask those nodes to recovery asynchronously rather than
+ synchronously. (Mark Miller)
+
+* SOLR-3709: Cache the url list created from the ClusterState in CloudSolrServer
+ on each request. (Mark Miller)
+
+
+Bug Fixes
+----------------------
+
+* SOLR-3685: Solr Cloud sometimes skipped peersync attempt and replicated instead due
+ to tlog flags not being cleared when no updates were buffered during a previous
+ replication. (Markus Jelsma, Mark Miller, yonik)
+
+* SOLR-3229: Fixed TermVectorComponent to work with distributed search
+ (Hang Xie, hossman)
+
+* SOLR-3725: Fixed package-local-src-tgz target to not bring in unnecessary jars
+ and binary contents. (Michael Dodsworth via rmuir)
+
+* SOLR-3649: Fixed bug in JavabinLoader that caused deleteById(List<String> ids)
+ to not work in SolrJ (siren)
+
+* SOLR-3730: Rollback is not implemented quite right and can cause corner case fails in
+ SolrCloud tests. (rmuir, Mark Miller)
+
+* SOLR-2981: Fixed StatsComponent to no longer return duplicated information
+ when requesting multiple stats.facet fields.
+ (Roman Kliewer via hossman)
+
+* SOLR-3743: Fixed issues with atomic updates and optimistic concurrency in
+ conjunction with stored copyField targets by making real-time get never
+ return copyField targets. (yonik)
+
+* SOLR-3746: Proper error reporting if updateLog is configured w/o necessary
+ "_version_" field in schema.xml (hossman)
+
+* SOLR-3745: Proper error reporting if SolrCloud mode is used w/o
+ necessary "_version_" field in schema.xml (hossman)
+
+* SOLR-3770: Overseer may lose updates to cluster state (siren)
+
+* SOLR-3721: Fix bug that could theoretically allow multiple recoveries to run
+ briefly at the same time if the recovery thread join call was interrupted.
+ (Per Steffensen, Mark Miller)
+
+* SOLR-3782: A leader going down while updates are coming in can cause shard
+ inconsistency. (Mark Miller)
+
+* SOLR-3611: We do not show ZooKeeper data in the UI for a node that has children.
+ (Mark Miller)
+
+* SOLR-3789: Fix bug in SnapPuller that caused "internal" compression to fail.
+ (siren)
+
+* SOLR-3790: ConcurrentModificationException could be thrown when using hl.fl=*.
+ Fixed in r1231606. (yonik, koji)
+
+* SOLR-3668: DataImport : Specifying Custom Parameters (steffkes)
+
+* SOLR-3793: UnInvertedField faceting cached big terms in the filter
+ cache that ignored deletions, leading to duplicate documents in search
+ later when a filter of the same term was specified.
+ (Günter Hipler, hossman, yonik)
+
+* SOLR-3679: Core Admin UI gives no feedback if "Add Core" fails (steffkes, hossman)
+
+* SOLR-3795: Fixed LukeRequestHandler response to correctly return field name
+ strings in copyDests and copySources arrays (hossman)
+
+* SOLR-3699: Fixed some Directory leaks when there were errors during SolrCore
+ or SolrIndexWriter initialization. (hossman)
+
+* SOLR-3518: Include final 'hits' in log information when aggregating a
+ distributed request (Markus Jelsma via hossman)
+
+* SOLR-3628: SolrInputField and SolrInputDocument are now consistently backed
+ by Collections passed in to setValue/setField, and defensively copy values
+ from Collections passed to addValue/addField
+ (Tom Switzer via hossman)
+
+* SOLR-3595: CurrencyField now generates an appropriate error on schema init
+ if it is configured as multiValued - this has never been properly supported,
+ but previously failed silently in odd ways. (hossman)
+
+* SOLR-3823: Fix 'bq' parsing in edismax. Please note that this required
+ reverting the negative boost support added by SOLR-3278 (hossman)
+
+* SOLR-3827: Fix shareSchema=true in solr.xml
+ (Tomás Fernández Löbbe via hossman)
+
+* SOLR-3809: Fixed config file replication when subdirectories are used
+ (Emmanuel Espina via hossman)
+
+* SOLR-3828: Fixed QueryElevationComponent so that using 'markExcludes' does
+ not modify the result set or ranking of 'excluded' documents relative to
+ not using elevation at all. (Alexey Serba via hossman)
+
+* SOLR-3569: Fixed debug output on distributed requests when there are no
+ results found. (David Bowen via hossman)
+
+* SOLR-3811: Query Form using wrong values for dismax, edismax (steffkes)
+
+* SOLR-3779: DataImportHandler's LineEntityProcessor when used in conjunction
+ with FileListEntityProcessor would only process the first file.
+ (Ahmet Arslan via James Dyer)
+
+* SOLR-3791: CachedSqlEntityProcessor would throw a NullPointerException when
+ a query returns a row with a NULL key. (Steffen Moelter via James Dyer)
+
+* SOLR-3833: When a election is started because a leader went down, the new
+ leader candidate should decline if the last state they published was not
+ active. (yonik, Mark Miller)
+
+* SOLR-3836: When doing peer sync, we should only count sync attempts that
+ cannot reach the given host as success when the candidate leader is
+ syncing with the replicas - not when replicas are syncing to the leader.
+ (Mark Miller)
+
+* SOLR-3835: In our leader election algorithm, if on connection loss we found
+ we did not create our election node, we should retry, not throw an exception.
+ (Mark Miller)
+
+* SOLR-3834: A new leader on cluster startup should also run the leader sync
+ process in case there was a bad cluster shutdown. (Mark Miller)
+
+* SOLR-3772: On cluster startup, we should wait until we see all registered
+ replicas before running the leader process - or if they all do not come up,
+ N amount of time. (Mark Miller)
+
+* SOLR-3756: If we are elected the leader of a shard, but we fail to publish
+ this for any reason, we should clean up and re trigger a leader election.
+ (Mark Miller)
+
+* SOLR-3812: ConnectionLoss during recovery can cause lost updates, leading to
+ shard inconsistency. (Mark Miller)
+
+* SOLR-3813: When a new leader syncs, we need to ask all shards to sync back,
+ not just those that are active. (Mark Miller)
+
+* SOLR-3641: CoreContainer is not persisting roles core attribute.
+ (hossman, Mark Miller)
+
+* SOLR-3527: SolrCmdDistributor drops some of the important commit attributes
+ (maxOptimizeSegments, softCommit, expungeDeletes) when sending a commit to
+ replicas. (Andy Laird, Tomás Fernández Löbbe, Mark Miller)
+
+* SOLR-3844: SolrCore reload can fail because it tries to remove the index
+ write lock while already holding it. (Mark Miller)
+
+* SOLR-3831: Atomic updates do not distribute correctly to other nodes.
+ (Jim Musil, Mark Miller)
+
+* SOLR-3465: Replication causes two searcher warmups.
+ (Michael Garski, Mark Miller)
+
+* SOLR-3645: /terms should default to distrib=false. (Nick Cotton, Mark Miller)
+
+* SOLR-3759: Various fixes to the example-DIH configs (Ahmet Arslan, hossman)
+
+* SOLR-3777: Dataimport-UI does not send unchecked checkboxes (Glenn MacStravic
+ via steffkes)
+
+* SOLR-3850: DataImportHandler "cacheKey" parameter was incorrectly renamed "cachePk"
+ (James Dyer)
+
+* SOLR-3087: Fixed DOMUtil so that code doing attribute validation will
+ automatically ignore nodes in the reserved "xml" prefix - in particular this
+ fixes some bugs related to xinclude and fieldTypes.
+ (Amit Nithian, hossman)
+
+* SOLR-3783: Fixed Pivot Faceting to work with facet.missing=true (hossman)
+
+* SOLR-3869: A PeerSync attempt to its replicas by a candidate leader should
+ not fail on o.a.http.conn.ConnectTimeoutException. (Mark Miller)
+
+* SOLR-3875: Fixed index boosts on multi-valued fields when docBoost is used
+ (hossman)
+
+* SOLR-3878: Exception when using open-ended range query with CurrencyField (janhoy)
+
+* SOLR-3891: CacheValue in CachingDirectoryFactory cannot be used outside of
+ solr.core package. (phunt via Mark Miller)
+
+* SOLR-3892: Inconsistent locking when accessing cache in CachingDirectoryFactory
+ from RAMDirectoryFactory and MockDirectoryFactory. (phunt via Mark Miller)
+
+* SOLR-3883: Distributed indexing forwards non-applicable request params.
+ (Dan Sutton, Per Steffensen, yonik, Mark Miller)
+
+* SOLR-3903: Fixed MissingFormatArgumentException in ConcurrentUpdateSolrServer
+ (hossman)
+
+* SOLR-3916: Fixed whitespace bug in parsing the fl param (hossman)
+
+Other Changes
+----------------------
+
+* SOLR-3690: Fixed binary release packages to include dependencies needed for
+ the solr-test-framework (hossman)
+
+* SOLR-2857: The /update/json and /update/csv URLs were restored to aid
+ in the migration of existing clients. (yonik)
+
+* SOLR-3691: SimplePostTool: Mode for crawling/posting web pages
+ See http://wiki.apache.org/solr/ExtractingRequestHandler for examples (janhoy)
+
+* SOLR-3707: Upgrade Solr to Tika 1.2 (janhoy)
+
+* SOLR-2747: Updated changes2html.pl to handle Solr's CHANGES.txt; added
+ target 'changes-to-html' to solr/build.xml.
+ (Steve Rowe, Robert Muir)
+
+* SOLR-3752: When a leader goes down, have the Overseer clear the leader state
+ in cluster.json (Mark Miller)
+
+* SOLR-3751: Add defensive checks for SolrCloud updates and requests that ensure
+ the local state matches what we can tell the request expected. (Mark Miller)
+
+* SOLR-3773: Hash based on the external String id rather than the indexed
+ representation for distributed updates. (Michael Garski, yonik, Mark Miller)
+
+* SOLR-3780: Maven build: Make solrj tests run separately from solr-core.
+ (Steve Rowe)
+
+* SOLR-3772: Optionally, on cluster startup, we can wait until we see all registered
+ replicas before running the leader process - or if they all do not come up,
+ N amount of time. (Jan Høydahl, Per Steffensen, Mark Miller)
+
+* SOLR-3750: Optionally, on session expiration, we can explicitly wait some time before
+ running the leader sync process so that we are sure every node participates.
+ (Per Steffensen, Mark Miller)
+
+* SOLR-3824: Velocity: Error messages from search not displayed (janhoy)
+
+* SOLR-3826: Test framework improvements for specifying coreName on initCore
+ (Amit Nithian, hossman)
+
+* SOLR-3749: Allow default UpdateLog syncLevel to be configured by
+ solrconfig.xml (Raintung Li, Mark Miller)
+
+* SOLR-3845: Rename numReplicas to replicationFactor in Collections API.
+ (yonik, Mark Miller)
+
+* SOLR-3815: SolrCloud - Add properties such as "range" to shards, which changes
+ the clusterstate.json and puts the shard replicas under "replicas". (yonik)
+
+* SOLR-3871: SyncStrategy should use an executor for the threads it creates to
+ request recoveries. (Mark Miller)
+
+* SOLR-3870: SyncStrategy should have a close so it can abort earlier on
+ shutdown. (Mark Miller)
+
+
+================== 4.0.0-BETA ===================
+
+
+Versions of Major Components
+---------------------
+Apache Tika 1.1
+Carrot2 3.5.0
+Velocity 1.6.4 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.3.6
+
+Upgrading from Solr 4.0.0-ALPHA
+----------------------
+
+Solr is now much more strict about requiring that the uniqueKeyField feature
+(if used) must refer to a field which is not multiValued. If you upgrade from
+an earlier version of Solr and see an error that your uniqueKeyField "can not
+be configured to be multivalued" please add 'multiValued="false"' to the
+<field /> declaration for your uniqueKeyField. See SOLR-3682 for more details.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* LUCENE-4201: Added JapaneseIterationMarkCharFilterFactory to normalize Japanese
+ iteration marks. (Robert Muir, Christian Moen)
+
+* SOLR-1856: In Solr Cell, literals should override Tika-parsed values.
+ Patch adds a param "literalsOverride" which defaults to true, but can be set
+ to "false" to let Tika-parsed values be appended to literal values (Chris Harris, janhoy)
+
+* SOLR-3488: Added a Collection management API for SolrCloud.
+ (Tommaso Teofili, Sami Siren, yonik, Mark Miller)
+
+* SOLR-3559: Full deleteByQuery support with SolrCloud distributed indexing.
+ All replicas of a shard will be consistent, even if updates arrive in a
+ different order on different replicas. (yonik)
+
+* SOLR-1929: Index encrypted documents with ExtractingUpdateRequestHandler.
+ By supplying resource.password=<mypw> or specifying an external file with regular
+ expressions matching file names, Solr will decrypt and index PDFs and DOCX formats.
+ (janhoy, Yiannis Pericleous)
+
+* SOLR-3562: Add options to remove instance dir or data dir on core unload.
+ (Mark Miller, Per Steffensen)
+
+* SOLR-2702: The default directory factory was changed to NRTCachingDirectoryFactory
+ which wraps the StandardDirectoryFactory and caches small files for improved
+ Near Real-time (NRT) performance. (Mark Miller, yonik)
+
+* SOLR-2616: Include a sample java util logging configuration file.
+ (David Smiley, Mark Miller)
+
+* SOLR-3460: Add cloud-scripts directory and a zkcli.sh|bat tool for easy scripting
+ and interaction with ZooKeeper. (Mark Miller)
+
+* SOLR-1725: StatelessScriptUpdateProcessorFactory allows users to implement
+ the full ScriptUpdateProcessor API using any scripting language with a
+ javax.script.ScriptEngineFactory
+ (Uri Boness, ehatcher, Simon Rosenthal, hossman)
+
+* SOLR-139: Change to updateable documents to create the document if it doesn't
+ already exist. To assert that the document must exist, use the optimistic
+ concurrency feature by specifying a _version_ of 1. (yonik)
+
+* LUCENE-2510, LUCENE-4044: Migrated Solr's Tokenizer-, TokenFilter-, and
+ CharFilterFactories to the lucene-analysis module. To add new analysis
+ modules to Solr (like ICU, SmartChinese, Morfologik,...), just drop in
+ the JAR files from Lucene's binary distribution into your Solr instance's
+ lib folder. The factories are automatically made available with SPI.
+ (Chris Male, Robert Muir, Uwe Schindler)
+
+* SOLR-3634, SOLR-3635: CoreContainer and CoreAdminHandler will now remember
+ and report back information about failures to initialize SolrCores. These
+ failures will be accessible from the web UI and CoreAdminHandler STATUS
+ command until they are "reset" by creating/renaming a SolrCore with the
+ same name. (hossman, steffkes)
+
+* SOLR-1280: Added commented-out example of the new script update processor
+ to the example configuration. See http://wiki.apache.org/solr/ScriptUpdateProcessor (ehatcher)
+
+* SOLR-3672: SimplePostTool: Improvements for posting files
+ Support for auto mode, recursive and wildcards (janhoy)
+
+Optimizations
+----------------------
+
+* SOLR-3708: Add hashCode to ClusterState so that structures built based on the
+ ClusterState can be easily cached. (Mark Miller)
+
+* SOLR-3709: Cache the url list created from the ClusterState in CloudSolrServer on each
+ request. (Mark Miller, yonik)
+
+* SOLR-3710: Change CloudSolrServer so that update requests are only sent to leaders by
+ default. (Mark Miller)
+
+Bug Fixes
+----------------------
+
+* SOLR-3582: Our ZooKeeper watchers respond to session events as if they are change events,
+ creating undesirable side effects. (Trym R. Møller, Mark Miller)
+
+* SOLR-3467: ExtendedDismax escaping is missing several reserved characters
+ (Michael Dodsworth via janhoy)
+
+* SOLR-3587: After reloading a SolrCore, the original Analyzer is still used rather than a new
+ one. (Alexey Serba, yonik, rmuir, Mark Miller)
+
+* LUCENE-4185: Fix a bug where CharFilters were wrongly being applied twice. (Michael Froh, rmuir)
+
+* SOLR-3610: After reloading a core, indexing would fail on any newly added fields to the schema. (Brent Mills, rmuir)
+
+* SOLR-3377: edismax fails to correctly parse a fielded query wrapped by parens.
+ This regression was introduced in 3.6. (Bernd Fehling, Jan Høydahl, yonik)
+
+* SOLR-3621: Fix rare concurrency issue when opening a new IndexWriter for replication or rollback.
+ (Mark Miller)
+
+* SOLR-1781: Replication index directories not always cleaned up.
+ (Markus Jelsma, Terje Sten Bjerkseth, Mark Miller)
+
+* SOLR-3639: Update ZooKeeper to 3.3.6 for a variety of bug fixes. (Mark Miller)
+
+* SOLR-3629: Typo in solr.xml persistence when overriding the solrconfig.xml
+ file name using the "config" attribute prevented the override file from being
+ used. (Ryan Zezeski, hossman)
+
+* SOLR-3642: Correct broken check for multivalued fields in stats.facet
+ (Yandong Yao, hossman)
+
+* SOLR-3660: Velocity: Link to admin page broken (janhoy)
+
+* SOLR-3658: Adding thousands of docs with one UpdateProcessorChain instance can briefly create
+ spikes of threads in the thousands. (yonik, Mark Miller)
+
+* SOLR-3656: A core reload now always uses the same dataDir. (Mark Miller, yonik)
+
+* SOLR-3662: Core reload bugs: a reload always obtained a non-NRT searcher, which
+ could go back in time with respect to the previous core's NRT searcher. Versioning
+ did not work correctly across a core reload, and update handler synchronization
+ was changed to synchronize on core state since more than on update handler
+ can coexist for a single index during a reload. (yonik)
+
+* SOLR-3663: There are a couple of bugs in the sync process when a leader goes down and a
+ new leader is elected. (Mark Miller)
+
+* SOLR-3623: Fixed inconsistent treatment of third-party dependencies for
+ solr contribs analysis-extras & uima (hossman)
+
+* SOLR-3652: Fixed range faceting to error instead of looping infinitely
+ when 'gap' is zero -- or effectively zero due to floating point arithmetic
+ underflow. (hossman)
+
+* SOLR-3648: Fixed VelocityResponseWriter template loading in SolrCloud mode.
+ For the example configuration, this means /browse now works with SolrCloud.
+ (janhoy, ehatcher)
+
+* SOLR-3677: Fixed misleading error message in web ui to distinguish between
+ no SolrCores loaded vs. no /admin/ handler available.
+ (hossman, steffkes)
+
+* SOLR-3428: SolrCmdDistributor flushAdds/flushDeletes can cause repeated
+ adds/deletes to be sent (Mark Miller, Per Steffensen)
+
+* SOLR-3647: DistributedQueue should use our Solr zk client rather than the std zk
+ client. ZooKeeper expiration can be permanent otherwise. (Mark Miller)
+
+Other Changes
+----------------------
+
+* SOLR-3524: Make discarding punctuation configurable in JapaneseTokenizerFactory.
+ The default is to discard punctuation, but this is overridable as an expert option.
+ (Kazuaki Hiraga, Jun Ohtani via Christian Moen)
+
+* SOLR-1770: Move the default core instance directory into a collection1 folder.
+ (Mark Miller)
+
+* SOLR-3355: Add shard and collection to SolrCore statistics. (Michael Garski, Mark Miller)
+
+* SOLR-3575: solr.xml should default to persist=true (Mark Miller)
+
+* SOLR-3563: Unloading all cores in a SolrCloud collection will now cause the removal of
+ that collection's meta data from ZooKeeper. (Mark Miller, Per Steffensen)
+
+* SOLR-3599: Add zkClientTimeout to solr.xml so that it's obvious how to change it and so
+ that you can change it with a system property. (Mark Miller)
+
+* SOLR-3609: Change Solr's expanded webapp directory to be at a consistent path called
+ solr-webapp rather than a temporary directory. (Mark Miller)
+
+* SOLR-3600: Raise the default zkClientTimeout from 10 seconds to 15 seconds. (Mark Miller)
+
+* SOLR-3215: Clone SolrInputDocument when distrib indexing so that update processors after
+ the distrib update process do not process the document twice. (Mark Miller)
+
+* SOLR-3683: Improved error handling if an <analyzer> contains both an
+ explicit class attribute, as well as nested factories. (hossman)
+
+* SOLR-3682: Fail to parse schema.xml if uniqueKeyField is multivalued (hossman)
+
+* SOLR-2115: DIH no longer requires the "config" parameter to be specified in solrconfig.xml.
+ Instead, the configuration is loaded and parsed with every import. This allows the use of
+ a different configuration with each import, and makes correcting configuration errors simpler.
+ Also, the configuration itself can be passed using the "dataConfig" parameter rather than
+ using a file (this previously worked in debug mode only). When configuration errors are
+ encountered, the error message is returned in XML format. (James Dyer)
+
+* SOLR-3439: Make SolrCell easier to use out of the box. Also improves "/browse" to display
+ rich-text documents correctly, along with facets for author and content_type.
+ With the new "content" field, highlighting of body is supported. See also SOLR-3672 for
+ easier posting of a whole directory structure. (Jack Krupansky, janhoy)
+
+* SOLR-3579: SolrCloud view should default to the graph view rather than tree view.
+ (steffkes, Mark Miller)
+
+================== 4.0.0-ALPHA ==================
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/solr/Solr4.0
+
+
+Versions of Major Components
+---------------------
+Apache Tika 1.1
+Carrot2 3.5.0
+Velocity 1.6.4 and Velocity Tools 2.0
+Apache UIMA 2.3.1
+Apache ZooKeeper 3.3.4
+
+
+Upgrading from Solr 3.6-dev
+----------------------
+
+* The Lucene index format has changed and as a result, once you upgrade,
+ previous versions of Solr will no longer be able to read your indices.
+ In a master/slave configuration, all searchers/slaves should be upgraded
+ before the master. If the master were to be updated first, the older
+ searchers would not be able to read the new index format.
+
+* Setting abortOnConfigurationError=false is no longer supported
+ (since it has never worked properly). Solr will now warn you if
+ you attempt to set this configuration option at all. (see SOLR-1846)
+
+* The default logic for the 'mm' param of the 'dismax' QParser has
+ been changed. If no 'mm' param is specified (either in the query,
+ or as a default in solrconfig.xml) then the effective value of the
+ 'q.op' param (either in the query or as a default in solrconfig.xml
+ or from the 'defaultOperator' option in schema.xml) is used to
+ influence the behavior. If q.op is effectively "AND" then mm=100%.
+ If q.op is effectively "OR" then mm=0%. Users who wish to force the
+ legacy behavior should set a default value for the 'mm' param in
+ their solrconfig.xml file.
+
+* The VelocityResponseWriter is no longer built into the core. Its JAR and
+ dependencies now need to be added (via <lib> or solr/home lib inclusion),
+ and it needs to be registered in solrconfig.xml like this:
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>
+
+* The update request parameter to choose Update Request Processor Chain is
+ renamed from "update.processor" to "update.chain". The old parameter was
+ deprecated but still working since Solr3.2, but is now removed
+ entirely.
+
+* The <indexDefaults> and <mainIndex> sections of solrconfig.xml are discontinued
+ and replaced with the <indexConfig> section. There are also better defaults.
+ When migrating, if you don't know what your old settings mean, simply delete
+ both <indexDefaults> and <mainIndex> sections. If you have customizations,
+ put them in <indexConfig> section - with same syntax as before.
+
+* Two of the SolrServer subclasses in SolrJ were renamed/replaced.
+ CommonsHttpSolrServer is now HttpSolrServer, and
+ StreamingUpdateSolrServer is now ConcurrentUpdateSolrServer.
+
+* The PingRequestHandler no longer looks for a <healthcheck/> option in the
+ (legacy) <admin> section of solrconfig.xml. Users who wish to take
+ advantage of this feature should configure a "healthcheckFile" init param
+ directly on the PingRequestHandler. As part of this change, relative file
+ paths have been fixed to be resolved against the data dir. See the example
+ solrconfig.xml and SOLR-1258 for more details.
+
+* Due to low level changes to support SolrCloud, the uniqueKey field can no
+ longer be populated via <copyField/> or <field default=...> in the
+ schema.xml. Users wishing to have Solr automatically generate a uniqueKey
+ value when adding documents should instead use an instance of
+ solr.UUIDUpdateProcessorFactory in their update processor chain. See
+ SOLR-2796 for more details.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-3272: Solr filter factory for MorfologikFilter (Polish lemmatisation).
+ (Rafał Kuć via Dawid Weiss, Steven Rowe, Uwe Schindler).
+
+* SOLR-571: The autowarmCount for LRUCaches (LRUCache and FastLRUCache) now
+ supports "percentages" which get evaluated relative the current size of
+ the cache when warming happens.
+ (Tomás Fernández Löbbe and hossman)
+
+* SOLR-1932: New relevancy function queries: termfreq, tf, docfreq, idf
+ norm, maxdoc, numdocs. (yonik)
+
+* SOLR-1665: Add debug component options for timings, results and query info only (gsingers, hossman, yonik)
+
+* SOLR-2112: Solrj API now supports streaming results. (ryan)
+
+* SOLR-792: Adding PivotFacetComponent for Hierarchical faceting
+ (ehatcher, Jeremy Hinegardner, Thibaut Lassalle, ryan)
+
+* LUCENE-2507, SOLR-2571, SOLR-2576: Added DirectSolrSpellChecker, which uses Lucene's
+ DirectSpellChecker to retrieve correction candidates directly from the term dictionary using
+ levenshtein automata. (James Dyer, rmuir)
+
+* SOLR-1873, SOLR-2358: SolrCloud - added shared/central config and core/shard management via zookeeper,
+ built-in load balancing, and distributed indexing.
+ (Jamie Johnson, Sami Siren, Ted Dunning, yonik, Mark Miller)
+ Additional Work:
+ - SOLR-2324: SolrCloud solr.xml parameters are not persisted by CoreContainer.
+ (Massimo Schiavon, Mark Miller)
+ - SOLR-2287: Allow users to query by multiple, compatible collections with SolrCloud.
+ (Soheb Mahmood, Alex Cowell, Mark Miller)
+ - SOLR-2622: ShowFileRequestHandler does not work in SolrCloud mode.
+ (Stefan Matheis, Mark Miller)
+ - SOLR-3108: Error in SolrCloud's replica lookup code when replica's are hosted in same Solr instance.
+ (Bruno Dumon, Sami Siren, Mark Miller)
+ - SOLR-3080: Remove shard info from zookeeper when SolrCore is explicitly unloaded.
+ (yonik, Mark Miller, siren)
+ - SOLR-3437: Recovery issues a spurious commit to the cluster. (Trym R. Møller via Mark Miller)
+ - SOLR-2822: Skip update processors already run on other nodes (hossman)
+
+* SOLR-1566: Transforming documents in the ResponseWriters. This will allow
+ for more complex results in responses and open the door for function queries
+ as results.
+ (ryan with patches from grant, noble, cmale, yonik, Jan Høydahl,
+ Arul Kalaipandian, Luca Cavanna, hossman)
+ - SOLR-2037: Thanks to SOLR-1566, documents boosted by the QueryElevationComponent
+ can be marked as boosted. (gsingers, ryan, yonik)
+
+* SOLR-2396: Add CollationField, which is much more efficient than
+ the Solr 3.x CollationKeyFilterFactory, and also supports
+ Locale-sensitive range queries. (rmuir)
+
+* SOLR-2338: Add support for using <similarity/> in a schema's fieldType,
+ for customizing scoring on a per-field basis. (hossman, yonik, rmuir)
+
+* SOLR-2335: New 'field("...")' function syntax for referring to complex
+ field names (containing whitespace or special characters) in functions.
+
+* SOLR-2383: /browse improvements: generalize range and date facet display
+ (Jan Høydahl via yonik)
+
+* SOLR-2272: Pseudo-join queries / filters. Examples:
+ - To restrict to the set of parents with at least one blue-eyed child:
+ fq={!join from=parent to=name}eyes:blue
+ - To restrict to the set of children with at least one blue-eyed parent:
+ fq={!join from=name to=parent}eyes:blue
+ (yonik)
+
+* SOLR-1942: Added the ability to select postings format per fieldType in schema.xml
+ as well as support custom Codecs in solrconfig.xml.
+ (simonw via rmuir)
+
+* SOLR-2136: Boolean type added to function queries, along with
+ new functions exists(), if(), and(), or(), xor(), not(), def(),
+ and true and false constants. (yonik)
+
+* SOLR-2491: Add support for using spellcheck collation in conjunction
+ with grouping. Note that the number of hits returned for collations
+ is the number of ungrouped hits. (James Dyer via rmuir)
+
+* SOLR-1298: Return FunctionQuery as pseudo field. The solr 'fl' param
+ now supports functions. For example: fl=id,sum(x,y) -- NOTE: only
+ functions with fast random access are recommended. (yonik, ryan)
+
+* SOLR-705: Optionally return shard info with each document in distributed
+ search. Use fl=id,[shard] to return the shard url. (ryan)
+
+* SOLR-2417: Add explain info directly to return documents using
+ ?fl=id,[explain] (ryan)
+
+* SOLR-2533: Converted ValueSource.ValueSourceSortField over to new rewriteable Lucene
+ SortFields. ValueSourceSortField instances must be rewritten before they can be used.
+ This is done by SolrIndexSearcher when necessary. (Chris Male).
+
+* SOLR-2193, SOLR-2565: You may now specify a 'soft' commit when committing. This will
+ use Lucene's NRT feature to avoid guaranteeing documents are on stable storage in exchange
+ for faster reopen times. There is also a new 'soft' autocommit tracker that can be
+ configured. (Mark Miller, Robert Muir)
+
+* SOLR-2399: Updated Solr Admin interface. New look and feel with per core administration
+ and many new options. (Stefan Matheis via ryan)
+
+* SOLR-1032: CSV handler now supports "literal.field_name=value" parameters.
+ (Simon Rosenthal, ehatcher)
+
+* SOLR-2656: realtime-get, efficiently retrieves the latest stored fields for specified
+ documents, even if they are not yet searchable (i.e. without reopening a searcher)
+ (yonik)
+
+* SOLR-2703: Added support for Lucene's "surround" query parser. (Simon Rosenthal, ehatcher)
+
+* SOLR-2754: Added factories for several ranking algorithms:
+ - BM25SimilarityFactory: Okapi BM25
+ - DFRSimilarityFactory: Divergence from Randomness models
+ - IBSimilarityFactory: Information-based models
+ - LMDirichletSimilarity: LM with Dirichlet smoothing
+ - LMJelinekMercerSimilarity: LM with Jelinek-Mercer smoothing
+ (David Mark Nemeskey, Robert Muir)
+
+* SOLR-2134 Trie* fields should support sortMissingLast=true, and deprecate Sortable* Field Types
+ (Ryan McKinley, Mike McCandless, Uwe Schindler, Erick Erickson)
+
+* SOLR-2438 added MultiTermAwareComponent to the various classes to allow automatic lowercasing
+ for multiterm queries (wildcards, regex, prefix, range, etc). You can now optionally specify a
+ "multiterm" analyzer in our schema.xml, but Solr should "do the right thing" if you don't
+ specify <analyzer type="multiterm"> (Pete Sturge Erick Erickson, Mentoring from Seeley and Muir)
+
+* SOLR-2481: Add support for commitWithin in DataImportHandler (Sami Siren via yonik)
+
+* SOLR-2992: Add support for IndexWriter.prepareCommit() via prepareCommit=true
+ on update URLs. (yonik)
+
+* SOLR-2906: Added LFU cache options to Solr. (Shawn Heisey via Erick Erickson)
+
+* SOLR-3069: Ability to add openSearcher=false to not open a searcher when doing
+ a hard commit. commitWithin now only invokes a softCommit. (yonik)
+
+* SOLR-2802: New FieldMutatingUpdateProcessor and Factory to simplify the
+ development of UpdateProcessors that modify field values of documents as
+ they are indexed. Also includes several useful new implementations:
+ - RemoveBlankFieldUpdateProcessorFactory
+ - TrimFieldUpdateProcessorFactory
+ - HTMLStripFieldUpdateProcessorFactory
+ - RegexReplaceProcessorFactory
+ - FieldLengthUpdateProcessorFactory
+ - ConcatFieldUpdateProcessorFactory
+ - FirstFieldValueUpdateProcessorFactory
+ - LastFieldValueUpdateProcessorFactory
+ - MinFieldValueUpdateProcessorFactory
+ - MaxFieldValueUpdateProcessorFactory
+ - TruncateFieldUpdateProcessorFactory
+ - IgnoreFieldUpdateProcessorFactory
+ (hossman, janhoy)
+
+* SOLR-3120: Optional post filtering for spatial queries bbox and geofilt
+ for LatLonType. (yonik)
+
+* SOLR-2459: Expose LogLevel selection with a RequestHandler rather then servlet
+ (Stefan Matheis, Upayavira, ryan)
+
+* SOLR-3134: Include shard info in distributed response when shards.info=true
+ (Russell Black, ryan)
+
+* SOLR-2898: Support grouped faceting. (Martijn van Groningen)
+ Additional Work:
+ - SOLR-3406: Extended grouped faceting support to facet.query and facet.range parameters.
+ (David Boychuck, Martijn van Groningen)
+
+* SOLR-2949: QueryElevationComponent is now supported with distributed search.
+ (Mark Miller, yonik)
+
+* SOLR-3221: Added the ability to directly configure aspects of the concurrency
+ and thread-pooling used within distributed search in solr. This allows for finer
+ grained controlled and can be tuned by end users to target their own specific
+ requirements. This builds on the work of the HttpCommComponent and uses the same configuration
+ block to configure the thread pool. The default configuration has
+ the same behaviour as solr 3.5, favouring throughput over latency. More
+ information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer)
+
+* SOLR-3278: Negative boost support to the Extended Dismax Query Parser Boost Query (bq).
+ (James Dyer)
+
+* SOLR-3255: OpenExchangeRates.Org Exchange Rate Provider for CurrencyField (janhoy)
+
+* SOLR-3358: Logging events are captured and available from the /admin/logging
+ request handler. (ryan)
+
+* SOLR-1535: PreAnalyzedField type provides a functionality to index (and optionally store)
+ field content that was already processed and split into tokens using some external processing
+ chain. Serialization format is pluggable, and defaults to JSON. (ab)
+
+* SOLR-3363: Consolidated Exceptions in Analysis Factories so they only throw
+ InitializationExceptions (Chris Male)
+
+* SOLR-2690: New support for a "TZ" request param which overrides the TimeZone
+ used when rounding Dates in DateMath expressions for the entire request
+ (all date range queries and date faceting is affected). The default TZ
+ is still UTC. (David Schlotfeldt, hossman)
+
+* SOLR-3402: Analysis Factories are now configured with their Lucene Version
+ throw setLuceneMatchVersion, rather than through the Map passed to init.
+ Parsing and simple error checking for the Version is now done inside
+ the code that creates the Analysis Factories. (Chris Male)
+
+* SOLR-3178: Optimistic locking. If a _version_ is provided with an update
+ that does not match the version in the index, an HTTP 409 error (Conflict)
+ will result. (Per Steffensen, yonik)
+
+* SOLR-139: Updateable documents. JSON Example:
+ {"id":"mydoc", "f1":{"set":10}, "f2":{"add":20}} will result in field "f1"
+ being set to 10, "f2" having an additional value of 20 added, and all
+ other existing fields unchanged. All source fields must be stored for
+ this feature to work correctly. (Ryan McKinley, Erik Hatcher, yonik)
+
+* SOLR-2857: Support XML,CSV,JSON, and javabin in a single RequestHandler and
+ choose the correct ContentStreamLoader based on Content-Type header. This
+ also deprecates the existing [Xml,JSON,CSV,Binary,Xslt]UpdateRequestHandler.
+ (ryan)
+
+* SOLR-2585: Context-Sensitive Spelling Suggestions & Collations. This adds support
+ for the "spellcheck.alternativeTermCount" & "spellcheck.maxResultsForSuggest"
+ parameters, letting users receive suggestions even when all the queried terms
+ exist in the dictionary. This differs from "spellcheck.onlyMorePopular" in
+ that the suggestions need not consist entirely of terms with a greater document
+ frequency than the queried terms. (James Dyer)
+
+* SOLR-2058: Edismax query parser to allow "phrase slop" to be specified per-field
+ on the pf/pf2/pf3 parameters using optional "FieldName~slop^boost" syntax. The
+ prior "FieldName^boost" syntax is still accepted. In such cases the value on the
+ "ps" parameter serves as the default slop. (Ron Mayer via James Dyer)
+
+* SOLR-3495: New UpdateProcessors have been added to create default values for
+ configured fields. These works similarly to the <field default="..."/>
+ option in schema.xml, but are applied in the UpdateProcessorChain, so they
+ may be used prior to other UpdateProcessors, or to generate a uniqueKey field
+ value when using the DistributedUpdateProcessor (ie: SolrCloud)
+ TimestampUpdateProcessorFactory
+ UUIDUpdateProcessorFactory
+ DefaultValueUpdateProcessorFactory
+ (hossman)
+
+* SOLR-2993: Add WordBreakSolrSpellChecker to offer suggestions by combining adjacent
+ query terms and/or breaking terms into multiple words. This spellchecker can be
+ configured with a traditional checker (ie: DirectSolrSpellChecker). The results
+ are combined and collations can contain a mix of corrections from both spellcheckers.
+ (James Dyer)
+
+* SOLR-3508: Simplify JSON update format for deletes as well as allow
+ version specification for optimistic locking. Examples:
+ - {"delete":"myid"}
+ - {"delete":["id1","id2","id3"]}
+ - {"delete":{"id":"myid", "_version_":123456789}}
+ (yonik)
+
+* SOLR-3211: Allow parameter overrides in conjunction with "spellcheck.maxCollationTries".
+ To do so, use parameters starting with "spellcheck.collateParam." For instance, to
+ override the "mm" parameter, specify "spellcheck.collateParam.mm". This is helpful
+ in cases where testing spellcheck collations for result counts should use different
+ parameters from the main query (James Dyer)
+
+* SOLR-2599: CloneFieldUpdateProcessorFactory provides similar functionality
+ to schema.xml's <copyField/> declaration but as an update processor that can
+ be combined with other processors in any order. (Jan Høydahl & hossman)
+
+* SOLR-3351: eDismax: ps2 and ps3 params (janhoy)
+
+* SOLR-3542: Add WeightedFragListBuilder for FVH and set it to default fragListBuilder
+ in example solrconfig.xml. (Sebastian Lutze, koji)
+
+* SOLR-2396: Add ICUCollationField to contrib/analysis-extras, which is much
+ more efficient than the Solr 3.x ICUCollationKeyFilterFactory, and also
+ supports Locale-sensitive range queries. (rmuir)
+
+
+Optimizations
+----------------------
+
+* SOLR-1875: Per-segment field faceting for single valued string fields.
+ Enable with facet.method=fcs, control the number of threads used with
+ the "threads" local param on the facet.field param. This algorithm will
+ only be faster in the presence of rapid index changes. (yonik)
+
+* SOLR-1904: When facet.enum.cache.minDf > 0 and the base doc set is a
+ SortedIntSet, convert to HashDocSet for better performance. (yonik)
+
+* SOLR-2092: Speed up single-valued and multi-valued "fc" faceting. Typical
+ improvement is 5%, but can be much greater (up to 10x faster) when facet.offset
+ is very large (deep paging). (yonik)
+
+* SOLR-2193, SOLR-2565: The default Solr update handler has been improved so
+ that it uses fewer locks, keeps the IndexWriter open rather than closing it
+ on each commit (ie commits no longer wait for background merges to complete),
+ works with SolrCore to provide faster 'soft' commits, and has an improved API
+ that requires less instanceof special casing. (Mark Miller, Robert Muir)
+ Additional Work:
+ - SOLR-2697: commit and autocommit operations don't reset
+ DirectUpdateHandler2.numDocsPending stats attribute.
+ (Alexey Serba, Mark Miller)
+
+* SOLR-2950: The QueryElevationComponent now avoids using the FieldCache and looking up
+ every document id (gsingers, yonik)
+
+Bug Fixes
+----------------------
+* SOLR-3139: Make ConcurrentUpdateSolrServer send UpdateRequest.getParams()
+ as HTTP request params (siren)
+
+* SOLR-3165: Cannot use DIH in Solrcloud + Zookeeper (Alexey Serba,
+ Mark Miller, siren)
+
+* SOLR-3068: Occasional NPE in ThreadDumpHandler (siren)
+
+* SOLR-2762: FSTLookup could return duplicate results or one results less
+ than requested. (David Smiley, Dawid Weiss)
+
+* SOLR-2741: Bugs in facet range display in trunk (janhoy)
+
+* SOLR-1908: Fixed SignatureUpdateProcessor to fail to initialize on
+ invalid config. Specifically: a signatureField that does not exist,
+ or overwriteDupes=true with a signatureField that is not indexed.
+ (hossman)
+
+* SOLR-1824: IndexSchema will now fail to initialize if there is a
+ problem initializing one of the fields or field types. (hossman)
+
+* SOLR-1928: TermsComponent didn't correctly break ties for non-text
+ fields sorted by count. (yonik)
+
+* SOLR-2107: MoreLikeThisHandler doesn't work with alternate qparsers. (yonik)
+
+* SOLR-2108: Fixed false positives when using wildcard queries on fields with reversed
+ wildcard support. For example, a query of *zemog* would match documents that contain
+ 'gomez'. (Landon Kuhn via Robert Muir)
+
+* SOLR-1962: SolrCore#initIndex should not use a mix of indexPath and newIndexPath (Mark Miller)
+
+* SOLR-2275: fix DisMax 'mm' parsing to be tolerant of whitespace
+ (Erick Erickson via hossman)
+
+* SOLR-2193, SOLR-2565, SOLR-2651: SolrCores now properly share IndexWriters across SolrCore reloads.
+ (Mark Miller, Robert Muir)
+ Additional Work:
+ - SOLR-2705: On reload, IndexWriterProvider holds onto the initial SolrCore it was created with.
+ (Yury Kats, Mark Miller)
+
+* SOLR-2682: Remove addException() in SimpleFacet. FacetComponent no longer catches and embeds
+ exceptions occurred during facet processing, it throws HTTP 400 or 500 exceptions instead. (koji)
+
+* SOLR-2654: Directorys used by a SolrCore are now closed when they are no longer used.
+ (Mark Miller)
+
+* SOLR-2854: Now load URL content stream data (via stream.url) when called for during request handling,
+ rather than loading URL content streams automatically regardless of use.
+ (David Smiley and Ryan McKinley via ehatcher)
+
+* SOLR-2829: Fix problem with false-positives due to incorrect
+ equals methods. (Yonik Seeley, Hossman, Erick Erickson.
+ Marc Tinnemeyer caught the bug)
+
+* SOLR-2848: Removed 'instanceof AbstractLuceneSpellChecker' hacks from distributed spellchecking code,
+ and added a merge() method to SolrSpellChecker instead. Previously if you extended SolrSpellChecker
+ your spellchecker would not work in distributed fashion. (James Dyer via rmuir)
+
+* SOLR-2509: StringIndexOutOfBoundsException in the spellchecker collate when the term contains
+ a hyphen. (Thomas Gambier caught the bug, Steffen Godskesen did the patch, via Erick Erickson)
+
+* SOLR-1730: Made it clearer when a core failed to load as well as better logging when the
+ QueryElevationComponent fails to properly initialize (gsingers)
+
+* SOLR-1520: QueryElevationComponent now supports non-string ids (gsingers)
+
+* SOLR-3037: When using binary format in solrj the codec screws up parameters
+ (Sami Siren, Jörg Maier via yonik)
+
+* SOLR-3062: A join in the main query was not respecting any filters pushed
+ down to it via acceptDocs since LUCENE-1536. (Mike Hugo, yonik)
+
+* SOLR-3214: If you use multiple fl entries rather than a comma separated list, all but the first
+ entry can be ignored if you are using distributed search. (Tomás Fernández Löbbe via Mark Miller)
+
+* SOLR-3352: eDismax: pf2 should kick in for a query with 2 terms (janhoy)
+
+* SOLR-3361: ReplicationHandler "maxNumberOfBackups" doesn't work if backups are triggered on commit
+ (James Dyer, Tomás Fernández Löbbe)
+
+* SOLR-2605: fixed tracking of the 'defaultCoreName' in CoreContainer so that
+ CoreAdminHandler could return consistent information regardless of whether
+ there is a a default core name or not. (steffkes, hossman)
+
+* SOLR-3370: fixed CSVResponseWriter to respect globs in the 'fl' param
+ (Keith Fligg via hossman)
+
+* SOLR-3436: Group count incorrect when not all shards are queried in the second
+ pass. (Francois Perron, Martijn van Groningen)
+
+* SOLR-3454: Exception when using result grouping with main=true and using
+ wt=javabin. (Ludovic Boutros, Martijn van Groningen)
+
+* SOLR-3446: Better errors when PatternTokenizerFactory is configured with
+ an invalid pattern, and include the 'name' whenever possible in plugin init
+ error messages. (hossman)
+
+* LUCENE-4075: Cleaner path usage in TestXPathEntityProcessor
+ (Greg Bowyer via hossman)
+
+* SOLR-2923: IllegalArgumentException when using useFilterForSortedQuery on an
+ empty index. (Adrien Grand via Mark Miller)
+
+* SOLR-2352: Fixed TermVectorComponent so that it will not fail if the fl
+ param contains globs or psuedo-fields (hossman)
+
+* SOLR-3541: add missing solrj dependencies to binary packages.
+ (Thijs Vonk via siren)
+
+* SOLR-3522: fixed parsing of the 'literal()' function (hossman)
+
+* SOLR-3548: Fixed a bug in the cachability of queries using the {!join}
+ parser or the strdist() function, as well as some minor improvements to
+ the hashCode implementation of {!bbox} and {!geofilt} queries.
+ (hossman)
+
+* SOLR-3470: contrib/clustering: custom Carrot2 tokenizer and stemmer factories
+ are respected now (Stanislaw Osinski, Dawid Weiss)
+
+* SOLR-3430: Added a new DIH test against a real SQL database. Fixed problems
+ revealed by this new test related to the expanded cache support added to
+ 3.6/SOLR-2382 (James Dyer)
+
+* SOLR-1958: When using the MailEntityProcessor, import would fail if
+ fetchMailsSince was not specified. (Max Lynch via James Dyer)
+
+* SOLR-4289: Admin UI - JVM memory bar - dark grey "used" width is too small
+ (steffkes, elyograg)
+
+Other Changes
+----------------------
+
+* SOLR-1846: Eliminate support for the abortOnConfigurationError
+ option. It has never worked very well, and in recent versions of
+ Solr hasn't worked at all. (hossman)
+
+* SOLR-1889: The default logic for the 'mm' param of DismaxQParser and
+ ExtendedDismaxQParser has been changed to be determined based on the
+ effective value of the 'q.op' param (hossman)
+
+* SOLR-1946: Misc improvements to the SystemInfoHandler: /admin/system
+ (hossman)
+
+* SOLR-2289: Tweak spatial coords for example docs so they are a bit
+ more spread out (Erick Erickson via hossman)
+
+* SOLR-2288: Small tweaks to eliminate compiler warnings. primarily
+ using Generics where applicable in method/object declarations, and
+ adding @SuppressWarnings("unchecked") when appropriate (hossman)
+
+* SOLR-2375: Suggester Lookup implementations now store trie data
+ and load it back on init. This means that large tries don't have to be
+ rebuilt on every commit or core reload. (ab)
+
+* SOLR-2413: Support for returning multi-valued fields w/o <arr> tag
+ in the XMLResponseWriter was removed. XMLResponseWriter only
+ no longer work with values less then 2.2 (ryan)
+
+* SOLR-2423: FieldType argument changed from String to Object
+ Conversion from SolrInputDocument > Object > Fieldable is now managed
+ by FieldType rather then DocumentBuilder. (ryan)
+
+* SOLR-2461: QuerySenderListener and AbstractSolrEventListener are
+ now public (hossman)
+
+* LUCENE-2995: Moved some spellchecker and suggest APIs to modules/suggest:
+ HighFrequencyDictionary, SortedIterator, TermFreqIterator, and the
+ suggester APIs and implementations. (rmuir)
+
+* SOLR-2576: Remove deprecated SpellingResult.add(Token, int).
+ (James Dyer via rmuir)
+
+* LUCENE-3232: Moved MutableValue classes to new 'common' module. (Chris Male)
+
+* LUCENE-2883: FunctionQuery, DocValues (and its impls), ValueSource (and its
+ impls) and BoostedQuery have been consolidated into the queries module. They
+ can now be found at o.a.l.queries.function.
+
+* SOLR-2027: FacetField.getValues() now returns an empty list if there are no
+ values, instead of null (Chris Male)
+
+* SOLR-1825: SolrQuery.addFacetQuery now enables facets automatically, like
+ addFacetField (Chris Male)
+
+* SOLR-2663: FieldTypePluginLoader has been refactored out of IndexSchema
+ and made public. (hossman)
+
+* SOLR-2331,SOLR-2691: Refactor CoreContainer's SolrXML serialization code and improve testing
+ (Yury Kats, hossman, Mark Miller)
+
+* SOLR-2698: Enhance CoreAdmin STATUS command to return index size.
+ (Yury Kats, hossman, Mark Miller)
+
+* SOLR-2654: The same Directory instance is now always used across a SolrCore so that
+ it's easier to add other DirectoryFactory's without static caching hacks.
+ (Mark Miller)
+
+* LUCENE-3286: 'luke' ant target has been disabled due to incompatibilities with XML
+ queryparser location (Chris Male)
+
+* SOLR-1897: The data dir from the core descriptor should override the data dir from
+ the solrconfig.xml rather than the other way round. (Mark Miller)
+
+* SOLR-2756: Maven configuration: Excluded transitive stax:stax-api dependency
+ from org.codehaus.woodstox:wstx-asl dependency. (David Smiley via Steve Rowe)
+
+* SOLR-2588: Moved VelocityResponseWriter back to contrib module in order to
+ remove it as a mandatory core dependency. (ehatcher)
+
+* SOLR-2862: More explicit lexical resources location logged if Carrot2 clustering
+ extension is used. Fixed solr. impl. of IResource and IResourceLookup. (Dawid Weiss)
+
+* SOLR-1123: Changed JSONResponseWriter to now use application/json as its Content-Type
+ by default. However the Content-Type can be overwritten and is set to text/plain in
+ the example configuration. (Uri Boness, Chris Male)
+
+* SOLR-2607: Removed deprecated client/ruby directory, which included solr-ruby and flare.
+ (ehatcher)
+
+* SOLR-3032: logOnce from SolrException logOnce and all the supporting
+ structure is gone. abortOnConfigurationError is also gone as it is no longer referenced.
+ Errors should be caught and logged at the top-most level or logged and NOT propagated up the
+ chain. (Erick Erickson)
+
+* SOLR-2105: Remove support for deprecated "update.processor" (since 3.2), in favor of
+ "update.chain" (janhoy)
+
+* SOLR-3005: Default QueryResponseWriters are now initialized via init() with an empty
+ NamedList. (Gasol Wu, Chris Male)
+
+* SOLR-2607: Removed obsolete client/ folder (ehatcher, Eric Pugh, janhoy)
+
+* SOLR-3202, SOLR-3244: Dropping Support for JSP. New Admin UI is all client side
+ (ryan, Aliaksandr Zhuhrou, Uwe Schindler)
+
+* SOLR-3159: Upgrade example and tests to run with Jetty 8 (ryan)
+
+* SOLR-3254: Upgrade Solr to Tika 1.1 (janhoy)
+
+* SOLR-3329: Dropped getSourceID() from SolrInfoMBean and using
+ getClass().getPackage().getSpecificationVersion() for Version. (ryan)
+
+* SOLR-3302: Upgraded SLF4j to version 1.6.4 (hossman)
+
+* SOLR-3322: Add more context to IndexReaderFactory.newReader (ab)
+
+* SOLR-3343: Moved FastWriter, FileUtils, RegexFileFilter, RTimer and SystemIdResolver
+ from org.apache.solr.common to org.apache.solr.util (Chris Male)
+
+* SOLR-3357: ResourceLoader.newInstance now accepts a Class representation of the expected
+ instance type (Chris Male)
+
+* SOLR-3388: HTTP caching is now disabled by default for RequestUpdateHandlers. (ryan)
+
+* SOLR-3309: web.xml now specifies metadata-complete=true (which requires
+ Servlet 2.5) to prevent servlet containers from scanning class annotations
+ on startup. This allows for faster startup times on some servlet containers.
+ (Bill Bell, hossman)
+
+* SOLR-1893: Refactored some common code from LRUCache and FastLRUCache into
+ SolrCacheBase (Tomás Fernández Löbbe via hossman)
+
+* SOLR-3403: Deprecated Analysis Factories now log their own deprecation messages.
+ No logging support is provided by Factory parent classes. (Chris Male)
+
+* SOLR-1258: PingRequestHandler is now directly configured with a
+ "healthcheckFile" instead of looking for the legacy
+ <admin><healthcheck/></admin> syntax. Filenames specified as relative
+ paths have been fixed so that they are resolved against the data dir
+ instead of the CWD of the java process. (hossman)
+
+* SOLR-3083: JMX beans now report Numbers as numeric values rather then String
+ (Tagged Siteops, Greg Bowyer via ryan)
+
+* SOLR-2796: Due to low level changes to support SolrCloud, the uniqueKey
+ field can no longer be populated via <copyField/> or <field default=...>
+ in the schema.xml.
+
+* SOLR-3534: The Dismax and eDismax query parsers will fall back on the 'df' parameter
+ when 'qf' is absent. And if neither is present nor the schema default search field
+ then an exception will be thrown now. (dsmiley)
+
+* SOLR-3262: The "threads" feature of DIH is removed (deprecated in Solr 3.6)
+ (James Dyer)
+
+* SOLR-3422: Refactored DIH internal data classes. All entities in
+ data-config.xml must have a name (James Dyer)
+
+Documentation
+----------------------
+
+* SOLR-2232: Improved README info on solr.solr.home in examples
+ (Eric Pugh and hossman)
+
+================== 3.6.2 ==================
+
+Bug Fixes
+----------------------
+* SOLR-3790: ConcurrentModificationException could be thrown when using hl.fl=*.
+ (yonik, koji)
+
+* SOLR-3589: Edismax parser does not honor mm parameter if analyzer splits a token.
+ (Tom Burton-West, Robert Muir)
+
+================== 3.6.1 ==================
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/solr/Solr3.6.1
+
+Bug Fixes
+
+* LUCENE-3969: Throw IAE on bad arguments that could cause confusing errors in
+ PatternTokenizer. CommonGrams populates PositionLengthAttribute correctly.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* SOLR-3361: ReplicationHandler "maxNumberOfBackups" doesn't work if backups are triggered on commit
+ (James Dyer, Tomás Fernández Löbbe)
+
+* SOLR-3375: Fix charset problems with HttpSolrServer (Roger HÃ¥kansson, yonik, siren)
+
+* SOLR-3436: Group count incorrect when not all shards are queried in the second
+ pass. (Francois Perron, Martijn van Groningen)
+
+* SOLR-3454: Exception when using result grouping with main=true and using
+ wt=javabin. (Ludovic Boutros, Martijn van Groningen)
+
+* SOLR-3489: Config file replication less error prone (Jochen Just via janhoy)
+
+* SOLR-3477: SOLR does not start up when no cores are defined (Tomás Fernández Löbbe via tommaso)
+
+* SOLR-3470: contrib/clustering: custom Carrot2 tokenizer and stemmer factories
+ are respected now (Stanislaw Osinski, Dawid Weiss)
+
+* SOLR-3360: More DIH bug fixes for the deprecated "threads" parameter.
+ (Mikhail Khludnev, Claudio R, via James Dyer)
+
+* SOLR-3430: Added a new DIH test against a real SQL database. Fixed problems
+ revealed by this new test related to the expanded cache support added to
+ 3.6/SOLR-2382 (James Dyer)
+
+* SOLR-3336: SolrEntityProcessor substitutes most variables at query time.
+ (Michael Kroh, Lance Norskog, via Martijn van Groningen)
+
+
+================== 3.6.0 ==================
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/solr/Solr3.6
+
+Upgrading from Solr 3.5
+----------------------
+* SOLR-2983: As a consequence of moving the code which sets a MergePolicy from SolrIndexWriter to SolrIndexConfig,
+ (custom) MergePolicies should now have an empty constructor; thus an IndexWriter should not be passed as constructor
+ parameter but instead set using the setIndexWriter() method.
+
+* As doGet() methods in SimplePostTool was changed to static, the client applications of this
+ class need to be recompiled.
+
+* In Solr version 3.5 and earlier, HTMLStripCharFilter had known bugs in the
+ character offsets it provided, triggering e.g. exceptions in highlighting.
+ HTMLStripCharFilter has been re-implemented, addressing this and other
+ issues. See the entry for LUCENE-3690 in the Bug Fixes section below for a
+ detailed list of changes. For people who depend on the behavior of
+ HTMLStripCharFilter in Solr version 3.5 and earlier: the old implementation
+ (bugs and all) is preserved as LegacyHTMLStripCharFilter.
+
+* As of Solr 3.6, the <indexDefaults> and <mainIndex> sections of solrconfig.xml are deprecated
+ and replaced with a new <indexConfig> section. Read more in SOLR-1052 below.
+
+* SOLR-3040: The DIH's admin UI (dataimport.jsp) now requires DIH request handlers to start with
+ a '/'. (dsmiley)
+
+* SOLR-3161: <requestDispatcher handleSelect="false"> is now the default. An existing config will
+ probably work as-is because handleSelect was explicitly enabled in default configs. HandleSelect
+ makes /select work as well as enables the 'qt' parameter. Instead, consider explicitly
+ configuring /select as is done in the example solrconfig.xml, and register your other search
+ handlers with a leading '/' which is a recommended practice. (David Smiley, Erik Hatcher)
+
+* SOLR-3161: Don't use the 'qt' parameter with a leading '/'. It probably won't work in 4.0
+ and it's now limited in 3.6 to SearchHandler subclasses that aren't lazy-loaded.
+
+* SOLR-2724: Specifying <defaultSearchField> and <solrQueryParser defaultOperator="..."/> in
+ schema.xml is now considered deprecated. Instead you are encouraged to specify these via the "df"
+ and "q.op" parameters in your request handler definition. (David Smiley)
+
+* Bugs found and fixed in the SignatureUpdateProcessor that previously caused
+ some documents to produce the same signature even when the configured fields
+ contained distinct (non-String) values. Users of SignatureUpdateProcessor
+ are strongly advised that they should re-index as document signatures may
+ have now changed. (see SOLR-3200 & SOLR-3226 for details)
+
+New Features
+----------------------
+* SOLR-2020: Add Java client that uses Apache Http Components http client (4.x).
+ (Chantal Ackermann, Ryan McKinley, Yonik Seeley, siren)
+
+* SOLR-2854: Now load URL content stream data (via stream.url) when called for during request handling,
+ rather than loading URL content streams automatically regardless of use.
+ (David Smiley and Ryan McKinley via ehatcher)
+
+* SOLR-2904: BinaryUpdateRequestHandler should be able to accept multiple update requests from
+ a stream (shalin)
+
+* SOLR-1565: StreamingUpdateSolrServer supports RequestWriter API and therefore, javabin update
+ format (shalin)
+
+* SOLR-2438 added MultiTermAwareComponent to the various classes to allow automatic lowercasing
+ for multiterm queries (wildcards, regex, prefix, range, etc). You can now optionally specify a
+ "multiterm" analyzer in our schema.xml, but Solr should "do the right thing" if you don't
+ specify <fieldType="multiterm"> (Pete Sturge Erick Erickson, Mentoring from Seeley and Muir)
+
+* SOLR-2919: Added support for localized range queries when the analysis chain uses
+ CollationKeyFilter or ICUCollationKeyFilter. (Michael Sokolov, rmuir)
+
+* SOLR-2982: Added BeiderMorseFilterFactory for Beider-Morse (BMPM) phonetic encoder. Upgrades
+ commons-codec to version 1.6 (Brooke Schreier Ganz, rmuir)
+
+* SOLR-1843: A new "rootName" attribute is now available when
+ configuring <jmx/> in solrconfig.xml. If this attribute is set,
+ Solr will use it as the root name for all MBeans Solr exposes via
+ JMX. The default root name is "solr" followed by the core name.
+ (Constantijn Visinescu, hossman)
+
+* SOLR-2906: Added LFU cache options to Solr. (Shawn Heisey via Erick Erickson)
+
+* SOLR-3036: Ability to specify overwrite=false on the URL for XML updates.
+ (Sami Siren via yonik)
+
+* SOLR-2603: Add the encoding function for alternate fields in highlighting.
+ (Massimo Schiavon, koji)
+
+* SOLR-1729: Evaluation of NOW for date math is done only once per request for
+ consistency, and is also propagated to shards in distributed search.
+ Adding a parameter NOW=<time_in_ms> to the request will override the
+ current time. (Peter Sturge, yonik, Simon Willnauer)
+
+* SOLR-1709: Distributed support for Date and Numeric Range Faceting
+ (Peter Sturge, David Smiley, hossman, Simon Willnauer)
+
+* SOLR-3054, LUCENE-3671: Add TypeTokenFilterFactory that creates TypeTokenFilter
+ that filters tokens based on their TypeAttribute. (Tommaso Teofili via
+ Uwe Schindler)
+
+* LUCENE-3305, SOLR-3056: Added Kuromoji morphological analyzer for Japanese.
+ See the 'text_ja' fieldtype in the example to get started.
+ (Christian Moen, Masaru Hasegawa via Robert Muir)
+
+* SOLR-1860: StopFilterFactory, CommonGramsFilterFactory, and
+ CommonGramsQueryFilterFactory can optionally read stopwords in Snowball
+ format (specify format="snowball"). (Robert Muir)
+
+* SOLR-3105: ElisionFilterFactory optionally allows the parameter
+ ignoreCase (default=false). (Robert Muir)
+
+* LUCENE-3714: Add WFSTLookupFactory, a suggester that uses a weighted FST
+ for more fine-grained suggestions. (Mike McCandless, Dawid Weiss, Robert Muir)
+
+* SOLR-3143: Add SuggestQueryConverter, a QueryConverter intended for
+ auto-suggesters. (Robert Muir)
+
+* SOLR-3033: ReplicationHandler's backup command now supports a 'maxNumberOfBackups'
+ init param that can be used to delete all but the most recent N backups. (Torsten Krah, James Dyer)
+
+* SOLR-2202: Currency FieldType, whith support for currencies and exchange rates
+ (Greg Fodor & Andrew Morrison via janhoy, rmuir, Uwe Schindler)
+
+* SOLR-3026: eDismax: Locking down which fields can be explicitly queried (user fields aka uf)
+ (janhoy, hossmann, Tomás Fernández Löbbe)
+
+* SOLR-2826: URLClassify Update Processor (janhoy)
+
+* SOLR-2764: Create a NorwegianLightStemmer and NorwegianMinimalStemmer (janhoy)
+
+* SOLR-3221: Added the ability to directly configure aspects of the concurrency
+ and thread-pooling used within distributed search in solr. This allows for finer
+ grained controlled and can be tuned by end users to target their own specific
+ requirements. This builds on the work of the HttpCommComponent and uses the same configuration
+ block to configure the thread pool. The default configuration has
+ the same behaviour as solr 3.5, favouring throughput over latency. More
+ information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer)
+
+* SOLR-2001: The query component will substitute an empty query that matches
+ no documents if the query parser returns null. This also prevents an
+ exception from being thrown by the default parser if "q" is missing. (yonik)
+ - SOLR-435: if q is "" then it's also acceptable. (dsmiley, hoss)
+
+* SOLR-2919: Added parametric tailoring options to ICUCollationKeyFilterFactory.
+ These can be used to customize range query/sort behavior, for example to
+ support numeric collation, ignore punctuation/whitespace, ignore accents but
+ not case, control whether upper/lowercase values are sorted first, etc. (rmuir)
+
+* SOLR-2346: Add a chance to set content encoding explicitly via content type
+ of stream for extracting request handler. This is convenient when Tika's
+ auto detector cannot detect encoding, especially the text file is too short
+ to detect encoding. (koji)
+
+* SOLR-1499: Added SolrEntityProcessor that imports data from another Solr core
+ or instance based on a specified query.
+ (Lance Norskog, Erik Hatcher, Pulkit Singhal, Ahmet Arslan, Luca Cavanna,
+ Martijn van Groningen)
+
+* SOLR-3190: Minor improvements to SolrEntityProcessor. Add more consistency
+ between solr parameters and parameters used in SolrEntityProcessor and
+ ability to specify a custom HttpClient instance.
+ (Luca Cavanna via Martijn van Groningen)
+
+* SOLR-2382: Added pluggable cache support to DIH so that any Entity can be
+ made cache-able by adding the "cacheImpl" parameter. Include
+ "SortedMapBackedCache" to provide in-memory caching (as previously this was
+ the only option when using CachedSqlEntityProcessor). Users can provide
+ their own implementations of DIHCache for other caching strategies.
+ Deprecate CachedSqlEntityProcessor in favor of specifing "cacheImpl" with
+ SqlEntityProcessor. Make SolrWriter implement DIHWriter and allow the
+ possibility of pluggable Writers (DIH writing to something other than Solr).
+ (James Dyer, Noble Paul)
+
+
+Optimizations
+----------------------
+* SOLR-1931: Speedup for LukeRequestHandler and admin/schema browser. New parameter
+ reportDocCount defaults to 'false'. Old behavior still possible by specifying this as 'true'
+ (Erick Erickson)
+
+* SOLR-3012: Move System.getProperty("type") in postData() to main() and add type argument so that
+ the client applications of SimplePostTool can set content type via method argument. (koji)
+
+* SOLR-2888: FSTSuggester refactoring: internal storage is now UTF-8,
+ external sorting (on disk) prevents OOMs even with large data sets
+ (the bottleneck is now FST construction), code cleanups and API cleanups.
+ (Dawid Weiss, Robert Muir)
+
+Bug Fixes
+----------------------
+* SOLR-3187 SystemInfoHandler leaks filehandles (siren)
+
+* LUCENE-3820: Fixed invalid position indexes by reimplementing PatternReplaceCharFilter.
+ This change also drops real support for boundary characters -- all input is prebuffered
+ for pattern matching. (Dawid Weiss)
+
+* SOLR-3068: Fixed NPE in ThreadDumpHandler (siren)
+
+* SOLR-2912: Fixed File descriptor leak in ShowFileRequestHandler (Michael Ryan, shalin)
+
+* SOLR-2819: Improved speed of parsing hex entities in HTMLStripCharFilter
+ (Bernhard Berger, hossman)
+
+* SOLR-2509: StringIndexOutOfBoundsException in the spellchecker collate when the term contains
+ a hyphen. (Thomas Gambier caught the bug, Steffen Godskesen did the patch, via Erick Erickson)
+
+* SOLR-2955: Fixed IllegalStateException when querying with group.sort=score desc in sharded
+ environment. (Steffen Elberg Godskesen, Martijn van Groningen)
+
+* SOLR-2956: Fixed inconsistencies in the flags (and flag key) reported by
+ the LukeRequestHandler (hossman)
+
+* SOLR-1730: Made it clearer when a core failed to load as well as better logging when the
+ QueryElevationComponent fails to properly initialize (gsingers)
+
+* SOLR-1520: QueryElevationComponent now supports non-string ids (gsingers)
+
+* SOLR-3024: Fixed JSONTestUtil.matchObj, in previous releases it was not
+ respecting the 'delta' arg (David Smiley via hossman)
+
+* SOLR-2542: Fixed DIH Context variables which were broken for all scopes other
+ then SCOPE_ENTITY (Linbin Chen & Frank Wesemann via hossman)
+
+* SOLR-3042: Fixed Maven Jetty plugin configuration.
+ (David Smiley via Steve Rowe)
+
+* SOLR-2970: CSV ResponseWriter returns fields defined as stored=false in schema (janhoy)
+
+* LUCENE-3690, LUCENE-2208, SOLR-882, SOLR-42: Re-implemented
+ HTMLStripCharFilter as a JFlex-generated scanner and moved it to
+ lucene/contrib/analyzers/common/. See below for a list of bug fixes and
+ other changes. To get the same behavior as HTMLStripCharFilter in Solr
+ version 3.5 and earlier (including the bugs), use LegacyHTMLStripCharFilter,
+ which is the previous implementation.
+
+ Behavior changes from the previous version:
+
+ - Known offset bugs are fixed.
+ - The "Mark invalid" exceptions reported in SOLR-1283 are no longer
+ triggered (the bug is still present in LegacyHTMLStripCharFilter).
+ - The character entity "&apos;" is now always properly decoded.
+ - More cases of <script> tags are now properly stripped.
+ - CDATA sections are now handled properly.
+ - Valid tag name characters now include the supplementary Unicode characters
+ from Unicode character classes [:ID_Start:] and [:ID_Continue:].
+ - Uppercase character entities "&QUOT;", "&COPY;", "&GT;", "&LT;", "&REG;",
+ and "&AMP;" are now recognized and handled as if they were in lowercase.
+ - The REPLACEMENT CHARACTER U+FFFD is now used to replace numeric character
+ entities for unpaired UTF-16 low and high surrogates (in the range
+ [U+D800-U+DFFF]).
+ - Properly paired numeric character entities for UTF-16 surrogates are now
+ converted to the corresponding code units.
+ - Opening tags with unbalanced quotation marks are now properly stripped.
+ - Literal "<" and ">" characters in opening tags, regardless of whether they
+ appear inside quotation marks, now inhibit recognition (and stripping) of
+ the tags. The only exception to this is for values of event-handler
+ attributes, e.g. "onClick", "onLoad", "onSelect".
+ - A newline '\n' is substituted instead of a space for stripped HTML markup.
+ - Nothing is substituted for opening and closing inline tags - they are
+ simply removed. The list of inline tags is (case insensitively): <a>,
+ <abbr>, <acronym>, <b>, <basefont>, <bdo>, <big>, <cite>, <code>, <dfn>,
+ <em>, <font>, <i>, <img>, <input>, <kbd>, <label>, <q>, <s>, <samp>,
+ <select>, <small>, <span>, <strike>, <strong>, <sub>, <sup>, <textarea>,
+ <tt>, <u>, and <var>.
+ - HTMLStripCharFilterFactory now handles HTMLStripCharFilter's "escapedTags"
+ feature: opening and closing tags with the given names, including any
+ attributes and their values, are left intact in the output.
+ (Steve Rowe)
+
+* LUCENE-3717: Fixed offset bugs in TrimFilter, WordDelimiterFilter, and
+ HyphenatedWordsFilter where they would create invalid offsets in
+ some situations, leading to problems in highlighting. (Robert Muir)
+
+* SOLR-2280: commitWithin ignored for a delete query (Juan Grande via janhoy)
+
+* SOLR-3073: Fixed 'Invalid UUID string' error when having an UUID field as
+ the unique key and executing a distributed grouping request. (Devon Krisman, Martijn van Groningen)
+
+* SOLR-3084: Fixed initialization error when using
+ <queryResponseWriter default="true" ... /> (Bernd Fehling and hossman)
+
+* SOLR-3109: Fixed numerous redundant shard requests when using distributed grouping.
+ (rblack via Martijn van Groningen)
+
+* SOLR-3052: Fixed typo in distributed grouping parameters.
+ (Martijn van Groningen, Grant Ingersoll)
+
+* SOLR-2909: Add support for ResourceLoaderAware tokenizerFactories in synonym
+ filter factories. (Tom Klonikowski, Jun Ohtani via Koji Sekiguchi)
+
+* SOLR-3168: ReplicationHandler "numberToKeep" & "maxNumberOfBackups" parameters
+ would keep only 1 backup, even if more than 1 was specified (Neil Hooey, James Dyer)
+
+* SOLR-3009: hitGrouped.vm isn't shipped with 3.x (ehatcher, janhoy)
+
+* SOLR-3195: timeAllowed is ignored for grouping queries
+ (Russell Black via Martijn van Groningen)
+
+* SOLR-2124: Do not log stack traces for "Service Disabled" / 503 Exceptions (PingRequestHandler, etc)
+ (James Dyer, others)
+
+* SOLR-3260: DataImportHandler: ScriptTransformer gives better error messages when
+ problems arise on initialization (no Script Engine, invalid script, etc). (James Dyer)
+
+* SOLR-2959: edismax now respects the magic fields '_val_' and '_query_'
+ (Michael Watts, hossman)
+
+* SOLR-3074: fix SolrPluginUtils.docListToSolrDocumentList to respect the
+ list of fields specified. This fix also deprecates
+ DocumentBuilder.loadStoredFields which is not used anywhere in Solr,
+ and was fundamentally broken/bizarre.
+ (hossman, Ahmet Arslan)
+
+* SOLR-2291: fix JSONWriter to respect field list when writing SolrDocuments
+ (Ahmet Arslan via hossman)
+
+* SOLR-3264: Fix CoreContainer and SolrResourceLoader logging to be more
+ clear about when SolrCores are being created, and stop misleading people
+ about SolrCore instanceDir's being the "Solr Home Dir" (hossman)
+
+* SOLR-3046: Fix whitespace typo in DIH response "Time taken" (hossman)
+
+* SOLR-3261: Fix edismax to respect query operators when literal colons
+ are used in query string. (Juan Grande via hossman)
+
+* SOLR-3226: Fix SignatureUpdateProcessor to no longer ignore non-String
+ field values (Spyros Kapnissis, hossman)
+
+* SOLR-3200: Fix SignatureUpdateProcessor "all fields" mode to use all
+ fields of each document instead of the fields specified by the first
+ document indexed (Spyros Kapnissis via hossman)
+
+* SOLR-3316: Distributed grouping failed when rows parameter was set to 0 and
+ sometimes returned a wrong hit count as matches. (Cody Young, Martijn van Groningen)
+
+* SOLR-3107: contrib/langid: When using the LangDetect implementation of
+ langid, set the random seed to 0, so that the same document is detected as
+ the same language with the same probability every time.
+ (Christian Moen via rmuir)
+
+* SOLR-2937: Configuring the number of contextual snippets used for
+ search results clustering. The hl.snippets parameter is now respected
+ by the clustering plugin, can be overridden by carrot.summarySnippets
+ if needed (Stanislaw Osinski).
+
+* SOLR-2938: Clustering on multiple fields. The carrot.title and
+ carrot.snippet can now take comma- or space-separated lists of
+ field names to cluster (Stanislaw Osinski).
+
+* SOLR-2939: Clustering of multilingual search results. The document's
+ language field be passed in the carrot.lang parameter, the carrot.lcmap
+ parameter enables mapping of language codes to ISO 639 (Stanislaw Osinski).
+
+* SOLR-2940: Passing values for custom Carrot2 fields to Clustering component.
+ The custom field mapping are defined using the carrot.custom parameter
+ (Stanislaw Osinski).
+
+* SOLR-2941: NullPointerException on clustering component initialization
+ when schema does not have a unique key field (Stanislaw Osinski).
+
+* SOLR-2942: ClassCastException when passing non-textual fields to
+ clustering component (Stanislaw Osinski).
+
+
+Other Changes
+----------------------
+* SOLR-2922: Upgrade commons-io and commons-lang to 2.1 and 2.6, respectively. (koji)
+
+* SOLR-2920: Refactor frequent conditional use of DefaultSolrParams and
+ AppendedSolrParams into factory methods.
+ (David Smiley via hossman)
+
+* SOLR-3032: Deprecate logOnce from SolrException logOnce and all the supporting
+ structure will disappear in 4.0. Errors should be caught and logged at the
+ top-most level or logged and NOT propagated up the chain. (Erick Erickson)
+
+* SOLR-2718: Add ability to lazy load response writers, defined with startup="lazy".
+ (ehatcher)
+
+* SOLR-2901: Upgrade Solr to Tika 1.0 (janhoy)
+
+* SOLR-3059: Example XSL stylesheet for indexing query result XML (janhoy)
+
+* SOLR-3097, SOLR-3105: Add analysis configurations for different languages to
+ the example. (Christian Moen, Robert Muir)
+
+* SOLR-3005: Default QueryResponseWriters are now initialized via init() with an empty
+ NamedList. (Gasol Wu, Chris Male)
+
+* SOLR-3140: Upgrade schema version to 1.5, where omitNorms defaults to "true" for all
+ primitive (non-analyzed) field types such as int, float, date, bool, string.. (janhoy)
+
+* SOLR-3077: Better error messages when attempting to use "blank" field names
+ (Antony Stubbs via hossman)
+
+* SOLR-2712: expecting fl=score to return all fields is now deprecated.
+ In solr 4.0, this will only return the score. (ryan)
+
+* SOLR-3156: Check for Lucene directory locks at startup. In previous versions
+ this check was only performed during modifying (e.g. adding and deleting
+ documents) the index. (Luca Cavanna via Martijn van Groningen)
+
+* SOLR-1052: Deprecated <indexDefaults> and <mainIndex> in solrconfig.xml
+ From now, all settings go in the new <indexConfig> tag, and some defaults are
+ changed: useCompoundFile=false, ramBufferSizeMB=32, lockType=native, so that
+ the effect of NOT specifying <indexConfig> at all gives same result as the
+ example config used to give in 3.5 (janhoy, gsingers)
+
+* SOLR-3294: In contrib/clustering/lib/, replaced the manually retrowoven
+ Java 1.5-compatible carrot2-core-3.5.0.jar (which is not publicly available,
+ except from the Solr Subversion repository), with newly released Java
+ 1.5-compatible carrot2-core-3.5.0.1.jar (hosted on the Maven Central
+ repository). Also updated dependencies jackson-core-asl and
+ jackson-mapper-asl (both v1.5.2 -> v1.7.4). (Dawid Weiss, Steve Rowe)
+
+* SOLR-3295: netcdf jar is excluded from the binary release (and disabled in
+ ivy.xml) because it requires java 6. If you want to parse this content with
+ extracting request handler and are willing to use java 6, just add the jar.
+ (rmuir)
+
+* SOLR-3142: DIH Imports no longer default optimize to true, instead false.
+ If you want to force all segments to be merged into one, you can specify
+ this parameter yourself. NOTE: this can be very expensive operation and
+ usually does not make sense for delta-imports. (Robert Muir)
+
+Build
+----------------------
+* SOLR-2487: Add build target to package war without slf4j jars (janhoy)
+
+* SOLR-3112: Fix tests not to write to src/test-files (Luca Cavanna via Robert Muir)
+
+* LUCENE-3753: Restructure the Solr build system. (Steve Rowe)
+
+* SOLR-3204: The packaged pre-release artifact of Commons CSV used the original
+ package name (org.apache.commons.csv). This created a compatibility issue as
+ the Apache Commons team works toward an official release of Commons CSV.
+ The source of Commons CSV was added under a separate package name to the
+ Solr source code. (Uwe Schindler, Chris Male, Emmanuel Bourg)
+
+* LUCENE-3930: Changed build system to use Apache Ivy for retrival of 3rd
+ party JAR files. Please review README.txt for instructions.
+ (Robert Muir, Chris Male, Uwe Schindler, Steven Rowe, Hossman)
+
+================== 3.5.0 ==================
+
+New Features
+----------------------
+* SOLR-2749: Add boundary scanners for FastVectorHighlighter. <boundaryScanner/>
+ can be specified with a name in solrconfig.xml, and use hl.boundaryScanner=name
+ parameter to specify the named <boundaryScanner/>. (koji)
+
+* SOLR-2066,SOLR-2776: Added support for distributed grouping.
+ (Martijn van Groningen, Jasper van Veghel, Matt Beaumont)
+
+* SOLR-2769: Added factory for the new Hunspell stemmer capable of doing stemming
+ for 99 languages (janhoy, cmale)
+
+* SOLR-1979: New contrib "langid". Adds language identification capabilities as an
+ Update Processor, using Tika's LanguageIdentifier or Cybozu language-detection
+ library (janhoy, Tommaso Teofili, gsingers)
+
+* SOLR-2818: Added before/after count response parsing support for range facets in
+ SolrJ. (Bernhard Frauendienst via Martijn van Groningen)
+
+* SOLR-2276: Add support for cologne phonetic to PhoneticFilterFactory.
+ (Marc Pompl via rmuir)
+
+* SOLR-1926: Add hl.q parameter. (koji)
+
+* SOLR-2881: Numeric types now support sortMissingFirst/Last. This includes Trie and date types
+ (Ryan McKinley, Mike McCandless, Uwe Schindler, Erick Erickson)
+
+* SOLR-1023: StatsComponent now supports date fields and string fields.
+ (Chris Male, Mark Holland, Gunnlaugur Thor Briem, Ryan McKinley)
+
+* SOLR-2578: ReplicationHandler's backup command now supports a 'numberToKeep'
+ request param that can be used to delete all but the most recent N backups.
+ (James Dyer via hossman)
+
+* SOLR-2839: Add alternative implementation to contrib/langid supporting 53
+ languages, based on http://code.google.com/p/language-detection/ (rmuir)
+
+Optimizations
+----------------------
+
+* SOLR-2742: SolrJ: Provide commitWithinMs as optional parameter for all add() methods,
+ making the feature more conveniently accessible for developers (janhoy)
+
+Bug Fixes
+----------------------
+* SOLR-2748: The CommitTracker used for commitWith or autoCommit by maxTime
+ could commit too frequently and could block adds until a new searcher was
+ registered. (yonik)
+
+* SOLR-2726: Fixed NullPointerException when using spellcheck.q with Suggester.
+ (Bernd Fehling, valentin via rmuir)
+
+* SOLR-2772: Fixed Date parsing/formatting of years 0001-1000 (hossman)
+
+* SOLR-2763: Extracting update request handler throws exception and returns 400
+ when zero-length file posted using multipart form post (janhoy)
+
+* SOLR-2780: Fixed issue where multi select facets didn't respect group.truncate parameter.
+ (Martijn van Groningen, Ramzi Alqrainy)
+
+* SOLR-2793: In rare cases (most likely during shutdown), a SolrIndexSearcher can be left
+ open if the executor rejects a task. (Mark Miller)
+
+* SOLR-2791: Replication: abortfetch command is broken if replication was started
+ by fetchindex command instead of a regular poll (Yury Kats via shalin)
+
+* SOLR-2861: Fix extremely rare race condition on commit that can result
+ in a NPE (yonik)
+
+* SOLR-2813: Fix HTTP error codes returned when requests contain strings that
+ can not be parsed as numbers for Trie fields. (Jeff Crump and hossman)
+
+* SOLR-2902: List of collations are wrong parsed in SpellCheckResponse causing
+ a wrong number of collation results in the response.
+ (Bastiaan Verhoef, James Dyer via Simon Willnauer)
+
+* SOLR-2875: Fix the incorrect url in DIH example tika-data-config.xml
+ (Shinichiro Abe via koji)
+
+Other Changes
+----------------------
+
+* SOLR-2750: Make both "update.chain" and the deprecated "update.param" work
+ consistently everywhere; see also SOLR-2105. (Mark Miller, janhoy)
+
+* LUCENE-3410: Deprecated the WordDelimiterFilter constructors accepting multiple
+ ints masquerading as booleans. Preferred constructor now accepts a single int
+ bitfield (Chris Male)
+
+* SOLR-2758: Moved ConcurrentLRUCache from o.a.s.common.util package in the solrj
+ module to the o.a.s.util package in the Solr core module.
+ (David Smiley via Steve Rowe)
+
+* SOLR-2766: Package individual javadoc sites for solrj and test-framework.
+ (Steve Rowe, Mike McCandless)
+
+* SOLR-2771: Solr modules' tests should not depend on solr-core test classes;
+ move BufferingRequestProcessor from solr-core tests to test-framework so that
+ the Solr Cell module can use it. (janhoy, Steve Rowe)
+
+* LUCENE-3457: Upgrade commons-compress to 1.2 (Doron Cohen)
+
+* SOLR-2757: min() and max() functions now support an arbitrary number of
+ ValueSources (Bill Bell via hossman)
+
+* SOLR-2372: Upgrade Solr to Tika 0.10 (janhoy)
+
+* SOLR-2792: Allow case insensitive Hunspell stemming (janhoy, rmuir)
+
+* SOLR-2862: More explicit lexical resources location logged if Carrot2 clustering
+ extension is used. Fixed solr. impl. of IResource and IResourceLookup. (Dawid Weiss)
+
+* SOLR-2849: Fix dependencies in Maven POMs. (David Smiley via Steve Rowe)
+
+* SOLR-2591: Remove commitLockTimeout option from solrconfig.xml (Luca Cavanna via Martijn van Groningen)
+
+* SOLR-2746: Upgraded UIMA dependencies from *-2.3.1-SNAPSHOT.jar to *-2.3.1.jar.
+
+
+================== 3.4.0 ==================
+
+Upgrading from Solr 3.3
+----------------------
+
+* The Lucene index format has changed and as a result, once you upgrade,
+ previous versions of Solr will no longer be able to read your indices.
+ In a master/slave configuration, all searchers/slaves should be upgraded
+ before the master. If the master were to be updated first, the older
+ searchers would not be able to read the new index format.
+
+* Previous versions of Solr silently allow and ignore some contradictory
+ properties specified in schema.xml. For example:
+ - indexed="false" omitNorms="false"
+ - indexed="false" omitTermFreqAndPositions="false"
+ Field property validation has now been fixed, to ensure that
+ contradictions like these now generate error messages. If users
+ have existing schemas that generate one of these new "conflicting
+ 'false' field options for non-indexed field" error messages the
+ conflicting "omit*" properties can safely be removed, or changed to
+ "true" for consistent behavior with previous Solr versions. This
+ situation has now been fixed to cause an error on startup when these
+ contradictory options. See SOLR-2669.
+
+* FacetComponent no longer catches and embeds exceptions occurred during facet
+ processing, it throws HTTP 400 or 500 exceptions instead.
+
+New Features
+----------------------
+
+* SOLR-2540: CommitWithin as an Update Request parameter
+ You can now specify &commitWithin=N (ms) on the update request (janhoy)
+
+* SOLR-2458: post.jar enhanced to handle JSON, CSV and <optimize> (janhoy)
+
+* LUCENE-3234: add a new parameter hl.phraseLimit for FastVectorHighlighter speed up.
+ (Mike Sokolov via koji)
+
+* SOLR-2429: Ability to add cache=false to queries and query filters to avoid
+ using the filterCache or queryCache. A cost may also be specified and is used
+ to order the evaluation of non-cached filters from least to greatest cost .
+ For very expensive query filters (cost >= 100) if the query implements
+ the PostFilter interface, it will be used to obtain a Collector that is
+ checked only for documents that match the main query and all other filters.
+ The "frange" query now implements the PostFilter interface. (yonik)
+
+* SOLR-2630: Added new XsltUpdateRequestHandler that works like
+ XmlUpdateRequestHandler but allows to transform the POSTed XML document
+ using XSLT. This allows to POST arbitrary XML documents to the update
+ handler, as long as you also provide a XSL to transform them to a valid
+ Solr input document. (Upayavira, Uwe Schindler)
+
+* SOLR-2615: Log individual updates (adds and deletes) at the FINE level
+ before adding to the index. Fix a null pointer exception in logging
+ when there was no unique key. (David Smiley via yonik)
+
+* LUCENE-2048: Added omitPositions to the schema, so you can omit position
+ information while still indexing term frequencies. (rmuir)
+
+* SOLR-2584: add UniqFieldsUpdateProcessor that removes duplicate values in the
+ specified fields. (Elmer Garduno, koji)
+
+* SOLR-2670: Added NIOFSDirectoryFactory (yonik)
+
+* SOLR-2523: Added support in SolrJ to easily interact with range facets.
+ The range facet response can be parsed and is retrievable from the
+ QueryResponse class. The SolrQuery class has convenient methods for using
+ range facets. (Martijn van Groningen)
+
+* SOLR-2637: Added support for group result parsing in SolrJ.
+ (Tao Cheng, Martijn van Groningen)
+
+* SOLR-2665: Added post group faceting. Facet counts are based on the most
+ relevant document of each group matching the query. This feature has the
+ same impact on the StatsComponent. (Martijn van Groningen)
+
+* SOLR-2675: CoreAdminHandler now allows arbitrary properties to be
+ specified when CREATEing a new SolrCore using property.* request
+ params. (Yury Kats, hossman)
+
+* SOLR-2714: JSON update format - "null" field values are now dropped
+ instead of causing an exception. (Trygve Laugstøl, yonik)
+
+
+Optimizations
+----------------------
+
+* LUCENE-3233: Improved memory usage, build time, and performance of
+ SynonymFilterFactory. (Mike McCandless, Robert Muir)
+
+Bug Fixes
+----------------------
+
+* SOLR-2625: TermVectorComponent throws NPE if TF-IDF option is used without DF
+ option. (Daniel Erenrich, Simon Willnauer)
+
+* SOLR-2631: PingRequestHandler should not allow to ping itself using "qt"
+ param to prevent infinite loop. (Edoardo Tosca, Uwe Schindler)
+
+* SOLR-2636: Fix explain functionality for negative queries. (Tom Hill via yonik)
+
+* SOLR-2538: Range Faceting on long/double fields could overflow if values
+ bigger then the max int/float were used.
+ (Erbi Hanka, hossman)
+
+* SOLR-2230: CommonsHttpSolrServer.addFile could not be used to send
+ multiple files in a single request.
+ (Stephan Günther, hossman)
+
+* SOLR-2541: PluginInfos was not correctly parsing <long/> tags when
+ initializing plugins
+ (Frank Wesemann, hossman)
+
+* SOLR-2623: Solr JMX MBeans do not survive core reloads (Alexey Serba, shalin)
+
+* Fixed grouping bug when start is bigger than rows and format is simple that zero documents are returned even
+ if there are documents to display. (Martijn van Groningen, Nikhil Chhaochharia)
+
+* SOLR-2564: Fixed ArrayIndexOutOfBoundsException when using simple format and
+ start > 0 (Martijn van Groningen, Matteo Melli)
+
+* SOLR-2642: Fixed sorting by function when using grouping. (Thomas Heigl, Martijn van Groningen)
+
+* SOLR-2535: REGRESSION: in Solr 3.x and trunk the admin/file handler
+ fails to show directory listings (David Smiley, Peter Wolanin via Erick Erickson)
+
+* SOLR-2545: ExternalFileField file parsing would fail if any key
+ contained an "=" character. It now only looks for the last "=" delimiter
+ prior to the float value.
+ (Markus Jelsma, hossman)
+
+* SOLR-2662: When Solr is configured to have no queryResultCache, the
+ "start" parameter was not honored and the documents returned were
+ 0 through start+offset. (Markus Jelsma, yonik)
+
+* SOLR-2669: Fix backwards validation of field properties in
+ SchemaField.calcProps (hossman)
+
+* SOLR-2676: Add "welcome-file-list" to solr.war so admin UI works correctly
+ in servlet containers such as WebSphere that do not use a default list
+ (Jay R. Jaeger, hossman)
+
+* SOLR-2606: Fixed sort parsing of fields containing punctuation that
+ failed due to sort by function changes introduced in SOLR-1297
+ (Mitsu Hadeishi, hossman)
+
+* SOLR-2706: contrib/clustering: The carrot.lexicalResourcesDir parameter
+ now works with absolute directories (Stanislaw Osinski)
+
+* SOLR-2692: contrib/clustering: Typo in param name fixed: "carrot.fragzise"
+ changed to "carrot.fragSize" (Stanislaw Osinski).
+
+* SOLR-2644: When using DIH with threads=2 the default logging is set too high
+ (Bill Bell via shalin)
+
+* SOLR-2492: DIH does not commit if only deletes are processed
+ (James Dyer via shalin)
+
+* SOLR-2186: DataImportHandler's multi-threaded option throws NPE
+ (Lance Norskog, Frank Wesemann, shalin)
+
+* SOLR-2655: DIH multi threaded mode does not resolve attributes correctly
+ (Frank Wesemann, shalin)
+
+* SOLR-2695: DIH: Documents are collected in unsynchronized list in
+ multi-threaded debug mode (Michael McCandless, shalin)
+
+* SOLR-2668: DIH multithreaded mode does not rollback on errors from
+ EntityProcessor (Frank Wesemann, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-2629: Eliminate deprecation warnings in some JSPs.
+ (Bernd Fehling, hossman)
+
+* SOLR-2743: Remove commons logging from contrib/extraction. (koji)
+
+
+Build
+----------------------
+
+* SOLR-2452,SOLR-2653,LUCENE-3323,SOLR-2659,LUCENE-3329,SOLR-2666:
+ Rewrote the Solr build system:
+ - Integrated more fully with the Lucene build system: generalized the
+ Lucene build system and eliminated duplication.
+ - Converted all Solr contribs to the Lucene/Solr conventional src/ layout:
+ java/, resources/, test/, and test-files/<contrib-name>.
+ - Created a new Solr-internal module named "core" by moving the java/,
+ test/, and test-files/ directories from solr/src/ to solr/core/src/.
+ - Merged solr/src/webapp/src/ into solr/core/src/java/.
+ - Eliminated solr/src/ by moving all its directories up one level;
+ renamed solr/src/site/ to solr/site-src/ because solr/site/ already
+ exists.
+ - Merged solr/src/common/ into solr/solrj/src/java/.
+ - Moved o.a.s.client.solrj.* and o.a.s.common.* tests from
+ solr/src/test/ to solr/solrj/src/test/.
+ - Made the solrj tests not depend on the solr core tests by moving
+ some classes from solr/src/test/ to solr/test-framework/src/java/.
+ - Each internal module (core/, solrj/, test-framework/, and webapp/)
+ now has its own build.xml, from which it is possible to run
+ module-specific targets. solr/build.xml delegates all build
+ tasks (via <ant dir="internal-module-dir"> calls) to these
+ modules' build.xml files.
+ (Steve Rowe, Robert Muir)
+
+* LUCENE-3406: Add ant target 'package-local-src-tgz' to Lucene and Solr
+ to package sources from the local working copy.
+ (Seung-Yeoul Yang via Steve Rowe)
+
+Documentation
+----------------------
+
+================== 3.3.0 ==================
+
+Upgrading from Solr 3.2.0
+----------------------
+ * SolrCore's CloseHook API has been changed in a backward-incompatible way. It
+ has been changed from an interface to an abstract class. Any custom
+ components which use the SolrCore.addCloseHook method will need to
+ be modified accordingly. To migrate, put your old CloseHook#close impl into
+ CloseHook#preClose.
+
+New Features
+----------------------
+
+* SOLR-2378: A new, automaton-based, implementation of suggest (autocomplete)
+ component, offering an order of magnitude smaller memory consumption
+ compared to ternary trees and jaspell and very fast lookups at runtime.
+ (Dawid Weiss)
+
+* SOLR-2400: Field- and DocumentAnalysisRequestHandler now provide a position
+ history for each token, so you can follow the token through all analysis stages.
+ The output contains a separate int[] attribute containing all positions from
+ previous Tokenizers/TokenFilters (called "positionHistory").
+ (Uwe Schindler)
+
+* SOLR-2524: (SOLR-236, SOLR-237, SOLR-1773, SOLR-1311) Grouping / Field collapsing
+ using the Lucene grouping contrib. The search result can be grouped by field and query.
+ (Martijn van Groningen, Emmanuel Keller, Shalin Shekhar Mangar, Koji Sekiguchi,
+ Iván de Prado, Ryan McKinley, Marc Sturlese, Peter Karich, Bojan Smid,
+ Charles Hornberger, Dieter Grad, Dmitry Lihachev, Doug Steigerwald,
+ Karsten Sperling, Michael Gundlach, Oleg Gnatovskiy, Thomas Traeger,
+ Harish Agarwal, yonik, Michael McCandless, Bill Bell)
+
+* SOLR-1331 -- Added a srcCore parameter to CoreAdminHandler's mergeindexes action
+ to merge one or more cores' indexes to a target core (shalin)
+
+* SOLR-2610 -- Add an option to delete index through CoreAdmin UNLOAD action (shalin)
+
+* SOLR-2480: Add ignoreTikaException flag to the extraction request handler so
+ that users can ignore TikaException but index meta data.
+ (Shinichiro Abe, koji)
+
+* SOLR-2582: Use uniqueKey for error log in UIMAUpdateRequestProcessor.
+ (Tommaso Teofili via koji)
+
+Optimizations
+----------------------
+
+* SOLR-2567: Solr now defaults to TieredMergePolicy. See http://s.apache.org/merging
+ for more information. (rmuir)
+
+Bug Fixes
+----------------------
+
+* SOLR-2519: Improve text_* fieldTypes in example schema.xml: improve
+ cross-language defaults for text_general; break out separate
+ English-specific fieldTypes (Jan Høydahl, hossman, Robert Muir,
+ yonik, Mike McCandless)
+
+* SOLR-2462: Fix extremely high memory usage problems with spellcheck.collate.
+ Separately, an additional spellcheck.maxCollationEvaluations (default=10000)
+ parameter is added to avoid excessive CPU time in extreme cases (e.g. long
+ queries with many misspelled words). (James Dyer via rmuir)
+
+* SOLR-2579: UIMAUpdateRequestProcessor ignore error fails if text.length() < 100.
+ (Elmer Garduno via koji)
+
+* SOLR-2581: UIMAToSolrMapper wrongly instantiates Type with reflection.
+ (Tommaso Teofili via koji)
+
+* SOLR-2551: Check dataimport.properties for write access (if delta-import is
+ supported in DIH configuration) before starting an import (C S, shalin)
+
+Other Changes
+----------------------
+
+* SOLR-2571: Add a commented out example of the spellchecker's thresholdTokenFrequency
+ parameter to the example solrconfig.xml, and also add a unit test for this feature.
+ (James Dyer via rmuir)
+
+* SOLR-2576: Deprecate SpellingResult.add(Token token, int docFreq), please use
+ SpellingResult.addFrequency(Token token, int docFreq) instead.
+ (James Dyer via rmuir)
+
+* SOLR-2574: Upgrade slf4j to v1.6.1 (shalin)
+
+* LUCENE-3204: The maven-ant-tasks jar is now included in the source tree;
+ users of the generate-maven-artifacts target no longer have to manually
+ place this jar in the Ant classpath. NOTE: when Ant looks for the
+ maven-ant-tasks jar, it looks first in its pre-existing classpath, so
+ any copies it finds will be used instead of the copy included in the
+ Lucene/Solr source tree. For this reason, it is recommeded to remove
+ any copies of the maven-ant-tasks jar in the Ant classpath, e.g. under
+ ~/.ant/lib/ or under the Ant installation's lib/ directory. (Steve Rowe)
+
+* SOLR-2611: Fix typos in the example configuration (Eric Pugh via rmuir)
+
+================== 3.2.0 ==================
+Versions of Major Components
+---------------------
+Apache Lucene trunk
+Apache Tika 0.8
+Carrot2 3.4.2
+
+
+Upgrading from Solr 3.1
+----------------------
+
+* The updateRequestProcessorChain for a RequestHandler is now defined
+ with update.chain rather than update.processor. The latter still works,
+ but has been deprecated.
+
+* <uimaConfig/> just beneath <config> ... </config> is no longer supported.
+ It should move to UIMAUpdateRequestProcessorFactory setting.
+ See contrib/uima/README.txt for more details. (SOLR-2436)
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-2496: Add ability to specify overwrite and commitWithin as request
+ parameters (e.g. specified in the URL) when using the JSON update format,
+ and added a simplified format for specifying multiple documents.
+ Example: [{"id":"doc1"},{"id":"doc2"}]
+ (yonik)
+
+* SOLR-2113: Add TermQParserPlugin, registered as "term". This is useful
+ when generating filter queries from terms returned from field faceting or
+ the terms component. Example: fq={!term f=weight}1.5 (hossman, yonik)
+
+* SOLR-1915: DebugComponent now supports using a NamedList to model
+ Explanation objects in its responses instead of
+ Explanation.toString (hossman)
+
+* SOLR-2448: Search results clustering updates: bisecting k-means
+ clustering algorithm added, loading of Carrot2 stop words from
+ <solr.home>/conf/carrot2 (SOLR-2449), using Solr's stopwords.txt
+ for clustering (SOLR-2450), output of cluster scores (SOLR-2505)
+ (Stanislaw Osinski, Dawid Weiss).
+
+* SOLR-2503: extend UIMAUpdateRequestProcessorFactory mapping function to
+ map feature value to dynamicField. (koji)
+
+* SOLR-2512: add ignoreErrors flag to UIMAUpdateRequestProcessorFactory so
+ that users can ignore exceptions in AE. (Tommaso Teofili, koji)
+
+Optimizations
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-2445: Change the default qt to blank in form.jsp, because there is no "standard"
+ request handler unless you have it in your solrconfig.xml explicitly. (koji)
+
+* SOLR-2455: Prevent double submit of forms in admin interface.
+ (Jeffrey Chang via uschindler)
+
+* SOLR-2464: Fix potential slowness in QueryValueSource (the query() function) when
+ the query is very sparse and may not match any documents in a segment. (yonik)
+
+* SOLR-2469: When using java replication with replicateAfter=startup, the first
+ commit point on server startup is never removed. (yonik)
+
+* SOLR-2466: SolrJ's CommonsHttpSolrServer would retry requests on failure, regardless
+ of the configured maxRetries, due to HttpClient having its own retry mechanism
+ by default. The retryCount of HttpClient is now set to 0, and SolrJ does
+ the retry. (yonik)
+
+* SOLR-2409: edismax parser - treat the text of a fielded query as a literal if the
+ fieldname does not exist. For example Mission: Impossible should not search on
+ the "Mission" field unless it's a valid field in the schema. (Ryan McKinley, yonik)
+
+* SOLR-2403: facet.sort=index reported incorrect results for distributed search
+ in a number of scenarios when facet.mincount>0. This patch also adds some
+ performance/algorithmic improvements when (facet.sort=count && facet.mincount=1
+ && facet.limit=-1) and when (facet.sort=index && facet.mincount>0) (yonik)
+
+* SOLR-2333: The "rename" core admin action does not persist the new name to solr.xml
+ (Rasmus Hahn, Paul R. Brown via Mark Miller)
+
+* SOLR-2390: Performance of usePhraseHighlighter is terrible on very large Documents,
+ regardless of hl.maxDocCharsToAnalyze. (Mark Miller)
+
+* SOLR-2474: The helper TokenStreams in analysis.jsp and AnalysisRequestHandlerBase
+ did not clear all attributes so they displayed incorrect attribute values for tokens
+ in later filter stages. (uschindler, rmuir, yonik)
+
+* SOLR-2467: Fix <analyzer class="..." /> initialization so any errors
+ are logged properly. (hossman)
+
+* SOLR-2493: SolrQueryParser was fixed to not parse the SolrConfig DOM tree on each
+ instantiation which is a huge slowdown. (Stephane Bailliez via uschindler)
+
+* SOLR-2495: The JSON parser could hang on corrupted input and could fail
+ to detect numbers that were too large to fit in a long. (yonik)
+
+* SOLR-2520: Make JSON response format escape \u2029 as well as \u2028
+ in strings since those characters are not valid in javascript strings
+ (although they are valid in JSON strings). (yonik)
+
+* SOLR-2536: Add ReloadCacheRequestHandler to fix ExternalFileField bug (if reopenReaders
+ set to true and no index segments have been changed, commit cannot trigger reload
+ external file). (koji)
+
+* SOLR-2539: VectorValueSource.floatVal incorrectly used byteVal on sub-sources.
+ (Tom Liu via yonik)
+
+* SOLR-2554: RandomSortField didn't work when used in a function query. (yonik)
+
+
+Other Changes
+----------------------
+
+* SOLR-2061: Pull base tests out into a new Solr Test Framework module,
+ and publish binary, javadoc, and source test-framework jars.
+ (Drew Farris, Robert Muir, Steve Rowe)
+
+* SOLR-2105: Rename RequestHandler param 'update.processor' to 'update.chain'.
+ (Jan Høydahl via Mark Miller)
+
+* SOLR-2485: Deprecate BaseResponseWriter, GenericBinaryResponseWriter, and
+ GenericTextResponseWriter. These classes will be removed in 4.0. (ryan)
+
+* SOLR-2451: Enhance assertJQ to allow individual tests to specify the
+ tolerance delta used in numeric equalities. This allows for slight
+ variance in asserting score comparisons in unit tests.
+ (David Smiley, Chris Hostetter)
+
+* SOLR-2528: Remove default="true" from HtmlEncoder in example solrconfig.xml,
+ because html encoding confuses non-ascii users. (koji)
+
+* SOLR-2387: add mock annotators for improved testing in contrib/uima,
+ (Tommaso Teofili via rmuir)
+
+* SOLR-2436: move uimaConfig to under the uima's update processor in
+ solrconfig.xml. (Tommaso Teofili, koji)
+
+Build
+----------------------
+
+* LUCENE-3006: Building javadocs will fail on warnings by default. Override with -Dfailonjavadocwarning=false (sarowe, gsingers)
+
+
+Documentation
+----------------------
+
+
+================== 3.1.0 ==================
+Versions of Major Components
+---------------------
+Apache Lucene 3.1.0
+Apache Tika 0.8
+Carrot2 3.4.2
+Velocity 1.6.1 and Velocity Tools 2.0-beta3
+Apache UIMA 2.3.1-SNAPSHOT
+
+
+Upgrading from Solr 1.4
+----------------------
+
+* The Lucene index format has changed and as a result, once you upgrade,
+ previous versions of Solr will no longer be able to read your indices.
+ In a master/slave configuration, all searchers/slaves should be upgraded
+ before the master. If the master were to be updated first, the older
+ searchers would not be able to read the new index format.
+
+* The Solr JavaBin format has changed as of Solr 3.1. If you are using the
+ JavaBin format, you will need to upgrade your SolrJ client. (SOLR-2034)
+
+* The experimental ALIAS command has been removed (SOLR-1637)
+
+* Using solr.xml is recommended for single cores also (SOLR-1621)
+
+* Old syntax of <highlighting> configuration in solrconfig.xml
+ is deprecated (SOLR-1696)
+
+* The deprecated HTMLStripReader, HTMLStripWhitespaceTokenizerFactory and
+ HTMLStripStandardTokenizerFactory were removed. To strip HTML tags,
+ HTMLStripCharFilter should be used instead, and it works with any
+ Tokenizer of your choice. (SOLR-1657)
+
+* Field compression is no longer supported. Fields that were formerly
+ compressed will be uncompressed as index segments are merged. For
+ shorter fields, this may actually be an improvement, as the compression
+ used was not very good for short text. Some indexes may get larger though.
+
+* SOLR-1845: The TermsComponent response format was changed so that the
+ "terms" container is a map instead of a named list. This affects
+ response formats like JSON, but not XML. (yonik)
+
+* SOLR-1876: All Analyzers and TokenStreams are now final to enforce
+ the decorator pattern. (rmuir, uschindler)
+
+* LUCENE-2608: Added the ability to specify the accuracy on a per request basis.
+ It is recommended that implementations of SolrSpellChecker should change over to the new SolrSpellChecker
+ methods using the new SpellingOptions class, but are not required to. While this change is
+ backward compatible, the trunk version of Solr has already dropped support for all but the SpellingOptions method. (gsingers)
+
+* readercycle script was removed. (SOLR-2046)
+
+* In previous releases, sorting or evaluating function queries on
+ fields that were "multiValued" (either by explicit declaration in
+ schema.xml or by implict behavior because the "version" attribute on
+ the schema was less then 1.2) did not generally work, but it would
+ sometimes silently act as if it succeeded and order the docs
+ arbitrarily. Solr will now fail on any attempt to sort, or apply a
+ function to, multi-valued fields
+
+* The DataImportHandler jars are no longer included in the solr
+ WAR and should be added in Solr's lib directory, or referenced
+ via the <lib> directive in solrconfig.xml.
+
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+* SOLR-1302: Added several new distance based functions, including
+ Great Circle (haversine), Manhattan, Euclidean and String (using the
+ StringDistance methods in the Lucene spellchecker).
+ Also added geohash(), deg() and rad() convenience functions.
+ See http://wiki.apache.org/solr/FunctionQuery. (gsingers)
+
+* SOLR-1553: New dismax parser implementation (accessible as "edismax")
+ that supports full lucene syntax, improved reserved char escaping,
+ fielded queries, improved proximity boosting, and improved stopword
+ handling. Note: status is experimental for now. (yonik)
+
+* SOLR-1574: Add many new functions from java Math (e.g. sin, cos) (yonik)
+
+* SOLR-1569: Allow functions to take in literal strings by modifying the
+ FunctionQParser and adding LiteralValueSource (gsingers)
+
+* SOLR-1571: Added unicode collation support though Lucene's CollationKeyFilter
+ (Robert Muir via shalin)
+
+* SOLR-785: Distributed Search support for SpellCheckComponent
+ (Matthew Woytowitz, shalin)
+
+* SOLR-1625: Add regexp support for TermsComponent (Uri Boness via noble)
+
+* SOLR-1297: Add sort by Function capability (gsingers, yonik)
+
+* SOLR-1139: Add TermsComponent Query and Response Support in SolrJ (Matt Weber via shalin)
+
+* SOLR-1177: Distributed Search support for TermsComponent (Matt Weber via shalin)
+
+* SOLR-1621, SOLR-1722: Allow current single core deployments to be specified by solr.xml (Mark Miller , noble)
+
+* SOLR-1532: Allow StreamingUpdateSolrServer to use a provided HttpClient (Gabriele Renzi via shalin)
+
+* SOLR-1653: Add PatternReplaceCharFilter (koji)
+
+* SOLR-1131: FieldTypes can now output multiple Fields per Type and still be searched. This can be handy for hiding the details of a particular
+ implementation such as in the spatial case. (Chris Mattmann, shalin, noble, gsingers, yonik)
+
+* SOLR-1586: Add support for Geohash and Spatial Tile FieldType (Chris Mattmann, gsingers)
+
+* SOLR-1697: PluginInfo should load plugins w/o class attribute also (noble)
+
+* SOLR-1268: Incorporate FastVectorHighlighter (koji)
+
+* SOLR-1750: SolrInfoMBeanHandler added for simpler programmatic access
+ to info currently available from registry.jsp and stats.jsp
+ (ehatcher, hossman)
+
+* SOLR-1815: SolrJ now preserves the order of facet queries. (yonik)
+
+* SOLR-1677: Add support for choosing the Lucene Version for Lucene components within
+ Solr. (Uwe Schindler, Mark Miller)
+
+* SOLR-1379: Add RAMDirectoryFactory for non-persistent in memory index storage.
+ (Alex Baranov via yonik)
+
+* SOLR-1857: Synced Solr analysis with Lucene 3.1. Added KeywordMarkerFilterFactory
+ and StemmerOverrideFilterFactory, which can be used to tune stemming algorithms.
+ Added factories for Bulgarian, Czech, Hindi, Turkish, and Wikipedia analysis. Improved the
+ performance of SnowballPorterFilterFactory. (rmuir)
+
+* SOLR-1657: Converted remaining TokenStreams to the Attributes-based API. All Solr
+ TokenFilters now support custom Attributes, and some have improved performance:
+ especially WordDelimiterFilter and CommonGramsFilter. (rmuir, cmale, uschindler)
+
+* SOLR-1740: ShingleFilterFactory supports the "minShingleSize" and "tokenSeparator"
+ parameters for controlling the minimum shingle size produced by the filter, and
+ the separator string that it uses, respectively. (Steven Rowe via rmuir)
+
+* SOLR-744: ShingleFilterFactory supports the "outputUnigramsIfNoShingles"
+ parameter, to output unigrams if the number of input tokens is fewer than
+ minShingleSize, and no shingles can be generated.
+ (Chris Harris via Steven Rowe)
+
+* SOLR-1923: PhoneticFilterFactory now has support for the
+ Caverphone algorithm. (rmuir)
+
+* SOLR-1957: The VelocityResponseWriter contrib moved to core.
+ Example search UI now available at http://localhost:8983/solr/browse
+ (ehatcher)
+
+* SOLR-1974: Add LimitTokenCountFilterFactory. (koji)
+
+* SOLR-1966: QueryElevationComponent can now return just the included results in the elevation file (gsingers, yonik)
+
+* SOLR-1556: TermVectorComponent now supports per field overrides. Also, it now throws an error
+ if passed in fields do not exist and warnings
+ if fields that do not have term vector options (termVectors, offsets, positions)
+ that align with the schema declaration. It also
+ will now return warnings about (gsingers)
+
+* SOLR-1985: FastVectorHighlighter: add wrapper class for Lucene's SingleFragListBuilder (koji)
+
+* SOLR-1984: Add HyphenationCompoundWordTokenFilterFactory. (PB via rmuir)
+
+* SOLR-397: Date Faceting now supports a "facet.date.include" param
+ for specifying when the upper & lower end points of computed date
+ ranges should be included in the range. Legal values are: "all",
+ "lower", "upper", "edge", and "outer". For backwards compatibility
+ the default value is the set: [lower,upper,edge], so that all ranges
+ between start and end are inclusive of their endpoints, but the
+ "before" and "after" ranges are not.
+
+* SOLR-945: JSON update handler that accepts add, delete, commit
+ commands in JSON format. (Ryan McKinley, yonik)
+
+* SOLR-2015: Add a boolean attribute autoGeneratePhraseQueries to TextField.
+ autoGeneratePhraseQueries="true" (the default) causes the query parser to
+ generate phrase queries if multiple tokens are generated from a single
+ non-quoted analysis string. For example WordDelimiterFilter splitting text:pdp-11
+ will cause the parser to generate text:"pdp 11" rather than (text:PDP OR text:11).
+ Note that autoGeneratePhraseQueries="true" tends to not work well for non whitespace
+ delimited languages. (yonik)
+
+* SOLR-1925: Add CSVResponseWriter (use wt=csv) that returns the list of documents
+ in CSV format. (Chris Mattmann, yonik)
+
+* SOLR-1240: "Range Faceting" has been added. This is a generalization
+ of the existing "Date Faceting" logic so that it now supports any
+ all stock numeric field types that support range queries in addition
+ to dates. facet.date is now deprecated in favor of this generalized mechanism.
+ (Gijs Kunze, hossman)
+
+* SOLR-2021: Add SolrEncoder plugin to Highlighter. (koji)
+
+* SOLR-2030: Make FastVectorHighlighter use of SolrEncoder. (koji)
+
+* SOLR-2053: Add support for custom comparators in Solr spellchecker, per LUCENE-2479 (gsingers)
+
+* SOLR-2049: Add hl.multiValuedSeparatorChar for FastVectorHighlighter, per LUCENE-2603. (koji)
+
+* SOLR-2059: Add "types" attribute to WordDelimiterFilterFactory, which
+ allows you to customize how WordDelimiterFilter tokenizes text with
+ a configuration file. (Peter Karich, rmuir)
+
+* SOLR-2099: Add ability to throttle rsync based replication using rsync option --bwlimit.
+ (Brandon Evans via koji)
+
+* SOLR-1316: Create autosuggest component.
+ (Ankul Garg, Jason Rutherglen, Shalin Shekhar Mangar, Grant Ingersoll, Robert Muir, ab)
+
+* SOLR-1568: Added "native" filtering support for PointType, GeohashField. Added LatLonType with filtering support too. See
+ http://wiki.apache.org/solr/SpatialSearch and the example. Refactored some items in Lucene spatial.
+ Removed SpatialTileField as the underlying CartesianTier is broken beyond repair and is going to be moved. (gsingers)
+
+* SOLR-2128: Full parameter substitution for function queries.
+ Example: q=add($v1,$v2)&v1=mul(popularity,5)&v2=20.0
+ (yonik)
+
+* SOLR-2133: Function query parser can now parse multiple comma separated
+ value sources. It also now fails if there is extra unexpected text
+ after parsing the functions, instead of silently ignoring it.
+ This allows expressions like q=dist(2,vector(1,2),$pt)&pt=3,4 (yonik)
+
+* SOLR-2157: Suggester should return alpha-sorted results when onlyMorePopular=false (ab)
+
+* SOLR-2010: Added ability to verify that spell checking collations have
+ actual results in the index. (James Dyer via gsingers)
+
+* SOLR-2188: Added "maxTokenLength" argument to the factories for ClassicTokenizer,
+ StandardTokenizer, and UAX29URLEmailTokenizer. (Steven Rowe)
+
+* SOLR-2129: Added a Solr module for dynamic metadata extraction/indexing with Apache UIMA.
+ See contrib/uima/README.txt for more information. (Tommaso Teofili via rmuir)
+
+* SOLR-2325: Allow tagging and exclusion of main query for faceting. (yonik)
+
+* SOLR-2263: Add ability for RawResponseWriter to stream binary files as well as
+ text files. (Eric Pugh via yonik)
+
+* SOLR-860: Add debug output for MoreLikeThis. (koji)
+
+* SOLR-1057: Add PathHierarchyTokenizerFactory. (ryan, koji)
+
+* SOLR-1804: Re-enabled clustering component on trunk, updated to latest
+ version of Carrot2. No more LGPL run-time dependencies. This release of
+ C2 also does not have a specific Lucene dependency.
+ (Stanislaw Osinski, gsingers)
+
+* SOLR-2282: Add distributed search support for search result clustering.
+ (Brad Giaccio, Dawid Weiss, Stanislaw Osinski, rmuir, koji)
+
+* SOLR-2210: Add icu-based tokenizer and filters to contrib/analysis-extras (rmuir)
+
+* SOLR-1336: Add SmartChinese (word segmentation for Simplified Chinese)
+ tokenizer and filters to contrib/analysis-extras (rmuir)
+
+* SOLR-2211,LUCENE-2763: Added UAX29URLEmailTokenizerFactory, which implements
+ UAX#29, a unicode algorithm with good results for most languages, as well as
+ URL and E-mail tokenization according to the relevant RFCs.
+ (Tom Burton-West via rmuir)
+
+* SOLR-2237: Added StempelPolishStemFilterFactory to contrib/analysis-extras (rmuir)
+
+* SOLR-1525: allow DIH to refer to core properties (noble)
+
+* SOLR-1547: DIH TemplateTransformer copy objects more intelligently when the
+ template is a single variable (noble)
+
+* SOLR-1627: DIH VariableResolver should be fetched just in time (noble)
+
+* SOLR-1583: DIH Create DataSources that return InputStream (noble)
+
+* SOLR-1358: Integration of Tika and DataImportHandler (Akshay Ukey, noble)
+
+* SOLR-1654: TikaEntityProcessor example added DIHExample
+ (Akshay Ukey via noble)
+
+* SOLR-1678: Move onError handling to DIH framework (noble)
+
+* SOLR-1352: Multi-threaded implementation of DIH (noble)
+
+* SOLR-1721: Add explicit option to run DataImportHandler in synchronous mode
+ (Alexey Serba via noble)
+
+* SOLR-1737: Added FieldStreamDataSource (noble)
+
+
+Optimizations
+----------------------
+
+* SOLR-1679: Don't build up string messages in SolrCore.execute unless they
+ are necessary for the current log level.
+ (Fuad Efendi and hossman)
+
+* SOLR-1874: Optimize PatternReplaceFilter for better performance. (rmuir, uschindler)
+
+* SOLR-1968: speed up initial filter cache population for facet.method=enum and
+ also big terms for multi-valued facet.method=fc. The resulting speedup
+ for the first facet request is anywhere from 30% to 32x, depending on how many
+ terms are in the field and how many documents match per term. (yonik)
+
+* SOLR-2089: Speed up UnInvertedField faceting (facet.method=fc for
+ multi-valued fields) when facet.limit is both high, and a high enough
+ percentage of the number of unique terms in the field. Extreme cases
+ yield speedups over 3x. (yonik)
+
+* SOLR-2046: add common functions to scripts-util. (koji)
+
+* SOLR-1684: Switch clustering component to use the
+ SolrIndexSearcher.doc(int, Set<String>) method b/c it can use the document
+ cache (gsingers)
+
+* SOLR-2200: Improve the performance of DataImportHandler for large
+ delta-import updates. (Mark Waddle via rmuir)
+
+Bug Fixes
+----------------------
+* SOLR-1769: Solr 1.4 Replication - Repeater throwing NullPointerException (Jörgen Rydenius via noble)
+
+* SOLR-1432: Make the new ValueSource.getValues(context,reader) delegate
+ to the original ValueSource.getValues(reader) so custom sources
+ will work. (yonik)
+
+* SOLR-1572: FastLRUCache correctly implemented the LRU policy only
+ for the first 2B accesses. (yonik)
+
+* SOLR-1582: copyField was ignored for BinaryField types (gsingers)
+
+* SOLR-1563: Binary fields, including trie-based numeric fields, caused null
+ pointer exceptions in the luke request handler. (yonik)
+
+* SOLR-1577: The example solrconfig.xml defaulted to a solr data dir
+ relative to the current working directory, even if a different solr home
+ was being used. The new behavior changes the default to a zero length
+ string, which is treated the same as if no dataDir had been specified,
+ hence the "data" directory under the solr home will be used. (yonik)
+
+* SOLR-1584: SolrJ - SolrQuery.setIncludeScore() incorrectly added
+ fl=score to the parameter list instead of appending score to the
+ existing field list. (yonik)
+
+* SOLR-1580: Solr Configuration ignores 'mergeFactor' parameter, always
+ uses Lucene default. (Lance Norskog via Mark Miller)
+
+* SOLR-1593: ReverseWildcardFilter didn't work for surrogate pairs
+ (i.e. code points outside of the BMP), resulting in incorrect
+ matching. This change requires reindexing for any content with
+ such characters. (Robert Muir, yonik)
+
+* SOLR-1596: A rollback operation followed by the shutdown of Solr
+ or the close of a core resulted in a warning:
+ "SEVERE: SolrIndexWriter was not closed prior to finalize()" although
+ there were no other consequences. (yonik)
+
+* SOLR-1595: StreamingUpdateSolrServer used the platform default character
+ set when streaming updates, rather than using UTF-8 as the HTTP headers
+ indicated, leading to an encoding mismatch. (hossman, yonik)
+
+* SOLR-1587: A distributed search request with fl=score, didn't match
+ the behavior of a non-distributed request since it only returned
+ the id,score fields instead of all fields in addition to score. (yonik)
+
+* SOLR-1601: Schema browser does not indicate presence of charFilter. (koji)
+
+* SOLR-1615: Backslash escaping did not work in quoted strings
+ for local param arguments. (Wojtek Piaseczny, yonik)
+
+* SOLR-1628: log contains incorrect number of adds and deletes.
+ (Thijs Vonk via yonik)
+
+* SOLR-343: Date faceting now respects facet.mincount limiting
+ (Uri Boness, Raiko Eckstein via hossman)
+
+* SOLR-1624: Highlighter only highlights values from the first field value
+ in a multivalued field when term positions (term vectors) are stored.
+ (Chris Harris via yonik)
+
+* SOLR-1635: Fixed error message when numeric values can't be parsed by
+ DOMUtils - notably for plugin init params in solrconfig.xml.
+ (hossman)
+
+* SOLR-1651: Fixed Incorrect dataimport handler package name in SolrResourceLoader
+ (Akshay Ukey via shalin)
+
+* SOLR-1660: CapitalizationFilter crashes if you use the maxWordCountOption
+ (Robert Muir via shalin)
+
+* SOLR-1667: PatternTokenizer does not reset attributes such as positionIncrementGap
+ (Robert Muir via shalin)
+
+* SOLR-1711: SolrJ - StreamingUpdateSolrServer had a race condition that
+ could halt the streaming of documents. The original patch to fix this
+ (never officially released) introduced another hanging bug due to
+ connections not being released.
+ (Attila Babo, Erik Hetzner, Johannes Tuchscherer via yonik)
+
+* SOLR-1748, SOLR-1747, SOLR-1746, SOLR-1745, SOLR-1744: Streams and Readers
+ retrieved from ContentStreams are not closed in various places, resulting
+ in file descriptor leaks.
+ (Christoff Brill, Mark Miller)
+
+* SOLR-1753: StatsComponent throws NPE when getting statistics for facets in distributed search
+ (Janne Majaranta via koji)
+
+* SOLR-1736:In the slave , If 'mov'ing file does not succeed , copy the file (noble)
+
+* SOLR-1579: Fixes to XML escaping in stats.jsp
+ (David Bowen and hossman)
+
+* SOLR-1777: fieldTypes with sortMissingLast=true or sortMissingFirst=true can
+ result in incorrectly sorted results. (yonik)
+
+* SOLR-1798: Small memory leak (~100 bytes) in fastLRUCache for every
+ commit. (yonik)
+
+* SOLR-1823: Fixed XMLResponseWriter (via XMLWriter) so it no longer throws
+ a ClassCastException when a Map containing a non-String key is used.
+ (Frank Wesemann, hossman)
+
+* SOLR-1797: fix ConcurrentModificationException and potential memory
+ leaks in ResourceLoader. (yonik)
+
+* SOLR-1850: change KeepWordFilter so a new word set is not created for
+ each instance (John Wang via yonik)
+
+* SOLR-1706: fixed WordDelimiterFilter for certain combinations of options
+ where it would output incorrect tokens. (Robert Muir, Chris Male)
+
+* SOLR-1936: The JSON response format needed to escape unicode code point
+ U+2028 - 'LINE SEPARATOR' (Robert Hofstra, yonik)
+
+* SOLR-1914: Change the JSON response format to output float/double
+ values of NaN,Infinity,-Infinity as strings. (yonik)
+
+* SOLR-1948: PatternTokenizerFactory should use parent's args (koji)
+
+* SOLR-1870: Indexing documents using the 'javabin' format no longer
+ fails with a ClassCastException whenSolrInputDocuments contain field
+ values which are Collections or other classes that implement
+ Iterable. (noble, hossman)
+
+* SOLR-1981: Solr will now fail correctly if solr.xml attempts to
+ specify multiple cores that have the same name (hossman)
+
+* SOLR-1791: Fix messed up core names on admin gui (yonik via koji)
+
+* SOLR-1995: Change date format from "hour in am/pm" to "hour in day"
+ in CoreContainer and SnapShooter. (Hayato Ito, koji)
+
+* SOLR-2008: avoid possible RejectedExecutionException w/autoCommit
+ by making SolreCore close the UpdateHandler before closing the
+ SearchExecutor. (NarasimhaRaju, hossman)
+
+* SOLR-2036: Avoid expensive fieldCache ram estimation for the
+ admin stats page. (yonik)
+
+* SOLR-2047: ReplicationHandler should accept bool type for enable flag. (koji)
+
+* SOLR-1630: Fix spell checking collation issue related to token positions (rmuir, gsingers)
+
+* SOLR-2100: The replication handler backup command didn't save the commit
+ point and hence could fail when a newer commit caused the older commit point
+ to be removed before it was finished being copied. This did not affect
+ normal master/slave replication. (Peter Sturge via yonik)
+
+* SOLR-2114: Fixed parsing error in hsin function. The function signature has changed slightly. (gsingers)
+
+* SOLR-2083: SpellCheckComponent misreports suggestions when distributed (James Dyer via gsingers)
+
+* SOLR-2111: Change exception handling in distributed faceting to work more
+ like non-distributed faceting, change facet_counts/exception from a String
+ to a List<String> to enable listing all exceptions that happened, and
+ prevent an exception in one facet command from affecting another
+ facet command. (yonik)
+
+* SOLR-2110: Remove the restriction on names for local params
+ substitution/dereferencing. Properly encode local params in
+ distributed faceting. (yonik)
+
+* SOLR-2135: Fix behavior of ConcurrentLRUCache when asking for
+ getLatestAccessedItems(0) or getOldestAccessedItems(0).
+ (David Smiley via hossman)
+
+* SOLR-2148: Highlighter doesn't support q.alt. (koji)
+
+* SOLR-2180: It was possible for EmbeddedSolrServer to leave searchers
+ open if a request threw an exception. (yonik)
+
+* SOLR-2173: Suggester should always rebuild Lookup data if Lookup.load fails. (ab)
+
+* SOLR-2081: BaseResponseWriter.isStreamingDocs causes
+ SingleResponseWriter.end to be called 2x
+ (Chris A. Mattmann via hossman)
+
+* SOLR-2219: The init() method of every SolrRequestHandler was being
+ called twice. (ambikeshwar singh and hossman)
+
+* SOLR-2285: duplicate SolrEventListeners no longer created (hossman)
+
+* SOLR-1993: fix String cast assumption in JavaBinCodec - specific
+ addresses "commitWithin" option on Update requests.
+ (noble, hossman, and Maxim Valyanskiy)
+
+* SOLR-2261: fix velocity template layout.vm that referred to an older
+ version of jquery. (Eric Pugh via rmuir)
+
+* SOLR-2307: fix bug in PHPSerializedResponseWriter (wt=phps) when
+ dealing with SolrDocumentList objects -- ie: sharded queries.
+ (Antonio Verni via hossman)
+
+* SOLR-2127: Fixed serialization of default core and indentation of solr.xml when serializing.
+ (Ephraim Ofir, Mark Miller)
+
+* SOLR-2320: Fixed ReplicationHandler detail reporting for masters
+ (hossman)
+
+* SOLR-482: Provide more exception handling in CSVLoader (gsingers)
+
+* SOLR-1283: HTMLStripCharFilter sometimes threw a "Mark Invalid" exception.
+ (Julien Coloos, hossman, yonik)
+
+* SOLR-2085: Improve SolrJ behavior when FacetComponent comes before
+ QueryComponent (Tomas Salfischberger via hossman)
+
+* SOLR-1940: Fix SolrDispatchFilter behavior when Content-Type is
+ unknown (Lance Norskog and hossman)
+
+* SOLR-1983: snappuller fails when modifiedConfFiles is not empty and
+ full copy of index is needed. (Alexander Kanarsky via yonik)
+
+* SOLR-2156: SnapPuller fails to clean Old Index Directories on Full Copy
+ (Jayendra Patil via yonik)
+
+* SOLR-96: Fix XML parsing in XMLUpdateRequestHandler and
+ DocumentAnalysisRequestHandler to respect charset from XML file and only
+ use HTTP header's "Content-Type" as a "hint". (uschindler)
+
+* SOLR-2339: Fix sorting to explicitly generate an error if you
+ attempt to sort on a multiValued field. (hossman)
+
+* SOLR-2348: Fix field types to explicitly generate an error if you
+ attempt to get a ValueSource for a multiValued field. (hossman)
+
+* SOLR-2380: Distributed faceting could miss values when facet.sort=index
+ and when facet.offset was greater than 0. (yonik)
+
+* SOLR-1656: XIncludes and other HREFs in XML files loaded by ResourceLoader
+ are fixed to be resolved using the URI standard (RFC 2396). The system
+ identifier is no longer a plain filename with path, it gets initialized
+ using a custom URI scheme "solrres:". This scheme is resolved using a
+ EntityResolver that utilizes ResourceLoader
+ (org.apache.solr.common.util.SystemIdResolver). This makes all relative
+ pathes in Solr's config files behave like expected. This change
+ introduces some backwards breaks in the API: Some config classes
+ (Config, SolrConfig, IndexSchema) were changed to take
+ org.xml.sax.InputSource instead of InputStream. There may also be some
+ backwards breaks in existing config files, it is recommended to check
+ your config files / XSLTs and replace all XIncludes/HREFs that were
+ hacked to use absolute paths to use relative ones. (uschindler)
+
+* SOLR-309: Fix FieldType so setting an analyzer on a FieldType that
+ doesn't expect it will generate an error. Practically speaking this
+ means that Solr will now correctly generate an error on
+ initialization if the schema.xml contains an analyzer configuration
+ for a fieldType that does not use TextField. (hossman)
+
+* SOLR-2192: StreamingUpdateSolrServer.blockUntilFinished was not
+ thread safe and could throw an exception. (yonik)
+
+* SOLR-1692: Fix bug in clustering component relating to carrot.produceSummary
+ option (gsingers)
+
+* SOLR-1756: The date.format setting for extraction request handler causes
+ ClassCastException when enabled and the config code that parses this setting
+ does not properly use the same iterator instance.
+ (Christoph Brill, Mark Miller)
+
+* SOLR-1638: Fixed NullPointerException during DIH import if uniqueKey is not
+ specified in schema (Akshay Ukey via shalin)
+
+* SOLR-1639: Fixed misleading error message when dataimport.properties is not
+ writable (shalin)
+
+* SOLR-1598: DIH: Reader used in PlainTextEntityProcessor is not explicitly
+ closed (Sascha Szott via noble)
+
+* SOLR-1759: DIH: $skipDoc was not working correctly
+ (Gian Marco Tagliani via noble)
+
+* SOLR-1762: DIH: DateFormatTransformer does not work correctly with
+ non-default locale dates (tommy chheng via noble)
+
+* SOLR-1757: DIH multithreading sometimes throws NPE (noble)
+
+* SOLR-1766: DIH with threads enabled doesn't respond to the abort command
+ (Michael Henson via noble)
+
+* SOLR-1767: dataimporter.functions.escapeSql() does not escape backslash
+ character (Sean Timm via noble)
+
+* SOLR-1811: formatDate should use the current NOW value always
+ (Sean Timm via noble)
+
+* SOLR-1794: Dataimport of CLOB fields fails when getCharacterStream() is
+ defined in a superclass. (Gunnar Gauslaa Bergem via rmuir)
+
+* SOLR-2057: DataImportHandler never calls UpdateRequestProcessor.finish()
+ (Drew Farris via koji)
+
+* SOLR-1973: Empty fields in XML update messages confuse DataImportHandler.
+ (koji)
+
+* SOLR-2221: Use StrUtils.parseBool() to get values of boolean options in DIH.
+ true/on/yes (for TRUE) and false/off/no (for FALSE) can be used for
+ sub-options (debug, verbose, synchronous, commit, clean, optimize) for
+ full/delta-import commands. (koji)
+
+* SOLR-2310: DIH: getTimeElapsedSince() returns incorrect hour value when
+ the elapse is over 60 hours (tom liu via koji)
+
+* SOLR-2252: DIH: When a child entity in nested entities is rootEntity="true",
+ delta-import doesn't work. (koji)
+
+* SOLR-2330: solrconfig.xml files in example-DIH are broken. (Matt Parker, koji)
+
+* SOLR-1191: resolve DataImportHandler deltaQuery column against pk when pk
+ has a prefix (e.g. pk="book.id" deltaQuery="select id from ..."). More
+ useful error reporting when no match found (previously failed with a
+ NullPointerException in log and no clear user feedback). (gthb via yonik)
+
+* SOLR-2116: Fix TikaConfig classloader bug in TikaEntityProcessor
+ (Martijn van Groningen via hossman)
+
+Other Changes
+----------------------
+
+* SOLR-1602: Refactor SOLR package structure to include o.a.solr.response
+ and move QueryResponseWriters in there
+ (Chris A. Mattmann, ryan, hoss)
+
+* SOLR-1516: Addition of an abstract BaseResponseWriter class to simplify the
+ development of QueryResponseWriter implementations.
+ (Chris A. Mattmann via noble)
+
+* SOLR-1592: Refactor XMLWriter startTag to allow arbitrary attributes to be written
+ (Chris A. Mattmann via noble)
+
+* SOLR-1561: Added Lucene 2.9.1 spatial contrib jar to lib. (gsingers)
+
+* SOLR-1570: Log warnings if uniqueKey is multi-valued or not stored (hossman, shalin)
+
+* SOLR-1558: QueryElevationComponent only works if the uniqueKey field is
+ implemented using StrField. In previous versions of Solr no warning or
+ error would be generated if you attempted to use QueryElevationComponent,
+ it would just fail in unexpected ways. This has been changed so that it
+ will fail with a clear error message on initialization. (hossman)
+
+* SOLR-1611: Added Lucene 2.9.1 collation contrib jar to lib (shalin)
+
+* SOLR-1608: Extract base class from TestDistributedSearch to make
+ it easy to write test cases for other distributed components. (shalin)
+
+* Upgraded to Lucene 2.9-dev r888785 (shalin)
+
+* SOLR-1610: Generify SolrCache (Jason Rutherglen via shalin)
+
+* SOLR-1637: Remove ALIAS command
+
+* SOLR-1662: Added Javadocs in BufferedTokenStream and fixed incorrect cloning
+ in TestBufferedTokenStream (Robert Muir, Uwe Schindler via shalin)
+
+* SOLR-1674: Improve analysis tests and cut over to new TokenStream API.
+ (Robert Muir via Mark Miller)
+
+* SOLR-1661: Remove adminCore from CoreContainer . removed deprecated methods setAdminCore(), getAdminCore() (noble)
+
+* SOLR-1704: Google collections moved from clustering to core (noble)
+
+* SOLR-1268: Add Lucene 2.9-dev r888785 FastVectorHighlighter contrib jar to lib. (koji)
+
+* SOLR-1538: Reordering of object allocations in ConcurrentLRUCache to eliminate
+ (an extremely small) potential for deadlock.
+ (gabriele renzi via hossman)
+
+* SOLR-1588: Removed some very old dead code.
+ (Chris A. Mattmann via hossman)
+
+* SOLR-1696 : Deprecate old <highlighting> syntax and move configuration to HighlightComponent (noble)
+
+* SOLR-1727: SolrEventListener should extend NamedListInitializedPlugin (noble)
+
+* SOLR-1771: Improved error message when StringIndex cannot be initialized
+ for a function query (hossman)
+
+* SOLR-1695: Improved error messages when adding a document that does not
+ contain exactly one value for the uniqueKey field (hossman)
+
+* SOLR-1776: DismaxQParser and ExtendedDismaxQParser now use the schema.xml
+ "defaultSearchField" as the default value for the "qf" param instead of failing
+ with an error when "qf" is not specified. (hossman)
+
+* SOLR-1851: luceneAutoCommit no longer has any effect - it has been remove (Mark Miller)
+
+* SOLR-1865: SolrResourceLoader.getLines ignores Byte Order Markers (BOMs) at the
+ beginning of input files, these are often created by editors such as Windows
+ Notepad. (rmuir, hossman)
+
+* SOLR-1938: ElisionFilterFactory will use a default set of French contractions
+ if you do not supply a custom articles file. (rmuir)
+
+* SOLR-2003: SolrResourceLoader will report any encoding errors, rather than
+ silently using replacement characters for invalid inputs (blargy via rmuir)
+
+* SOLR-1804: Google collections updated to Google Guava (which is a superset of collections and contains bug fixes) (gsingers)
+
+* SOLR-2034: Switch to JavaBin codec version 2. Strings are now serialized
+ as the number of UTF-8 bytes, followed by the bytes in UTF-8. Previously
+ Strings were serialized as the number of UTF-16 chars, followed by the
+ bytes in Modified UTF-8. (hossman, yonik, rmuir)
+
+* SOLR-2013: Add mapping-FoldToASCII.txt to example conf directory.
+ (Steven Rowe via koji)
+
+* SOLR-2213: Upgrade to jQuery 1.4.3 (Erick Erickson via ryan)
+
+* SOLR-1826: Add unit tests for highlighting with termOffsets=true
+ and overlapping tokens. (Stefan Oestreicher via rmuir)
+
+* SOLR-2340: Add version infos to message in JavaBinCodec when throwing
+ exception. (koji)
+
+* SOLR-2350: Since Solr no longer requires XML files to be in UTF-8
+ (see SOLR-96) SimplePostTool (aka: post.jar) has been improved to
+ work with files of any mime-type or charset. (hossman)
+
+* SOLR-2365: Move DIH jars out of solr.war (David Smiley via yonik)
+
+* SOLR-2381: Include a patched version of Jetty (6.1.26 + JETTY-1340)
+ to fix problematic UTF-8 handling for supplementary characters.
+ (Bernd Fehling, uschindler, yonik, rmuir)
+
+* SOLR-2391: The preferred Content-Type for XML was changed to
+ application/xml. XMLResponseWriter now only delivers using this
+ type; updating documents and analyzing documents is still supported
+ using text/xml as Content-Type, too. If you have clients that are
+ hardcoded on text/xml as Content-Type, you have to change them.
+ (uschindler, rmuir)
+
+* SOLR-2414: All ResponseWriters now use only ServletOutputStreams
+ and wrap their own Writer around it when serializing. This fixes
+ the bug in PHPSerializedResponseWriter that produced wrong string
+ length if the servlet container had a broken UTF-8 encoding that was
+ in fact CESU-8 (see SOLR-1091). The system property to enable the
+ CESU-8 byte counting in PHPSerializesResponseWriters for broken
+ servlet containers was therefore removed and is now ignored if set.
+ Output is always UTF-8. (uschindler, yonik, rmuir)
+
+* SOLR-141: Errors and Exceptions are formated by ResponseWriter.
+ (Mike Sokolov, Rich Cariens, Daniel Naber, ryan)
+
+* SOLR-1902: Upgraded to Tika 0.8 and changed deprecated parse call
+
+* SOLR-1813: Add ICU4j to contrib/extraction libs and add tests for Arabic
+ extraction (Robert Muir via gsingers)
+
+* SOLR-1821: Fix TimeZone-dependent test failure in TestEvaluatorBag.
+ (Chris Male via rmuir)
+
+* SOLR-2367: Reduced noise in test output by ensuring the properties file
+ can be written. (Gunnlaugur Thor Briem via rmuir)
+
+Build
+----------------------
+
+* SOLR-1522: Automated release signing process. (gsingers)
+
+* SOLR-1891: Make lucene-jars-to-solr fail if copying any of the jars fails, and
+ update clean to remove the jars in that directory (Mark Miller)
+
+* LUCENE-2466: Commons-Codec was upgraded from 1.3 to 1.4. (rmuir)
+
+* SOLR-2042: Fixed some Maven deps (Drew Farris via gsingers)
+
+* LUCENE-2657: Switch from using Maven POM templates to full POMs when
+ generating Maven artifacts (Steven Rowe)
+
+Documentation
+----------------------
+
+* SOLR-1590: Javadoc for XMLWriter#startTag
+ (Chris A. Mattmann via hossman)
+
+* SOLR-1792: Documented peculiar behavior of TestHarness.LocalRequestFactory
+ (hossman)
+
+================== Release 1.4.1 ==================
+Release Date: See http://lucene.apache.org/solr for the official release date.
+
+Upgrading from Solr 1.4
+-----------------------
+
+This is a bug fix release - no changes are required when upgrading from Solr 1.4.
+However, a reindex is needed for some of the analysis fixes to take effect.
+
+Versions of Major Components
+----------------------------
+Apache Lucene 2.9.3
+Apache Tika 0.4
+Carrot2 3.1.0
+
+Lucene Information
+----------------
+
+Since Solr is built on top of Lucene, many people add customizations to Solr
+that are dependent on Lucene. Please see http://lucene.apache.org/java/2_9_3/,
+especially http://lucene.apache.org/java/2_9_3/changes/Changes.html for more
+information on the version of Lucene used in Solr.
+
+Bug Fixes
+----------------------
+
+* SOLR-1934: Upgrade to Apache Lucene 2.9.3 to obtain several bug
+ fixes from the previous 2.9.1. See the Lucene 2.9.3 release notes
+ for details. (hossman, Mark Miller)
+
+* SOLR-1432: Make the new ValueSource.getValues(context,reader) delegate
+ to the original ValueSource.getValues(reader) so custom sources
+ will work. (yonik)
+
+* SOLR-1572: FastLRUCache correctly implemented the LRU policy only
+ for the first 2B accesses. (yonik)
+
+* SOLR-1595: StreamingUpdateSolrServer used the platform default character
+ set when streaming updates, rather than using UTF-8 as the HTTP headers
+ indicated, leading to an encoding mismatch. (hossman, yonik)
+
+* SOLR-1660: CapitalizationFilter crashes if you use the maxWordCountOption
+ (Robert Muir via shalin)
+
+* SOLR-1662: Added Javadocs in BufferedTokenStream and fixed incorrect cloning
+ in TestBufferedTokenStream (Robert Muir, Uwe Schindler via shalin)
+
+* SOLR-1711: SolrJ - StreamingUpdateSolrServer had a race condition that
+ could halt the streaming of documents. The original patch to fix this
+ (never officially released) introduced another hanging bug due to
+ connections not being released. (Attila Babo, Erik Hetzner via yonik)
+
+* SOLR-1748, SOLR-1747, SOLR-1746, SOLR-1745, SOLR-1744: Streams and Readers
+ retrieved from ContentStreams are not closed in various places, resulting
+ in file descriptor leaks.
+ (Christoff Brill, Mark Miller)
+
+* SOLR-1580: Solr Configuration ignores 'mergeFactor' parameter, always
+ uses Lucene default. (Lance Norskog via Mark Miller)
+
+* SOLR-1777: fieldTypes with sortMissingLast=true or sortMissingFirst=true can
+ result in incorrectly sorted results. (yonik)
+
+* SOLR-1797: fix ConcurrentModificationException and potential memory
+ leaks in ResourceLoader. (yonik)
+
+* SOLR-1798: Small memory leak (~100 bytes) in fastLRUCache for every
+ commit. (yonik)
+
+* SOLR-1522: Show proper message if <script> tag is missing for DIH
+ ScriptTransformer (noble)
+
+* SOLR-1538: Reordering of object allocations in ConcurrentLRUCache to eliminate
+ (an extremely small) potential for deadlock.
+ (gabriele renzi via hossman)
+
+* SOLR-1558: QueryElevationComponent only works if the uniqueKey field is
+ implemented using StrField. In previous versions of Solr no warning or
+ error would be generated if you attempted to use QueryElevationComponent,
+ it would just fail in unexpected ways. This has been changed so that it
+ will fail with a clear error message on initialization. (hossman)
+
+* SOLR-1563: Binary fields, including trie-based numeric fields, caused null
+ pointer exceptions in the luke request handler. (yonik)
+
+* SOLR-1579: Fixes to XML escaping in stats.jsp
+ (David Bowen and hossman)
+
+* SOLR-1582: copyField was ignored for BinaryField types (gsingers)
+
+* SOLR-1596: A rollback operation followed by the shutdown of Solr
+ or the close of a core resulted in a warning:
+ "SEVERE: SolrIndexWriter was not closed prior to finalize()" although
+ there were no other consequences. (yonik)
+
+* SOLR-1651: Fixed Incorrect dataimport handler package name in SolrResourceLoader
+ (Akshay Ukey via shalin)
+
+* SOLR-1936: The JSON response format needed to escape unicode code point
+ U+2028 - 'LINE SEPARATOR' (Robert Hofstra, yonik)
+
+* SOLR-1852: Fix WordDelimiterFilterFactory bug where position increments
+ were not being applied properly to subwords. (Peter Wolanin via Robert Muir)
+
+* SOLR-1706: fixed WordDelimiterFilter for certain combinations of options
+ where it would output incorrect tokens. (Robert Muir, Chris Male)
+
+* SOLR-1948: PatternTokenizerFactory should use parent's args (koji)
+
+* SOLR-1870: Indexing documents using the 'javabin' format no longer
+ fails with a ClassCastException whenSolrInputDocuments contain field
+ values which are Collections or other classes that implement
+ Iterable. (noble, hossman)
+
+* SOLR-1769 Solr 1.4 Replication - Repeater throwing NullPointerException (noble)
+
+================== Release 1.4.0 ==================
+Release Date: See http://lucene.apache.org/solr for the official release date.
+
+Upgrading from Solr 1.3
+-----------------------
+
+There is a new default faceting algorithm for multiVaued fields that should be
+faster for most cases. One can revert to the previous algorithm (which has
+also been improved somewhat) by adding facet.method=enum to the request.
+
+Searching and sorting is now done on a per-segment basis, meaning that
+the FieldCache entries used for sorting and for function queries are
+created and used per-segment and can be reused for segments that don't
+change between index updates. While generally beneficial, this can lead
+to increased memory usage over 1.3 in certain scenarios:
+ 1) A single valued field that was used for both sorting and faceting
+in 1.3 would have used the same top level FieldCache entry. In 1.4,
+sorting will use entries at the segment level while faceting will still
+use entries at the top reader level, leading to increased memory usage.
+ 2) Certain function queries such as ord() and rord() require a top level
+FieldCache instance and can thus lead to increased memory usage. Consider
+replacing ord() and rord() with alternatives, such as function queries
+based on ms() for date boosting.
+
+If you use custom Tokenizer or TokenFilter components in a chain specified in
+schema.xml, they must support reusability. If your Tokenizer or TokenFilter
+maintains state, it should implement reset(). If your TokenFilteFactory does
+not return a subclass of TokenFilter, then it should implement reset() and call
+reset() on its input TokenStream. TokenizerFactory implementations must
+now return a Tokenizer rather than a TokenStream.
+
+New users of Solr 1.4 will have omitTermFreqAndPositions enabled for non-text
+indexed fields by default, which avoids indexing term frequency, positions, and
+payloads, making the index smaller and faster. If you are upgrading from an
+earlier Solr release and want to enable omitTermFreqAndPositions by default,
+change the schema version from 1.1 to 1.2 in schema.xml. Remove any existing
+index and restart Solr to ensure that omitTermFreqAndPositions completely takes
+affect.
+
+The default QParserPlugin used by the QueryComponent for parsing the "q" param
+has been changed, to remove support for the deprecated use of ";" as a separator
+between the query string and the sort options when no "sort" param was used.
+Users who wish to continue using the semi-colon based method of specifying the
+sort options should explicitly set the defType param to "lucenePlusSort" on all
+requests. (The simplest way to do this is by specifying it as a default param
+for your request handlers in solrconfig.xml, see the example solrconfig.xml for
+sample syntax.)
+
+If spellcheck.extendedResults=true, the response format for suggestions
+has changed, see SOLR-1071.
+
+Use of the "charset" option when configuring the following Analysis
+Factories has been deprecated and will cause a warning to be logged.
+In future versions of Solr attempting to use this option will cause an
+error. See SOLR-1410 for more information.
+ - GreekLowerCaseFilterFactory
+ - RussianStemFilterFactory
+ - RussianLowerCaseFilterFactory
+ - RussianLetterTokenizerFactory
+
+DIH: Evaluator API has been changed in a non back-compatible way. Users who
+have developed custom Evaluators will need to change their code according to
+the new API for it to work. See SOLR-996 for details.
+
+DIH: The formatDate evaluator's syntax has been changed. The new syntax is
+formatDate(<variable>, '<format_string>'). For example,
+formatDate(x.date, 'yyyy-MM-dd'). In the old syntax, the date string was
+written without a single-quotes. The old syntax has been deprecated and will
+be removed in 1.5, until then, using the old syntax will log a warning.
+
+DIH: The Context API has been changed in a non back-compatible way. In
+particular, the Context.currentProcess() method now returns a String
+describing the type of the current import process instead of an int.
+Similarily, the public constants in Context viz. FULL_DUMP, DELTA_DUMP and
+FIND_DELTA are changed to a String type. See SOLR-969 for details.
+
+DIH: The EntityProcessor API has been simplified by moving logic for applying
+transformers and handling multi-row outputs from Transformers into an
+EntityProcessorWrapper class. The EntityProcessor#destroy is now called once
+per parent-row at the end of row (end of data). A new method
+EntityProcessor#close is added which is called at the end of import.
+
+DIH: In Solr 1.3, if the last_index_time was not available (first import) and
+a delta-import was requested, a full-import was run instead. This is no longer
+the case. In Solr 1.4 delta import is run with last_index_time as the epoch
+date (January 1, 1970, 00:00:00 GMT) if last_index_time is not available.
+
+Versions of Major Components
+----------------------------
+Apache Lucene 2.9.1 (r832363 on 2.9 branch)
+Apache Tika 0.4
+Carrot2 3.1.0
+
+Lucene Information
+----------------
+
+Since Solr is built on top of Lucene, many people add customizations to Solr
+that are dependent on Lucene. Please see http://lucene.apache.org/java/2_9_0/,
+especially http://lucene.apache.org/java/2_9_0/changes/Changes.html for more
+information on the version of Lucene used in Solr.
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+ 1. SOLR-560: Use SLF4J logging API rather then JDK logging. The packaged .war file is
+ shipped with a JDK logging implementation, so logging configuration for the .war should
+ be identical to solr 1.3. However, if you are using the .jar file, you can select
+ which logging implementation to use by dropping a different binding.
+ See: http://www.slf4j.org/ (ryan)
+
+ 2. SOLR-617: Allow configurable index deletion policy and provide a default implementation which
+ allows deletion of commit points on various criteria such as number of commits, age of commit
+ point and optimized status.
+ See http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
+ (yonik, Noble Paul, Akshay Ukey via shalin)
+
+ 3. SOLR-658: Allow Solr to load index from arbitrary directory in dataDir
+ (Noble Paul, Akshay Ukey via shalin)
+
+ 4. SOLR-793: Add 'commitWithin' argument to the update add command. This behaves
+ similar to the global autoCommit maxTime argument except that it is set for
+ each request. (ryan)
+
+ 5. SOLR-670: Add support for rollbacks in UpdateHandler. This allows user to rollback all changes
+ since the last commit. (Noble Paul, koji via shalin)
+
+ 6. SOLR-813: Adding DoubleMetaphone Filter and Factory. Similar to the PhoneticFilter,
+ but this uses DoubleMetaphone specific calls (including alternate encoding)
+ (Todd Feak via ryan)
+
+ 7. SOLR-680: Add StatsComponent. This gets simple statistics on matched numeric fields,
+ including: min, max, mean, median, stddev. (koji, ryan)
+
+ - SOLR-1380: Added support for multi-valued fields (Harish Agarwal via gsingers)
+
+ 8. SOLR-561: Added Replication implemented in Java as a request handler. Supports index replication
+ as well as configuration replication and exposes detailed statistics and progress information
+ on the Admin page. Works on all platforms. (Noble Paul, yonik, Akshay Ukey, shalin)
+
+ 9. SOLR-746: Added "omitHeader" request parameter to omit the header from the response.
+ (Noble Paul via shalin)
+
+10. SOLR-651: Added TermVectorComponent for serving up term vector information, plus IDF.
+ See http://wiki.apache.org/solr/TermVectorComponent (gsingers, Vaijanath N. Rao, Noble Paul)
+
+12. SOLR-795: SpellCheckComponent supports building indices on optimize if configured in solrconfig.xml
+ (Jason Rennie, shalin)
+
+13. SOLR-667: A LRU cache implementation based upon ConcurrentHashMap and other techniques to reduce
+ contention and synchronization overhead, to utilize multiple CPU cores more effectively.
+ (Fuad Efendi, Noble Paul, yonik via shalin)
+
+14. SOLR-465: Add configurable DirectoryProvider so that alternate Directory
+ implementations can be specified via solrconfig.xml. The default
+ DirectoryProvider will use NIOFSDirectory for better concurrency
+ on non Windows platforms. (Mark Miller, TJ Laurenzo via yonik)
+
+15. SOLR-822: Add CharFilter so that characters can be filtered (e.g. character normalization)
+ before Tokenizer/TokenFilters. (koji)
+
+16. SOLR-829: Allow slaves to request compressed files from master during replication
+ (Simon Collins, Noble Paul, Akshay Ukey via shalin)
+
+17. SOLR-877: Added TermsComponent for accessing Lucene's TermEnum capabilities.
+ Useful for auto suggest and possibly distributed search. Not distributed search compliant. (gsingers)
+ - Added mincount and maxcount options (Khee Chin via gsingers)
+
+18. SOLR-538: Add maxChars attribute for copyField function so that the length limit for destination
+ can be specified.
+ (Georgios Stamatis, Lars Kotthoff, Chris Harris via koji)
+
+19. SOLR-284: Added support for extracting content from binary documents like MS Word and PDF using Apache Tika. See also contrib/extraction/CHANGES.txt (Eric Pugh, Chris Harris, yonik, gsingers)
+
+20. SOLR-819: Added factories for Arabic support (gsingers)
+
+21. SOLR-781: Distributed search ability to sort field.facet values
+ lexicographically. facet.sort values "true" and "false" are
+ also deprecated and replaced with "count" and "lex".
+ (Lars Kotthoff via yonik)
+
+22. SOLR-821: Add support for replication to copy conf file to slave with a different name. This allows replication
+ of solrconfig.xml
+ (Noble Paul, Akshay Ukey via shalin)
+
+23. SOLR-911: Add support for multi-select faceting by allowing filters to be
+ tagged and facet commands to exclude certain filters. This patch also
+ added the ability to change the output key for facets in the response, and
+ optimized distributed faceting refinement by lowering parsing overhead and
+ by making requests and responses smaller.
+
+24. SOLR-876: WordDelimiterFilter now supports a splitOnNumerics
+ option, as well as a list of protected terms.
+ (Dan Rosher via hossman)
+
+25. SOLR-928: SolrDocument and SolrInputDocument now implement the Map<String,?>
+ interface. This should make plugging into other standard tools easier. (ryan)
+
+26. SOLR-847: Enhance the snappull command in ReplicationHandler to accept masterUrl.
+ (Noble Paul, Preetam Rao via shalin)
+
+27. SOLR-540: Add support for globbing in field names to highlight.
+ For example, hl.fl=*_text will highlight all fieldnames ending with
+ _text. (Lars Kotthoff via yonik)
+
+28. SOLR-906: Adding a StreamingUpdateSolrServer that writes update commands to
+ an open HTTP connection. If you are using solrj for bulk update requests
+ you should consider switching to this implementaion. However, note that
+ the error handling is not immediate as it is with the standard SolrServer.
+ (ryan)
+
+29. SOLR-865: Adding support for document updates in binary format and corresponding support in Solrj client.
+ (Noble Paul via shalin)
+
+30. SOLR-763: Add support for Lucene's PositionFilter (Mck SembWever via shalin)
+
+31. SOLR-966: Enhance the map() function query to take in an optional default value (Noble Paul, shalin)
+
+32. SOLR-820: Support replication on startup of master with new index. (Noble Paul, Akshay Ukey via shalin)
+
+33. SOLR-943: Make it possible to specify dataDir in solr.xml and accept the dataDir as a request parameter for
+ the CoreAdmin create command. (Noble Paul via shalin)
+
+34. SOLR-850: Addition of timeouts for distributed searching. Configurable through 'shard-socket-timeout' and
+ 'shard-connection-timeout' parameters in SearchHandler. (Patrick O'Leary via shalin)
+
+35. SOLR-799: Add support for hash based exact/near duplicate document
+ handling. (Mark Miller, yonik)
+
+36. SOLR-1026: Add protected words support to SnowballPorterFilterFactory (ehatcher)
+
+37. SOLR-739: Add support for OmitTf (Mark Miller via yonik)
+
+38. SOLR-1046: Nested query support for the function query parser
+ and lucene query parser (the latter existed as an undocumented
+ feature in 1.3) (yonik)
+
+39. SOLR-940: Add support for Lucene's Trie Range Queries by providing new FieldTypes in
+ schema for int, float, long, double and date. Single-valued Trie based
+ fields with a precisionStep will index multiple precisions and enable
+ faster range queries. (Uwe Schindler, yonik, shalin)
+
+40. SOLR-1038: Enhance CommonsHttpSolrServer to add docs in batch using an iterator API (Noble Paul via shalin)
+
+41. SOLR-844: A SolrServer implementation to front-end multiple solr servers and provides load balancing and failover
+ support (Noble Paul, Mark Miller, hossman via shalin)
+
+42. SOLR-939: ValueSourceRangeFilter/Query - filter based on values in a FieldCache entry or on any arbitrary function of field values. (yonik)
+
+43. SOLR-1095: Fixed performance problem in the StopFilterFactory and simplified code. Added tests as well. (gsingers)
+
+44. SOLR-1096: Introduced httpConnTimeout and httpReadTimeout in replication slave configuration to avoid stalled
+ replication. (Jeff Newburn, Noble Paul, shalin)
+
+45. SOLR-1115: <bool>on</bool> and <bool>yes</bool> work as expected in solrconfig.xml. (koji)
+
+46. SOLR-1099: A FieldAnalysisRequestHandler which provides the analysis functionality of the web admin page as
+ a service. The AnalysisRequestHandler is renamed to DocumentAnalysisRequestHandler which is enhanced with
+ query analysis and showMatch support. AnalysisRequestHandler is now deprecated. Support for both
+ FieldAnalysisRequestHandler and DocumentAnalysisRequestHandler is also provided in the Solrj client.
+ (Uri Boness, shalin)
+
+47. SOLR-1106: Made CoreAdminHandler Actions pluggable so that additional actions may be plugged in or the existing
+ ones can be overridden if needed. (Kay Kay, Noble Paul, shalin)
+
+48. SOLR-1124: Add a top() function query that causes its argument to
+ have its values derived from the top level IndexReader, even when
+ invoked from a sub-reader. top() is implicitly used for the
+ ord() and rord() functions. (yonik)
+
+49. SOLR-1110: Support sorting on trie fields with Distributed Search. (Mark Miller, Uwe Schindler via shalin)
+
+50. SOLR-1121: CoreAdminhandler should not need a core . This makes it possible to start a Solr server w/o a core .(noble)
+
+51. SOLR-769: Added support for clustering in contrib/clustering. See http://wiki.apache.org/solr/ClusteringComponent for more info. (gsingers, Stanislaw Osinski)
+
+52. SOLR-1175: disable/enable replication on master side. added two commands 'enableReplication' and 'disableReplication' (noble)
+
+53. SOLR-1179: DocSets can now be used as Lucene Filters via
+ DocSet.getTopFilter() (yonik)
+
+54. SOLR-1116: Add a Binary FieldType (noble)
+
+55. SOLR-1051: Support the merge of multiple indexes as a CoreAdmin and an update command (Ning Li via shalin)
+
+56. SOLR-1152: Snapshoot on ReplicationHandler should accept location as a request parameter (shalin)
+
+57. SOLR-1204: Enhance SpellingQueryConverter to handle UTF-8 instead of ASCII only.
+ Use the NMTOKEN syntax for matching field names.
+ (Michael Ludwig, shalin)
+
+58. SOLR-1189: Support providing username and password for basic HTTP authentication in Java replication
+ (Matthew Gregg, shalin)
+
+59. SOLR-243: Add configurable IndexReaderFactory so that alternate IndexReader implementations
+ can be specified via solrconfig.xml. Note that using a custom IndexReader may be incompatible
+ with ReplicationHandler (see comments in SOLR-1366). This should be treated as an experimental feature.
+ (Andrzej Bialecki, hossman, Mark Miller, John Wang)
+
+60. SOLR-1214: differentiate between solr home and instanceDir .deprecates the method SolrResourceLoader#locateInstanceDir()
+ and it is renamed to locateSolrHome (noble)
+
+61. SOLR-1216 : disambiguate the replication command names. 'snappull' becomes 'fetchindex' 'abortsnappull' becomes 'abortfetch' (noble)
+
+62. SOLR-1145: Add capability to specify an infoStream log file for the underlying Lucene IndexWriter in solrconfig.xml.
+ This is an advanced debug log file that can be used to aid developers in fixing IndexWriter bugs. See the commented
+ out example in the example solrconfig.xml under the indexDefaults section.
+ (Chris Harris, Mark Miller)
+
+63. SOLR-1256: Show the output of CharFilters in analysis.jsp. (koji)
+
+64. SOLR-1266: Added stemEnglishPossessive option (default=true) to WordDelimiterFilter
+ that allows disabling of english possessive stemming (removal of trailing 's from tokens)
+ (Robert Muir via yonik)
+
+65. SOLR-1237: firstSearcher and newSearcher can now be identified via the CommonParams.EVENT (evt) parameter
+ in a request. This allows a RequestHandler or SearchComponent to know when a newSearcher or firstSearcher
+ event happened. QuerySenderListender is the only implementation in Solr that implements this, but outside
+ implementations may wish to. See the AbstractSolrEventListener for a helper method. (gsingers)
+
+66. SOLR-1343: Added HTMLStripCharFilter and marked HTMLStripReader, HTMLStripWhitespaceTokenizerFactory and
+ HTMLStripStandardTokenizerFactory deprecated. To strip HTML tags, HTMLStripCharFilter can be used
+ with an arbitrary Tokenizer. (koji)
+
+67. SOLR-1275: Add expungeDeletes to DirectUpdateHandler2 (noble)
+
+68. SOLR-1372: Enhance FieldAnalysisRequestHandler to accept field value from content stream (ehatcher)
+
+69. SOLR-1370: Show the output of CharFilters in FieldAnalysisRequestHandler (koji)
+
+70. SOLR-1373: Add Filter query to admin/form.jsp
+ (Jason Rutherglen via hossman)
+
+71. SOLR-1368: Add ms() function query for getting milliseconds from dates and for
+ high precision date subtraction, add sub() for subtracting other arguments.
+ (yonik)
+
+72. SOLR-1156: Sort TermsComponent results by frequency (Matt Weber via yonik)
+
+73. SOLR-1335 : load core properties from a properties file (noble)
+
+74. SOLR-1385 : Add an 'enable' attribute to all plugins (noble)
+
+75. SOLR-1414 : implicit core properties are not set for single core (noble)
+
+76. SOLR-659 : Adds shards.start and shards.rows to distributed search
+ to allow more efficient bulk queries (those that retrieve many or all
+ documents). (Brian Whitman via yonik)
+
+77. SOLR-1321: Add better support for efficient wildcard handling (Andrzej Bialecki, Robert Muir, gsingers)
+
+78. SOLR-1326 : New interface PluginInfoInitialized for all types of plugin (noble)
+
+79. SOLR-1447 : Simple property injection. <mergePolicy> & <mergeScheduler> syntaxes are now deprecated
+ (Jason Rutherglen, noble)
+
+80. SOLR-908 : CommonGramsFilterFactory/CommonGramsQueryFilterFactory for
+ speeding up phrase queries containing common words by indexing
+ n-grams and using them at query time.
+ (Tom Burton-West, Jason Rutherglen via yonik)
+
+81. SOLR-1292: Add FieldCache introspection to stats.jsp and JMX Monitoring via
+ a new SolrFieldCacheMBean. (hossman)
+
+82. SOLR-1167: Solr Config now supports XInclude for XML engines that can support it. (Bryan Talbot via gsingers)
+
+83. SOLR-1478: Enable sort by Lucene docid. (ehatcher)
+
+84. SOLR-1449: Add <lib> elements to solrconfig.xml to specifying additional
+ classpath directories and regular expressions. (hossman via yonik)
+
+85. SOLR-1128: Added metadata output to extraction request handler "extract
+ only" option. (gsingers)
+
+86. SOLR-1274: Added text serialization output for extractOnly
+ (Peter Wolanin, gsingers)
+
+87. SOLR-768: DIH: Set last_index_time variable in full-import command.
+ (Wojtek Piaseczny, Noble Paul via shalin)
+
+88. SOLR-811: Allow a "deltaImportQuery" attribute in SqlEntityProcessor
+ which is used for delta imports instead of DataImportHandler manipulating
+ the SQL itself. (Noble Paul via shalin)
+
+89. SOLR-842: Better error handling in DataImportHandler with options to
+ abort, skip and continue imports. (Noble Paul, shalin)
+
+90. SOLR-833: DIH: A DataSource to read data from a field as a reader. This
+ can be used, for example, to read XMLs residing as CLOBs or BLOBs in
+ databases. (Noble Paul via shalin)
+
+91. SOLR-887: A DIH Transformer to strip HTML tags. (Ahmed Hammad via shalin)
+
+92. SOLR-886: DataImportHandler should rollback when an import fails or it is
+ aborted (shalin)
+
+93. SOLR-891: A DIH Transformer to read strings from Clob type.
+ (Noble Paul via shalin)
+
+94. SOLR-812: Configurable JDBC settings in JdbcDataSource including optimized
+ defaults for read only mode. (David Smiley, Glen Newton, shalin)
+
+95. SOLR-910: Add a few utility commands to the DIH admin page such as full
+ import, delta import, status, reload config. (Ahmed Hammad via shalin)
+
+96. SOLR-938: Add event listener API for DIH import start and end.
+ (Kay Kay, Noble Paul via shalin)
+
+97. SOLR-801: DIH: Add support for configurable pre-import and post-import
+ delete query per root-entity. (Noble Paul via shalin)
+
+98. SOLR-988: Add a new scope for session data stored in Context to store
+ objects across imports. (Noble Paul via shalin)
+
+99. SOLR-980: A PlainTextEntityProcessor which can read from any
+ DataSource<Reader> and output a String.
+ (Nathan Adams, Noble Paul via shalin)
+
+100.SOLR-1003: XPathEntityprocessor must allow slurping all text from a given
+ xml node and its children. (Noble Paul via shalin)
+
+101.SOLR-1001: Allow variables in various attributes of RegexTransformer,
+ HTMLStripTransformer and NumberFormatTransformer.
+ (Fergus McMenemie, Noble Paul, shalin)
+
+102.SOLR-989: DIH: Expose running statistics from the Context API.
+ (Noble Paul, shalin)
+
+103.SOLR-996: DIH: Expose Context to Evaluators. (Noble Paul, shalin)
+
+104.SOLR-783: DIH: Enhance delta-imports by maintaining separate
+ last_index_time for each entity. (Jon Baer, Noble Paul via shalin)
+
+105.SOLR-1033: Current entity's namespace is made available to all DIH
+ Transformers. This allows one to use an output field of TemplateTransformer
+ in other transformers, among other things.
+ (Fergus McMenemie, Noble Paul via shalin)
+
+106.SOLR-1066: New methods in DIH Context to expose Script details.
+ ScriptTransformer changed to read scripts through the new API methods.
+ (Noble Paul via shalin)
+
+107.SOLR-1062: A DIH LogTransformer which can log data in a given template
+ format. (Jon Baer, Noble Paul via shalin)
+
+108.SOLR-1065: A DIH ContentStreamDataSource which can accept HTTP POST data
+ in a content stream. This can be used to push data to Solr instead of
+ just pulling it from DB/Files/URLs. (Noble Paul via shalin)
+
+109.SOLR-1061: Improve DIH RegexTransformer to create multiple columns from
+ regex groups. (Noble Paul via shalin)
+
+110.SOLR-1059: Special DIH flags introduced for deleting documents by query or
+ id, skipping rows and stopping further transforms. Use $deleteDocById,
+ $deleteDocByQuery for deleting by id and query respectively. Use $skipRow
+ to skip the current row but continue with the document. Use $stopTransform
+ to stop further transformers. New methods are introduced in Context for
+ deleting by id and query. (Noble Paul, Fergus McMenemie, shalin)
+
+111.SOLR-1076: JdbcDataSource should resolve DIH variables in all its
+ configuration parameters. (shalin)
+
+112.SOLR-1055: Make DIH JdbcDataSource easily extensible by making the
+ createConnectionFactory method protected and return a
+ Callable<Connection> object. (Noble Paul, shalin)
+
+113.SOLR-1058: DIH: JdbcDataSource can lookup javax.sql.DataSource using JNDI.
+ Use a jndiName attribute to specify the location of the data source.
+ (Jason Shepherd, Noble Paul via shalin)
+
+114.SOLR-1083: A DIH Evaluator for escaping query characters.
+ (Noble Paul, shalin)
+
+115.SOLR-934: A MailEntityProcessor to enable indexing mails from
+ POP/IMAP sources into a solr index. (Preetam Rao, shalin)
+
+116.SOLR-1060: A DIH LineEntityProcessor which can stream lines of text from a
+ given file to be indexed directly or for processing with transformers and
+ child entities.
+ (Fergus McMenemie, Noble Paul, shalin)
+
+117.SOLR-1127: Add support for DIH field name to be templatized.
+ (Noble Paul, shalin)
+
+118.SOLR-1092: Added a new DIH command named 'import' which does not
+ automatically clean the index. This is useful and more appropriate when one
+ needs to import only some of the entities.
+ (Noble Paul via shalin)
+
+119.SOLR-1153: DIH 'deltaImportQuery' is honored on child entities as well
+ (noble)
+
+120.SOLR-1230: Enhanced dataimport.jsp to work with all DataImportHandler
+ request handler configurations, rather than just a hardcoded /dataimport
+ handler. (ehatcher)
+
+121.SOLR-1235: disallow period (.) in DIH entity names (noble)
+
+122.SOLR-1234: Multiple DIH does not work because all of them write to
+ dataimport.properties. Use the handler name as the properties file name
+ (noble)
+
+123.SOLR-1348: Support binary field type in convertType logic in DIH
+ JdbcDataSource (shalin)
+
+124.SOLR-1406: DIH: Make FileDataSource and FileListEntityProcessor to be more
+ extensible (Luke Forehand, shalin)
+
+125.SOLR-1437: DIH: XPathEntityProcessor can deal with xpath syntaxes such as
+ //tagname , /root//tagname (Fergus McMenemie via noble)
+
+
+Optimizations
+----------------------
+ 1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the
+ index that haven't changed. (Mark Miller via yonik)
+
+ 2. SOLR-808: Write string keys in Maps as extern strings in the javabin format. (Noble Paul via shalin)
+
+ 3. SOLR-475: New faceting method with better performance and smaller memory usage for
+ multi-valued fields with many unique values but relatively few values per document.
+ Controllable via the facet.method parameter - "fc" is the new default method and "enum"
+ is the original method. (yonik)
+
+ 4. SOLR-970: Use an ArrayList in SolrPluginUtils.parseQueryStrings
+ since we know exactly how long the List will be in advance.
+ (Kay Kay via hossman)
+
+ 5. SOLR-1002: Change SolrIndexSearcher to use insertWithOverflow
+ with reusable priority queue entries to reduce the amount of
+ generated garbage during searching. (Mark Miller via yonik)
+
+ 6. SOLR-971: Replace StringBuffer with StringBuilder for instances that do not require thread-safety.
+ (Kay Kay via shalin)
+
+ 7. SOLR-921: SolrResourceLoader must cache short class name vs fully qualified classname
+ (Noble Paul, hossman via shalin)
+
+ 8. SOLR-973: CommonsHttpSolrServer writes the xml directly to the server.
+ (Noble Paul via shalin)
+
+ 9. SOLR-1108: Remove un-needed synchronization in SolrCore constructor.
+ (Noble Paul via shalin)
+
+10. SOLR-1166: Speed up docset/filter generation by avoiding top-level
+ score() call and iterating over leaf readers with TermDocs. (yonik)
+
+11. SOLR-1169: SortedIntDocSet - a new small set implementation
+ that saves memory over HashDocSet, is faster to construct,
+ is ordered for easier implementation of skipTo, and is faster
+ in the general case. (yonik)
+
+12. SOLR-1165: Use Lucene Filters and pass them down to the Lucene
+ search methods to filter earlier and improve performance. (yonik)
+
+13. SOLR-1111: Use per-segment sorting to share fieldcache elements
+ across unchanged segments. This saves memory and reduces
+ commit times for incremental updates to the index. (yonik)
+
+14. SOLR-1188: Minor efficiency improvement in TermVectorComponent related to ignoring positions or offsets (gsingers)
+
+15. SOLR-1150: Load Documents for Highlighting one at a time rather than
+ all at once to avoid OOM with many large Documents. (Siddharth Gargate via Mark Miller)
+
+16. SOLR-1353: Implement and use reusable token streams for analysis. (Robert Muir, yonik)
+
+17. SOLR-1296: Enables setting IndexReader's termInfosIndexDivisor via a new attribute to StandardIndexReaderFactory. Enables
+ setting termIndexInterval to IndexWriter via SolrIndexConfig. (Jason Rutherglen, hossman, gsingers)
+
+18. SOLR-846: DIH: Reduce memory consumption during delta import by removing
+ keys when used (Ricky Leung, Noble Paul via shalin)
+
+19. SOLR-974: DataImportHandler skips commit if no data has been updated.
+ (Wojtek Piaseczny, shalin)
+
+20. SOLR-1004: DIH: Check for abort more frequently during delta-imports.
+ (Marc Sturlese, shalin)
+
+21. SOLR-1098: DIH DateFormatTransformer can cache the format objects.
+ (Noble Paul via shalin)
+
+22. SOLR-1465: Replaced string concatenations with StringBuilder append
+ calls in DIH XPathRecordReader. (Mark Miller, shalin)
+
+Bug Fixes
+----------------------
+ 1. SOLR-774: Fixed logging level display (Sean Timm via Otis Gospodnetic)
+
+ 2. SOLR-771: CoreAdminHandler STATUS should display 'normalized' paths (koji, hossman, shalin)
+
+ 3. SOLR-532: WordDelimiterFilter now respects payloads and other attributes of the original Token by
+ using Token.clone() (Tricia Williams, gsingers)
+
+ 4. SOLR-805: DisMax queries are not being cached in QueryResultCache (Todd Feak via koji)
+
+ 5. SOLR-751: WordDelimiterFilter didn't adjust the start offset of single
+ tokens that started with delimiters, leading to incorrect highlighting.
+ (Stefan Oestreicher via yonik)
+
+ 7. SOLR-843: SynonymFilterFactory cannot handle multiple synonym files correctly (koji)
+
+ 8. SOLR-840: BinaryResponseWriter does not handle incompatible data in fields (Noble Paul via shalin)
+
+ 9. SOLR-803: CoreAdminRequest.createCore fails because name parameter isn't set (Sean Colombo via ryan)
+
+10. SOLR-869: Fix file descriptor leak in SolrResourceLoader#getLines (Mark Miller, shalin)
+
+11. SOLR-872: Better error message for incorrect copyField destination (Noble Paul via shalin)
+
+12. SOLR-879: Enable position increments in the query parser and fix the
+ example schema to enable position increments for the stop filter in
+ both the index and query analyzers to fix the bug with phrase queries
+ with stopwords. (yonik)
+
+13. SOLR-836: Add missing "a" to the example stopwords.txt (yonik)
+
+14. SOLR-892: Fix serialization of booleans for PHPSerializedResponseWriter
+ (yonik)
+
+15. SOLR-898: Fix null pointer exception for the JSON response writer
+ based formats when nl.json=arrarr with null keys. (yonik)
+
+16. SOLR-901: FastOutputStream ignores write(byte[]) call. (Noble Paul via shalin)
+
+17. SOLR-807: BinaryResponseWriter writes fieldType.toExternal if it is not a supported type,
+ otherwise it writes fieldType.toObject. This fixes the bug with encoding/decoding UUIDField.
+ (koji, Noble Paul, shalin)
+
+18. SOLR-863: SolrCore.initIndex should close the directory it gets for clearing the lock and
+ use the DirectoryFactory. (Mark Miller via shalin)
+
+19. SOLR-802: Fix a potential null pointer error in the distributed FacetComponent
+ (David Bowen via ryan)
+
+20. SOLR-346: Use perl regex to improve accuracy of finding latest snapshot in snapinstaller (billa)
+
+21. SOLR-830: Use perl regex to improve accuracy of finding latest snapshot in snappuller (billa)
+
+22. SOLR-897: Fixed Argument list too long error when there are lots of snapshots/backups (Dan Rosher via billa)
+
+23. SOLR-925: Fixed highlighting on fields with multiValued="true" and termOffsets="true" (koji)
+
+24. SOLR-902: FastInputStream#read(byte b[], int off, int len) gives incorrect results when amount left to read is less
+ than buffer size (Noble Paul via shalin)
+
+25. SOLR-978: Old files are not removed from slaves after replication (Jaco, Noble Paul, shalin)
+
+26. SOLR-883: Implicit properties are not set for Cores created through CoreAdmin (Noble Paul via shalin)
+
+27. SOLR-991: Better error message when parsing solrconfig.xml fails due to malformed XML. Error message notes the name
+ of the file being parsed. (Michael Henson via shalin)
+
+28. SOLR-1008: Fix stats.jsp XML encoding for <stat> item entries with ampersands in their names. (ehatcher)
+
+29. SOLR-976: deleteByQuery is ignored when deleteById is placed prior to deleteByQuery in a <delete>.
+ Now both delete by id and delete by query can be specified at the same time as follows.
+ <delete>
+ <id>05991</id><id>06000</id>
+ <query>office:Bridgewater</query><query>office:Osaka</query>
+ </delete>
+ (koji)
+
+30. SOLR-1016: HTTP 503 error changes 500 in SolrCore (koji)
+
+31. SOLR-1015: Incomplete information in replication admin page and http command response when server
+ is both master and slave i.e. when server is a repeater (Akshay Ukey via shalin)
+
+32. SOLR-1018: Slave is unable to replicate when server acts as repeater (as both master and slave)
+ (Akshay Ukey, Noble Paul via shalin)
+
+33. SOLR-1031: Fix XSS vulnerability in schema.jsp (Paul Lovvik via ehatcher)
+
+34. SOLR-1064: registry.jsp incorrectly displaying info for last core initialized
+ regardless of what the current core is. (hossman)
+
+35. SOLR-1072: absolute paths used in sharedLib attribute were
+ incorrectly treated as relative paths. (hossman)
+
+36. SOLR-1104: Fix some rounding errors in LukeRequestHandler's histogram (hossman)
+
+37. SOLR-1125: Use query analyzer rather than index analyzer for queryFieldType in QueryElevationComponent
+ (koji)
+
+38. SOLR-1126: Replicated files have incorrect timestamp (Jian Han Guo, Jeff Newburn, Noble Paul via shalin)
+
+39. SOLR-1094: Incorrect value of correctlySpelled attribute in some cases (David Smiley, Mark Miller via shalin)
+
+40. SOLR-965: Better error message when <pingQuery> is not configured.
+ (Mark Miller via hossman)
+
+41. SOLR-1135: Java replication creates Snapshot in the directory where Solr was launched (Jianhan Guo via shalin)
+
+42. SOLR-1138: Query Elevation Component now gracefully handles missing queries. (gsingers)
+
+43. SOLR-929: LukeRequestHandler should return "dynamicBase" only if the field is dynamic.
+ (Peter Wolanin, koji)
+
+44. SOLR-1141: NullPointerException during snapshoot command in java based replication (Jian Han Guo, shalin)
+
+45. SOLR-1078: Fixes to WordDelimiterFilter to avoid splitting or dropping
+ international non-letter characters such as non spacing marks. (yonik)
+
+46. SOLR-825, SOLR-1221: Enables highlighting for range/wildcard/fuzzy/prefix queries if using hl.usePhraseHighlighter=true
+ and hl.highlightMultiTerm=true. Also make both options default to true. (Mark Miller, yonik)
+
+47. SOLR-1174: Fix Logging admin form submit url for multicore. (Jacob Singh via shalin)
+
+48. SOLR-1182: Fix bug in OrdFieldSource#equals which could cause a bug with OrdFieldSource caching
+ on OrdFieldSource#hashcode collisions. (Mark Miller)
+
+49. SOLR-1207: equals method should compare this and other of DocList in DocSetBase (koji)
+
+50. SOLR-1242: Human readable JVM info from system handler does integer cutoff rounding, even when dealing
+ with GB. Fixed to round to one decimal place. (Jay Hill, Mark Miller)
+
+51. SOLR-1243: Admin RequestHandlers should not be cached over HTTP. (Mark Miller)
+
+52. SOLR-1260: Fix implementations of set operations for DocList subclasses
+ and fix a bug in HashDocSet construction when offset != 0. These bugs
+ never manifested in normal Solr use and only potentially affect
+ custom code. (yonik)
+
+53. SOLR-1171: Fix LukeRequestHandler so it doesn't rely on SolrQueryParser
+ and report incorrect stats when field names contain characters
+ SolrQueryParser considers special.
+ (hossman)
+
+54. SOLR-1317: Fix CapitalizationFilterFactory to work when keep parameter is not specified.
+ (ehatcher)
+
+55. SOLR-1342: CapitalizationFilterFactory uses incorrect term length calculations.
+ (Robert Muir via Mark Miller)
+
+56. SOLR-1359: DoubleMetaphoneFilter didn't index original tokens if there was no
+ alternative, and could incorrectly skip or reorder tokens. (yonik)
+
+57. SOLR-1360: Prevent PhoneticFilter from producing duplicate tokens. (yonik)
+
+58. SOLR-1371: LukeRequestHandler/schema.jsp errored if schema had no
+ uniqueKey field. The new test for this also (hopefully) adds some
+ future proofing against similar bugs in the future. As a side
+ effect QueryElevationComponentTest was refactored, and a bug in
+ that test was found. (hossman)
+
+59. SOLR-914: General finalize() improvements. No finalizer delegates
+ to the respective close/destroy method w/o first checking if it's
+ already been closed/destroyed; if it hasn't a, SEVERE error is
+ logged first. (noble, hossman)
+
+60. SOLR-1362: WordDelimiterFilter had inconsistent behavior when setting
+ the position increment of tokens following a token consisting of all
+ delimiters, and could additionally lose big position increments.
+ (Robert Muir, yonik)
+
+61. SOLR-1091: Jetty's use of CESU-8 for code points outside the BMP
+ resulted in invalid output from the serialized PHP writer. (yonik)
+
+62. SOLR-1103: LukeRequestHandler (and schema.jsp) have been fixed to
+ include the "1" (ie: 2**0) bucket in the term histogram data.
+ (hossman)
+
+63. SOLR-1398: Add offset corrections in PatternTokenizerFactory.
+ (Anders Melchiorsen, koji)
+
+64. SOLR-1400: Properly handle zero-length tokens in TrimFilter. This
+ was not a bug in any released version. (Peter Wolanin, gsingers)
+
+65. SOLR-1071: spellcheck.extendedResults returns an invalid JSON response
+ when count > 1. To fix, the extendedResults format was changed.
+ (Uri Boness, yonik)
+
+66. SOLR-1381: Fixed improper handling of fields that have only term positions and not term offsets during Highlighting (Thorsten Fischer, gsingers)
+
+67. SOLR-1427: Fixed registry.jsp issue with MBeans (gsingers)
+
+68. SOLR-1468: SolrJ's XML response parsing threw an exception for null
+ names, such as those produced when facet.missing=true (yonik)
+
+69. SOLR-1471: Fixed issue with calculating missing values for facets in single valued cases in Stats Component.
+ This is not correctly calculated for the multivalued case. (James Miller, gsingers)
+
+70. SOLR-1481: Fixed omitHeader parameter for PHP ResponseWriter. (Jun Ohtani via billa)
+
+71. SOLR-1448: Add weblogic.xml to solr webapp to enable correct operation in
+ WebLogic. (Ilan Rabinovitch via yonik)
+
+72. SOLR-1504: empty char mapping can cause ArrayIndexOutOfBoundsException in analysis.jsp and co.
+ (koji)
+
+73. SOLR-1394: HTMLStripCharFilter split tokens that contained entities and
+ often calculated offsets incorrectly for entities.
+ (Anders Melchiorsen via yonik)
+
+74. SOLR-1517: Admin pages could stall waiting for localhost name resolution
+ if reverse DNS wasn't configured; this was changed so the DNS resolution
+ is attempted only once the first time an admin page is loaded.
+ (hossman)
+
+75. SOLR-1529: More than 8 deleteByQuery commands in a single request
+ caused an error to be returned, although the deletes were
+ still executed. (asmodean via yonik)
+
+76. SOLR-800: Deep copy collections to avoid ConcurrentModificationException
+ in XPathEntityprocessor while streaming
+ (Kyle Morrison, Noble Paul via shalin)
+
+77. SOLR-823: Request parameter variables ${dataimporter.request.xxx} are not
+ resolved in DIH (Mck SembWever, Noble Paul, shalin)
+
+78. SOLR-728: Add synchronization to avoid race condition of multiple DIH
+ imports working concurrently (Walter Ferrara, shalin)
+
+79. SOLR-742: Add ability to create dynamic fields with custom
+ DataImportHandler transformers (Wojtek Piaseczny, Noble Paul, shalin)
+
+80. SOLR-832: Rows parameter is not honored in DIH non-debug mode and can
+ abort a running import in debug mode. (Akshay Ukey, shalin)
+
+81. SOLR-838: The DIH VariableResolver obtained from a DataSource's context
+ does not have current data. (Noble Paul via shalin)
+
+82. SOLR-864: DataImportHandler does not catch and log Errors (shalin)
+
+83. SOLR-873: Fix case-sensitive field names and columns (Jon Baer, shalin)
+
+84. SOLR-893: Unable to delete documents via SQL and deletedPkQuery with
+ deltaimport (Dan Rosher via shalin)
+
+85. SOLR-888: DIH DateFormatTransformer cannot convert non-string type
+ (Amit Nithian via shalin)
+
+86. SOLR-841: DataImportHandler should throw exception if a field does not
+ have column attribute (Michael Henson, shalin)
+
+87. SOLR-884: CachedSqlEntityProcessor should check if the cache key is
+ present in the query results (Noble Paul via shalin)
+
+88. SOLR-985: Fix thread-safety issue with DIH TemplateString for concurrent
+ imports with multiple cores. (Ryuuichi Kumai via shalin)
+
+89. SOLR-999: DIH XPathRecordReader fails on XMLs with nodes mixed with
+ CDATA content. (Fergus McMenemie, Noble Paul via shalin)
+
+90. SOLR-1000: DIH FileListEntityProcessor should not apply fileName filter to
+ directory names. (Fergus McMenemie via shalin)
+
+91. SOLR-1009: Repeated column names result in duplicate values.
+ (Fergus McMenemie, Noble Paul via shalin)
+
+92. SOLR-1017: Fix DIH thread-safety issue with last_index_time for concurrent
+ imports in multiple cores due to unsafe usage of SimpleDateFormat by
+ multiple threads. (Ryuuichi Kumai via shalin)
+
+93. SOLR-1024: Calling abort on DataImportHandler import commits data instead
+ of calling rollback. (shalin)
+
+94. SOLR-1037: DIH should not add null values in a row returned by
+ EntityProcessor to documents. (shalin)
+
+95. SOLR-1040: DIH XPathEntityProcessor fails with an xpath like
+ /feed/entry/link[@type='text/html']/@href (Noble Paul via shalin)
+
+96. SOLR-1042: Fix memory leak in DIH by making TemplateString non-static
+ member in VariableResolverImpl (Ryuuichi Kumai via shalin)
+
+97. SOLR-1053: IndexOutOfBoundsException in DIH SolrWriter.getResourceAsString
+ when size of data-config.xml is a multiple of 1024 bytes.
+ (Herb Jiang via shalin)
+
+98. SOLR-1077: IndexOutOfBoundsException with useSolrAddSchema in DIH
+ XPathEntityProcessor. (Sam Keen, Noble Paul via shalin)
+
+99. SOLR-1080: DIH RegexTransformer should not replace if regex is not matched.
+ (Noble Paul, Fergus McMenemie via shalin)
+
+100.SOLR-1090: DataImportHandler should load the data-config.xml using UTF-8
+ encoding. (Rui Pereira, shalin)
+
+101.SOLR-1146: ConcurrentModificationException in DataImporter.getStatusMessages
+ (Walter Ferrara, Noble Paul via shalin)
+
+102.SOLR-1229: Fixes for DIH deletedPkQuery, particularly when using
+ transformed Solr unique id's
+ (Lance Norskog, Noble Paul via ehatcher)
+
+103.SOLR-1286: Fix the IH commit parameter always defaulting to "true" even
+ if "false" is explicitly passed in. (Jay Hill, Noble Paul via ehatcher)
+
+104.SOLR-1323: Reset XPathEntityProcessor's $hasMore/$nextUrl when fetching
+ next URL (noble, ehatcher)
+
+105.SOLR-1450: DIH: Jdbc connection properties such as batchSize are not
+ applied if the driver jar is placed in solr_home/lib.
+ (Steve Sun via shalin)
+
+106.SOLR-1474: DIH Delta-import should run even if last_index_time is not set.
+ (shalin)
+
+
+Other Changes
+----------------------
+ 1. Upgraded to Lucene 2.4.0 (yonik)
+
+ 2. SOLR-805: Upgraded to Lucene 2.9-dev (r707499) (koji)
+
+ 3. DumpRequestHandler (/debug/dump): changed 'fieldName' to 'sourceInfo'. (ehatcher)
+
+ 4. SOLR-852: Refactored common code in CSVRequestHandler and XMLUpdateRequestHandler (gsingers, ehatcher)
+
+ 5. SOLR-871: Removed dependency on stax-utils.jar. If you using solr.jar and running
+ java 6, you can also remove woodstox and geronimo. (ryan)
+
+ 6. SOLR-465: Upgraded to Lucene 2.9-dev (r719351) (shalin)
+
+ 7. SOLR-889: Upgraded to commons-io-1.4.jar and commons-fileupload-1.2.1.jar (ryan)
+
+ 8. SOLR-875: Upgraded to Lucene 2.9-dev (r723985) and consolidated the BitSet implementations (Michael Busch, gsingers)
+
+ 9. SOLR-819: Upgraded to Lucene 2.9-dev (r724059) to get access to Arabic public constructors (gsingers)
+
+10. SOLR-900: Moved solrj into /src/solrj. The contents of solr-common.jar is now included
+ in the solr-solrj.jar. (ryan)
+
+11. SOLR-924: Code cleanup: make all existing finalize() methods call
+ super.finalize() in a finally block. All current instances extend
+ Object, so this doesn't fix any bugs, but helps protect against
+ future changes. (Kay Kay via hossman)
+
+12. SOLR-885: NamedListCodec is renamed to JavaBinCodec and returns Object instead of NamedList.
+ (Noble Paul, yonik via shalin)
+
+13. SOLR-84: Use new Solr logo in admin (Michiel via koji)
+
+14. SOLR-981: groupId for Woodstox dependency in maven solrj changed to org.codehaus.woodstox (Tim Taranov via shalin)
+
+15. Upgraded to Lucene 2.9-dev r738218 (yonik)
+
+16. SOLR-959: Refactored TestReplicationHandler to remove hardcoded port numbers (hossman, Akshay Ukey via shalin)
+
+17. Upgraded to Lucene 2.9-dev r742220 (yonik)
+
+18. SOLR-1022: Better "ignored" field in example schema.xml (Peter Wolanin via hossman)
+
+19. SOLR-967: New type-safe constructor for NamedList (Kay Kay via hossman)
+
+20. SOLR-1036: Change default QParser from "lucenePlusSort" to "lucene" to
+ reduce confusion of semicolon splitting behavior when no sort param is
+ specified (hossman)
+
+21. Upgraded to Lucene 2.9-dev r752164 (shalin)
+
+22. SOLR-1068: Use fsync on replicated index and configuration files (yonik, Noble Paul, shalin)
+
+23. SOLR-952: Cleanup duplicated code in deprecated HighlightingUtils (hossman)
+
+24. Upgraded to Lucene 2.9-dev r764281 (shalin)
+
+25. SOLR-1079: Rename omitTf to omitTermFreqAndPositions (shalin)
+
+26. SOLR-804: Added Lucene's misc contrib JAR (rev 764281). (gsingers)
+
+27. Upgraded to Lucene 2.9-dev r768228 (shalin)
+
+28. Upgraded to Lucene 2.9-dev r768336 (shalin)
+
+29. SOLR-997: Wait for a longer time for slave to complete replication in TestReplicationHandler
+ (Mark Miller via shalin)
+
+30. SOLR-748: FacetComponent helper classes are made public as an experimental API.
+ (Wojtek Piaseczny via shalin)
+
+31. Upgraded to Lucene 2.9-dev 773862 (Mark Miller)
+
+32. Upgraded to Lucene 2.9-dev r776177 (shalin)
+
+33. SOLR-1149: Made QParserPlugin and related classes extendible as an experimental API.
+ (Kaktu Chakarabati via shalin)
+
+34. Upgraded to Lucene 2.9-dev r779312 (yonik)
+
+35. SOLR-786: Refactor DisMaxQParser to allow overriding certain features of DisMaxQParser
+ (Wojciech Biela via shalin)
+
+36. SOLR-458: Add equals and hashCode methods to NamedList (Stefan Rinner, shalin)
+
+37. SOLR-1184: Add option in solrconfig to open a new IndexReader rather than
+ using reopen. Done mainly as a fail-safe in the case that a user runs into
+ a reopen bug/issue. (Mark Miller)
+
+38. SOLR-1215 use double quotes to enclose attributes in solr.xml (noble)
+
+39. SOLR-1151: add dynamic copy field and maxChars example to example schema.xml.
+ (Peter Wolanin, Mark Miller)
+
+40. SOLR-1233: remove /select?qt=/whatever restriction on /-prefixed request handlers.
+ (ehatcher)
+
+41. SOLR-1257: logging.jsp has been removed and now passes through to the
+ hierarchical log level tool added in Solr 1.3. Users still
+ hitting "/admin/logging.jsp" should switch to "/admin/logging".
+ (hossman)
+
+42. Upgraded to Lucene 2.9-dev r794238. Other changes include:
+ - LUCENE-1614 - Use Lucene's DocIdSetIterator.NO_MORE_DOCS as the sentinel value.
+ - LUCENE-1630 - Add acceptsDocsOutOfOrder method to Collector implementations.
+ - LUCENE-1673, LUCENE-1701 - Trie has moved to Lucene core and renamed to NumericRangeQuery.
+ - LUCENE-1662, LUCENE-1687 - Replace usage of ExtendedFieldCache by FieldCache.
+ (shalin)
+
+42. SOLR-1241: Solr's CharFilter has been moved to Lucene. Remove CharFilter and related classes
+ from Solr and use Lucene's corresponding code (koji via shalin)
+
+43. SOLR-1261: Lucene trunk renamed RangeQuery & Co to TermRangeQuery (Uwe Schindler via shalin)
+
+44. Upgraded to Lucene 2.9-dev r801856 (Mark Miller)
+
+45. SOLR-1276: Added StatsComponentTest (Rafał Kuć, gsingers)
+
+46. SOLR-1377: The TokenizerFactory API has changed to explicitly return a Tokenizer
+ rather then a TokenStream (that may be or may not be a Tokenizer). This change
+ is required to take advantage of the Token reuse improvements in lucene 2.9. (ryan)
+
+47. SOLR-1410: Log a warning if the deprecated charset option is used
+ on GreekLowerCaseFilterFactory, RussianStemFilterFactory,
+ RussianLowerCaseFilterFactory or RussianLetterTokenizerFactory.
+ (Robert Muir via hossman)
+
+48. SOLR-1423: Due to LUCENE-1906, Solr's tokenizer should use Tokenizer.correctOffset() instead of CharStream.correctOffset().
+ (Uwe Schindler via koji)
+
+49. SOLR-1319, SOLR-1345: Upgrade Solr Highlighter classes to new Lucene Highlighter API. This upgrade has
+ resulted in a back compat break in the DefaultSolrHighlighter class - getQueryScorer is no longer
+ protected. If you happened to be overriding that method in custom code, overide getHighlighter instead.
+ Also, HighlightingUtils#getQueryScorer has been removed as it was deprecated and backcompat has been
+ broken with it anyway. (Mark Miller)
+
+50. SOLR-1357 SolrInputDocument cannot process dynamic fields (Lars Grote via noble)
+
+51. SOLR-1075: Upgrade to Tika 0.3. See http://www.apache.org/dist/lucene/tika/CHANGES-0.3.txt (gsingers)
+
+52. SOLR-1310: Upgrade to Tika 0.4. Note there are some differences in
+ detecting Languages now in extracting request handler.
+ See http://www.lucidimagination.com/search/document/d6f1899a85b2a45c/vote_apache_tika_0_4_release_candidate_2#d6f1899a85b2a45c
+ for discussion on language detection.
+ See http://www.apache.org/dist/lucene/tika/CHANGES-0.4.txt. (gsingers)
+
+53. SOLR-782: DIH: Refactored SolrWriter to make it a concrete class and
+ removed wrappers over SolrInputDocument. Refactored to load Evaluators
+ lazily. Removed multiple document nodes in the configuration xml. Removed
+ support for 'default' variables, they are automatically available as
+ request parameters. (Noble Paul via shalin)
+
+54. SOLR-964: DIH: XPathEntityProcessor now ignores DTD validations
+ (Fergus McMenemie, Noble Paul via shalin)
+
+55. SOLR-1029: DIH: Standardize Evaluator parameter parsing and added helper
+ functions for parsing all evaluator parameters in a standard way.
+ (Noble Paul, shalin)
+
+56. SOLR-1081: Change DIH EventListener to be an interface so that components
+ such as an EntityProcessor or a Transformer can act as an event listener.
+ (Noble Paul, shalin)
+
+57. SOLR-1027: DIH: Alias the 'dataimporter' namespace to a shorter name 'dih'.
+ (Noble Paul via shalin)
+
+58. SOLR-1084: Better error reporting when DIH entity name is a reserved word
+ and data-config.xml root node is not <dataConfig>.
+ (Noble Paul via shalin)
+
+59. SOLR-1087: Deprecate 'where' attribute in CachedSqlEntityProcessor in
+ favor of cacheKey and cacheLookup. (Noble Paul via shalin)
+
+60. SOLR-969: Change the FULL_DUMP, DELTA_DUMP, FIND_DELTA constants in DIH
+ Context to String. Change Context.currentProcess() to return a string
+ instead of an integer. (Kay Kay, Noble Paul, shalin)
+
+61. SOLR-1120: Simplified DIH EntityProcessor API by moving logic for applying
+ transformers and handling multi-row outputs from Transformers into an
+ EntityProcessorWrapper class. The behavior of the method
+ EntityProcessor#destroy has been modified to be called once per parent-row
+ at the end of row. A new method EntityProcessor#close is added which is
+ called at the end of import. A new method
+ Context#getResolvedEntityAttribute is added which returns the resolved
+ value of an entity's attribute. Introduced a DocWrapper which takes care
+ of maintaining document level session variables.
+ (Noble Paul, shalin)
+
+62. SOLR-1265: Add DIH variable resolving for URLDataSource properties like
+ baseUrl. (Chris Eldredge via ehatcher)
+
+63. SOLR-1269: Better error messages from DIH JdbcDataSource when JDBC Driver
+ name or SQL is incorrect. (ehatcher, shalin)
+
+
+Build
+----------------------
+ 1. SOLR-776: Added in ability to sign artifacts via Ant for releases (gsingers)
+
+ 2. SOLR-854: Added run-example target (Mark Miller via ehatcher)
+
+ 3. SOLR-1054:Fix dist-src target for DataImportHandler (Ryuuichi Kumai via shalin)
+
+ 4. SOLR-1219: Added proxy.setup target (koji)
+
+ 5. SOLR-1386: In build.xml, use longfile="gnu" in tar task to avoid warnings about long file names
+ (Mark Miller via shalin)
+
+ 6. SOLR-1441: Make it possible to run all tests in a package (shalin)
+
+
+Documentation
+----------------------
+ 1. SOLR-789: The javadoc of RandomSortField is not readable (Nicolas Lalevée via koji)
+
+ 2. SOLR-962: Note about null handling in ModifiableSolrParams.add javadoc
+ (Kay Kay via hossman)
+
+ 3. SOLR-1409: Added Solr Powered By Logos
+
+ 4. SOLR-1369: Add HSQLDB Jar to example-DIH, unzip database and update
+ instructions.
+
+
+================== Release 1.3.0 ==================
+
+Upgrading from Solr 1.2
+-----------------------
+IMPORTANT UPGRADE NOTE: In a master/slave configuration, all searchers/slaves
+should be upgraded before the master! If the master were to be updated
+first, the older searchers would not be able to read the new index format.
+
+The Porter snowball based stemmers in Lucene were updated (LUCENE-1142),
+and are not guaranteed to be backward compatible at the index level
+(the stem of certain words may have changed). Re-indexing is recommended.
+
+Older Apache Solr installations can be upgraded by replacing
+the relevant war file with the new version. No changes to configuration
+files should be needed.
+
+This version of Solr contains a new version of Lucene implementing
+an updated index format. This version of Solr/Lucene can still read
+and update indexes in the older formats, and will convert them to the new
+format on the first index change. Be sure to backup your index before
+upgrading in case you need to downgrade.
+
+Solr now recognizes HTTP Request headers related to HTTP Caching (see
+RFC 2616 sec13) and will by default respond with "304 Not Modified"
+when appropriate. This should only affect users who access Solr via
+an HTTP Cache, or via a Web-browser that has an internal cache, but if
+you wish to suppress this behavior an '<httpCaching never304="true"/>'
+option can be added to your solrconfig.xml. See the wiki (or the
+example solrconfig.xml) for more details...
+ http://wiki.apache.org/solr/SolrConfigXml#HTTPCaching
+
+In Solr 1.2, DateField did not enforce the canonical representation of
+the ISO 8601 format when parsing incoming data, and did not generation
+the canonical format when generating dates from "Date Math" strings
+(particularly as it pertains to milliseconds ending in trailing zeros).
+As a result equivalent dates could not always be compared properly.
+This problem is corrected in Solr 1.3, but DateField users that might
+have been affected by indexing inconsistent formats of equivalent
+dates (ie: 1995-12-31T23:59:59Z vs 1995-12-31T23:59:59.000Z) may want
+to consider reindexing to correct these inconsistencies. Users who
+depend on some of the the "broken" behavior of DateField in Solr 1.2
+(specificly: accepting any input that ends in a 'Z') should consider
+using the LegacyDateField class as a possible alternative. Users that
+desire 100% backwards compatibility should consider using the Solr 1.2
+version of DateField.
+
+Due to some changes in the lifecycle of TokenFilterFactories, users of
+Solr 1.2 who have written Java code which constructs new instances of
+StopFilterFactory, SynonymFilterFactory, or EnglishProterFilterFactory
+will need to modify their code by adding a line like the following
+prior to using the factory object...
+ factory.inform(SolrCore.getSolrCore().getSolrConfig().getResourceLoader());
+These lifecycle changes do not affect people who use Solr "out of the
+box" or who have developed their own TokenFilterFactory plugins. More
+info can be found in SOLR-594.
+
+The python client that used to ship with Solr is no longer included in
+the distribution (see client/python/README.txt).
+
+Detailed Change List
+--------------------
+
+New Features
+ 1. SOLR-69: Adding MoreLikeThisHandler to search for similar documents using
+ lucene contrib/queries MoreLikeThis. MoreLikeThis is also available from
+ the StandardRequestHandler using ?mlt=true. (bdelacretaz, ryan)
+
+ 2. SOLR-253: Adding KeepWordFilter and KeepWordFilterFactory. A TokenFilter
+ that keeps tokens with text in the registered keeplist. This behaves like
+ the inverse of StopFilter. (ryan)
+
+ 3. SOLR-257: WordDelimiterFilter has a new parameter splitOnCaseChange,
+ which can be set to 0 to disable splitting "PowerShot" => "Power" "Shot".
+ (klaas)
+
+ 4. SOLR-193: Adding SolrDocument and SolrInputDocument to represent documents
+ outside of the lucene Document infrastructure. This class will be used
+ by clients and for processing documents. (ryan)
+
+ 5. SOLR-244: Added ModifiableSolrParams - a SolrParams implementation that
+ help you change values after initialization. (ryan)
+
+ 6. SOLR-20: Added a java client interface with two implementations. One
+ implementation uses commons httpclient to connect to solr via HTTP. The
+ other connects to solr directly. Check client/java/solrj. This addition
+ also includes tests that start jetty and test a connection using the full
+ HTTP request cycle. (Darren Erik Vengroff, Will Johnson, ryan)
+
+ 7. SOLR-133: Added StaxUpdateRequestHandler that uses StAX for XML parsing.
+ This implementation has much better error checking and lets you configure
+ a custom UpdateRequestProcessor that can selectively process update
+ requests depending on the request attributes. This class will likely
+ replace XmlUpdateRequestHandler. (Thorsten Scherler, ryan)
+
+ 8. SOLR-264: Added RandomSortField, a utility field with a random sort order.
+ The seed is based on a hash of the field name, so a dynamic field
+ of this type is useful for generating different random sequences.
+ This field type should only be used for sorting or as a value source
+ in a FunctionQuery (ryan, hossman, yonik)
+
+ 9. SOLR-266: Adding show=schema to LukeRequestHandler to show the parsed
+ schema fields and field types. (ryan)
+
+10. SOLR-133: The UpdateRequestHandler now accepts multiple delete options
+ within a single request. For example, sending:
+ <delete><id>1</id><id>2</id></delete> will delete both 1 and 2. (ryan)
+
+11. SOLR-269: Added UpdateRequestProcessor plugin framework. This provides
+ a reasonable place to process documents after they are parsed and
+ before they are committed to the index. This is a good place for custom
+ document manipulation or document based authorization. (yonik, ryan)
+
+12. SOLR-260: Converting to a standard PluginLoader framework. This reworks
+ RequestHandlers, FieldTypes, and QueryResponseWriters to share the same
+ base code for loading and initializing plugins. This adds a new
+ configuration option to define the default RequestHandler and
+ QueryResponseWriter in XML using default="true". (ryan)
+
+13. SOLR-225: Enable pluggable highlighting classes. Allow configurable
+ highlighting formatters and Fragmenters. (ryan)
+
+14. SOLR-273/376/452/516: Added hl.maxAnalyzedChars highlighting parameter, defaulting
+ to 50k, hl.alternateField, which allows the specification of a backup
+ field to use as summary if no keywords are matched, and hl.mergeContiguous,
+ which combines fragments if they are adjacent in the source document.
+ (klaas, Grant Ingersoll, Koji Sekiguchi via klaas)
+
+15. SOLR-291: Control maximum number of documents to cache for any entry
+ in the queryResultCache via queryResultMaxDocsCached solrconfig.xml
+ entry. (Koji Sekiguchi via yonik)
+
+16. SOLR-240: New <lockType> configuration setting in <mainIndex> and
+ <indexDefaults> blocks supports all Lucene builtin LockFactories.
+ 'single' is recommended setting, but 'simple' is default for total
+ backwards compatibility.
+ (Will Johnson via hossman)
+
+17. SOLR-248: Added CapitalizationFilterFactory that creates tokens with
+ normalized capitalization. This filter is useful for facet display,
+ but will not work with a prefix query. (ryan)
+ SOLR-468: Change to the semantics to keep the original token, not the
+ token in the Map. Also switched to use Lucene's new reusable token
+ capabilities. (gsingers)
+
+18. SOLR-307: Added NGramFilterFactory and EdgeNGramFilterFactory.
+ (Thomas Peuss via Otis Gospodnetic)
+
+19. SOLR-305: analysis.jsp can be given a fieldtype instead of a field
+ name. (hossman)
+
+20. SOLR-102: Added RegexFragmenter, which splits text for highlighting
+ based on a given pattern. (klaas)
+
+21. SOLR-258: Date Faceting added to SimpleFacets. Facet counts
+ computed for ranges of size facet.date.gap (a DateMath expression)
+ between facet.date.start and facet.date.end. (hossman)
+
+22. SOLR-196: A PHP serialized "phps" response writer that returns a
+ serialized array that can be used with the PHP function unserialize,
+ and a PHP response writer "php" that may be used by eval.
+ (Nick Jenkin, Paul Borgermans, Pieter Berkel via yonik)
+
+23. SOLR-308: A new UUIDField class which accepts UUID string values,
+ as well as the special value of "NEW" which triggers generation of
+ a new random UUID.
+ (Thomas Peuss via hossman)
+
+24. SOLR-349: New FunctionQuery functions: sum, product, div, pow, log,
+ sqrt, abs, scale, map. Constants may now be used as a value source.
+ (yonik)
+
+25. SOLR-359: Add field type className to Luke response, and enabled access
+ to the detailed field information from the solrj client API.
+ (Grant Ingersoll via ehatcher)
+
+26. SOLR-334: Pluggable query parsers. Allows specification of query
+ type and arguments as a prefix on a query string. (yonik)
+
+27. SOLR-351: External Value Source. An external file may be used
+ to specify the values of a field, currently usable as
+ a ValueSource in a FunctionQuery. (yonik)
+
+28. SOLR-395: Many new features for the spell checker implementation, including
+ an extended response mode with much richer output, multi-word spell checking,
+ and a bevy of new and renamed options (see the wiki).
+ (Mike Krimerman, Scott Taber via klaas).
+
+29. SOLR-408: Added PingRequestHandler and deprecated SolrCore.getPingQueryRequest().
+ Ping requests should be configured using standard RequestHandler syntax in
+ solrconfig.xml rather then using the <pingQuery></pingQuery> syntax.
+ (Karsten Sperling via ryan)
+
+30. SOLR-281: Added a 'Search Component' interface and converted StandardRequestHandler
+ and DisMaxRequestHandler to use this framework.
+ (Sharad Agarwal, Henri Biestro, yonik, ryan)
+
+31. SOLR-176: Add detailed timing data to query response output. The SearchHandler
+ interface now returns how long each section takes. (klaas)
+
+32. SOLR-414: Plugin initialization now supports SolrCore and ResourceLoader "Aware"
+ plugins. Plugins that implement SolrCoreAware or ResourceLoaderAware are
+ informed about the SolrCore/ResourceLoader. (Henri Biestro, ryan)
+
+33. SOLR-350: Support multiple SolrCores running in the same solr instance and allows
+ runtime runtime management for any running SolrCore. If a solr.xml file exists
+ in solr.home, this file is used to instanciate multiple cores and enables runtime
+ core manipulation. For more informaion see: http://wiki.apache.org/solr/CoreAdmin
+ (Henri Biestro, ryan)
+
+34. SOLR-447: Added an single request handler that will automatically register all
+ standard admin request handlers. This replaces the need to register (and maintain)
+ the set of admin request handlers. Assuming solrconfig.xml includes:
+ <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+ This will register: Luke/SystemInfo/PluginInfo/ThreadDump/PropertiesRequestHandler.
+ (ryan)
+
+35. SOLR-142: Added RawResponseWriter and ShowFileRequestHandler. This returns config
+ files directly. If AdminHandlers are configured, this will be added automatically.
+ The jsp files /admin/get-file.jsp and /admin/raw-schema.jsp have been deprecated.
+ The deprecated <admin><gettableFiles> will be automatically registered with
+ a ShowFileRequestHandler instance for backwards compatibility. (ryan)
+
+36. SOLR-446: TextResponseWriter can write SolrDocuments and SolrDocumentLists the
+ same way it writes Document and DocList. (yonik, ryan)
+
+37. SOLR-418: Adding a query elevation component. This is an optional component to
+ elevate some documents to the top positions (or exclude them) for a given query.
+ (ryan)
+
+38. SOLR-478: Added ability to get back unique key information from the LukeRequestHandler.
+ (gsingers)
+
+39. SOLR-127: HTTP Caching awareness. Solr now recognizes HTTP Request
+ headers related to HTTP Caching (see RFC 2616 sec13) and will respond
+ with "304 Not Modified" when appropriate. New options have been added
+ to solrconfig.xml to influence this behavior.
+ (Thomas Peuss via hossman)
+
+40. SOLR-303: Distributed Search over HTTP. Specification of shards
+ argument causes Solr to query those shards and merge the results
+ into a single response. Querying, field faceting (sorted only),
+ query faceting, highlighting, and debug information are supported
+ in distributed mode.
+ (Sharad Agarwal, Patrick O'Leary, Sabyasachi Dalal, Stu Hood,
+ Jayson Minard, Lars Kotthoff, ryan, yonik)
+
+41. SOLR-356: Pluggable functions (value sources) that allow
+ registration of new functions via solrconfig.xml
+ (Doug Daniels via yonik)
+
+42. SOLR-494: Added cool admin Ajaxed schema explorer.
+ (Greg Ludington via ehatcher)
+
+43. SOLR-497: Added date faceting to the QueryResponse in SolrJ
+ and QueryResponseTest (Shalin Shekhar Mangar via gsingers)
+
+44. SOLR-486: Binary response format, faster and smaller
+ than XML and JSON response formats (use wt=javabin).
+ BinaryResponseParser for utilizing the binary format via SolrJ
+ and is now the default.
+ (Noble Paul, yonik)
+
+45. SOLR-521: StopFilterFactory support for "enablePositionIncrements"
+ (Walter Ferrara via hossman)
+
+46. SOLR-557: Added SolrCore.getSearchComponents() to return an unmodifiable Map. (gsingers)
+
+47. SOLR-516: Added hl.maxAlternateFieldLength parameter, to set max length for hl.alternateField
+ (Koji Sekiguchi via klaas)
+
+48. SOLR-319: Changed SynonymFilterFactory to "tokenize" synonyms file.
+ To use a tokenizer, specify "tokenizerFactory" attribute in <filter>.
+ For example:
+ <tokenizer class="solr.CJKTokenizerFactory"/>
+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" expand="true"
+ ignoreCase="true" tokenizerFactory="solr.CJKTokenizerFactory"/>
+ (koji)
+
+49. SOLR-515: Added SimilarityFactory capability to schema.xml,
+ making config file parameters usable in the construction of
+ the global Lucene Similarity implementation.
+ (ehatcher)
+
+50. SOLR-536: Add a DocumentObjectBinder to solrj that converts Objects to and
+ from SolrDocuments. (Noble Paul via ryan)
+
+51. SOLR-595: Add support for Field level boosting in the MoreLikeThis Handler.
+ (Tom Morton, gsingers)
+
+52. SOLR-572: Added SpellCheckComponent and org.apache.solr.spelling package to support more spell
+ checking functionality. Also includes ability to add your own SolrSpellChecker implementation that
+ plugs in. See http://wiki.apache.org/solr/SpellCheckComponent for more details
+ (Shalin Shekhar Mangar, Bojan Smid, gsingers)
+
+53. SOLR-679: Added accessor methods to Lucene based spell checkers (gsingers)
+
+54. SOLR-423: Added Request Handler close hook notification so that RequestHandlers can be notified
+ when a core is closing. (gsingers, ryan)
+
+55. SOLR-603: Added ability to partially optimize. (gsingers)
+
+56. SOLR-483: Add byte/short sorting support (gsingers)
+
+57. SOLR-14: Add preserveOriginal flag to WordDelimiterFilter
+ (Geoffrey Young, Trey Hyde, Ankur Madnani, yonik)
+
+58. SOLR-502: Add search timeout support. (Sean Timm via yonik)
+
+59. SOLR-605: Add the ability to register callbacks programatically (ryan, Noble Paul)
+
+60. SOLR-610: hl.maxAnalyzedChars can be -1 to highlight everything (Lars Kotthoff via klaas)
+
+61. SOLR-522: Make analysis.jsp show payloads. (Tricia Williams via yonik)
+
+62. SOLR-611: Expose sort_values returned by QueryComponent in SolrJ's QueryResponse
+ (Dan Rosher via shalin)
+
+63. SOLR-256: Support exposing Solr statistics through JMX (Sharad Agrawal, shalin)
+
+64. SOLR-666: Expose warmup time in statistics for SolrIndexSearcher and LRUCache (shalin)
+
+65. SOLR-663: Allow multiple files for stopwords, keepwords, protwords and synonyms
+ (Otis Gospodnetic, shalin)
+
+66. SOLR-469: Added DataImportHandler as a contrib project which makes indexing data from Databases,
+ XML files and HTTP data sources into Solr quick and easy. Includes API and implementations for
+ supporting multiple data sources, processors and transformers for importing data. Supports full
+ data imports as well as incremental (delta) indexing. See http://wiki.apache.org/solr/DataImportHandler
+ for more details. (Noble Paul, shalin)
+
+67. SOLR-622: SpellCheckComponent supports auto-loading indices on startup and optionally, (re)builds
+ indices on newSearcher event, if configured in solrconfig.xml (shalin)
+
+68. SOLR-554: Hierarchical JDK log level selector for SOLR Admin replaces logging.jsp
+ (Sean Timm via shalin)
+
+69. SOLR-506: Emitting HTTP Cache headers can be enabled or disabled through configuration on a
+ per-handler basis (shalin)
+
+70. SOLR-716: Added support for properties in configuration files. Properties can be specified in
+ solr.xml and can be used in solrconfig.xml and schema.xml (Henri Biestro, hossman, ryan, shalin)
+
+71. SOLR-1129 : Support binding dynamic fields to beans in SolrJ (Avlesh Singh , noble)
+
+72. SOLR-920 : Cache and reuse IndexSchema . A new attribute added in solr.xml called 'shareSchema' (noble)
+
+73. SOLR-700: DIH: Allow configurable locales through a locale attribute in
+ fields for NumberFormatTransformer. (Stefan Oestreicher, shalin)
+
+Changes in runtime behavior
+ 1. SOLR-559: use Lucene updateDocument, deleteDocuments methods. This
+ removes the maxBufferedDeletes parameter added by SOLR-310 as Lucene
+ now manages the deletes. This provides slightly better indexing
+ performance and makes overwrites atomic, eliminating the possibility of
+ a crash causing duplicates. (yonik)
+
+ 2. SOLR-689 / SOLR-695: If you have used "MultiCore" functionality in an unreleased
+ version of 1.3-dev, many classes and configs have been renamed for the official
+ 1.3 release. Speciffically, solr.xml has replaced multicore.xml, and uses a slightly
+ different syntax. The solrj classes: MultiCore{Request/Response/Params} have been
+ renamed: CoreAdmin{Request/Response/Params} (hossman, ryan, Henri Biestro)
+
+ 3. SOLR-647: reference count the SolrCore uses to prevent a premature
+ close while a core is still in use. (Henri Biestro, Noble Paul, yonik)
+
+ 4. SOLR-737: SolrQueryParser now uses a ConstantScoreQuery for wildcard
+ queries that prevent an exception from being thrown when the number
+ of matching terms exceeds the BooleanQuery clause limit. (yonik)
+
+Optimizations
+ 1. SOLR-276: improve JSON writer speed. (yonik)
+
+ 2. SOLR-310: bound and reduce memory usage by providing <maxBufferedDeletes> parameter,
+ which flushes deleted without forcing the user to use <commit/> for this purpose.
+ (klaas)
+
+ 3. SOLR-348: short-circuit faceting if less than mincount docs match. (yonik)
+
+ 4. SOLR-354: Optimize removing all documents. Now when a delete by query
+ of *:* is issued, the current index is removed. (yonik)
+
+ 5. SOLR-377: Speed up response writers. (yonik)
+
+ 6. SOLR-342: Added support into the SolrIndexWriter for using several new features of the new
+ LuceneIndexWriter, including: setRAMBufferSizeMB(), setMergePolicy(), setMergeScheduler.
+ Also, added support to specify Lucene's autoCommit functionality (not to be confused with Solr's
+ similarily named autoCommit functionality) via the <luceneAutoCommit> config. item. See the test
+ and example solrconfig.xml <indexDefaults> section for usage. Performance during indexing should
+ be significantly increased by moving up to 2.3 due to Lucene's new indexing capabilities.
+ Furthermore, the setRAMBufferSizeMB makes it more logical to decide on tuning factors related to
+ indexing. For best performance, leave the mergePolicy and mergeScheduler as the defaults and set
+ ramBufferSizeMB instead of maxBufferedDocs. The best value for this depends on the types of
+ documents in use. 32 should be a good starting point, but reports have shown up to 48 MB provides
+ good results. Note, it is acceptable to set both ramBufferSizeMB and maxBufferedDocs, and Lucene
+ will flush based on whichever limit is reached first. (gsingers)
+
+ 7. SOLR-330: Converted TokenStreams to use Lucene's new char array based
+ capabilities. (gsingers)
+
+ 8. SOLR-624: Only take snapshots if there are differences to the index (Richard Trey Hyde via gsingers)
+
+ 9. SOLR-587: Delete by Query performance greatly improved by using
+ new underlying Lucene IndexWriter implementation. (yonik)
+
+10. SOLR-730: Use read-only IndexReaders that don't synchronize
+ isDeleted(). This will speed up function queries and *:* queries
+ as well as improve their scalability on multi-CPU systems.
+ (Mark Miller via yonik)
+
+Bug Fixes
+ 1. Make TextField respect sortMissingFirst and sortMissingLast fields.
+ (J.J. Larrea via yonik)
+
+ 2. autoCommit/maxDocs was not working properly when large autoCommit/maxTime
+ was specified (klaas)
+
+ 3. SOLR-283: autoCommit was not working after delete. (ryan)
+
+ 4. SOLR-286: ContentStreamBase was not using default encoding for getBytes()
+ (Toru Matsuzawa via ryan)
+
+ 5. SOLR-292: Fix MoreLikeThis facet counting. (Pieter Berkel via ryan)
+
+ 6. SOLR-297: Fix bug in RequiredSolrParams where requiring a field
+ specific param would fail if a general default value had been supplied.
+ (hossman)
+
+ 7. SOLR-331: Fix WordDelimiterFilter handling of offsets for synonyms or
+ other injected tokens that can break highlighting. (yonik)
+
+ 8. SOLR-282: Snapshooter does not work on Solaris and OS X since the cp command
+ there does not have the -l option. Also updated commit/optimize related
+ scripts to handle both old and new response format. (bill)
+
+ 9. SOLR-294: Logging of elapsed time broken on Solaris because the date command
+ there does not support the %s output format. (bill)
+
+10. SOLR-136: Snappuller - "date -d" and locales don't mix. (Jürgen Hermann via bill)
+
+11. SOLR-333: Changed distributiondump.jsp to use Solr HOME instead of CWD to set path.
+
+12. SOLR-393: Removed duplicate contentType from raw-schema.jsp. (bill)
+
+13. SOLR-413: Requesting a large numbers of documents to be returned (limit)
+ can result in an out-of-memory exception, even for a small index. (yonik)
+
+14. The CSV loader incorrectly threw an exception when given
+ header=true (the default). (ryan, yonik)
+
+15. SOLR-449: the python and ruby response writers are now able to correctly
+ output NaN and Infinity in their respective languages. (klaas)
+
+16. SOLR-42: HTMLStripReader tokenizers now preserve correct source
+ offsets for highlighting. (Grant Ingersoll via yonik)
+
+17. SOLR-481: Handle UnknownHostException in _info.jsp (gsingers)
+
+18. SOLR-324: Add proper support for Long and Doubles in sorting, etc. (gsingers)
+
+19. SOLR-496: Cache-Control max-age changed to Long so Expires
+ calculation won't cause overflow. (Thomas Peuss via hossman)
+
+20. SOLR-535: Fixed typo (Tokenzied -> Tokenized) in schema.jsp (Thomas Peuss via billa)
+
+21. SOLR-529: Better error messages from SolrQueryParser when field isn't
+ specified and there is no defaultSearchField in schema.xml
+ (Lars Kotthoff via hossman)
+
+22. SOLR-530: Better error messages/warnings when parsing schema.xml:
+ field using bogus fieldtype and multiple copyFields to a non-multiValue
+ field. (Shalin Shekhar Mangar via hossman)
+
+23. SOLR-528: Better error message when defaultSearchField is bogus or not
+ indexed. (Lars Kotthoff via hossman)
+
+24. SOLR-533: Fixed tests so they don't use hardcoded port numbers.
+ (hossman)
+
+25. SOLR-400: SolrExceptionTest should now handle using OpenDNS as a DNS provider (gsingers)
+
+26. SOLR-541: Legacy XML update support (provided by SolrUpdateServlet
+ when no RequestHandler is mapped to "/update") now logs error correctly.
+ (hossman)
+
+27. SOLR-267: Changed logging to report number of hits, and also provide a mechanism to add log
+ messages to be output by the SolrCore via a NamedList toLog member variable.
+ (Will Johnson, yseeley, gsingers)
+
+ - SOLR-267: Removed adding values to the HTTP headers in SolrDispatchFilter (gsingers)
+
+28. SOLR-509: Moved firstSearcher event notification to the end of the SolrCore constructor
+ (Koji Sekiguchi via gsingers)
+
+29. SOLR-470, SOLR-552, SOLR-544, SOLR-701: Multiple fixes to DateField
+ regarding lenient parsing of optional milliseconds, and correct
+ formating using the canonical representation. LegacyDateField has
+ been added for people who have come to depend on the existing
+ broken behavior. (hossman, Stefan Oestreicher)
+
+30. SOLR-539: Fix for non-atomic long counters and a cast fix to avoid divide
+ by zero. (Sean Timm via Otis Gospodnetic)
+
+31. SOLR-514: Added explicit media-type with UTF* charset to *.xsl files that
+ don't already have one. (hossman)
+
+32. SOLR-505: Give RequestHandlers the possiblity to suppress the generation
+ of HTTP caching headers. (Thomas Peuss via Otis Gospodnetic)
+
+33. SOLR-553: Handle highlighting of phrase terms better when
+ hl.usePhraseHighligher=true URL param is used.
+ (Bojan Smid via Otis Gospodnetic)
+
+34. SOLR-590: Limitation in pgrep on Linux platform breaks script-utils fixUser.
+ (Hannes Schmidt via billa)
+
+35. SOLR-597: SolrServlet no longer "caches" SolrCore. This was causing
+ problems in Resin, and could potentially cause problems for customized
+ usages of SolrServlet.
+
+36. SOLR-585: Now sets the QParser on the ResponseBuilder (gsingers)
+
+37. SOLR-604: If the spellchecking path is relative, make it relative to the Solr Data Directory.
+ (Shalin Shekhar Mangar via gsingers)
+
+38. SOLR-584: Make stats.jsp and stats.xsl more robust.
+ (Yousef Ourabi and hossman)
+
+39. SOLR-443: SolrJ: Declare UTF-8 charset on POSTed parameters
+ to avoid problems with servlet containers that default to latin-1
+ and allow switching of the exact POST mechanism for parameters
+ via useMultiPartPost in CommonsHttpSolrServer.
+ (Lars Kotthoff, Andrew Schurman, ryan, yonik)
+
+40. SOLR-556: multi-valued fields always highlighted in disparate snippets
+ (Lars Kotthoff via klaas)
+
+41. SOLR-501: Fix admin/analysis.jsp UTF-8 input for some other servlet
+ containers such as Tomcat. (Hiroaki Kawai, Lars Kotthoff via yonik)
+
+42. SOLR-616: SpellChecker accuracy configuration is not applied for FileBasedSpellChecker.
+ Apply it for FileBasedSpellChecker and IndexBasedSpellChecker both.
+ (shalin)
+
+43. SOLR-648: SpellCheckComponent throws NullPointerException on using spellcheck.q request
+ parameter after restarting Solr, if reload is called but build is not called.
+ (Jonathan Lee, shalin)
+
+44. SOLR-598: DebugComponent now always occurs last in the SearchHandler list unless the
+ components are explicitly declared. (gsingers)
+
+45. SOLR-676: DataImportHandler should use UpdateRequestProcessor API instead of directly
+ using UpdateHandler. (shalin)
+
+46. SOLR-696: Fixed bug in NamedListCodec in regards to serializing Iterable objects. (gsingers)
+
+47. SOLR-669: snappuler fix for FreeBSD/Darwin (Richard "Trey" Hyde via Otis Gospodnetic)
+
+48. SOLR-606: Fixed spell check collation offset issue. (Stefan Oestreicher , Geoffrey Young, gsingers)
+
+49. SOLR-589: Improved handling of badly formated query strings (Sean Timm via Otis Gospodnetic)
+
+50. SOLR-749: Allow QParser and ValueSourceParsers to be extended with same name (hossman, gsingers)
+
+51. SOLR-704: DIH NumberFormatTransformer can silently ignore part of the
+ string while parsing. Now it tries to use the complete string for parsing.
+ Failure to do so will result in an exception.
+ (Stefan Oestreicher via shalin)
+
+52. SOLR-729: DIH Context.getDataSource(String) gives current entity's
+ DataSource instance regardless of argument. (Noble Paul, shalin)
+
+53. SOLR-726: DIH: Jdbc Drivers and DataSources fail to load if placed in
+ multicore sharedLib or core's lib directory.
+ (Walter Ferrara, Noble Paul, shalin)
+
+Other Changes
+ 1. SOLR-135: Moved common classes to org.apache.solr.common and altered the
+ build scripts to make two jars: apache-solr-1.3.jar and
+ apache-solr-1.3-common.jar. This common.jar can be used in client code;
+ It does not have lucene or junit dependencies. The original classes
+ have been replaced with a @Deprecated extended class and are scheduled
+ to be removed in a later release. While this change does not affect API
+ compatibility, it is recommended to update references to these
+ deprecated classes. (ryan)
+
+ 2. SOLR-268: Tweaks to post.jar so it prints the error message from Solr.
+ (Brian Whitman via hossman)
+
+ 3. Upgraded to Lucene 2.2.0; June 18, 2007.
+
+ 4. SOLR-215: Static access to SolrCore.getSolrCore() and SolrConfig.config
+ have been deprecated in order to support multiple loaded cores.
+ (Henri Biestro via ryan)
+
+ 5. SOLR-367: The create method in all TokenFilter and Tokenizer Factories
+ provided by Solr now declare their specific return types instead of just
+ using "TokenStream" (hossman)
+
+ 6. SOLR-396: Hooks add to build system for automatic generation of (stub)
+ Tokenizer and TokenFilter Factories.
+ Also: new Factories for all Tokenizers and TokenFilters provided by the
+ lucene-analyzers-2.2.0.jar -- includes support for German, Chinese,
+ Russan, Dutch, Greek, Brazilian, Thai, and French. (hossman)
+
+ 7. Upgraded to commons-CSV r609327, which fixes escaping bugs and
+ introduces new escaping and whitespace handling options to
+ increase compatibility with different formats. (yonik)
+
+ 8. Upgraded to Lucene 2.3.0; Jan 23, 2008.
+
+ 9. SOLR-451: Changed analysis.jsp to use POST instead of GET, also made the input area a
+ bit bigger (gsingers)
+
+10. Upgrade to Lucene 2.3.1
+
+11. SOLR-531: Different exit code for rsyncd-start and snappuller if disabled (Thomas Peuss via billa)
+
+12. SOLR-550: Clarified DocumentBuilder addField javadocs (gsingers)
+
+13. Upgrade to Lucene 2.3.2
+
+14. SOLR-518: Changed luke.xsl to use divs w/css for generating histograms
+ instead of SVG (Thomas Peuss via hossman)
+
+15. SOLR-592: Added ShardParams interface and changed several string literals
+ to references to constants in CommonParams.
+ (Lars Kotthoff via Otis Gospodnetic)
+
+16. SOLR-520: Deprecated unused LengthFilter since already core in
+ Lucene-Java (hossman)
+
+17. SOLR-645: Refactored SimpleFacetsTest (Lars Kotthoff via hossman)
+
+18. SOLR-591: Changed Solrj default value for facet.sort to true (Lars Kotthoff via Shalin)
+
+19. Upgraded to Lucene 2.4-dev (r669476) to support SOLR-572 (gsingers)
+
+20. SOLR-636: Improve/simplify example configs; and make index.jsp
+ links more resilient to configs loaded via an InputStream
+ (Lars Kotthoff, hossman)
+
+21. SOLR-682: Scripts now support FreeBSD (Richard Trey Hyde via gsingers)
+
+22. SOLR-489: Added in deprecation comments. (Sean Timm, Lars Kothoff via gsingers)
+
+23. SOLR-692: Migrated to stable released builds of StAX API 1.0.1 and StAX 1.2.0 (shalin)
+24. Upgraded to Lucene 2.4-dev (r686801) (yonik)
+25. Upgraded to Lucene 2.4-dev (r688745) 27-Aug-2008 (yonik)
+26. Upgraded to Lucene 2.4-dev (r691741) 03-Sep-2008 (yonik)
+27. Replaced the StAX reference implementation with the geronimo
+ StAX API jar, and the Woodstox StAX implementation. (yonik)
+
+Build
+ 1. SOLR-411. Changed the names of the Solr JARs to use the defacto standard JAR names based on
+ project-name-version.jar. This yields, for example:
+ apache-solr-common-1.3-dev.jar
+ apache-solr-solrj-1.3-dev.jar
+ apache-solr-1.3-dev.jar
+
+ 2. SOLR-479: Added clover code coverage targets for committers and the nightly build. Requires
+ the Clover library, as licensed to Apache and only available privately. To run:
+ ant -Drun.clover=true clean clover test generate-clover-reports
+
+ 3. SOLR-510: Nightly release includes client sources. (koji)
+
+ 4. SOLR-563: Modified the build process to build contrib projects
+ (Shalin Shekhar Mangar via Otis Gospodnetic)
+
+ 5. SOLR-673: Modify build file to create javadocs for core, solrj, contrib and "all inclusive" (shalin)
+
+ 6. SOLR-672: Nightly release includes contrib sources. (Jeremy Hinegardner, shalin)
+
+ 7. SOLR-586: Added ant target and POM files for building maven artifacts of the Solr core, common,
+ client and contrib. The target can publish artifacts with source and javadocs.
+ (Spencer Crissman, Craig McClanahan, shalin)
+
+================== Release 1.2 ==================
+
+Upgrading from Solr 1.1
+-------------------------------------
+IMPORTANT UPGRADE NOTE: In a master/slave configuration, all searchers/slaves
+should be upgraded before the master! If the master were to be updated
+first, the older searchers would not be able to read the new index format.
+
+Older Apache Solr installations can be upgraded by replacing
+the relevant war file with the new version. No changes to configuration
+files should be needed.
+
+This version of Solr contains a new version of Lucene implementing
+an updated index format. This version of Solr/Lucene can still read
+and update indexes in the older formats, and will convert them to the new
+format on the first index change. One change in the new index format
+is that all "norms" are kept in a single file, greatly reducing the number
+of files per segment. Users of compound file indexes will want to consider
+converting to the non-compound format for faster indexing and slightly better
+search concurrency.
+
+The JSON response format for facets has changed to make it easier for
+clients to retain sorted order. Use json.nl=map explicitly in clients
+to get the old behavior, or add it as a default to the request handler
+in solrconfig.xml
+
+The Lucene based Solr query syntax is slightly more strict.
+A ':' in a field value must be escaped or the whole value must be quoted.
+
+The Solr "Request Handler" framework has been updated in two key ways:
+First, if a Request Handler is registered in solrconfig.xml with a name
+starting with "/" then it can be accessed using path-based URL, instead of
+using the legacy "/select?qt=name" URL structure. Second, the Request
+Handler framework has been extended making it possible to write Request
+Handlers that process streams of data for doing updates, and there is a
+new-style Request Handler for XML updates given the name of "/update" in
+the example solrconfig.xml. Existing installations without this "/update"
+handler will continue to use the old update servlet and should see no
+changes in behavior. For new-style update handlers, errors are now
+reflected in the HTTP status code, Content-type checking is more strict,
+and the response format has changed and is controllable via the wt
+parameter.
+
+
+
+Detailed Change List
+--------------------
+
+New Features
+ 1. SOLR-82: Default field values can be specified in the schema.xml.
+ (Ryan McKinley via hossman)
+
+ 2. SOLR-89: Two new TokenFilters with corresponding Factories...
+ * TrimFilter - Trims leading and trailing whitespace from Tokens
+ * PatternReplaceFilter - applies a Pattern to each token in the
+ stream, replacing match occurances with a specified replacement.
+ (hossman)
+
+ 3. SOLR-91: allow configuration of a limit of the number of searchers
+ that can be warming in the background. This can be used to avoid
+ out-of-memory errors, or contention caused by more and more searchers
+ warming in the background. An error is thrown if the limit specified
+ by maxWarmingSearchers in solrconfig.xml is exceeded. (yonik)
+
+ 4. SOLR-106: New faceting parameters that allow specification of a
+ minimum count for returned facets (facet.mincount), paging through facets
+ (facet.offset, facet.limit), and explicit sorting (facet.sort).
+ facet.zeros is now deprecated. (yonik)
+
+ 5. SOLR-80: Negative queries are now allowed everywhere. Negative queries
+ are generated and cached as their positive counterpart, speeding
+ generation and generally resulting in smaller sets to cache.
+ Set intersections in SolrIndexSearcher are more efficient,
+ starting with the smallest positive set, subtracting all negative
+ sets, then intersecting with all other positive sets. (yonik)
+
+ 6. SOLR-117: Limit a field faceting to constraints with a prefix specified
+ by facet.prefix or f.<field>.facet.prefix. (yonik)
+
+ 7. SOLR-107: JAVA API: Change NamedList to use Java5 generics
+ and implement Iterable<Map.Entry> (Ryan McKinley via yonik)
+
+ 8. SOLR-104: Support for "Update Plugins" -- RequestHandlers that want
+ access to streams of data for doing updates. ContentStreams can come
+ from the raw POST body, multi-part form data, or remote URLs.
+ Included in this change is a new SolrDispatchFilter that allows
+ RequestHandlers registered with names that begin with a "/" to be
+ accessed using a URL structure based on that name.
+ (Ryan McKinley via hossman)
+
+ 9. SOLR-126: DirectUpdateHandler2 supports autocommitting after a specified time
+ (in ms), using <autoCommit><maxTime>10000</maxTime></autoCommit>.
+ (Ryan McKinley via klaas).
+
+10. SOLR-116: IndexInfoRequestHandler added. (Erik Hatcher)
+
+11. SOLR-79: Add system property ${<sys.prop>[:<default>]} substitution for
+ configuration files loaded, including schema.xml and solrconfig.xml.
+ (Erik Hatcher with inspiration from Andrew Saar)
+
+12. SOLR-149: Changes to make Solr more easily embeddable, in addition
+ to logging which request handler handled each request.
+ (Ryan McKinley via yonik)
+
+13. SOLR-86: Added standalone Java-based command-line updater.
+ (Erik Hatcher via Bertrand Delecretaz)
+
+14. SOLR-152: DisMaxRequestHandler now supports configurable alternate
+ behavior when q is not specified. A "q.alt" param can be specified
+ using SolrQueryParser syntax as a mechanism for specifying what query
+ the dismax handler should execute if the main user query (q) is blank.
+ (Ryan McKinley via hossman)
+
+15. SOLR-158: new "qs" (Query Slop) param for DisMaxRequestHandler
+ allows for specifying the amount of default slop to use when parsing
+ explicit phrase queries from the user.
+ (Adam Hiatt via hossman)
+
+16. SOLR-81: SpellCheckerRequestHandler that uses the SpellChecker from
+ the Lucene contrib.
+ (Otis Gospodnetic and Adam Hiatt)
+
+17. SOLR-182: allow lazy loading of request handlers on first request.
+ (Ryan McKinley via yonik)
+
+18. SOLR-81: More SpellCheckerRequestHandler enhancements, inlcluding
+ support for relative or absolute directory path configurations, as
+ well as RAM based directory. (hossman)
+
+19. SOLR-197: New parameters for input: stream.contentType for specifying
+ or overriding the content type of input, and stream.file for reading
+ local files. (Ryan McKinley via yonik)
+
+20. SOLR-66: CSV data format for document additions and updates. (yonik)
+
+21. SOLR-184: add echoHandler=true to responseHeader, support echoParams=all
+ (Ryan McKinley via ehatcher)
+
+22. SOLR-211: Added a regex PatternTokenizerFactory. This extracts tokens
+ from the input string using a regex Pattern. (Ryan McKinley)
+
+23. SOLR-162: Added a "Luke" request handler and other admin helpers.
+ This exposes the system status through the standard requestHandler
+ framework. (ryan)
+
+24. SOLR-212: Added a DirectSolrConnection class. This lets you access
+ solr using the standard request/response formats, but does not require
+ an HTTP connection. It is designed for embedded applications. (ryan)
+
+25. SOLR-204: The request dispatcher (added in SOLR-104) can handle
+ calls to /select. This offers uniform error handling for /update and
+ /select. To enable this behavior, you must add:
+ <requestDispatcher handleSelect="true" > to your solrconfig.xml
+ See the example solrconfig.xml for details. (ryan)
+
+26. SOLR-170: StandardRequestHandler now supports a "sort" parameter.
+ Using the ';' syntax is still supported, but it is recommended to
+ transition to the new syntax. (ryan)
+
+27. SOLR-181: The index schema now supports "required" fields. Attempts
+ to add a document without a required field will fail, returning a
+ descriptive error message. By default, the uniqueKey field is
+ a required field. This can be disabled by setting required=false
+ in schema.xml. (Greg Ludington via ryan)
+
+28. SOLR-217: Fields configured in the schema to be neither indexed or
+ stored will now be quietly ignored by Solr when Documents are added.
+ The example schema has a comment explaining how this can be used to
+ ignore any "unknown" fields.
+ (Will Johnson via hossman)
+
+29. SOLR-227: If schema.xml defines multiple fieldTypes, fields, or
+ dynamicFields with the same name, a severe error will be logged rather
+ then quietly continuing. Depending on the <abortOnConfigurationError>
+ settings, this may halt the server. Likewise, if solrconfig.xml
+ defines multiple RequestHandlers with the same name it will also add
+ an error. (ryan)
+
+30. SOLR-226: Added support for dynamic field as the destination of a
+ copyField using glob (*) replacement. (ryan)
+
+31. SOLR-224: Adding a PhoneticFilterFactory that uses apache commons codec
+ language encoders to build phonetically similar tokens. This currently
+ supports: DoubleMetaphone, Metaphone, Soundex, and RefinedSoundex (ryan)
+
+32. SOLR-199: new n-gram tokenizers available via NGramTokenizerFactory
+ and EdgeNGramTokenizerFactory. (Adam Hiatt via yonik)
+
+33. SOLR-234: TrimFilter can update the Token's startOffset and endOffset
+ if updateOffsets="true". By default the Token offsets are unchanged.
+ (ryan)
+
+34. SOLR-208: new example_rss.xsl and example_atom.xsl to provide more
+ examples for people about the Solr XML response format and how they
+ can transform it to suit different needs.
+ (Brian Whitman via hossman)
+
+35. SOLR-249: Deprecated SolrException( int, ... ) constructors in favor
+ of constructors that takes an ErrorCode enum. This will ensure that
+ all SolrExceptions use a valid HTTP status code. (ryan)
+
+36. SOLR-386: Abstracted SolrHighlighter and moved existing implementation
+ to DefaultSolrHighlighter. Adjusted SolrCore and solrconfig.xml so
+ that highlighter is configurable via a class attribute. Allows users
+ to use their own highlighter implementation. (Tricia Williams via klaas)
+
+Changes in runtime behavior
+ 1. Highlighting using DisMax will only pick up terms from the main
+ user query, not boost or filter queries (klaas).
+
+ 2. SOLR-125: Change default of json.nl to flat, change so that
+ json.nl only affects items where order matters (facet constraint
+ listings). Fix JSON output bug for null values. Internal JAVA API:
+ change most uses of NamedList to SimpleOrderedMap. (yonik)
+
+ 3. A new method "getSolrQueryParser" has been added to the IndexSchema
+ class for retrieving a new SolrQueryParser instance with all options
+ specified in the schema.xml's <solrQueryParser> block set. The
+ documentation for the SolrQueryParser constructor and its use of
+ IndexSchema have also been clarified.
+ (Erik Hatcher and hossman)
+
+ 4. DisMaxRequestHandler's bq, bf, qf, and pf parameters can now accept
+ multiple values (klaas).
+
+ 5. Query are re-written before highlighting is performed. This enables
+ proper highlighting of prefix and wildcard queries (klaas).
+
+ 6. A meaningful exception is raised when attempting to add a doc missing
+ a unique id if it is declared in the schema and allowDups=false.
+ (ryan via klaas)
+
+ 7. SOLR-183: Exceptions with error code 400 are raised when
+ numeric argument parsing fails. RequiredSolrParams class added
+ to facilitate checking for parameters that must be present.
+ (Ryan McKinley, J.J. Larrea via yonik)
+
+ 8. SOLR-179: By default, solr will abort after any severe initialization
+ errors. This behavior can be disabled by setting:
+ <abortOnConfigurationError>false</abortOnConfigurationError>
+ in solrconfig.xml (ryan)
+
+ 9. The example solrconfig.xml maps /update to XmlUpdateRequestHandler using
+ the new request dispatcher (SOLR-104). This requires posted content to
+ have a valid contentType: curl -H 'Content-type:text/xml; charset=utf-8'
+ The response format matches that of /select and returns standard error
+ codes. To enable solr1.1 style /update, do not map "/update" to any
+ handler in solrconfig.xml (ryan)
+
+10. SOLR-231: If a charset is not specified in the contentType,
+ ContentStream.getReader() will use UTF-8 encoding. (ryan)
+
+11. SOLR-230: More options for post.jar to support stdin, xml on the
+ commandline, and defering commits. Tutorial modified to take
+ advantage of these options so there is no need for curl.
+ (hossman)
+
+12. SOLR-128: Upgraded Jetty to the latest stable release 6.1.3 (ryan)
+
+Optimizations
+ 1. SOLR-114: HashDocSet specific implementations of union() and andNot()
+ for a 20x performance improvement for those set operations, and a new
+ hash algorithm speeds up exists() by 10% and intersectionSize() by 8%.
+ (yonik)
+
+ 2. SOLR-115: Solr now uses BooleanQuery.clauses() instead of
+ BooleanQuery.getClauses() in any situation where there is no risk of
+ modifying the original query.
+ (hossman)
+
+ 3. SOLR-221: Speed up sorted faceting on multivalued fields by ~60%
+ when the base set consists of a relatively large portion of the
+ index. (yonik)
+
+ 4. SOLR-221: Added a facet.enum.cache.minDf parameter which avoids
+ using the filterCache for terms that match few documents, trading
+ decreased memory usage for increased query time. (yonik)
+
+Bug Fixes
+ 1. SOLR-87: Parsing of synonym files did not correctly handle escaped
+ whitespace such as \r\n\t\b\f. (yonik)
+
+ 2. SOLR-92: DOMUtils.getText (used when parsing config files) did not
+ work properly with many DOM implementations when dealing with
+ "Attributes". (Ryan McKinley via hossman)
+
+ 3. SOLR-9,SOLR-99: Tighten up sort specification error checking, throw
+ exceptions for missing sort specifications or a sort on a non-indexed
+ field. (Ryan McKinley via yonik)
+
+ 4. SOLR-145: Fix for bug introduced in SOLR-104 where some Exceptions
+ were being ignored by all "out of the box" RequestHandlers. (hossman)
+
+ 5. SOLR-166: JNDI solr.home code refactoring. SOLR-104 moved
+ some JNDI related code to the init method of a Servlet Filter -
+ according to the Servlet Spec, all Filter's should be initialized
+ prior to initializing any Servlets, but this is not the case in at
+ least one Servlet Container (Resin). This "bug fix" refactors
+ this JNDI code so that it should be executed the first time any
+ attempt is made to use the solr.home dir.
+ (Ryan McKinley via hossman)
+
+ 6. SOLR-173: Bug fix to SolrDispatchFilter to reduce "too many open
+ files" problem was that SolrDispatchFilter was not closing requests
+ when finished. Also modified ResponseWriters to only fetch a Searcher
+ reference if necessary for writing out DocLists.
+ (Ryan McKinley via hossman)
+
+ 7. SOLR-168: Fix display positioning of multiple tokens at the same
+ position in analysis.jsp (yonik)
+
+ 8. SOLR-167: The SynonymFilter sometimes generated incorrect offsets when
+ multi token synonyms were mached in the source text. (yonik)
+
+ 9. SOLR-188: bin scripts do not support non-default webapp names. Added "-U"
+ option to specify a full path to the update url, overriding the
+ "-h" (hostname), "-p" (port) and "-w" (webapp name) parameters.
+ (Jeff Rodenburg via billa)
+
+10. SOLR-198: RunExecutableListener always waited for the process to
+ finish, even when wait="false" was set. (Koji Sekiguchi via yonik)
+
+11. SOLR-207: Changed distribution scripts to remove recursive find
+ and avoid use of "find -maxdepth" on platforms where it is not
+ supported. (yonik)
+
+12. SOLR-222: Changing writeLockTimeout in solrconfig.xml did not
+ change the effective timeout. (Koji Sekiguchi via yonik)
+
+13. Changed the SOLR-104 RequestDispatcher so that /select?qt=xxx can not
+ access handlers that start with "/". This makes path based authentication
+ possible for path based request handlers. (ryan)
+
+14. SOLR-214: Some servlet containers (including Tomcat and Resin) do not
+ obey the specified charset. Rather then letting the the container handle
+ it solr now uses the charset from the header contentType to decode posted
+ content. Using the contentType: "text/xml; charset=utf-8" will force
+ utf-8 encoding. If you do not specify a contentType, it will use the
+ platform default. (Koji Sekiguchi via ryan)
+
+15. SOLR-241: Undefined system properties used in configuration files now
+ cause a clear message to be logged rather than an obscure exception thrown.
+ (Koji Sekiguchi via ehatcher)
+
+Other Changes
+ 1. Updated to Lucene 2.1
+
+ 2. Updated to Lucene 2007-05-20_00-04-53
+
+================== Release 1.1.0 ==================
+
+Status
+------
+This is the first release since Solr joined the Incubator, and brings many
+new features and performance optimizations including highlighting,
+faceted browsing, and JSON/Python/Ruby response formats.
+
+
+Upgrading from previous Solr versions
+-------------------------------------
+Older Apache Solr installations can be upgraded by replacing
+the relevant war file with the new version. No changes to configuration
+files are needed and the index format has not changed.
+
+The default version of the Solr XML response syntax has been changed to 2.2.
+Behavior can be preserved for those clients not explicitly specifying a
+version by adding a default to the request handler in solrconfig.xml
+
+By default, Solr will no longer use a searcher that has not fully warmed,
+and requests will block in the meantime. To change back to the previous
+behavior of using a cold searcher in the event there is no other
+warm searcher, see the useColdSearcher config item in solrconfig.xml
+
+The XML response format when adding multiple documents to the collection
+in a single <add> command has changed to return a single <result>.
+
+
+Detailed Change List
+--------------------
+
+New Features
+ 1. added support for setting Lucene's positionIncrementGap
+ 2. Admin: new statistics for SolrIndexSearcher
+ 3. Admin: caches now show config params on stats page
+ 3. max() function added to FunctionQuery suite
+ 4. postOptimize hook, mirroring the functionallity of the postCommit hook,
+ but only called on an index optimize.
+ 5. Ability to HTTP POST query requests to /select in addition to HTTP-GET
+ 6. The default search field may now be overridden by requests to the
+ standard request handler using the df query parameter. (Erik Hatcher)
+ 7. Added DisMaxRequestHandler and SolrPluginUtils. (Chris Hostetter)
+ 8. Support for customizing the QueryResponseWriter per request
+ (Mike Baranczak / SOLR-16 / hossman)
+ 9. Added KeywordTokenizerFactory (hossman)
+10. copyField accepts dynamicfield-like names as the source.
+ (Darren Erik Vengroff via yonik, SOLR-21)
+11. new DocSet.andNot(), DocSet.andNotSize() (yonik)
+12. Ability to store term vectors for fields. (Mike Klaas via yonik, SOLR-23)
+13. New abstract BufferedTokenStream for people who want to write
+ Tokenizers or TokenFilters that require arbitrary buffering of the
+ stream. (SOLR-11 / yonik, hossman)
+14. New RemoveDuplicatesToken - useful in situations where
+ synonyms, stemming, or word-deliminater-ing produce identical tokens at
+ the same position. (SOLR-11 / yonik, hossman)
+15. Added highlighting to SolrPluginUtils and implemented in StandardRequestHandler
+ and DisMaxRequestHandler (SOLR-24 / Mike Klaas via hossman,yonik)
+16. SnowballPorterFilterFactory language is configurable via the "language"
+ attribute, with the default being "English". (Bertrand Delacretaz via yonik, SOLR-27)
+17. ISOLatin1AccentFilterFactory, instantiates ISOLatin1AccentFilter to remove accents.
+ (Bertrand Delacretaz via yonik, SOLR-28)
+18. JSON, Python, Ruby QueryResponseWriters: use wt="json", "python" or "ruby"
+ (yonik, SOLR-31)
+19. Make web admin pages return UTF-8, change Content-type declaration to include a
+ space between the mime-type and charset (Philip Jacob, SOLR-35)
+20. Made query parser default operator configurable via schema.xml:
+ <solrQueryParser defaultOperator="AND|OR"/>
+ The default operator remains "OR".
+21. JAVA API: new version of SolrIndexSearcher.getDocListAndSet() which takes
+ flags (Greg Ludington via yonik, SOLR-39)
+22. A HyphenatedWordsFilter, a text analysis filter used during indexing to rejoin
+ words that were hyphenated and split by a newline. (Boris Vitez via yonik, SOLR-41)
+23. Added a CompressableField base class which allows fields of derived types to
+ be compressed using the compress=true setting. The field type also gains the
+ ability to specify a size threshold at which field data is compressed.
+ (klaas, SOLR-45)
+24. Simple faceted search support for fields (enumerating terms)
+ and arbitrary queries added to both StandardRequestHandler and
+ DisMaxRequestHandler. (hossman, SOLR-44)
+25. In addition to specifying default RequestHandler params in the
+ solrconfig.xml, support has been added for configuring values to be
+ appended to the multi-val request params, as well as for configuring
+ invariant params that can not overridden in the query. (hossman, SOLR-46)
+26. Default operator for query parsing can now be specified with q.op=AND|OR
+ from the client request, overriding the schema value. (ehatcher)
+27. New XSLTResponseWriter does server side XSLT processing of XML Response.
+ In the process, an init(NamedList) method was added to QueryResponseWriter
+ which works the same way as SolrRequestHandler.
+ (Bertrand Delacretaz / SOLR-49 / hossman)
+28. json.wrf parameter adds a wrapper-function around the JSON response,
+ useful in AJAX with dynamic script tags for specifying a JavaScript
+ callback function. (Bertrand Delacretaz via yonik, SOLR-56)
+29. autoCommit can be specified every so many documents added (klaas, SOLR-65)
+30. ${solr.home}/lib directory can now be used for specifying "plugin" jars
+ (hossman, SOLR-68)
+31. Support for "Date Math" relative "NOW" when specifying values of a
+ DateField in a query -- or when adding a document.
+ (hossman, SOLR-71)
+32. useColdSearcher control in solrconfig.xml prevents the first searcher
+ from being used before it's done warming. This can help prevent
+ thrashing on startup when multiple requests hit a cold searcher.
+ The default is "false", preventing use before warm. (yonik, SOLR-77)
+
+Changes in runtime behavior
+ 1. classes reorganized into different packages, package names changed to Apache
+ 2. force read of document stored fields in QuerySenderListener
+ 3. Solr now looks in ./solr/conf for config, ./solr/data for data
+ configurable via solr.solr.home system property
+ 4. Highlighter params changed to be prefixed with "hl."; allow fragmentsize
+ customization and per-field overrides on many options
+ (Andrew May via klaas, SOLR-37)
+ 5. Default param values for DisMaxRequestHandler should now be specified
+ using a '<lst name="defaults">...</lst>' init param, for backwards
+ compatability all init prams will be used as defaults if an init param
+ with that name does not exist. (hossman, SOLR-43)
+ 6. The DisMaxRequestHandler now supports multiple occurances of the "fq"
+ param. (hossman, SOLR-44)
+ 7. FunctionQuery.explain now uses ComplexExplanation to provide more
+ accurate score explanations when composed in a BooleanQuery.
+ (hossman, SOLR-25)
+ 8. Document update handling locking is much sparser, allowing performance gains
+ through multiple threads. Large commits also might be faster (klaas, SOLR-65)
+ 9. Lazy field loading can be enabled via a solrconfig directive. This will be faster when
+ not all stored fields are needed from a document (klaas, SOLR-52)
+10. Made admin JSPs return XML and transform them with new XSL stylesheets
+ (Otis Gospodnetic, SOLR-58)
+11. If the "echoParams=explicit" request parameter is set, request parameters are copied
+ to the output. In an XML output, they appear in new <lst name="params"> list inside
+ the new <lst name="responseHeader"> element, which replaces the old <responseHeader>.
+ Adding a version=2.1 parameter to the request produces the old format, for backwards
+ compatibility (bdelacretaz and yonik, SOLR-59).
+
+Optimizations
+ 1. getDocListAndSet can now generate both a DocList and a DocSet from a
+ single lucene query.
+ 2. BitDocSet.intersectionSize(HashDocSet) no longer generates an intermediate
+ set
+ 3. OpenBitSet completed, replaces BitSet as the implementation for BitDocSet.
+ Iteration is faster, and BitDocSet.intersectionSize(BitDocSet) and unionSize
+ is between 3 and 4 times faster. (yonik, SOLR-15)
+ 4. much faster unionSize when one of the sets is a HashDocSet: O(smaller_set_size)
+ 5. Optimized getDocSet() for term queries resulting in a 36% speedup of facet.field
+ queries where DocSets aren't cached (for example, if the number of terms in the field
+ is larger than the filter cache.) (yonik)
+ 6. Optimized facet.field faceting by as much as 500 times when the field has
+ a single token per document (not multiValued & not tokenized) by using the
+ Lucene FieldCache entry for that field to tally term counts. The first request
+ utilizing the FieldCache will take longer than subsequent ones.
+
+Bug Fixes
+ 1. Fixed delete-by-id for field types who's indexed form is different
+ from the printable form (mainly sortable numeric types).
+ 2. Added escaping of attribute values in the XML response (Erik Hatcher)
+ 3. Added empty extractTerms() to FunctionQuery to enable use in
+ a MultiSearcher (Yonik)
+ 4. WordDelimiterFilter sometimes lost token positionIncrement information
+ 5. Fix reverse sorting for fields were sortMissingFirst=true
+ (Rob Staveley, yonik)
+ 6. Worked around a Jetty bug that caused invalid XML responses for fields
+ containing non ASCII chars. (Bertrand Delacretaz via yonik, SOLR-32)
+ 7. WordDelimiterFilter can throw exceptions if configured with both
+ generate and catenate off. (Mike Klaas via yonik, SOLR-34)
+ 8. Escape '>' in XML output (because ]]> is illegal in CharData)
+ 9. field boosts weren't being applied and doc boosts were being applied to fields (klaas)
+10. Multiple-doc update generates well-formed xml (klaas, SOLR-65)
+11. Better parsing of pingQuery from solrconfig.xml (hossman, SOLR-70)
+12. Fixed bug with "Distribution" page introduced when Versions were
+ added to "Info" page (hossman)
+13. Fixed HTML escaping issues with user input to analysis.jsp and action.jsp
+ (hossman, SOLR-74)
+
+Other Changes
+ 1. Upgrade to Lucene 2.0 nightly build 2006-06-22, lucene SVN revision 416224,
+ http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=markup&pathrev=416224
+ 2. Modified admin styles to improve display in Internet Explorer (Greg Ludington via billa, SOLR-6)
+ 3. Upgrade to Lucene 2.0 nightly build 2006-07-15, lucene SVN revision 422302,
+ 4. Included unique key field name/value (if available) in log message of add (billa, SOLR-18)
+ 5. Updated to Lucene 2.0 nightly build 2006-09-07, SVN revision 462111
+ 6. Added javascript to catch empty query in admin query forms (Tomislav Nakic-Alfirevic via billa, SOLR-48
+ 7. blackslash escape * in ssh command used in snappuller for zsh compatibility, SOLR-63
+ 8. check solr return code in admin scripts, SOLR-62
+ 9. Updated to Lucene 2.0 nightly build 2006-11-15, SVN revision 475069
+10. Removed src/apps containing the legacy "SolrTest" app (hossman, SOLR-3)
+11. Simplified index.jsp and form.jsp, primarily by removing/hiding XML
+ specific params, and adding an option to pick the output type. (hossman)
+12. Added new numeric build property "specversion" to allow clean
+ MANIFEST.MF files (hossman)
+13. Added Solr/Lucene versions to "Info" page (hossman)
+14. Explicitly set mime-type of .xsl files in web.xml to
+ application/xslt+xml (hossman)
+15. Config parsing should now work useing DOM Level 2 parsers -- Solr
+ previously relied on getTextContent which is a DOM Level 3 addition
+ (Alexander Saar via hossman, SOLR-78)
+
+2006/01/17 Solr open sourced, moves to Apache Incubator
diff --git a/solr-8.1.1/LICENSE.txt b/solr-8.1.1/LICENSE.txt
new file mode 100644
index 000000000..534e44ea1
--- /dev/null
+++ b/solr-8.1.1/LICENSE.txt
@@ -0,0 +1,226 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+==========================================================================
+The following license applies to the JQuery JavaScript library
+--------------------------------------------------------------------------
+Copyright (c) 2010 John Resig, http://jquery.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.
+
diff --git a/solr-8.1.1/LUCENE_CHANGES.txt b/solr-8.1.1/LUCENE_CHANGES.txt
new file mode 100644
index 000000000..990204c44
--- /dev/null
+++ b/solr-8.1.1/LUCENE_CHANGES.txt
@@ -0,0 +1,16240 @@
+Lucene Change Log
+
+For more information on past and future Lucene versions, please see:
+http://s.apache.org/luceneversions
+
+======================= Lucene 8.1.1 =======================
+(No Changes)
+
+======================= Lucene 8.1.0 =======================
+
+API Changes
+
+* LUCENE-3041: A query introspection API has been added. Queries should
+ implement a visit() method, taking a QueryVisitor, and either pass the
+ visitor down to any child queries, or call a visitX() or consumeX() method
+ on it. All locations in the code that called Weight.extractTerms()
+ have been changed to use this API, and the extractTerms() method has
+ been deprecated. (Alan Woodward, Simon Willnauer, David Smiley, Luca
+ Cavanna)
+
+* LUCENE-8735: Directory.getPendingDeletions is now abstract to ensure
+ subclasses override it. FilterDirectory now delegates the call, ensuring
+ correct default behaviour for subclasses. (Henning Andersen)
+
+New Features
+
+* LUCENE-2562: The well-known graphical user interface for inspecting Lucene
+ indexes "Luke" was added as a Lucene module. It can be started from the
+ binary distribution by calling the shell scripts in the module folder
+ or from the source checkout by using `ant -f lucene/luke/build.xml run`.
+ Luke provides a Swing-based user interface and can be used to open
+ Lucene or Solr (or Elasticsearch) indexes, inspect documents, check index
+ commits and segments, or test (custom) analyzers. It also has maintenance
+ functions to check index structures and force merge indexes for archival.
+ Luke was originally developed by Andrzej Bialecki, later maintained by
+ Dmitry Kan and finally rewritten by Tomoko Uchida to use the ASF licensing
+ compatible Swing framework (as shipped with JDKs).
+ (Tomoko Uchida, Uwe Schindler)
+
+Bug fixes
+
+* LUCENE-8736: LatLonShapePolygonQuery returns incorrect WITHIN results
+ with shared boundaries. Point in Polygon now correctly includes boundary
+ points. Box and Polygon relations with triangles have also been improved to
+ correctly include boundary points. (Nick Knize)
+
+* LUCENE-8712: Polygon2D does not detect crossings through segment edges.
+ (Ignacio Vera)
+
+* LUCENE-8720: NameIntCacheLRU (in the facets module) had an int
+ overflow bug that disabled cleaning of the cache (Russell A Brown)
+
+* LUCENE-8726: ValueSource.asDoubleValuesSource() could leak a reference to
+ IndexSearcher (Alan Woodward, Yury Pakhomov)
+
+* LUCENE-8719: FixedShingleFilter can miss shingles at the end of a token stream if
+ there are multiple paths with different lengths. (Alan Woodward)
+
+* LUCENE-8688: TieredMergePolicy#findForcedMerges now tries to create the
+ cheapest merges that allow the index to go down to `maxSegmentCount` segments
+ or less. (Armin Braun via Adrien Grand)
+
+* LUCENE-8477: Interval disjunctions could miss valid hits if some of the
+ clauses of the disjunction are minimized away. We now rewrite intervals
+ if a source contains a disjunction and the internal gaps matter for
+ matching. This behaviour can be disabled if users are more interested
+ in speed rather than accuracy of matching. (Alan Woodward, Jim Ferenczi)
+
+* LUCENE-8741: ValueSource.fromDoubleValuesSource() was casting to
+ Scorer instead of Scorable, leading to ClassCastExceptions (Markus Jelsma,
+ Alan Woodward)
+
+* LUCENE-8754: Fix ConcurrentModificationException in SegmentInfo if
+ attributes are accessed in MergePolicy while the merge is running (Simon Willnauer)
+
+* LUCENE-8765: Fixed validation of the number of added points in KD trees.
+ (Zhao Yang via Adrien Grand)
+
+* LUCENE-8785: Ensure new threadstates are locked before retrieving the number of active threadstates.
+ This causes assertion errors and potentially broken field attributes in the IndexWriter when
+ IndexWriter#deleteAll is called while actively indexing. (Simon Willnauer)
+
+Improvements
+
+* LUCENE-8673: Use radix partitioning when merging dimensional points instead
+ of sorting all dimensions before hand. (Ignacio Vera, Adrien Grand)
+
+* LUCENE-8687: Optimise radix partitioning for points on heap. (Ignacio Vera)
+
+* LUCENE-8699: Change HeapPointWriter to use a single byte array instead to a list
+ of byte arrays. In addition a new interface PointValue is added to abstract out
+ the different formats between offline and on-heap writers. (Ignacio Vera)
+
+* LUCENE-8703: Build point writers in the BKD tree only when they are needed.
+ (Ignacio Vera)
+
+* LUCENE-8652: SynonymQuery can now deboost the document frequency of each term when
+ blending the score of the synonym. (Jim Ferenczi)
+
+* LUCENE-8631: The Korean's user dictionary now picks the longest-matching word and discards
+ the other matches. (Yeongsu Kim via Jim Ferenczi)
+
+* LUCENE-8732: ConstantScoreQuery can now early terminate the query if the minimum score is
+ greater than the constant score and total hits are not requested. (Jim Ferenczi)
+
+* LUCENE-8750: Implements setMissingValue() on sort fields produced from
+ DoubleValuesSource and LongValuesSource (Mike Sokolov via Alan Woodward)
+
+* LUCENE-8701: ToParentBlockJoinQuery now creates a child scorer that disallows skipping over
+ non-competitive documents if the score of a parent depends on the score of multiple
+ children (avg, max, min). Additionally the score mode `none` that assigns a constant score to
+ each parent can early terminate top scores's collection. (Jim Ferenczi)
+
+* LUCENE-8751: Weight#matches now use the ScorerSupplier to build scorers with a lead cost of 1
+ (single document). (Jim Ferenczi)
+
+* LUCENE-8752: Japanese new era name '令和' (Reiwa) is added to the dictionary used in
+ JapaneseTokenizer so that the analyzer handles the era name correctly.
+ Reiwa is set to replace the Heisei Era on May 1, 2019. (Tomoko Uchida)
+
+* LUCENE-8671: Introduced reader attributes allows a per IndexReader configuration
+ of codec internals. This enables a per reader configuration if FSTs are on- or off-heap on a
+ per field basis (Simon Willnauer)
+
+* LUCENE-8787: spatial-extras DateRangePrefixTree used to only parse ISO-8601 timestamps with 0 or 3
+ digits of milliseconds precision but now parses other lengths (although > 3 not used).
+ (Thomas Lemmé via David Smiley)
+
+Changes in Runtime Behavior
+
+* LUCENE-8671: Load FST off-heap also for ID-like fields if reader is not opened
+ from an IndexWriter. (Simon Willnauer)
+
+* LUCENE-8730: WordDelimiterGraphFilter always emits its original token first. This
+ brings its behaviour into line with the deprecated WordDelimiterFilter, so that
+ the only difference in output between the two is in the position length
+ attribute. (Alan Woodward, Jim Ferenczi)
+
+* LUCENE-7386: Disjunctions nested in disjunctions are now flattened. This might
+ trigger changes in the produced scores due to changes to the order in which
+ scores of sub clauses are summed up. (Adrien Grand)
+
+Other
+
+* LUCENE-8680: Refactor EdgeTree#relateTriangle method. (Ignacio Vera)
+
+* LUCENE-8685: Refactor LatLonShape tests. (Ignacio Vera)
+
+* LUCENE-8713: Add Line2D tests. (Ignacio Vera)
+
+* LUCENE-8729: Workaround: Disable accessibility doclints (Java 13+),
+ so compilation with recent JDK succeeds. (Uwe Schindler)
+
+* LUCENE-8725: Make TermsQuery.SeekingTermSetTermsEnum a top level class and public (noble)
+
+======================= Lucene 8.0.0 =======================
+
+API Changes
+
+* LUCENE-8662: TermsEnum.seekExact(BytesRef) to abstract and delegate seekExact(BytesRef)
+ in FilterLeafReader.FilterTermsEnum. (Jeffery Yuan via Tomás Fernández Löbbe, Simon Willnauer)
+
+* LUCENE-8469: Deprecated StringHelper.compare has been removed. (Dawid Weiss)
+
+* LUCENE-8039: Introduce a "delta distance" method set to GeoDistance. This
+ allows distance calculations, especially for paths, to take into account an
+ "excursion" to include the specified point.
+
+* LUCENE-8007: Index statistics Terms.getSumDocFreq(), Terms.getDocCount() are
+ now required to be stored by codecs. Additionally, TermsEnum.totalTermFreq()
+ and Terms.getSumTotalTermFreq() are now required: if frequencies are not
+ stored they are equal to TermsEnum.docFreq() and Terms.getSumDocFreq(),
+ respectively, because all freq() values equal 1. (Adrien Grand, Robert Muir)
+
+* LUCENE-8038: Deprecated PayloadScoreQuery constructors have been removed (Alan
+ Woodward)
+
+* LUCENE-8014: Similarity.computeSlopFactor() and
+ Similarity.computePayloadFactor() have been removed (Alan Woodward)
+
+* LUCENE-7996: Queries are now required to produce positive scores.
+ (Adrien Grand)
+
+* LUCENE-8099: CustomScoreQuery, BoostedQuery and BoostingQuery have been
+ removed (Alan Woodward)
+
+* LUCENE-8012: Explanation now takes Number rather than float (Alan Woodward,
+ Robert Muir)
+
+* LUCENE-8116: SimScorer now only takes a frequency and a norm as per-document
+ scoring factors. (Adrien Grand)
+
+* LUCENE-8113: TermContext has been renamed to TermStates, and can now be
+ constructed lazily if term statistics are not required (Alan Woodward)
+
+* LUCENE-8242: Deprecated method IndexSearcher#createNormalizedWeight() has
+ been removed (Alan Woodward)
+
+* LUCENE-8267: Memory codecs removed from the codebase (MemoryPostings,
+ MemoryDocValues). (Dawid Weiss)
+
+* LUCENE-8144: Moved QueryCachingPolicy.ALWAYS_CACHE to the test framework.
+ (Nhat Nguyen via Adrien Grand)
+
+* LUCENE-8356: StandardFilter and StandardFilterFactory have been removed
+ (Alan Woodward)
+
+* LUCENE-8373: StandardAnalyzer.ENGLISH_STOP_WORD_SET has been removed
+ (Alan Woodward)
+
+* LUCENE-8388: Unused PostingsEnum#attributes() method has been removed
+ (Alan Woodward)
+
+* LUCENE-8405: TopDocs.maxScore is removed. IndexSearcher and TopFieldCollector
+ no longer have an option to compute the maximum score when sorting by field.
+ (Adrien Grand)
+
+* LUCENE-8411: TopFieldCollector no longer takes a fillFields option, it now
+ always fills fields. (Adrien Grand)
+
+* LUCENE-8412: TopFieldCollector no longer takes a trackDocScores option. Scores
+ need to be set on top hits via TopFieldCollector#populateScores instead.
+ (Adrien Grand)
+
+* LUCENE-6228: A new Scorable abstract class has been added, containing only those
+ methods from Scorer that should be called from Collectors. LeafCollector.setScorer()
+ now takes a Scorable rather than a Scorer. (Alan Woodward, Adrien Grand)
+
+* LUCENE-8475: Deprecated constants have been removed from RamUsageEstimator.
+ (Dimitrios Athanasiou)
+
+* LUCENE-8483: Scorers may no longer take null as a Weight (Alan Woodward)
+
+* LUCENE-8352: TokenStreamComponents is now final, and can take a Consumer<Reader>
+ in its constructor (Mark Harwood, Alan Woodward, Adrien Grand)
+
+* LUCENE-8498: LowerCaseTokenizer has been removed, and CharTokenizer no longer
+ takes a normalizer function. (Alan Woodward)
+
+* LUCENE-7875: Moved MultiFields static methods out of the class. getLiveDocs is now
+ in MultiBits which is now public. getMergedFieldInfos and getIndexedFields are now in
+ FieldInfos. getTerms is now in MultiTerms. getTermPositionsEnum and getTermDocsEnum
+ were collapsed and renamed to just getTermPostingsEnum and moved to MultiTerms.
+ (David Smiley)
+
+* LUCENE-8513: MultiFields.getFields is now removed. Please avoid this class,
+ and Fields in general, when possible. (David Smiley)
+
+* LUCENE-8497: MultiTermAwareComponent has been removed, and in its place
+ TokenFilterFactory and CharFilterFactory now expose type-safe normalize()
+ methods. This decouples normalization from tokenization entirely.
+ (Mayya Sharipova, Alan Woodward)
+
+* LUCENE-8597: IntervalIterator now exposes a gaps() method that reports the
+ number of gaps between its component sub-intervals. This can be used in a
+ new filter available via Intervals.maxgaps(). (Alan Woodward)
+
+* LUCENE-8609: Remove IndexWriter#numDocs() and IndexWriter#maxDoc() in favor
+ of IndexWriter#getDocStats(). (Simon Willnauer)
+
+* LUCENE-8292: Make TermsEnum fully abstract. (Simon Willnauer)
+
+Changes in Runtime Behavior
+
+* LUCENE-8333: Switch MoreLikeThis.setMaxDocFreqPct to use maxDoc instead of
+ numDocs. (Robert Muir, Dawid Weiss).
+
+* LUCENE-7837: Indices that were created before the previous major version
+ will now fail to open even if they have been merged with the previous major
+ version. (Adrien Grand)
+
+* LUCENE-8020: Similarities are no longer passed terms that don't exist by
+ queries such as SpanOrQuery, so scoring formulas no longer require
+ divide-by-zero hacks. IndexSearcher.termStatistics/collectionStatistics return null
+ instead of returning bogus values for a non-existent term or field. (Robert Muir)
+
+* LUCENE-7996: FunctionQuery and FunctionScoreQuery now return a score of 0
+ when the function produces a negative value. (Adrien Grand)
+
+* LUCENE-8116: Similarities now score fields that omit norms as if the norm was
+ 1. This might change score values on fields that omit norms. (Adrien Grand)
+
+* LUCENE-8134: Index options are no longer automatically downgraded.
+ (Adrien Grand)
+
+* LUCENE-8031: Length normalization correctly reflects omission of term frequencies.
+ (Robert Muir, Adrien Grand)
+
+* LUCENE-7444: StandardAnalyzer no longer defaults to removing English stopwords
+ (Alan Woodward)
+
+* LUCENE-8060: IndexSearcher's search and searchAfter methods now only compute
+ total hit counts accurately up to 1,000 in order to enable top-hits
+ optimizations such as block-max WAND (LUCENE-8135). (Adrien Grand)
+
+* LUCENE-8505: IndexWriter#addIndices will now fail if the target index is sorted but
+ the candidate is not. (Jim Ferenczi)
+
+* LUCENE-8535: Highlighter and FVH doesn't support ToParent and ToChildBlockJoinQuery out of the
+ box anymore. In order to highlight on Block-Join Queries a custom WeightedSpanTermExtractor / FieldQuery
+ should be used. (Simon Willnauer, Jim Ferenczi, Julie Tibshiran)
+
+* LUCENE-8563: BM25 scores don't include the (k1+1) factor in their numerator
+ anymore. This doesn't affect ordering as this is a constant factor which is
+ the same for every document. (Luca Cavanna via Adrien Grand)
+
+* LUCENE-8509: WordDelimiterGraphFilter will no longer set the offsets of internal
+ tokens by default, preventing a number of bugs when the filter is chained with
+ tokenfilters that change the length of their tokens (Alan Woodward)
+
+* LUCENE-8633: IntervalQuery scores do not use term weighting any more, the score
+ is instead calculated as a function of the sloppy frequency of the matching
+ intervals. (Alan Woodward, Jim Ferenczi)
+
+* LUCENE-8635: FSTs can now remain off-heap, accessed via
+ IndexInput, and the default codec's term dictionary
+ (BlockTreeTermsReader) will now leave the FST for the terms index
+ off-heap for non-primary-key fields using MMapDirectory, reducing
+ heap usage for such fields. (Ankit Jain)
+
+New Features
+
+* LUCENE-8340: LongPoint#newDistanceFeatureQuery may be used to boost scores based on
+ how close a value of a long field is from an configurable origin. This is
+ typically useful to boost by recency. (Adrien Grand)
+
+* LUCENE-8482: LatLonPoint#newDistanceFeatureQuery may be used to boost scores
+ based on the haversine distance of a LatLonPoint field to a provided point. This is
+ typically useful to boost by distance. (Ignacio Vera)
+
+* LUCENE-8216: Added a new BM25FQuery in sandbox to blend statistics across several fields
+ using the BM25F formula. (Adrien Grand, Jim Ferenczi)
+
+* LUCENE-8564: GraphTokenFilter is an abstract class useful for token filters that need
+ to read-ahead in the token stream and take into account graph structures. This
+ also changes FixedShingleFilter to extend GraphTokenFilter (Alan Woodward)
+
+* LUCENE-8612: Intervals.extend() treats an interval as if it covered a wider
+ span than it actually does, allowing users to force minimum gaps between
+ intervals in a phrase. (Alan Woodward)
+
+* LUCENE-8629: New interval functions: Intervals.before(), Intervals.after(),
+ Intervals.within() and Intervals.overlapping(). (Alan Woodward)
+
+* LUCENE-8622: Adds a minimum-should-match interval function that produces intervals
+ spanning a subset of a set of sources. (Alan Woodward)
+
+* LUCENE-8645: Intervals.fixField() allows you to report intervals from one field
+ as if they came from another. (Alan Woodward)
+
+* LUCENE-8646: New interval functions: Intervals.prefix() and Intervals.wildcard()
+ (Alan Woodward)
+
+* LUCENE-8655: Add a getter in FunctionScoreQuery class in order to access to the
+ underlying DoubleValuesSource. (Gérald Quaire via Alan Woodward)
+
+* LUCENE-8697: GraphTokenStreamFiniteStrings correctly handles side paths
+ containing gaps (Alan Woodward)
+
+* LUCENE-8702: Simplify intervals returned from vararg Intervals factory methods
+ (Alan Woodward)
+
+Improvements
+
+* LUCENE-7997: Add BaseSimilarityTestCase to sanity check similarities.
+ SimilarityBase switches to 64-bit doubles internally to help avoid common numeric issues.
+ Add missing range checks for similarity parameters.
+ Improve BM25 and ClassicSimilarity's explanations. (Robert Muir)
+
+* LUCENE-8011: Improved similarity explanations.
+ (Mayya Sharipova via Adrien Grand)
+
+* LUCENE-4198: Codecs now have the ability to index score impacts.
+ (Adrien Grand)
+
+* LUCENE-8135: Boolean queries now implement the block-max WAND algorithm in
+ order to speed up selection of top scored documents. (Adrien Grand)
+
+* LUCENE-8279: CheckIndex now cross-checks terms with norms. (Adrien Grand)
+
+* LUCENE-8660: TopDocsCollectors now return an accurate count (instead of a lower bound)
+ if the total hit count is equal to the provided threshold. (Adrien Grand, Jim Ferenczi)
+
+Optimizations
+
+* LUCENE-8040: Optimize IndexSearcher.collectionStatistics, avoiding MultiFields/MultiTerms
+ (David Smiley, Robert Muir)
+
+* LUCENE-4100: Disjunctions now support faster collection of top hits when the
+ total hit count is not required. (Stefan Pohl, Adrien Grand, Robert Muir)
+
+* LUCENE-7993: Phrase queries are now faster if total hit counts are not
+ required. (Adrien Grand)
+
+* LUCENE-8109: Boolean queries propagate information about the minimum
+ competitive score in order to make collection faster if there are disjunctions
+ or phrase queries as sub queries, which know how to leverage this information
+ to run faster. (Adrien Grand)
+
+* LUCENE-8439: Disjunction max queries can skip blocks to select the top documents
+ if the total hit count is not required. (Jim Ferenczi, Adrien Grand)
+
+* LUCENE-8204: Boolean queries with a mix of required and optional clauses are
+ now faster if the total hit count is not required. (Jim Ferenczi, Adrien Grand)
+
+* LUCENE-8448: Boolean queries now propagates the mininum score to their sub-scorers.
+ (Jim Ferenczi, Adrien Grand)
+
+* LUCENE-8511: MultiFields.getIndexedFields is now optimized; does not call getMergedFieldInfos
+ (David Smiley)
+
+* LUCENE-8507: TopFieldCollector can now update the minimum competitive score if the primary sort
+ is by relevancy and the total hit count is not required. (Jim Ferenczi)
+
+* LUCENE-8464: ConstantScoreScorer now implements setMinCompetitveScore in order
+ to early terminate the iterator if the minimum score is greater than the constant
+ score. (Christophe Bismuth via Jim Ferenczi)
+
+* LUCENE-8607: MatchAllDocsQuery can shortcut when total hit count is not
+ required (Alan Woodward, Adrien Grand)
+
+* LUCENE-8585: Index-time jump-tables for DocValues, for O(1) advance when retrieving doc values.
+ (Toke Eskildsen, Adrien Grand)
+
+======================= Lucene 7.7.1 =======================
+(No Changes)
+
+======================= Lucene 7.7.0 =======================
+
+Changes in Runtime Behavior
+
+* LUCENE-8527: StandardTokenizer and UAX29URLEmailTokenizer now support Unicode 9.0,
+ and provide Unicode UTS#51 v11.0 Emoji tokenization with the "<EMOJI>" token type.
+
+Build
+
+* LUCENE-8611: Update randomizedtesting to 2.7.2, JUnit to 4.12, add hamcrest-core
+ dependency. (Dawid Weiss)
+
+* LUCENE-8537: ant test command fails under lucene/tools (Peter Somogyi)
+
+Bug fixes:
+
+* LUCENE-8669: Fix LatLonShape WITHIN queries that fail with Multiple search Polygons
+ that share the dateline. (Nick Knize)
+
+* LUCENE-8603: Fix the inversion of right ids for additional nouns in the Korean user dictionary.
+ (Yoo Jeongin via Jim Ferenczi)
+
+* LUCENE-8624: int overflow in ByteBuffersDataOutput.size(). (Mulugeta Mammo,
+ Dawid Weiss)
+
+* LUCENE-8625: int overflow in ByteBuffersDataInput.sliceBufferList. (Mulugeta Mammo,
+ Dawid Weiss)
+
+* LUCENE-8639: Newly created threadstates while flushing / refreshing can cause duplicated
+ sequence IDs on IndexWriter. (Simon Willnauer)
+
+* LUCENE-8649: LatLonShape's within and disjoint queries can return false positives with
+ indexed multi-shapes. (Ignacio Vera)
+
+* LUCENE-8654: Polygon2D#relateTriangle returns the wrong answer if polygon is inside
+ the triangle. (Ignacio Vera)
+
+* LUCENE-8650: ConcatenatingTokenStream did not correctly clear its state in reset(), and
+ was not propagating final position increments from its child streams correctly.
+ (Dan Meehl, Alan Woodward)
+
+* LUCENE-8676: The Korean tokenizer does not update the last position if the backtrace is caused
+ by a big buffer (1024 chars). (Jim Ferenczi)
+
+New Features
+
+* LUCENE-8026: ExitableDirectoryReader may now time out queries that run on
+ points such as range queries or geo queries.
+ (Christophe Bismuth via Adrien Grand)
+
+* LUCENE-8508: IndexWriter can now set the created version via
+ IndexWriterConfig#setIndexCreatedVersionMajor. This is an expert feature.
+ (Adrien Grand)
+
+* LUCENE-8601: Attributes set in the IndexableFieldType for each field during indexing will
+ now be recorded into the corresponding FieldInfo's attributes, accessible at search
+ time (Murali Krishna P)
+
+Improvements
+
+* LUCENE-8463: TopFieldCollector can now early-terminates queries when sorting by SortField.DOC.
+ (Christophe Bismuth via Jim Ferenczi)
+
+* LUCENE-8562: Speed up merging segments of points with data dimensions by only sorting on the indexed
+ dimensions. (Ignacio Vera)
+
+* LUCENE-8529: TopSuggestDocsCollector will now use the completion key to tiebreak completion
+ suggestion with identical scores. (Jim Ferenczi)
+
+* LUCENE-8575: SegmentInfos#toString now includes attributes and diagnostics.
+ (Namgyu Kim via Adrien Grand)
+
+* LUCENE-8548: The KoreanTokenizer no longer splits unknown words on combining diacritics and
+ detects script boundaries more accurately with Character#UnicodeScript#of.
+ (Christophe Bismuth, Jim Ferenczi)
+
+* LUCENE-8581: Change LatLonShape encoding to use 4 bytes Per Dimension.
+ (Ignacio Vera, Nick Knize, Adrien Grand)
+
+* LUCENE-8527: Upgrade JFlex dependency to 1.7.0; in StandardTokenizer and UAX29URLEmailTokenizer,
+ increase supported Unicode version from 6.3 to 9.0, and support Unicode UTS#51 v11.0 Emoji tokenization.
+
+* LUCENE-8640: Date Range format validation (Lucky Sharma, David Smiley via Mikhail Khludnev)
+
+Optimizations
+
+* LUCENE-8552: FieldInfos.getMergedFieldInfos no longer does any merging if there is <= 1 segment.
+ (Christophe Bismuth via David Smiley)
+
+* LUCENE-8590: BufferedUpdates now uses an optimized storage for buffering docvalues updates that
+ can safe up to 80% of the heap used compared to the previous implementation and uses non-object
+ based datastructures. (Simon Willnauer, Mike McCandless, Shai Erera, Adrien Grand)
+
+* LUCENE-8598: Moved to the default accepted overhead ratio for packet ints in DocValuesFieldUpdats
+ yields an up-to 4x performance improvement when applying doc values updates. (Simon Willnauer, Adrien Grand)
+
+* LUCENE-8599: Use sparse bitset to store docs in SingleValueDocValuesFieldUpdates.
+ (Simon Willnauer, Adrien Grand)
+
+* LUCENE-8600: Doc-value updates get applied faster by sorting with quicksort,
+ rather than an in-place mergesort, which needs to perform fewer swaps.
+ (Adrien Grand)
+
+* LUCENE-8623: Decrease I/O pressure when merging high dimensional points. (Ignacio Vera)
+
+Test Framework
+
+* LUCENE-8604: TestRuleLimitSysouts now has an optional "hard limit" of bytes that can be written
+ to stderr and stdout (anything beyond the hard limit is ignored). The default hard limit is 2 GB of
+ logs per test class. (Dawid Weiss)
+
+Other
+
+* LUCENE-8573: BKDWriter now uses FutureArrays#mismatch to compute shared prefixes.
+ (Christoph Büscher via Adrien Grand)
+
+* LUCENE-8605: Separate bounding box spatial logic from query logic on LatLonShapeBoundingBoxQuery.
+ (Ignacio Vera)
+
+* LUCENE-8609: Deprecated IndexWriter#numDocs() and IndexWriter#maxDoc() in favor of IndexWriter#getDocStats()
+ that allows to get consistent numDocs and maxDoc stats that are not subject to concurrent changes.
+ (Simon Willnauer, Nhat Nguyen)
+
+======================= Lucene 7.6.0 =======================
+
+Build
+
+* LUCENE-8504: Upgrade forbiddenapis to version 2.6. (Uwe Schindler)
+
+* LUCENE-8493: Stop publishing insecure .sha1 files with releases (janhoy)
+
+Bug fixes
+
+* LUCENE-8479: QueryBuilder#analyzeGraphPhrase now throws TooManyClause exception
+ if the number of expanded path reaches the BooleanQuery#maxClause limit. (Jim Ferenczi)
+
+* LUCENE-8522: throw InvalidShapeException when constructing a polygon and
+ all points are coplanar. (Ignacio Vera)
+
+* LUCENE-8531: QueryBuilder#analyzeGraphPhrase now creates one phrase query per finite strings
+ in the graph if the slop is greater than 0. Span queries cannot be used in this case because
+ they don't handle slop the same way than phrase queries. (Steve Rowe, Uwe Schindler, Jim Ferenczi)
+
+* LUCENE-8524: Add the Hangul Letter Araea (interpunct) as a separator in Nori's tokenizer.
+ This change also removes empty terms and trim surface form in Nori's Korean dictionary. (Trey Jones, Jim Ferenczi)
+
+* LUCENE-8550: Fix filtering of coplanar points when creating linked list on
+ polygon tesselator. (Ignacio Vera)
+
+* LUCENE-8549: Polygon tessellator throws an error if some parts of the shape
+ could not be processed. (Ignacio Vera)
+
+* LUCENE-8540: Better handling of min/max values for Geo3d encoding. (Ignacio Vera)
+
+* LUCENE-8534: Fix incorrect computation for triangles intersecting polygon edges in
+ shape tessellation. (Ignacio Vera)
+
+* LUCENE-8559: Fix bug where polygon edges were skipped when checking for intersections.
+ (Ignacio Vera)
+
+* LUCENE-8556: Use latitude and longitude instead of encoding values to check if triangle is ear
+ when using morton optimisation. (Ignacio Vera)
+
+* LUCENE-8586: Intervals.or() could get stuck in an infinite loop on certain indexes
+ (Alan Woodward)
+
+* LUCENE-8595: Fix interleaved DV update and reset. Interleaved update and reset value
+ to the same doc in the same updates package looses an update if the reset comes before
+ the update as well as loosing the reset if the update comes frist. (Simon Willnauer, Adrien Grand)
+
+* LUCENE-8592: Fix index sorting corruption due to numeric overflow. The merge of sorted segments
+ can produce an invalid sort if the sort field is an Integer/Long that uses reverse order and contains
+ values equal to Integer/Long#MIN_VALUE. These values are always sorted first during a merge
+ (instead of last because of the reverse order) due to this bug. Indices affected by the bug can be
+ detected by running the CheckIndex command on a distribution that contains the fix (7.6+).
+ (Jim Ferenczi, Adrien Grand, Mike McCandless, Simon Willnauer)
+
+New Features
+
+* LUCENE-8496: Selective indexing - modify BKDReader/BKDWriter to allow users
+ to select a fewer number of dimensions to be used for creating the index than
+ the total number of dimensions used for field encoding. i.e., dimensions 0 to N
+ may be used to determine how to split the inner nodes, and dimensions N+1 to D
+ are ignored and stored as data dimensions at the leaves. (Nick Knize)
+
+* LUCENE-8538: Add a Simple WKT Shape Parser for creating Lucene Geometries (Polygon, Line,
+ Rectangle) from WKT format. (Nick Knize)
+
+* LUCENE-8462: Adds an Arabic snowball stemmer based on
+ https://github.com/snowballstem/snowball/blob/master/algorithms/arabic.sbl
+ (Ryadh Dahimene via Jim Ferenczi)
+
+* LUCENE-8554: Add new LatLonShapeLineQuery that queries indexed LatLonShape fields
+ by arbitrary lines. (Nick Knize)
+
+* LUCENE-8555: Add dateline crossing support to LatLonShapeBoundingBoxQuery. (Nick Knize)
+
+Improvements
+
+* LUCENE-8521: Change LatLonShape encoding to 7 dimensions instead of 6; where the
+ first 4 are index dimensions defining the bounding box of the Triangle and the
+ remaining 3 data dimensions define the vertices of the triangle. (Nick Knize)
+
+* LUCENE-8557: LeafReader.getFieldInfos is now documented and tested that it ought to return
+ the same cached instance. MemoryIndex's impl now pre-creates the FieldInfos instead of
+ re-calculating a new instance each time. (Tim Underwood, David Smiley)
+
+* LUCENE-8558: Replace O(N) lookup with O(1) lookup in PerFieldMergeState#FilterFieldInfos.
+ (Kranthi via Simon Willnauer)
+
+Other
+
+* LUCENE-8523: Correct typo in JapaneseNumberFilterFactory javadocs (Ankush Jhalani
+ via Alan Woodward)
+
+* LUCENE-8533: Fix Javadocs of DataInput#readVInt(): Negative numbers are
+ supported, but should be avoided. (Vladimir Dolzhenko via Uwe Schindler)
+
+======================= Lucene 7.5.1 =======================
+
+Bug Fixes
+
+* LUCENE-8454: Fix incorrect vertex indexing and other computation errors in
+ shape tessellation that would sometimes cause an infinite loop. (Nick Knize)
+
+======================= Lucene 7.5.0 =======================
+
+API Changes
+
+* LUCENE-8467: RAMDirectory, RAMFile, RAMInputStream, RAMOutputStream are deprecated
+ (Dawid Weiss)
+
+* LUCENE-8356: StandardFilter is deprecated (Alan Woodward)
+
+* LUCENE-8373: ENGLISH_STOP_WORD_SET on StandardAnalyzer is deprecated. Instead
+ use EnglishAnalyzer.ENGLISH_STOP_WORD_SET. The default constructor for
+ StopAnalyzer is also deprecated, and a stop word set should be explicitly
+ passed to the constructor. (Alan Woodward)
+
+* LUCENE-8378: Add DocIdSetIterator.range static method to return an iterator
+ matching a range of docids (Mike McCandless)
+
+* LUCENE-8379: Add experimental TermQuery.getTermStates method (Mike McCandless)
+
+* LUCENE-8407: Add experimental SpanTermQuery.getTermStates method (David Smiley)
+
+* LUCENE-8390: MatchesIteratorSupplier replaced by IOSupplier (Alan Woodward,
+ David Smiley)
+
+* LUCENE-8397: Add DirectoryTaxonomyWriter.getCache (Mike McCandless)
+
+* LUCENE-8387: Add experimental IndexSearcher.getSlices API to see which slices
+ IndexSearcher is searching concurrently when it's created with an ExecutorService
+ (Mike McCandless)
+
+* LUCENE-8263: TieredMergePolicy's reclaimDeletesWeight has been replaced with a
+ new deletesPctAllowed setting to control how aggressively deletes should be
+ reclaimed. (Erick Erickson, Adrien Grand)
+
+* LUCENE-7314: Graduate LatLonPoint and query classes to core (Nick Knize)
+
+* LUCENE-8428: The way that oal.util.PriorityQueue creates sentinel objects has
+ been changed from a protected method to a java.util.function.Supplier as a
+ constructor argument. (Adrien Grand)
+
+* LUCENE-8437: CheckIndex.Status.cantOpenSegments and missingSegmentVersion
+ have been removed as they were not computed correctly. (Adrien Grand)
+
+* LUCENE-8286: The UnifiedHighlighter has a new HighlightFlag.WEIGHT_MATCHES flag that
+ will tell this highlighter to use the new MatchesIterator API as the underlying
+ approach to navigate matching hits for a query. This mode will highlight more
+ accurately than any other highlighter, and can mark up phrases as one span instead of
+ word-by-word. The UH's public internal APIs changed a bit in the process.
+ (David Smiley)
+
+* LUCENE-8471: IndexWriter.getFlushingBytes() returns how many bytes are currently
+ being flushed to disk. (Alan Woodward)
+
+* LUCENE-8422: Static helper functions for Matches and MatchesIterator implementations
+ have been moved from Matches to MatchesUtils (Alan Woodward)
+
+* LUCENE-8343: Suggesters now require Long (versus long, previously) from weight() method
+ while indexing, and provide double (versus long, previously) scores at lookup time
+ (Alessandro Benedetti)
+
+* LUCENE-8459: SearcherTaxonomyManager now has a constructor taking already opened
+ IndexReaders, allowing the caller to pass a FilterDirectoryReader, for example.
+ (Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-8445: Tighten condition when two planes are identical to prevent constructing
+ bogus tiles when building GeoPolygons. (Ignacio Vera)
+
+* LUCENE-8444: Prevent building functionally identical plane bounds when constructing
+ DualCrossingEdgeIterator . (Ignacio Vera)
+
+* LUCENE-8380: UTF8TaxonomyWriterCache inconsistency. (Ruslan Torobaev, Dawid Weiss)
+
+* LUCENE-8164: IndexWriter silently accepts broken payload. This has been fixed
+ via LUCENE-8165 since we are now checking for offset+length going out of bounds.
+ (Robert Muir, Nhat Nyugen, Simon Willnauer)
+
+* LUCENE-8370: Reproducing
+ TestLucene{54,70}DocValuesFormat.testSortedSetVariableLengthBigVsStoredFields()
+ failures (Erick Erickson)
+
+* LUCENE-8376, LUCENE-8371: ConditionalTokenFilter.end() would not propagate correctly
+ if the last token in the stream was subsequently dropped; FixedShingleFilter did
+ not set position increment in end() (Alan Woodward)
+
+* LUCENE-8395: WordDelimiterGraphFilter would incorrectly insert a hole into a
+ TokenStream if a token consisting entirely of delimiter characters was
+ encountered, but preserve_original was set. (Alan Woodward)
+
+* LUCENE-8398: TieredMergePolicy.getMaxMergedSegmentMB has rounding error (Erick Erickson)
+
+* LUCENE-8429: DaciukMihovAutomatonBuilder is no longer prone to stack
+ overflows by enforcing a maximum term length. (Adrien Grand)
+
+* LUCENE-8441: IndexWriter now checks doc value type for index sort fields
+ and fails the document if they are not compatible. (Jim Ferenczi, Mike McCandless)
+
+* LUCENE-8458: Adjust initialization condition of PendingSoftDeletes and ensures
+ it is initialized before accepting deletes (Simon Willnauer, Nhat Nguyen)
+
+* LUCENE-8466: IndexWriter.deleteDocs(Query... query) incorrectly applies deletes on flush
+ if the index is sorted. (Adrien Grand, Jim Ferenczi, Vish Ramachandran)
+
+* LUCENE-8502: Allow access to delegate in FilterCodecReader. FilterCodecReader didn't
+ allow access to it's delegate like other filter readers. This adds a new #getDelegate method
+ to access the wrapped reader. (Simon Willnauer)
+
+Changes in Runtime Behavior
+
+* LUCENE-7976: TieredMergePolicy now respects maxSegmentSizeMB by default when executing
+ findForcedMerges and findForcedDeletesMerges (Erick Erickson)
+
+* LUCENE-8263: TieredMergePolicy now reclaims deleted documents more
+ aggressively by default ensuring that no more than ~1/3 of the index size is
+ used by deleted documents. (Adrien Grand)
+
+* LUCENE-8503: Call #getDelegate instead of direct member access during unwrap.
+ Filter*Reader instances access the member or the delegate directly instead of
+ calling getDelegate(). In order to track access of the delegate these methods
+ should call #getDelegate() (Simon Willnauer)
+
+Improvements
+
+* LUCENE-8468: A ByteBuffer based Directory implementation. (Dawid Weiss)
+
+* LUCENE-8447: Add DISJOINT and WITHIN support to LatLonShape queries. (Nick Knize)
+
+* LUCENE-8440: Add support for indexing and searching Line and Point shapes using LatLonShape encoding (Nick Knize)
+
+* LUCENE-8435: Add new LatLonShapePolygonQuery for querying indexed LatLonShape fields by arbitrary polygons (Nick Knize)
+
+* LUCENE-8367: Make per-dimension drill down optional for each facet dimension (Mike McCandless)
+
+* LUCENE-8396: Add Points Based Shape Indexing and Search that decomposes shapes
+ into a triangular mesh and indexes individual triangles as a 6 dimension point (Nick Knize)
+
+* LUCENE-8345, GitHub PR #392: Remove instantiation of redundant wrapper classes for primitives;
+ add wrapper class constructors to forbiddenapis. (Michael Braun via Uwe Schindler)
+
+* LUCENE-8415: Clean up Directory contracts and JavaDoc comments. (Dawid Weiss)
+
+* LUCENE-8414: Make segmentInfos private in IndexWriter (Simon Willnauer, Nhat Nguyen)
+
+* LUCENE-8446: The UnifiedHighlighter's DefaultPassageFormatter now treats overlapping matches in
+ the passage as merged (as if one larger match). (David Smiley)
+
+* LUCENE-8460: Better argument validation in StoredField. (Namgyu Kim)
+
+* LUCENE-8432: TopFieldComparator stops comparing documents if the index is
+ sorted, even if hits still need to be visited to compute the hit count.
+ (Nikolay Khitrin)
+
+* LUCENE-8422: IntervalQuery now returns useful Matches (Alan Woodward)
+
+* LUCENE-7862: Store the real bounds of the leaf cells in the BKD index when the
+ number of dimensions is bigger than 1. It improves performance when there is
+ correlation between the dimensions, for example ranges. (Ignacio Vera, Adrien Grand)
+
+Build
+
+* LUCENE-5143: Stop publishing KEYS file with each version, use topmost lucene/KEYS file only.
+ The buildAndPushRelease.py script validates that RM's PGP key is in the KEYS file.
+ Remove unused 'copy-to-stage' and '-dist-keys' targets from ant build. (janhoy)
+
+Other
+
+* LUCENE-8485: Update randomizedtesting to version 2.6.4. (Dawid Weiss)
+
+* LUCENE-8366: Upgrade to ICU 62.1. Emoji handling now uses Unicode 11's
+ Extended_Pictographic property. (Robert Muir)
+
+* LUCENE-8408: original Highlighter: Remove obsolete static AttributeFactory instance
+ in TokenStreamFromTermVector. (Michael Braun, David Smiley)
+
+* LUCENE-8420: Upgrade OpenNLP to 1.9.0 so OpenNLP tool can read the new model format which 1.8.x
+ cannot read. 1.9.0 can read the old format. (Koji Sekiguchi)
+
+* LUCENE-8453: Add documentation to analysis factories of Korean (Nori) analyzer
+ module. (Tomoko Uchida via Uwe Schindler)
+
+* LUCENE-8455: Upgrade ECJ compiler to 4.6.1 in lucene/common-build.xml (Erick Erickson)
+
+* LUCENE-8456: Upgrade Apache Commons Compress to v1.18 (Steve Rowe)
+
+* LUCENE-765: Improved org.apache.lucene.index javadocs. (Mike Sokolov)
+
+* LUCENE-8476: Remove redundant nullity check and switch to optimized List.sort in the
+ Korean's user dictionary. (Namgyu Kim)
+
+======================= Lucene 7.4.1 =======================
+
+Bug Fixes
+
+ * LUCENE-8365: Fix ArrayIndexOutOfBoundsException in UnifiedHighlighter. This fixes
+ a "off by one" error in the UnifiedHighlighter's code that is only triggered when
+ two nested SpanNearQueries contain the same term. (Marc-Andre Morissette via Simon Willnauer)
+
+ * LUCENE-8381: Fix IndexWriter incorrectly interprets hard-deletes as soft-deletes
+ while wrapping reader for merges. (Simon Willnauer, Nhat Nguyen)
+
+ * LUCENE-8384: Fix missing advance docValues generation while handling docValues
+ update in PendingSoftDeletes. (Simon Willnauer, Nhat Nguyen)
+
+ * LUCENE-8472: Always rewrite the soft-deletes merge retention query. (Adrien Grand, Nhat Nguyen)
+
+======================= Lucene 7.4.0 =======================
+
+Upgrading
+
+* LUCENE-8344: If you are using the AnalyzingSuggester or FuzzySuggester subclass, and if you
+ explicitly use the preservePositionIncrements=false setting (not the default), then you ought
+ to rebuild your suggester index. If you don't, queries or indexed data with trailing position
+ gaps (e.g. stop words) may not work correctly. (David Smiley, Jim Ferenczi)
+
+API Changes
+
+* LUCENE-8242: IndexSearcher.createNormalizedWeight() has been deprecated.
+ Instead use IndexSearcher.createWeight(), rewriting the query first.
+ (Alan Woodward)
+
+* LUCENE-8248: MergePolicyWrapper is renamed to FilterMergePolicy and now
+ also overrides getMaxCFSSegmentSizeMB (Mike Sokolov via Mike McCandless)
+
+* LUCENE-8303: LiveDocsFormat is now only responsible for (de)serialization of
+ live docs. (Adrien Grand)
+
+Changes in Runtime Behavior
+
+* LUCENE-8309: Live docs are no longer backed by a FixedBitSet. (Adrien Grand)
+
+* LUCENE-8330: Detach IndexWriter from MergePolicy. MergePolicy now instead of
+ requiring IndexWriter as a hard dependency expects a MergeContext which
+ IndexWriter implements. (Simon Willnauer, Robert Muir, Dawid Weiss, Mike McCandless)
+
+New Features
+
+* LUCENE-8200: Allow doc-values to be updated atomically together
+ with a document. Doc-Values updates now can be used as a soft-delete
+ mechanism to all keeping several version of a document or already
+ deleted documents around for later reuse. See "IW.softUpdateDocument(...)"
+ for reference. (Simon Willnauer)
+
+* LUCENE-8197: A new FeatureField makes it easy and efficient to integrate
+ static relevance signals into the final score. (Adrien Grand, Robert Muir)
+
+* LUCENE-8202: Add a FixedShingleFilter (Alan Woodward, Adrien Grand, Jim
+ Ferenczi)
+
+* LUCENE-8125: ICUTokenizer support for emoji/emoji sequence tokens. (Robert Muir)
+
+* LUCENE-8196, LUCENE-8300: A new IntervalQuery in the sandbox allows efficient proximity
+ searches based on minimum-interval semantics. (Alan Woodward, Adrien Grand,
+ Jim Ferenczi, Simon Willnauer, Matt Weber)
+
+* LUCENE-8233: Add support for soft deletes to IndexWriter delete accounting.
+ Soft deletes are accounted for inside the index writer and therefor also
+ by merge policies. A SoftDeletesRetentionMergePolicy is added that allows
+ to selectively carry over soft_deleted document across merges for retention
+ policies (Simon Willnauer, Mike McCandless, Robert Muir)
+
+* LUCENE-8237: Add a SoftDeletesDirectoryReaderWrapper that allows to respect
+ soft deletes if the reader is opened form a directory. (Simon Willnauer,
+ Mike McCandless, Uwe Schindler, Adrien Grand)
+
+* LUCENE-8229, LUCENE-8270: Add a method Weight.matches(LeafReaderContext, doc)
+ that returns an iterator over matching positions for a given query and document.
+ This allows exact hit extraction and will enable implementation of accurate
+ highlighters. (Alan Woodward, Adrien Grand, David Smiley)
+
+* LUCENE-8249: Implement Matches API for phrase queries (Alan Woodward, Adrien
+ Grand)
+
+* LUCENE-8246: Allow to customize the number of deletes a merge claims. This
+ helps merge policies in the soft-delete case to correctly implement retention
+ policies without triggering uncessary merges. (Simon Willnauer, Mike McCandless)
+
+* LUCENE-8231: A new analysis module (nori) similar to Kuromoji
+ but to handle Korean using mecab-ko-dic and morphological analysis.
+ (Robert Muir, Jim Ferenczi)
+
+* LUCENE-8265: WordDelimter/GraphFilter now have an option to skip tokens
+ marked with KeywordAttribute (Mike Sokolov via Mike McCandless)
+
+* LUCENE-8297: Add IW#tryUpdateDocValues(Reader, int, Fields...) IndexWriter can
+ update doc values for a specific term but this might affect all documents
+ containing the term. With tryUpdateDocValues users can update doc-values
+ fields for individual documents. This allows for instance to soft-delete
+ individual documents. (Simon Willnauer)
+
+* LUCENE-8298: Allow DocValues updates to reset a value. Passing a DV field with a null
+ value to IW#updateDocValues or IW#tryUpdateDocValues will now remove the value from the
+ provided document. This allows to undelete a soft-deleted document unless it's been claimed
+ by a merge. (Simon Willnauer)
+
+* LUCENE-8273: ConditionalTokenFilter allows analysis chains to skip particular token
+ filters based on the attributes of the current token. This generalises the keyword
+ token logic currently used for stemmers and WDF. It is integrated into
+ CustomAnalyzer by using the `when` and `whenTerm` builder methods, and a new
+ ProtectedTermFilter is added as an example. (Alan Woodward, Robert Muir,
+ David Smiley, Steve Rowe, Mike Sokolov)
+
+* LUCENE-8310: Ensure IndexFileDeleter accounts for pending deletes. Today we fail
+ creating the IndexWriter when the directory has a pending delete. Yet, this
+ is mainly done to prevent writing still existing files more than once.
+ IndexFileDeleter already accounts for that for existing files which we can
+ now use to also take pending deletes into account which ensures that all file
+ generations per segment always go forward. (Simon Willnauer)
+
+* LUCENE-7960: Add preserveOriginal option to the NGram and EdgeNGram filters.
+ (Ingomar Wesp, Shawn Heisey via Robert Muir)
+
+* LUCENE-8335: Enforce soft-deletes field up-front. Soft deletes field must be marked
+ as such once it's introduced and can't be changed after the fact.
+ (Nhat Nguyen via Simon Willnauer)
+
+* LUCENE-8332: New ConcatenateGraphFilter for concatenating all tokens into one (or more
+ in the event of a graph input). This is useful for fast analyzed exact-match lookup,
+ suggesters, and as a component of a named entity recognition system. This was excised
+ out of CompletionTokenStream in the NRT doc suggester. (David Smiley, Jim Ferenczi)
+
+Bug Fixes
+
+* LUCENE-8221: MoreLikeThis.setMaxDocFreqPct can easily int-overflow on larger
+ indexes.
+
+* LUCENE-8266: Detect bogus tiles when creating a standard polygon and
+ throw a TileException. (Ignacio Vera)
+
+* LUCENE-8234: Fixed bug in how spatial relationship is computed for
+ GeoStandardCircle when it covers the whole world. (Ignacio Vera)
+
+* LUCENE-8236: Filter duplicated points when creating GeoPath shapes to
+ avoid creation of bogus planes. (Ignacio Vera)
+
+* LUCENE-8243: IndexWriter.addIndexes(Directory[]) did not properly preserve
+ index file names for updated doc values fields (Simon Willnauer,
+ Michael McCandless, Nhat Nguyen)
+
+* LUCENE-8275: Push up #checkPendingDeletes to Directory to ensure IW fails if
+ the directory has pending deletes files even if the directory is filtered or
+ a FileSwitchDirectory (Simon Willnauer, Robert Muir)
+
+* LUCENE-8244: Do not leak open file descriptors in SearcherTaxonomyManager's
+ refresh on exception (Mike McCandless)
+
+* LUCENE-8305: ComplexPhraseQuery.rewrite now handles an embedded MultiTermQuery
+ that rewrites to a MatchNoDocsQuery instead of throwing an exception.
+ (Bjarke Mortensen, Andy Tran via David Smiley)
+
+* LUCENE-8287: Ensure that empty regex completion queries always return no results.
+ (Julie Tibshirani via Jim Ferenczi)
+
+* LUCENE-8317: Prevent concurrent deletes from being applied during full flush.
+ Future deletes could potentially be exposed to flushes/commits/refreshes if the
+ amount of RAM used by deletes is greater than half of the IW RAM buffer. (Simon Willnauer)
+
+* LUCENE-8320: Fix WindowsFS to correctly account for rename and hardlinks.
+ (Simon Willnauer, Nhat Nguyen)
+
+* LUCENE-8328: Ensure ReadersAndUpdates consistently executes under lock.
+ (Nhat Nguyen via Simon Willnauer)
+
+* LUCENE-8325: Fixed the smartcn tokenizer to not split UTF-16 surrogate pairs.
+ (chengpohi via Jim Ferenczi)
+
+* LUCENE-8186: LowerCaseTokenizerFactory now lowercases text in multi-term
+ queries. (Tim Allison via Adrien Grand)
+
+* LUCENE-8278: Some end-of-input no-scheme domain-only URL tokens are typed as
+ <ALPHANUM> rather than <URL>. (Junte Zhang, Steve Rowe)
+
+* LUCENE-8355: Prevent IW from opening an already dropped segment while DV updates
+ are written. (Nhat Nguyen via Simon Willnauer)
+
+* LUCENE-8344: TokenStreamToAutomaton (used by some suggesters) was not ignoring a trailing
+ position increment when the preservePositionIncrement setting is false.
+ (David Smiley, Jim Ferenczi)
+
+* LUCENE-8357: FunctionScoreQuery.boostByQuery() and boostByValue() were
+ producing truncated Explanations (Markus Jelsma, Alan Woodward)
+
+* LUCENE-8360: NGramTokenFilter and EdgeNGramTokenFilter did not correctly
+ set position increments in end() (Alan Woodward)
+
+Other
+
+* LUCENE-8301: Update randomizedtesting to 2.6.0. (Dawid Weiss)
+
+* LUCENE-8299: Geo3D wrapper uses new polygon method factory that gives better
+ support for polygons with many points (>100). (Ignacio vera)
+
+* LUCENE-8261: InterpolatedProperties.interpolate and recursive property
+ references. (Steve Rowe, Dawid Weiss)
+
+* LUCENE-8228: removed obsolete IndexDeletionPolicy clone() requirements from
+ the javadoc. (Dawid Weiss)
+
+* LUCENE-8219: Use a realistic estimate of the number of nodes and links in
+ LevensteinAutomaton.java, to save reallocation of arrays.
+ (Christian Ziech)
+
+* LUCENE-8214: Improve selection of testPoint for GeoComplexPolygon.
+ (Ignacio Vera)
+
+* SOLR-10912: Add automatic patch validation. (Mano Kovacs, Steve Rowe)
+
+* LUCENE-8122, LUCENE-8175: Upgrade analysis/icu to ICU 61.1.
+ (Robert Muir, Adrien Grand, Uwe Schindler)
+
+* LUCENE-8291: Remove QueryTemplateManager utility class from XML queryparser.
+ This class is just a general XML transforming tool (using property files and
+ XSLT) and has nothing to do with query parsing. It can easily be implemented
+ using more sophisticated libraries or using XSL transformers from the JDK.
+ This change also removes the Lucene demo webapp to prevent XSS issues in
+ untested/unmaintained code. (Uwe Schindler)
+
+Build
+
+* LUCENE-7935: Publish .sha512 hash files with the release artifacts and stop
+ publishing .md5 hashes since the algorithm is broken (janhoy)
+
+* LUCENE-8230: Upgrade forbiddenapis to version 2.5. (Uwe Schindler)
+
+Documentation
+
+* LUCENE-8238: Improve WordDelimiterFilter and WordDelimiterGraphFilter javadocs
+ (Mike Sokolov via Mike McCandless)
+
+======================= Lucene 7.3.1 =======================
+
+Bug fixes
+
+* LUCENE-8254: LRUQueryCache could cause IndexReader to hang on close, when
+ shared with another reader with no CacheHelper (Alan Woodward, Simon Willnauer,
+ Adrien Grand)
+
+======================= Lucene 7.3.0 =======================
+
+API Changes
+
+* LUCENE-8051: LevensteinDistance renamed to LevenshteinDistance.
+ (Pulak Ghosh via Adrien Grand)
+
+* LUCENE-8099: Deprecate CustomScoreQuery, BoostedQuery and BoostingQuery.
+ Users should instead use FunctionScoreQuery, possibly combined with
+ a lucene expression (Alan Woodward)
+
+* LUCENE-8104: Remove facets module compile-time dependency on queries
+ (Alan Woodward)
+
+* LUCENE-8145: UnifiedHighlighter now uses a unitary OffsetsEnum rather
+ than a list of enums (Alan Woodward, David Smiley, Jim Ferenczi, Timothy
+ Rodriguez)
+
+New Features
+
+* LUCENE-2899: Add new module analysis/opennlp, with analysis components
+ to perform tokenization, part-of-speech tagging, lemmatization and phrase
+ chunking by invoking the corresponding OpenNLP tools. Named entity
+ recognition is also provided as a Solr update request processor.
+ (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau,
+ Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe)
+
+* LUCENE-8126: Add new spatial prefix tree (SPT) based on google S2 geometry.
+ It can only be used currently with Geo3D spatial context and it provides
+ improvements on indexing time for non-points shapes and on query performance.
+ (Ignacio Vera, David Smiley).
+
+Improvements
+
+* LUCENE-8081: Allow IndexWriter to opt out of flushing on indexing threads
+ Index/Update Threads try to help out flushing pending document buffers to
+ disk. This change adds an expert setting to opt ouf of this behavior unless
+ flusing is falling behind. (Simon Willnauer)
+
+* LUCENE-8086: spatial-extras Geo3dFactory: Use GeoExactCircle with
+ configurable precision for non-spherical planet models.
+ (Ignacio Vera via David Smiley)
+
+* LUCENE-8093: TrimFilterFactory implements MultiTermAwareComponent (Alan Woodward)
+
+* LUCENE-8094: TermInSetQuery.toString now returns "field:(A B C)" (Mike McCandless)
+
+* LUCENE-8121: UnifiedHighlighter passage relevancy is improved for terms that are
+ position sensitive (e.g. part of a phrase) by having an accurate freq.
+ (David Smiley)
+
+* LUCENE-8129: A Unicode set filter can now be specified when using ICUFoldingFilter.
+ (Ere Maijala)
+
+* LUCENE-7966: Build Multi-Release JARs to enable usage of optimized intrinsic methods
+ from Java 9 for index bounds checking and array comparison/mismatch. This change
+ introduces Java 8 replacements for those Java 9 methods and patches the compiled
+ classes to use the optimized variants through the MR-JAR mechanism.
+ (Uwe Schindler, Robert Muir, Adrien Grand, Mike McCandless)
+
+* LUCENE-8127: Speed up rewriteNoScoring when there are no MUST clauses.
+ (Michael Braun via Adrien Grand)
+
+* LUCENE-8152: Improve consumption of doc-value iterators. (Horatiu Lazu via
+ Adrien Grand)
+
+* LUCENE-8033: FieldInfos now always use a dense encoding. (Mayya Sharipova
+ via Adrien Grand)
+
+* LUCENE-8190: Specialized cell interface to allow any spatial prefix tree to
+ benefit from the setting setPruneLeafyBranches on RecursivePrefixTreeStrategy.
+ (Ignacio Vera)
+
+Bug Fixes
+
+* LUCENE-8077: Fixed bug in how CheckIndex verifies doc-value iterators.
+ (Xiaoshan Sun via Adrien Grand)
+
+* SOLR-11758: Fixed FloatDocValues.boolVal to correctly return true for all values != 0.0F
+ (Munendra S N via hossman)
+
+* LUCENE-8121: The UnifiedHighlighter would highlight some terms within some nested
+ SpanNearQueries at positions where it should not have. It's fixed in the UH by
+ switching to the SpanCollector API. The original Highlighter still has this
+ problem (LUCENE-2287, LUCENE-5455, LUCENE-6796). Some public but internal parts of
+ the UH were refactored. (David Smiley, Steve Davids)
+
+* LUCENE-8120: Fix LatLonBoundingBox's toString() method (Martijn van Groningen, Adrien Grand)
+
+* LUCENE-8130: Fix NullPointerException from TermStates.toString() (Mike McCandless)
+
+* LUCENE-8124: Fixed HyphenationCompoundWordTokenFilter to handle correctly
+ hyphenation patterns with indicator >= 7. (Holger Bruch via Adrien Grand)
+
+* LUCENE-8163: BaseDirectoryTestCase could produce random filenames that fail
+ on Windows (Alan Woodward)
+
+* LUCENE-8174: Fixed {Float,Double,Int,Long}Range.toString(). (Oliver Kaleske
+ via Adrien Grand)
+
+* LUCENE-8182: Fixed BoostingQuery to apply the context boost instead of the parent query
+ boost (Jim Ferenczi)
+
+* LUCENE-8188: Fixed bugs in OpenNLPOpsFactory that were causing InputStreams fetched from the
+ ResourceLoader to be leaked (hossman)
+
+
+Other
+
+* LUCENE-8111: IndexOrDocValuesQuery Javadoc references outdated method name.
+ (Kai Chan via Adrien Grand)
+
+* LUCENE-8106: Add script (reproduceJenkinsFailures.py) to attempt to reproduce
+ failing tests from a Jenkins log. (Steve Rowe)
+
+* LUCENE-8075: Removed unnecessary null check in IntersectTermsEnum.
+ (Pulak Ghosh via Adrien Grand)
+
+* LUCENE-8156: Require users to not have ASM on the Ant classpath during build.
+ This is required by LUCENE-7966. (Adrien Grand, Uwe Schindler)
+
+* LUCENE-8161: spatial-extras: the Spatial4j dependency has been updated from 0.6 to 0.7,
+ which is drop-in compatible (Lucene doesn't expressly use any of the few API differences).
+ Spatial4j 0.7 is compatible with JTS 1.15.0 and not any prior version. JTS 1.15.0 is
+ dual-licensed to include BSD; prior versions were LGPL. (David Smiley)
+
+* LUCENE-8155: Add back support in smoke tester to run against later Java versions.
+ (Uwe Schindler)
+
+* LUCENE-8169: Migrated build to use OpenClover 4.2.1 for checking code coverage.
+ (Uwe Schindler)
+
+* LUCENE-8170: Improve OpenClover reports (separate test from production code);
+ enable coverage reports inside test-frameworks. (Uwe Schindler)
+
+Build
+
+* LUCENE-8168: Moved Groovy scripts in build files to separate files.
+ Update Groovy to 2.4.13. (Uwe Schindler)
+
+* LUCENE-8176: HttpReplicatorTest awaits more than a minute for stopping Jetty threads
+ (Mikhail Khludnev)
+
+======================= Lucene 7.2.1 =======================
+
+Bug Fixes
+
+* LUCENE-8117: Fix advanceExact on SortedNumericDocValues produced by Lucene54DocValues. (Jim Ferenczi).
+
+======================= Lucene 7.2.0 =======================
+
+API Changes
+
+* LUCENE-8017, LUCENE-8042: Weight, DoubleValuesSource and related objects
+ now implement a SegmentCacheable interface, with a single method
+ isCacheable(LeafReaderContext) determining whether or not the object may
+ be cached against a LeafReader. (Alan Woodward, Robert Muir)
+
+* LUCENE-8038: Payload factors for scoring in PayloadScoreQuery are now
+ calculated by a PayloadDecoder, instead of delegating to the Similarity.
+ (Alan Woodward)
+
+* LUCENE-8014: Similarity.computeSlopFactor() and
+ Similarity.computePayloadFactor() have been deprecated. (Alan Woodward)
+
+* LUCENE-6278: Scorer.freq() has been removed (Alan Woodward)
+
+* LUCENE-7736: DoubleValuesSource and LongValuesSource now expose a
+ rewrite(IndexSearcher) function. (Alan Woodward)
+
+* LUCENE-7998: DoubleValuesSource.fromQuery() allows you to use the scores
+ from a Query as a DoubleValuesSource. (Alan Woodward)
+
+* LUCENE-8049: IndexWriter.getMergingSegments()'s return type was changed from
+ Collection to Set to more accurately reflect it's nature. (David Smiley)
+
+* LUCENE-8059: TopFieldDocCollector can now early terminate collection when
+ the sort order is compatible with the index order. As a consequence,
+ EarlyTerminatingSortingCollector is now deprecated. (Adrien Grand)
+
+New Features
+
+* LUCENE-8061: Add convenience factory methods to create BBoxes and XYZSolids
+ directly from bounds objects.
+
+* LUCENE-7736: IndexReaderFunctions expose various IndexReader statistics as
+ DoubleValuesSources. (Alan Woodward)
+
+* LUCENE-8068: Allow IndexWriter to write a single DWPT to disk Adds a
+ flushNextBuffer method to IndexWriter that allows the caller to
+ synchronously move the next pending or the biggest non-pending index buffer to
+ disk. This enables flushing selected buffer to disk without highjacking an
+ indexing thread. This is for instance useful if more than one IW (shards) must
+ be maintained in a single JVM / system. (Simon Willnauer)
+
+Bug Fixes
+
+* LUCENE-8076: Normalize Vincenti distance calculation for planet models that aren't normalized.
+ (Ignacio Vera)
+
+* LUCENE-8057: Exact circle bounds computation was incorrect.
+ (Ignacio Vera)
+
+* LUCENE-8056: Exact circle segment bounding suffered from precision errors.
+ (Karl Wright)
+
+* LUCENE-8054: Fix the exact circle case where relationships fail when the
+ planet model has c <= ab, because the planes are constructed incorrectly.
+ (Ignacio Vera)
+
+* LUCENE-7991: KNearestNeighborDocumentClassifier.knnSearch no longer applies
+ a previous boosted field's factor to subsequent unboosted fields.
+ (Christine Poerschke)
+
+* LUCENE-7999: Switch from int to long to track the name for the next
+ segment to write, so that very long lived indices with very frequent
+ refreshes or commits, and high indexing thread counts, do not
+ overflow an int (Mykhailo Demianenko via Mike McCandless)
+
+* LUCENE-8025: Use sumTotalTermFreq=sumDocFreq when scoring DOCS_ONLY fields
+ that omit term frequency information, as it is equivalent in that case.
+ Previously bogus numbers were used, and many similarities would
+ completely degrade. (Robert Muir, Adrien Grand)
+
+* LUCENE-8045: ParallelLeafReader did not correctly report FieldInfo.dvGen
+ (Alan Woodward)
+
+* LUCENE-8034: Use subtraction instead of addition to sidestep int
+ overflow in SpanNotQuery. (Hari Menon via Mike McCandless)
+
+* LUCENE-8078: The query cache should not cache instances of
+ MatchNoDocsQuery. (Jon Harper via Adrien Grand)
+
+* LUCENE-8048: Filesystems do not guarantee order of directories updates
+ (Nikolay Martynov, Simon Willnauer, Erick Erickson)
+
+Optimizations
+
+* LUCENE-8018: Smaller FieldInfos memory footprint by not retaining unnecessary
+ references to TreeMap entries. (Julian Vassev via Adrien Grand)
+
+* LUCENE-7994: Use int/int scatter map to gather facet counts when the
+ number of hits is small relative to the number of unique facet labels
+ (Dawid Weiss, Robert Muir, Mike McCandless)
+
+* LUCENE-8062: GlobalOrdinalsQuery is no longer eligible for caching. (Jim Ferenczi)
+
+* LUCENE-8058: Large instances of TermInSetQuery are no longer eligible for
+ caching as they could break memory accounting of the query cache.
+ (Adrien Grand)
+
+* LUCENE-8055: MemoryIndex.MemoryDocValuesIterator returns 2 documents
+ instead of 1. (Simon Willnauer)
+
+* LUCENE-8043: Fix document accounting in IndexWriter to prevent writing too many
+ documents. Once this happens, Lucene refuses to open the index and throws a
+ CorruptIndexException. (Simon Willnauer, Yonik Seeley, Mike McCandless)
+
+Tests
+
+* LUCENE-8035: Run tests with JDK-specific options: --illegal-access=deny
+ on Java 9+. (Uwe Schindler)
+
+Build
+
+* LUCENE-6144: Upgrade Ivy to 2.4.0; 'ant ivy-bootstrap' now removes old Ivy
+ jars in ~/.ant/lib/. (Shawn Heisey, Steve Rowe)
+
+
+======================= Lucene 7.1.0 =======================
+
+Changes in Runtime Behavior
+
+* Resolving of external entities in queryparser/xml/CoreParser is disallowed
+ by default. See SOLR-11477 for details.
+
+New Features
+
+* LUCENE-7970: Add a shape to Geo3D that consists of multiple planes that
+ approximate a true circle, rather than an ellipse, for non-spherical planet models.
+ (Karl Wright, Ignacio Vera)
+
+* LUCENE-7955: Add support for the concept of "nearest distance" to Geo3D's
+ GeoPath abstraction, which is the distance along the path to the point that is
+ closest to the provided point. (Karl Wright)
+
+* LUCENE-7906: Add spatial relationships between all currently-defined Geo shapes.
+ (Ignacio Vera)
+
+* LUCENE-7955: Add support for zero-width paths. (Karl Wright)
+
+* LUCENE-7936: Add serialization and deserialization support to Geo3D. (Karl Wright,
+ Ignacio Vera)
+
+* LUCENE-7942: Distance computations now have the ability to accurately aggregate
+ distances, rather than just doing sums. (Karl Wright)
+
+* LUCENE-7934: Add a planet model interface. (Karl Wright)
+
+* LUCENE-7918: Revamp the API for composites so that it's generic and can be used
+ for many kinds of shapes. (Ignacio Vera)
+
+* LUCENE-7621: Add CoveringQuery, a query whose required number of matching
+ clauses can be defined per document. (Adrien Grand)
+
+* LUCENE-7927: Add LongValueFacetCounts, to compute facet counts for individual
+ numeric values (Mike McCandless)
+
+* LUCENE-7940: Add BengaliAnalyzer. (Md. Abdulla-Al-Sun via Robert Muir)
+
+* LUCENE-7392: Add point based LatLonBoundingBox as new RangeField Type.
+ (Nick Knize)
+
+* LUCENE-7951: Spatial-extras has much better Geo3d support by implementing Spatial4j
+ abstractions: SpatialContextFactory, ShapeFactory, BinaryCodec, DistanceCalculator.
+ (Ignacio Vera, David Smiley)
+
+* LUCENE-7973: Update dictionary version for Ukrainian analyzer to 3.9.0 (Andriy
+ Rysin via Dawid Weiss)
+
+* LUCENE-7974: Add FloatPointNearestNeighbor, an N-dimensional FloatPoint
+ K-nearest-neighbor search implementation. (Steve Rowe)
+
+* LUCENE-7975: Change the default taxonomy facets cache to a faster
+ byte[] (UTF-8) based cache. (Mike McCandless)
+
+* LUCENE-7972: DirectoryTaxonomyReader, in Lucene's facet module, now
+ implements Accountable, so you can more easily track how much heap
+ it's using. (Mike McCandless)
+
+* LUCENE-7982: A new NormsFieldExistsQuery matches documents that have
+ norms in a specified field (Colin Goodheart-Smithe via Mike McCandless)
+
+Optimizations
+
+* LUCENE-7905: Optimize how OrdinalMap (used by
+ SortedSetDocValuesFacetCounts and others) builds its map (Robert
+ Muir, Adrien Grand, Mike McCandless)
+
+* LUCENE-7655: Speed up geo-distance queries in case of dense single-valued
+ fields when most documents match. (Maciej Zasada via Adrien Grand)
+
+* LUCENE-7897: IndexOrDocValuesQuery now requires the range cost to be more
+ than 8x greater than the cost of the lead iterator in order to use doc values.
+ (Murali Krishna P via Adrien Grand)
+
+* LUCENE-7925: Collapse duplicate SHOULD or MUST clauses by summing up their
+ boosts. (Adrien Grand)
+
+* LUCENE-7939: MinShouldMatchSumScorer now leverages two-phase iteration in
+ order to be faster when used in conjunctions. (Adrien Grand)
+
+* LUCENE-7827: AnalyzingInfixSuggester doesn't create "textgrams"
+ when minPrefixChar=0 (Mikhail Khludnev)
+
+Bug Fixes
+
+* LUCENE-8066: It was still possible to construct a concave GeoExactCircle, so use
+ a sector approach to prevent that. (Ignacio Vera)
+
+* LUCENE-7967: The GeoDegeneratePoint isWithin() method needed allowance for
+ numerical precision. (Karl Wright)
+
+* LUCENE-7965: GeoBBoxFactory was constructing the wrong shape at the poles
+ if the longitude span was greater than 180 degrees. (Karl Wright)
+
+* LUCENE-7916: Prevent ArrayIndexOutOfBoundsException if ICUTokenizer is used
+ with a different ICU JAR version than it is compiled against. Note, this is
+ not recommended, lucene-analyzers-icu contains binary data structures
+ specific to ICU/Unicode versions it is built against. (Chris Koenig, Robert Muir)
+
+* LUCENE-7891: Lucene's taxonomy facets now uses a non-buggy LRU cache
+ by default. (Jan-Willem van den Broek via Mike McCandless)
+
+* LUCENE-7959: Improve NativeFSLockFactory's exception message if it cannot create
+ write.lock for an empty index due to bad permissions/read-only filesystem/etc.
+ (Erick Erickson, Shawn Heisey, Robert Muir)
+
+* LUCENE-7968: AnalyzingSuggester would sometimes order suggestions incorrectly,
+ it did not properly break ties on the surface forms when both the weights and
+ the analyzed forms were equal. (Robert Muir)
+
+* LUCENE-7957: ConjunctionScorer.getChildren was failing to return all
+ child scorers (Adrien Grand, Mike McCandless)
+
+* SOLR-11477: Disallow resolving of external entities in queryparser/xml/CoreParser
+ by default. (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+Build
+
+* SOLR-11181: Switch order of maven artifact publishing procedure: deploy first
+ instead of locally installing first, to workaround a double repository push of
+ *-sources.jar and *-javadoc.jar files. (Lynn Monson via Steve Rowe)
+
+* LUCENE-6673: Maven build fails for target javadoc:jar.
+ (Ramkumar Aiyengar, Daniel Collins via Steve Rowe)
+
+* LUCENE-7985: Upgrade forbiddenapis to 2.4.1. (Uwe Schindler)
+
+Other
+
+* LUCENE-7948, LUCENE-7937: Upgrade randomizedtesting to 2.5.3 (minor fixes
+ in test filtering for IDEs). (Mike Sokolov, Dawid Weiss)
+
+* LUCENE-7933: LongBitSet now validates the numBits parameter (Won
+ Jonghoon, Mike McCandless)
+
+* LUCENE-7978: Add some more documentation about setting up build
+ environment. (Anton R. Yuste via Uwe Schindler)
+
+* LUCENE-7983: IndexWriter.IndexReaderWarmer is now a functional interface
+ instead of an abstract class with a single method (Dawid Weiss)
+
+* LUCENE-5753: Update TLDs recognized by UAX29URLEmailTokenizer. (Steve Rowe)
+
+
+======================= Lucene 7.0.1 =======================
+
+Bug Fixes
+
+* LUCENE-7957: ConjunctionScorer.getChildren was failing to return all
+ child scorers (Adrien Grand, Mike McCandless)
+
+======================= Lucene 7.0.0 =======================
+
+New Features
+
+* LUCENE-7703: SegmentInfos now record the major Lucene version at index
+ creation time. (Adrien Grand)
+
+* LUCENE-7756: LeafReader.getMetaData now exposes the index created version as
+ well as the oldest Lucene version that contributed to the segment.
+ (Adrien Grand)
+
+* LUCENE-7854: The new TermFrequencyAttribute used during analysis
+ with a custom token stream allows indexing custom term frequencies
+ (Mike McCandless)
+
+* LUCENE-7866: Add a new DelimitedTermFrequencyTokenFilter that allows to
+ mark tokens with a custom term frequency (LUCENE-7854). It parses a numeric
+ value after a separator char ('|') at the end of each token and changes
+ the term frequency to this value. (Uwe Schindler, Robert Muir, Mike
+ McCandless)
+
+* LUCENE-7868: Multiple threads can now resolve deletes and doc values
+ updates concurrently, giving sizable speedups in update-heavy
+ indexing use cases (Simon Willnauer, Mike McCandless)
+
+* LUCENE-7823: Pure query based naive bayes classifier using BM25 scores (Tommaso Teofili)
+
+* LUCENE-7838: Knn classifier based on fuzzified term queries (Tommaso Teofili)
+
+* LUCENE-7855: Added advanced options of the Wikipedia tokenizer to its factory.
+ (Juan Pedro via Adrien Grand)
+
+API Changes
+
+* LUCENE-2605: Classic QueryParser no longer splits on whitespace by default.
+ Use setSplitOnWhitespace(true) to get the old behavior. (Steve Rowe)
+
+* LUCENE-7369: Similarity.coord and BooleanQuery.disableCoord are removed.
+ (Adrien Grand)
+
+* LUCENE-7368: Removed query normalization. (Adrien Grand)
+
+* LUCENE-7355: AnalyzingQueryParser has been removed as its functionality has
+ been folded into the classic QueryParser. (Adrien Grand)
+
+* LUCENE-7407: Doc values APIs have been switched from random access
+ to iterators, enabling future codec compression improvements. (Mike
+ McCandless)
+
+* LUCENE-7475: Norms now support sparsity, allowing to pay for what is
+ actually used. (Adrien Grand)
+
+* LUCENE-7494: Points now have a per-field API, like doc values. (Adrien Grand)
+
+* LUCENE-7410: Cache keys and close listeners have been refactored in order
+ to be less trappy. See IndexReader.getReaderCacheHelper and
+ LeafReader.getCoreCacheHelper. (Adrien Grand)
+
+* LUCENE-6819: Index-time boosts are not supported anymore. As a replacement,
+ index-time scoring factors should be indexed into a doc value field and
+ combined at query time using eg. FunctionScoreQuery. (Adrien Grand)
+
+* LUCENE-7734: FieldType's copy constructor was widened to accept any IndexableFieldType.
+ (David Smiley)
+
+* LUCENE-7701: Grouping collectors have been refactored, such that groups are
+ now defined by a GroupSelector implementation. (Alan Woodward)
+
+* LUCENE-7741: DoubleValuesSource now has an explain() method (Alan Woodward,
+ Adrien Grand)
+
+* LUCENE-7815: Removed the PostingsHighlighter; you should use the UnifiedHighlighter
+ instead, which derived from the UH. WholeBreakIterator and
+ CustomSeparatorBreakIterator were moved to UH's package. (David Smiley)
+
+* LUCENE-7850: Removed support for legacy numerics. (Adrien Grand)
+
+* LUCENE-7500: Removed abstract LeafReader.fields(); instead terms(fieldName)
+ has been made abstract, fomerly was final. Also, MultiFields.getTerms
+ was optimized to work directly instead of being implemented on getFields.
+ (David Smiley)
+
+* LUCENE-7872: TopDocs.totalHits is now a long. (Adrien Grand, hossman)
+
+* LUCENE-7868: IndexWriterConfig.setMaxBufferedDeleteTerms is
+ removed. (Simon Willnauer, Mike McCandless)
+
+* LUCENE-7877: PrefixAwareTokenStream is replaced with ConcatenatingTokenStream
+ (Alan Woodward, Uwe Schindler, Adrien Grand)
+
+* LUCENE-7867: The deprecated Token class is now only available in the test
+ framework (Alan Woodward, Adrien Grand)
+
+* LUCENE-7723: DoubleValuesSource enforces implementation of equals() and
+ hashCode() (Alan Woodward)
+
+* LUCENE-7737: The spatial-extras module no longer has a dependency on the
+ queries module. All uses of ValueSource are either replaced with core
+ DoubleValuesSource extensions, or with the new ShapeValuesSource and
+ ShapeValuesPredicate classes (Alan Woodward, David Smiley)
+
+* LUCENE-7892: Doc-values query factory methods have been renamed so that their
+ name contains "slow" in order to cleary indicate that they would usually be a
+ bad choice. (Adrien Grand)
+
+* LUCENE-7899: FieldValueQuery is renamed to DocValuesFieldExistsQuery
+ (Adrien Grand, Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7626: IndexWriter will no longer accept broken token offsets
+ (Mike McCandless)
+
+* LUCENE-7859: Spatial-extras PackedQuadPrefixTree bug that only revealed itself
+ with the new pointsOnly optimizations in LUCENE-7845. (David Smiley)
+
+* LUCENE-7871: fix false positive match in BlockJoinSelector when children have no value, introducing
+ wrap methods accepting children as DISI. Extracting ToParentDocValues (Mikhail Khludnev)
+
+* LUCENE-7914: Add a maximum recursion level in automaton recursive
+ functions (Operations.isFinite and Operations.topsortState) to prevent
+ large automaton to overflow the stack (Robert Muir, Adrien Grand, Jim Ferenczi)
+
+* LUCENE-7864: IndexMergeTool is not using intermediate hard links (even
+ if possible). (Dawid Weiss)
+
+* LUCENE-7956: Fixed potential stack overflow error in ICUNormalizer2CharFilter.
+ (Adrien Grand)
+
+* LUCENE-7963: Remove useless getAttribute() in DefaultIndexingChain that
+ causes performance drop, introduced by LUCENE-7626. (Daniel Mitterdorfer
+ via Uwe Schindler)
+
+Improvements
+
+* LUCENE-7489: Better storage of sparse doc-values fields with the default
+ codec. (Adrien Grand)
+
+* LUCENE-7730: More accurate encoding of the length normalization factor
+ thanks to the removal of index-time boosts. (Adrien Grand)
+
+* LUCENE-7901: Original Highlighter now eagerly throws an exception if you
+ provide components that are null. (Jason Gerlowski, David Smiley)
+
+* LUCENE-7841: Normalize ґ to г in Ukrainian analyzer. (Andriy Rysin via Dawid Weiss)
+
+Optimizations
+
+* LUCENE-7416: BooleanQuery optimizes queries that have queries that occur both
+ in the sets of SHOULD and FILTER clauses, or both in MUST/FILTER and MUST_NOT
+ clauses. (Spyros Kapnissis via Adrien Grand, Uwe Schindler)
+
+* LUCENE-7506: FastTaxonomyFacetCounts should use CPU in proportion to
+ the size of the intersected set of hits from the query and documents
+ that have a facet value, so sparse faceting works as expected
+ (Adrien Grand via Mike McCandless)
+
+* LUCENE-7519: Add optimized APIs to compute browse-only top level
+ facets (Mike McCandless)
+
+* LUCENE-7589: Numeric doc values now have the ability to encode blocks of
+ values using different numbers of bits per value if this proves to save
+ storage. (Adrien Grand)
+
+* LUCENE-7845: Enhance spatial-extras RecursivePrefixTreeStrategy queries when the
+ query is a point (for 2D) or a is a simple date interval (e.g. 1 month). When
+ the strategy is marked as pointsOnly, the results is a TermQuery. (David Smiley)
+
+* LUCENE-7874: DisjunctionMaxQuery rewrites to a BooleanQuery when tiebreaker is set to 1. (Jim Ferenczi)
+
+* LUCENE-7828: Speed up range queries on range fields by improving how we
+ compute the relation between the query and inner nodes of the BKD tree.
+ (Adrien Grand)
+
+Other
+
+* LUCENE-7923: Removed FST.Arc.node field (unused). (Dawid Weiss)
+
+* LUCENE-7328: Remove LegacyNumericEncoding from GeoPointField. (Nick Knize)
+
+* LUCENE-7360: Remove Explanation.toHtml() (Alan Woodward)
+
+* LUCENE-7681: MemoryIndex uses new DocValues API (Alan Woodward)
+
+* LUCENE-7753: Make fields static when possible.
+ (Daniel Jelinski via Adrien Grand)
+
+* LUCENE-7540: Upgrade ICU to 59.1 (Mike McCandless, Jim Ferenczi)
+
+* LUCENE-7852: Correct copyright year(s) in lucene/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
+* LUCENE-7719: Generalized the UnifiedHighlighter's support for AutomatonQuery
+ for character & binary automata. Added AutomatonQuery.isBinary. (David Smiley)
+
+* LUCENE-7873: Due to serious problems with context class loaders in several
+ frameworks (OSGI, Java 9 Jigsaw), the lookup of Codecs, PostingsFormats,
+ DocValuesFormats and all analysis factories was changed to only inspect the
+ current classloader that defined the interface class (lucene-core.jar).
+ See MIGRATE.txt for more information! (Uwe Schindler, Dawid Weiss)
+
+* LUCENE-7883: Lucene no longer uses the context class loader when resolving
+ resources in CustomAnalyzer or ClassPathResourceLoader. Resources are only
+ resolved against Lucene's class loader by default. Please use another builder
+ method to change to a custom classloader. (Uwe Schindler)
+
+* LUCENE-5822: Convert README to Markdown (Jason Gerlowski via Mike Drob)
+
+* LUCENE-7773: Remove unused/deprecated token types from StandardTokenizer.
+ (Ahmet Arslan via Steve Rowe)
+
+* LUCENE-7800: Remove code that potentially rethrows checked exceptions
+ from methods that don't declare them ("sneaky throw" hack). (Robert Muir,
+ Uwe Schindler, Dawid Weiss)
+
+* LUCENE-7876: Avoid calls to LeafReader.fields() and MultiFields.getFields()
+ that are trivially replaced by LeafReader.terms() and MultiFields.getTerms()
+ (David Smiley)
+
+======================= Lucene 6.6.5 =======================
+(No Changes)
+
+======================= Lucene 6.6.4 =======================
+(No Changes)
+
+======================= Lucene 6.6.3 =======================
+
+Build
+
+* LUCENE-6144: Upgrade Ivy to 2.4.0; 'ant ivy-bootstrap' now removes old Ivy
+ jars in ~/.ant/lib/. (Shawn Heisey, Steve Rowe)
+
+======================= Lucene 6.6.2 =======================
+
+Changes in Runtime Behavior
+
+* Resolving of external entities in queryparser/xml/CoreParser is disallowed
+ by default. See SOLR-11477 for details.
+
+Bug Fixes
+
+* SOLR-11477: Disallow resolving of external entities in queryparser/xml/CoreParser
+ by default. (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+======================= Lucene 6.6.1 =======================
+
+Bug Fixes
+
+* LUCENE-7869: Changed MemoryIndex to sort 1d points. In case of 1d points, the PointInSetQuery.MergePointVisitor expects
+ that these points are visited in ascending order. The memory index doesn't do this and this can result in document
+ with multiple points that should match to not match. (Martijn van Groningen)
+
+* LUCENE-7878: Fix query builder to keep the SHOULD clause that wraps multi-word synonyms. (Jim Ferenczi)
+
+======================= Lucene 6.6.0 =======================
+
+New Features
+
+* LUCENE-7811: Add a concurrent SortedSet facets implementation.
+ (Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7777: ByteBlockPool.readBytes sometimes throws
+ ArrayIndexOutOfBoundsException when byte blocks larger than 32 KB
+ were added (Mike McCandless)
+
+* LUCENE-7797: The static FSDirectory.listAll(Path) method was always
+ returning an empty array. (Atkins Chang via Mike McCandless)
+
+* LUCENE-7481: Fixed missing rewrite methods for SpanPayloadCheckQuery
+ and PayloadScoreQuery. (Erik Hatcher)
+
+* LUCENE-7808: Fixed PayloadScoreQuery and SpanPayloadCheckQuery
+ .equals and .hashCode methods. (Erik Hatcher)
+
+* LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField
+ (Mikhail Khludnev)
+
+* LUCENE-7814: DateRangePrefixTree (in spatial-extras) had edge-case bugs for
+ years >= 292,000,000. (David Smiley)
+
+* LUCENE-5365, LUCENE-7818: Fix incorrect condition in queryparser's
+ QueryNodeOperation#logicalAnd(). (Olivier Binda, Amrit Sarkar,
+ AppChecker via Uwe Schindler)
+
+* LUCENE-7821: The classic and flexible query parsers, as well as Solr's
+ "lucene"/standard query parser, should require " TO " in range queries,
+ and accept "TO" as endpoints in range queries. (hossman, Steve Rowe)
+
+* LUCENE-7824: Fix graph query analysis for multi-word synonym rules with common terms (eg. new york, new york city).
+ (Jim Ferenczi)
+
+* LUCENE-7817: Pass cached query to onQueryCache instead of null.
+ (Christoph Kaser via Adrien Grand)
+
+* LUCENE-7831: CodecUtil should not seek to negative offsets. (Adrien Grand)
+
+* LUCENE-7833: ToParentBlockJoinQuery computed the min score instead of the max
+ score with ScoreMode.MAX. (Adrien Grand)
+
+* LUCENE-7847: Fixed all-docs-match optimization of range queries on range
+ fields. (Adrien Grand)
+
+* LUCENE-7810: Fix equals() and hashCode() methods of several join queries.
+ (Hossman, Adrien Grand, Martijn van Groningen)
+
+Improvements
+
+* LUCENE-7782: OfflineSorter now passes the total number of items it
+ will write to getWriter (Mike McCandless)
+
+* LUCENE-7785: Move dictionary for Ukrainian analyzer to external dependency.
+ (Andriy Rysin via Steve Rowe, Dawid Weiss)
+
+* LUCENE-7801: SortedSetDocValuesReaderState now implements
+ Accountable so you can see how much RAM it's using (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-7792: OfflineSorter can now run concurrently if you pass it
+ an optional ExecutorService (Dawid Weiss, Mike McCandless)
+
+* LUCENE-7811: Sorted set facets now use sparse storage when
+ collecting hits, when appropriate. (Mike McCandless)
+
+Optimizations
+
+* LUCENE-7787: spatial-extras HeatmapFacetCounter will now short-circuit it's
+ work when Bits.MatchNoBits is passed. (David Smiley)
+
+Other
+
+* LUCENE-7796: Make IOUtils.reThrow idiom declare Error return type so
+ callers may use it in a way that compiler knows subsequent code is
+ unreachable. reThrow is now deprecated in favor of IOUtils.rethrowAlways
+ with a slightly different semantics (see javadoc). (Hossman, Robert Muir,
+ Dawid Weiss)
+
+* LUCENE-7754: Inner classes should be static whenever possible.
+ (Daniel Jelinski via Adrien Grand)
+
+* LUCENE-7751: Avoid boxing primitives only to call compareTo.
+ (Daniel Jelinski via Adrien Grand)
+
+* LUCENE-7743: Never call new String(String).
+ (Daniel Jelinski via Adrien Grand)
+
+* LUCENE-7761: Fixed comment in ReqExclScorer.
+ (Pablo Pita Leira via Adrien Grand)
+
+======================= Lucene 6.5.1 =======================
+
+Bug Fixes
+
+* LUCENE-7755: Fixed join queries to not reference IndexReaders, as it could
+ cause leaks if they are cached. (Adrien Grand)
+
+* LUCENE-7749: Made LRUQueryCache delegate the scoreSupplier method.
+ (Martin Amirault via Adrien Grand)
+
+* LUCENE-7769: The UnifiedHighligter wasn't highlighting portions of the query
+ wrapped in BoostQuery or SpanBoostQuery. (David Smiley, Dmitry Malinin)
+
+Other
+
+* LUCENE-7763: Remove outdated comment in IndexWriterConfig.setIndexSort javadocs.
+ (马å¯é˜³ via Christine Poerschke)
+
+======================= Lucene 6.5.0 =======================
+
+API Changes
+
+* LUCENE-7740: Refactor Range Fields to remove Field suffix (e.g., DoubleRange),
+ move InetAddressRange and InetAddressPoint from sandbox to misc module, and
+ refactor all other range fields from sandbox to core. (Nick Knize)
+
+* LUCENE-7624: TermsQuery has been renamed as TermInSetQuery and moved to core.
+ (Alan Woodward)
+
+* LUCENE-7637: TermInSetQuery requires that all terms come from the same field.
+ (Adrien Grand)
+
+* LUCENE-7644: FieldComparatorSource.newComparator() and
+ SortField.getComparator() no longer throw IOException (Alan Woodward)
+
+* LUCENE-7643: Replaced doc-values queries in lucene/sandbox with factory
+ methods on the *DocValuesField classes. (Adrien Grand)
+
+* LUCENE-7659: Added a IndexWriter#getFieldNames() method (experimental) to return
+ all field names as visible from the IndexWriter. This would be useful for
+ IndexWriter#updateDocValues() calls, to prevent calling with non-existent
+ docValues fields (Ishan Chattopadhyaya, Adrien Grand, Mike McCandless)
+
+* LUCENE-6959: Removed ToParentBlockJoinCollector in favour of
+ ParentChildrenBlockJoinQuery, that can return the matching children documents per
+ parent document. This query should be executed for each matching parent document
+ after the main query has been executed. (Adrien Grand, Martijn van Groningen,
+ Mike McCandless)
+
+* LUCENE-7628: Scorer.getChildren() now only returns Scorers that are
+ positioned on the current document, and can throw an IOException.
+ AssertingScorer checks that getChildren() is not called on an unpositioned
+ Scorer. (Alan Woodward, Adrien Grand)
+
+* LUCENE-7702: Removed GraphQuery in favour of simple boolean query. (Matt Webber via Jim Ferenczi)
+
+* LUCENE-7707: TopDocs.merge now takes a boolean option telling it
+ when to use the incoming shard index versus when to assign the shard
+ index itself, allowing users to merge shard responses incrementally
+ instead of once all shard responses are present. (Simon Willnauer,
+ Mike McCandless)
+
+* LUCENE-7700: A cleanup of merge throughput control logic. Refactored all the
+ code previously scattered throughout the IndexWriter and
+ ConcurrentMergeScheduler into a more accessible set of public methods (see
+ MergePolicy.OneMergeProgress, MergeScheduler.wrapForMerge and
+ OneMerge.mergeInit). (Dawid Weiss, Mike McCandless).
+
+* LUCENE-7734: FieldType's copy constructor was widened to accept any IndexableFieldType.
+ (David Smiley)
+
+New Features
+
+* LUCENE-7738: Add new InetAddressRange for indexing and querying InetAddress
+ ranges. (Nick Knize)
+
+* LUCENE-7449: Add CROSSES relation support to RangeFieldQuery. (Nick Knize)
+
+* LUCENE-7623: Add FunctionScoreQuery and FunctionMatchQuery (Alan Woodward,
+ Adrien Grand, David Smiley)
+
+* LUCENE-7619: Add WordDelimiterGraphFilter, just like
+ WordDelimiterFilter except it produces correct token graphs so that
+ proximity queries at search time will produce correct results (Mike
+ McCandless)
+
+* LUCENE-7656: Added the LatLonDocValuesField.new(Box/Distance)Query() factory
+ methods that are the equivalent of factory methods on LatLonPoint but operate
+ on doc values. These new methods should be wrapped in an IndexOrDocValuesQuery
+ for best performance. (Adrien Grand)
+
+* LUCENE-7673: Added MultiValued[Int/Long/Float/Double]FieldSource that given a
+ SortedNumericSelector.Type can give a ValueSource view of a
+ SortedNumericDocValues field. (Tomás Fernández Löbbe)
+
+* LUCENE-7465: Add SimplePatternTokenizer and
+ SimplePatternSplitTokenizer, using Lucene's regexp/automaton
+ implementation for analysis/tokenization (Clinton Gormley, Mike
+ McCandless)
+
+* LUCENE-7688: Add OneMergeWrappingMergePolicy class.
+ (Keith Laban, Christine Poerschke)
+
+* LUCENE-7686: The near-real-time document suggester can now
+ efficiently filter out duplicate suggestions (Uwe Schindler, Mike
+ McCandless)
+
+* LUCENE-7712: SimpleQueryParser now supports default fuzziness
+ syntax, mapping foo~ to a FuzzyQuery with edit distance 2. (Lee
+ Hinman, David Pilato via Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7630: Fix (Edge)NGramTokenFilter to no longer drop payloads
+ and preserve all attributes. (Nathan Gass via Uwe Schindler)
+
+* LUCENE-7679: MemoryIndex was ignoring omitNorms settings on passed-in
+ IndexableFields. (Alan Woodward)
+
+* LUCENE-7692: PatternReplaceCharFilterFactory now implements MultiTermAware.
+ (Adrien Grand)
+
+* LUCENE-7685: ToParentBlockJoinQuery and ToChildBlockJoinQuery now use the
+ rewritten child query in their equals and hashCode implementations.
+ (Adrien Grand)
+
+* LUCENE-7698: CommonGramsQueryFilter was producing a disconnected
+ token graph, messing up phrase queries when it was used during query
+ parsing (Ere Maijala via Mike McCandless)
+
+* LUCENE-7708: ShingleFilter without unigram was producing a disconnected
+ token graph, messing up queries when it was used during query
+ parsing (Jim Ferenczi)
+
+Improvements
+
+* LUCENE-7055: Added Weight#scorerSupplier, which allows to estimate the cost
+ of a Scorer before actually building it, in order to optimize how the query
+ should be run, eg. using points or doc values depending on costs of other
+ parts of the query. (Adrien Grand)
+
+* LUCENE-7643: IndexOrDocValuesQuery allows to execute range queries using
+ either points or doc values depending on which one is more efficient.
+ (Adrien Grand)
+
+* LUCENE-7662: If index files are missing, throw CorruptIndexException instead
+ of the less descriptive FileNotFound or NoSuchFileException (Mike Drob via
+ Mike McCandless, Erick Erickson)
+
+* LUCENE-7680: UsageTrackingQueryCachingPolicy never caches term filters anymore
+ since they are plenty fast. This also has the side-effect of leaving more
+ space in the history for costly filters. (Adrien Grand)
+
+* LUCENE-7677: UsageTrackingQueryCachingPolicy now caches compound queries a bit
+ earlier than regular queries in order to improve cache efficiency.
+ (Adrien Grand)
+
+* LUCENE-7710: BlockPackedReader throws CorruptIndexException and includes
+ IndexInput description instead of plain IOException (Mike Drob via
+ Mike McCandless)
+
+* LUCENE-7695: ComplexPhraseQueryParser to support query time synonyms (Markus Jelsma
+ via Mikhail Khludnev)
+
+* LUCENE-7747: QueryBuilder now iterates lazily over the possible paths when building a graph query
+ (Jim Ferenczi)
+
+Optimizations
+
+* LUCENE-7641: Optimized point range queries to compute documents that do not
+ match the range on single-valued fields when more than half the documents in
+ the index would match. (Adrien Grand)
+
+* LUCENE-7656: Speed up for LatLonPointDistanceQuery by computing distances even
+ less often. (Adrien Grand)
+
+* LUCENE-7661: Speed up for LatLonPointInPolygonQuery by pre-computing the
+ relation of the polygon with a grid. (Adrien Grand)
+
+* LUCENE-7660: Speed up LatLonPointDistanceQuery by improving the detection of
+ whether BKD cells are entirely within the distance close to the dateline.
+ (Adrien Grand)
+
+* LUCENE-7654: ToParentBlockJoinQuery now implements two-phase iteration and
+ computes scores lazily in order to be faster when used in conjunctions.
+ (Adrien Grand)
+
+* LUCENE-7667: BKDReader now calls `IntersectVisitor.grow()` on larger
+ increments. (Adrien Grand)
+
+* LUCENE-7638: Query parsers now analyze the token graph for articulation
+ points (or cut vertices) in order to create more efficient queries for
+ multi-token synonyms. (Jim Ferenczi)
+
+* LUCENE-7699: Query parsers now use span queries to produce more efficient
+ phrase queries for multi-token synonyms. (Matt Webber via Jim Ferenczi)
+
+* LUCENE-7742: Fix places where we were unboxing and then re-boxing
+ according to FindBugs (Daniel Jelinski via Mike McCandless)
+
+* LUCENE-7739: Fix places where we unnecessarily boxed while parsing
+ a numeric value according to FindBugs (Daniel Jelinski via Mike
+ McCandless)
+
+Build
+
+* LUCENE-7653: Update randomizedtesting to version 2.5.0. (Dawid Weiss)
+
+* LUCENE-7665: Remove grouping dependency from the join module.
+ (Martijn van Groningen)
+
+* SOLR-10023: Add non-recursive 'test-nocompile' target: Only runs unit tests.
+ Jars are not downloaded; compilation is not updated; and Clover is not enabled.
+ (Steve Rowe)
+
+* LUCENE-7694: Update forbiddenapis to version 2.3. (Uwe Schindler)
+
+* LUCENE-7693: Replace "org.apache." logic in GetMavenDependenciesTask.
+ (Daniel Collins, Christine Poerschke)
+
+* LUCENE-7726: Fix HTML entity bugs in Javadocs to be able to build with
+ Java 9. (Uwe Schindler, Hossman)
+
+* LUCENE-7727: Replace end-of-life Markdown parser "Pegdown" by "Flexmark"
+ for compatibility with Java 9. (Uwe Schindler)
+
+Other
+
+* LUCENE-7666: Fix typos in lucene-join package info javadoc.
+ (Tom Saleeba via Christine Poerschke)
+
+* LUCENE-7658: queryparser/xml CoreParser now implements SpanQueryBuilder interface.
+ (Daniel Collins, Christine Poerschke)
+
+* LUCENE-7715: NearSpansUnordered simplifications.
+ (Paul Elschot via Adrien Grand)
+
+======================= Lucene 6.4.2 =======================
+
+Bug Fixes
+
+* LUCENE-7676: Fixed FilterCodecReader to override more super-class methods.
+ Also added TestFilterCodecReader class. (Christine Poerschke)
+
+* LUCENE-7717: The UnifiedHighlighter and PostingsHighlighter were not highlighting
+ prefix queries with multi-byte characters. TermRangeQuery is affected too.
+ (Dmitry Malinin, David Smiley)
+
+======================= Lucene 6.4.1 =======================
+
+Build
+
+* LUCENE-7651: Fix Javadocs build for Java 8u121 by injecting "Google Code
+ Prettify" without adding Javascript to Javadocs's -bottom parameter.
+ Also update Prettify to latest version to fix Google Chrome issue.
+ (Uwe Schindler)
+
+Bug Fixes
+
+* LUCENE-7657: Fixed potential memory leak in the case that a (Span)TermQuery
+ with a TermContext is cached. (Adrien Grand)
+
+* LUCENE-7647: Made stored fields reclaim native memory more aggressively when
+ configured with BEST_COMPRESSION. This could otherwise result in out-of-memory
+ issues. (Adrien Grand)
+
+* LUCENE-7670: AnalyzingInfixSuggester should not immediately open an
+ IndexWriter over an already-built index. (Steve Rowe)
+
+======================= Lucene 6.4.0 =======================
+
+API Changes
+
+* LUCENE-7533: Classic query parser no longer allows autoGeneratePhraseQueries
+ to be set to true when splitOnWhitespace is false (and vice-versa).
+
+* LUCENE-7607: LeafFieldComparator.setScorer and SimpleFieldComparator.setScorer
+ are declared as throwing IOException (Alan Woodward)
+
+* LUCENE-7617: Collector construction for two-pass grouping queries is
+ abstracted into a new Grouper class, which can be passed as a constructor
+ parameter to GroupingSearch. The abstract base classes for the different
+ grouping Collectors are renamed to remove the Abstract* prefix.
+ (Alan Woodward, Martijn van Groningen)
+
+* LUCENE-7609: The expressions module now uses the DoubleValuesSource API, and
+ no longer depends on the queries module. Expression#getValueSource() is
+ replaced with Expression#getDoubleValuesSource(). (Alan Woodward, Adrien
+ Grand)
+
+* LUCENE-7610: The facets module now uses the DoubleValuesSource API, and
+ methods that take ValueSource parameters are deprecated (Alan Woodward)
+
+* LUCENE-7611: DocumentValueSourceDictionary now takes a LongValuesSource
+ as a parameter, and the ValueSource equivalent is deprecated (Alan Woodward)
+
+New features
+
+* LUCENE-5867: Added BooleanSimilarity. (Robert Muir, Adrien Grand)
+
+* LUCENE-7466: Added AxiomaticSimilarity. (Peilin Yang via Tommaso Teofili)
+
+* LUCENE-7590: Added DocValuesStatsCollector to compute statistics on DocValues
+ fields. (Shai Erera)
+
+* LUCENE-7587: The new FacetQuery and MultiFacetQuery helper classes
+ make it simpler to execute drill down when drill sideways counts are
+ not needed (Emmanuel Keller via Mike McCandless)
+
+* LUCENE-6664: A new SynonymGraphFilter outputs a correct graph
+ structure for multi-token synonyms, separating out a
+ FlattenGraphFilter that is hardwired into the current
+ SynonymFilter. This finally makes it possible to implement
+ correct multi-token synonyms at search time. See
+ http://blog.mikemccandless.com/2012/04/lucenes-tokenstreams-are-actually.html
+ for details. (Mike McCandless)
+
+* LUCENE-5325: Added LongValuesSource and DoubleValuesSource, intended as
+ type-safe replacements for ValueSource in the queries module. These
+ expose per-segment LongValues or DoubleValues iterators. (Alan Woodward, Adrien Grand)
+
+* LUCENE-7603: Graph token streams are now handled accurately by query
+ parsers, by enumerating all paths and creating the corresponding
+ query/ies as sub-clauses (Matt Weber via Mike McCandless)
+
+* LUCENE-7588: DrillSideways can now run queries concurrently, and
+ supports an IndexSearcher using an executor service to run each query
+ concurrently across all segments in the index (Emmanuel Keller via
+ Mike McCandless)
+
+* LUCENE-7627: Added .intersect methods to SortedDocValues and
+ SortedSetDocValues to allow filtering their TermsEnums with a
+ CompiledAutomaton (Alan Woodward, Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7547: JapaneseTokenizerFactory was failing to close the
+ dictionary file it opened (Markus via Mike McCandless)
+
+* LUCENE-7562: CompletionFieldsConsumer sometimes throws
+ NullPointerException on ghost fields (Oliver Eilhard via Mike McCandless)
+
+* LUCENE-7533: Classic query parser: disallow autoGeneratePhraseQueries=true
+ when splitOnWhitespace=false (and vice-versa). (Steve Rowe)
+
+* LUCENE-7536: ASCIIFoldingFilterFactory used to return an illegal multi-term
+ component when preserveOriginal was set to true. (Adrien Grand)
+
+* LUCENE-7576: Fix Terms.intersect in the default codec to detect when
+ the incoming automaton is a special case and throw a clearer
+ exception than NullPointerException (Tom Mortimer via Mike McCandless)
+
+* LUCENE-6989: Fix Exception handling in MMapDirectory's unmap hack
+ support code to work with Java 9's new InaccessibleObjectException
+ that does not extend ReflectiveAccessException in Java 9.
+ (Uwe Schindler)
+
+* LUCENE-7581: Lucene now prevents updating a doc values field that is used
+ in the index sort, since this would lead to corruption. (Jim
+ Ferenczi via Mike McCandless)
+
+* LUCENE-7570: IndexWriter may deadlock if a commit is running while
+ there are too many merges running and one of the merges hits a
+ tragic exception (Joey Echeverria via Mike McCandless)
+
+* LUCENE-7594: Fixed point range queries on floating-point types to recommend
+ using helpers for exclusive bounds that are consistent with Double.compare.
+ (Adrien Grand, Dawid Weiss)
+
+* LUCENE-7606: Normalization with CustomAnalyzer would only apply the last
+ token filter. (Adrien Grand)
+
+* LUCENE-7612: Removed an unused dependency from the suggester to the misc
+ module. (Alan Woodward)
+
+Improvements
+
+* LUCENE-7532: Add back lost codec file format documentation
+ (Shinichiro Abe via Mike McCandless)
+
+* LUCENE-6824: TermAutomatonQuery now rewrites to TermQuery,
+ PhraseQuery or MultiPhraseQuery when the word automaton is simple
+ (Mike McCandless)
+
+* LUCENE-7431: Allow a certain amount of overlap to be specified between the include
+ and exclude arguments of SpanNotQuery via negative pre and/or post arguments.
+ (Marc Morissette via David Smiley)
+
+* LUCENE-7544: UnifiedHighlighter: add extension points for handling custom queries.
+ (Michael Braun, David Smiley)
+
+* LUCENE-7538: Asking IndexWriter to store a too-massive text field
+ now throws IllegalArgumentException instead of a cryptic exception
+ that closes your IndexWriter (Steve Chen via Mike McCandless)
+
+* LUCENE-7524: Added more detailed explanation of how IDF is computed in
+ ClassicSimilarity and BM25Similarity. (Adrien Grand)
+
+* LUCENE-7564: AnalyzingInfixSuggester should close its IndexWriter by default
+ at the end of build(). (Steve Rowe)
+
+* LUCENE-7526: Enhanced UnifiedHighlighter's passage relevancy for queries with
+ wildcards and sometimes just terms. Added shouldPreferPassageRelevancyOverSpeed()
+ which can be overridden to return false to eek out more speed in some cases.
+ (Timothy M. Rodriguez, David Smiley)
+
+* LUCENE-7560: QueryBuilder.createFieldQuery is no longer final,
+ giving custom query parsers subclassing QueryBuilder more freedom to
+ control how text is analyzed and converted into a query (Matt Weber
+ via Mike McCandless)
+
+* LUCENE-7537: Index time sorting now supports multi-valued sorts
+ using selectors (MIN, MAX, etc.) (Jim Ferenczi via Mike McCandless)
+
+* LUCENE-7575: UnifiedHighlighter can now highlight fields with queries that don't
+ necessarily refer to that field (AKA requireFieldMatch==false). Disabled by default.
+ See UH get/setFieldMatcher. (Jim Ferenczi via David Smiley)
+
+* LUCENE-7592: If the segments file is truncated, we now throw
+ CorruptIndexException instead of the more confusing EOFException
+ (Mike Drob via Mike McCandless)
+
+* LUCENE-6989: Make MMapDirectory's unmap hack work with Java 9 EA (b150+):
+ Unmapping uses new sun.misc.Unsafe#invokeCleaner(ByteBuffer).
+ Java 9 now needs same permissions like Java 8;
+ RuntimePermission("accessClassInPackage.jdk.internal.ref")
+ is no longer needed. Support for older Java 9 builds was removed.
+ (Uwe Schindler)
+
+* LUCENE-7401: Changed the way BKD trees pick the split dimension in order to
+ ensure all dimensions are indexed. (Adrien Grand)
+
+* LUCENE-7614: Complex Phrase Query parser ignores double quotes around single token
+ prefix, wildcard, range queries (Mikhail Khludnev)
+
+* LUCENE-7620: Added LengthGoalBreakIterator, a wrapper around another B.I. to skip breaks
+ that would create Passages that are too short. Only for use with the UnifiedHighlighter
+ (and probably PostingsHighlighter). (David Smiley)
+
+Optimizations
+
+* LUCENE-7568: Optimize merging when index sorting is used but the
+ index is already sorted (Jim Ferenczi via Mike McCandless)
+
+* LUCENE-7563: The BKD in-memory index for dimensional points now uses
+ a compressed format, using substantially less RAM in some cases
+ (Adrien Grand, Mike McCandless)
+
+* LUCENE-7583: BKD writing now buffers each leaf block in heap before
+ writing to disk, giving a small speedup in points-heavy use cases.
+ (Mike McCandless)
+
+* LUCENE-7572: Doc values queries now cache their hash code. (Adrien Grand)
+
+Other
+
+* LUCENE-7546: Fixed references to benchmark wikipedia data and the Jenkins line-docs file
+ (David Smiley)
+
+* LUCENE-7534: fix smokeTestRelease.py to run on Cygwin (Mikhail Khludnev)
+
+* LUCENE-7559: UnifiedHighlighter: Make Passage and OffsetsEnum more exposed to allow
+ passage creation to be customized. (David Smiley)
+
+* LUCENE-7599: Simplify TestRandomChains using Java's built-in Predicate and
+ Function interfaces. (Ahmet Arslan via Adrien Grand)
+
+* LUCENE-7595: Improve RAMUsageTester in test-framework to estimate memory usage of
+ runtime classes and work with Java 9 EA (b148+). Disable static field heap usage
+ checker in LuceneTestCase. (Uwe Schindler, Dawid Weiss)
+
+Build
+
+* LUCENE-7387: fix defaultCodec in build.xml to account for the line ending (hossman)
+
+* LUCENE-7543: Make changes-to-html target an offline operation, by moving the
+ Lucene and Solr DOAP RDF files into the Git source repository under
+ dev-tools/doap/ and then pulling release dates from those files, rather than
+ from JIRA. (Mano Kovacs, hossman, Steve Rowe)
+
+* LUCENE-7596: Update Groovy to version 2.4.8 to allow building with Java 9
+ build 148+. Also update JGit version for working-copy checks. (Uwe Schindler)
+
+======================= Lucene 6.3.0 =======================
+
+API Changes
+
+New Features
+
+* LUCENE-7438: New "UnifiedHighlighter" derivative of the PostingsHighlighter that
+ can consume offsets from postings, term vectors, or analysis. It can highlight phrases
+ as accurately as the standard Highlighter. Light term vectors can be used with offsets
+ in postings for fast wildcard (MultiTermQuery) highlighting.
+ (David Smiley, Timothy Rodriguez)
+
+* LUCENE-7490: SimpleQueryParser now parses '*' to MatchAllDocsQuery
+ (Lee Hinman via Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7507: Upgrade morfologik-stemming to version 2.1.1 (fixes security
+ manager issue with Polish dictionary lookup). (Dawid Weiss)
+
+* LUCENE-7472: MultiFieldQueryParser.getFieldQuery() drops queries that are
+ neither BooleanQuery nor TermQuery. (Steve Rowe)
+
+* LUCENE-7456: PerFieldPostings/DocValues was failing to delegate the
+ merge method (Julien MASSENET via Mike McCandless)
+
+* LUCENE-7468: ASCIIFoldingFilter should not emit duplicated tokens when
+ preserve original is on. (David Causse via Adrien Grand)
+
+* LUCENE-7484: FastVectorHighlighter failed to highlight SynonymQuery
+ (Jim Ferenczi via Mike McCandless)
+
+* LUCENE-7476: JapaneseNumberFilter should not invoke incrementToken
+ on its input after it's exhausted (Andy Hind via Mike McCandless)
+
+* LUCENE-7486: DisjunctionMaxQuery does not work correctly with queries that
+ return negative scores. (Ivan Provalov, Uwe Schindler, Adrien Grand)
+
+* LUCENE-7491: Suddenly turning on dimensional points for some fields
+ that already exist in an index but didn't previously index
+ dimensional points could cause unexpected merge exceptions (Hans
+ Lund, Mike McCandless)
+
+* LUCENE-6914: Fixed DecimalDigitFilter in case of supplementary code points.
+ (Hossman)
+
+* LUCENE-7493: FacetCollector.search threw an unexpected exception if
+ you asked for zero hits but wanted facets (Mahesh via Mike McCandless)
+
+* LUCENE-7505: AnalyzingInfixSuggester returned invalid results when
+ allTermsRequired is false and context filters are specified (Mike
+ McCandless)
+
+* LUCENE-7429: AnalyzerWrapper can now modify the normalization chain too and
+ DelegatingAnalyzerWrapper does the right thing automatically. (Adrien Grand)
+
+* LUCENE-7135: Lucene's check for 32 or 64 bit JVM now works around security
+ manager blocking access to some properties (Aaron Madlon-Kay via
+ Mike McCandless)
+
+Improvements
+
+* LUCENE-7439: FuzzyQuery now matches all terms within the specified
+ edit distance, even if they are short terms (Mike McCandless)
+
+* LUCENE-7496: Better toString for SweetSpotSimilarity (janhoy)
+
+* LUCENE-7520: Highlighter's WeightedSpanTermExtractor shouldn't attempt to expand a MultiTermQuery
+ when its field doesn't match the field the extraction is scoped to.
+ (Cao Manh Dat via David Smiley)
+
+Optimizations
+
+* LUCENE-7501: BKDReader should not store the split dimension explicitly in the
+ 1D case. (Adrien Grand)
+
+Other
+
+* LUCENE-7513: Upgrade randomizedtesting to 2.4.0. (Dawid Weiss)
+
+* LUCENE-7452: Block join query exception suggests how to find a doc, which
+ violates orthogonality requirement. (Mikhail Khludnev)
+
+* LUCENE-7438: Renovate the Benchmark module's support for benchmarking highlighting. All
+ highlighters are supported via SearchTravRetHighlight. (David Smiley)
+
+Build
+
+* LUCENE-7292: Fix build to use "--release 8" instead of "-release 8" on
+ Java 9 (this changed with recent EA build b135). (Uwe Schindler)
+
+======================= Lucene 6.2.1 =======================
+
+API Changes
+
+* LUCENE-7436: MinHashFilter's constructor, and some of its default
+ settings, should be public. (Doug Turnbull via Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-7417: The standard Highlighter could throw an IllegalArgumentException when
+ trying to highlight a query containing a degenerate case of a MultiPhraseQuery with one
+ term. (Thomas Kappler via David Smiley)
+
+* LUCENE-7440: Document id skipping (PostingsEnum.advance) could throw an
+ ArrayIndexOutOfBoundsException exception on large index segments (>1.8B docs)
+ with large skips. (yonik)
+
+* LUCENE-7442: MinHashFilter's ctor should validate its args.
+ (Cao Manh Dat via Steve Rowe)
+
+* LUCENE-7318: Fix backwards compatibility issues around StandardAnalyzer
+ and its components, introduced with Lucene 6.2.0. The moved classes
+ were restored in their original packages: LowercaseFilter and StopFilter,
+ as well as several utility classes. (Uwe Schindler, Mike McCandless)
+
+======================= Lucene 6.2.0 =======================
+
+API Changes
+
+* ScoringWrapperSpans was removed since it had no purpose or effect as of Lucene 5.5.
+
+New Features
+
+* LUCENE-7388: Add point based IntRangeField, FloatRangeField, LongRangeField along with
+ supporting queries and tests (Nick Knize)
+
+* LUCENE-7381: Add point based DoubleRangeField and RangeFieldQuery for
+ indexing and querying on Ranges up to 4 dimensions (Nick Knize)
+
+* LUCENE-6968: LSH Filter (Tommaso Teofili, Andy Hind, Cao Manh Dat)
+
+* LUCENE-7302: IndexWriter methods that change the index now return a
+ long "sequence number" indicating the effective equivalent
+ single-threaded execution order (Mike McCandless)
+
+* LUCENE-7335: IndexWriter's commit data is now late binding,
+ recording key/values from a provided iterable based on when the
+ commit actually takes place (Mike McCandless)
+
+* LUCENE-7287: UkrainianMorfologikAnalyzer is a new dictionary-based
+ analyzer for the Ukrainian language (Andriy Rysin via Mike
+ McCandless)
+
+* LUCENE-7373: Directory.renameFile, which did both renaming and fsync
+ of the directory metadata, has been deprecated; use the new separate
+ methods Directory.rename and Directory.syncMetaData instead (Robert Muir,
+ Uwe Schindler, Mike McCandless)
+
+* LUCENE-7355: Added Analyzer#normalize(), which only applies normalization to
+ an input string. (Adrien Grand)
+
+* LUCENE-7380: Add Polygon.fromGeoJSON for more easily creating
+ Polygon instances from a standard GeoJSON string (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-7395: PerFieldSimilarityWrapper requires a default similarity
+ for calculating query norm and coordination factor in Lucene 6.x.
+ Lucene 7 will no longer have those factors. (Uwe Schindler, Sascha Markus)
+
+* SOLR-9279: Queries module: new ComparisonBoolFunction base class
+ (Doug Turnbull via David Smiley)
+
+Bug Fixes
+
+* LUCENE-6662: Fixed potential resource leaks. (Rishabh Patel via Adrien Grand)
+
+* LUCENE-7340: MemoryIndex.toString() could throw NPE; fixed. Renamed to toStringDebug().
+ (Daniel Collins, David Smiley)
+
+* LUCENE-7382: Fix bug introduced by LUCENE-7355 that used the
+ wrong default AttributeFactory for new Tokenizers.
+ (Terry Smith, Uwe Schindler)
+
+* LUCENE-7389: Fix FieldType.setDimensions(...) validation for the dimensionNumBytes
+ parameter. (Martijn van Groningen)
+
+* LUCENE-7391: Fix performance regression in MemoryIndex's fields() introduced
+ in Lucene 6. (Steve Mason via David Smiley)
+
+* LUCENE-7395, SOLR-9315: Fix PerFieldSimilarityWrapper to also delegate query
+ norm and coordination factor using a default similarity added as ctor param.
+ (Uwe Schindler, Sascha Markus)
+
+* SOLR-9413: Fix analysis/kuromoji's CSVUtil.quoteEscape logic, add TestCSVUtil test.
+ (AppChecker, Christine Poerschke)
+
+* LUCENE-7419: Fix performance bug with TokenStream.end(), where it would lookup
+ PositionIncrementAttribute every time. (Mike McCandless, Robert Muir)
+
+Improvements
+
+* LUCENE-7323: Compound file writing now verifies the incoming
+ sub-files' checkums and segment IDs, to catch hardware issues or
+ filesytem bugs earlier (Robert Muir, Mike McCandless)
+
+* LUCENE-6766: Index time sorting has graduated from the misc module
+ to core, is much simpler to use, via
+ IndexWriter.setIndexSort, and now works with dimensional points.
+ (Adrien Grand, Mike McCandless)
+
+* LUCENE-5931: Detect when an application tries to reopen an
+ IndexReader after (illegally) removing the old index and
+ reindexing (Vitaly Funstein, Robert Muir, Mike McCandless)
+
+* LUCENE-6171: Lucene now passes the StandardOpenOption.CREATE_NEW
+ option when writing new files so the filesystem enforces our
+ write-once architecture, possibly catching externally caused
+ issues sooner (Robert Muir, Mike McCandless)
+
+* LUCENE-7318: StandardAnalyzer has been moved from the analysis
+ module into core and is now the default analyzer in
+ IndexWriterConfig (Robert Muir, Mike McCandless)
+
+* LUCENE-7345: RAMDirectory now enforces write-once files as well
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-7337: MatchNoDocsQuery now scores with 0 normalization factor
+ and empty boolean queries now rewrite to MatchNoDocsQuery instead of
+ vice/versa (Jim Ferenczi via Mike McCandless)
+
+* LUCENE-7359: Add equals() and hashCode() to Explanation (Alan Woodward)
+
+* LUCENE-7353: ScandinavianFoldingFilterFactory and
+ ScandinavianNormalizationFilterFactory now implement MultiTermAwareComponent.
+ (Adrien Grand)
+
+* LUCENE-2605: Add classic QueryParser option setSplitOnWhitespace() to
+ control whether to split on whitespace prior to text analysis. Default
+ behavior remains unchanged: split-on-whitespace=true. (Steve Rowe)
+
+* LUCENE-7276: MatchNoDocsQuery now includes an optional reason for
+ why it was used (Jim Ferenczi via Mike McCandless)
+
+* LUCENE-7355: AnalyzingQueryParser now only applies the subset of the analysis
+ chain that is about normalization for range/fuzzy/wildcard queries.
+ (Adrien Grand)
+
+* LUCENE-7376: Add support for ToParentBlockJoinQuery to fast vector highlighter's
+ FieldQuery. (Martijn van Groningen)
+
+* LUCENE-7385: Improve/fix assert messages in SpanScorer. (David Smiley)
+
+* LUCENE-7393: Add ICUTokenizer option to parse Myanmar text as syllables instead of words,
+ because the ICU word-breaking algorithm has some issues. This allows for the previous
+ tokenization used before Lucene 5. (AM, Robert Muir)
+
+* LUCENE-7409: Changed MMapDirectory's unmapping to work safer, but still with
+ no guarantees. This uses a store-store barrier and yields the current thread
+ before unmapping to allow in-flight requests to finish. The new code no longer
+ uses WeakIdentityMap as it delegates all ByteBuffer reads throgh a new
+ ByteBufferGuard wrapper that is shared between all ByteBufferIndexInput clones.
+ (Robert Muir, Uwe Schindler)
+
+Optimizations
+
+* LUCENE-7330, LUCENE-7339: Speed up conjunction queries. (Adrien Grand)
+
+* LUCENE-7356: SearchGroup tweaks. (Christine Poerschke)
+
+* LUCENE-7351: Doc id compression for points. (Adrien Grand)
+
+* LUCENE-7371: Point values are now better compressed using run-length
+ encoding. (Adrien Grand)
+
+* LUCENE-7311: Cached term queries do not seek the terms dictionary anymore.
+ (Adrien Grand)
+
+* LUCENE-7396, LUCENE-7399: Faster flush of points.
+ (Adrien Grand, Mike McCandless)
+
+* LUCENE-7406: Automaton and PrefixQuery tweaks (fewer object (re)allocations).
+ (Christine Poerschke)
+
+Other
+
+* LUCENE-4787: Fixed some highlighting javadocs. (Michael Dodsworth via Adrien
+ Grand)
+
+* LUCENE-7334: Update ASM dependency to 5.1. (Uwe Schindler)
+
+* LUCENE-7346: Update forbiddenapis to version 2.2.
+ (Uwe Schindler)
+
+* LUCENE-7360: Explanation.toHtml() is deprecated. (Alan Woodward)
+
+* LUCENE-7372: Factor out an org.apache.lucene.search.FilterWeight class.
+ (Christine Poerschke, Adrien Grand, David Smiley)
+
+* LUCENE-7384: Removed ScoringWrapperSpans. And tweaked SpanWeight.buildSimWeight() to
+ reuse the existing Similarity instead of creating a new one. (David Smiley)
+
+======================= Lucene 6.1.0 =======================
+
+New Features
+
+* LUCENE-7099: Add LatLonDocValuesField.newDistanceSort to the sandbox.
+ (Robert Muir)
+
+* LUCENE-7140: Add PlanetModel.bisection to spatial3d (Karl Wright via
+ Mike McCandless)
+
+* LUCENE-7069: Add LatLonPoint.nearest, to find nearest N points to a
+ provided query point (Mike McCandless)
+
+* LUCENE-7234: Added InetAddressPoint.nextDown/nextUp to easily generate range
+ queries with excluded bounds. (Adrien Grand)
+
+* LUCENE-7300: The misc module now has a directory wrapper that uses hard-links if
+ applicable and supported when copying files from another FSDirectory in
+ Directory#copyFrom. (Simon Willnauer)
+
+API Changes
+
+* LUCENE-7184: Refactor LatLonPoint encoding methods to new GeoEncodingUtils
+ helper class in core geo package. Also refactors LatLonPointTests to
+ TestGeoEncodingUtils (Nick Knize)
+
+* LUCENE-7163: refactor GeoRect, Polygon, and GeoUtils tests to geo
+ package in core (Nick Knize)
+
+* LUCENE-7152: Refactor GeoUtils from lucene-spatial package to
+ core (Nick Knize)
+
+* LUCENE-7141: Switch OfflineSorter's ByteSequencesReader to
+ BytesRefIterator (Mike McCandless)
+
+* LUCENE-7150: Spatial3d gets useful APIs to create common shape
+ queries, matching LatLonPoint. (Karl Wright via Mike McCandless)
+
+* LUCENE-7243: Removed the LeafReaderContext parameter from
+ QueryCachingPolicy#shouldCache. (Adrien Grand)
+
+Optimizations
+
+* LUCENE-7071: Reduce bytes copying in OfflineSorter, giving ~10%
+ speedup on merging 2D LatLonPoint values (Mike McCandless)
+
+* LUCENE-7105, LUCENE-7215: Optimize LatLonPoint's newDistanceQuery.
+ (Robert Muir)
+
+* LUCENE-7097: IntroSorter now recurses to 2 * log_2(count) quicksort
+ stack depth before switching to heapsort (Adrien Grand, Mike McCandless)
+
+* LUCENE-7115: Speed up FieldCache.CacheEntry toString by setting initial
+ StringBuilder capacity (Gregory Chanan)
+
+* LUCENE-7147: Improve disjoint check for geo distance query traversal
+ (Ryan Ernst, Robert Muir, Mike McCandless)
+
+* LUCENE-7153: GeoPointField and LatLonPoint polygon queries now support
+ multiple polygons and holes, with memory usage independent of
+ polygon complexity. (Karl Wright, Mike McCandless, Robert Muir)
+
+* LUCENE-7159: Speed up LatLonPoint polygon performance. (Robert Muir, Ryan Ernst)
+
+* LUCENE-7211: Reduce memory & GC for spatial RPT Intersects when the number of
+ matching docs is small. (Jeff Wartes, David Smiley)
+
+* LUCENE-7235: LRUQueryCache should not take a lock for segments that it will
+ not cache on anyway. (Adrien Grand)
+
+* LUCENE-7238: Explicitly disable the query cache in MemoryIndex#createSearcher.
+ (Adrien Grand)
+
+* LUCENE-7237: LRUQueryCache now prefers returning an uncached Scorer than
+ waiting on a lock. (Adrien Grand)
+
+* LUCENE-7261, LUCENE-7262, LUCENE-7264, LUCENE-7258: Speed up DocIdSetBuilder
+ (which is used by TermsQuery, multi-term queries and several point queries).
+ (Adrien Grand, Jeff Wartes, David Smiley)
+
+* LUCENE-7299: Speed up BytesRefHash.sort() using radix sort. (Adrien Grand)
+
+* LUCENE-7306: Speed up points indexing and merging using radix sort.
+ (Adrien Grand)
+
+Bug Fixes
+
+* LUCENE-7127: Fix corner case bugs in GeoPointDistanceQuery. (Robert Muir)
+
+* LUCENE-7166: Fix corner case bugs in LatLonPoint/GeoPointField bounding box
+ queries. (Robert Muir)
+
+* LUCENE-7168: Switch to stable encode for geo3d, remove quantization
+ test leniency, remove dead code (Mike McCandless)
+
+* LUCENE-7301: Multiple doc values updates to the same document within
+ one update batch could be applied in the wrong order resulting in
+ the wrong updated value (Ishan Chattopadhyaya, hossman, Mike McCandless)
+
+* LUCENE-7312: Fix geo3d's x/y/z double to int encoding to ensure it always
+ rounds down (Karl Wright, Mike McCandless)
+
+* LUCENE-7132: BooleanQuery sometimes assigned too-low scores in cases
+ where ranges of documents had only a single clause matching while
+ other ranges had more than one clause matching (Ahmet Arslan,
+ hossman, Mike McCandless)
+
+* LUCENE-7286: Added support for highlighting SynonymQuery. (Adrien Grand)
+
+* LUCENE-7291: Spatial heatmap faceting could mis-count when the heatmap crosses the
+ dateline and indexed non-point shapes are much bigger than the heatmap region.
+ (David Smiley)
+
+* LUCENE-7333: Fix test bug where randomSimpleString() generated a filename
+ that is a reserved device name on Windows. (Uwe Schindler, Mike McCandless)
+
+Other
+
+* LUCENE-7295: TermAutomatonQuery.hashCode calculates Automaton.toDot().hash,
+ equivalence relationship replaced with object identity. (Dawid Weiss)
+
+* LUCENE-7277: Make Query.hashCode and Query.equals abstract. (Paul Elschot,
+ Dawid Weiss)
+
+* LUCENE-7174: Upgrade randomizedtesting to 2.3.4. (Uwe Schindler, Dawid Weiss)
+
+* LUCENE-7205: Remove repeated nl.getLength() calls in
+ (Boolean|DisjunctionMax|FuzzyLikeThis)QueryBuilder. (Christine Poerschke)
+
+* LUCENE-7210: Make TestCore*Parser's analyzer choice override-able
+ (Christine Poerschke, Daniel Collins)
+
+* LUCENE-7263: Make queryparser/xml/CoreParser's SpanQueryBuilderFactory
+ accessible to deriving classes. (Daniel Collins via Christine Poerschke)
+
+* SOLR-9109/SOLR-9121: Allow specification of a custom Ivy settings file via system
+ property "ivysettings.xml". (Misha Dmitriev, Christine Poerschke, Uwe Schindler, Steve Rowe)
+
+* LUCENE-7206: Improve the ToParentBlockJoinQuery's explain by including the explain
+ of the best matching child doc. (Ilya Kasnacheev, Jeff Evans via Martijn van Groningen)
+
+* LUCENE-7307: Add getters to the PointInSetQuery and PointRangeQuery queries.
+ (Martijn van Groningen, Adrien Grand)
+
+Build
+
+* LUCENE-7292: Use '-release' instead of '-source/-target' during
+ compilation on Java 9+ to ensure real cross-compilation.
+ (Uwe Schindler)
+
+* LUCENE-7296: Update forbiddenapis to version 2.1.
+ (Uwe Schindler)
+
+======================= Lucene 6.0.1 =======================
+
+New Features
+
+* LUCENE-7278: Spatial-extras DateRangePrefixTree's Calendar is now configurable, to
+ e.g. clear the Gregorian Change Date. Also, toString(cal) is now identical to
+ DateTimeFormatter.ISO_INSTANT. (David Smiley)
+
+Bug Fixes
+
+* LUCENE-7187: Block join queries' Weight#extractTerms(...) implementations
+ should delegate to the wrapped weight. (Martijn van Groningen)
+
+* LUCENE-7209: Fixed explanations of FunctionScoreQuery. (Adrien Grand)
+
+* LUCENE-7232: Fixed InetAddressPoint.newPrefixQuery, which was generating an
+ incorrect query when the prefix length was not a multiple of 8. (Adrien Grand)
+
+* LUCENE-7279: JapaneseTokenizer throws ArrayIndexOutOfBoundsException
+ on some valid inputs (Mike McCandless)
+
+* LUCENE-7188: remove incorrect sanity check in NRTCachingDirectory.listAll()
+ that led to IllegalStateException being thrown when nothing was wrong.
+ (David Smiley, yonik)
+
+* LUCENE-7219: Make queryparser/xml (Point|LegacyNumeric)RangeQuery builders
+ match the underlying queries' (lower|upper)Term optionality logic.
+ (Kaneshanathan Srivisagan, Christine Poerschke)
+
+* LUCENE-7257: Fixed PointValues#size(IndexReader, String), docCount,
+ minPackedValue and maxPackedValue to skip leaves that do not have points
+ rather than raising an IllegalStateException. (Adrien Grand)
+
+* LUCENE-7284: GapSpans needs to implement positionsCost(). (Daniel Bigham, Alan
+ Woodward)
+
+* LUCENE-7231: WeightedSpanTermExtractor didn't deal correctly with single-term
+ phrase queries. (Eva Popenda, Alan Woodward)
+
+* LUCENE-7293: Don't try to highlight GeoPoint queries (Britta Weber,
+ Nick Knize, Mike McCandless, Uwe Schindler)
+
+Documentation
+
+* LUCENE-7223: Improve XXXPoint javadocs to make it clear that you
+ should separately add StoredField if you want to retrieve these
+ field values at search time (Greg Huber, Robert Muir, Mike McCandless)
+
+======================= Lucene 6.0.0 =======================
+
+System Requirements
+
+* LUCENE-5950: Move to Java 8 as minimum Java version.
+ (Ryan Ernst, Uwe Schindler)
+
+* LUCENE-6069: Lucene Core now gets compiled with Java 8 "compact1" profile,
+ all other modules with "compact2". (Robert Muir, Uwe Schindler)
+
+New Features
+
+* LUCENE-6631: Lucene Document classification (Tommaso Teofili, Alessandro Benedetti)
+
+* LUCENE-6747: FingerprintFilter is a TokenFilter that outputs a single
+ token which is a concatenation of the sorted and de-duplicated set of
+ input tokens. Useful for normalizing short text in clustering/linking
+ tasks. (Mark Harwood, Adrien Grand)
+
+* LUCENE-5735: NumberRangePrefixTreeStrategy now includes interval/range faceting
+ for counting ranges that align with the underlying terms as defined by the
+ NumberRangePrefixTree (e.g. familiar date units like days). (David Smiley)
+
+* LUCENE-6711: Use CollectionStatistics.docCount() for IDF and average field
+ length computations, to avoid skew from documents that don't have the field.
+ (Ahmet Arslan via Robert Muir)
+
+* LUCENE-6758: Use docCount+1 for DefaultSimilarity's IDF, so that queries
+ containing nonexistent fields won't screw up querynorm. (Terry Smith, Robert Muir)
+
+* SOLR-7876: The QueryTimeout interface now has a isTimeoutEnabled method
+ that can return false to exit from ExitableDirectoryReader wrapping at
+ the point fields() is called. (yonik)
+
+* LUCENE-6825: Add low-level support for block-KD trees (Mike McCandless)
+
+* LUCENE-6852, LUCENE-6975: Add support for points (dimensionally
+ indexed values) to index, document and codec APIs, including a
+ simple text implementation. (Mike McCandless)
+
+* LUCENE-6861: Create Lucene60Codec, supporting points.
+ (Mike McCandless)
+
+* LUCENE-6879: Allow to define custom CharTokenizer instances without
+ subclassing using Java 8 lambdas or method references. (Uwe Schindler)
+
+* LUCENE-6881: Cutover all BKD implementations to points
+ (Mike McCandless)
+
+* LUCENE-6837: Add N-best output support to JapaneseTokenizer.
+ (Hiroharu Konno via Christian Moen)
+
+* LUCENE-6962: Add per-dimension min/max to points
+ (Mike McCandless)
+
+* LUCENE-6975: Add ExactPointQuery, to match a single N-dimensional
+ point (Robert Muir, Mike McCandless)
+
+* LUCENE-6989: Add preliminary support for MMapDirectory unmapping in Java 9.
+ (Uwe Schindler, Chris Hegarty, Peter Levart)
+
+* LUCENE-7040: Upgrade morfologik-stemming to version 2.1.0.
+ (Dawid Weiss)
+
+* LUCENE-7048: Add XXXPoint.newSetQuery, to create a query that
+ efficiently matches all documents containing any of the specified
+ point values. This is the analog of TermsQuery, but for points
+ instead. (Adrien Grand, Robert Muir, Mike McCandless)
+
+API Changes
+
+* LUCENE-7094: BBoxStrategy and PointVectorStrategy now support
+ PointValues (in addition to legacy numeric trie). Their APIs
+ were changed a little and also made more consistent. PointValues/Trie
+ is optional, DocValues is optional, stored value is optional.
+ (Nick Knize, David Smiley)
+
+* LUCENE-6067: Accountable.getChildResources has a default
+ implementation returning the empty list. (Robert Muir)
+
+* LUCENE-6583: FilteredQuery has been removed. Instead, you can construct a
+ BooleanQuery with one MUST clause for the query, and one FILTER clause for
+ the filter. (Adrien Grand)
+
+* LUCENE-6651: AttributeImpl#reflectWith(AttributeReflector) was made
+ abstract and has no reflection-based default implementation anymore.
+ (Uwe Schindler)
+
+* LUCENE-6706: PayloadTermQuery and PayloadNearQuery have been removed.
+ Instead, use PayloadScoreQuery to wrap any SpanQuery. (Alan Woodward)
+
+* LUCENE-6829: OfflineSorter, and the classes that use it (suggesters,
+ hunspell) now do all temporary file IO via Directory instead of
+ directly through java's temp dir. Directory.createTempOutput
+ creates a uniquely named IndexOutput, and the new
+ IndexOutput.getName returns its name (Dawid Weiss, Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6917: Deprecate and rename NumericXXX classes to
+ LegacyNumericXXX in favor of points (Mike McCandless)
+
+* LUCENE-6947: SortField.missingValue is now protected. You can read its
+ value using the new SortField.getMissingValue getter. (Adrien Grand)
+
+* LUCENE-7028: Remove duplicate method in LegacyNumericUtils.
+ (Uwe Schindler)
+
+* LUCENE-7052, LUCENE-7053: Remove custom comparators from BytesRef
+ class and solely use natural byte[] comparator throughout codebase.
+ This also simplifies API of BytesRefHash. It also replaces the natural
+ comparator in ArrayUtil by Java 8's Comparator#naturalOrder().
+ (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-7060: Update Spatial4j to 0.6. The package com.spatial4j.core
+ is now org.locationtech.spatial4j. (David Smiley)
+
+* LUCENE-7058: Add getters to various Query implementations (Guillaume Smet via
+ Alan Woodward)
+
+* LUCENE-7064: MultiPhraseQuery is now immutable and should be constructed
+ with MultiPhraseQuery.Builder. (Luc Vanlerberghe via Adrien Grand)
+
+* LUCENE-7072: Geo3DPoint always uses WGS84 planet model.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-7056: Geo3D classes are in different packages now. (David Smiley)
+
+* LUCENE-6952: These classes are now abstract: FilterCodecReader, FilterLeafReader,
+ FilterCollector, FilterDirectory. And some Filter* classes in
+ lucene-test-framework too. (David Smiley)
+
+* SOLR-8867: FunctionValues.getRangeScorer now takes a LeafReaderContext instead
+ of an IndexReader, and avoids matching documents without a value in the field
+ for numeric fields. (yonik)
+
+Optimizations
+
+* LUCENE-6891: Use prefix coding when writing points in
+ each leaf block in the default codec, to reduce the index
+ size (Mike McCandless)
+
+* LUCENE-6901: Optimize points indexing: use faster
+ IntroSorter instead of InPlaceMergeSorter, and specialize 1D
+ merging to merge sort the already sorted segments instead of
+ re-indexing (Mike McCandless)
+
+* LUCENE-6793: LegacyNumericRangeQuery.hashCode() is now less subject to hash
+ collisions. (J.B. Langston via Adrien Grand)
+
+* LUCENE-7050: TermsQuery is now cached more aggressively by the default
+ query caching policy. (Adrien Grand)
+
+* LUCENE-7066: PointRangeQuery got optimized for the case that all documents
+ have a value and all points from the segment match. (Adrien Grand)
+
+Changes in Runtime Behavior
+
+* LUCENE-6789: IndexSearcher's default Similarity is changed to BM25Similarity.
+ Use ClassicSimilarity to get the old vector space DefaultSimilarity. (Robert Muir)
+
+* LUCENE-6886: Reserve the .tmp file name extension for temp files,
+ and codec components are no longer allowed to use this extension
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-6835: Directory.listAll now returns entries in sorted order,
+ to not leak platform-specific behavior, and "retrying file deletion"
+ is now the responsibility of Directory.deleteFile, not the caller.
+ (Robert Muir, Mike McCandless)
+
+Tests
+
+* LUCENE-7009: Add expectThrows utility to LuceneTestCase. This uses a lambda
+ expression to encapsulate a statement that is expected to throw an exception.
+ (Ryan Ernst)
+
+Bug Fixes
+
+* LUCENE-7065: Fix the explain for the global ordinals join query. Before the
+ explain would also indicate that non matching documents would match.
+ On top of that with score mode average, the explain would fail with a NPE.
+ (Martijn van Groningen)
+
+* LUCENE-7101: OfflineSorter had O(N^2) merge cost, and used too many
+ temporary file descriptors, for large sorts (Mike McCandless)
+
+* LUCENE-7111: DocValuesRangeQuery.newLongRange behaves incorrectly for
+ Long.MAX_VALUE and Long.MIN_VALUE (Ishan Chattopadhyaya via Steve Rowe)
+
+* LUCENE-7139: Fix bugs in geo3d's Vincenty surface distance
+ implementation (Karl Wright via Mike McCandless)
+
+* LUCENE-7112: WeightedSpanTermExtractor.extractUnknownQuery is only called
+ on queries that could not be extracted. (Adrien Grand)
+
+* LUCENE-7126: Remove GeoPointDistanceRangeQuery. This query was implemented
+ with boolean NOT, and incorrect for multi-valued documents. (Robert Muir)
+
+* LUCENE-7158: Consistently use earth's WGS84 mean radius wherever our
+ geo search implementations approximate the earth as a sphere (Karl
+ Wright via Mike McCandless)
+
+Other
+
+* LUCENE-7035: Upgrade icu4j to 56.1/unicode 8. (Robert Muir)
+
+* LUCENE-7087: Let MemoryIndex#fromDocument(...) accept 'Iterable<? extends IndexableField>'
+ as document instead of 'Document'. (Martijn van Groningen)
+
+* LUCENE-7091: Add doc values support to MemoryIndex
+ (Martijn van Groningen, David Smiley)
+
+* LUCENE-7093: Add point values support to MemoryIndex
+ (Martijn van Groningen, Mike McCandless)
+
+* LUCENE-7095: Add point values support to the numeric field query time join.
+ (Martijn van Groningen, Mike McCandless)
+
+======================= Lucene 5.5.5 =======================
+
+Changes in Runtime Behavior
+
+* Resolving of external entities in queryparser/xml/CoreParser is disallowed
+ by default. See SOLR-11477 for details.
+
+Bug Fixes
+
+* LUCENE-7419: Fix performance bug with TokenStream.end(), where it would lookup
+ PositionIncrementAttribute every time. (Mike McCandless, Robert Muir)
+
+* SOLR-11477: Disallow resolving of external entities in queryparser/xml/CoreParser
+ by default. (Michael Stepankin, Olga Barinova, Uwe Schindler, Christine Poerschke)
+
+======================= Lucene 5.5.4 =======================
+
+Bug Fixes
+
+* LUCENE-7417: The standard Highlighter could throw an IllegalArgumentException when
+ trying to highlight a query containing a degenerate case of a MultiPhraseQuery with one
+ term. (Thomas Kappler via David Smiley)
+
+* LUCENE-7657: Fixed potential memory leak in the case that a (Span)TermQuery
+ with a TermContext is cached. (Adrien Grand)
+
+* LUCENE-7647: Made stored fields reclaim native memory more aggressively when
+ configured with BEST_COMPRESSION. This could otherwise result in out-of-memory
+ issues. (Adrien Grand)
+
+* LUCENE-7562: CompletionFieldsConsumer sometimes throws
+ NullPointerException on ghost fields (Oliver Eilhard via Mike McCandless)
+
+* LUCENE-7547: JapaneseTokenizerFactory was failing to close the
+ dictionary file it opened (Markus via Mike McCandless)
+
+* LUCENE-6914: Fixed DecimalDigitFilter in case of supplementary code points.
+ (Hossman)
+
+* LUCENE-7440: Document id skipping (PostingsEnum.advance) could throw an
+ ArrayIndexOutOfBoundsException exception on large index segments (>1.8B docs)
+ with large skips. (yonik)
+
+* LUCENE-7570: IndexWriter may deadlock if a commit is running while
+ there are too many merges running and one of the merges hits a
+ tragic exception (Joey Echeverria via Mike McCandless)
+
+Other
+
+* LUCENE-6989: Backport MMapDirectory's unmapping code from Lucene 6.4 to use
+ MethodHandles. This allows it to work with Java 9 (EA build 150 and later).
+ (Uwe Schindler)
+
+Build
+
+* LUCENE-7543: Make changes-to-html target an offline operation, by moving the
+ Lucene and Solr DOAP RDF files into the Git source repository under
+ dev-tools/doap/ and then pulling release dates from those files, rather than
+ from JIRA. (Mano Kovacs, hossman, Steve Rowe)
+
+* LUCENE-7596: Update Groovy to version 2.4.8 to allow building with Java 9
+ build 148+. Also update JGit version for working-copy checks. This does not
+ fix all issues with Java 9, but allows to build the distribution.
+ (Uwe Schindler)
+
+* LUCENE-7651: Backport (Lucene 6.4.1) fix for Java 8u121 to allow documentation
+ build to inject "Google Code Prettify" without adding Javascript to Javadocs's
+ -bottom parameter. Unfortunately, this fix disables Prettify if Javadocs are
+ built with Java 7, as there is no generic way in Java 7 to inject Javascript
+ without breaking Java 8 (and possible paid Java 7 security updates). This
+ fix also updates Prettify to latest version to work around a Google Chrome
+ issue. (Uwe Schindler)
+
+======================= Lucene 5.5.3 =======================
+(No Changes)
+
+======================= Lucene 5.5.2 =======================
+
+Bug Fixes
+
+* LUCENE-7065: Fix the explain for the global ordinals join query. Before the
+ explain would also indicate that non matching documents would match.
+ On top of that with score mode average, the explain would fail with a NPE.
+ (Martijn van Groningen)
+
+* LUCENE-7111: DocValuesRangeQuery.newLongRange behaves incorrectly for
+ Long.MAX_VALUE and Long.MIN_VALUE (Ishan Chattopadhyaya via Steve Rowe)
+
+* LUCENE-7139: Fix bugs in geo3d's Vincenty surface distance
+ implementation (Karl Wright via Mike McCandless)
+
+* LUCENE-7187: Block join queries' Weight#extractTerms(...) implementations
+ should delegate to the wrapped weight. (Martijn van Groningen)
+
+* LUCENE-7279: JapaneseTokenizer throws ArrayIndexOutOfBoundsException
+ on some valid inputs (Mike McCandless)
+
+* LUCENE-7219: Make queryparser/xml (Point|LegacyNumeric)RangeQuery builders
+ match the underlying queries' (lower|upper)Term optionality logic.
+ (Kaneshanathan Srivisagan, Christine Poerschke)
+
+* LUCENE-7284: GapSpans needs to implement positionsCost(). (Daniel Bigham, Alan
+ Woodward)
+
+* LUCENE-7231: WeightedSpanTermExtractor didn't deal correctly with single-term
+ phrase queries. (Eva Popenda, Alan Woodward)
+
+* LUCENE-7301: Multiple doc values updates to the same document within
+ one update batch could be applied in the wrong order resulting in
+ the wrong updated value (Ishan Chattopadhyaya, hossman, Mike McCandless)
+
+* LUCENE-7132: BooleanQuery sometimes assigned too-low scores in cases
+ where ranges of documents had only a single clause matching while
+ other ranges had more than one clause matching (Ahmet Arslan,
+ hossman, Mike McCandless)
+
+* LUCENE-7291: Spatial heatmap faceting could mis-count when the heatmap crosses the
+ dateline and indexed non-point shapes are much bigger than the heatmap region.
+ (David Smiley)
+
+======================= Lucene 5.5.1 =======================
+
+Bug fixes
+
+* LUCENE-7112: WeightedSpanTermExtractor.extractUnknownQuery is only called
+ on queries that could not be extracted. (Adrien Grand)
+
+* LUCENE-7188: remove incorrect sanity check in NRTCachingDirectory.listAll()
+ that led to IllegalStateException being thrown when nothing was wrong.
+ (David Smiley, yonik)
+
+* LUCENE-7209: Fixed explanations of FunctionScoreQuery. (Adrien Grand)
+
+======================= Lucene 5.5.0 =======================
+
+New Features
+
+* LUCENE-5868: JoinUtil.createJoinQuery(..,NumericType,..) query-time join
+ for LONG and INT fields with NUMERIC and SORTED_NUMERIC doc values.
+ (Alexey Zelin via Mikhail Khludnev)
+
+* LUCENE-6939: Add exponential reciprocal scoring to
+ BlendedInfixSuggester, to even more strongly favor suggestions that
+ match closer to the beginning (Arcadius Ahouansou via Mike McCandless)
+
+* LUCENE-6958: Improved CustomAnalyzer to take class references to factories
+ as alternative to their SPI name. This enables compile-time safety when
+ defining analyzer's components. (Uwe Schindler, Shai Erera)
+
+* LUCENE-6818, LUCENE-6986: Add DFISimilarity implementing the divergence
+ from independence model. (Ahmet Arslan via Robert Muir)
+
+* SOLR-4619: Added removeAllAttributes() to AttributeSource, which removes
+ all previously added attributes.
+
+* LUCENE-7010: Added MergePolicyWrapper to allow easy wrapping of other policies.
+ (Shai Erera)
+
+API Changes
+
+* LUCENE-6997: refactor sandboxed GeoPointField and query classes to lucene-spatial
+ module under new lucene.spatial.geopoint package (Nick Knize)
+
+* LUCENE-6908: GeoUtils static relational methods have been refactored to new
+ GeoRelationUtils and now correctly handle large irregular rectangles, and
+ pole crossing distance queries. (Nick Knize)
+
+* LUCENE-6900: Grouping sortWithinGroup variables used to allow null to mean
+ Sort.RELEVANCE. Null is no longer permitted. (David Smiley)
+
+* LUCENE-6919: The Scorer class has been refactored to expose an iterator
+ instead of extending DocIdSetIterator. asTwoPhaseIterator() has been renamed
+ to twoPhaseIterator() for consistency. (Adrien Grand)
+
+* LUCENE-6973: TeeSinkTokenFilter no longer accepts a SinkFilter (the latter
+ has been removed). If you wish to filter the sinks, you can wrap them with
+ any other TokenFilter (e.g. a FilteringTokenFilter). Also, you can no longer
+ add a SinkTokenStream to an existing TeeSinkTokenFilter. If you need to
+ share multiple streams with a single sink, chain them with multiple
+ TeeSinkTokenFilters.
+ DateRecognizerSinkFilter was renamed to DateRecognizerFilter and moved under
+ analysis/common. TokenTypeSinkFilter was removed (use TypeTokenFilter instead).
+ TokenRangeSinkFilter was removed. (Shai Erera, Uwe Schindler)
+
+* LUCENE-6980: Default applyAllDeletes to true when opening
+ near-real-time readers (Mike McCandless)
+
+* LUCENE-6981: SpanQuery.getTermContexts() helper methods are now public, and
+ SpanScorer has a public getSpans() method. (Alan Woodward)
+
+* LUCENE-6932: IndexInput.seek implementations now throw EOFException
+ if you seek beyond the end of the file (Adrien Grand, Mike McCandless)
+
+* LUCENE-6988: IndexableField.tokenStream() no longer throws IOException
+ (Alan Woodward)
+
+* LUCENE-7028: Deprecate a duplicate method in NumericUtils.
+ (Uwe Schindler)
+
+Optimizations
+
+* LUCENE-6930: Decouple GeoPointField from NumericType by using a custom
+ and efficient GeoPointTokenStream and TermEnum designed for GeoPoint prefix
+ terms. (Nick Knize)
+
+* LUCENE-6951: Improve GeoPointInPolygonQuery using point orientation based
+ line crossing algorithm, and adding result for multi-value docs when least
+ 1 point satisfies polygon criteria. (Nick Knize)
+
+* LUCENE-6889: BooleanQuery.rewrite now performs some query optimization, in
+ particular to rewrite queries that look like: "+*:* #filter" to a
+ "ConstantScore(filter)". (Adrien Grand)
+
+* LUCENE-6912: Grouping's Collectors now calculate a response to needsScores()
+ instead of always 'true'. (David Smiley)
+
+* LUCENE-6815: DisjunctionScorer now advances two-phased iterators lazily,
+ stopping to evaluate them as soon as a single one matches. The other iterators
+ will be confirmed lazily when computing score() or freq(). (Adrien Grand)
+
+* LUCENE-6926: MUST_NOT clauses now use the match cost API to run the slow bits
+ last whenever possible. (Adrien Grand)
+
+* LUCENE-6944: BooleanWeight no longer creates sub-scorers if BS1 is not
+ applicable. (Adrien Grand)
+
+* LUCENE-6940: MUST_NOT clauses execute faster, especially when they are sparse.
+ (Adrien Grand)
+
+* LUCENE-6470: Improve efficiency of TermsQuery constructors. (Robert Muir)
+
+Bug Fixes
+
+* LUCENE-6976: BytesRefTermAttributeImpl.copyTo NPE'ed if BytesRef was null.
+ Added equals & hashCode, and a new test for these things. (David Smiley)
+
+* LUCENE-6932: RAMDirectory's IndexInput was failing to throw
+ EOFException in some cases (Stéphane Campinas, Adrien Grand via Mike
+ McCandless)
+
+* LUCENE-6896: Don't treat the smallest possible norm value as an infinitely
+ long document in SimilarityBase or BM25Similarity. Add more warnings to sims
+ that will not work well with extreme tf values. (Ahmet Arslan, Robert Muir)
+
+* LUCENE-6984: SpanMultiTermQueryWrapper no longer modifies its wrapped query.
+ (Alan Woodward, Adrien Grand)
+
+* LUCENE-6998: Fix a couple places to better detect truncated index files
+ as corruption. (Robert Muir, Mike McCandless)
+
+* LUCENE-7002: Fixed MultiCollector to not throw a NPE if setScorer is called
+ after one of the sub collectors is done collecting. (John Wang, Adrien Grand)
+
+* LUCENE-7027: Fixed NumericTermAttribute to not throw IllegalArgumentException
+ after NumericTokenStream was exhausted. (Uwe Schindler, Lee Hinman,
+ Mike McCandless)
+
+* LUCENE-7018: Fix GeoPointTermQueryConstantScoreWrapper to add document on
+ first GeoPointField match. (Nick Knize)
+
+* LUCENE-7019: Add two-phase iteration to GeoPointTermQueryConstantScoreWrapper.
+ (Robert Muir via Nick Knize)
+
+* LUCENE-6989: Improve MMapDirectory's unmapping checks to catch more non-working
+ cases. The unmap-hack does not yet work with recent Java 9. Official support
+ will come with Lucene 6. (Uwe Schindler)
+
+Other
+
+* LUCENE-6924: Upgrade randomizedtesting to 2.3.2. (Dawid Weiss)
+
+* LUCENE-6920: Improve custom function checks in expressions module
+ to use MethodHandles and work without extra security privileges.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-6921: Fix SPIClassIterator#isParentClassLoader to don't
+ require extra permissions. (Uwe Schindler)
+
+* LUCENE-6923: Fix RamUsageEstimator to access private fields inside
+ AccessController block for computing size. (Robert Muir)
+
+* LUCENE-6907: make TestParser extendable, rename test/.../xml/
+ NumericRangeQueryQuery.xml to NumericRangeQuery.xml
+ (Christine Poerschke)
+
+* LUCENE-6925: add ForceMergePolicy class in test-framework
+ (Christine Poerschke)
+
+* LUCENE-6945: factor out TestCorePlus(Queries|Extensions)Parser from
+ TestParser, rename TestParser to TestCoreParser (Christine Poerschke)
+
+* LUCENE-6949: fix (potential) resource leak in SynonymFilterFactory
+ (https://scan.coverity.com/projects/5620 CID 120656)
+ (Christine Poerschke, Coverity Scan (via Rishabh Patel))
+
+* LUCENE-6961: Improve Exception handling in AnalysisFactories /
+ AnalysisSPILoader: Don't wrap exceptions occuring in factory's
+ ctor inside InvocationTargetException. (Uwe Schindler)
+
+* LUCENE-6965: Expression's JavascriptCompiler now throw ParseException
+ with bad function names or bad arity instead of IllegalArgumentException.
+ (Tomás Fernández Löbbe, Uwe Schindler, Ryan Ernst)
+
+* LUCENE-6964: String-based signatures in JavascriptCompiler replaced
+ with better compile-time-checked MethodType; generated class files
+ are no longer marked as synthetic. (Uwe Schindler)
+
+* LUCENE-6978: Refactor several code places that lookup locales
+ by string name to use BCP47 locale tag instead. LuceneTestCase
+ now also prints locales on failing tests this way.
+ Locale#forLanguageTag() and Locale#toString() were placed on list
+ of forbidden signatures. (Uwe Schindler, Robert Muir)
+
+* LUCENE-6988: You can now add IndexableFields directly to a MemoryIndex,
+ and create a MemoryIndex from a lucene Document. (Alan Woodward)
+
+* LUCENE-7005: TieredMergePolicy tweaks (>= vs. >, @see get vs. set)
+ (Christine Poerschke)
+
+* LUCENE-7006: increase BaseMergePolicyTestCase use (TestNoMergePolicy and
+ TestSortingMergePolicy now extend it, TestUpgradeIndexMergePolicy added)
+ (Christine Poerschke)
+
+======================= Lucene 5.4.1 =======================
+
+Bug Fixes
+
+* LUCENE-6910: fix 'if ... > Integer.MAX_VALUE' check in
+ (Binary|Numeric)DocValuesFieldUpdates.merge
+ (https://scan.coverity.com/projects/5620 CID 119973 and CID 120081)
+ (Christine Poerschke, Coverity Scan (via Rishabh Patel))
+
+* LUCENE-6946: SortField.equals now takes the missingValue parameter into
+ account. (Adrien Grand)
+
+* LUCENE-6918: LRUQueryCache.onDocIdSetEviction is only called when at least
+ one DocIdSet is being evicted. (Adrien Grand)
+
+* LUCENE-6929: Fix SpanNotQuery rewriting to not drop the pre/post parameters.
+ (Tim Allison via Adrien Grand)
+
+* LUCENE-6950: Fix FieldInfos handling of UninvertingReader, e.g. do not
+ hide the true docvalues update generation or other properties.
+ (Ishan Chattopadhyaya via Robert Muir)
+
+* LUCENE-6948: Fix ArrayIndexOutOfBoundsException in PagedBytes$Reader.fill
+ by removing an unnecessary long-to-int cast.
+ (Michael Lawley via Christine Poerschke)
+
+* SOLR-7865: BlendedInfixSuggester was returning too many results
+ (Arcadius Ahouansou via Mike McCandless)
+
+* LUCENE-6970: Fixed off-by-one error in Lucene54DocValuesProducer that could
+ potentially corrupt doc values. (Adrien Grand)
+
+* LUCENE-2229: Fix Highlighter's SimpleSpanFragmenter when multiple adjacent
+ stop words following a span can unduly make the fragment way too long.
+ (Elmer Garduno, Lukhnos Liu via David Smiley)
+
+======================= Lucene 5.4.0 =======================
+
+New Features
+
+* LUCENE-6875: New Serbian Filter. (Nikola Smolenski via Robert Muir,
+ Dawid Weiss)
+
+* LUCENE-6720: New FunctionRangeQuery wrapper around ValueSourceScorer
+ (returned from ValueSource/FunctionValues.getRangeScorer()). (David Smiley)
+
+* LUCENE-6724: Add utility APIs to GeoHashUtils to compute neighbor
+ geohash cells (Nick Knize via Mike McCandless).
+
+* LUCENE-6737: Add DecimalDigitFilter which folds unicode digits to basic latin.
+ (Robert Muir)
+
+* LUCENE-6699: Add integration of BKD tree and geo3d APIs to give
+ fast, very accurate query to find all indexed points within an
+ earth-surface shape (Karl Wright, Mike McCandless)
+
+* LUCENE-6838: Added IndexSearcher#getQueryCache and #getQueryCachingPolicy.
+ (Adrien Grand)
+
+* LUCENE-6844: PayloadScoreQuery can include or exclude underlying span scores
+ from its score calculations (Bill Bell, Alan Woodward)
+
+* LUCENE-6778: Add GeoPointDistanceRangeQuery, to search for points
+ within a "ring" (beyond a minimum distance and below a maximum
+ distance) (Nick Knize via Mike McCandless)
+
+* LUCENE-6874: Add a new UnicodeWhitespaceTokenizer to analysis/common
+ that uses Unicode character properties extracted from ICU4J to tokenize
+ text on whitespace. This tokenizer will split on non-breaking
+ space (NBSP), too. (David Smiley, Uwe Schindler, Steve Rowe)
+
+API Changes
+
+* LUCENE-6590: Query.setBoost(), Query.getBoost() and Query.clone() are gone.
+ In order to apply boosts, you now need to wrap queries in a BoostQuery.
+ (Adrien Grand)
+
+* LUCENE-6716: SpanPayloadCheckQuery now takes a List<BytesRef> rather than
+ a Collection<byte[]>. (Alan Woodward)
+
+* LUCENE-6489: The various span payload queries have been moved to the queries
+ submodule, and PayloadSpanUtil is now in sandbox. (Alan Woodward)
+
+* LUCENE-6650: The spatial module no longer uses Filter in any way. All
+ spatial Filters are now subclass Query. The spatial heatmap/facet API
+ now accepts a Bits parameter to filter counts. (David Smiley, Adrien Grand)
+
+* LUCENE-6803: Deprecate sandbox Regexp Query. (Uwe Schindler)
+
+* LUCENE-6301: org.apache.lucene.search.Filter is now deprecated. You should use
+ Query objects instead of Filters, and the BooleanClause.Occur.FILTER clause in
+ order to let Lucene know that a Query should be used for filtering but not
+ scoring.
+
+* LUCENE-6939: SpanOrQuery.addClause is now deprecated, clauses should all be
+ provided at construction time. (Paul Elschot via Adrien Grand)
+
+* LUCENE-6855: CachingWrapperQuery is deprecated and will be removed in 6.0.
+ (Adrien Grand)
+
+* LUCENE-6870: DisjunctionMaxQuery#add is now deprecated, clauses should all be
+ provided at construction time. (Adrien Grand)
+
+* LUCENE-6884: Analyzer.tokenStream() and Tokenizer.setReader() are no longer
+ declared as throwing IOException. (Alan Woodward)
+
+* LUCENE-6849: Expose IndexWriter.flush() method, to move all
+ in-memory segments to disk without opening a near-real-time reader
+ nor calling fsync (Robert Muir, Simon Willnauer, Mike McCandless)
+
+* LUCENE-6911: Add correct StandardQueryParser.getMultiFields() method,
+ deprecate no-op StandardQueryParser.getMultiFields(CharSequence[]) method.
+ (Christine Poerschke, Mikhail Khludnev, Coverity Scan (via Rishabh Patel))
+
+Optimizations
+
+* LUCENE-6708: TopFieldCollector does not compute the score several times on the
+ same document anymore. (Adrien Grand)
+
+* LUCENE-6720: ValueSourceScorer, returned from
+ FunctionValues.getRangeScorer(), now uses TwoPhaseIterator. (David Smiley)
+
+* LUCENE-6756: MatchAllDocsQuery now has a dedicated BulkScorer for better
+ performance when used as a top-level query. (Adrien Grand)
+
+* LUCENE-6746: DisjunctionMaxQuery, BoostingQuery and BoostedQuery now create
+ sub weights through IndexSearcher so that they can be cached. (Adrien Grand)
+
+* LUCENE-6754: Optimized IndexSearcher.count for the cases when it can use
+ index statistics instead of collecting all matches. (Adrien Grand)
+
+* LUCENE-6773: Nested conjunctions now iterate over documents as if clauses
+ were all at the same level. (Adrien Grand)
+
+* LUCENE-6777: Reuse BytesRef when visiting term ranges in
+ GeoPointTermsEnum to reduce GC pressure (Nick Knize via Mike
+ McCandless)
+
+* LUCENE-6779: Reduce memory allocated by CompressingStoredFieldsWriter to write
+ strings larger than 64kb by an amount equal to string's utf8 size.
+ (Dawid Weiss, Robert Muir, shalin)
+
+* LUCENE-6850: Optimize BooleanScorer for sparse clauses. (Adrien Grand)
+
+* LUCENE-6840: Ordinal indexes for SORTED_SET/SORTED_NUMERIC fields and
+ addresses for BINARY fields are now stored on disk instead of in memory.
+ (Adrien Grand)
+
+* LUCENE-6878: Speed up TopDocs.merge. (Daniel Jelinski via Adrien Grand)
+
+* LUCENE-6885: StandardDirectoryReader (initialCapacity) tweaks
+ (Christine Poerschke)
+
+* LUCENE-6863: Optimized storage requirements of doc values fields when less
+ than 1% of documents have a value. (Adrien Grand)
+
+* LUCENE-6892: various lucene.index initialCapacity tweaks
+ (Christine Poerschke)
+
+* LUCENE-6276: Added TwoPhaseIterator.matchCost() which allows to confirm the
+ least costly TwoPhaseIterators first. (Paul Elschot via Adrien Grand)
+
+* LUCENE-6898: In the default codec, the last stored field value will not
+ be fully read from disk if the supplied StoredFieldVisitor doesn't want it.
+ So put your largest text field value last to benefit. (David Smiley)
+
+* LUCENE-6909: Remove unnecessary synchronized from
+ FacetsConfig.getDimConfig for better concurrency (Sanne Grinovero
+ via Mike McCandless)
+
+* SOLR-7730: Speed up SlowCompositeReaderWrapper.getSortedSetDocValues() by
+ avoiding merging FieldInfos just to check doc value type.
+ (Paul Vasilyev, Yuriy Pakhomov, Mikhail Khludnev, yonik)
+
+Bug Fixes
+
+* LUCENE-6905: Unwrap center longitude for dateline crossing
+ GeoPointDistanceQuery. (Nick Knize)
+
+* LUCENE-6817: ComplexPhraseQueryParser.ComplexPhraseQuery does not display
+ slop in toString(). (Ahmet Arslan via Dawid Weiss)
+
+* LUCENE-6730: Hyper-parameter c is ignored in term frequency NormalizationH1.
+ (Ahmet Arslan via Robert Muir)
+
+* LUCENE-6742: Lovins & Finnish implementation of SnowballFilter was
+ fixed to behave exactly as specified. A bug in the snowball compiler
+ caused differences in output of the filter in comparison to the original
+ test data. In addition, the performance of those filters was improved
+ significantly. (Uwe Schindler, Robert Muir)
+
+* LUCENE-6783: Removed side effects from FuzzyLikeThisQuery.rewrite.
+ (Adrien Grand)
+
+* LUCENE-6776: Fix geo3d math to handle randomly squashed planet
+ models (Karl Wright via Mike McCandless)
+
+* LUCENE-6792: Fix TermsQuery.toString() to work with binary terms.
+ (Ruslan Muzhikov, Robert Muir)
+
+* LUCENE-5503: When Highlighter's WeightedSpanTermExtractor converts a
+ PhraseQuery to an equivalent SpanQuery, it would sometimes use a slop that is
+ too low (no highlight) or determine inOrder wrong.
+ (Tim Allison via David Smiley)
+
+* LUCENE-6790: Fix IndexWriter thread safety when one thread is
+ handling a tragic exception but another is still committing (Mike
+ McCandless)
+
+* LUCENE-6810: Upgrade to Spatial4j 0.5 -- fixes some edge-case bugs in the
+ spatial module. See https://github.com/locationtech/spatial4j/blob/master/CHANGES.md
+ (David Smiley)
+
+* LUCENE-6813: OfflineSorter no longer removes its output Path up
+ front, and instead opens it for write with the
+ StandardCopyOption.REPLACE_EXISTING to overwrite any prior file, so
+ that callers can safely use Files.createTempFile for the output.
+ This change also fixes OfflineSorter's default temp directory when
+ running tests to use mock filesystems so e.g. we detect file handle
+ leaks (Dawid Weiss, Robert Muir, Mike McCandless)
+
+* LUCENE-6813: RangeTreeWriter was failing to close all file handles
+ it opened, leading to intermittent failures on Windows (Dawid Weiss,
+ Robert Muir, Mike McCandless)
+
+* LUCENE-6826: Fix ClassCastException when merging a field that has no
+ terms because they were filtered out by e.g. a FilterCodecReader
+ (Trejkaz via Mike McCandless)
+
+* LUCENE-6823: LocalReplicator should use System.nanoTime as its clock
+ source for checking for expiration (Ishan Chattopadhyaya via Mike
+ McCandless)
+
+* LUCENE-6856: The Weight wrapper used by LRUQueryCache now delegates to the
+ original Weight's BulkScorer when applicable. (Adrien Grand)
+
+* LUCENE-6858: Fix ContextSuggestField to correctly wrap token stream
+ when using CompletionAnalyzer. (Areek Zillur)
+
+* LUCENE-6872: IndexWriter handles any VirtualMachineError, not just OOM,
+ as tragic. (Robert Muir)
+
+* LUCENE-6814: PatternTokenizer no longer hangs onto heap sized to the
+ maximum input string it's ever seen, which can be a large memory
+ "leak" if you tokenize large strings with many threads across many
+ indices (Alex Chow via Mike McCandless)
+
+* LUCENE-6888: Explain output of map() function now also prints default value (janhoy)
+
+Other
+
+* LUCENE-6899: Upgrade randomizedtesting to 2.3.1. (Dawid Weiss)
+
+* LUCENE-6478: Test execution can hang with java.security.debug. (Dawid Weiss)
+
+* LUCENE-6862: Upgrade of RandomizedRunner to version 2.2.0. (Dawid Weiss)
+
+* LUCENE-6857: Validate StandardQueryParser with NOT operator
+ with-in parantheses. (Jigar Shah via Dawid Weiss)
+
+* LUCENE-6827: Use explicit capacity ArrayList instead of a LinkedList
+ in MultiFieldQueryNodeProcessor. (Dawid Weiss).
+
+* LUCENE-6812: Upgrade RandomizedTesting to 2.1.17. (Dawid Weiss)
+
+* LUCENE-6174: Improve "ant eclipse" to select right JRE for building.
+ (Uwe Schindler, Dawid Weiss)
+
+* LUCENE-6417, LUCENE-6830: Upgrade ANTLR used in expressions module
+ to version 4.5.1-1. (Jack Conradson, Uwe Schindler)
+
+* LUCENE-6729: Upgrade ASM used in expressions module to version 5.0.4.
+ (Uwe Schindler)
+
+* LUCENE-6738: remove IndexWriterConfig.[gs]etIndexingChain
+ (Christine Poerschke)
+
+* LUCENE-6755: more tests of ToChildBlockJoinScorer.advance (hossman)
+
+* LUCENE-6571: fix some private access level javadoc errors and warnings
+ (Cao Manh Dat, Christine Poerschke)
+
+* LUCENE-6768: AbstractFirstPassGroupingCollector.groupSort private member
+ is not needed. (Christine Poerschke)
+
+* LUCENE-6761: MatchAllDocsQuery's Scorers do not expose approximations
+ anymore. (Adrien Grand)
+
+* LUCENE-6775, LUCENE-6833: Improved MorfologikFilterFactory to allow
+ loading of custom dictionaries from ResourceLoader. Upgraded
+ Morfologik to version 2.0.1. The 'dictionary' attribute has been
+ reverted back and now points at the dictionary resource to be
+ loaded instead of the default Polish dictionary.
+ (Uwe Schindler, Dawid Weiss)
+
+* LUCENE-6797: Make GeoCircle an interface and use a factory to create
+ it, to eventually handle degenerate cases (Karl Wright via Mike
+ McCandless)
+
+* LUCENE-6800: Use XYZSolidFactory to create XYZSolids (Karl Wright
+ via Mike McCandless)
+
+* LUCENE-6798: Geo3d now models degenerate (too tiny) circles as a
+ single point (Karl Wright via Mike McCandless)
+
+* LUCENE-6770: Add javadocs that FSDirectory canonicalizes the path.
+ (Uwe Schindler, Vladimir Kuzmin)
+
+* LUCENE-6795: Fix various places where code used
+ AccessibleObject#setAccessible() without a privileged block. Code
+ without a hard requirement to do reflection were rewritten. This
+ makes Lucene and Solr ready for Java 9 Jigsaw's module system, where
+ reflection on Java's runtime classes is very restricted.
+ (Robert Muir, Uwe Schindler)
+
+* LUCENE-6467: Simplify Query.equals. (Paul Elschot via Adrien Grand)
+
+* LUCENE-6845: SpanScorer is now merged into Spans (Alan Woodward, David Smiley)
+
+* LUCENE-6887: DefaultSimilarity is deprecated, use ClassicSimilarity for equivalent behavior,
+ or consider switching to BM25Similarity which will become the new default in Lucene 6.0 (hossman)
+
+* LUCENE-6893: factor out CorePlusQueriesParser from CorePlusExtensionsParser
+ (Christine Poerschke)
+
+* LUCENE-6902: Don't retry to fsync files / directories; fail
+ immediately. (Daniel Mitterdorfer, Uwe Schindler)
+
+* LUCENE-6801: Clarify JavaDocs of PhraseQuery that it in fact supports terms
+ at the same position (as does MultiPhraseQuery), treated like a conjunction.
+ Added test. (David Smiley, Adrien Grand)
+
+Build
+
+* LUCENE-6732: Improve checker for invalid source patterns to also
+ detect javadoc-style license headers. Use Groovy to implement the
+ checks instead of plain Ant. (Uwe Schindler)
+
+* LUCENE-6594: Update forbiddenapis to 2.0. (Uwe Schindler)
+
+Tests
+
+* LUCENE-6752: Add Math#random() to forbiddenapis. (Uwe Schindler,
+ Mikhail Khludnev, Andrei Beliakov)
+
+Changes in Backwards Compatibility Policy
+
+* LUCENE-6742: The Lovins & Finnish implementation of SnowballFilter
+ were fixed to now behave exactly like the original Snowball stemmer.
+ If you have indexed text using those stemmers you may need to reindex.
+ (Uwe Schindler, Robert Muir)
+
+Changes in Runtime Behavior
+
+* LUCENE-6772: MultiCollector now catches CollectionTerminatedException and
+ removes the collector that threw this exception from the list of sub
+ collectors to collect. (Adrien Grand)
+
+* LUCENE-6784: IndexSearcher's query caching is enabled by default. Run
+ indexSearcher.setQueryCache(null) to disable. (Adrien Grand)
+
+* LUCENE-6305: BooleanQuery.equals and hashcode do not depend on the order of
+ clauses anymore. (Adrien Grand)
+
+======================= Lucene 5.3.2 =======================
+
+Bug Fixes
+
+* SOLR-7865: BlendedInfixSuggester was returning too many results
+ (Arcadius Ahouansou via Mike McCandless)
+
+======================= Lucene 5.3.1 =======================
+
+Bug Fixes
+
+* LUCENE-6774: Remove classloader hack in MorfologikFilter. (Robert Muir,
+ Uwe Schindler)
+
+* LUCENE-6748: UsageTrackingQueryCachingPolicy no longer caches trivial queries
+ like MatchAllDocsQuery. (Adrien Grand)
+
+* LUCENE-6781: Fixed BoostingQuery to rewrite wrapped queries. (Adrien Grand)
+
+Tests
+
+* LUCENE-6760, SOLR-7958: Move TestUtil#randomWhitespace to the only
+ Solr test that is using it. The method is not useful for Lucene tests
+ (and easily breaks, e.g., in Java 9 caused by Unicode version updates).
+ (Uwe Schindler)
+
+
+======================= Lucene 5.3.0 =======================
+
+New Features
+
+* LUCENE-6485: Add CustomSeparatorBreakIterator to postings
+ highlighter which splits on any character. For example, it
+ can be used with getMultiValueSeparator render whole field
+ values. (Luca Cavanna via Robert Muir)
+
+* LUCENE-6459: Add common suggest API that mirrors Lucene's
+ Query/IndexSearcher APIs for Document based suggester.
+ Adds PrefixCompletionQuery, RegexCompletionQuery,
+ FuzzyCompletionQuery and ContextQuery.
+ (Areek Zillur via Mike McCandless)
+
+* LUCENE-6487: Spatial Geo3D API now has a WGS84 ellipsoid world model option.
+ (Karl Wright via David Smiley)
+
+* LUCENE-6477: Add experimental BKD geospatial tree doc values format
+ and queries, for fast "bbox/polygon contains lat/lon points" (Mike
+ McCandless)
+
+* LUCENE-6526: Asserting(Query|Weight|Scorer) now ensure scores are not computed
+ if they are not needed. (Adrien Grand)
+
+* LUCENE-6481: Add GeoPointField, GeoPointInBBoxQuery,
+ GeoPointInPolygonQuery for simple "indexed lat/lon point in
+ bbox/shape" searching. (Nick Knize via Mike McCandless)
+
+* LUCENE-5954: The segments_N commit point now stores the Lucene
+ version that wrote the commit as well as the lucene version that
+ wrote the oldest segment in the index, for faster checking of "too
+ old" indices (Ryan Ernst, Robert Muir, Mike McCandless)
+
+* LUCENE-6519: BKDPointInPolygonQuery is much faster by avoiding
+ the per-hit polygon check when a leaf cell is fully contained by the
+ polygon. (Nick Knize, Mike McCandless)
+
+* LUCENE-6549: Add preload option to MMapDirectory. (Robert Muir)
+
+* LUCENE-6504: Add Lucene53Codec, with norms implemented directly
+ via the Directory's RandomAccessInput api. (Robert Muir)
+
+* LUCENE-6539: Add new DocValuesNumbersQuery, to match any document
+ containing one of the specified long values. This change also
+ moves the existing DocValuesTermsQuery and DocValuesRangeQuery
+ to Lucene's sandbox module, since in general these queries are
+ quite slow and are only fast in specific cases. (Adrien Grand,
+ Robert Muir, Mike McCandless)
+
+* LUCENE-6577: Give earlier and better error message for invalid CRC.
+ (Robert Muir)
+
+* LUCENE-6544: Geo3D: (1) Regularize path & polygon construction, (2) add
+ PlanetModel.surfaceDistance() (ellipsoidal calculation), (3) cache lat & lon
+ in GeoPoint, (4) add thread-safety where missing -- Geo3dShape. (Karl Wright,
+ David Smiley)
+
+* LUCENE-6606: SegmentInfo.toString now confesses how the documents
+ were sorted, when SortingMergePolicy was used (Christine Poerschke
+ via Mike McCandless)
+
+* LUCENE-6524: IndexWriter can now be initialized from an already open
+ near-real-time or non-NRT reader. (Boaz Leskes, Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6578: Geo3D can now compute the distance from a point to a shape, both
+ inner distance and to an outside edge. Multiple distance algorithms are
+ available. (Karl Wright, David Smiley)
+
+* LUCENE-6632: Geo3D: Compute circle planes more accurately.
+ (Karl Wright via David Smiley)
+
+* LUCENE-6653: Added general purpose BytesTermAttribute to basic token
+ attributes package that can be used for TokenStreams that solely produce
+ binary terms. (Uwe Schindler)
+
+* LUCENE-6365: Add Operations.topoSort, to run topological sort of the
+ states in an Automaton (Markus Heiden via Mike McCandless)
+
+* LUCENE-6365: Replace Operations.getFiniteStrings with a
+ more scalable iterator API (FiniteStringsIterator) (Markus Heiden
+ via Mike McCandless)
+
+* LUCENE-6589: Add a new org.apache.lucene.search.join.CheckJoinIndex class
+ that can be used to validate that an index has an appropriate structure to
+ run join queries. (Adrien Grand)
+
+* LUCENE-6659: Remove IndexWriter's unnecessary hard limit on max concurrency
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-6547: Add GeoPointDistanceQuery, matching all points within
+ the specified distance from the center point. Fix
+ GeoPointInBBoxQuery to handle dateline crossing.
+
+* LUCENE-6694: Add LithuanianAnalyzer and LithuanianStemmer.
+ (Dainius Jocas via Robert Muir)
+
+* LUCENE-6695: Added a new BlendedTermQuery to blend statistics across several
+ terms. (Simon Willnauer, Adrien Grand)
+
+* LUCENE-6706: Added a new PayloadScoreQuery that generalises the behaviour of
+ PayloadTermQuery and PayloadNearQuery to all Span queries. (Alan Woodward)
+
+* LUCENE-6697: Add experimental range tree doc values format and
+ queries, based on a 1D version of the spatial BKD tree, for a faster
+ and smaller alternative to postings-based numeric and binary term
+ filtering. Range trees can also handle values larger than 64 bits.
+ (Adrien Grand, Mike McCandless)
+
+* LUCENE-6647: Add GeoHash string utility APIs (Nick Knize via Mike
+ McCandless).
+
+* LUCENE-6710: GeoPointField now uses full 64 bits (up from 62) to encode
+ lat/lon (Nick Knize via Mike McCandless).
+
+* LUCENE-6580: SpanNearQuery now allows defined-width gaps in its subqueries
+ (Alan Woodward, Adrien Grand).
+
+* LUCENE-6712: Use doc values to post-filter GeoPointField hits that
+ fall in boundary cells, resulting in smaller index, faster searches
+ and less heap used for each query (Nick Knize via Mike McCandless).
+
+API Changes
+
+* LUCENE-6508: Simplify Lock api, there is now just
+ Directory.obtainLock() which returns a Lock that can be
+ released (or fails with exception). Add lock verification
+ to IndexWriter. Improve exception messages when locking fails.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-6371, LUCENE-6490: Payload collection from Spans is moved to a more generic
+ SpanCollector framework. Spans no longer implements .hasPayload() and
+ .getPayload() methods, and instead exposes a collect() method that allows
+ the collection of arbitrary postings information. SpanPayloadCheckQuery and
+ SpanPayloadNearCheckQuery have moved from the .spans package to the .payloads
+ package. (Alan Woodward, David Smiley, Paul Elschot, Robert Muir)
+
+* LUCENE-6529: Removed an optimization in UninvertingReader that was causing
+ incorrect results for Numeric fields using precisionStep
+ (hossman, Robert Muir)
+
+* LUCENE-6551: Add missing ConcurrentMergeScheduler.getAutoIOThrottle
+ getter (Simon Willnauer, Mike McCandless)
+
+* LUCENE-6552: Add MergePolicy.OneMerge.getMergeInfo and rename
+ setInfo to setMergeInfo (Simon Willnauer, Mike McCandless)
+
+* LUCENE-6525: Deprecate IndexWriterConfig's writeLockTimeout.
+ (Robert Muir)
+
+* LUCENE-6583: FilteredQuery is deprecated and will be removed in 6.0. It should
+ be replaced with a BooleanQuery which handle the query as a MUST clause and
+ the filter as a FILTER clause. (Adrien Grand)
+
+* LUCENE-6553: The postings, spans and scorer APIs no longer take an acceptDocs
+ parameter. Live docs are now always checked on top of these APIs.
+ (Adrien Grand)
+
+* LUCENE-6634: PKIndexSplitter now takes a Query instead of a Filter to decide
+ how to split an index. (Adrien Grand)
+
+* LUCENE-6643: GroupingSearch from lucene/grouping was changed to take a Query
+ object to define groups instead of a Filter. (Adrien Grand)
+
+* LUCENE-6554: ToParentBlockJoinFieldComparator was removed because of a bug
+ with missing values that could not be fixed. ToParentBlockJoinSortField now
+ works with string or numeric doc values selectors. Sorting on anything else
+ than a string or numeric field would require to implement a custom selector.
+ (Adrien Grand)
+
+* LUCENE-6648: All lucene/facet APIs now take Query objects where they used to
+ take Filter objects. (Adrien Grand)
+
+* LUCENE-6640: Suggesters now take a BitsProducer object instead of a Filter
+ object to reduce the scope of doc IDs that may be returned, emphasizing the
+ fact that these objects need to support random-access. (Adrien Grand)
+
+* LUCENE-6646: Make EarlyTerminatingCollector take a Sort object directly
+ instead of a SortingMergePolicy. (Christine Poerschke via Adrien Grand)
+
+* LUCENE-6649: BitDocIdSetFilter and BitDocIdSetCachingWrapperFilter are now
+ deprecated in favour of BitSetProducer and QueryBitSetProducer, which do not
+ extend oal.search.Filter. (Adrien Grand)
+
+* LUCENE-6607: Factor out geo3d into its own spatial3d module. (Karl
+ Wright, Nick Knize, David Smiley, Mike McCandless)
+
+* LUCENE-6531: PhraseQuery is now immutable and can be built using the
+ PhraseQuery.Builder class. (Adrien Grand)
+
+* LUCENE-6570: BooleanQuery is now immutable and can be built using the
+ BooleanQuery.Builder class. (Adrien Grand)
+
+* LUCENE-6702: NRTSuggester: Add a method to inject context values at index time
+ in ContextSuggestField. Simplify ContextQuery logic for extracting contexts and
+ add dedicated method to consider all context values at query time.
+ (Areek Zillur, Mike McCandless)
+
+* LUCENE-6719: NumericUtils getMinInt, getMaxInt, getMinLong, getMaxLong now
+ return null if there are no terms for the specified field, previously these
+ methods returned primitive values and raised an undocumented NullPointerException
+ if there were no terms for the field. (hossman, Timothy Potter)
+
+Bug fixes
+
+* LUCENE-6500: ParallelCompositeReader did not always call
+ closed listeners. This was fixed by LUCENE-6501.
+ (Adrien Grand, Uwe Schindler)
+
+* LUCENE-6520: Geo3D GeoPath.done() would throw an NPE if adjacent path
+ segments were co-linear. (Karl Wright via David Smiley)
+
+* LUCENE-5805: QueryNodeImpl.removeFromParent was doing nothing in a
+ costly manner (Christoph Kaser, Cao Manh Dat via Mike McCAndless)
+
+* LUCENE-6533: SlowCompositeReaderWrapper no longer caches its live docs
+ instance since this can prevent future improvements like a
+ disk-backed live docs (Adrien Grand, Mike McCandless)
+
+* LUCENE-6558: Highlighters now work with CustomScoreQuery (Cao Manh
+ Dat via Mike McCandless)
+
+* LUCENE-6560: BKDPointInBBoxQuery now handles "dateline crossing"
+ correctly (Nick Knize, Mike McCandless)
+
+* LUCENE-6564: Change PrintStreamInfoStream to use thread safe Java 8
+ ISO-8601 date formatting (in Lucene 5.x use Java 7 FileTime#toString
+ as workaround); fix output of tests to use same format. (Uwe Schindler,
+ Ramkumar Aiyengar)
+
+* LUCENE-6593: Fixed ToChildBlockJoinQuery's scorer to not refuse to advance
+ to a document that belongs to the parent space. (Adrien Grand)
+
+* LUCENE-6591: Never write a negative vLong (Robert Muir, Ryan Ernst,
+ Adrien Grand, Mike McCandless)
+
+* LUCENE-6588: Fix how ToChildBlockJoinQuery deals with acceptDocs.
+ (Christoph Kaser via Adrien Grand)
+
+* LUCENE-6597: Geo3D's GeoCircle now supports a world-globe diameter.
+ (Karl Wright via David Smiley)
+
+* LUCENE-6608: Fix potential resource leak in BigramDictionary.
+ (Rishabh Patel via Uwe Schindler)
+
+* LUCENE-6614: Improve partition detection in IOUtils#spins() so it
+ works with NVMe drives. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-6586: Fix typo in GermanStemmer, causing possible wrong value
+ for substCount. (Christoph Kaser via Mike McCandless)
+
+* LUCENE-6658: Fix IndexUpgrader to also upgrade indexes without any
+ segments. (Trejkaz, Uwe Schindler)
+
+* LUCENE-6677: QueryParserBase fails to enforce maxDeterminizedStates when
+ creating a WildcardQuery (David Causse via Mike McCandless)
+
+* LUCENE-6680: Preserve two suggestions that have same key and weight but
+ different payloads (Arcadius Ahouansou via Mike McCandless)
+
+* LUCENE-6681: SortingMergePolicy must override MergePolicy.size(...).
+ (Christine Poerschke via Adrien Grand)
+
+* LUCENE-6682: StandardTokenizer performance bug: scanner buffer is
+ unnecessarily copied when maxTokenLength doesn't change. Also stop silently
+ maxing out buffer size (and effectively also max token length) at 1M chars,
+ but instead throw an exception from setMaxTokenLength() when the given
+ length is greater than 1M chars. (Piotr Idzikowski, Steve Rowe)
+
+* LUCENE-6696: Fix FilterDirectoryReader.close() to never close the
+ underlying reader several times. (Adrien Grand)
+
+* LUCENE-6334: FastVectorHighlighter failed to highlight phrases across
+ more than one value in a multi-valued field. (Chris Earle, Nik Everett
+ via Mike McCandless)
+
+* LUCENE-6704: GeoPointDistanceQuery was visiting too many term ranges,
+ consuming too much heap for a large radius (Nick Knize via Mike McCandless)
+
+* SOLR-5882: fix ScoreMode.Min at ToParentBlockJoinQuery (Mikhail Khludnev)
+
+* LUCENE-6718: JoinUtil.createJoinQuery failed to rewrite queries before
+ creating a Weight. (Adrien Grand)
+
+* LUCENE-6713: TooComplexToDeterminizeException claims to be serializable
+ but wasn't (Simon Willnauer, Mike McCandless)
+
+* LUCENE-6723: Fix date parsing problems in Java 9 with date formats using
+ English weekday/month names. (Uwe Schindler)
+
+* LUCENE-6618: Properly set MMapDirectory.UNMAP_SUPPORTED when it is now allowed
+ by security policy. (Robert Muir)
+
+Changes in Runtime Behavior
+
+* LUCENE-6501: The subreader structure in ParallelCompositeReader
+ was flattened, because the current implementation had too many
+ hidden bugs regarding refounting and close listeners.
+ If you create a new ParallelCompositeReader, it will just take
+ all leaves of the passed readers and form a flat structure of
+ ParallelLeafReaders instead of trying to assemble the original
+ structure of composite and leaf readers. (Adrien Grand,
+ Uwe Schindler)
+
+* LUCENE-6537: NearSpansOrdered no longer tries to minimize its
+ Span matches. This means that the matching algorithm is entirely
+ lazy. All spans returned by the previous implementation are still
+ reported, but matching documents may now also return additional
+ spans that were previously discarded in preference to shorter
+ overlapping ones. (Alan Woodward, Adrien Grand, Paul Elschot)
+
+* LUCENE-6538: Also include java.vm.version and java.runtime.version
+ in per-segment diagnostics (Robert Muir, Mike McCandless)
+
+* LUCENE-6569: Optimize MultiFunction.anyExists and allExists to eliminate
+ excessive array creation in common 2 argument usage (Jacob Graves, hossman)
+
+* LUCENE-2880: Span queries now score more consistently with regular queries.
+ (Robert Muir, Adrien Grand)
+
+* LUCENE-6601: FilteredQuery now always rewrites to a BooleanQuery which handles
+ the query as a MUST clause and the filter as a FILTER clause.
+ LEAP_FROG_QUERY_FIRST_STRATEGY and LEAP_FROG_FILTER_FIRST_STRATEGY do not
+ guarantee anymore which iterator will be advanced first, it will depend on the
+ respective costs of the iterators. QUERY_FIRST_FILTER_STRATEGY and
+ RANDOM_ACCESS_FILTER_STRATEGY still consume the filter using its random-access
+ API, however the returned bits may be called on different documents compared
+ to before. (Adrien Grand)
+
+* LUCENE-6542: FSDirectory's ctor now works with security policies or file systems
+ that restrict write access. (Trejkaz, hossman, Uwe Schindler)
+
+* LUCENE-6651: The default implementation of AttributeImpl#reflectWith(AttributeReflector)
+ now uses AccessControler#doPrivileged() to do the reflection. Please consider
+ implementing this method in all your custom attributes, because the method will be
+ made abstract in Lucene 6. (Uwe Schindler)
+
+* LUCENE-6639: LRUQueryCache and CachingWrapperQuery now consider a query as
+ "used" when the first Scorer is pulled instead of when a Scorer is pulled on
+ the first segment on an index. (Terry Smith, Adrien Grand)
+
+* LUCENE-6579: IndexWriter now sacrifices (closes) itself to protect the index
+ when an unexpected, tragic exception strikes while merging. (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-6691: SortingMergePolicy.isSorted now considers FilterLeafReader instances.
+ EarlyTerminatingSortingCollector.terminatedEarly accessor added.
+ TestEarlyTerminatingSortingCollector.testTerminatedEarly test added.
+ (Christine Poerschke)
+
+* LUCENE-6609: Add getSortField impls to many subclasses of FieldCacheSource which return
+ the most direct SortField implementation. In many trivial sort by ValueSource usages, this
+ will result in less RAM, and more precise sorting of extreme values due to no longer
+ converting to double. (hossman)
+
+Optimizations
+
+* LUCENE-6548: Some optimizations for BlockTree's intersect with very
+ finite automata (Mike McCandless)
+
+* LUCENE-6585: Flatten conjunctions and conjunction approximations into
+ parent conjunctions. For example a sloppy phrase query of "foo bar"~5
+ with a filter of "baz" will internally leapfrog foo,bar,baz as one
+ conjunction. (Ryan Ernst, Robert Muir, Adrien Grand)
+
+* LUCENE-6325: Reduce RAM usage of FieldInfos, and speed up lookup by
+ number, by using an array instead of TreeMap except in very sparse
+ cases (Robert Muir, Mike McCandless)
+
+* LUCENE-6617: Reduce heap usage for small FSTs (Mike McCandless)
+
+* LUCENE-6616: IndexWriter now lists the files in the index directory
+ only once on init, and IndexFileDeleter no longer suppresses
+ FileNotFoundException and NoSuchFileException. This also improves
+ IndexFileDeleter to delete segments_N files last, so that in the
+ presence of a virus checker, the index is never left in a state
+ where an expired segments_N references non-existing files (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-6645: Optimized the way we merge postings lists in multi-term queries
+ and TermsQuery. This should especially help when there are lots of small
+ postings lists. (Adrien Grand, Mike McCandless)
+
+* LUCENE-6668: Optimized storage for sorted set and sorted numeric doc values
+ in the case that there are few unique sets of values.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-6690: Sped up MultiTermsEnum.next() on high-cardinality fields.
+ (Adrien Grand)
+
+* LUCENE-6621: Removed two unused variables in analysis/stempel/src/java/org/
+ egothor/stemmer/Compile.java
+ (Rishabh Patel via Christine Poerschke)
+
+Build
+
+* LUCENE-6518: Don't report false thread leaks from IBM J9
+ ClassCache Reaper in test framework. (Dawid Weiss)
+
+* LUCENE-6567: Simplify payload checking in SpanPayloadCheckQuery (Alan
+ Woodward)
+
+* LUCENE-6568: Make rat invocation depend on ivy configuration being set up
+ (Ramkumar Aiyengar)
+
+* LUCENE-6683: ivy-fail goal directs people to non-existent page
+ (Mike Drob via Steve Rowe)
+
+* LUCENE-6693: Updated Groovy to 2.4.4, Pegdown to 1.5, Svnkit to 1.8.10.
+ Also fixed some PermGen errors while running full build caused by
+ these updates: Tasks are now installed from root's build.xml.
+ (Uwe Schindler)
+
+* LUCENE-6741: Fix jflex files to regenerate the java files correctly.
+ (Uwe Schindler)
+
+Test Framework
+
+* LUCENE-6637: Fix FSTTester to not violate file permissions
+ on -Dtests.verbose=true. (Mesbah M. Alam, Uwe Schindler)
+
+* LUCENE-6542: LuceneTestCase now has runWithRestrictedPermissions() to run
+ an action with reduced permissions. This can be used to simulate special
+ environments (e.g., read-only dirs). If tests are running without a security
+ manager, an assume cancels test execution automatically. (Uwe Schindler)
+
+* LUCENE-6652: Removed lots of useless Byte(s)TermAttributes all over test
+ infrastructure. (Uwe Schindler)
+
+* LUCENE-6563: Improve MockFileSystemTestCase.testURI to check if a path
+ can be encoded according to local filesystem requirements. Otherwise
+ stop test execution. (Christine Poerschke via Uwe Schindler)
+
+Changes in Backwards Compatibility Policy
+
+* LUCENE-6553: The iterator returned by the LeafReader.postings method now
+ always includes deleted docs, so you have to check for deleted documents on
+ top of the iterator. (Adrien Grand)
+
+* LUCENE-6633: DuplicateFilter has been deprecated and will be removed in 6.0.
+ DiversifiedTopDocsCollector can be used instead with a maximum number of hits
+ per key equal to 1. (Adrien Grand)
+
+* LUCENE-6653: The workflow for consuming the TermToBytesRefAttribute was changed:
+ getBytesRef() now does all work and is called on each token, fillBytesRef()
+ was removed. The implementation is free to reuse the internal BytesRef
+ or return a new one on each call. (Uwe Schindler)
+
+* LUCENE-6682: StandardTokenizer.setMaxTokenLength() now throws an exception if
+ a length greater than 1M chars is given. Previously the effective max token
+ length (the scanner's buffer) was capped at 1M chars, but getMaxTokenLength()
+ incorrectly returned the previously requested length, even when it exceeded 1M.
+ (Piotr Idzikowski, Steve Rowe)
+
+
+======================= Lucene 5.2.1 =======================
+
+Bug Fixes
+
+* LUCENE-6482: Fix class loading deadlock relating to Codec initialization,
+ default codec and SPI discovery. (Shikhar Bhushan, Uwe Schindler)
+
+* LUCENE-6523: NRT readers now reflect a new commit even if there is
+ no change to the commit user data (Mike McCandless)
+
+* LUCENE-6527: Queries now get a dummy Similarity when scores are not needed
+ in order to not load unnecessary information like norms. (Adrien Grand)
+
+* LUCENE-6559: TimeLimitingCollector now also checks for timeout when a new
+ leaf reader is pulled ie. if we move from one segment to another even without
+ collecting a hit. (Simon Willnauer)
+
+======================= Lucene 5.2.0 =======================
+
+New Features
+
+* LUCENE-6308, LUCENE-6385, LUCENE-6391: Span queries now share
+ document conjunction/intersection
+ code with boolean queries, and use two-phased iterators for
+ faster intersection by avoiding loading positions in certain cases.
+ (Paul Elschot, Terry Smith, Robert Muir via Mike McCandless)
+
+* LUCENE-6393: Add two-phase support to SpanPositionCheckQuery
+ and its subclasses: SpanPositionRangeQuery, SpanPayloadCheckQuery,
+ SpanNearPayloadCheckQuery, SpanFirstQuery. (Paul Elschot, Robert Muir)
+
+* LUCENE-6394: Add two-phase support to SpanNotQuery and refactor
+ FilterSpans to just have an accept(Spans candidate) method for
+ subclasses. (Robert Muir)
+
+* LUCENE-6373: SpanOrQuery shares disjunction logic with boolean
+ queries, and supports two-phased iterators to avoid loading
+ positions when possible. (Paul Elschot via Robert Muir)
+
+* LUCENE-6352, LUCENE-6472: Added a new query time join to the join module
+ that uses global ordinals, which is faster for subsequent joins between
+ reopens. (Martijn van Groningen, Adrien Grand)
+
+* LUCENE-5879: Added experimental auto-prefix terms to BlockTree terms
+ dictionary, exposed as AutoPrefixPostingsFormat (Adrien Grand,
+ Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-5579: New CompositeSpatialStrategy combines speed of RPT with
+ accuracy of SDV. Includes optimized Intersect predicate to avoid many
+ geometry checks. Uses TwoPhaseIterator. (David Smiley)
+
+* LUCENE-5989: Allow passing BytesRef to StringField to make it easier
+ to index arbitrary binary tokens, and change the experimental
+ StoredFieldVisitor.stringField API to take UTF-8 byte[] instead of
+ String (Mike McCandless)
+
+* LUCENE-6389: Added ScoreMode.Min that aggregates the lowest child score
+ to the parent hit. (Martijn van Groningen, Adrien Grand)
+
+* LUCENE-6423: New LimitTokenOffsetFilter that limits tokens to those before
+ a configured maximum start offset. (David Smiley)
+
+* LUCENE-6422: New spatial PackedQuadPrefixTree, a generally more efficient
+ choice than QuadPrefixTree, especially for high precision shapes.
+ When used, you should typically disable RPT's pruneLeafyBranches option.
+ (Nick Knize, David Smiley)
+
+* LUCENE-6451: Expressions now support bindings keys that look like
+ zero arg functions (Jack Conradson via Ryan Ernst)
+
+* LUCENE-6083: Add SpanWithinQuery and SpanContainingQuery that return
+ spans inside of / containing another spans. (Paul Elschot via Robert Muir)
+
+* LUCENE-6454: Added distinction between member variable and method in
+ expression helper VariableContext
+ (Jack Conradson via Ryan Ernst)
+
+* LUCENE-6196: New Spatial "Geo3d" API with partial Spatial4j integration.
+ It is a set of shapes implemented using 3D planar geometry for calculating
+ spatial relations on the surface of a sphere. Shapes include Point, BBox,
+ Circle, Path (buffered line string), and Polygon.
+ (Karl Wright via David Smiley)
+
+* LUCENE-6464: Add a new expert lookup method to
+ AnalyzingInfixSuggester to accept an arbitrary BooleanQuery to
+ express how contexts should be filtered. (Arcadius Ahouansou via
+ Mike McCandless)
+
+Optimizations
+
+* LUCENE-6379: IndexWriter.deleteDocuments(Query...) now detects if
+ one of the queries is MatchAllDocsQuery and just invokes the much
+ faster IndexWriter.deleteAll in that case (Robert Muir, Adrien
+ Grand, Mike McCandless)
+
+* LUCENE-6388: Optimize SpanNearQuery when payloads are not present.
+ (Robert Muir)
+
+* LUCENE-6421: Defer reading of positions in MultiPhraseQuery until
+ they are needed. (Robert Muir)
+
+* LUCENE-6392: Highligher- reduce memory of tokens in
+ TokenStreamFromTermVector, and add maxStartOffset limit. (David Smiley)
+
+* LUCENE-6456: Queries that generate doc id sets that are too large for the
+ query cache are not cached instead of evicting everything. (Adrien Grand)
+
+* LUCENE-6455: Require a minimum index size to enable query caching in order
+ not to cache eg. on MemoryIndex. (Adrien Grand)
+
+* LUCENE-6330: BooleanScorer (used for top-level disjunctions) does not decode
+ norms when not necessary anymore. (Adrien Grand)
+
+* LUCENE-6350: TermsQuery is now compressed with PrefixCodedTerms.
+ (Robert Muir, Mike McCandless, Adrien Grand)
+
+* LUCENE-6458: Multi-term queries matching few terms per segment now execute
+ like a disjunction. (Adrien Grand)
+
+* LUCENE-6360: TermsQuery rewrites to a disjunction when there are 16 matching
+ terms or less. (Adrien Grand)
+
+Bug Fixes
+
+* LUCENE-329: Fix FuzzyQuery defaults to rank exact matches highest.
+ (Mark Harwood, Adrien Grand)
+
+* LUCENE-6378: Fix all RuntimeExceptions to throw the underlying root cause.
+ (Varun Thacker, Adrien Grand, Mike McCandless)
+
+* LUCENE-6415: TermsQuery.extractTerms is a no-op (used to throw an
+ UnsupportedOperationException). (Adrien Grand)
+
+* LUCENE-6416: BooleanQuery.extractTerms now only extracts terms from scoring
+ clauses. (Adrien Grand)
+
+* LUCENE-6409: Fixed integer overflow in LongBitSet.ensureCapacity.
+ (Luc Vanlerberghe via Adrien Grand)
+
+* LUCENE-6424, LUCENE-6430: Fix many bugs with mockfs filesystems in the
+ test-framework: always consistently wrap Path, fix buggy behavior for
+ globs, implement equals/hashcode for filtered Paths, etc.
+ (Ryan Ernst, Simon Willnauer, Robert Muir)
+
+* LUCENE-6426: Fix FieldType's copy constructor to also copy over the numeric
+ precision step. (Adrien Grand)
+
+* LUCENE-6345: Null check terms/fields in Lucene queries (Lee
+ Hinman via Mike McCandless)
+
+* LUCENE-6400: SolrSynonymParser should preserve original token instead
+ of replacing it with a synonym, when expand=true and there is no
+ explicit mapping (Ian Ribas, Robert Muir, Mike McCandless)
+
+* LUCENE-6449: Don't throw NullPointerException if some segments are
+ missing the field being highlighted, in PostingsHighlighter (Roman
+ Khmelichek via Mike McCandless)
+
+* LUCENE-6427: Added assertion about the presence of ghost bits in
+ (Fixed|Long)BitSet. (Luc Vanlerberghe via Adrien Grand)
+
+* LUCENE-6468: Fixed NPE with empty Kuromoji user dictionary.
+ (Jun Ohtani via Christian Moen)
+
+* LUCENE-6483: Ensure core closed listeners are called on the same cache key as
+ the reader which has been used to register the listener. (Adrien Grand)
+
+* LUCENE-6486 DocumentDictionary iterator no longer skips
+ documents with no payloads and now returns an empty BytesRef instead
+ (Marius Grama via Michael McCandless)
+
+* LUCENE-6505: NRT readers now reflect segments_N filename and commit
+ user data from previous commits (Mike McCandless)
+
+* LUCENE-6507: Don't let NativeFSLock.close() release other locks
+ (Simon Willnauer, Robert Muir, Uwe Schindler, Mike McCandless)
+
+API Changes
+
+* LUCENE-6377: SearcherFactory#newSearcher now accepts the previous reader
+ to simplify warming logic during opening new searchers. (Simon Willnauer)
+
+* LUCENE-6410: Removed unused "reuse" parameter to
+ Terms.iterator. (Robert Muir, Mike McCandless)
+
+* LUCENE-6425: Replaced Query.extractTerms with Weight.extractTerms.
+ (Adrien Grand)
+
+* LUCENE-6446: Simplified Explanation API. (Adrien Grand)
+
+* LUCENE-6445: Two new methods in Highlighter's TokenSources; the existing
+ methods are now marked deprecated. (David Smiley)
+
+* LUCENE-6484: Removed EliasFanoDocIdSet, which was unused.
+ (Paul Elschot via Adrien Grand)
+
+* LUCENE-6466: Moved SpanQuery.getSpans() and .extractTerms() to SpanWeight
+ (Alan Woodward, Robert Muir)
+
+* LUCENE-6497: Allow subclasses of FieldType to check frozen state
+ (Ryan Ernst)
+
+Other
+
+* LUCENE-6413: Test runner should report the number of suites completed/
+ remaining. (Dawid Weiss)
+
+* LUCENE-5439: Add 'ant jacoco' build target. (Robert Muir)
+
+* LUCENE-6315: Simplify the private iterator Lucene uses internally
+ when resolving deleted terms to matched docids. (Robert Muir, Adrien
+ Grand, Mike McCandless)
+
+* LUCENE-6399: Benchmark module's QueryMaker.resetInputs should call setConfig
+ so queries can react to property changes in new rounds. (David Smiley)
+
+* LUCENE-6382: Lucene now enforces that positions never exceed the
+ maximum value IndexWriter.MAX_POSITION. (Robert Muir, Mike McCandless)
+
+* LUCENE-6372: Simplified and improved equals/hashcode of span queries.
+ (Paul Elschot via Adrien Grand)
+
+Build
+
+* LUCENE-6420: Update forbiddenapis to v1.8 (Uwe Schindler)
+
+Test Framework
+
+* LUCENE-6419: Added two-phase iteration assertions to AssertingQuery.
+ (Adrien Grand)
+
+* LUCENE-6437: Randomly set CPU core count and spins, derived from
+ test's master seed, used by ConcurrentMergeScheduler to set dynamic
+ defaults, for better test randomization and to help tests reproduce
+ (Robert Muir, Mike McCandless)
+
+======================= Lucene 5.1.0 =======================
+
+New Features
+
+* LUCENE-6066: Added DiversifiedTopDocsCollector to misc for collecting no more
+ than a given number of results under a choice of key. Introduces new remove
+ method to core's PriorityQueue. (Mark Harwood)
+
+* LUCENE-6191: New spatial 2D heatmap faceting for PrefixTreeStrategy. (David Smiley)
+
+* LUCENE-6227: Added BooleanClause.Occur.FILTER to filter documents without
+ participating in scoring (on the contrary to MUST). (Adrien Grand)
+
+* LUCENE-6294: Added oal.search.CollectorManager to allow for parallelization
+ of the document collection process on IndexSearcher. (Adrien Grand)
+
+* LUCENE-6303: Added filter caching baked into IndexSearcher, disabled by
+ default. (Adrien Grand)
+
+* LUCENE-6304: Added a new MatchNoDocsQuery that matches no documents.
+ (Lee Hinman via Adrien Grand)
+
+* LUCENE-6341: Add a -fast option to CheckIndex. (Robert Muir)
+
+* LUCENE-6355: IndexWriter's infoStream now also logs time to write FieldInfos
+ during merge (Lee Hinman via Mike McCandless)
+
+* LUCENE-6339: Added Near-real time Document Suggester via custom postings format
+ (Areek Zillur, Mike McCandless, Simon Willnauer)
+
+Bug Fixes
+
+* LUCENE-6368: FST.save can truncate output (BufferedOutputStream may be closed
+ after the underlying stream). (Ippei Matsushima via Dawid Weiss)
+
+* LUCENE-6249: StandardQueryParser doesn't support pure negative clauses.
+ (Dawid Weiss)
+
+* LUCENE-6190: Spatial pointsOnly flag on PrefixTreeStrategy shouldn't switch all predicates to
+ Intersects. (David Smiley)
+
+* LUCENE-6242: Ram usage estimation was incorrect for SparseFixedBitSet when
+ object alignment was different from 8. (Uwe Schindler, Adrien Grand)
+
+* LUCENE-6293: Fixed TimSorter bug. (Adrien Grand)
+
+* LUCENE-6001: DrillSideways hits NullPointerException for certain
+ BooleanQuery searches. (Dragan Jotannovic, jane chang via Mike
+ McCandless)
+
+* LUCENE-6311: Fix NIOFSDirectory and SimpleFSDirectory so that the
+ toString method of IndexInputs confess when they are from a compound
+ file. (Robert Muir, Mike McCandless)
+
+* LUCENE-6381: Add defensive wait time limit in
+ DocumentsWriterStallControl to prevent hangs during indexing if we
+ miss a .notify/All somewhere (Mike McCandless)
+
+* LUCENE-6386: Correct IndexWriter.forceMerge documentation to state
+ that up to 3X (X = current index size) spare disk space may be needed
+ to complete forceMerge(1). (Robert Muir, Shai Erera, Mike McCandless)
+
+* LUCENE-6395: Seeking by term ordinal was failing to set the term's
+ bytes in MemoryIndex (Mike McCandless)
+
+* LUCENE-6429: Removed the TermQuery(Term,int) constructor which could lead to
+ inconsistent term statistics. (Adrien Grand, Robert Muir)
+
+Optimizations
+
+* LUCENE-6183, LUCENE-5647: Avoid recompressing stored fields
+ and term vectors when merging segments without deletions.
+ Lucene50Codec's BEST_COMPRESSION mode uses a higher deflate
+ level for more compact storage. (Robert Muir)
+
+* LUCENE-6184: Make BooleanScorer only score windows that contain
+ matches. (Adrien Grand)
+
+* LUCENE-6161: Speed up resolving of deleted terms to docIDs by doing
+ a combined merge sort between deleted terms and segment terms
+ instead of a separate merge sort for each segment. In delete-heavy
+ use cases this can be a sizable speedup. (Mike McCandless)
+
+* LUCENE-6201: BooleanScorer can now deal with values of minShouldMatch that
+ are greater than one and is used when queries produce dense result sets.
+ (Adrien Grand)
+
+* LUCENE-6218: Don't decode frequencies or match all positions when scoring
+ is not needed. (Robert Muir)
+
+* LUCENE-6233 Speed up CheckIndex when the index has term vectors
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-6198: Added the TwoPhaseIterator API, exposed on scorers which
+ is for now only used on phrase queries and conjunctions in order to check
+ positions lazily if the phrase query is in a conjunction with other queries.
+ (Robert Muir, Adrien Grand, David Smiley)
+
+* LUCENE-6244, LUCENE-6251: All boolean queries but those that have a
+ minShouldMatch > 1 now either propagate or take advantage of the two-phase
+ iteration capabilities added in LUCENE-6198. (Adrien Grand, Robert Muir)
+
+* LUCENE-6241: FSDirectory.listAll() doesnt filter out subdirectories anymore,
+ for faster performance. Subdirectories don't matter to Lucene. If you need to
+ filter out non-index files with some custom usage, you may want to look at
+ the IndexFileNames class. (Robert Muir)
+
+* LUCENE-6262: ConstantScoreQuery does not wrap the inner weight anymore when
+ scores are not required. (Adrien Grand)
+
+* LUCENE-6263: MultiCollector automatically caches scores when several
+ collectors need them. (Adrien Grand)
+
+* LUCENE-6275: SloppyPhraseScorer now uses the same logic as ConjunctionScorer
+ in order to advance doc IDs, which takes advantage of the cost() API.
+ (Adrien Grand)
+
+* LUCENE-6290: QueryWrapperFilter propagates approximations and FilteredQuery
+ rewrites to a BooleanQuery when the filter is a QueryWrapperFilter in order
+ to leverage approximations. (Adrien Grand)
+
+* LUCENE-6318: Reduce RAM usage of FieldInfos when there are many fields.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-6320: Speed up CheckIndex. (Robert Muir)
+
+* LUCENE-4942: Optimized the encoding of PrefixTreeStrategy indexes for
+ non-point data: 33% smaller index, 68% faster indexing, and 44% faster
+ searching. YMMV (David Smiley)
+
+API Changes
+
+* LUCENE-6204, LUCENE-6208: Simplify CompoundFormat: remove files()
+ and remove files parameter to write(). (Robert Muir)
+
+* LUCENE-6217: Add IndexWriter.isOpen and getTragicException. (Simon
+ Willnauer, Mike McCandless)
+
+* LUCENE-6218, LUCENE-6220: Add Collector.needsScores() and needsScores
+ parameter to Query.createWeight(). (Robert Muir, Adrien Grand)
+
+* LUCENE-4524, LUCENE-6246, LUCENE-6256, LUCENE-6271: Merge DocsEnum and DocsAndPositionsEnum
+ into a single PostingsEnum iterator. TermsEnum.docs() and TermsEnum.docsAndPositions()
+ are replaced by TermsEnum.postings().
+ (Alan Woodward, Simon Willnauer, Robert Muir, Ryan Ernst)
+
+* LUCENE-6222: Removed TermFilter, use a QueryWrapperFilter(TermQuery)
+ instead. This will be as efficient now that queries can opt out from
+ scoring. (Adrien Grand)
+
+* LUCENE-6269: Removed BooleanFilter, use a QueryWrapperFilter(BooleanQuery)
+ instead. (Adrien Grand)
+
+* LUCENE-6270: Replaced TermsFilter with TermsQuery, use a
+ QueryWrapperFilter(TermsQuery) instead. (Adrien Grand)
+
+* LUCENE-6223: Move BooleanQuery.BooleanWeight to BooleanWeight.
+ (Robert Muir)
+
+* LUCENE-1518: Make Filter extend Query and return 0 as score.
+ (Uwe Schindler, Adrien Grand)
+
+* LUCENE-6245: Force Filter subclasses to implement toString API from Query.
+ (Ryan Ernst)
+
+* LUCENE-6268: Replace FieldValueFilter and DocValuesRangeFilter with equivalent
+ queries that support approximations. (Adrien Grand)
+
+* LUCENE-6289: Replace DocValuesRangeFilter with DocValuesRangeQuery which
+ supports approximations. (Adrien Grand)
+
+* LUCENE-6266: Remove unnecessary Directory params from SegmentInfo.toString,
+ SegmentInfos.files/toString, and SegmentCommitInfo.toString. (Robert Muir)
+
+* LUCENE-6272: Scorer extends DocSetIdIterator rather than DocsEnum (Alan
+ Woodward)
+
+* LUCENE-6281: Removed support for slow collations from lucene/sandbox. Better
+ performance would be achieved through CollationKeyAnalyzer or
+ ICUCollationKeyAnalyzer. (Adrien Grand)
+
+* LUCENE-6286: Removed IndexSearcher methods that take a Filter object.
+ A BooleanQuery with a filter clause must be used instead. (Adrien Grand)
+
+* LUCENE-6300: PrefixFilter, TermRangeFilter and NumericRangeFilter have been
+ removed. Use PrefixQuery, TermRangeQuery and NumericRangeQuery instead.
+ (Adrien Grand)
+
+* LUCENE-6303: Replaced FilterCache with QueryCache and CachingWrapperFilter
+ with CachingWrapperQuery. (Adrien Grand)
+
+* LUCENE-6317: Deprecate DataOutput.writeStringSet and writeStringStringMap.
+ Use writeSetOfStrings/Maps instead. (Mike McCandless, Robert Muir)
+
+* LUCENE-6307: Rename SegmentInfo.getDocCount -> .maxDoc,
+ SegmentInfos.totalDocCount -> .totalMaxDoc, MergeInfo.totalDocCount
+ -> .totalMaxDoc and MergePolicy.OneMerge.totalDocCount ->
+ .totalMaxDoc (Adrien Grand, Robert Muir, Mike McCandless)
+
+* LUCENE-6367: PrefixQuery now subclasses AutomatonQuery, removing the
+ specialized PrefixTermsEnum. (Robert Muir, Mike McCandless)
+
+Other
+
+* LUCENE-6248: Remove unused odd constants from StandardSyntaxParser.jj
+ (Dawid Weiss)
+
+* LUCENE-6193: Collapse identical catch branches in try-catch statements.
+ (shalin)
+
+* LUCENE-6239: Removed RAMUsageEstimator's sun.misc.Unsafe calls.
+ (Robert Muir, Dawid Weiss, Uwe Schindler)
+
+* LUCENE-6292: Seed StringHelper better. (Robert Muir)
+
+* LUCENE-6333: Refactored queries to delegate their equals and hashcode
+ impls to the super class. (Lee Hinman via Adrien Grand)
+
+* LUCENE-6343: DefaultSimilarity javadocs had the wrong float value to
+ demonstrate precision of encoded norms (András Péteri via Mike McCandless)
+
+Changes in Runtime Behavior
+
+* LUCENE-6255: PhraseQuery now ignores leading holes and requires that
+ positions are positive and added in order. (Adrien Grand)
+
+* LUCENE-6298: SimpleQueryParser returns an empty query rather than
+ null, if e.g. the terms were all stopwords. (Lee Hinman via Robert Muir)
+
+======================= Lucene 5.0.0 =======================
+
+New Features
+
+* LUCENE-5945: All file handling converted to NIO.2 apis. (Robert Muir)
+
+* LUCENE-5946: SimpleFSDirectory now uses Files.newByteChannel, for
+ portability with custom FileSystemProviders. If you want the old
+ non-interruptible behavior of RandomAccessFile, use RAFDirectory
+ in the misc/ module. (Uwe Schindler, Robert Muir)
+
+* SOLR-3359: Added analyzer attribute/property to SynonymFilterFactory.
+ (Ryo Onodera via Koji Sekiguchi)
+
+* LUCENE-5648: Index and search date ranges, particularly multi-valued ones. It's
+ implemented in the spatial module as DateRangePrefixTree used with
+ NumberRangePrefixTreeStrategy. (David Smiley)
+
+* LUCENE-5895: Lucene now stores a unique id per-segment and per-commit to aid
+ in accurate replication of index files (Robert Muir, Mike McCandless)
+
+* LUCENE-5889: Add commit method to AnalyzingInfixSuggester, and allow just using .add
+ to build up the suggester. (Varun Thacker via Mike McCandless)
+
+* LUCENE-5123: Add a "pull" option to the postings writing API, so
+ that a PostingsFormat now receives a Fields instance and it is
+ responsible for iterating through all fields, terms, documents and
+ positions. (Robert Muir, Mike McCandless)
+
+* LUCENE-5268: Full cutover of all postings formats to the "pull"
+ FieldsConsumer API, removing PushFieldsConsumer. Added new
+ PushPostingsWriterBase for single-pass push of docs/positions to the
+ postings format. (Mike McCandless)
+
+* LUCENE-5906: Use Files.delete everywhere instead of File.delete, so that
+ when things go wrong, you get a real exception message why.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-5933: Added FilterSpans for easier wrapping of Spans instance. (Shai Erera)
+
+* LUCENE-5925: Remove fallback logic from opening commits, instead use
+ Directory.renameFile so that in-progress commits are never visible.
+ (Robert Muir)
+
+* LUCENE-5820: SuggestStopFilter should have a factory.
+ (Varun Thacker via Steve Rowe)
+
+* LUCENE-5949: Add Accountable.getChildResources(). (Robert Muir)
+
+* SOLR-5986: Added ExitableDirectoryReader that extends FilterDirectoryReader and enables
+ exiting requests that take too long to enumerate over terms. (Anshum Gupta, Steve Rowe,
+ Robert Muir)
+
+* LUCENE-5911: Add MemoryIndex.freeze() to allow thread-safe searching over a
+ MemoryIndex. (Alan Woodward, David Smiley, Robert Muir)
+
+* LUCENE-5969: Lucene 5.0 has a new index format with mismatched file detection,
+ improved exception handling, and indirect norms encoding for sparse fields.
+ (Mike McCandless, Ryan Ernst, Robert Muir)
+
+* LUCENE-6053: Add Serbian analyzer. (Nikola Smolenski via Robert Muir, Mike McCandless)
+
+* LUCENE-4400: Add support for new NYSIIS Apache commons phonetic
+ codec (Thomas Neidhart via Mike McCandless)
+
+* LUCENE-6059: Add Daitch-Mokotoff Soundex phonetic Apache commons
+ phonetic codec, and upgrade to Apache commons codec 1.10. (Thomas
+ Neidhart via Mike McCandless)
+
+* LUCENE-6058: With the upgrade to Apache commons codec 1.10, the
+ experimental BeiderMorseFilter has changed its behavior, so any
+ index using it will need to be rebuilt. (Thomas
+ Neidhart via Mike McCandless)
+
+* LUCENE-6050: Accept MUST and MUST_NOT (in addition to SHOULD) for
+ each context passed to Analyzing/BlendedInfixSuggester (Arcadius
+ Ahouansou, jane chang via Mike McCandless)
+
+* LUCENE-5929: Also extract terms to highlight from block join
+ queries. (Julie Tibshirani via Mike McCandless)
+
+* LUCENE-6063: Allow overriding whether/how ConcurrentMergeScheduler
+ stalls incoming threads when merges are falling behind (Mike
+ McCandless)
+
+* LUCENE-5833: DocumentDictionary now enumerates each value separately
+ in a multi-valued field (not just the first value), so you can build
+ suggesters from multi-valued fields. (Varun Thacker via Mike
+ McCandless)
+
+* LUCENE-6077: Added a filter cache. (Adrien Grand, Robert Muir)
+
+* LUCENE-6088: TermsFilter implements Accountable. (Adrien Grand)
+
+* LUCENE-6034: The default highlighter when used with QueryScorer will highlight payload-sensitive
+ queries provided that term vectors with positions, offsets, and payloads are present. This is the
+ only highlighter that can highlight such queries accurately. (David Smiley)
+
+* LUCENE-5914: Add an option to Lucene50Codec to support either BEST_SPEED
+ or BEST_COMPRESSION for stored fields. (Adrien Grand, Robert Muir)
+
+* LUCENE-6119: Add auto-IO-throttling to ConcurrentMergeScheduler, to
+ rate limit IO writes for each merge depending on incoming merge
+ rate. (Mike McCandless)
+
+* LUCENE-6155: Add payload support to MemoryIndex. The default highlighter's
+ QueryScorer and WeighedSpanTermExtractor now have setUsePayloads(bool).
+ (David Smiley)
+
+* LUCENE-6166: Deletions (alone) can now trigger new merges. (Mike McCandless)
+
+* LUCENE-6177: Add CustomAnalyzer that allows to configure analyzers
+ like you do in Solr's index schema. This class has a builder API to configure
+ Tokenizers, TokenFilters, and CharFilters based on their SPI names
+ and parameters as documented by the corresponding factories.
+ (Uwe Schindler)
+
+Optimizations
+
+* LUCENE-5960: Use a more efficient bitset, not a Set<Integer>, to
+ track visited states. (Markus Heiden via Mike McCandless)
+
+* LUCENE-5959: Don't allocate excess memory when building automaton in
+ finish. (Markus Heiden via Mike McCandless)
+
+* LUCENE-5963: Reduce memory allocations in
+ AnalyzingSuggester. (Markus Heiden via Mike McCandless)
+
+* LUCENE-5938: MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE is now faster on
+ queries that match few documents by using a sparse bit set implementation.
+ (Adrien Grand)
+
+* LUCENE-5969: Refactor merging to be more efficient, checksum calculation is
+ per-segment/per-producer, and norms and doc values merging no longer cause
+ RAM spikes for latent fields. (Mike McCandless, Robert Muir)
+
+* LUCENE-5983: CachingWrapperFilter now uses a new DocIdSet implementation
+ called RoaringDocIdSet instead of WAH8DocIdSet. (Adrien Grand)
+
+* LUCENE-6022: DocValuesDocIdSet checks live docs before doc values.
+ (Adrien Grand)
+
+* LUCENE-6030: Add norms patched compression for a small number of common values
+ (Ryan Ernst)
+
+* LUCENE-6040: Speed up EliasFanoDocIdSet through broadword bit selection.
+ (Paul Elschot)
+
+* LUCENE-6033: CachingTokenFilter now uses ArrayList not LinkedList, and has new
+ isCached() method. (David Smiley)
+
+* LUCENE-6031: TokenSources (in the default highlighter) converts term vectors into a
+ TokenStream much faster in linear time (not N*log(N) using less memory, and with reset()
+ implemented. Only one of offsets or positions are required of the term vector.
+ (David Smiley)
+
+* LUCENE-6089, LUCENE-6090: Tune CompressionMode.HIGH_COMPRESSION for
+ better compression and less cpu usage. (Adrien Grand, Robert Muir)
+
+* LUCENE-6034: QueryScorer, used by the default highlighter, needn't re-index the provided
+ TokenStream with MemoryIndex when it comes from TokenSources (term vectors) with offsets and
+ positions. (David Smiley)
+
+* LUCENE-5951: ConcurrentMergeScheduler detects whether the index is on SSD or not
+ and does a better job defaulting its settings. This only works on Linux for now;
+ other OS's will continue to use the previous defaults (tuned for spinning disks).
+ (Robert Muir, Uwe Schindler, hossman, Mike McCandless)
+
+* LUCENE-6131: Optimize SortingMergePolicy. (Robert Muir)
+
+* LUCENE-6133: Improve default StoredFieldsWriter.merge() to be more efficient.
+ (Robert Muir)
+
+* LUCENE-6145: Make EarlyTerminatingSortingCollector able to early-terminate
+ when the sort order is a prefix of the index-time order. (Adrien Grand)
+
+* LUCENE-6178: Score boolean queries containing MUST_NOT clauses with BooleanScorer2,
+ to use skip list data and avoid unnecessary scoring. (Adrien Grand, Robert Muir)
+
+API Changes
+
+* LUCENE-5900: Deprecated more constructors taking Version in *InfixSuggester and
+ ICUCollationKeyAnalyzer, and removed TEST_VERSION_CURRENT from the test framework.
+ (Ryan Ernst)
+
+* LUCENE-4535: oal.util.FilterIterator is now an internal API.
+ (Adrien Grand)
+
+* LUCENE-4924: DocIdSetIterator.docID() must now return -1 when the iterator is
+ not positioned. This change affects all classes that inherit from
+ DocIdSetIterator, including DocsEnum and DocsAndPositionsEnum. (Adrien Grand)
+
+* LUCENE-5127: Reduce RAM usage of FixedGapTermsIndex. Remove
+ IndexWriterConfig.setTermIndexInterval, IndexWriterConfig.setReaderTermsIndexDivisor,
+ and termsIndexDivisor from StandardDirectoryReader. These options have been no-ops
+ with the default codec since Lucene 4.0. If you want to configure the interval for
+ this term index, pass it directly in your codec, where it can also be configured
+ per-field. (Robert Muir)
+
+* LUCENE-5388: Remove Reader from Tokenizer's constructor and from
+ Analyzer's createComponents. TokenStreams now always get their input
+ via setReader.
+ (Benson Margulies via Robert Muir - pull request #16)
+
+* LUCENE-5527: The Collector API has been refactored to use a dedicated Collector
+ per leaf. (Shikhar Bhushan, Adrien Grand)
+
+* LUCENE-5702: The FieldComparator API has been refactor to a per-leaf API, just
+ like Collectors. (Adrien Grand)
+
+* LUCENE-4246: IndexWriter.close now always closes, even if it throws
+ an exception. The new IndexWriterConfig.setCommitOnClose (default
+ true) determines whether close() should commit before closing.
+
+* LUCENE-5608, LUCENE-5565: Refactor SpatialPrefixTree/Cell API. Doesn't use Strings
+ as tokens anymore, and now iterates cells on-demand during indexing instead of
+ building a collection. RPT now has more setters. (David Smiley)
+
+* LUCENE-5666: Change uninverted access (sorting, faceting, grouping, etc)
+ to use the DocValues API instead of FieldCache. For FieldCache functionality,
+ use UninvertingReader in lucene/misc (or implement your own FilterReader).
+ UninvertingReader is more efficient: supports multi-valued numeric fields,
+ detects when a multi-valued field is single-valued, reuses caches
+ of compatible types (e.g. SORTED also supports BINARY and SORTED_SET access
+ without insanity). "Insanity" is no longer possible unless you explicitly want it.
+ Rename FieldCache* and DocTermOrds* classes in the search package to DocValues*.
+ Move SortedSetSortField to core and add SortedSetFieldSource to queries/, which
+ takes the same selectors. Add helper methods to DocValues.java that are better
+ suited for search code (never return null, etc). (Mike McCandless, Robert Muir)
+
+* LUCENE-5871: Remove Version from IndexWriterConfig. Use
+ IndexWriterConfig.setCommitOnClose to change the behavior of IndexWriter.close().
+ The default has been changed to match that of 4.x.
+ (Ryan Ernst, Mike McCandless)
+
+* LUCENE-5965: CorruptIndexException requires a String or DataInput resource.
+ (Robert Muir)
+
+* LUCENE-5972: IndexFormatTooOldException and IndexFormatTooNewException now
+ extend from IOException.
+ (Ryan Ernst, Robert Muir)
+
+* LUCENE-5569: *AtomicReader/AtomicReaderContext have been renamed to *LeafReader/LeafReaderContext.
+ (Ryan Ernst)
+
+* LUCENE-5938: Removed MultiTermQuery.ConstantScoreAutoRewrite as
+ MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE is usually better. (Adrien Grand)
+
+* LUCENE-5924: Rename CheckIndex -fix option to -exorcise. This option does not
+ actually fix the index, it just drops data. (Robert Muir)
+
+* LUCENE-5969: Add Codec.compoundFormat, which handles the encoding of compound
+ files. Add getMergeInstance() to codec producer APIs, which can be overridden
+ to return an instance optimized for merging instead of searching. Add
+ Terms.getStats() which can return additional codec-specific statistics about a field.
+ Change instance method SegmentInfos.read() to two static methods: SegmentInfos.readCommit()
+ and SegmentInfos.readLatestCommit().
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-5992: Remove FieldInfos from SegmentInfosWriter.write API. (Robert Muir, Mike McCandless)
+
+* LUCENE-5998: Simplify Field/SegmentInfoFormat to read+write methods.
+ (Robert Muir)
+
+* LUCENE-6000: Removed StandardTokenizerInterface. Tokenizers now use
+ their jflex impl directly.
+ (Ryan Ernst)
+
+* LUCENE-6006: Removed FieldInfo.normType since it's redundant: it
+ will be DocValuesType.NUMERIC if the field indexed and does not omit
+ norms, else null. (Robert Muir, Mike McCandless)
+
+* LUCENE-6013: Removed indexed boolean from IndexableFieldType and
+ FieldInfo, since it's redundant with IndexOptions != null. (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-6021: FixedBitSet.nextSetBit now returns DocIdSetIterator.NO_MORE_DOCS
+ instead of -1 when there are no more bits which are set. (Adrien Grand)
+
+* LUCENE-5953: Directory and LockFactory APIs were restructured: Locking is
+ now under the responsibility of the Directory implementation. LockFactory is
+ only used by subclasses of BaseDirectory to delegate locking to an impl
+ class. LockFactories are now singletons and are responsible to create a Lock
+ instance based on a Directory implementation passed to the factory method.
+ See MIGRATE.txt for more details. (Uwe Schindler, Robert Muir)
+
+* LUCENE-6062: Throw exception instead of silently doing nothing if you try to
+ sort/group/etc on a misconfigured field (e.g. no docvalues, no UninvertingReader, etc).
+ (Robert Muir)
+
+* LUCENE-6068: LeafReader.fields() never returns null. (Robert Muir)
+
+* LUCENE-6082: Remove abort() from codec apis. (Robert Muir)
+
+* LUCENE-6084: IndexOutput's constructor now requires a String
+ resourceDescription so its toString is sane (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6087: Allow passing custom DirectoryReader to SearcherManager
+ (Mike McCandless)
+
+* LUCENE-6085: Undeprecate SegmentInfo attributes, but add safety so they
+ won't be trappy if codec tries to use them during docvalues updates.
+ (Robert Muir)
+
+* LUCENE-6097: Remove dangerous / overly expert
+ IndexWriter.abortMerges and waitForMerges methods. (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-6099: Add FilterDirectory.unwrap and
+ FilterDirectoryReader.unwrap (Simon Willnauer, Mike McCandless)
+
+* LUCENE-6121: CachingTokenFilter.reset() now propagates to its input if called before
+ incrementToken(). You must call reset() now on this filter instead of doing it a-priori on the
+ input(), which previously didn't work. (David Smiley, Robert Muir)
+
+* LUCENE-6147: Make the core Accountables.namedAccountable function public
+ (Ryan Ernst)
+
+* LUCENE-6150: Remove staleFiles set and onIndexOutputClosed() from FSDirectory.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-6146: Replaced Directory.copy() with Directory.copyFrom().
+ (Robert Muir)
+
+* LUCENE-6149: Infix suggesters' highlighting and allTermsRequired can
+ be set at the constructor for non-contextual lookup.
+ (Boon Low, Tomás Fernández Löbbe)
+
+* LUCENE-6158, LUCENE-6165: IndexWriter.addIndexes(IndexReader...) changed to
+ addIndexes(CodecReader...) (Robert Muir)
+
+* LUCENE-6179: Out-of-order scoring is not allowed anymore, so
+ Weight.scoresDocsOutOfOrder and LeafCollector.acceptsDocsOutOfOrder have been
+ removed and boolean queries now always score in order.
+
+* LUCENE-6212: IndexWriter no longer accepts per-document Analyzer to
+ add/updateDocument. These methods were trappy as they made it
+ easy to accidentally index tokens that were not easily
+ searchable. (Mike McCandless)
+
+Bug Fixes
+
+* LUCENE-5650: Enforce read-only access to any path outside the temporary
+ folder via security manager, and make test temp dirs absolute.
+ (Ryan Ernst, Dawid Weiss)
+
+* LUCENE-5948: RateLimiter now fully inits itself on init. (Varun
+ Thacker via Mike McCandless)
+
+* LUCENE-5981: CheckIndex obtains write.lock, since with some parameters it
+ may modify the index, and to prevent false corruption reports, as it does
+ not have the regular "spinlock" of DirectoryReader.open. It now implements
+ Closeable and you must close it to release the lock. (Mike McCandless, Robert Muir)
+
+* LUCENE-6004: Don't highlight the LookupResult.key returned from
+ AnalyzingInfixSuggester (Christian Reuschling, jane chang via Mike McCandless)
+
+* LUCENE-5980: Don't let document length overflow. (Robert Muir)
+
+* LUCENE-5961: Fix the exists() method for FunctionValues returned by many ValueSources to
+ behave properly when wrapping other ValueSources which do not exist for the specified document
+ (hossman)
+
+* LUCENE-6039: Add IndexOptions.NONE and DocValuesType.NONE instead of
+ using null to mean not index and no doc values, renamed
+ IndexOptions.DOCS_ONLY to DOCS, and pulled IndexOptions and
+ DocValues out of FieldInfo into their own classes in
+ org.apache.lucene.index (Simon Willnauer, Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6041: Remove sugar methods FieldInfo.isIndexed and
+ FieldInfo.hasDocValues. (Robert Muir, Mike McCandless)
+
+* LUCENE-6044: Fix backcompat support for token filters with enablePositionIncrements=false.
+ Also fixed backcompat for TrimFilter with updateOffsets=true. These options
+ are supported with a match version before 4.4, and no longer valid at all with 5.0.
+ (Ryan Ernst)
+
+* LUCENE-6042: CustomScoreQuery explain was incorrect in some cases,
+ such as when nested inside a boolean query. (Denis Lantsman via Robert Muir)
+
+* LUCENE-6046: Add maxDeterminizedStates safety to determinize (which has
+ an exponential worst case) so that if it would create too many states, it
+ now throws an exception instead of exhausting CPU/RAM. (Nik
+ Everett via Mike McCandless)
+
+* LUCENE-6054: Allow repeating the empty automaton (Nik Everett via
+ Mike McCandless)
+
+* LUCENE-6049: Don't throw cryptic exception writing a segment when
+ the only docs in it had fields that hit non-aborting exceptions
+ during indexing but also had doc values. (Mike McCandless)
+
+* LUCENE-6055: PayloadAttribute.clone() now does a deep clone of the underlying
+ bytes. (Shai Erera)
+
+* LUCENE-6060: Remove dangerous IndexWriter.unlock method (Simon
+ Willnauer, Mike McCandless)
+
+* LUCENE-6062: Pass correct fieldinfos to docvalues producer when the
+ segment has updates. (Mike McCandless, Shai Erera, Robert Muir)
+
+* LUCENE-6075: Don't overflow int in SimpleRateLimiter (Boaz Leskes
+ via Mike McCandless)
+
+* LUCENE-5987: IndexWriter will now forcefully close itself on
+ aborting exception (an exception that would otherwise cause silent
+ data loss). (Robert Muir, Mike McCandless)
+
+* LUCENE-6094: Allow IW.rollback to stop ConcurrentMergeScheduler even
+ when it's stalling because there are too many merges. (Mike McCandless)
+
+* LUCENE-6105: Don't cache FST root arcs if the number of root arcs is
+ small, or if the cache would be > 20% of the size of the FST.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-6124: Fix double-close() problems in codec and store APIs.
+ (Robert Muir)
+
+* LUCENE-6152: Fix double close problems in OutputStreamIndexOutput.
+ (Uwe Schindler)
+
+* LUCENE-6139: Highlighter: TokenGroup start & end offset getters should have
+ been returning the offsets of just the matching tokens in the group when
+ there's a distinction. (David Smiley)
+
+* LUCENE-6173: NumericTermAttribute and spatial/CellTokenStream do not clone
+ their BytesRef(Builder)s. Also equals/hashCode was missing. (Uwe Schindler)
+
+* LUCENE-6205: Fixed intermittent concurrency issue that could cause
+ FileNotFoundException when writing doc values updates at the same
+ time that a merge kicks off. (Mike McCandless)
+
+* LUCENE-6192: Fix int overflow corruption case in skip data for
+ high frequency terms in extremely large indices (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6093: Don't throw NullPointerException from
+ BlendedInfixSuggester for lookups that do not end in a prefix
+ token. (jane chang via Mike McCandless)
+
+* LUCENE-6214: Fixed IndexWriter deadlock when one thread is
+ committing while another opens a near-real-time reader and an
+ unrecoverable (tragic) exception is hit. (Simon Willnauer, Mike
+ McCandless)
+
+Documentation
+
+* LUCENE-5392: Add/improve analysis package documentation to reflect
+ analysis API changes. (Benson Margulies via Robert Muir - pull request #17)
+
+* LUCENE-6057: Improve Sort(SortField) docs (Martin Braun via Mike McCandless)
+
+* LUCENE-6112: Fix compile error in FST package example code
+ (Tomoko Uchida via Koji Sekiguchi)
+
+Tests
+
+* LUCENE-5957: Add option for tests to not randomize codec
+ (Ryan Ernst)
+
+* LUCENE-5974: Add check that backcompat indexes use default codecs
+ (Ryan Ernst)
+
+* LUCENE-5971: Create addBackcompatIndexes.py script to build and add
+ backcompat test indexes for a given lucene version. Also renamed backcompat
+ index files to use Version.toString() in filename.
+ (Ryan Ernst)
+
+* LUCENE-6002: Monster tests no longer fail. Most of them now have an 80 hour
+ timeout, effectively removing the timeout. The tests that operate near the 2
+ billion limit now use IndexWriter.MAX_DOCS instead of Integer.MAX_VALUE.
+ Some of the slow Monster tests now explicitly choose the default codec.
+ (Mike McCandless, Shawn Heisey)
+
+* LUCENE-5968: Improve error message when 'ant beast' is run on top-level
+ modules. (Ramkumar Aiyengar, Uwe Schindler)
+
+* LUCENE-6120: Fix MockDirectoryWrapper's close() handling.
+ (Mike McCandless, Robert Muir)
+
+Build
+
+* LUCENE-5909: Smoke tester now has better command line parsing and
+ optionally also runs on Java 8. (Ryan Ernst, Uwe Schindler)
+
+* LUCENE-5902: Add bumpVersion.py script to manage version increase after release branch is cut.
+
+* LUCENE-5962: Rename diffSources.py to createPatch.py and make it work with all text file types.
+ (Ryan Ernst)
+
+* LUCENE-5995: Upgrade ICU to 54.1 (Robert Muir)
+
+* LUCENE-6070: Upgrade forbidden-apis to 1.7 (Uwe Schindler)
+
+Other
+
+* LUCENE-5563: Removed sep layout: which has fallen behind on features and doesn't
+ perform as well as other options. (Robert Muir)
+
+* LUCENE-4086: Removed support for Lucene 3.x indexes. See migration guide for
+ more information. (Robert Muir)
+
+* LUCENE-5858: Moved Lucene 4 compatibility codecs to 'lucene-backward-codecs.jar'.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-5915: Remove Pulsing postings format. (Robert Muir)
+
+* LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs.
+ (Ryan Ernst)
+
+======================= Lucene 4.10.4 ======================
+
+Bug fixes
+
+* LUCENE-6019, LUCENE-6117: Remove -Dtests.assert to make IndexWriter
+ infoStream sane. (Robert Muir, Mike McCandless)
+
+* LUCENE-6161: Resolving deletes was failing to reuse DocsEnum likely
+ causing substantial performance cost for use cases that frequently
+ delete old documents (Mike McCandless)
+
+* LUCENE-6192: Fix int overflow corruption case in skip data for
+ high frequency terms in extremely large indices (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6207: Fixed consumption of several terms enums on the same
+ sorted (set) doc values instance at the same time.
+ (Tom Shally, Robert Muir, Adrien Grand)
+
+* LUCENE-6093: Don't throw NullPointerException from
+ BlendedInfixSuggester for lookups that do not end in a prefix
+ token. (jane chang via Mike McCandless)
+
+* LUCENE-6279: Don't let an abusive leftover _N_upgraded.si in the
+ index directory cause index corruption on upgrade (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-6287: Fix concurrency bug in IndexWriter that could cause
+ index corruption (missing _N.si files) the first time 4.x kisses a
+ 3.x index if merges are also running. (Simon Willnauer, Mike
+ McCandless)
+
+* LUCENE-6205: Fixed intermittent concurrency issue that could cause
+ FileNotFoundException when writing doc values updates at the same
+ time that a merge kicks off. (Mike McCandless)
+
+* LUCENE-6214: Fixed IndexWriter deadlock when one thread is
+ committing while another opens a near-real-time reader and an
+ unrecoverable (tragic) exception is hit. (Simon Willnauer, Mike
+ McCandless)
+
+* LUCENE-6105: Don't cache FST root arcs if the number of root arcs is
+ small, or if the cache would be > 20% of the size of the FST.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-6001: DrillSideways hits NullPointerException for certain
+ BooleanQuery searches. (Dragan Jotannovic, jane chang via Mike
+ McCandless)
+
+* LUCENE-6306: Merging of doc values and norms now checks whether the
+ merge was aborted so IndexWriter.rollback can more promptly abort a
+ running merge. (Robert Muir, Mike McCandless)
+
+API Changes
+
+* LUCENE-6212: Deprecate IndexWriter APIs that accept per-document Analyzer.
+ These methods were trappy as they made it easy to accidentally index
+ tokens that were not easily searchable and will be removed in 5.0.0.
+ (Mike McCandless)
+
+======================= Lucene 4.10.3 ======================
+
+Bug fixes
+
+* LUCENE-6046: Add maxDeterminizedStates safety to determinize (which has
+ an exponential worst case) so that if it would create too many states, it
+ now throws an exception instead of exhausting CPU/RAM. (Nik
+ Everett via Mike McCandless)
+
+* LUCENE-6054: Allow repeating the empty automaton (Nik Everett via
+ Mike McCandless)
+
+* LUCENE-6049: Don't throw cryptic exception writing a segment when
+ the only docs in it had fields that hit non-aborting exceptions
+ during indexing but also had doc values. (Mike McCandless)
+
+* LUCENE-6060: Deprecate IndexWriter.unlock (Simon Willnauer, Mike
+ McCandless)
+
+* LUCENE-3229: Overlapping ordered SpanNearQuery spans should not match.
+ (Ludovic Boutros, Paul Elschot, Greg Dearing, ehatcher)
+
+* LUCENE-6004: Don't highlight the LookupResult.key returned from
+ AnalyzingInfixSuggester (Christian Reuschling, jane chang via Mike McCandless)
+
+* LUCENE-6075: Don't overflow int in SimpleRateLimiter (Boaz Leskes
+ via Mike McCandless)
+
+* LUCENE-5980: Don't let document length overflow. (Robert Muir)
+
+* LUCENE-6042: CustomScoreQuery explain was incorrect in some cases,
+ such as when nested inside a boolean query. (Denis Lantsman via Robert Muir)
+
+* LUCENE-5948: RateLimiter now fully inits itself on init. (Varun
+ Thacker via Mike McCandless)
+
+* LUCENE-6055: PayloadAttribute.clone() now does a deep clone of the underlying
+ bytes. (Shai Erera)
+
+* LUCENE-6094: Allow IW.rollback to stop ConcurrentMergeScheduler even
+ when it's stalling because there are too many merges. (Mike McCandless)
+
+Documentation
+
+* LUCENE-6057: Improve Sort(SortField) docs (Martin Braun via Mike McCandless)
+
+======================= Lucene 4.10.2 ======================
+
+Bug fixes
+
+* LUCENE-5977: Fix tokenstream safety checks in IndexWriter to properly
+ work across multi-valued fields. Previously some cases across multi-valued
+ fields would happily create a corrupt index. (Dawid Weiss, Robert Muir)
+
+* LUCENE-6019: Detect when DocValuesType illegally changes for the
+ same field name. Also added -Dtests.asserts=true|false so we can
+ run tests with and without assertions. (Simon Willnauer, Robert
+ Muir, Mike McCandless).
+
+======================= Lucene 4.10.1 ======================
+
+Bug fixes
+
+* LUCENE-5934: Fix backwards compatibility for 4.0 indexes.
+ (Ian Lea, Uwe Schindler, Robert Muir, Ryan Ernst)
+
+* LUCENE-5939: Regenerate old backcompat indexes to ensure they were built with
+ the exact release
+ (Ryan Ernst, Uwe Schindler)
+
+* LUCENE-5952: Improve error messages when version cannot be parsed;
+ don't check for too old or too new major version (it's too low level
+ to enforce here); use simple string tokenizer. (Ryan Ernst, Uwe Schindler,
+ Robert Muir, Mike McCandless)
+
+* LUCENE-5958: Don't let exceptions during checkpoint corrupt the index.
+ Refactor existing OOM handling too, so you don't need to handle OOM special
+ for every IndexWriter method: instead such disasters will cause IW to close itself
+ defensively. (Robert Muir, Mike McCandless)
+
+* LUCENE-5904: Fixed a corruption case that can happen when 1)
+ IndexWriter is uncleanly shut-down (OS crash, power loss, etc.), 2)
+ on startup, when a new IndexWriter is created, a virus checker is
+ holding some of the previously written but unused files open and
+ preventing deletion, 3) IndexWriter writes these files again during
+ the course of indexing, then the files can later be deleted, causing
+ corruption. This case was detected by adding evilness to
+ MockDirectoryWrapper to have it simulate a virus checker holding a
+ file open and preventing deletion (Robert Muir, Mike McCandless)
+
+* LUCENE-5916: Static scope test components should be consistent between
+ tests (and test iterations). Fix for FaultyIndexInput in particular.
+ (Dawid Weiss)
+
+* LUCENE-5975: Fix reading of 3.0-3.3 indexes, where bugs in these old
+ index formats would result in CorruptIndexException "did not read all
+ bytes from file" when reading the deleted docs file. (Patrick Mi, Robert MUir)
+
+Tests
+
+* LUCENE-5936: Add backcompat checks to verify what is tested matches known versions
+ (Ryan Ernst)
+
+======================= Lucene 4.10.0 ======================
+
+New Features
+
+* LUCENE-5778: Support hunspell morphological description fields/aliases.
+ (Robert Muir)
+
+* LUCENE-5801: Added (back) OrdinalMappingAtomicReader for merging search
+ indexes that contain category ordinals from separate taxonomy indexes.
+ (Nicola Buso via Shai Erera)
+
+* LUCENE-4175, LUCENE-5714, LUCENE-5779: Index and search rectangles with spatial
+ BBoxSpatialStrategy using most predicates. Sort documents by relative overlap
+ of query areas or just by indexed shape area. (Ryan McKinley, David Smiley)
+
+* LUCENE-5806: Extend expressions grammar to support array access in variables.
+ Added helper class VariableContext to parse complex variable into pieces.
+ (Ryan Ernst)
+
+* LUCENE-5826: Support proper hunspell case handling, LANG, KEEPCASE, NEEDAFFIX,
+ and ONLYINCOMPOUND flags. (Robert Muir)
+
+* LUCENE-5815: Add TermAutomatonQuery, a proximity query allowing you
+ to create an arbitrary automaton, using terms on the transitions,
+ expressing which sequence of sequential terms (including a special
+ "any" term) are allowed. This is a generalization of
+ MultiPhraseQuery and span queries, and enables "correct" (including
+ position) length search-time graph synonyms. (Mike McCandless)
+
+* LUCENE-5819: Add OrdsLucene41 block tree terms dict and postings
+ format, to include term ordinals in the index so the optional
+ TermsEnum.ord() and TermsEnum.seekExact(long ord) APIs work. (Mike
+ McCandless)
+
+* LUCENE-5835: TermValComparator can sort missing values last. (Adrien Grand)
+
+* LUCENE-5825: Benchmark module can use custom postings format, e.g.:
+ codec.postingsFormat=Memory (Varun Shenoy, David Smiley)
+
+* LUCENE-5842: When opening large files (where it's too expensive to compare
+ checksum against all the bytes), retrieve checksum to validate structure
+ of footer, this can detect some forms of corruption such as truncation.
+ (Robert Muir)
+
+* LUCENE-5739: Added DataInput.readZ(Int|Long) and DataOutput.writeZ(Int|Long)
+ to read and write small signed integers. (Adrien Grand)
+
+API Changes
+
+* LUCENE-5752: Simplified Automaton API to be immutable. (Mike McCandless)
+
+* LUCENE-5793: Add equals/hashCode to FieldType. (Shay Banon, Robert Muir)
+
+* LUCENE-5692: DisjointSpatialFilter is deprecated (used by RecursivePrefixTreeStrategy)
+ (David Smiley)
+
+* LUCENE-5771: SpatialOperation's predicate names are now aliased to OGC standard names.
+ Thus you can use: Disjoint, Equals, Intersects, Overlaps, Within, Contains, Covers,
+ CoveredBy. The area requirement on the predicates was removed, and Overlaps' definition
+ was fixed. (David Smiley)
+
+* LUCENE-5850: Made Version handling more robust and extensible. Deprecated
+ Constants.LUCENE_MAIN_VERSION, Constants.LUCENE_VERSION and current Version
+ constants of the form LUCENE_X_Y. Added version constants that include bugfix
+ number of form LUCENE_X_Y_Z. Changed Version.LUCENE_CURRENT to Version.LATEST.
+ CheckIndex now prints the Lucene version used to write each segment.
+ (Ryan Ernst, Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-5836: BytesRef has been splitted into BytesRef, whose intended usage is
+ to be just a reference to a section of a larger byte[] and BytesRefBuilder
+ which is a StringBuilder-like class for BytesRef instances. (Adrien Grand)
+
+* LUCENE-5883: You can now change the MergePolicy instance on a live IndexWriter,
+ without first closing and reopening the writer. This allows to e.g. run a special
+ merge with UpgradeIndexMergePolicy without reopening the writer. Also, MergePolicy
+ no longer implements Closeable; if you need to release your custom MergePolicy's
+ resources, you need to implement close() and call it explicitly. (Shai Erera)
+
+* LUCENE-5859: Deprecate Analyzer constructors taking Version. Use Analyzer.setVersion()
+ to set the version an analyzer to replicate behavior from a specific release.
+ (Ryan Ernst, Robert Muir)
+
+
+Optimizations
+
+* LUCENE-5780: Make OrdinalMap more memory-efficient, especially in case the
+ first segment has all values. (Adrien Grand, Robert Muir)
+
+* LUCENE-5782: OrdinalMap now sorts enums before being built in order to
+ improve compression. (Adrien Grand)
+
+* LUCENE-5798: Optimize MultiDocsEnum reuse. (Robert Muir)
+
+* LUCENE-5799: Optimize numeric docvalues merging. (Robert Muir)
+
+* LUCENE-5797: Optimize norms merging (Adrien Grand, Robert Muir)
+
+* LUCENE-5803: Add DelegatingAnalyzerWrapper, an optimized variant
+ of AnalyzerWrapper that doesn't allow to wrap components or readers.
+ This wrapper class is the base class of all analyzers that just delegate
+ to another analyzer, e.g. per field name: PerFieldAnalyzerWrapper and
+ Solr's schema support. (Shay Banon, Uwe Schindler, Robert Muir)
+
+* LUCENE-5795: MoreLikeThisQuery now only collects the top N terms instead
+ of collecting all terms from the like text when building the query.
+ (Alex Ksikes, Simon Willnauer)
+
+* LUCENE-5681: Fix RAMDirectory's IndexInput to not do double buffering
+ on slices (causes useless data copying, especially on random access slices).
+ This also improves slices of NRTCachingDirectory, because the cache
+ is based on RAMDirectory. BufferedIndexInput.wrap() was marked with a
+ warning in javadocs. It is almost always a better idea to implement
+ slicing on your own! (Uwe Schindler, Robert Muir)
+
+* LUCENE-5834: Empty sorted set and numeric doc values are now singletons.
+ (Adrien Grand)
+
+* LUCENE-5841: Improve performance of block tree terms dictionary when
+ assigning terms to blocks. (Mike McCandless)
+
+* LUCENE-5856: Optimize Fixed/Open/LongBitSet to remove unnecessary AND.
+ (Robert Muir)
+
+* LUCENE-5884: Optimize FST.ramBytesUsed. (Adrien Grand, Robert Muir,
+ Mike McCandless)
+
+* LUCENE-5882: Add Lucene410DocValuesFormat, with faster term lookups
+ for SORTED/SORTED_SET fields. (Robert Muir)
+
+* LUCENE-5887: Remove WeakIdentityMap caching in AttributeFactory,
+ AttributeSource, and VirtualMethod in favour of Java 7's ClassValue.
+ Always use MethodHandles to create AttributeImpl classes.
+ (Uwe Schindler)
+
+Bug Fixes
+
+* LUCENE-5796: Fixes the Scorer.getChildren() method for two combinations
+ of BooleanQuery. (Terry Smith via Robert Muir)
+
+* LUCENE-5790: Fix compareTo in MutableValueDouble and MutableValueBool, this caused
+ incorrect results when grouping on fields with missing values.
+ (æµ·è€æ¾¤ å¿—ä¿¡, hossman)
+
+* LUCENE-5817: Fix hunspell zero-affix handling: previously only zero-strips worked
+ correctly. (Robert Muir)
+
+* LUCENE-5818, LUCENE-5823: Fix hunspell overgeneration for short strings that also
+ match affixes, words are only stripped to a zero-length string if FULLSTRIP option
+ is specified in the dictionary. (Robert Muir)
+
+* LUCENE-5824: Fix hunspell 'long' flag handling. (Robert Muir)
+
+* LUCENE-5838: Fix hunspell when the .aff file has over 64k affixes. (Robert Muir)
+
+* LUCENE-5869: Added restriction to positive values for maxExpansions in
+ FuzzyQuery. (Ryan Ernst)
+
+* LUCENE-5672: IndexWriter.addIndexes() calls maybeMerge(), to ensure the index stays
+ healthy. If you don't want merging use NoMergePolicy instead. (Robert Muir)
+
+* LUCENE-5908: Fix Lucene43NGramTokenizer to be final
+
+Test Framework
+
+* LUCENE-5786: Unflushed/ truncated events file (hung testing subprocess).
+ (Dawid Weiss)
+
+* LUCENE-5881: Add "beasting" of tests: repeats the whole "test" Ant target
+ N times with "ant beast -Dbeast.iters=N". (Uwe Schindler, Robert Muir,
+ Ryan Ernst, Dawid Weiss)
+
+Build
+
+* LUCENE-5770: Upgrade to JFlex 1.6, which has direct support for
+ supplementary code points - as a result, ICU4J is no longer used
+ to generate surrogate pairs to augment JFlex scanner specifications.
+ (Steve Rowe)
+
+* SOLR-6358: Remove VcsDirectoryMappings from idea configuration
+ vcs.xml (Ramkumar Aiyengar via Steve Rowe)
+
+======================= Lucene 4.9.1 ======================
+
+Bug fixes
+
+* LUCENE-5907: Fix corruption case when opening a pre-4.x index with
+ IndexWriter, then opening an NRT reader from that writer, then
+ calling commit from the writer, then closing the NRT reader. This
+ case would remove the wrong files from the index leading to a
+ corrupt index. (Mike McCandless)
+
+* LUCENE-5919: Fix exception handling inside IndexWriter when
+ deleteFile throws an exception, to not over-decRef index files,
+ possibly deleting a file that's still in use in the index, leading
+ to corruption. (Mike McCandless)
+
+* LUCENE-5922: DocValuesDocIdSet on 5.x and FieldCacheDocIdSet on 4.x
+ are not cacheable. (Adrien Grand)
+
+* LUCENE-5843: Added IndexWriter.MAX_DOCS which is the maximum number
+ of documents allowed in a single index, and any operations that add
+ documents will now throw IllegalStateException if the max count
+ would be exceeded, instead of silently creating an unusable
+ index. (Mike McCandless)
+
+* LUCENE-5844: ArrayUtil.grow/oversize now returns a maximum of
+ Integer.MAX_VALUE - 8 for the maximum array size. (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-5827: Make all Directory implementations correctly fail with
+ IllegalArgumentException if slices are out of bounds. (Uwe Schindler)
+
+* LUCENE-5897, LUCENE-5400: JFlex-based tokenizers StandardTokenizer and
+ UAX29URLEmailTokenizer tokenize extremely slowly over long sequences of
+ text partially matching certain grammar rules. The scanner default
+ buffer size was reduced, and scanner buffer growth was disabled, resulting
+ in much, much faster tokenization for these text sequences.
+ (Chris Geeringh, Robert Muir, Steve Rowe)
+
+======================= Lucene 4.9.0 =======================
+
+Changes in Runtime Behavior
+
+* LUCENE-5611: Changing the term vector options for multiple field
+ instances by the same name in one document is not longer accepted;
+ IndexWriter will now throw IllegalArgumentException. (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-5646: Remove rare/undertested bulk merge algorithm in
+ CompressingStoredFieldsWriter. (Robert Muir, Adrien Grand)
+
+New Features
+
+* LUCENE-5610: Add Terms.getMin and Terms.getMax to get the lowest and
+ highest terms, and NumericUtils.get{Min/Max}{Int/Long} to get the
+ minimum numeric values from the provided Terms. (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-5675: Add IDVersionPostingsFormat, a postings format
+ optimized for primary-key (ID) fields that also record a version
+ (long) for each ID. (Robert Muir, Mike McCandless)
+
+* LUCENE-5680: Add ability to atomically update a set of DocValues
+ fields. (Shai Erera)
+
+* LUCENE-5717: Add support for multiterm queries nested inside
+ filtered and constant-score queries to postings highlighter.
+ (Luca Cavanna via Robert Muir)
+
+* LUCENE-5731, LUCENE-5760: Add RandomAccessInput, a random access API for directory.
+ Add DirectReader/Writer, optimized for reading packed integers directly
+ from Directory. Add Lucene49Codec and Lucene49DocValuesFormat that make
+ use of these. (Robert Muir)
+
+* LUCENE-5743: Add Lucene49NormsFormat, which can compress in some cases
+ such as very short fields. (Ryan Ernst, Adrien Grand, Robert Muir)
+
+* LUCENE-5748: Add SORTED_NUMERIC docvalues type, which is efficient
+ for processing numeric fields with multiple values. (Robert Muir)
+
+* LUCENE-5754: Allow "$" as part of variable and function names in
+ expressions module. (Uwe Schindler)
+
+Changes in Backwards Compatibility Policy
+
+* LUCENE-5634: Add reuse argument to IndexableField.tokenStream. This
+ can be used by custom fieldtypes, which don't use the Analyzer, but
+ implement their own TokenStream. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5640: AttributeSource.AttributeFactory was moved to a
+ top-level class: org.apache.lucene.util.AttributeFactory
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-4371: Removed IndexInputSlicer and Directory.createSlicer() and replaced
+ with IndexInput.slice(). (Robert Muir)
+
+* LUCENE-5727, LUCENE-5678: Remove IndexOutput.seek, IndexOutput.setLength().
+ (Robert Muir, Uwe Schindler)
+
+API Changes
+
+* LUCENE-5756: IndexWriter now implements Accountable and IW#ramSizeInBytes()
+ has been deprecated in favor of IW#ramBytesUsed() (Simon Willnauer)
+
+* LUCENE-5725: MoreLikeThis#like now accepts multiple values per field.
+ The pre-existing method has been deprecated in favor of a variable arguments
+ for the like text. (Alex Ksikes via Simon Willnauer)
+
+* LUCENE-5711: MergePolicy accepts an IndexWriter instance
+ on each method rather than holding state against a single
+ IndexWriter instance. (Simon Willnauer)
+
+* LUCENE-5582: Deprecate IndexOutput.length (just use
+ IndexOutput.getFilePointer instead) and IndexOutput.setLength.
+ (Mike McCandless)
+
+* LUCENE-5621: Deprecate IndexOutput.flush: this is not used by Lucene.
+ (Robert Muir)
+
+* LUCENE-5611: Simplified Lucene's default indexing chain / APIs.
+ AttributeSource/TokenStream.getAttribute now returns null if the
+ attribute is not present (previously it threw
+ IllegalArgumentException). StoredFieldsWriter.startDocument no
+ longer receives the number of fields that will be added (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-5632: In preparation for coming Lucene versions, the Version
+ enum constants were renamed to make them better readable. The constant
+ for Lucene 4.9 is now "LUCENE_4_9". Version.parseLeniently() is still
+ able to parse the old strings ("LUCENE_49"). The old identifiers got
+ deprecated and will be removed in Lucene 5.0. (Uwe Schindler,
+ Robert Muir)
+
+* LUCENE-5633: Change NoMergePolicy to a singleton with no distinction between
+ compound and non-compound types. (Shai Erera)
+
+* LUCENE-5640: The Token class was deprecated. Since Lucene 2.9, TokenStreams
+ are using Attributes, Token is no longer used. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5679: Consolidated IndexWriter.deleteDocuments(Term) and
+ IndexWriter.deleteDocuments(Query) with their varargs counterparts.
+ (Shai Erera)
+
+* LUCENE-5701: Core closed listeners are now available in the AtomicReader API,
+ they used to sit only in SegmentReader. (Adrien Grand, Robert Muir)
+
+* LUCENE-5706: Removed the option to unset a DocValues field through DocValues
+ updates. (Shai Erera)
+
+* LUCENE-5700: Added oal.util.Accountable that is now implemented by all
+ classes whose memory usage can be estimated. (Robert Muir, Adrien Grand)
+
+* LUCENE-5708: Remove IndexWriterConfig.clone, so now IndexWriter
+ simply uses the IndexWriterConfig you pass it, and you must create a
+ new IndexWriterConfig for each IndexWriter. (Mike McCandless)
+
+* LUCENE-5678: IndexOutput no longer allows seeking, so it is no longer required
+ to use RandomAccessFile to write Indexes. Lucene now uses standard FileOutputStream
+ wrapped with OutputStreamIndexOutput to write index data. BufferedIndexOutput was
+ removed, because buffering and checksumming is provided by FilterOutputStreams,
+ provided by the JDK. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-5703: BinaryDocValues API changed to work like TermsEnum and not allocate/
+ copy bytes on each access, you are responsible for cloning if you want to keep
+ data around. (Adrien Grand)
+
+* LUCENE-5695: DocIdSet implements Accountable. (Adrien Grand)
+
+* LUCENE-5757: Moved RamUsageEstimator's reflection-based processing to RamUsageTester
+ in the test-framework module. (Robert Muir)
+
+* LUCENE-5761: Removed DiskDocValuesFormat, it was very inefficient and saved very little
+ RAM over the default codec. (Robert Muir)
+
+* LUCENE-5775: Deprecate JaspellLookup. (Mike McCandless)
+
+Optimizations
+
+* LUCENE-5603: hunspell stemmer more efficiently strips prefixes
+ and suffixes. (Robert Muir)
+
+* LUCENE-5599: HttpReplicator did not properly delegate bulk read() to wrapped
+ InputStream. (Christoph Kaser via Shai Erera)
+
+* LUCENE-5591: pass an IOContext with estimated flush size when applying DV
+ updates. (Shai Erera)
+
+* LUCENE-5634: IndexWriter reuses TokenStream instances for String and Numeric
+ fields by default. (Uwe Schindler, Shay Banon, Mike McCandless, Robert Muir)
+
+* LUCENE-5638, LUCENE-5640: TokenStream uses a more performant AttributeFactory
+ by default, that packs the core attributes into one implementation
+ (PackedTokenAttributeImpl), for faster clearAttributes(), saveState(), and
+ restoreState(). In addition, AttributeFactory uses Java 7 MethodHandles for
+ instantiating Attribute implementations. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5609: Changed the default NumericField precisionStep from 4
+ to 8 (for int/float) and 16 (for long/double), for faster indexing
+ time and smaller indices. (Robert Muir, Uwe Schindler, Mike McCandless)
+
+* LUCENE-5670: Add skip/FinalOutput to FST Outputs. (Christian
+ Ziech via Mike McCandless).
+
+* LUCENE-4236: Optimize BooleanQuery's in-order scoring. This speeds up
+ some types of boolean queries. (Robert Muir)
+
+* LUCENE-5694: Don't score() subscorers in DisjunctionSumScorer or
+ DisjunctionMaxScorer unless score() is called. (Robert Muir)
+
+* LUCENE-5720: Optimize DirectPackedReader's decompression. (Robert Muir)
+
+* LUCENE-5722: Optimize ByteBufferIndexInput#seek() by specializing
+ implementations. This improves random access as used by docvalues codecs
+ if used with MMapDirectory. (Robert Muir, Uwe Schindler)
+
+* LUCENE-5730: FSDirectory.open returns MMapDirectory for 64-bit operating
+ systems, not just Linux and Windows. (Robert Muir)
+
+* LUCENE-5703: BinaryDocValues producers don't allocate or copy bytes on
+ each access anymore. (Adrien Grand)
+
+* LUCENE-5721: Monotonic compression doesn't use zig-zag encoding anymore.
+ (Robert Muir, Adrien Grand)
+
+* LUCENE-5750: Speed up monotonic addressing for BINARY and SORTED_SET
+ docvalues. (Robert Muir)
+
+* LUCENE-5751: Speed up MemoryDocValues. (Adrien Grand, Robert Muir)
+
+* LUCENE-5767: OrdinalMap optimizations, that mostly help on low cardinalities.
+ (Martijn van Groningen, Adrien Grand)
+
+* LUCENE-5769: SingletonSortedSetDocValues now supports random access ordinals.
+ (Robert Muir)
+
+Bug fixes
+
+* LUCENE-5738: Ensure NativeFSLock prevents opening the file channel for the
+ lock if the lock is already obtained by the JVM. Trying to obtain an already
+ obtained lock in the same JVM can unlock the file might allow other processes
+ to lock the file even without explicitly unlocking the FileLock. This behavior
+ is operating system dependent. (Simon Willnauer)
+
+* LUCENE-5673: MMapDirectory: Work around a "bug" in the JDK that throws
+ a confusing OutOfMemoryError wrapped inside IOException if the FileChannel
+ mapping failed because of lack of virtual address space. The IOException is
+ rethrown with more useful information about the problem, omitting the
+ incorrect OutOfMemoryError. (Robert Muir, Uwe Schindler)
+
+* LUCENE-5682: NPE in QueryRescorer when Scorer is null
+ (Joel Bernstein, Mike McCandless)
+
+* LUCENE-5691: DocTermOrds lookupTerm(BytesRef) would return incorrect results
+ if the underlying TermsEnum supports ord() and the insertion point would
+ be at the end. (Robert Muir)
+
+* LUCENE-5618, LUCENE-5636: SegmentReader referenced unneeded files following
+ doc-values updates. Now doc-values field updates are written in separate file
+ per field. (Shai Erera, Robert Muir)
+
+* LUCENE-5684: Make best effort to detect invalid usage of Lucene,
+ when IndexReader is reopened after all files in its index were
+ removed and recreated by the application (the proper way to do
+ this is IndexWriter.deleteAll, or opening an IndexWriter with
+ OpenMode.CREATE) (Mike McCandless)
+
+* LUCENE-5704: Fix compilation error with Java 8u20. (Uwe Schindler)
+
+* LUCENE-5710: Include the inner exception as the cause and in the
+ exception message when an immense term is hit during indexing (Lee
+ Hinman via Mike McCandless)
+
+* LUCENE-5724: CompoundFileWriter was failing to pass through the
+ IOContext in some cases, causing NRTCachingDirectory to cache
+ compound files when it shouldn't, then causing OOMEs. (Mike
+ McCandless)
+
+* LUCENE-5747: Project-specific settings for the eclipse development
+ environment will prevent automatic code reformatting. (Shawn Heisey)
+
+* LUCENE-5768, LUCENE-5777: Hunspell condition checks containing character classes
+ were buggy. (Clinton Gormley, Robert Muir)
+
+Test Framework
+
+* LUCENE-5622: Fail tests if they print over the given limit of bytes to
+ System.out or System.err. (Robert Muir, Dawid Weiss)
+
+* LUCENE-5619: Added backwards compatibility tests to ensure we can update existing
+ indexes with doc-values updates. (Shai Erera, Robert Muir)
+
+Build
+
+* LUCENE-5442: The Ant check-lib-versions target now runs Ivy resolution
+ transitively, then fails the build when it finds a version conflict: when a
+ transitive dependency's version is more recent than the direct dependency's
+ version specified in lucene/ivy-versions.properties. Exceptions are
+ specifiable in lucene/ivy-ignore-conflicts.properties.
+ (Steve Rowe)
+
+* LUCENE-5715: Upgrade direct dependencies known to be older than transitive
+ dependencies: com.sun.jersey.version:1.8->1.9; com.sun.xml.bind:jaxb-impl:2.2.2->2.2.3-1;
+ commons-beanutils:commons-beanutils:1.7.0->1.8.3; commons-digester:commons-digester:2.0->2.1;
+ commons-io:commons-io:2.1->2.3; commons-logging:commons-logging:1.1.1->1.1.3;
+ io.netty:netty:3.6.2.Final->3.7.0.Final; javax.activation:activation:1.1->1.1.1;
+ javax.mail:mail:1.4.1->1.4.3; log4j:log4j:1.2.16->1.2.17; org.apache.avro:avro:1.7.4->1.7.5;
+ org.tukaani:xz:1.2->1.4; org.xerial.snappy:snappy-java:1.0.4.1->1.0.5 (Steve Rowe)
+
+======================= Lucene 4.8.1 =======================
+
+Bug fixes
+
+* LUCENE-5639: Fix PositionLengthAttribute implementation in Token class.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-5635: IndexWriter didn't properly handle IOException on TokenStream.reset(),
+ which could leave the analyzer in an inconsistent state. (Robert Muir)
+
+* LUCENE-5599: HttpReplicator did not properly delegate bulk read() to wrapped
+ InputStream. (Christoph Kaser via Shai Erera)
+
+* LUCENE-5600: HttpClientBase did not properly consume a connection if a server
+ error occurred. (Christoph Kaser via Shai Erera)
+
+* LUCENE-5628: Change getFiniteStrings to iterative not recursive
+ implementation, so that building suggesters on a long suggestion
+ doesn't risk overflowing the stack; previously it consumed one Java
+ stack frame per character in the expanded suggestion. If you are building
+ a suggester this is a nasty trap. (Robert Muir, Simon Willnauer,
+ Mike McCandless).
+
+* LUCENE-5559: Add additional argument validation for CapitalizationFilter
+ and CodepointCountFilter. (Ahmet Arslan via Robert Muir)
+
+* LUCENE-5641: SimpleRateLimiter would silently rate limit at 8 MB/sec
+ even if you asked for higher rates. (Mike McCandless)
+
+* LUCENE-5644: IndexWriter clears which threads use which internal
+ thread states on flush, so that if an application reduces how many
+ threads it uses for indexing, that results in a reduction of how
+ many segments are flushed on a full-flush (e.g. to obtain a
+ near-real-time reader). (Simon Willnauer, Mike McCandless)
+
+* LUCENE-5653: JoinUtil with ScoreMode.Avg on a multi-valued field
+ with more than 256 values would throw exception.
+ (Mikhail Khludnev via Robert Muir)
+
+* LUCENE-5654: Fix various close() methods that could suppress
+ throwables such as OutOfMemoryError, instead returning scary messages
+ that look like index corruption. (Mike McCandless, Robert Muir)
+
+* LUCENE-5656: Fix rare fd leak in SegmentReader when multiple docvalues
+ fields have been updated with IndexWriter.updateXXXDocValue and one
+ hits exception. (Shai Erera, Robert Muir)
+
+* LUCENE-5660: AnalyzingSuggester.build will now throw IllegalArgumentException if
+ you give it a longer suggestion than it can handle (Robert Muir, Mike McCandless)
+
+* LUCENE-5662: Add missing checks to Field to prevent IndexWriter.abort
+ if a stored value is null. (Robert Muir)
+
+* LUCENE-5668: Fix off-by-one in TieredMergePolicy (Mike McCandless)
+
+* LUCENE-5671: Upgrade ICU version to fix an ICU concurrency problem that
+ could cause exceptions when indexing. (feedly team, Robert Muir)
+
+======================= Lucene 4.8.0 =======================
+
+System Requirements
+
+* LUCENE-4747, LUCENE-5514: Move to Java 7 as minimum Java version.
+ (Robert Muir, Uwe Schindler)
+
+Changes in Runtime Behavior
+
+* LUCENE-5472: IndexWriter.addDocument will now throw an IllegalArgumentException
+ if a Term to be indexed exceeds IndexWriter.MAX_TERM_LENGTH. To recreate previous
+ behavior of silently ignoring these terms, use LengthFilter in your Analyzer.
+ (hossman, Mike McCandless, Varun Thacker)
+
+New Features
+
+* LUCENE-5356: Morfologik filter can accept custom dictionary resources.
+ (Michal Hlavac, Dawid Weiss)
+
+* LUCENE-5454: Add SortedSetSortField to lucene/sandbox, to allow sorting
+ on multi-valued field. (Robert Muir)
+
+* LUCENE-5478: CommonTermsQuery now allows to create custom term queries
+ similar to the query parser by overriding a newTermQuery method.
+ (Simon Willnauer)
+
+* LUCENE-5477: AnalyzingInfixSuggester now supports near-real-time
+ additions and updates (to change weight or payload of an existing
+ suggestion). (Mike McCandless)
+
+* LUCENE-5482: Improve default TurkishAnalyzer by adding apostrophe
+ handling suitable for Turkish. (Ahmet Arslan via Robert Muir)
+
+* LUCENE-5479: FacetsConfig subclass can now customize the default
+ per-dim facets configuration. (Rob Audenaerde via Mike McCandless)
+
+* LUCENE-5485: Add circumfix support to HunspellStemFilter. (Robert Muir)
+
+* LUCENE-5224: Add iconv, oconv, and ignore support to HunspellStemFilter.
+ (Robert Muir)
+
+* LUCENE-5493: SortingMergePolicy, and EarlyTerminatingSortingCollector
+ support arbitrary Sort specifications.
+ (Robert Muir, Mike McCandless, Adrien Grand)
+
+* LUCENE-3758: Allow the ComplexPhraseQueryParser to search order or
+ un-order proximity queries. (Ahmet Arslan via Erick Erickson)
+
+* LUCENE-5530: ComplexPhraseQueryParser throws ParseException for fielded queries.
+ (Erick Erickson via Tomas Fernandez Lobbe and Ahmet Arslan)
+
+* LUCENE-5513: Add IndexWriter.updateBinaryDocValue which lets
+ you update the value of a BinaryDocValuesField without reindexing the
+ document(s). (Shai Erera)
+
+* LUCENE-4072: Add ICUNormalizer2CharFilter, which lets you do unicode normalization
+ with offset correction before the tokenizer. (David Goldfarb, Ippei UKAI via Robert Muir)
+
+* LUCENE-5476: Add RandomSamplingFacetsCollector for computing facets on a sampled
+ set of matching hits, in cases where there are millions of hits.
+ (Rob Audenaerde, Gilad Barkai, Shai Erera)
+
+* LUCENE-4984: Add SegmentingTokenizerBase, abstract class for tokenizers
+ that want to do two-pass tokenization such as by sentence and then by word.
+ (Robert Muir)
+
+* LUCENE-5489: Add Rescorer/QueryRescorer, to resort the hits from a
+ first pass search using scores from a more costly second pass
+ search. (Simon Willnauer, Robert Muir, Mike McCandless)
+
+* LUCENE-5528: Add context to suggesters (InputIterator and Lookup
+ classes), and fix AnalyzingInfixSuggester to handle contexts.
+ Suggester contexts allow you to filter suggestions. (Areek Zillur,
+ Mike McCandless)
+
+* LUCENE-5545: Add SortRescorer and Expression.getRescorer, to
+ resort the hits from a first pass search using a Sort or an
+ Expression. (Simon Willnauer, Robert Muir, Mike McCandless)
+
+* LUCENE-5558: Add TruncateTokenFilter which truncates terms to
+ the specified length. (Ahmet Arslan via Robert Muir)
+
+* LUCENE-2446: Added checksums to lucene index files. As of 4.8, the last 8
+ bytes of each file contain a zlib-crc32 checksum. Small metadata files are
+ verified on load. Larger files can be checked on demand via
+ AtomicReader.checkIntegrity. You can configure this to happen automatically
+ before merges by enabling IndexWriterConfig.setCheckIntegrityAtMerge.
+ (Robert Muir)
+
+* LUCENE-5580: Checksums are automatically verified on the default stored
+ fields format when performing a bulk merge. (Adrien Grand)
+
+* LUCENE-5602: Checksums are automatically verified on the default term
+ vectors format when performing a bulk merge. (Adrien Grand, Robert Muir)
+
+* LUCENE-5583: Added DataInput.skipBytes. ChecksumIndexInput can now seek, but
+ only forward. (Adrien Grand, Mike McCandless, Simon Willnauer, Uwe Schindler)
+
+* LUCENE-5588: Lucene now calls fsync() on the index directory, ensuring
+ that all file metadata is persisted on disk in case of power failure.
+ This does not work on all file systems and operating systems, but Linux
+ and MacOSX are known to work. On Windows, fsyncing a directory is not
+ possible with Java APIs. (Mike McCandless, Uwe Schindler)
+
+API Changes
+
+* LUCENE-5454: Add RandomAccessOrds, an optional extension of SortedSetDocValues
+ that supports random access to the ordinals in a document. (Robert Muir)
+
+* LUCENE-5468: Move offline Sort (from suggest module) to OfflineSort. (Robert Muir)
+
+* LUCENE-5493: SortingMergePolicy and EarlyTerminatingSortingCollector take
+ Sort instead of Sorter. BlockJoinSorter is removed, replaced with
+ BlockJoinComparatorSource, which can take a Sort for ordering of parents
+ and a separate Sort for ordering of children within a block.
+ (Robert Muir, Mike McCandless, Adrien Grand)
+
+* LUCENE-5516: MergeScheduler#merge() now accepts a MergeTrigger as well as
+ a boolean that indicates if a new merge was found in the caller thread before
+ the scheduler was called. (Simon Willnauer)
+
+* LUCENE-5487: Separated bulk scorer (new Weight.bulkScorer method) from
+ normal scoring (Weight.scorer) for those queries that can do bulk
+ scoring more efficiently, e.g. BooleanQuery in some cases. This
+ also simplified the Weight.scorer API by removing the two confusing
+ booleans. (Robert Muir, Uwe Schindler, Mike McCandless)
+
+* LUCENE-5519: TopNSearcher now allows to retrieve incomplete results if the max
+ size of the candidate queue is unknown. The queue can still be bound in order
+ to apply pruning while retrieving the top N but will not throw an exception if
+ too many results are rejected to guarantee an absolutely correct top N result.
+ The TopNSearcher now returns a struct like class that indicates if the result
+ is complete in the sense of the top N or not. Consumers of this API should assert
+ on the completeness if the bounded queue size is know ahead of time. (Simon Willnauer)
+
+* LUCENE-4984: Deprecate ThaiWordFilter and smartcn SentenceTokenizer and WordTokenFilter.
+ These filters would not work correctly with CharFilters and could not be safely placed
+ at an arbitrary position in the analysis chain. Use ThaiTokenizer and HMMChineseTokenizer
+ instead. (Robert Muir)
+
+* LUCENE-5543: Remove/deprecate Directory.fileExists (Mike McCandless)
+
+* LUCENE-5573: Move docvalues constants and helper methods to o.a.l.index.DocValues.
+ (Dawid Weiss, Robert Muir)
+
+* LUCENE-5604: Switched BytesRef.hashCode to MurmurHash3 (32 bit).
+ TermToBytesRefAttribute.fillBytesRef no longer returns the hash
+ code. BytesRefHash now uses MurmurHash3 for its hashing. (Robert
+ Muir, Mike McCandless)
+
+Optimizations
+
+* LUCENE-5468: HunspellStemFilter uses 10 to 100x less RAM. It also loads
+ all known openoffice dictionaries without error, and supports an additional
+ longestOnly option for a less aggressive approach. (Robert Muir)
+
+* LUCENE-4848: Use Java 7 NIO2-FileChannel instead of RandomAccessFile
+ for NIOFSDirectory and MMapDirectory. This allows to delete open files
+ on Windows if NIOFSDirectory is used, mmapped files are still locked.
+ (Michael Poindexter, Robert Muir, Uwe Schindler)
+
+* LUCENE-5515: Improved TopDocs#merge to create a merged ScoreDoc
+ array with length of at most equal to the specified size instead of length
+ equal to at most from + size as was before. (Martijn van Groningen)
+
+* LUCENE-5529: Spatial search of non-point indexed shapes should be a little
+ faster due to skipping intersection tests on redundant cells. (David Smiley)
+
+Bug fixes
+
+* LUCENE-5483: Fix inaccuracies in HunspellStemFilter. Multi-stage affix-stripping,
+ prefix-suffix dependencies, and COMPLEXPREFIXES now work correctly according
+ to the hunspell algorithm. Removed recursionCap parameter, as it's no longer needed, rules for
+ recursive affix application are driven correctly by continuation classes in the affix file.
+ (Robert Muir)
+
+* LUCENE-5497: HunspellStemFilter properly handles escaped terms and affixes without conditions.
+ (Robert Muir)
+
+* LUCENE-5505: HunspellStemFilter ignores BOM markers in dictionaries and handles varying
+ types of whitespace in SET/FLAG commands. (Robert Muir)
+
+* LUCENE-5507: Fix HunspellStemFilter loading of dictionaries with large amounts of aliases
+ etc before the encoding declaration. (Robert Muir)
+
+* LUCENE-5111: Fix WordDelimiterFilter to return offsets in correct order. (Robert Muir)
+
+* LUCENE-5555: Fix SortedInputIterator to correctly encode/decode contexts in presence of payload (Areek Zillur)
+
+* LUCENE-5559: Add missing argument checks to tokenfilters taking
+ numeric arguments. (Ahmet Arslan via Robert Muir)
+
+* LUCENE-5568: Benchmark module's "default.codec" option didn't work. (David Smiley)
+
+* SOLR-5983: HTMLStripCharFilter is treating CDATA sections incorrectly.
+ (Dan Funk, Steve Rowe)
+
+* LUCENE-5615: Validate per-segment delete counts at write time, to
+ help catch bugs that might otherwise cause corruption (Mike McCandless)
+
+* LUCENE-5612: NativeFSLockFactory no longer deletes its lock file. This cannot be done
+ safely without the risk of deleting someone else's lock file. If you use NativeFSLockFactory,
+ you may see write.lock hanging around from time to time: it's harmless.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-5624: Ensure NativeFSLockFactory does not leak file handles if it is unable
+ to obtain the lock. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5626: Fix bug in SimpleFSLockFactory's obtain() that sometimes throwed
+ IOException (ERROR_ACCESS_DENIED) on Windows if the lock file was created
+ concurrently. This error is now handled the same way like in NativeFSLockFactory
+ by returning false. (Uwe Schindler, Robert Muir, Dawid Weiss)
+
+* LUCENE-5630: Add missing META-INF entry for UpperCaseFilterFactory.
+ (Robert Muir)
+
+Tests
+
+* LUCENE-5630: Fix TestAllAnalyzersHaveFactories to correctly check for existence
+ of class and corresponding Map<String,String> ctor. (Uwe Schindler, Robert Muir)
+
+Test Framework
+
+* LUCENE-5592: Incorrectly reported uncloseable files. (Dawid Weiss)
+
+* LUCENE-5577: Temporary folder and file management (and cleanup facilities)
+ (Mark Miller, Uwe Schindler, Dawid Weiss)
+
+* LUCENE-5567: When a suite fails with zombie threads failure marker and count
+ is not propagated properly. (Dawid Weiss)
+
+* LUCENE-5449: Rename _TestUtil and _TestHelper to remove the leading _.
+
+* LUCENE-5501: Added random out-of-order collection testing (when the collector
+ supports it) to AssertingIndexSearcher. (Adrien Grand)
+
+Build
+
+* LUCENE-5463: RamUsageEstimator.(human)sizeOf(Object) is now a forbidden API.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-5512: Remove redundant typing (use diamond operator) throughout
+ the codebase. (Furkan KAMACI via Robert Muir)
+
+* LUCENE-5614: Enable building on Java 8 using Apache Ant 1.8.3 or 1.8.4
+ by adding a workaround for the Ant bug. (Uwe Schindler)
+
+* LUCENE-5612: Add a new Ant target in lucene/core to test LockFactory
+ implementations: "ant test-lock-factory". (Uwe Schindler, Mike McCandless,
+ Robert Muir)
+
+Documentation
+
+* LUCENE-5534: Add javadocs to GreekStemmer methods.
+ (Stamatis Pitsios via Robert Muir)
+
+======================= Lucene 4.7.2 =======================
+
+Bug Fixes
+
+* LUCENE-5574: Closing a near-real-time reader no longer attempts to
+ delete unreferenced files if the original writer has been closed;
+ this could cause index corruption in certain cases where index files
+ were directly changed (deleted, overwritten, etc.) in the index
+ directory outside of Lucene. (Simon Willnauer, Shai Erera, Robert
+ Muir, Mike McCandless)
+
+* LUCENE-5570: Don't let FSDirectory.sync() create new zero-byte files, instead throw
+ exception if a file is missing. (Uwe Schindler, Mike McCandless, Robert Muir)
+
+======================= Lucene 4.7.1 =======================
+
+Changes in Runtime Behavior
+
+* LUCENE-5532: AutomatonQuery.equals is no longer implemented as "accepts same language".
+ This was inconsistent with hashCode, and unnecessary for any subclasses in Lucene.
+ If you desire this in a custom subclass, minimize the automaton. (Robert Muir)
+
+Bug Fixes
+
+* LUCENE-5450: Fix getField() NPE issues with SpanOr/SpanNear when they have an
+ empty list of clauses. This can happen for example, when a wildcard matches
+ no terms. (Tim Allison via Robert Muir)
+
+* LUCENE-5473: Throw IllegalArgumentException, not
+ NullPointerException, if the synonym map is empty when creating
+ SynonymFilter (帅广应 via Mike McCandless)
+
+* LUCENE-5432: EliasFanoDocIdSet: Fix number of index entry bits when the maximum
+ entry is a power of 2. (Paul Elschot via Adrien Grand)
+
+* LUCENE-5466: query is always null in countDocsWithClass() of SimpleNaiveBayesClassifier.
+ (Koji Sekiguchi)
+
+* LUCENE-5502: Fixed TermsFilter.equals that could return true for different
+ filters. (Igor Motov via Adrien Grand)
+
+* LUCENE-5522: FacetsConfig didn't add drill-down terms for association facet
+ fields labels. (Shai Erera)
+
+* LUCENE-5520: ToChildBlockJoinQuery would hit
+ ArrayIndexOutOfBoundsException if a parent document had no children
+ (Sally Ang via Mike McCandless)
+
+* LUCENE-5532: AutomatonQuery.hashCode was not thread-safe. (Robert Muir)
+
+* LUCENE-5525: Implement MultiFacets.getAllDims, so you can do sparse
+ facets through DrillSideways, for example. (Jose Peleteiro, Mike
+ McCandless)
+
+* LUCENE-5481: IndexWriter.forceMerge used to run a merge even if there was a
+ single segment in the index. (Adrien Grand, Mike McCandless)
+
+* LUCENE-5538: Fix FastVectorHighlighter bug with index-time synonyms when the
+ query is more complex than a single phrase. (Robert Muir)
+
+* LUCENE-5544: Exceptions during IndexWriter.rollback could leak file handles
+ and the write lock. (Robert Muir)
+
+* LUCENE-4978: Spatial RecursivePrefixTree queries could result in false-negatives for
+ indexed shapes within 1/2 maxDistErr from the edge of the query shape. This meant
+ searching for a point by the same point as a query rarely worked. (David Smiley)
+
+* LUCENE-5553: IndexReader#ReaderClosedListener is not always invoked when
+ IndexReader#close() is called or if refCount is 0. If an exception is
+ thrown during internal close or on any of the close listeners some or all
+ listeners might be missed. This can cause memory leaks if the core listeners
+ are used to clear caches. (Simon Willnauer)
+
+Build
+
+* LUCENE-5511: "ant precommit" / "ant check-svn-working-copy" now work again
+ with any working copy format (thanks to svnkit 1.8.4). (Uwe Schindler)
+
+======================= Lucene 4.7.0 =======================
+
+New Features
+
+* LUCENE-5336: Add SimpleQueryParser: parser for human-entered queries.
+ (Jack Conradson via Robert Muir)
+
+* LUCENE-5337: Add Payload support to FileDictionary (Suggest) and make it more
+ configurable (Areek Zillur via Erick Erickson)
+
+* LUCENE-5329: suggest: DocumentDictionary and
+ DocumentExpressionDictionary are now lenient for dirty documents
+ (missing the term, weight or payload). (Areek Zillur via
+ Mike McCandless)
+
+* LUCENE-5404: Add .getCount method to all suggesters (Lookup); persist count
+ metadata on .store(); Dictionary returns InputIterator; Dictionary.getWordIterator
+ renamed to .getEntryIterator. (Areek Zillur)
+
+* SOLR-1871: The RangeMapFloatFunction accepts an arbitrary ValueSource
+ as target and default values. (Chris Harris, shalin)
+
+* LUCENE-5371: Speed up Lucene range faceting from O(N) per hit to
+ O(log(N)) per hit using segment trees; this only really starts to
+ matter in practice if the number of ranges is over 10 or so. (Mike
+ McCandless)
+
+* LUCENE-5379: Add Analyzer for Kurdish. (Robert Muir)
+
+* LUCENE-5369: Added an UpperCaseFilter to make UPPERCASE tokens. (ryan)
+
+* LUCENE-5345: Add a new BlendedInfixSuggester, which is like
+ AnalyzingInfixSuggester but boosts suggestions that matched tokens
+ with lower positions. (Remi Melisson via Mike McCandless)
+
+* LUCENE-5399: When sorting by String (SortField.STRING), you can now
+ specify whether missing values should be sorted first (the default),
+ using SortField.setMissingValue(SortField.STRING_FIRST), or last,
+ using SortField.setMissingValue(SortField.STRING_LAST). (Rob Muir,
+ Mike McCandless)
+
+* LUCENE-5099: QueryNode should have the ability to detach from its node
+ parent. Added QueryNode.removeFromParent() that allows nodes to be
+ detached from its parent node. (Adriano Crestani)
+
+* LUCENE-5395 LUCENE-5451: Upgrade to Spatial4j 0.4.1: Parses WKT (including
+ ENVELOPE) with extension "BUFFER"; buffering a point results in a Circle.
+ JTS isn't needed for WKT any more but remains required for Polygons. New
+ Shapes: ShapeCollection and BufferedLineString. Various other improvements and
+ bug fixes too. More info:
+ https://github.com/spatial4j/spatial4j/blob/master/CHANGES.md (David Smiley)
+
+* LUCENE-5415: Add multitermquery (wildcards,prefix,etc) to PostingsHighlighter.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-3069: Add two memory resident dictionaries (FST terms dictionary and
+ FSTOrd terms dictionary) to improve primary key lookups. The PostingsBaseFormat
+ API is also changed so that term dictionaries get the ability to block
+ encode term metadata, and all dictionary implementations can now plug in any
+ PostingsBaseFormat. (Han Jiang, Mike McCandless)
+
+* LUCENE-5353: ShingleFilter's filler token should be configurable.
+ (Ahmet Arslan, Simon Willnauer, Steve Rowe)
+
+* LUCENE-5320: Add SearcherTaxonomyManager over search and taxonomy index
+ directories (i.e. not only NRT). (Shai Erera)
+
+* LUCENE-5410: Add fuzzy and near support via '~' operator to SimpleQueryParser.
+ (Lee Hinman via Robert Muir)
+
+* LUCENE-5426: Make SortedSetDocValuesReaderState abstract to allow
+ custom implementations for Lucene doc values faceting (John Wang via
+ Mike McCandless)
+
+* LUCENE-5434: NRT support for file systems that do no have delete on last
+ close or cannot delete while referenced semantics.
+ (Mark Miller, Mike McCandless)
+
+* LUCENE-5418: Drilling down or sideways on a Lucene facet range
+ (using Range.getFilter()) is now faster for costly filters (uses
+ random access, not iteration); range facet counts now accept a
+ fast-match filter to avoid computing the value for documents that
+ are out of bounds, e.g. using a bounding box filter with distance
+ range faceting. (Mike McCandless)
+
+* LUCENE-5440: Add LongBitSet for managing more than 2.1B bits (otherwise use
+ FixedBitSet). (Shai Erera)
+
+* LUCENE-5437: ASCIIFoldingFilter now has an option to preserve the original token
+ and emit it on the same position as the folded token only if the actual token was
+ folded. (Simon Willnauer, Nik Everett)
+
+* LUCENE-5408: Add spatial SerializedDVStrategy that serializes a binary
+ representations of a shape into BinaryDocValues. It supports exact geometry
+ relationship calculations. (David Smiley)
+
+* LUCENE-5457: Add SloppyMath.earthDiameter(double latitude) that returns an
+ approximate value of the diameter of the earth at the given latitude.
+ (Adrien Grand)
+
+* LUCENE-5979: FilteredQuery uses the cost API to decide on whether to use
+ random-access or leap-frog to intersect the filter with the query.
+ (Adrien Grand)
+
+Build
+
+* LUCENE-5217,LUCENE-5420: Maven config: get dependencies from Ant+Ivy config;
+ disable transitive dependency resolution for all depended-on artifacts by
+ putting an exclusion for each transitive dependency in the
+ <dependencyManagement> section of the grandparent POM. (Steve Rowe)
+
+* LUCENE-5322: Clean up / simplify Maven-related Ant targets.
+ (Steve Rowe)
+
+* LUCENE-5347: Upgrade forbidden-apis checker to version 1.4.
+ (Uwe Schindler)
+
+* LUCENE-4381: Upgrade analysis/icu to 52.1. (Robert Muir)
+
+* LUCENE-5357: Upgrade StandardTokenizer and UAX29URLEmailTokenizer to
+ Unicode 6.3; update UAX29URLEmailTokenizer's recognized top level
+ domains in URLs and Emails from the IANA Root Zone Database.
+ (Steve Rowe)
+
+* LUCENE-5360: Add support for developing in Netbeans IDE.
+ (Michal Hlavac, Uwe Schindler, Steve Rowe)
+
+* SOLR-5590: Upgrade HttpClient/HttpComponents to 4.3.x.
+ (Karl Wright via Shawn Heisey)
+
+* LUCENE-5385: "ant precommit" / "ant check-svn-working-copy" now work
+ for SVN 1.8 or GIT checkouts. The ANT target prints a warning instead
+ of failing. It also instructs the user, how to run on SVN 1.8 working
+ copies. (Robert Muir, Uwe Schindler)
+
+* LUCENE-5383: fix changes2html to link pull requests (Steve Rowe)
+
+* LUCENE-5411: Upgrade to released JFlex 1.5.0; stop requiring
+ a locally built JFlex snapshot jar. (Steve Rowe)
+
+* LUCENE-5465: Solr Contrib "map-reduce" breaks Manifest of all other
+ JAR files by adding a broken Main-Class attribute.
+ (Uwe Schindler, Steve Rowe)
+
+Bug fixes
+
+* LUCENE-5285: Improved highlighting of multi-valued fields with
+ FastVectorHighlighter. (Nik Everett via Adrien Grand)
+
+* LUCENE-5391: UAX29URLEmailTokenizer should not tokenize no-scheme
+ domain-only URLs that are followed by an alphanumeric character.
+ (Chris Geeringh, Steve Rowe)
+
+* LUCENE-5405: If an analysis component throws an exception, Lucene
+ logs the field name to the info stream to assist in
+ diagnosis. (Benson Margulies)
+
+* SOLR-5661: PriorityQueue now refuses to allocate itself if the
+ incoming maxSize is too large (Raintung Li via Mike McCandless)
+
+* LUCENE-5228: IndexWriter.addIndexes(Directory[]) now acquires a
+ write lock in each Directory, to ensure that no open IndexWriter is
+ changing the incoming indices. This also means that you cannot pass
+ the same Directory to multiple concurrent addIndexes calls (which is
+ anyways unusual). (Robert Muir, Mike McCandless)
+
+* LUCENE-5415: SpanMultiTermQueryWrapper didn't handle its boost in
+ hashcode/equals/tostring/rewrite. (Robert Muir)
+
+* LUCENE-5409: ToParentBlockJoinCollector.getTopGroups would fail to
+ return any groups when the joined query required more than one
+ rewrite step (Peng Cheng via Mike McCandless)
+
+* LUCENE-5398: NormValueSource was incorrectly casting the long value
+ to byte, before calling Similarity.decodeNormValue. (Peng Cheng via
+ Mike McCandless)
+
+* LUCENE-5436: ReferenceManager#accquire can result in infinite loop if
+ managed resource is abused outside of the ReferenceManager. Decrementing
+ the reference without a corresponding incRef() call can cause an infinite
+ loop. ReferenceManager now throws IllegalStateException if currently managed
+ resources ref count is 0. (Simon Willnauer)
+
+* LUCENE-5443: Lucene45DocValuesProducer.ramBytesUsed() may throw
+ ConcurrentModificationException. (Shai Erera, Simon Willnauer)
+
+* LUCENE-5444: MemoryIndex didn't respect the analyzers offset gap and
+ offsets were corrupted if multiple fields with the same name were
+ added to the memory index. (Britta Weber, Simon Willnauer)
+
+* LUCENE-5447: StandardTokenizer should break at consecutive chars matching
+ Word_Break = MidLetter, MidNum and/or MidNumLet (Steve Rowe)
+
+* LUCENE-5462: RamUsageEstimator.sizeOf(Object) is not used anymore to
+ estimate memory usage of segments. This used to make
+ SegmentReader.ramBytesUsed very CPU-intensive. (Adrien Grand)
+
+* LUCENE-5461: ControlledRealTimeReopenThread would sometimes wait too
+ long (up to targetMaxStaleSec) when a searcher is waiting for a
+ specific generation, when it should have waited for at most
+ targetMinStaleSec. (Hans Lund via Mike McCandless)
+
+API Changes
+
+* LUCENE-5339: The facet module was simplified/reworked to make the
+ APIs more approachable to new users. Note: when migrating to the new
+ API, you must pass the Document that is returned from FacetConfig.build()
+ to IndexWriter.addDocument(). (Shai Erera, Gilad Barkai, Rob
+ Muir, Mike McCandless)
+
+* LUCENE-5405: Make ShingleAnalyzerWrapper.getWrappedAnalyzer() public final (gsingers)
+
+* LUCENE-5395: The SpatialArgsParser now only reads WKT, no more "lat, lon"
+ etc. but it's easy to override the parseShape method if you wish. (David
+ Smiley)
+
+* LUCENE-5414: DocumentExpressionDictionary was renamed to
+ DocumentValueSourceDictionary and all dependencies to the lucene-expression
+ module were removed from lucene-suggest. DocumentValueSourceDictionary now
+ only accepts a ValueSource instead of a convenience ctor for an expression
+ string. (Simon Willnauer)
+
+* LUCENE-3069: PostingsWriterBase and PostingsReaderBase are no longer
+ responsible for encoding/decoding a block of terms. Instead, they
+ should encode/decode each term to/from a long[] and byte[]. (Han
+ Jiang, Mike McCandless)
+
+* LUCENE-5425: FacetsCollector and MatchingDocs use a general DocIdSet,
+ allowing for custom implementations to be used when faceting.
+ (John Wang, Lei Wang, Shai Erera)
+
+Optimizations
+
+* LUCENE-5372: Replace StringBuffer by StringBuilder, where possible.
+ (Joshua Hartman via Uwe Schindler, Dawid Weiss, Mike McCandless)
+
+* LUCENE-5271: A slightly more accurate SloppyMath distance.
+ (Gilad Barkai via Ryan Ernst)
+
+* LUCENE-5399: Deep paging using IndexSearcher.searchAfter when
+ sorting by fields is faster (Rob Muir, Mike McCandless)
+
+Changes in Runtime Behavior
+
+* LUCENE-5362: IndexReader and SegmentCoreReaders now throw
+ AlreadyClosedException if the refCount in incremented but
+ is less that 1. (Simon Willnauer)
+
+Documentation
+
+* LUCENE-5384: Add some tips for making tokenfilters and tokenizers
+ to the analysis package overview.
+ (Benson Margulies via Robert Muir - pull request #12)
+
+* LUCENE-5389: Add more guidance in the analysis documentation
+ package overview.
+ (Benson Margulies via Robert Muir - pull request #14)
+
+======================= Lucene 4.6.1 =======================
+
+Bug fixes
+
+* LUCENE-5373: Memory usage of
+ [Lucene40/Lucene42/Memory/Direct]DocValuesFormat was over-estimated.
+ (Shay Banon, Adrien Grand, Robert Muir)
+
+* LUCENE-5361: Fixed handling of query boosts in FastVectorHighlighter.
+ (Nik Everett via Adrien Grand)
+
+* LUCENE-5374: IndexWriter processes internal events after the it
+ closed itself internally. This rare condition can happen if an
+ IndexWriter has internal changes that were not fully applied yet
+ like when index / flush requests happen concurrently to the close or
+ rollback call. (Simon Willnauer)
+
+* LUCENE-5394: Fix TokenSources.getTokenStream to return payloads if
+ they were indexed with the term vectors. (Mike McCandless)
+
+* LUCENE-5344: Flexible StandardQueryParser behaves differently than
+ ClassicQueryParser. (Adriano Crestani)
+
+* LUCENE-5375: ToChildBlockJoinQuery works harder to detect mis-use,
+ when the parent query incorrectly returns child documents, and throw
+ a clear exception saying so. (Dr. Oleg Savrasov via Mike McCandless)
+
+* LUCENE-5401: Field.StringTokenStream#end() calls super.end() now,
+ preventing wrong term positions for fields that use
+ StringTokenStream. (Michael Busch)
+
+* LUCENE-5377: IndexWriter.addIndexes(Directory[]) would cause corruption
+ on Lucene 4.6 if any index segments were Lucene 4.0-4.5.
+ (Littlestar, Mike McCandless, Shai Erera, Robert Muir)
+
+======================= Lucene 4.6.0 =======================
+
+New Features
+
+* LUCENE-4906: PostingsHighlighter can now render to custom Object,
+ for advanced use cases where String is too restrictive (Luca
+ Cavanna, Robert Muir, Mike McCandless)
+
+* LUCENE-5133: Changed AnalyzingInfixSuggester.highlight to return
+ Object instead of String, to allow for advanced use cases where
+ String is too restrictive (Robert Muir, Shai Erera, Mike
+ McCandless)
+
+* LUCENE-5207, LUCENE-5334: Added expressions module for customizing ranking
+ with script-like syntax.
+ (Jack Conradson, Ryan Ernst, Uwe Schindler via Robert Muir)
+
+* LUCENE-5180: ShingleFilter now creates shingles with trailing holes,
+ for example if a StopFilter had removed the last token. (Mike
+ McCandless)
+
+* LUCENE-5219: Add support to SynonymFilterFactory for custom
+ parsers. (Ryan Ernst via Robert Muir)
+
+* LUCENE-5235: Tokenizers now throw an IllegalStateException if the
+ consumer does not call reset() before consuming the stream. Previous
+ versions throwed NullPointerException or ArrayIndexOutOfBoundsException
+ on best effort which was not user-friendly.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-5240: Tokenizers now throw an IllegalStateException if the
+ consumer neglects to call close() on the previous stream before consuming
+ the next one. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5214: Add new FreeTextSuggester, to predict the next word
+ using a simple ngram language model. This is useful for the "long
+ tail" suggestions, when a primary suggester fails to find a
+ suggestion. (Mike McCandless)
+
+* LUCENE-5251: New DocumentDictionary allows building suggesters via
+ contents of existing field, weight and optionally payload stored
+ fields in an index (Areek Zillur via Mike McCandless)
+
+* LUCENE-5261: Add QueryBuilder, a simple API to build queries from
+ the analysis chain directly, or to make it easier to implement
+ query parsers. (Robert Muir, Uwe Schindler)
+
+* LUCENE-5270: Add Terms.hasFreqs, to determine whether a given field
+ indexed per-doc term frequencies. (Mike McCandless)
+
+* LUCENE-5269: Add CodepointCountFilter. (Robert Muir)
+
+* LUCENE-5294: Suggest module: add DocumentExpressionDictionary to
+ compute each suggestion's weight using a javascript expression.
+ (Areek Zillur via Mike McCandless)
+
+* LUCENE-5274: FastVectorHighlighter now supports highlighting against several
+ indexed fields. (Nik Everett via Adrien Grand)
+
+* LUCENE-5304: SingletonSortedSetDocValues can now return the wrapped
+ SortedDocValues (Robert Muir, Adrien Grand)
+
+* LUCENE-2844: The benchmark module can now test the spatial module. See
+ spatial.alg (David Smiley, Liviy Ambrose)
+
+* LUCENE-5302: Make StemmerOverrideMap's methods public (Alan Woodward)
+
+* LUCENE-5296: Add DirectDocValuesFormat, which holds all doc values
+ in heap as uncompressed java native arrays. (Mike McCandless)
+
+* LUCENE-5189: Add IndexWriter.updateNumericDocValues, to update
+ numeric DocValues fields of documents, without re-indexing them.
+ (Shai Erera, Mike McCandless, Robert Muir)
+
+* LUCENE-5298: Add SumValueSourceFacetRequest for aggregating facets by
+ a ValueSource, such as a NumericDocValuesField or an expression.
+ (Shai Erera)
+
+* LUCENE-5323: Add .sizeInBytes method to all suggesters (Lookup).
+ (Areek Zillur via Mike McCandless)
+
+* LUCENE-5312: Add BlockJoinSorter, a new Sorter implementation that makes sure
+ to never split up blocks of documents indexed with IndexWriter.addDocuments.
+ (Adrien Grand)
+
+* LUCENE-5297: Allow to range-facet on any ValueSource, not just
+ NumericDocValues fields. (Shai Erera)
+
+Bug Fixes
+
+* LUCENE-5272: OpenBitSet.ensureCapacity did not modify numBits, causing
+ false assertion errors in fastSet. (Shai Erera)
+
+* LUCENE-5303: OrdinalsCache did not use coreCacheKey, resulting in
+ over caching across multiple threads. (Mike McCandless, Shai Erera)
+
+* LUCENE-5307: Fix topScorer inconsistency in handling QueryWrapperFilter
+ inside ConstantScoreQuery, which now rewrites to a query removing the
+ obsolete QueryWrapperFilter. (Adrien Grand, Uwe Schindler)
+
+* LUCENE-5330: IndexWriter didn't process all internal events on
+ #getReader(), #close() and #rollback() which causes files to be
+ deleted at a later point in time. This could cause short-term disk
+ pollution or OOM if in-memory directories are used. (Simon Willnauer)
+
+* LUCENE-5342: Fixed bulk-merge issue in CompressingStoredFieldsFormat which
+ created corrupted segments when mixing chunk sizes.
+ Lucene41StoredFieldsFormat is not impacted. (Adrien Grand, Robert Muir)
+
+API Changes
+
+* LUCENE-5222: Add SortField.needsScores(). Previously it was not possible
+ for a custom Sort that makes use of the relevance score to work correctly
+ with IndexSearcher when an ExecutorService is specified.
+ (Ryan Ernst, Mike McCandless, Robert Muir)
+
+* LUCENE-5275: Change AttributeSource.toString() to display the current
+ state of attributes. (Robert Muir)
+
+* LUCENE-5277: Modify FixedBitSet copy constructor to take an additional
+ numBits parameter to allow growing/shrinking the copied bitset. You can
+ use FixedBitSet.clone() if you only need to clone the bitset. (Shai Erera)
+
+* LUCENE-5260: Use TermFreqPayloadIterator for all suggesters; those
+ suggesters that can't support payloads will throw an exception if
+ hasPayloads() is true. (Areek Zillur via Mike McCandless)
+
+* LUCENE-5280: Rename TermFreqPayloadIterator -> InputIterator, along
+ with associated suggest/spell classes. (Areek Zillur via Mike
+ McCandless)
+
+* LUCENE-5157: Rename OrdinalMap methods to clarify API and internal structure.
+ (Boaz Leskes via Adrien Grand)
+
+* LUCENE-5313: Move preservePositionIncrements from setter to ctor in
+ Analyzing/FuzzySuggester. (Areek Zillur via Mike McCandless)
+
+* LUCENE-5321: Remove Facet42DocValuesFormat. Use DirectDocValuesFormat if you
+ want to load the category list into memory. (Shai Erera, Mike McCandless)
+
+* LUCENE-5324: AnalyzerWrapper.getPositionIncrementGap and getOffsetGap can now
+ be overridden. (Adrien Grand)
+
+Optimizations
+
+* LUCENE-5225: The ToParentBlockJoinQuery only keeps tracks of the the child
+ doc ids and child scores if the ToParentBlockJoinCollector is used.
+ (Martijn van Groningen)
+
+* LUCENE-5236: EliasFanoDocIdSet now has an index and uses broadword bit
+ selection to speed-up advance(). (Paul Elschot via Adrien Grand)
+
+* LUCENE-5266: Improved number of read calls and branches in DirectPackedReader. (Ryan Ernst)
+
+* LUCENE-5300: Optimized SORTED_SET storage for fields which are single-valued.
+ (Adrien Grand)
+
+Documentation
+
+* LUCENE-5211: Better javadocs and error checking of 'format' option in
+ StopFilterFactory, as well as comments in all snowball formatted files
+ about specifying format option. (hossman)
+
+Changes in backwards compatibility policy
+
+* LUCENE-5235: Sub classes of Tokenizer have to call super.reset()
+ when implementing reset(). Otherwise the consumer will get an
+ IllegalStateException because the Reader is not correctly assigned.
+ It is important to never change the "input" field on Tokenizer
+ without using setReader(). The "input" field must not be used
+ outside reset(), incrementToken(), or end() - especially not in
+ the constructor. (Uwe Schindler, Robert Muir)
+
+* LUCENE-5204: Directory doesn't have default implementations for
+ LockFactory-related methods, which have been moved to BaseDirectory. If you
+ had a custom Directory implementation that extended Directory, you need to
+ extend BaseDirectory instead. (Adrien Grand)
+
+Build
+
+* LUCENE-5283: Fail the build if ant test didn't execute any tests
+ (everything filtered out). (Dawid Weiss, Uwe Schindler)
+
+* LUCENE-5249, LUCENE-5257: All Lucene/Solr modules should use the same
+ dependency versions. (Steve Rowe)
+
+* LUCENE-5273: Binary artifacts in Lucene and Solr convenience binary
+ distributions accompanying a release, including on Maven Central,
+ should be identical across all distributions. (Steve Rowe, Uwe Schindler,
+ Shalin Shekhar Mangar)
+
+* LUCENE-4753: Run forbidden-apis Ant task per module. This allows more
+ improvements and prevents OOMs after the number of class files
+ raised recently. (Uwe Schindler)
+
+Tests
+
+* LUCENE-5278: Fix MockTokenizer to work better with more regular expression
+ patterns. Previously it could only behave like CharTokenizer (where a character
+ is either a "word" character or not), but now it gives a general longest-match
+ behavior. (Nik Everett via Robert Muir)
+
+======================= Lucene 4.5.1 =======================
+
+Bug Fixes
+
+* LUCENE-4998: Fixed a few places to pass IOContext.READONCE instead
+ of IOContext.READ (Shikhar Bhushan via Mike McCandless)
+
+* LUCENE-5242: DirectoryTaxonomyWriter.replaceTaxonomy did not fully reset
+ its state, which could result in exceptions being thrown, as well as
+ incorrect ordinals returned from getParent. (Shai Erera)
+
+* LUCENE-5254: Fixed bounded memory leak, where objects like live
+ docs bitset were not freed from an starting reader after reopening
+ to a new reader and closing the original one. (Shai Erera, Mike
+ McCandless)
+
+* LUCENE-5262: Fixed file handle leaks when multiple attempts to open an
+ NRT reader hit exceptions. (Shai Erera)
+
+* LUCENE-5263: Transient IOExceptions, e.g. due to disk full or file
+ descriptor exhaustion, hit at unlucky times inside IndexWriter could
+ lead to silently losing deletions. (Shai Erera, Mike McCandless)
+
+* LUCENE-5264: CommonTermsQuery ignored minMustMatch if only high-frequent
+ terms were present in the query and the high-frequent operator was set
+ to SHOULD. (Simon Willnauer)
+
+* LUCENE-5269: Fix bug in NGramTokenFilter where it would sometimes count
+ unicode characters incorrectly. (Mike McCandless, Robert Muir)
+
+* LUCENE-5289: IndexWriter.hasUncommittedChanges was returning false
+ when there were buffered delete-by-Term. (Shalin Shekhar Mangar,
+ Mike McCandless)
+
+======================= Lucene 4.5.0 =======================
+
+New features
+
+* LUCENE-5084: Added new Elias-Fano encoder, decoder and DocIdSet
+ implementations. (Paul Elschot via Adrien Grand)
+
+* LUCENE-5081: Added WAH8DocIdSet, an in-memory doc id set implementation based
+ on word-aligned hybrid encoding. (Adrien Grand)
+
+* LUCENE-5098: New broadword utility methods in oal.util.BroadWord.
+ (Paul Elschot via Adrien Grand, Dawid Weiss)
+
+* LUCENE-5030: FuzzySuggester now supports optional unicodeAware
+ (default is false). If true then edits are measured in Unicode code
+ points instead of UTF8 bytes. (Artem Lukanin via Mike McCandless)
+
+* LUCENE-5118: SpatialStrategy.makeDistanceValueSource() now has an optional
+ multiplier for scaling degrees to another unit. (David Smiley)
+
+* LUCENE-5091: SpanNotQuery can now be configured with pre and post slop to act
+ as a hypothetical SpanNotNearQuery. (Tim Allison via David Smiley)
+
+* LUCENE-4985: FacetsAccumulator.create() is now able to create a
+ MultiFacetsAccumulator over a mixed set of facet requests. MultiFacetsAccumulator
+ allows wrapping multiple FacetsAccumulators, allowing to easily mix
+ existing and custom ones. TaxonomyFacetsAccumulator supports any
+ FacetRequest which implements createFacetsAggregator and was indexed
+ using the taxonomy index. (Shai Erera)
+
+* LUCENE-5153: AnalyzerWrapper.wrapReader allows wrapping the Reader given to
+ inputReader. (Shai Erera)
+
+* LUCENE-5155: FacetRequest.getValueOf and .getFacetArraysSource replaced by
+ FacetsAggregator.createOrdinalValueResolver. This gives better options for
+ resolving an ordinal's value by FacetAggregators. (Shai Erera)
+
+* LUCENE-5165: Add SuggestStopFilter, to be used with analyzing
+ suggesters, so that a stop word at the very end of the lookup query,
+ and without any trailing token characters, will be preserved. This
+ enables query "a" to suggest apple; see
+ http://blog.mikemccandless.com/2013/08/suggeststopfilter-carefully-removes.html
+ for details.
+
+* LUCENE-5178: Added support for missing values to DocValues fields.
+ AtomicReader.getDocsWithField returns a Bits of documents with a value,
+ and FieldCache.getDocsWithField forwards to that for DocValues fields. Things like
+ SortField.setMissingValue, FunctionValues.exists, and FieldValueFilter now
+ work with DocValues fields. (Robert Muir)
+
+* LUCENE-5124: Lucene 4.5 has a new Lucene45Codec with Lucene45DocValues,
+ supporting missing values and with most datastructures residing off-heap.
+ Added "Memory" docvalues format that works entirely in heap, and "Disk"
+ loads no datastructures into RAM. Both of these also support missing values.
+ Added DiskNormsFormat (in case you want norms entirely on disk). (Robert Muir)
+
+* LUCENE-2750: Added PForDeltaDocIdSet, an in-memory doc id set implementation
+ based on the PFOR encoding. (Adrien Grand)
+
+* LUCENE-5186: Added CachingWrapperFilter.getFilter in order to be able to get
+ the wrapped filter. (Trejkaz via Adrien Grand)
+
+* LUCENE-5197: Added SegmentReader.ramBytesUsed to return approximate heap RAM
+ used by index datastructures. (Areek Zillur via Robert Muir)
+
+Bug Fixes
+
+* LUCENE-5116: IndexWriter.addIndexes(IndexReader...) should drop empty (or all
+ deleted) segments. (Robert Muir, Shai Erera)
+
+* LUCENE-5132: Spatial RecursivePrefixTree Contains predicate will throw an NPE
+ when there's no indexed data and maybe in other circumstances too. (David Smiley)
+
+* LUCENE-5146: AnalyzingSuggester sort comparator read part of the input key as the
+ weight that caused the sorter to never sort by weight first since the weight is only
+ considered if the input is equal causing the malformed weight to be identical as well.
+ (Simon Willnauer)
+
+* LUCENE-5151: Associations FacetsAggregators could enter an infinite loop when
+ some result documents were missing category associations. (Shai Erera)
+
+* LUCENE-5152: Fix MemoryPostingsFormat to not modify borrowed BytesRef from FSTEnum
+ seek/lookup which can cause side effects if done on a cached FST root arc.
+ (Simon Willnauer)
+
+* LUCENE-5160: Handle the case where reading from a file or FileChannel returns -1,
+ which could happen in rare cases where something happens to the file between the
+ time we start the read loop (where we check the length) and when we actually do
+ the read. (gsingers, yonik, Robert Muir, Uwe Schindler)
+
+* LUCENE-5166: PostingsHighlighter would throw IOOBE if a term spanned the maxLength
+ boundary, made it into the top-N and went to the formatter.
+ (Manuel Amoabeng, Michael McCandless, Robert Muir)
+
+* LUCENE-4583: Indexing core no longer enforces a limit on maximum
+ length binary doc values fields, but individual codecs (including
+ the default one) have their own limits (David Smiley, Robert Muir,
+ Mike McCandless)
+
+* LUCENE-3849: TokenStreams now set the position increment in end(),
+ so we can handle trailing holes. If you have a custom TokenStream
+ implementing end() then be sure it calls super.end(). (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-5192: IndexWriter could allow adding same field name with different
+ DocValueTypes under some circumstances. (Shai Erera)
+
+* LUCENE-5191: SimpleHTMLEncoder in Highlighter module broke Unicode
+ outside BMP because it encoded UTF-16 chars instead of codepoints.
+ The escaping of codepoints > 127 was removed (not needed for valid HTML)
+ and missing escaping for ' and / was added. (Uwe Schindler)
+
+* LUCENE-5201: Fixed compression bug in LZ4.compressHC when the input is highly
+ compressible and the start offset of the array to compress is > 0.
+ (Adrien Grand)
+
+* LUCENE-5221: SimilarityBase did not write norms the same way as DefaultSimilarity
+ if discountOverlaps == false and index-time boosts are present for the field.
+ (Yubin Kim via Robert Muir)
+
+* LUCENE-5223: Fixed IndexUpgrader command line parsing: -verbose is not required
+ and -dir-impl option now works correctly. (hossman)
+
+* LUCENE-5245: Fix MultiTermQuery's constant score rewrites to always
+ return a ConstantScoreQuery to make scoring consistent. Previously it
+ returned an empty unwrapped BooleanQuery, if no terms were available,
+ which has a different query norm. (Nik Everett, Uwe Schindler)
+
+* LUCENE-5218: In some cases, trying to retrieve or merge a 0-length
+ binary doc value would hit an ArrayIndexOutOfBoundsException.
+ (Littlestar via Mike McCandless)
+
+API Changes
+
+* LUCENE-5094: Add ramBytesUsed() to MultiDocValues.OrdinalMap.
+ (Robert Muir)
+
+* LUCENE-5114: Remove unused boolean useCache parameter from
+ TermsEnum.seekCeil and .seekExact (Mike McCandless)
+
+* LUCENE-5128: IndexSearcher.searchAfter throws IllegalArgumentException if
+ searchAfter exceeds the number of documents in the reader.
+ (Crocket via Shai Erera)
+
+* LUCENE-5129: CategoryAssociationsContainer no longer supports null
+ association values for categories. If you want to index categories without
+ associations, you should add them using FacetFields. (Shai Erera)
+
+* LUCENE-4876: IndexWriter no longer clones the given IndexWriterConfig. If you
+ need to use the same config more than once, e.g. when sharing between multiple
+ writers, make sure to clone it before passing to each writer.
+ (Shai Erera, Mike McCandless)
+
+* LUCENE-5144: StandardFacetsAccumulator renamed to OldFacetsAccumulator, and all
+ associated classes were moved under o.a.l.facet.old. The intention to remove it
+ one day, when the features it covers (complements, partitions, sampling) will be
+ migrated to the new FacetsAggregator and FacetsAccumulator API. Also,
+ FacetRequest.createAggregator was replaced by OldFacetsAccumulator.createAggregator.
+ (Shai Erera)
+
+* LUCENE-5149: CommonTermsQuery now allows to set the minimum number of terms that
+ should match for its high and low frequent sub-queries. Previously this was only
+ supported on the low frequent terms query. (Simon Willnauer)
+
+* LUCENE-5156: CompressingTermVectors TermsEnum no longer supports ord().
+ (Robert Muir)
+
+* LUCENE-5161, LUCENE-5164: Fix default chunk sizes in FSDirectory to not be
+ unnecessarily large (now 8192 bytes); also use chunking when writing to index
+ files. FSDirectory#setReadChunkSize() is now deprecated and will be removed
+ in Lucene 5.0. (Uwe Schindler, Robert Muir, gsingers)
+
+* LUCENE-5170: Analyzer.ReuseStrategy instances are now stateless and can
+ be reused in other Analyzer instances, which was not possible before.
+ Lucene ships now with stateless singletons for per field and global reuse.
+ Legacy code can still instantiate the deprecated implementation classes,
+ but new code should use the constants. Implementors of custom strategies
+ have to take care of new method signatures. AnalyzerWrapper can now be
+ configured to use a custom strategy, too, ideally the one from the wrapped
+ Analyzer. Analyzer adds a getter to retrieve the strategy for this use-case.
+ (Uwe Schindler, Robert Muir, Shay Banon)
+
+* LUCENE-5173: Lucene never writes segments with 0 documents anymore.
+ (Shai Erera, Uwe Schindler, Robert Muir)
+
+* LUCENE-5178: SortedDocValues always returns -1 ord when a document is missing
+ a value for the field. Previously it only did this if the SortedDocValues
+ was produced by uninversion on the FieldCache. (Robert Muir)
+
+* LUCENE-5183: remove BinaryDocValues.MISSING. In order to determine a document
+ is missing a field, use getDocsWithField instead. (Robert Muir)
+
+Changes in Runtime Behavior
+
+* LUCENE-5178: DocValues codec consumer APIs (iterables) return null values
+ when the document has no value for the field. (Robert Muir)
+
+* LUCENE-5200: The HighFreqTerms command-line tool returns the true top-N
+ by totalTermFreq when using the -t option, it uses the term statistics (faster)
+ and now always shows totalTermFreq in the output. (Robert Muir)
+
+Optimizations
+
+* LUCENE-5088: Added TermFilter to filter docs by a specific term.
+ (Martijn van Groningen)
+
+* LUCENE-5119: DiskDV keeps the document-to-ordinal mapping on disk for
+ SortedDocValues. (Robert Muir)
+
+* LUCENE-5145: New AppendingPackedLongBuffer, a new variant of the former
+ AppendingLongBuffer which assumes values are 0-based.
+ (Boaz Leskes via Adrien Grand)
+
+* LUCENE-5145: All Appending*Buffer now support bulk get.
+ (Boaz Leskes via Adrien Grand)
+
+* LUCENE-5140: Fixed a performance regression of span queries caused by
+ LUCENE-4946. (Alan Woodward, Adrien Grand)
+
+* LUCENE-5150: Make WAH8DocIdSet able to inverse its encoding in order to
+ compress dense sets efficiently as well. (Adrien Grand)
+
+* LUCENE-5159: Prefix-code the sorted/sortedset value dictionaries in DiskDV.
+ (Robert Muir)
+
+* LUCENE-5170: Fixed several wrapper analyzers to inherit the reuse strategy
+ of the wrapped Analyzer. (Uwe Schindler, Robert Muir, Shay Banon)
+
+* LUCENE-5006: Simplified DocumentsWriter and DocumentsWriterPerThread
+ synchronization and concurrent interaction with IndexWriter. DWPT is now
+ only setup once and has no reset logic. All segment publishing and state
+ transition from DWPT into IndexWriter is now done via an Event-Queue
+ processed from within the IndexWriter in order to prevent situations
+ where DWPT or DW calling int IW causing deadlocks. (Simon Willnauer)
+
+* LUCENE-5182: Terminate phrase searches early if max phrase window is
+ exceeded in FastVectorHighlighter to prevent very long running phrase
+ extraction if phrase terms are high frequent. (Simon Willnauer)
+
+* LUCENE-5188: CompressingStoredFieldsFormat now slices chunks containing big
+ documents into fixed-size blocks so that requesting a single field does not
+ necessarily force to decompress the whole chunk. (Adrien Grand)
+
+* LUCENE-5101: CachingWrapper makes it easier to plug-in a custom cacheable
+ DocIdSet implementation and uses WAH8DocIdSet by default, which should be
+ more memory efficient than FixedBitSet on average as well as faster on small
+ sets. (Robert Muir)
+
+Documentation
+
+* LUCENE-4894: remove facet userguide as it was outdated. Partially absorbed into
+ package's documentation and classes javadocs. (Shai Erera)
+
+* LUCENE-5206: Clarify FuzzyQuery's unexpected behavior on short
+ terms. (Tim Allison via Mike McCandless)
+
+Changes in backwards compatibility policy
+
+* LUCENE-5141: CheckIndex.fixIndex(Status,Codec) is now
+ CheckIndex.fixIndex(Status). If you used to pass a codec to this method, just
+ remove it from the arguments. (Adrien Grand)
+
+* LUCENE-5089, SOLR-5126: Update to Morfologik 1.7.1. MorfologikAnalyzer and MorfologikFilter
+ no longer support multiple "dictionaries" as there is only one dictionary available.
+ (Dawid Weiss)
+
+* LUCENE-5170: Changed method signatures of Analyzer.ReuseStrategy to take
+ Analyzer. Closeable interface was removed because the class was changed to
+ be stateless. (Uwe Schindler, Robert Muir, Shay Banon)
+
+* LUCENE-5187: SlowCompositeReaderWrapper constructor is now private,
+ SlowCompositeReaderWrapper.wrap should be used instead. (Adrien Grand)
+
+* LUCENE-5101: CachingWrapperFilter doesn't always return FixedBitSet instances
+ anymore. Users of the join module can use
+ oal.search.join.FixedBitSetCachingWrapperFilter instead. (Adrien Grand)
+
+Build
+
+* SOLR-5159: Manifest includes non-parsed maven variables.
+ (Artem Karpenko via Steve Rowe)
+
+* LUCENE-5193: Add jar-src as top-level target to generate all Lucene and Solr
+ *-src.jar. (Steve Rowe, Shai Erera)
+
+======================= Lucene 4.4.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-5085: MorfologikFilter will no longer stem words marked as keywords
+ (Dawid Weiss, Grzegorz Sobczyk)
+
+* LUCENE-4955: NGramTokenFilter now emits all n-grams for the same token at the
+ same position and preserves the position length and the offsets of the
+ original token. (Simon Willnauer, Adrien Grand)
+
+* LUCENE-4955: NGramTokenizer now emits n-grams in a different order
+ (a, ab, b, bc, c) instead of (a, b, c, ab, bc) and doesn't trim trailing
+ whitespaces. (Adrien Grand)
+
+* LUCENE-5042: The n-gram and edge n-gram tokenizers and filters now correctly
+ handle supplementary characters, and the tokenizers have the ability to
+ pre-tokenize the input stream similarly to CharTokenizer. (Adrien Grand)
+
+* LUCENE-4967: NRTManager is replaced by
+ ControlledRealTimeReopenThread, for controlling which requests must
+ see which indexing changes, so that it can work with any
+ ReferenceManager (Mike McCandless)
+
+* LUCENE-4973: SnapshotDeletionPolicy no longer requires a unique
+ String id (Mike McCandless, Shai Erera)
+
+* LUCENE-4946: The internal sorting API (SorterTemplate, now Sorter) has been
+ completely refactored to allow for a better implementation of TimSort.
+ (Adrien Grand, Uwe Schindler, Dawid Weiss)
+
+* LUCENE-4963: Some TokenFilter options that generate broken TokenStreams have
+ been deprecated: updateOffsets=true on TrimFilter and
+ enablePositionIncrements=false on all classes that inherit from
+ FilteringTokenFilter: JapanesePartOfSpeechStopFilter, KeepWordFilter,
+ LengthFilter, StopFilter and TypeTokenFilter. (Adrien Grand)
+
+* LUCENE-4963: In order not to take position increments into account in
+ suggesters, you now need to call setPreservePositionIncrements(false) instead
+ of configuring the token filters to not increment positions. (Adrien Grand)
+
+* LUCENE-3907: EdgeNGramTokenizer now supports maxGramSize > 1024, doesn't trim
+ the input, sets position increment = 1 for all tokens and doesn't support
+ backward grams anymore. (Adrien Grand)
+
+* LUCENE-3907: EdgeNGramTokenFilter does not support backward grams and does
+ not update offsets anymore. (Adrien Grand)
+
+* LUCENE-4981: PositionFilter is now deprecated as it can corrupt token stream
+ graphs. Since it main use-case was to make query parsers generate boolean
+ queries instead of phrase queries, it is now advised to use
+ QueryParser.setAutoGeneratePhraseQueries(false) (for simple cases) or to
+ override QueryParser.newFieldQuery. (Adrien Grand, Steve Rowe)
+
+* LUCENE-5018: CompoundWordTokenFilterBase and its children
+ DictionaryCompoundWordTokenFilter and HyphenationCompoundWordTokenFilter don't
+ update offsets anymore. (Adrien Grand)
+
+* LUCENE-5015: SamplingAccumulator no longer corrects the counts of the sampled
+ categories. You should set TakmiSampleFixer on SamplingParams if required (but
+ notice that this means slower search). (Rob Audenaerde, Gilad Barkai, Shai Erera)
+
+* LUCENE-4933: Replace ExactSimScorer/SloppySimScorer with just SimScorer. Previously
+ there were 2 implementations as a performance hack to support tableization of
+ sqrt(), but this caching is removed, as sqrt is implemented in hardware with modern
+ jvms and it's faster not to cache. (Robert Muir)
+
+* LUCENE-5038: MergePolicy now has a default implementation for useCompoundFile based
+ on segment size and noCFSRatio. The default implementation was pulled up from
+ TieredMergePolicy. (Simon Willnauer)
+
+* LUCENE-5063: FieldCache.get(Bytes|Shorts), SortField.Type.(BYTE|SHORT) and
+ FieldCache.DEFAULT_(BYTE|SHORT|INT|LONG|FLOAT|DOUBLE)_PARSER are now
+ deprecated. These methods/types assume that data is stored as strings although
+ Lucene has much better support for numeric data through (Int|Long)Field,
+ NumericRangeQuery and FieldCache.get(Int|Long)s. (Adrien Grand)
+
+* LUCENE-5078: TfIDFSimilarity lets you encode the norm value as any arbitrary long.
+ As a result, encode/decodeNormValue were made abstract with their signatures changed.
+ The default implementation was moved to DefaultSimilarity, which encodes the norm as
+ a single-byte value. (Shai Erera)
+
+Bug Fixes
+
+* LUCENE-4890: QueryTreeBuilder.getBuilder() only finds interfaces on the
+ most derived class. (Adriano Crestani)
+
+* LUCENE-4997: Internal test framework's tests are sensitive to previous
+ test failures and tests.failfast. (Dawid Weiss, Shai Erera)
+
+* LUCENE-4955: NGramTokenizer now supports inputs larger than 1024 chars.
+ (Adrien Grand)
+
+* LUCENE-4959: Fix incorrect return value in
+ SimpleNaiveBayesClassifier.assignClass. (Alexey Kutin via Adrien Grand)
+
+* LUCENE-4972: DirectoryTaxonomyWriter created empty commits even if no changes
+ were made. (Shai Erera, Michael McCandless)
+
+* LUCENE-949: AnalyzingQueryParser can't work with leading wildcards.
+ (Tim Allison, Robert Muir, Steve Rowe)
+
+* LUCENE-4980: Fix issues preventing mixing of RangeFacetRequest and
+ non-RangeFacetRequest when using DrillSideways. (Mike McCandless,
+ Shai Erera)
+
+* LUCENE-4996: Ensure DocInverterPerField always includes field name
+ in exception messages. (Markus Jelsma via Robert Muir)
+
+* LUCENE-4992: Fix constructor of CustomScoreQuery to take FunctionQuery
+ for scoringQueries. Instead use QueryValueSource to safely wrap arbitrary
+ queries and use them with CustomScoreQuery. (John Wang, Robert Muir)
+
+* LUCENE-5016: SamplingAccumulator returned inconsistent label if asked to
+ aggregate a non-existing category. Also fixed a bug in RangeAccumulator if
+ some readers did not have the requested numeric DV field.
+ (Rob Audenaerde, Shai Erera)
+
+* LUCENE-5028: Remove pointless and confusing doShare option in FST's
+ PositiveIntOutputs (Han Jiang via Mike McCandless)
+
+* LUCENE-5032: Fix IndexOutOfBoundsExc in PostingsHighlighter when
+ multi-valued fields exceed maxLength (Tomás Fernández Löbbe
+ via Mike McCandless)
+
+* LUCENE-4933: SweetSpotSimilarity didn't apply its tf function to some
+ queries (SloppyPhraseQuery, SpanQueries). (Robert Muir)
+
+* LUCENE-5033: SlowFuzzyQuery was accepting too many terms (documents) when
+ provided minSimilarity is an int > 1 (Tim Allison via Mike McCandless)
+
+* LUCENE-5045: DrillSideways.search did not work on an empty index. (Shai Erera)
+
+* LUCENE-4995: CompressingStoredFieldsReader now only reuses an internal buffer
+ when there is no more than 32kb to decompress. This prevents from running
+ into out-of-memory errors when working with large stored fields.
+ (Adrien Grand)
+
+* LUCENE-5062: If the spatial data for a document was comprised of multiple
+ overlapping or adjacent parts then a CONTAINS predicate query might not match
+ when the sum of those shapes contain the query shape but none do individually.
+ A flag was added to use the original faster algorithm. (David Smiley)
+
+* LUCENE-4971: Fixed NPE in AnalyzingSuggester when there are too many
+ graph expansions. (Alexey Kudinov via Mike McCandless)
+
+* LUCENE-5080: Combined setMaxMergeCount and setMaxThreadCount into one
+ setter in ConcurrentMergePolicy: setMaxMergesAndThreads. Previously these
+ setters would not work unless you invoked them very carefully.
+ (Robert Muir, Shai Erera)
+
+* LUCENE-5068: QueryParserUtil.escape() does not escape forward slash.
+ (Matias Holte via Steve Rowe)
+
+* LUCENE-5103: A join on A single-valued field with deleted docs scored too few
+ docs. (David Smiley)
+
+* LUCENE-5090: Detect mismatched readers passed to
+ SortedSetDocValuesReaderState and SortedSetDocValuesAccumulator.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-5120: AnalyzingSuggester modified its FST's cached root arc if payloads
+ are used and the entire output resided on the root arc on the first access. This
+ caused subsequent suggest calls to fail. (Simon Willnauer)
+
+Optimizations
+
+* LUCENE-4936: Improve numeric doc values compression in case all values share
+ a common divisor. In particular, this improves the compression ratio of dates
+ without time when they are encoded as milliseconds since Epoch. Also support
+ TABLE compressed numerics in the Disk codec. (Robert Muir, Adrien Grand)
+
+* LUCENE-4951: DrillSideways uses the new Scorer.cost() method to make
+ better decisions about which scorer to use internally. (Mike McCandless)
+
+* LUCENE-4976: PersistentSnapshotDeletionPolicy writes its state to a
+ single snapshots_N file, and no longer requires closing (Mike
+ McCandless, Shai Erera)
+
+* LUCENE-5035: Compress addresses in FieldCacheImpl.SortedDocValuesImpl more
+ efficiently. (Adrien Grand, Robert Muir)
+
+* LUCENE-4941: Sort "from" terms only once when using JoinUtil.
+ (Martijn van Groningen)
+
+* LUCENE-5050: Close the stored fields and term vectors index files as soon as
+ the index has been loaded into memory to save file descriptors. (Adrien Grand)
+
+* LUCENE-5086: RamUsageEstimator now uses official Java 7 API or a proprietary
+ Oracle Java 6 API to get Hotspot MX bean, preventing AWT classes to be
+ loaded on MacOSX. (Shay Banon, Dawid Weiss, Uwe Schindler)
+
+New Features
+
+* LUCENE-5085: MorfologikFilter will no longer stem words marked as keywords
+ (Dawid Weiss, Grzegorz Sobczyk)
+
+* LUCENE-5064: Added PagedMutable (internal), a paged extension of
+ PackedInts.Mutable which allows for storing more than 2B values. (Adrien Grand)
+
+* LUCENE-4766: Added a PatternCaptureGroupTokenFilter that uses Java regexes to
+ emit multiple tokens one for each capture group in one or more patterns.
+ (Simon Willnauer, Clinton Gormley)
+
+* LUCENE-4952: Expose control (protected method) in DrillSideways to
+ force all sub-scorers to be on the same document being collected.
+ This is necessary when using collectors like
+ ToParentBlockJoinCollector with DrillSideways. (Mike McCandless)
+
+* SOLR-4761: Add SimpleMergedSegmentWarmer, which just initializes terms,
+ norms, docvalues, and so on. (Mark Miller, Mike McCandless, Robert Muir)
+
+* LUCENE-4964: Allow arbitrary Query for per-dimension drill-down to
+ DrillDownQuery and DrillSideways, to support future dynamic faceting
+ methods (Mike McCandless)
+
+* LUCENE-4966: Add CachingWrapperFilter.sizeInBytes() (Mike McCandless)
+
+* LUCENE-4965: Add dynamic (no taxonomy index used) numeric range
+ faceting to Lucene's facet module (Mike McCandless, Shai Erera)
+
+* LUCENE-4979: LiveFieldFields can work with any ReferenceManager, not
+ just ReferenceManager<IndexSearcher> (Mike McCandless).
+
+* LUCENE-4975: Added a new Replicator module which can replicate index
+ revisions between server and client. (Shai Erera, Mike McCandless)
+
+* LUCENE-5022: Added FacetResult.mergeHierarchies to merge multiple
+ FacetResult of the same dimension into a single one with the reconstructed
+ hierarchy. (Shai Erera)
+
+* LUCENE-5026: Added PagedGrowableWriter, a new internal packed-ints structure
+ that grows the number of bits per value on demand, can store more than 2B
+ values and supports random write and read access. (Adrien Grand)
+
+* LUCENE-5025: FST's Builder can now handle more than 2.1 billion
+ "tail nodes" while building a minimal FST. (Aaron Binns, Adrien
+ Grand, Mike McCandless)
+
+* LUCENE-5063: FieldCache.DEFAULT.get(Ints|Longs) now uses bit-packing to save
+ memory. (Adrien Grand)
+
+* LUCENE-5079: IndexWriter.hasUncommittedChanges() returns true if there are
+ changes that have not been committed. (yonik, Mike McCandless, Uwe Schindler)
+
+* SOLR-4565: Extend NorwegianLightStemFilter and NorwegianMinimalStemFilter
+ to handle "nynorsk" (Erlend Garåsen, janhoy via Robert Muir)
+
+* LUCENE-5087: Add getMultiValuedSeparator to PostingsHighlighter, for cases
+ where you want a different logical separator between field values. This can
+ be set to e.g. U+2029 PARAGRAPH SEPARATOR if you never want passes to span
+ values. (Mike McCandless, Robert Muir)
+
+* LUCENE-5013: Added ScandinavianFoldingFilterFactory and
+ ScandinavianNormalizationFilterFactory (Karl Wettin via janhoy)
+
+* LUCENE-4845: AnalyzingInfixSuggester finds suggestions based on
+ matches to any tokens in the suggestion, not just based on pure
+ prefix matching. (Mike McCandless, Robert Muir)
+
+API Changes
+
+* LUCENE-5077: Make it easier to use compressed norms. Lucene42NormsFormat takes
+ an overhead parameter, so you can easily pass a different value other than
+ PackedInts.FASTEST from your own codec. (Robert Muir)
+
+* LUCENE-5097: Analyzer now has an additional tokenStream(String fieldName,
+ String text) method, so wrapping by StringReader for common use is no
+ longer needed. This method uses an internal reusable reader, which was
+ previously only used by the Field class. (Uwe Schindler, Robert Muir)
+
+* LUCENE-4542: HunspellStemFilter's maximum recursion level is now configurable.
+ (Piotr, Rafał Kuć via Adrien Grand)
+
+Build
+
+* LUCENE-4987: Upgrade randomized testing to version 2.0.10:
+ Test framework may fail internally due to overly aggressive J9 optimizations.
+ (Dawid Weiss, Shai Erera)
+
+* LUCENE-5043: The eclipse target now uses the containing directory for the
+ project name. This also enforces UTF-8 encoding when files are copied with
+ filtering.
+
+* LUCENE-5055: "rat-sources" target now checks also build.xml, ivy.xml,
+ forbidden-api signatures, and parts of resources folders. (Ryan Ernst,
+ Uwe Schindler)
+
+* LUCENE-5072: Automatically patch javadocs generated by JDK versions
+ before 7u25 to work around the frame injection vulnerability (CVE-2013-1571,
+ VU#225657). (Uwe Schindler)
+
+Tests
+
+* LUCENE-4901: TestIndexWriterOnJRECrash should work on any
+ JRE vendor via Runtime.halt().
+ (Mike McCandless, Robert Muir, Uwe Schindler, Rodrigo Trujillo, Dawid Weiss)
+
+Changes in runtime behavior
+
+* LUCENE-5038: New segments written by IndexWriter are now wrapped into CFS
+ by default. DocumentsWriterPerThread doesn't consult MergePolicy anymore
+ to decide if a CFS must be written, instead IndexWriterConfig now has a
+ property to enable / disable CFS for newly created segments. (Simon Willnauer)
+
+* LUCENE-5107: Properties files by Lucene are now written in UTF-8 encoding,
+ Unicode is no longer escaped. Reading of legacy properties files with
+ \u escapes is still possible. (Uwe Schindler, Robert Muir)
+
+======================= Lucene 4.3.1 =======================
+
+Bug Fixes
+
+* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
+ tokenizer factory used when parsing synonyms file. (Shingo Sasaki, hossman)
+
+* LUCENE-4935: CustomScoreQuery wrongly applied its query boost twice
+ (boost^2). (Robert Muir)
+
+* LUCENE-4948: Fixed ArrayIndexOutOfBoundsException in PostingsHighlighter
+ if you had a 64-bit JVM without compressed OOPS: IBM J9, or Oracle with
+ large heap/explicitly disabled. (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-4953: Fixed ParallelCompositeReader to inform ReaderClosedListeners of
+ its synthetic subreaders. FieldCaches keyed on the atomic children will be purged
+ earlier and FC insanity prevented. In addition, ParallelCompositeReader's
+ toString() was changed to better reflect the reader structure.
+ (Mike McCandless, Uwe Schindler)
+
+* LUCENE-4968: Fixed ToParentBlockJoinQuery/Collector: correctly handle parent
+ hits that had no child matches, don't throw IllegalArgumentEx when
+ the child query has no hits, more aggressively catch cases where childQuery
+ incorrectly matches parent documents (Mike McCandless)
+
+* LUCENE-4970: Fix boost value of rewritten NGramPhraseQuery.
+ (Shingo Sasaki via Adrien Grand)
+
+* LUCENE-4974: CommitIndexTask was broken if no params were set. (Shai Erera)
+
+* LUCENE-4986: Fixed case where a newly opened near-real-time reader
+ fails to reflect a delete from IndexWriter.tryDeleteDocument (Reg,
+ Mike McCandless)
+
+* LUCENE-4994: Fix PatternKeywordMarkerFilter to have public constructor.
+ (Uwe Schindler)
+
+* LUCENE-4993: Fix BeiderMorseFilter to preserve custom attributes when
+ inserting tokens with position increment 0. (Uwe Schindler)
+
+* LUCENE-4991: Fix handling of synonyms in classic QueryParser.getFieldQuery for
+ terms not separated by whitespace. PositionIncrementAttribute was ignored, so with
+ default AND synonyms wrongly became mandatory clauses, and with OR, the
+ coordination factor was wrong. (æŽå¨, Robert Muir)
+
+* LUCENE-5002: IndexWriter#deleteAll() caused a deadlock in DWPT / DWSC if a
+ DwPT was flushing concurrently while deleteAll() aborted all DWPT. The IW
+ should never wait on DWPT via the flush control while holding on to the IW
+ Lock. (Simon Willnauer)
+
+Optimizations
+
+* LUCENE-4938: Don't use an unnecessarily large priority queue in IndexSearcher
+ methods that take top-N. (Uwe Schindler, Mike McCandless, Robert Muir)
+
+
+======================= Lucene 4.3.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4810: EdgeNGramTokenFilter no longer increments position for
+ multiple ngrams derived from the same input token. (Walter Underwood
+ via Mike McCandless)
+
+* LUCENE-4822: KeywordTokenFilter is now an abstract class. Subclasses
+ need to implement #isKeyword() in order to mark terms as keywords.
+ The existing functionality has been factored out into a new
+ SetKeywordTokenFilter class. (Simon Willnauer, Uwe Schindler)
+
+* LUCENE-4642: Remove Tokenizer's and subclasses' ctors taking
+ AttributeSource. (Renaud Delbru, Uwe Schindler, Steve Rowe)
+
+* LUCENE-4833: IndexWriterConfig used to use LogByteSizeMergePolicy when
+ calling setMergePolicy(null) although the default merge policy is
+ TieredMergePolicy. IndexWriterConfig setters now throw an exception when
+ passed null if null is not a valid value. (Adrien Grand)
+
+* LUCENE-4849: Made ParallelTaxonomyArrays abstract with a concrete
+ implementation for DirectoryTaxonomyWriter/Reader. Also moved it under
+ o.a.l.facet.taxonomy. (Shai Erera)
+
+* LUCENE-4876: IndexDeletionPolicy is now an abstract class instead of an
+ interface. IndexDeletionPolicy, MergeScheduler and InfoStream now implement
+ Cloneable. (Adrien Grand)
+
+* LUCENE-4874: FilterAtomicReader and related classes (FilterTerms,
+ FilterDocsEnum, ...) don't forward anymore to the filtered instance when the
+ method has a default implementation through other abstract methods.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-4642, LUCENE-4877: Implementors of TokenizerFactory, TokenFilterFactory,
+ and CharFilterFactory now need to provide at least one constructor taking
+ Map<String,String> to be able to be loaded by the SPI framework (e.g., from Solr).
+ In addition, TokenizerFactory needs to implement the abstract
+ create(AttributeFactory,Reader) method. (Renaud Delbru, Uwe Schindler,
+ Steve Rowe, Robert Muir)
+
+API Changes
+
+* LUCENE-4896: Made PassageFormatter abstract in PostingsHighlighter, made
+ members of DefaultPassageFormatter protected. (Luca Cavanna via Robert Muir)
+
+* LUCENE-4844: removed TaxonomyReader.getParent(), you should use
+ TaxonomyReader.getParallelArrays().parents() instead. (Shai Erera)
+
+* LUCENE-4742: Renamed spatial 'Node' to 'Cell', along with any method names
+ and variables using this terminology. (David Smiley)
+
+New Features
+
+* LUCENE-4815: DrillSideways now allows more than one FacetRequest per
+ dimension (Mike McCandless)
+
+* LUCENE-3918: IndexSorter has been ported to 4.3 API and now supports
+ sorting documents by a numeric DocValues field, or reverse the order of
+ the documents in the index. Additionally, apps can implement their own
+ sort criteria. (Anat Hashavit, Shai Erera)
+
+* LUCENE-4817: Added KeywordRepeatFilter that allows to emit a token twice
+ once as a keyword and once as an ordinary token allow stemmers to emit
+ a stemmed version along with the un-stemmed version. (Simon Willnauer)
+
+* LUCENE-4822: PatternKeywordTokenFilter can mark tokens as keywords based
+ on regular expressions. (Simon Willnauer, Uwe Schindler)
+
+* LUCENE-4821: AnalyzingSuggester now uses the ending offset to
+ determine whether the last token was finished or not, so that a
+ query "i " will no longer suggest "Isla de Muerta" for example.
+ (Mike McCandless)
+
+* LUCENE-4642: Add create(AttributeFactory) to TokenizerFactory and
+ subclasses with ctors taking AttributeFactory.
+ (Renaud Delbru, Uwe Schindler, Steve Rowe)
+
+* LUCENE-4820: Add payloads to Analyzing/FuzzySuggester, to record an
+ arbitrary byte[] per suggestion (Mike McCandless)
+
+* LUCENE-4816: Add WholeBreakIterator to PostingsHighlighter
+ for treating the entire content as a single Passage. (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-4827: Add additional ctor to PostingsHighlighter PassageScorer
+ to provide bm25 k1,b,avgdl parameters. (Robert Muir)
+
+* LUCENE-4607: Add DocIDSetIterator.cost() and Spans.cost() for optimizing
+ scoring. (Simon Willnauer, Robert Muir)
+
+* LUCENE-4795: Add SortedSetDocValuesFacetFields and
+ SortedSetDocValuesAccumulator, to compute topK facet counts from a
+ field's SortedSetDocValues. This method only supports flat
+ (dim/label) facets, is a bit (~25%) slower, has added cost
+ per-IndexReader-open to compute its ordinal map, but it requires no
+ taxonomy index and it tie-breaks facet labels in an understandable
+ (by Unicode sort order) way. (Robert Muir, Mike McCandless)
+
+* LUCENE-4843: Add LimitTokenPositionFilter: don't emit tokens with
+ positions that exceed the configured limit. (Steve Rowe)
+
+* LUCENE-4832: Add ToParentBlockJoinCollector.getTopGroupsWithAllChildDocs, to retrieve
+ all children in each group. (Aleksey Aleev via Mike McCandless)
+
+* LUCENE-4846: PostingsHighlighter subclasses can override where the
+ String values come from (it still defaults to pulling from stored
+ fields). (Robert Muir, Mike McCandless)
+
+* LUCENE-4853: Add PostingsHighlighter.highlightFields method that
+ takes int[] docIDs instead of TopDocs. (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-4856: If there are no matches for a given field, return the
+ first maxPassages sentences (Robert Muir, Mike McCandless)
+
+* LUCENE-4859: IndexReader now exposes Terms statistics: getDocCount,
+ getSumDocFreq, getSumTotalTermFreq. (Shai Erera)
+
+* LUCENE-4862: It is now possible to terminate collection of a single
+ IndexReader leaf by throwing a CollectionTerminatedException in
+ Collector.collect. (Adrien Grand, Shai Erera)
+
+* LUCENE-4752: New SortingMergePolicy (in lucene/misc) that sorts documents
+ before merging segments. (Adrien Grand, Shai Erera, David Smiley)
+
+* LUCENE-4860: Customize scoring and formatting per-field in
+ PostingsHighlighter by subclassing and overriding the getFormatter
+ and/or getScorer methods. This also changes Passage.getMatchTerms()
+ to return BytesRef[] instead of Term[]. (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-4839: Added SorterTemplate.timSort, a O(n log n) stable sort algorithm
+ that performs well on partially sorted data. (Adrien Grand)
+
+* LUCENE-4644: Added support for the "IsWithin" spatial predicate for
+ RecursivePrefixTreeStrategy. It's for matching non-point indexed shapes; if
+ you only have points (1/doc) then "Intersects" is equivalent and faster.
+ See the javadocs. (David Smiley)
+
+* LUCENE-4861: Make BreakIterator per-field in PostingsHighlighter. This means
+ you can override getBreakIterator(String field) to use different mechanisms
+ for e.g. title vs. body fields. (Mike McCandless, Robert Muir)
+
+* LUCENE-4645: Added support for the "Contains" spatial predicate for
+ RecursivePrefixTreeStrategy. (David Smiley)
+
+* LUCENE-4898: DirectoryReader.openIfChanged now allows opening a reader
+ on an IndexCommit starting from a near-real-time reader (previously
+ this would throw IllegalArgumentException). (Mike McCandless)
+
+* LUCENE-4905: Made the maxPassages parameter per-field in PostingsHighlighter.
+ (Robert Muir)
+
+* LUCENE-4897: Added TaxonomyReader.getChildren for traversing a category's
+ children. (Shai Erera)
+
+* LUCENE-4902: Added FilterDirectoryReader to allow easy filtering of a
+ DirectoryReader's subreaders. (Alan Woodward, Adrien Grand, Uwe Schindler)
+
+* LUCENE-4858: Added EarlyTerminatingSortingCollector to be used in conjunction
+ with SortingMergePolicy, which allows to early terminate queries on sorted
+ indexes, when the sort order matches the index order. (Adrien Grand, Shai Erera)
+
+* LUCENE-4904: Added descending sort order to NumericDocValuesSorter. (Shai Erera)
+
+* LUCENE-3786: Added SearcherTaxonomyManager, to manage access to both
+ IndexSearcher and DirectoryTaxonomyReader for near-real-time
+ faceting. (Shai Erera, Mike McCandless)
+
+* LUCENE-4915: DrillSideways now allows drilling down on fields that
+ are not faceted. (Mike McCandless)
+
+* LUCENE-4895: Added support for the "IsDisjointTo" spatial predicate for
+ RecursivePrefixTreeStrategy. (David Smiley)
+
+* LUCENE-4774: Added FieldComparator that allows sorting parent documents based on
+ fields on the child / nested document level. (Martijn van Groningen)
+
+Optimizations
+
+* LUCENE-4839: SorterTemplate.merge can now be overridden in order to replace
+ the default implementation which merges in-place by a faster implementation
+ that could require fewer swaps at the expense of some extra memory.
+ ArrayUtil and CollectionUtil override it so that their mergeSort and timSort
+ methods are faster but only require up to 1% of extra memory. (Adrien Grand)
+
+* LUCENE-4571: Speed up BooleanQuerys with minNrShouldMatch to use
+ skipping. (Stefan Pohl via Robert Muir)
+
+* LUCENE-4863: StemmerOverrideFilter now uses a FST to represent its overrides
+ in memory. (Simon Willnauer)
+
+* LUCENE-4889: UnicodeUtil.codePointCount implementation replaced with a
+ non-array-lookup version. (Dawid Weiss)
+
+* LUCENE-4923: Speed up BooleanQuerys processing of in-order disjunctions.
+ (Robert Muir)
+
+* LUCENE-4926: Speed up DisjunctionMatchQuery. (Robert Muir)
+
+* LUCENE-4930: Reduce contention in older/buggy JVMs when using
+ AttributeSource#addAttribute() because java.lang.ref.ReferenceQueue#poll()
+ is implemented using synchronization. (Christian Ziech, Karl Wright,
+ Uwe Schindler)
+
+Bug Fixes
+
+* LUCENE-4868: SumScoreFacetsAggregator used an incorrect index into
+ the scores array. (Shai Erera)
+
+* LUCENE-4882: FacetsAccumulator did not allow to count ROOT category (i.e.
+ count dimensions). (Shai Erera)
+
+* LUCENE-4876: IndexWriterConfig.clone() now clones its MergeScheduler,
+ IndexDeletionPolicy and InfoStream in order to make an IndexWriterConfig and
+ its clone fully independent. (Adrien Grand)
+
+* LUCENE-4893: Facet counts were multiplied as many times as
+ FacetsCollector.getFacetResults() is called. (Shai Erera)
+
+* LUCENE-4888: Fixed SloppyPhraseScorer, MultiDocs(AndPositions)Enum and
+ MultiSpansWrapper which happened to sometimes call DocIdSetIterator.advance
+ with target<=current (in this case the behavior of advance is undefined).
+ (Adrien Grand)
+
+* LUCENE-4899: FastVectorHighlighter failed with StringIndexOutOfBoundsException
+ if a single highlight phrase or term was greater than the fragCharSize producing
+ negative string offsets. (Simon Willnauer)
+
+* LUCENE-4877: Throw exception for invalid arguments in analysis factories.
+ (Steve Rowe, Uwe Schindler, Robert Muir)
+
+* LUCENE-4914: SpatialPrefixTree's Node/Cell.reset() forgot to reset the 'leaf'
+ flag. It affects SpatialRecursivePrefixTreeStrategy on non-point indexed
+ shapes, as of Lucene 4.2. (David Smiley)
+
+* LUCENE-4913: FacetResultNode.ordinal was always 0 when all children
+ are returned. (Mike McCandless)
+
+* LUCENE-4918: Highlighter closes the given IndexReader if QueryScorer
+ is used with an external IndexReader. (Simon Willnauer, Sirvan Yahyaei)
+
+* LUCENE-4880: Fix MemoryIndex to consume empty terms from the tokenstream consistent
+ with IndexWriter. Previously it discarded them. (Timothy Allison via Robert Muir)
+
+* LUCENE-4885: FacetsAccumulator did not set the correct value for
+ FacetResult.numValidDescendants. (Mike McCandless, Shai Erera)
+
+* LUCENE-4925: Fixed IndexSearcher.search when the argument list contains a Sort
+ and one of the sort fields is the relevance score. Only IndexSearchers created
+ with an ExecutorService are concerned. (Adrien Grand)
+
+* LUCENE-4738, LUCENE-2727, LUCENE-2812: Simplified
+ DirectoryReader.indexExists so that it's more robust to transient
+ IOExceptions (e.g. due to issues like file descriptor exhaustion),
+ but this will also cause it to err towards returning true for
+ example if the directory contains a corrupted index or an incomplete
+ initial commit. In addition, IndexWriter with OpenMode.CREATE will
+ now succeed even if the directory contains a corrupted index (Billow
+ Gao, Robert Muir, Mike McCandless)
+
+* LUCENE-4928: Stored fields and term vectors could become super slow in case
+ of tiny documents (a few bytes). This is especially problematic when switching
+ codecs since bulk-merge strategies can't be applied and the same chunk of
+ documents can end up being decompressed thousands of times. A hard limit on
+ the number of documents per chunk has been added to fix this issue.
+ (Robert Muir, Adrien Grand)
+
+* LUCENE-4934: Fix minor equals/hashcode problems in facet/DrillDownQuery,
+ BoostingQuery, MoreLikeThisQuery, FuzzyLikeThisQuery, and block join queries.
+ (Robert Muir, Uwe Schindler)
+
+* LUCENE-4504: Fix broken sort comparator in ValueSource.getSortField,
+ used when sorting by a function query. (Tom Shally via Robert Muir)
+
+* LUCENE-4937: Fix incorrect sorting of float/double values (+/-0, NaN).
+ (Robert Muir, Uwe Schindler)
+
+Documentation
+
+* LUCENE-4841: Added example SimpleSortedSetFacetsExample to show how
+ to use the new SortedSetDocValues backed facet implementation.
+ (Shai Erera, Mike McCandless)
+
+Build
+
+* LUCENE-4879: Upgrade randomized testing to version 2.0.9:
+ Filter stack traces on console output. (Dawid Weiss, Robert Muir)
+
+
+======================= Lucene 4.2.1 =======================
+
+Bug Fixes
+
+* LUCENE-4713: The SPI components used to load custom codecs or analysis
+ components were fixed to also scan the Lucene ClassLoader in addition
+ to the context ClassLoader, so Lucene is always able to find its own
+ codecs. The special case of a null context ClassLoader is now also
+ supported. (Christian Kohlschütter, Uwe Schindler)
+
+* LUCENE-4819: seekExact(BytesRef, boolean) did not work correctly with
+ Sorted[Set]DocValuesTermsEnum. (Robert Muir)
+
+* LUCENE-4826: PostingsHighlighter was not returning the top N best
+ scoring passages. (Robert Muir, Mike McCandless)
+
+* LUCENE-4854: Fix DocTermOrds.getOrdTermsEnum() to not return negative
+ ord on initial next(). (Robert Muir)
+
+* LUCENE-4836: Fix SimpleRateLimiter#pause to return the actual time spent
+ sleeping instead of the wakeup timestamp in nano seconds. (Simon Willnauer)
+
+* LUCENE-4828: BooleanQuery no longer extracts terms from its MUST_NOT
+ clauses. (Mike McCandless)
+
+* SOLR-4589: Fixed CPU spikes and poor performance in lazy field loading
+ of multivalued fields. (hossman)
+
+* LUCENE-4870: Fix bug where an entire index might be deleted by the IndexWriter
+ due to false detection if an index exists in the directory when
+ OpenMode.CREATE_OR_APPEND is used. This might also affect application that set
+ the open mode manually using DirectoryReader#indexExists. (Simon Willnauer)
+
+* LUCENE-4878: Override getRegexpQuery in MultiFieldQueryParser to prevent
+ NullPointerException when regular expression syntax is used with
+ MultiFieldQueryParser. (Simon Willnauer, Adam Rauch)
+
+Optimizations
+
+* LUCENE-4819: Added Sorted[Set]DocValues.termsEnum(), and optimized the
+ default codec for improved enumeration performance. (Robert Muir)
+
+* LUCENE-4854: Speed up TermsEnum of FieldCache.getDocTermOrds.
+ (Robert Muir)
+
+* LUCENE-4857: Don't unnecessarily copy stem override map in
+ StemmerOverrideFilter. (Simon Willnauer)
+
+======================= Lucene 4.2.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4602: FacetFields now stores facet ordinals in a DocValues field,
+ rather than a payload. This forces rebuilding existing indexes, or do a
+ one time migration using FacetsPayloadMigratingReader. Since DocValues
+ support in-memory caching, CategoryListCache was removed too.
+ (Shai Erera, Michael McCandless)
+
+* LUCENE-4697: FacetResultNode is now a concrete class with public members
+ (instead of getter methods). (Shai Erera)
+
+* LUCENE-4600: FacetsCollector is now an abstract class with two
+ implementations: StandardFacetsCollector (the old version of
+ FacetsCollector) and CountingFacetsCollector. FacetsCollector.create()
+ returns the most optimized collector for the given parameters.
+ (Shai Erera, Michael McCandless)
+
+* LUCENE-4700: OrdinalPolicy is now per CategoryListParams, and is no longer
+ an interface, but rather an enum with values NO_PARENTS and ALL_PARENTS.
+ PathPolicy was removed, you should extend FacetFields and DrillDownStream
+ to control which categories are added as drill-down terms. (Shai Erera)
+
+* LUCENE-4547: DocValues improvements:
+ - Simplified codec API: codecs are now only responsible for encoding and
+ decoding docvalues, they do not need to do buffering or RAM accounting.
+ - Per-Field support: added PerFieldDocValuesFormat, which allows you to
+ use a different DocValuesFormat per field (like postings).
+ - Unified with FieldCache api: DocValues can be accessed via FieldCache API,
+ so it works automatically with grouping/join/sort/function queries, etc.
+ - Simplified types: There are only 3 types (NUMERIC, BINARY, SORTED), so it's
+ not necessary to specify for example that all of your binary values have
+ the same length. Instead it's easy for the Codec API to optimize encoding
+ based on any properties of the content.
+ (Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)
+
+* LUCENE-4757: Cleanup and refactoring of FacetsAccumulator, FacetRequest,
+ FacetsAggregator and FacetResultsHandler API. If your application did
+ FacetsCollector.create(), you should not be affected, but if you wrote
+ an Aggregator, then you should migrate it to the per-segment
+ FacetsAggregator. You can still use StandardFacetsAccumulator, which works
+ with the old API (for now). (Shai Erera)
+
+* LUCENE-4761: Facet packages reorganized. Should be easy to fix your import
+ statements, if you use an IDE such as Eclipse. (Shai Erera)
+
+* LUCENE-4750: Convert DrillDown to DrillDownQuery, so you can initialize it
+ and add drill-down categories to it. (Michael McCandless, Shai Erera)
+
+* LUCENE-4759: remove FacetRequest.SortBy; result categories are always
+ sorted by value, while ties are broken by category ordinal. (Shai Erera)
+
+* LUCENE-4772: Facet associations moved to new FacetsAggregator API. You
+ should override FacetsAccumulator and return the relevant aggregator,
+ for aggregating the association values. (Shai Erera)
+
+* LUCENE-4748: A FacetRequest on a non-existent field now returns an
+ empty FacetResult instead of skipping it. (Shai Erera, Mike McCandless)
+
+* LUCENE-4806: The default category delimiter character was changed
+ from U+F749 to U+001F, since the latter uses 1 byte vs 3 bytes for
+ the former. Existing facet indices must be reindexed. (Robert
+ Muir, Shai Erera, Mike McCandless)
+
+Optimizations
+
+* LUCENE-4687: BloomFilterPostingsFormat now lazily initializes delegate
+ TermsEnum only if needed to do a seek or get a DocsEnum. (Simon Willnauer)
+
+* LUCENE-4677, LUCENE-4682: unpacked FSTs now use vInt to encode the node target,
+ to reduce their size (Mike McCandless)
+
+* LUCENE-4678: FST now uses a paged byte[] structure instead of a
+ single byte[] internally, to avoid large memory spikes during
+ building (James Dyer, Mike McCandless)
+
+* LUCENE-3298: FST can now be larger than 2.1 GB / 2.1 B nodes.
+ (James Dyer, Mike McCandless)
+
+* LUCENE-4690: Performance improvements and non-hashing versions
+ of NumericUtils.*ToPrefixCoded() (yonik)
+
+* LUCENE-4715: CategoryListParams.getOrdinalPolicy now allows to return a
+ different OrdinalPolicy per dimension, to better tune how you index
+ facets. Also added OrdinalPolicy.ALL_BUT_DIMENSION.
+ (Shai Erera, Michael McCandless)
+
+* LUCENE-4740: Don't track clones of MMapIndexInput if unmapping
+ is disabled. This reduces GC overhead. (Kristofer Karlsson, Uwe Schindler)
+
+* LUCENE-4733: The default Lucene 4.2 codec now uses a more compact
+ TermVectorsFormat (Lucene42TermVectorsFormat) based on
+ CompressingTermVectorsFormat. (Adrien Grand)
+
+* LUCENE-3729: The default Lucene 4.2 codec now uses a more compact
+ DocValuesFormat (Lucene42DocValuesFormat). Sorted values are stored in an
+ FST, Numerics and Ordinals use a number of strategies (delta-compression,
+ table-compression, etc), and memory addresses use MonotonicBlockPackedWriter.
+ (Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)
+
+* LUCENE-4792: Reduction of the memory required to build the doc ID maps used
+ when merging segments. (Adrien Grand)
+
+* LUCENE-4794: Spatial RecursivePrefixTreeStrategy's search filter: Skip calls
+ to termsEnum.seek() when the next term is known to follow the current cell.
+ (David Smiley)
+
+New Features
+
+* LUCENE-4686: New specialized DGapVInt8IntEncoder for facets (now the
+ default). (Shai Erera)
+
+* LUCENE-4703: Add simple PrintTaxonomyStats tool to see summary
+ information about the facets taxonomy index. (Mike McCandless)
+
+* LUCENE-4599: New oal.codecs.compressing.CompressingTermVectorsFormat which
+ compresses term vectors into chunks of documents similarly to
+ CompressingStoredFieldsFormat. (Adrien Grand)
+
+* LUCENE-4695: Added LiveFieldValues utility class, for getting the
+ current (live, real-time) value for any indexed doc/field. The
+ class buffers recently indexed doc/field values until a new
+ near-real-time reader is opened that contains those changes.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-4723: Add AnalyzerFactoryTask to benchmark, and enable analyzer
+ creation via the resulting factories using NewAnalyzerTask. (Steve Rowe)
+
+* LUCENE-4728: Unknown and not explicitly mapped queries are now rewritten
+ against the highlighting IndexReader to obtain primitive queries before
+ discarding the query entirely. WeightedSpanTermExtractor now builds a
+ MemoryIndex only once even if multiple fields are highlighted.
+ (Simon Willnauer)
+
+* LUCENE-4035: Added ICUCollationDocValuesField, more efficient
+ support for Locale-sensitive sort and range queries for
+ single-valued fields. (Robert Muir)
+
+* LUCENE-4547: Added MonotonicBlockPacked(Reader/Writer), which provide
+ efficient random access to large amounts of monotonically increasing
+ positive values (e.g. file offsets). Each block stores the minimum value
+ and the average gap, and values are encoded as signed deviations from
+ the expected value. (Adrien Grand)
+
+* LUCENE-4547: Added AppendingLongBuffer, an append-only buffer that packs
+ signed long values in memory and provides an efficient iterator API.
+ (Adrien Grand)
+
+* LUCENE-4540: It is now possible for a codec to represent norms with
+ less than 8 bits per value. For performance reasons this is not done
+ by default, but you can customize your codec (e.g. pass PackedInts.DEFAULT
+ to Lucene42DocValuesConsumer) if you want to make this tradeoff.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-4764: A new Facet42Codec and Facet42DocValuesFormat provide
+ faster but more RAM-consuming facet performance. (Shai Erera, Mike
+ McCandless)
+
+* LUCENE-4769: Added OrdinalsCache and CachedOrdsCountingFacetsAggregator
+ which uses the cache to obtain a document's ordinals. This aggregator
+ is faster than others, however consumes much more RAM.
+ (Michael McCandless, Shai Erera)
+
+* LUCENE-4778: Add a getter for the delegate in RateLimitedDirectoryWrapper.
+ (Mark Miller)
+
+* LUCENE-4765: Add a multi-valued docvalues type (SORTED_SET). This is equivalent
+ to building a FieldCache.getDocTermOrds at index-time. (Robert Muir)
+
+* LUCENE-4780: Add MonotonicAppendingLongBuffer: an append-only buffer for
+ monotonically increasing values. (Adrien Grand)
+
+* LUCENE-4748: Added DrillSideways utility class for computing both
+ drill-down and drill-sideways counts for a DrillDownQuery. (Mike
+ McCandless)
+
+API Changes
+
+* LUCENE-4709: FacetResultNode no longer has a residue field. (Shai Erera)
+
+* LUCENE-4716: DrillDown.query now takes Occur, allowing to specify if
+ categories should be OR'ed or AND'ed. (Shai Erera)
+
+* LUCENE-4695: ReferenceManager.RefreshListener.afterRefresh now takes
+ a boolean indicating whether a new reference was in fact opened, and
+ a new beforeRefresh method notifies you when a refresh attempt is
+ starting. (Robert Muir, Mike McCandless)
+
+* LUCENE-4794: Spatial RecursivePrefixTreeFilter replaced by
+ IntersectsPrefixTreeFilter and some extensible base classes. (David Smiley)
+
+Bug Fixes
+
+* LUCENE-4705: Pass on FilterStrategy in FilteredQuery if the filtered query is
+ rewritten. (Simon Willnauer)
+
+* LUCENE-4712: MemoryIndex#normValues() throws NPE if field doesn't exist.
+ (Simon Willnauer, Ricky Pritchett)
+
+* LUCENE-4550: Shapes wider than 180 degrees would use too much accuracy for the
+ PrefixTree based SpatialStrategy. For a pathological case of nearly 360
+ degrees and barely any height, it would generate so many indexed terms
+ (> 500k) that it could even cause an OutOfMemoryError. Fixed. (David Smiley)
+
+* LUCENE-4704: Make join queries override hashcode and equals methods.
+ (Martijn van Groningen)
+
+* LUCENE-4724: Fix bug in CategoryPath which allowed passing null or empty
+ string components. This is forbidden now (throws an exception). Note that if
+ you have a taxonomy index created with such strings, you should rebuild it.
+ (Michael McCandless, Shai Erera)
+
+* LUCENE-4732: Fixed TermsEnum.seekCeil/seekExact on term vectors.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-4739: Fixed bugs that prevented FSTs more than ~1.1GB from
+ being saved and loaded (Adrien Grand, Mike McCandless)
+
+* LUCENE-4717: Fixed bug where Lucene40DocValuesFormat would sometimes write
+ an extra unused ordinal for sorted types. The bug is detected and corrected
+ on-the-fly for old indexes. (Robert Muir)
+
+* LUCENE-4547: Fixed bug where Lucene40DocValuesFormat was unable to encode
+ segments that would exceed 2GB total data. This could happen in some surprising
+ cases, for example if you had an index with more than 260M documents and a
+ VAR_INT field. (Simon Willnauer, Adrien Grand, Mike McCandless, Robert Muir)
+
+* LUCENE-4775: Remove SegmentInfo.sizeInBytes() and make
+ MergePolicy.OneMerge.totalBytesSize thread safe (Josh Bronson via
+ Robert Muir, Mike McCandless)
+
+* LUCENE-4770: If spatial's TermQueryPrefixTreeStrategy was used to search
+ indexed non-point shapes, then there was an edge case where a query should
+ find a shape but it didn't. The fix is the removal of an optimization that
+ simplifies some leaf cells into a parent. The index data for such a field is
+ now ~20% larger. This optimization is still done for the query shape, and for
+ indexed data for RecursivePrefixTreeStrategy. Furthermore, this optimization
+ is enhanced to roll up beyond the bottom cell level. (David Smiley,
+ Florian Schilling)
+
+* LUCENE-4790: Fix FieldCacheImpl.getDocTermOrds to not bake deletes into the
+ cached datastructure. Otherwise this can cause inconsistencies with readers
+ at different points in time. (Robert Muir)
+
+* LUCENE-4791: A conjunction of terms (ConjunctionTermScorer) scanned on
+ the lowest frequency term instead of skipping, leading to potentially
+ large performance impacts for many non-random or non-uniform
+ term distributions. (John Wang, yonik)
+
+* LUCENE-4798: PostingsHighlighter's formatter sometimes didn't highlight
+ matched terms. (Robert Muir)
+
+* LUCENE-4796, SOLR-4373: Fix concurrency issue in NamedSPILoader and
+ AnalysisSPILoader when doing reload (e.g. from Solr).
+ (Uwe Schindler, Hossman)
+
+* LUCENE-4802: Don't compute norms for drill-down facet fields. (Mike McCandless)
+
+* LUCENE-4804: PostingsHighlighter sometimes applied terms to the wrong passage,
+ if they started exactly on a passage boundary. (Robert Muir)
+
+Documentation
+
+* LUCENE-4718: Fixed documentation of oal.queryparser.classic.
+ (Hayden Muhl via Adrien Grand)
+
+* LUCENE-4784, LUCENE-4785, LUCENE-4786: Fixed references to deprecated classes
+ SinkTokenizer, ValueSourceQuery and RangeQuery. (Hao Zhong via Adrien Grand)
+
+Build
+
+* LUCENE-4654: Test duration statistics from multiple test runs should be
+ reused. (Dawid Weiss)
+
+* LUCENE-4636: Upgrade ivy to 2.3.0 (Shawn Heisey via Robert Muir)
+
+* LUCENE-4570: Use the Policeman Forbidden API checker, released separately
+ from Lucene and downloaded via Ivy. (Uwe Schindler, Robert Muir)
+
+* LUCENE-4758: 'ant jar', 'ant compile', and 'ant compile-test' should
+ recurse. (Steve Rowe)
+
+======================= Lucene 4.1.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4514: Scorer's freq() method returns an integer value indicating
+ the number of times the scorer matches the current document. Previously
+ this was only sometimes the case, in some cases it returned a (meaningless)
+ floating point value. Scorer now extends DocsEnum so it has attributes().
+ (Robert Muir)
+
+* LUCENE-4543: TFIDFSimilarity's index-time computeNorm is now final to
+ match the fact that its query-time norm usage requires a FIXED_8 encoding.
+ Override lengthNorm and/or encode/decodeNormValue to change the specifics,
+ like Lucene 3.x. (Robert Muir)
+
+* LUCENE-3441: The facet module now supports NRT. As a result, the following
+ changes were made:
+ - DirectoryTaxonomyReader has a new constructor which takes a
+ DirectoryTaxonomyWriter. You should use that constructor in order to get
+ the NRT support (or the old one for non-NRT).
+ - TaxonomyReader.refresh() removed in exchange for TaxonomyReader.openIfChanged
+ static method. Similar to DirectoryReader, the method either returns null
+ if no changes were made to the taxonomy, or a new TR instance otherwise.
+ Instead of calling refresh(), you should write similar code to how you reopen
+ a regular DirectoryReader.
+ - TaxonomyReader.openIfChanged (previously refresh()) no longer throws
+ InconsistentTaxonomyException, and supports recreate. InconsistentTaxoEx
+ was removed.
+ - ChildrenArrays was pulled out of TaxonomyReader into a top-level class.
+ - TaxonomyReader was made an abstract class (instead of an interface), with
+ methods such as close() and reference counting management pulled from
+ DirectoryTaxonomyReader, and made final. The rest of the methods, remained
+ abstract.
+ (Shai Erera, Gilad Barkai)
+
+* LUCENE-4576: Remove CachingWrapperFilter(Filter, boolean). This recacheDeletes
+ option gave less than 1% speedup at the expense of cache churn (filters were
+ invalidated on reopen if even a single delete was posted against the segment).
+ (Robert Muir)
+
+* LUCENE-4575: Replace IndexWriter's commit/prepareCommit versions that take
+ commitData with setCommitData(). That allows committing changes to IndexWriter
+ even if the commitData is the only thing that changes.
+ (Shai Erera, Michael McCandless)
+
+* LUCENE-4565: TaxonomyReader.getParentArray and .getChildrenArrays consolidated
+ into one getParallelTaxonomyArrays(). You can obtain the 3 arrays that the
+ previous two methods returned by calling parents(), children() or siblings()
+ on the returned ParallelTaxonomyArrays. (Shai Erera)
+
+* LUCENE-4585: Spatial PrefixTree based Strategies (either TermQuery or
+ RecursivePrefix based) MAY want to re-index if used for point data. If a
+ re-index is not done, then an indexed point is ~1/2 the smallest grid cell
+ larger and as such is slightly more likely to match a query shape.
+ (David Smiley)
+
+* LUCENE-4604: DefaultOrdinalPolicy removed in favor of OrdinalPolicy.ALL_PARENTS.
+ Same for DefaultPathPolicy (now PathPolicy.ALL_CATEGORIES). In addition, you
+ can use OrdinalPolicy.NO_PARENTS to never write any parent category ordinal
+ to the fulltree posting payload (but note that you need a special
+ FacetsAccumulator - see javadocs). (Shai Erera)
+
+* LUCENE-4594: Spatial PrefixTreeStrategy no longer indexes center points of
+ non-point shapes. If you want to call makeDistanceValueSource() based on
+ shape centers, you need to do this yourself in another spatial field.
+ (David Smiley)
+
+* LUCENE-4615: Replace IntArrayAllocator and FloatArrayAllocator by ArraysPool.
+ FacetArrays no longer takes those allocators; if you need to reuse the arrays,
+ you should use ReusingFacetArrays. (Shai Erera, Gilad Barkai)
+
+* LUCENE-4621: FacetIndexingParams is now a concrete class (instead of DefaultFIP).
+ Also, the entire IndexingParams chain is now immutable. If you need to override
+ a setting, you should extend the relevant class.
+ Additionally, FacetSearchParams is now immutable, and requires all FacetRequests
+ to specified at initialization time. (Shai Erera)
+
+* LUCENE-4647: CategoryDocumentBuilder and EnhancementsDocumentBuilder are replaced
+ by FacetFields and AssociationsFacetFields respectively. CategoryEnhancement and
+ AssociationEnhancement were removed in favor of a simplified CategoryAssociation
+ interface, with CategoryIntAssociation and CategoryFloatAssociation
+ implementations.
+ NOTE: indexes that contain category enhancements/associations are not supported
+ by the new code and should be recreated. (Shai Erera)
+
+* LUCENE-4659: Massive cleanup to CategoryPath API. Additionally, CategoryPath is
+ now immutable, so you don't need to clone() it. (Shai Erera)
+
+* LUCENE-4670: StoredFieldsWriter and TermVectorsWriter have new finish* callbacks
+ which are called after a doc/field/term has been completely added.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-4620: IntEncoder/Decoder were changed to do bulk encoding/decoding. As a
+ result, few other classes such as Aggregator and CategoryListIterator were
+ changed to handle bulk category ordinals. (Shai Erera)
+
+* LUCENE-4683: CategoryListIterator and Aggregator are now per-segment. As such
+ their implementations no longer take a top-level IndexReader in the constructor
+ but rather implement a setNextReader. (Shai Erera)
+
+New Features
+
+* LUCENE-4226: New experimental StoredFieldsFormat that compresses chunks of
+ documents together in order to improve the compression ratio. (Adrien Grand)
+
+* LUCENE-4426: New ValueSource implementations (in lucene/queries) for
+ DocValues fields. (Adrien Grand)
+
+* LUCENE-4410: FilteredQuery now exposes a FilterStrategy that exposes
+ how filters are applied during query execution. (Simon Willnauer)
+
+* LUCENE-4404: New ListOfOutputs (in lucene/misc) for FSTs wraps
+ another Outputs implementation, allowing you to store more than one
+ output for a single input. UpToTwoPositiveIntsOutputs was moved
+ from lucene/core to lucene/misc. (Mike McCandless)
+
+* LUCENE-3842: New AnalyzingSuggester, for doing auto-suggest
+ using an analyzer. This can create powerful suggesters: if the analyzer
+ remove stop words then "ghost chr..." could suggest "The Ghost of
+ Christmas Past"; if SynonymFilter is used to map wifi and wireless
+ network to hotspot, then "wirele..." could suggest "wifi router";
+ token normalization likes stemmers, accent removal, etc. would allow
+ the suggester to ignore such variations. (Robert Muir, Sudarshan
+ Gaikaiwari, Mike McCandless)
+
+* LUCENE-4446: Lucene 4.1 has a new default index format (Lucene41Codec)
+ that incorporates the previously experimental "Block" postings format
+ for better search performance.
+ (Han Jiang, Adrien Grand, Robert Muir, Mike McCandless)
+
+* LUCENE-3846: New FuzzySuggester, like AnalyzingSuggester except it
+ also finds completions allowing for fuzzy edits in the input string.
+ (Robert Muir, Simon Willnauer, Mike McCandless)
+
+* LUCENE-4515: MemoryIndex now supports adding the same field multiple
+ times. (Simon Willnauer)
+
+* LUCENE-4489: Added consumeAllTokens option to LimitTokenCountFilter
+ (hossman, Robert Muir)
+
+* LUCENE-4566: Add NRT/SearcherManager.RefreshListener/addListener to
+ be notified whenever a new searcher was opened. (selckin via Shai
+ Erera, Mike McCandless)
+
+* SOLR-4123: Add per-script customizability to ICUTokenizerFactory via
+ rule files in the ICU RuleBasedBreakIterator format.
+ (Shawn Heisey, Robert Muir, Steve Rowe)
+
+* LUCENE-4590: Added WriteEnwikiLineDocTask - a benchmark task for writing
+ Wikipedia category pages and non-category pages into separate line files.
+ extractWikipedia.alg was changed to use this task, so now it creates two
+ files. (Doron Cohen)
+
+* LUCENE-4290: Added PostingsHighlighter to the highlighter module. It uses
+ offsets from the postings lists to highlight documents. (Robert Muir)
+
+* LUCENE-4628: Added CommonTermsQuery that executes high-frequency terms
+ in a optional sub-query to prevent slow queries due to "common" terms
+ like stopwords. (Simon Willnauer)
+
+API Changes
+
+* LUCENE-4399: Deprecated AppendingCodec. Lucene's term dictionaries
+ no longer seek when writing. (Adrien Grand, Robert Muir)
+
+* LUCENE-4479: Rename TokenStream.getTokenStream(IndexReader, int, String)
+ to TokenStream.getTokenStreamWithOffsets, and return null on failure
+ rather than throwing IllegalArgumentException. (Alan Woodward)
+
+* LUCENE-4472: MergePolicy now accepts a MergeTrigger that provides
+ information about the trigger of the merge ie. merge triggered due
+ to a segment merge or a full flush etc. (Simon Willnauer)
+
+* LUCENE-4415: TermsFilter is now immutable. All terms need to be provided
+ as constructor argument. (Simon Willnauer)
+
+* LUCENE-4520: ValueSource.getSortField no longer throws IOExceptions
+ (Alan Woodward)
+
+* LUCENE-4537: RateLimiter is now separated from FSDirectory and exposed via
+ RateLimitingDirectoryWrapper. Any Directory can now be rate-limited.
+ (Simon Willnauer)
+
+* LUCENE-4591: CompressingStoredFields{Writer,Reader} now accept a segment
+ suffix as a constructor parameter. (Renaud Delbru via Adrien Grand)
+
+* LUCENE-4605: Added DocsEnum.FLAG_NONE which can be passed instead of 0 as
+ the flag to .docs() and .docsAndPositions(). (Shai Erera)
+
+* LUCENE-4617: Remove FST.pack() method. Previously to make a packed FST,
+ you had to make a Builder with willPackFST=true (telling it you will later pack it),
+ create your fst with finish(), and then call pack() to get another FST.
+ Instead just pass true for doPackFST to Builder and finish() returns a packed FST.
+ (Robert Muir)
+
+* LUCENE-4663: Deprecate IndexSearcher.document(int, Set). This was not intended
+ to be final, nor named document(). Use IndexSearcher.doc(int, Set) instead.
+ (Robert Muir)
+
+* LUCENE-4684: Made DirectSpellChecker extendable.
+ (Martijn van Groningen)
+
+Bug Fixes
+
+* LUCENE-1822: BaseFragListBuilder hard-coded 6 char margin is too naive.
+ (Alex Vigdor, Arcadius Ahouansou, Koji Sekiguchi)
+
+* LUCENE-4468: Fix rareish integer overflows in Lucene41 postings
+ format. (Robert Muir)
+
+* LUCENE-4486: Add support for ConstantScoreQuery in Highlighter.
+ (Simon Willnauer)
+
+* LUCENE-4485: When CheckIndex terms, terms/docs pairs and tokens,
+ these counts now all exclude deleted documents. (Mike McCandless)
+
+* LUCENE-4479: Highlighter works correctly for fields with term vector
+ positions, but no offsets. (Alan Woodward)
+
+* SOLR-3906: JapaneseReadingFormFilter in romaji mode will return
+ romaji even for out-of-vocabulary kana cases (e.g. half-width forms).
+ (Robert Muir)
+
+* LUCENE-4511: TermsFilter might return wrong results if a field is not
+ indexed or doesn't exist in the index. (Simon Willnauer)
+
+* LUCENE-4521: IndexWriter.tryDeleteDocument could return true
+ (successfully deleting the document) but then on IndexWriter
+ close/commit fail to write the new deletions, if no other changes
+ happened in the IndexWriter instance. (Ivan Vasilev via Mike
+ McCandless)
+
+* LUCENE-4513: Fixed that deleted nested docs are scored into the
+ parent doc when using ToParentBlockJoinQuery. (Martijn van Groningen)
+
+* LUCENE-4534: Fixed WFSTCompletionLookup and Analyzing/FuzzySuggester
+ to allow 0 byte values in the lookup keys. (Mike McCandless)
+
+* LUCENE-4532: DirectoryTaxonomyWriter use a timestamp to denote taxonomy
+ index re-creation, which could cause a bug in case machine clocks were
+ not synced. Instead, it now tracks an 'epoch' version, which is incremented
+ whenever the taxonomy is re-created, or replaced. (Shai Erera)
+
+* LUCENE-4544: Fixed off-by-1 in ConcurrentMergeScheduler that would
+ allow 1+maxMergeCount merges threads to be created, instead of just
+ maxMergeCount (Radim Kolar, Mike McCandless)
+
+* LUCENE-4567: Fixed NullPointerException in analyzing, fuzzy, and
+ WFST suggesters when no suggestions were added (selckin via Mike
+ McCandless)
+
+* LUCENE-4568: Fixed integer overflow in
+ PagedBytes.PagedBytesData{In,Out}put.getPosition. (Adrien Grand)
+
+* LUCENE-4581: GroupingSearch.setAllGroups(true) was failing to
+ actually compute allMatchingGroups (dizh@neusoft.com via Mike
+ McCandless)
+
+* LUCENE-4009: Improve TermsFilter.toString (Tim Costermans via Chris
+ Male, Mike McCandless)
+
+* LUCENE-4588: Benchmark's EnwikiContentSource was discarding last wiki
+ document and had leaking threads in 'forever' mode. (Doron Cohen)
+
+* LUCENE-4585: Spatial RecursivePrefixTreeFilter had some bugs that only
+ occurred when shapes were indexed. In what appears to be rare circumstances,
+ documents with shapes near a query shape were erroneously considered a match.
+ In addition, it wasn't possible to index a shape representing the entire
+ globe.
+
+* LUCENE-4595: EnwikiContentSource had a thread safety problem (NPE) in
+ 'forever' mode (Doron Cohen)
+
+* LUCENE-4587: fix WordBreakSpellChecker to not throw AIOOBE when presented
+ with 2-char codepoints, and to correctly break/combine terms containing
+ non-latin characters. (James Dyer, Andreas Hubold)
+
+* LUCENE-4596: fix a concurrency bug in DirectoryTaxonomyWriter.
+ (Shai Erera)
+
+* LUCENE-4594: Spatial PrefixTreeStrategy would index center-points in addition
+ to the shape to index if it was non-point, in the same field. But sometimes
+ the center-point isn't actually in the shape (consider a LineString), and for
+ highly precise shapes it could cause makeDistanceValueSource's cache to load
+ parts of the shape's boundary erroneously too. So center points aren't
+ indexed any more; you should use another spatial field. (David Smiley)
+
+* LUCENE-4629: IndexWriter misses to delete documents if a document block is
+ indexed and the Iterator throws an exception. Documents were only rolled back
+ if the actual indexing process failed. (Simon Willnauer)
+
+* LUCENE-4608: Handle large number of requested fragments better.
+ (Martijn van Groningen)
+
+* LUCENE-4633: DirectoryTaxonomyWriter.replaceTaxonomy did not refresh its
+ internal reader, which could cause an existing category to be added twice.
+ (Shai Erera)
+
+* LUCENE-4461: If you added the same FacetRequest more than once, you would get
+ inconsistent results. (Gilad Barkai via Shai Erera)
+
+* LUCENE-4656: Fix regression in IndexWriter to work with empty TokenStreams
+ that have no TermToBytesRefAttribute (commonly provided by CharTermAttribute),
+ e.g., oal.analysis.miscellaneous.EmptyTokenStream.
+ (Uwe Schindler, Adrien Grand, Robert Muir)
+
+* LUCENE-4660: ConcurrentMergeScheduler was taking too long to
+ un-pause incoming threads it had paused when too many merges were
+ queued up. (Mike McCandless)
+
+* LUCENE-4662: Add missing elided articles and prepositions to FrenchAnalyzer's
+ DEFAULT_ARTICLES list passed to ElisionFilter. (David Leunen via Steve Rowe)
+
+* LUCENE-4671: Fix CharsRef.subSequence method. (Tim Smith via Robert Muir)
+
+* LUCENE-4465: Let ConstantScoreQuery's Scorer return its child scorer.
+ (selckin via Uwe Schindler)
+
+Changes in Runtime Behavior
+
+* LUCENE-4586: Change default ResultMode of FacetRequest to PER_NODE_IN_TREE.
+ This only affects requests with depth>1. If you execute such requests and
+ rely on the facet results being returned flat (i.e. no hierarchy), you should
+ set the ResultMode to GLOBAL_FLAT. (Shai Erera, Gilad Barkai)
+
+* LUCENE-1822: Improves the text window selection by recalculating the starting margin
+ once all phrases in the fragment have been identified in FastVectorHighlighter. This
+ way if a single word is matched in a fragment, it will appear in the middle of the highlight,
+ instead of 6 characters from the beginning. This way one can also guarantee that
+ the entirety of short texts are represented in a fragment by specifying a large
+ enough fragCharSize.
+
+Optimizations
+
+* LUCENE-2221: oal.util.BitUtil was modified to use Long.bitCount and
+ Long.numberOfTrailingZeros (which are intrinsics since Java 6u18) instead of
+ pure java bit twiddling routines in order to improve performance on modern
+ JVMs/hardware. (Dawid Weiss, Adrien Grand)
+
+* LUCENE-4509: Enable stored fields compression by default in the Lucene 4.1
+ default codec. (Adrien Grand)
+
+* LUCENE-4536: PackedInts on-disk format is now byte-aligned (it used to be
+ long-aligned), saving up to 7 bytes per array of values.
+ (Adrien Grand, Mike McCandless)
+
+* LUCENE-4512: Additional memory savings for CompressingStoredFieldsFormat.
+ (Adrien Grand, Robert Muir)
+
+* LUCENE-4443: Lucene41PostingsFormat no longer writes unnecessary offsets
+ into the skipdata. (Robert Muir)
+
+* LUCENE-4459: Improve WeakIdentityMap.keyIterator() to remove GCed keys
+ from backing map early instead of waiting for reap(). This makes test
+ failures in TestWeakIdentityMap disappear, too.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-4473: Lucene41PostingsFormat encodes offsets more efficiently
+ for low frequency terms (< 128 occurrences). (Robert Muir)
+
+* LUCENE-4462: DocumentsWriter now flushes deletes, segment infos and builds
+ CFS files if necessary during segment flush and not during publishing. The latter
+ was a single threaded process while now all IO and CPU heavy computation is done
+ concurrently in DocumentsWriterPerThread. (Simon Willnauer)
+
+* LUCENE-4496: Optimize Lucene41PostingsFormat when requesting a subset of
+ the postings data (via flags to TermsEnum.docs/docsAndPositions) to use
+ ForUtil.skipBlock. (Robert Muir)
+
+* LUCENE-4497: Don't write PosVIntCount to the positions file in
+ Lucene41PostingsFormat, as it's always totalTermFreq % BLOCK_SIZE. (Robert Muir)
+
+* LUCENE-4498: In Lucene41PostingsFormat, when a term appears in only one document,
+ Instead of writing a file pointer to a VIntBlock containing the doc id, just
+ write the doc id. (Mike McCandless, Robert Muir)
+
+* LUCENE-4515: MemoryIndex now uses Byte/IntBlockPool internally to hold terms and
+ posting lists. All index data is represented as consecutive byte/int arrays to
+ reduce GC cost and memory overhead. (Simon Willnauer)
+
+* LUCENE-4538: DocValues now caches direct sources in a ThreadLocal exposed via SourceCache.
+ Users of this API can now simply obtain an instance via DocValues#getDirectSource per thread.
+ (Simon Willnauer)
+
+* LUCENE-4580: DrillDown.query variants return a ConstantScoreQuery with boost set to 0.0f
+ so that documents scores are not affected by running a drill-down query. (Shai Erera)
+
+* LUCENE-4598: PayloadIterator no longer uses top-level IndexReader to iterate on the
+ posting's payload. (Shai Erera, Michael McCandless)
+
+* LUCENE-4661: Drop default maxThreadCount to 1 and maxMergeCount to 2
+ in ConcurrentMergeScheduler, for faster merge performance on
+ spinning-magnet drives (Mike McCandless)
+
+Documentation
+
+* LUCENE-4483: Refer to BytesRef.deepCopyOf in Term's constructor that takes BytesRef.
+ (Paul Elschot via Robert Muir)
+
+Build
+
+* LUCENE-4650: Upgrade randomized testing to version 2.0.8: make the
+ test framework more robust under low memory conditions. (Dawid Weiss)
+
+* LUCENE-4603: Upgrade randomized testing to version 2.0.5: print forked
+ JVM PIDs on heartbeat from hung tests (Dawid Weiss)
+
+* Upgrade randomized testing to version 2.0.4: avoid hangs on shutdown
+ hooks hanging forever by calling Runtime.halt() in addition to
+ Runtime.exit() after a short delay to allow graceful shutdown (Dawid Weiss)
+
+* LUCENE-4451: Memory leak per unique thread caused by
+ RandomizedContext.contexts static map. Upgrade randomized testing
+ to version 2.0.2 (Mike McCandless, Dawid Weiss)
+
+* LUCENE-4589: Upgraded benchmark module's Nekohtml dependency to version
+ 1.9.17, removing the workaround in Lucene's HTML parser for the
+ Turkish locale. (Uwe Schindler)
+
+* LUCENE-4601: Fix ivy availability check to use typefound, so it works
+ if called from another build file. (Ryan Ernst via Robert Muir)
+
+
+======================= Lucene 4.0.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4392: Class org.apache.lucene.util.SortedVIntList has been removed.
+ (Adrien Grand)
+
+* LUCENE-4393: RollingCharBuffer has been moved to the o.a.l.analysis.util
+ package of lucene-analysis-common. (Adrien Grand)
+
+New Features
+
+* LUCENE-1888: Added the option to store payloads in the term
+ vectors (IndexableFieldType.storeTermVectorPayloads()). Note
+ that you must store term vector positions to store payloads.
+ (Robert Muir)
+
+* LUCENE-3892: Add a new BlockPostingsFormat that bulk-encodes docs,
+ freqs and positions in large (size 128) packed-int blocks for faster
+ search performance. This was from Han Jiang's 2012 Google Summer of
+ Code project (Han Jiang, Adrien Grand, Robert Muir, Mike McCandless)
+
+* LUCENE-4323: Added support for an absolute maximum CFS segment size
+ (in MiB) to LogMergePolicy and TieredMergePolicy.
+ (Alexey Lef via Uwe Schindler)
+
+* LUCENE-4339: Allow deletes against 3.x segments for easier upgrading.
+ Lucene3x Codec is still otherwise read-only, you should not set it
+ as the default Codec on IndexWriter, because it cannot write new segments.
+ (Mike McCandless, Robert Muir)
+
+* SOLR-3441: ElisionFilterFactory is now MultiTermAware
+ (Jack Krupansky via hossman)
+
+API Changes
+
+* LUCENE-4391, LUCENE-4440: All methods of Lucene40Codec but
+ getPostingsFormatForField are now final. To reuse functionality
+ of Lucene40, you should extend FilterCodec and delegate to Lucene40
+ instead of extending Lucene40Codec. (Adrien Grand, Shai Erera,
+ Robert Muir, Uwe Schindler)
+
+* LUCENE-4299: Added Terms.hasPositions() and Terms.hasOffsets().
+ Previously you had no real way to know that a term vector field
+ had positions or offsets, since this can be configured on a
+ per-field-per-document basis. (Robert Muir)
+
+* Removed DocsAndPositionsEnum.hasPayload() and simplified the
+ contract of getPayload(). It returns null if there is no payload,
+ otherwise returns the current payload. You can now call it multiple
+ times per position if you want. (Robert Muir)
+
+* Removed FieldsEnum. Fields API instead implements Iterable<String>
+ and exposes Iterator, so you can iterate over field names with
+ for (String field : fields) instead. (Robert Muir)
+
+* LUCENE-4152: added IndexReader.leaves(), which lets you enumerate
+ the leaf atomic reader contexts for all readers in the tree.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-4304: removed PayloadProcessorProvider. If you want to change
+ payloads (or other things) when merging indexes, it's recommended
+ to just use a FilterAtomicReader + IndexWriter.addIndexes. See the
+ OrdinalMappingAtomicReader and TaxonomyMergeUtils in the facets
+ module if you want an example of this.
+ (Mike McCandless, Uwe Schindler, Shai Erera, Robert Muir)
+
+* LUCENE-4304: Make CompositeReader.getSequentialSubReaders()
+ protected. To get atomic leaves of any IndexReader use the new method
+ leaves() (LUCENE-4152), which lists AtomicReaderContexts including
+ the doc base of each leaf. (Uwe Schindler, Robert Muir)
+
+* LUCENE-4307: Renamed IndexReader.getTopReaderContext to
+ IndexReader.getContext. (Robert Muir)
+
+* LUCENE-4316: Deprecate Fields.getUniqueTermCount and remove it from
+ AtomicReader. If you really want the unique term count across all
+ fields, just sum up Terms.size() across those fields. This method
+ only exists so that this statistic can be accessed for Lucene 3.x
+ segments, which don't support Terms.size(). (Uwe Schindler, Robert Muir)
+
+* LUCENE-4321: Change CharFilter to extend Reader directly, as FilterReader
+ overdelegates (read(), read(char[], int, int), skip, etc). This made it
+ hard to implement CharFilters that were correct. Instead only close() is
+ delegated by default: read(char[], int, int) and correct(int) are abstract
+ so that it's obvious which methods you should implement. The protected
+ inner Reader is 'input' like CharFilter in the 3.x series, instead of 'in'.
+ (Dawid Weiss, Uwe Schindler, Robert Muir)
+
+* LUCENE-3309: The expert FieldSelector API, used to load only certain
+ fields in a stored document, has been replaced with the simpler
+ StoredFieldVisitor API. (Mike McCandless)
+
+* LUCENE-4343: Made Tokenizer.setReader final. This is a setter that should
+ not be overridden by subclasses: per-stream initialization should happen
+ in reset(). (Robert Muir)
+
+* LUCENE-4377: Remove IndexInput.copyBytes(IndexOutput, long).
+ Use DataOutput.copyBytes(DataInput, long) instead.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-4355: Simplify AtomicReader's sugar methods such as termDocsEnum,
+ termPositionsEnum, docFreq, and totalTermFreq to only take Term as a
+ parameter. If you want to do expert things such as pass a different
+ Bits as liveDocs, then use the flex apis (fields(), terms(), etc) directly.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-4425: clarify documentation of StoredFieldVisitor.binaryValue
+ and simplify the api to binaryField(FieldInfo, byte[]).
+ (Adrien Grand, Robert Muir)
+
+Bug Fixes
+
+* LUCENE-4423: DocumentStoredFieldVisitor.binaryField ignored offset and
+ length. (Adrien Grand)
+
+* LUCENE-4297: BooleanScorer2 would multiply the coord() factor
+ twice for conjunctions: for most users this is no problem, but
+ if you had a customized Similarity that returned something other
+ than 1 when overlap == maxOverlap (always the case for conjunctions),
+ then the score would be incorrect. (Pascal Chollet, Robert Muir)
+
+* LUCENE-4298: MultiFields.getTermDocsEnum(IndexReader, Bits, String, BytesRef)
+ did not work at all, it would infinitely recurse.
+ (Alberto Paro via Robert Muir)
+
+* LUCENE-4300: BooleanQuery's rewrite was not always safe: if you
+ had a custom Similarity where coord(1,1) != 1F, then the rewritten
+ query would be scored differently. (Robert Muir)
+
+* Don't allow negatives in the positions file. If you have an index
+ from 2.4.0 or earlier with such negative positions, and you already
+ upgraded to 3.x, then to Lucene 4.0-ALPHA or -BETA, you should run
+ CheckIndex. If it fails, then you need to upgrade again to 4.0 (Robert Muir)
+
+* LUCENE-4303: PhoneticFilterFactory and SnowballPorterFilterFactory load their
+ encoders / stemmers via the ResourceLoader now instead of Class.forName().
+ Solr users should now no longer have to embed these in its war. (David Smiley)
+
+* SOLR-3737: StempelPolishStemFilterFactory loaded its stemmer table incorrectly.
+ Also, ensure immutability and use only one instance of this table in RAM (lazy
+ loaded) since it's quite large. (sausarkar, Steven Rowe, Robert Muir)
+
+* LUCENE-4310: MappingCharFilter was failing to match input strings
+ containing non-BMP Unicode characters. (Dawid Weiss, Robert Muir,
+ Mike McCandless)
+
+* LUCENE-4224: Add in-order scorer to query time joining and the
+ out-of-order scorer throws an UOE. (Martijn van Groningen, Robert Muir)
+
+* LUCENE-4333: Fixed NPE in TermGroupFacetCollector when faceting on mv fields.
+ (Jesse MacVicar, Martijn van Groningen)
+
+* LUCENE-4218: Document.get(String) and Field.stringValue() again return
+ values for numeric fields, like Lucene 3.x and consistent with the documentation.
+ (Jamie, Uwe Schindler, Robert Muir)
+
+* NRTCachingDirectory was always caching a newly flushed segment in
+ RAM, instead of checking the estimated size of the segment
+ to decide whether to cache it. (Mike McCandless)
+
+* LUCENE-3720: fix memory-consumption issues with BeiderMorseFilter.
+ (Thomas Neidhart via Robert Muir)
+
+* LUCENE-4401: Fix bug where DisjunctionSumScorer would sometimes call score()
+ on a subscorer that had already returned NO_MORE_DOCS. (Liu Chao, Robert Muir)
+
+* LUCENE-4411: when sampling is enabled for a FacetRequest, its depth
+ parameter is reset to the default (1), even if set otherwise.
+ (Gilad Barkai via Shai Erera)
+
+* LUCENE-4455: Fix bug in SegmentInfoPerCommit.sizeInBytes() that was
+ returning 2X the true size, inefficiently. Also fixed bug in
+ CheckIndex that would report no deletions when a segment has
+ deletions, and vice/versa. (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-4456: Fixed double-counting sizeInBytes for a segment
+ (affects how merge policies pick merges); fixed CheckIndex's
+ incorrect reporting of whether a segment has deletions; fixed case
+ where on abort Lucene could remove files it didn't create; fixed
+ many cases where IndexWriter could leave leftover files (on
+ exception in various places, on reuse of a segment name after crash
+ and recovery. (Uwe Schindler, Robert Muir, Mike McCandless)
+
+Optimizations
+
+* LUCENE-4322: Decrease lucene-core JAR size. The core JAR size had increased a
+ lot because of generated code introduced in LUCENE-4161 and LUCENE-3892.
+ (Adrien Grand)
+
+* LUCENE-4317: Improve reuse of internal TokenStreams and StringReader
+ in oal.document.Field. (Uwe Schindler, Chris Male, Robert Muir)
+
+* LUCENE-4327: Support out-of-order scoring in FilteredQuery for higher
+ performance. (Mike McCandless, Robert Muir)
+
+* LUCENE-4364: Optimize MMapDirectory to not make a mapping per-cfs-slice,
+ instead one map per .cfs file. This reduces the total number of maps.
+ Additionally factor out a (package-private) generic
+ ByteBufferIndexInput from MMapDirectory. (Uwe Schindler, Robert Muir)
+
+Build
+
+* LUCENE-4406, LUCENE-4407: Upgrade to randomizedtesting 2.0.1.
+ Workaround for broken test output XMLs due to non-XML text unicode
+ chars in strings. Added printing of failed tests at the end of a
+ test run (Dawid Weiss)
+
+* LUCENE-4252: Detect/Fail tests when they leak RAM in static fields
+ (Robert Muir, Dawid Weiss)
+
+* LUCENE-4360: Support running the same test suite multiple times in
+ parallel (Dawid Weiss)
+
+* LUCENE-3985: Upgrade to randomizedtesting 2.0.0. Added support for
+ thread leak detection. Added support for suite timeouts. (Dawid Weiss)
+
+* LUCENE-4354: Corrected maven dependencies to be consistent with
+ the licenses/ folder and the binary release. Some had different
+ versions or additional unnecessary dependencies. (selckin via Robert Muir)
+
+* LUCENE-4340: Move all non-default codec, postings format and terms
+ dictionary implementations to lucene/codecs. (Adrien Grand)
+
+Documentation
+
+* LUCENE-4302: Fix facet userguide to have HTML loose doctype like
+ all other javadocs. (Karl Nicholas via Uwe Schindler)
+
+======================= Lucene 4.0.0-BETA =======================
+
+New features
+
+* LUCENE-4249: Changed the explanation of the PayloadTermWeight to use the
+ underlying PayloadFunction's explanation as the explanation
+ for the payload score. (Scott Smerchek via Robert Muir)
+
+* LUCENE-4069: Added BloomFilteringPostingsFormat for use with low-frequency terms
+ such as primary keys (Mark Harwood, Mike McCandless)
+
+* LUCENE-4201: Added JapaneseIterationMarkCharFilter to normalize Japanese
+ iteration marks. (Robert Muir, Christian Moen)
+
+* LUCENE-3832: Added BasicAutomata.makeStringUnion method to efficiently
+ create automata from a fixed collection of UTF-8 encoded BytesRef
+ (Dawid Weiss, Robert Muir)
+
+* LUCENE-4153: Added option to fast vector highlighting via BaseFragmentsBuilder to
+ respect field boundaries in the case of highlighting for multivalued fields.
+ (Martijn van Groningen)
+
+* LUCENE-4227: Added DirectPostingsFormat, to hold all postings in
+ memory as uncompressed simple arrays. This uses a tremendous amount
+ of RAM but gives good search performance gains. (Mike McCandless)
+
+* LUCENE-2510, LUCENE-4044: Migrated Solr's Tokenizer-, TokenFilter-, and
+ CharFilterFactories to the lucene-analysis module. The API is still
+ experimental. (Chris Male, Robert Muir, Uwe Schindler)
+
+* LUCENE-4230: When pulling a DocsAndPositionsEnum you can now
+ specify whether or not you require payloads (in addition to
+ offsets); turning one or both off may allow some codec
+ implementations to optimize the enum implementation. (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-4203: Add IndexWriter.tryDeleteDocument(AtomicReader reader,
+ int docID), to attempt deletion by docID as long as the provided
+ reader is an NRT reader, and the segment has not yet been merged
+ away (Mike McCandless).
+
+* LUCENE-4286: Added option to CJKBigramFilter to always also output
+ unigrams. This can be used for a unigram+bigram approach, or at
+ index-time only for better support of short queries.
+ (Tom Burton-West, Robert Muir)
+
+API Changes
+
+* LUCENE-4138: update of morfologik (Polish morphological analyzer) to 1.5.3.
+ The tag attribute class has been renamed to MorphosyntacticTagsAttribute and
+ has a different API (carries a list of tags instead of a compound tag). Upgrade
+ of embedded morfologik dictionaries to version 1.9. (Dawid Weiss)
+
+* LUCENE-4178: set 'tokenized' to true on FieldType by default, so that if you
+ make a custom FieldType and set indexed = true, it's analyzed by the analyzer.
+ (Robert Muir)
+
+* LUCENE-4220: Removed the buggy JavaCC-based HTML parser in the benchmark
+ module and replaced by NekoHTML. HTMLParser interface was cleaned up while
+ changing method signatures. (Uwe Schindler, Robert Muir)
+
+* LUCENE-2191: Rename Tokenizer.reset(Reader) to Tokenizer.setReader(Reader).
+ The purpose of this method was always to set a new Reader on the Tokenizer,
+ reusing the object. But the name was often confused with TokenStream.reset().
+ (Robert Muir)
+
+* LUCENE-4228: Refactored CharFilter to extend java.io.FilterReader. CharFilters
+ filter another reader and you override correct() for offset correction.
+ (Robert Muir)
+
+* LUCENE-4240: Analyzer api now just takes fieldName for getOffsetGap. If the
+ field is not analyzed (e.g. StringField), then the analyzer is not invoked
+ at all. If you want to tweak things like positionIncrementGap and offsetGap,
+ analyze the field with KeywordTokenizer instead. (Grant Ingersoll, Robert Muir)
+
+* LUCENE-4250: Pass fieldName to the PayloadFunction explain method, so it
+ parallels with docScore and the default implementation is correct.
+ (Robert Muir)
+
+* LUCENE-3747: Support Unicode 6.1.0. (Steve Rowe)
+
+* LUCENE-3884: Moved ElisionFilter out of org.apache.lucene.analysis.fr
+ package into org.apache.lucene.analysis.util. (Robert Muir)
+
+* LUCENE-4230: When pulling a DocsAndPositionsEnum you now pass an int
+ flags instead of the previous boolean needOffsets. Currently
+ recognized flags are DocsAndPositionsEnum.FLAG_PAYLOADS and
+ DocsAndPositionsEnum.FLAG_OFFSETS (Robert Muir, Mike McCandless)
+
+* LUCENE-4273: When pulling a DocsEnum, you can pass an int flags
+ instead of the previous boolean needsFlags; consistent with the changes
+ for DocsAndPositionsEnum in LUCENE-4230. Currently the only flag
+ is DocsEnum.FLAG_FREQS. (Robert Muir, Mike McCandless)
+
+* LUCENE-3616: TextField(String, Reader, Store) was reduced to TextField(String, Reader),
+ as the Store parameter didn't make sense: if you supplied Store.YES, you would only
+ receive an exception anyway. (Robert Muir)
+
+Optimizations
+
+* LUCENE-4171: Performance improvements to Packed64.
+ (Toke Eskildsen via Adrien Grand)
+
+* LUCENE-4184: Performance improvements to the aligned packed bits impl.
+ (Toke Eskildsen, Adrien Grand)
+
+* LUCENE-4235: Remove enforcing of Filter rewrite for NRQ queries.
+ (Uwe Schindler)
+
+* LUCENE-4279: Regenerated snowball Stemmers from snowball r554,
+ making them substantially more lightweight. Behavior is unchanged.
+ (Robert Muir)
+
+* LUCENE-4291: Reduced internal buffer size for Jflex-based tokenizers
+ such as StandardTokenizer from 32kb to 8kb.
+ (Raintung Li, Steven Rowe, Robert Muir)
+
+Bug Fixes
+
+* LUCENE-4109: BooleanQueries are not parsed correctly with the
+ flexible query parser. (Karsten Rauch via Robert Muir)
+
+* LUCENE-4176: Fix AnalyzingQueryParser to analyze range endpoints as bytes,
+ so that it works correctly with Analyzers that produce binary non-UTF-8 terms
+ such as CollationAnalyzer. (Nattapong Sirilappanich via Robert Muir)
+
+* LUCENE-4209: Fix FSTCompletionLookup to close its sorter, so that it won't
+ leave temp files behind in /tmp. Fix SortedTermFreqIteratorWrapper to not
+ leave temp files behind in /tmp on Windows. Fix Sort to not leave
+ temp files behind when /tmp is a separate volume. (Uwe Schindler, Robert Muir)
+
+* LUCENE-4221: Fix overeager CheckIndex validation for term vector offsets.
+ (Robert Muir)
+
+* LUCENE-4222: TieredMergePolicy.getFloorSegmentMB was returning the
+ size in bytes not MB (Chris Fuller via Mike McCandless)
+
+* LUCENE-3505: Fix bug (Lucene 4.0alpha only) where boolean conjunctions
+ were sometimes scored incorrectly. Conjunctions of only termqueries where
+ at least one term omitted term frequencies (IndexOptions.DOCS_ONLY) would
+ be scored as if all terms omitted term frequencies. (Robert Muir)
+
+* LUCENE-2686, LUCENE-3505: Fixed BooleanQuery scorers to return correct
+ freq(). Added support for scorer navigation API (Scorer.getChildren) to
+ all queries. Made Scorer.freq() abstract.
+ (Koji Sekiguchi, Mike McCandless, Robert Muir)
+
+* LUCENE-4234: Exception when FacetsCollector is used with ScoreFacetRequest,
+ and the number of matching documents is too large. (Gilad Barkai via Shai Erera)
+
+* LUCENE-4245: Make IndexWriter#close() and MergeScheduler#close()
+ non-interruptible. (Mark Miller, Uwe Schindler)
+
+* LUCENE-4190: restrict allowed filenames that a codec may create to
+ the patterns recognized by IndexFileNames. This also fixes
+ IndexWriter to only delete files matching this pattern from an index
+ directory, to reduce risk when the wrong index path is accidentally
+ passed to IndexWriter (Robert Muir, Mike McCandless)
+
+* LUCENE-4277: Fix IndexWriter deadlock during rollback if flushable DWPT
+ instance are already checked out and queued up but not yet flushed.
+ (Simon Willnauer)
+
+* LUCENE-4282: Automaton FuzzyQuery didn't always deliver all results.
+ (Johannes Christen, Uwe Schindler, Robert Muir)
+
+* LUCENE-4289: Fix minor idf inconsistencies/inefficiencies in highlighter.
+ (Robert Muir)
+
+Changes in Runtime Behavior
+
+* LUCENE-4109: Enable position increments in the flexible queryparser by default.
+ (Karsten Rauch via Robert Muir)
+
+* LUCENE-3616: Field throws exception if you try to set a boost on an
+ unindexed field or one that omits norms. (Robert Muir)
+
+Build
+
+* LUCENE-4094: Support overriding file.encoding on forked test JVMs
+ (force via -Drandomized.file.encoding=XXX). (Dawid Weiss)
+
+* LUCENE-4189: Test output should include timestamps (start/end for each
+ test/ suite). Added -Dtests.timestamps=[off by default]. (Dawid Weiss)
+
+* LUCENE-4110: Report long periods of forked jvm inactivity (hung tests/ suites).
+ Added -Dtests.heartbeat=[seconds] with the default of 60 seconds.
+ (Dawid Weiss)
+
+* LUCENE-4160: Added a property to quit the tests after a given
+ number of failures has occurred. This is useful in combination
+ with -Dtests.iters=N (you can start N iterations and wait for M
+ failures, in particular M = 1). -Dtests.maxfailures=M. Alternatively,
+ specify -Dtests.failfast=true to skip all tests after the first failure.
+ (Dawid Weiss)
+
+* LUCENE-4115: JAR resolution/ cleanup should be done automatically for ant
+ clean/ eclipse/ resolve (Dawid Weiss)
+
+* LUCENE-4199, LUCENE-4202, LUCENE-4206: Add a new target "check-forbidden-apis"
+ that parses all generated .class files for use of APIs that use default
+ charset, default locale, or default timezone and fail build if violations
+ found. This ensures, that Lucene / Solr is independent on local configuration
+ options. (Uwe Schindler, Robert Muir, Dawid Weiss)
+
+* LUCENE-4217: Add the possibility to run tests with Atlassian Clover
+ loaded from IVY. A development License solely for Apache code was added in
+ the tools/ folder, but is not included in releases. (Uwe Schindler)
+
+Documentation
+
+* LUCENE-4195: Added package documentation and examples for
+ org.apache.lucene.codecs (Alan Woodward via Robert Muir)
+
+======================= Lucene 4.0.0-ALPHA =======================
+
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/lucene-java/Lucene4.0
+
+For "contrib" changes prior to 4.0, please see:
+http://svn.apache.org/repos/asf/lucene/dev/tags/lucene_solr_3_6_0/lucene/contrib/CHANGES.txt
+
+Changes in backwards compatibility policy
+
+* LUCENE-1458, LUCENE-2111, LUCENE-2354: Changes from flexible indexing:
+
+ - On upgrading to 4.0, if you do not fully reindex your documents,
+ Lucene will emulate the new flex API on top of the old index,
+ incurring some performance cost (up to ~10% slowdown, typically).
+ To prevent this slowdown, use oal.index.IndexUpgrader
+ to upgrade your indexes to latest file format (LUCENE-3082).
+
+ Mixed flex/pre-flex indexes are perfectly fine -- the two
+ emulation layers (flex API on pre-flex index, and pre-flex API on
+ flex index) will remap the access as required. So on upgrading to
+ 4.0 you can start indexing new documents into an existing index.
+ To get optimal performance, use oal.index.IndexUpgrader
+ to upgrade your indexes to latest file format (LUCENE-3082).
+
+ - The postings APIs (TermEnum, TermDocsEnum, TermPositionsEnum)
+ have been removed in favor of the new flexible
+ indexing (flex) APIs (Fields, FieldsEnum, Terms, TermsEnum,
+ DocsEnum, DocsAndPositionsEnum). One big difference is that field
+ and terms are now enumerated separately: a TermsEnum provides a
+ BytesRef (wraps a byte[]) per term within a single field, not a
+ Term. Another is that when asking for a Docs/AndPositionsEnum, you
+ now specify the skipDocs explicitly (typically this will be the
+ deleted docs, but in general you can provide any Bits).
+
+ - The term vectors APIs (TermFreqVector, TermPositionVector,
+ TermVectorMapper) have been removed in favor of the above
+ flexible indexing APIs, presenting a single-document inverted
+ index of the document from the term vectors.
+
+ - MultiReader ctor now throws IOException
+
+ - Directory.copy/Directory.copyTo now copies all files (not just
+ index files), since what is and isn't and index file is now
+ dependent on the codecs used.
+
+ - UnicodeUtil now uses BytesRef for UTF-8 output, and some method
+ signatures have changed to CharSequence. These are internal APIs
+ and subject to change suddenly.
+
+ - Positional queries (PhraseQuery, *SpanQuery) will now throw an
+ exception if use them on a field that omits positions during
+ indexing (previously they silently returned no results).
+
+ - FieldCache.{Byte,Short,Int,Long,Float,Double}Parser's API has
+ changed -- each parse method now takes a BytesRef instead of a
+ String. If you have an existing Parser, a simple way to fix it is
+ invoke BytesRef.utf8ToString, and pass that String to your
+ existing parser. This will work, but performance would be better
+ if you could fix your parser to instead operate directly on the
+ byte[] in the BytesRef.
+
+ - The internal (experimental) API of NumericUtils changed completely
+ from String to BytesRef. Client code should never use this class,
+ so the change would normally not affect you. If you used some of
+ the methods to inspect terms or create TermQueries out of
+ prefix encoded terms, change to use BytesRef. Please note:
+ Do not use TermQueries to search for single numeric terms.
+ The recommended way is to create a corresponding NumericRangeQuery
+ with upper and lower bound equal and included. TermQueries do not
+ score correct, so the constant score mode of NRQ is the only
+ correct way to handle single value queries.
+
+ - NumericTokenStream now works directly on byte[] terms. If you
+ plug a TokenFilter on top of this stream, you will likely get
+ an IllegalArgumentException, because the NTS does not support
+ TermAttribute/CharTermAttribute. If you want to further filter
+ or attach Payloads to NTS, use the new NumericTermAttribute.
+
+ (Mike McCandless, Robert Muir, Uwe Schindler, Mark Miller, Michael Busch)
+
+* LUCENE-2858, LUCENE-3733: IndexReader was refactored into abstract
+ AtomicReader, CompositeReader, and DirectoryReader. To open Directory-
+ based indexes use DirectoryReader.open(), the corresponding method in
+ IndexReader is now deprecated for easier migration. Only DirectoryReader
+ supports commits, versions, and reopening with openIfChanged(). Terms,
+ postings, docvalues, and norms can from now on only be retrieved using
+ AtomicReader; DirectoryReader and MultiReader extend CompositeReader,
+ only offering stored fields and access to the sub-readers (which may be
+ composite or atomic). SlowCompositeReaderWrapper (LUCENE-2597) can be
+ used to emulate atomic readers on top of composites.
+ Please review MIGRATE.txt for information how to migrate old code.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-2265: FuzzyQuery and WildcardQuery now operate on Unicode codepoints,
+ not unicode code units. For example, a Wildcard "?" represents any unicode
+ character. Furthermore, the rest of the automaton package and RegexpQuery use
+ true Unicode codepoint representation. (Robert Muir, Mike McCandless)
+
+* LUCENE-2380: The String-based FieldCache methods (getStrings,
+ getStringIndex) have been replaced with BytesRef-based equivalents
+ (getTerms, getTermsIndex). Also, the sort values (returned in
+ FieldDoc.fields) when sorting by SortField.STRING or
+ SortField.STRING_VAL are now BytesRef instances. See MIGRATE.txt
+ for more details. (yonik, Mike McCandless)
+
+* LUCENE-2480: Though not a change in backwards compatibility policy, pre-3.0
+ indexes are no longer supported. You should upgrade to 3.x first, then run
+ optimize(), or reindex. (Shai Erera, Earwin Burrfoot)
+
+* LUCENE-2484: Removed deprecated TermAttribute. Use CharTermAttribute
+ and TermToBytesRefAttribute instead. (Uwe Schindler)
+
+* LUCENE-2600: Remove IndexReader.isDeleted in favor of
+ AtomicReader.getDeletedDocs(). (Mike McCandless)
+
+* LUCENE-2667: FuzzyQuery's defaults have changed for more performant
+ behavior: the minimum similarity is 2 edit distances from the word,
+ and the priority queue size is 50. To support this, FuzzyQuery now allows
+ specifying unscaled edit distances (foobar~2). If your application depends
+ upon the old defaults of 0.5 (scaled) minimum similarity and Integer.MAX_VALUE
+ priority queue size, you can use FuzzyQuery(Term, float, int, int) to specify
+ those explicitly.
+
+* LUCENE-2674: MultiTermQuery.TermCollector.collect now accepts the
+ TermsEnum as well. (Robert Muir, Mike McCandless)
+
+* LUCENE-588: WildcardQuery and QueryParser now allows escaping with
+ the '\' character. Previously this was impossible (you could not escape */?,
+ for example). If your code somehow depends on the old behavior, you will
+ need to change it (e.g. using "\\" to escape '\' itself).
+ (Sunil Kamath, Terry Yang via Robert Muir)
+
+* LUCENE-2837: Collapsed Searcher, Searchable into IndexSearcher;
+ removed contrib/remote and MultiSearcher (Mike McCandless); absorbed
+ ParallelMultiSearcher into IndexSearcher as an optional
+ ExecutorServiced passed to its ctor. (Mike McCandless)
+
+* LUCENE-2908, LUCENE-4037: Removed serialization code from lucene classes.
+ It is recommended that you serialize user search needs at a higher level
+ in your application.
+ (Robert Muir, Benson Margulies)
+
+* LUCENE-2831: Changed Weight#scorer, Weight#explain & Filter#getDocIdSet to
+ operate on a AtomicReaderContext instead of directly on IndexReader to enable
+ searches to be aware of IndexSearcher's context. (Simon Willnauer)
+
+* LUCENE-2839: Scorer#score(Collector,int,int) is now public because it is
+ called from other classes and part of public API. (Uwe Schindler)
+
+* LUCENE-2865: Weight#scorer(AtomicReaderContext, boolean, boolean) now accepts
+ a ScorerContext struct instead of booleans.(Simon Willnauer)
+
+* LUCENE-2882: Cut over SpanQuery#getSpans to AtomicReaderContext to enforce
+ per segment semantics on SpanQuery & Spans. (Simon Willnauer)
+
+* LUCENE-2236: Similarity can now be configured on a per-field basis. See the
+ migration notes in MIGRATE.txt for more details. (Robert Muir, Doron Cohen)
+
+* LUCENE-2315: AttributeSource's methods for accessing attributes are now final,
+ else it's easy to corrupt the internal states. (Uwe Schindler)
+
+* LUCENE-2814: The IndexWriter.flush method no longer takes "boolean
+ flushDocStores" argument, as we now always flush doc stores (index
+ files holding stored fields and term vectors) while flushing a
+ segment. (Mike McCandless)
+
+* LUCENE-2548: Field names (eg in Term, FieldInfo) are no longer
+ interned. (Mike McCandless)
+
+* LUCENE-2883: The contents of o.a.l.search.function has been consolidated into
+ the queries module and can be found at o.a.l.queries.function. See
+ MIGRATE.txt for more information (Chris Male)
+
+* LUCENE-2392, LUCENE-3299: Decoupled vector space scoring from
+ Query/Weight/Scorer. If you extended Similarity directly before, you should
+ extend TFIDFSimilarity instead. Similarity is now a lower-level API to
+ implement other scoring algorithms. See MIGRATE.txt for more details.
+ (David Nemeskey, Simon Willnauer, Mike McCandless, Robert Muir)
+
+* LUCENE-3330: The expert visitor API in Scorer has been simplified and
+ extended to support arbitrary relationships. To navigate to a scorer's
+ children, call Scorer.getChildren(). (Robert Muir)
+
+* LUCENE-2308: Field is now instantiated with an instance of IndexableFieldType,
+ of which there is a core implementation FieldType. Most properties
+ describing a Field have been moved to IndexableFieldType. See MIGRATE.txt
+ for more details. (Nikola Tankovic, Mike McCandless, Chris Male)
+
+* LUCENE-3396: ReusableAnalyzerBase.TokenStreamComponents.reset(Reader) now
+ returns void instead of boolean. If a Component cannot be reset, it should
+ throw an Exception. (Chris Male)
+
+* LUCENE-3396: ReusableAnalyzerBase has been renamed to Analyzer. All Analyzer
+ implementations must now use Analyzer.TokenStreamComponents, rather than
+ overriding .tokenStream() and .reusableTokenStream() (which are now final).
+ (Chris Male)
+
+* LUCENE-3346: Analyzer.reusableTokenStream() has been renamed to tokenStream()
+ with the old tokenStream() method removed. Consequently it is now mandatory
+ for all Analyzers to support reusability. (Chris Male)
+
+* LUCENE-3473: AtomicReader.getUniqueTermCount() no longer throws UOE when
+ it cannot be easily determined. Instead, it returns -1 to be consistent with
+ this behavior across other index statistics.
+ (Robert Muir)
+
+* LUCENE-1536: The abstract FilteredDocIdSet.match() method is no longer
+ allowed to throw IOException. This change was required to make it conform
+ to the Bits interface. This method should never do I/O for performance reasons.
+ (Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+ Jason Rutherglen, Paul Elschot)
+
+* LUCENE-3559: The methods "docFreq" and "maxDoc" on IndexSearcher were removed,
+ as these are no longer used by the scoring system. See MIGRATE.txt for more
+ details. (Robert Muir)
+
+* LUCENE-3533: Removed SpanFilters, they created large lists of objects and
+ did not scale. (Robert Muir)
+
+* LUCENE-3606: IndexReader and subclasses were made read-only. It is no longer
+ possible to delete or undelete documents using IndexReader; you have to use
+ IndexWriter now. As deleting by internal Lucene docID is no longer possible,
+ this requires adding a unique identifier field to your index. Deleting/
+ relying upon Lucene docIDs is not recommended anyway, because they can
+ change. Consequently commit() was removed and DirectoryReader.open(),
+ openIfChanged() no longer take readOnly booleans or IndexDeletionPolicy
+ instances. Furthermore, IndexReader.setNorm() was removed. If you need
+ customized norm values, the recommended way to do this is by modifying
+ Similarity to use an external byte[] or one of the new DocValues
+ fields (LUCENE-3108). Alternatively, to dynamically change norms (boost
+ *and* length norm) at query time, wrap your AtomicReader using
+ FilterAtomicReader, overriding FilterAtomicReader.norms(). To persist the
+ changes on disk, copy the FilteredIndexReader to a new index using
+ IndexWriter.addIndexes(). (Uwe Schindler, Robert Muir)
+
+* LUCENE-3640: Removed IndexSearcher.close(), because IndexSearcher no longer
+ takes a Directory and no longer "manages" IndexReaders, it is a no-op.
+ (Robert Muir)
+
+* LUCENE-3684: Add offsets into DocsAndPositionsEnum, and a few
+ FieldInfo.IndexOption: DOCS_AND_POSITIONS_AND_OFFSETS. (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-2858, LUCENE-3770: FilterIndexReader was renamed to
+ FilterAtomicReader and now extends AtomicReader. If you want to filter
+ composite readers like DirectoryReader or MultiReader, filter their
+ atomic leaves and build a new CompositeReader (e.g. MultiReader) around
+ them. (Uwe Schindler, Robert Muir)
+
+* LUCENE-3736: ParallelReader was split into ParallelAtomicReader
+ and ParallelCompositeReader. Lucene 3.x's ParallelReader is now
+ ParallelAtomicReader; but the new composite variant has improved performance
+ as it works on the atomic subreaders. It requires that all parallel
+ composite readers have the same subreader structure. If you cannot provide this,
+ you can use SlowCompositeReaderWrapper to make all parallel readers atomic
+ and use ParallelAtomicReader. (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-2000: clone() now returns covariant types where possible. (ryan)
+
+* LUCENE-3970: Rename Fields.getUniqueFieldCount -> .size() and
+ Terms.getUniqueTermCount -> .size(). (Iulius Curt via Mike McCandless)
+
+* LUCENE-3514: IndexSearcher.setDefaultFieldSortScoring was removed
+ and replaced with per-search control via new expert search methods
+ that take two booleans indicating whether hit scores and max
+ score should be computed. (Mike McCandless)
+
+* LUCENE-4055: You can't put foreign files into the index dir anymore.
+
+* LUCENE-3866: CompositeReader.getSequentialSubReaders() now returns
+ unmodifiable List<? extends IndexReader>. ReaderUtil.Gather was
+ removed, as IndexReaderContext.leaves() is now the preferred way
+ to access sub-readers. (Uwe Schindler)
+
+* LUCENE-4155: oal.util.ReaderUtil, TwoPhaseCommit, TwoPhaseCommitTool
+ classes were moved to oal.index package. oal.util.CodecUtil class was moved
+ to oal.codecs package. oal.util.DummyConcurrentLock was removed
+ (no longer used in Lucene 4.0). (Uwe Schindler)
+
+Changes in Runtime Behavior
+
+* LUCENE-2846: omitNorms now behaves like omitTermFrequencyAndPositions, if you
+ omitNorms(true) for field "a" for 1000 documents, but then add a document with
+ omitNorms(false) for field "a", all documents for field "a" will have no
+ norms. Previously, Lucene would fill the first 1000 documents with
+ "fake norms" from Similarity.getDefault(). (Robert Muir, Mike McCandless)
+
+* LUCENE-2846: When some documents contain field "a", and others do not, the
+ documents that don't have the field get a norm byte value of 0. Previously,
+ Lucene would populate "fake norms" with Similarity.getDefault() for these
+ documents. (Robert Muir, Mike McCandless)
+
+* LUCENE-2720: IndexWriter throws IndexFormatTooOldException on open, rather
+ than later when e.g. a merge starts.
+ (Shai Erera, Mike McCandless, Uwe Schindler)
+
+* LUCENE-2881: FieldInfos is now tracked per segment. Before it was tracked
+ per IndexWriter session, which resulted in FieldInfos that had the FieldInfo
+ properties from all previous segments combined. Field numbers are now tracked
+ globally across IndexWriter sessions and persisted into a _X.fnx file on
+ successful commit. The corresponding file format changes are backwards-
+ compatible. (Michael Busch, Simon Willnauer)
+
+* LUCENE-2956, LUCENE-2573, LUCENE-2324, LUCENE-2555: Changes from
+ DocumentsWriterPerThread:
+
+ - IndexWriter now uses a DocumentsWriter per thread when indexing documents.
+ Each DocumentsWriterPerThread indexes documents in its own private segment,
+ and the in memory segments are no longer merged on flush. Instead, each
+ segment is separately flushed to disk and subsequently merged with normal
+ segment merging.
+
+ - DocumentsWriterPerThread (DWPT) is now flushed concurrently based on a
+ FlushPolicy. When a DWPT is flushed, a fresh DWPT is swapped in so that
+ indexing may continue concurrently with flushing. The selected
+ DWPT flushes all its RAM resident documents do disk. Note: Segment flushes
+ don't flush all RAM resident documents but only the documents private to
+ the DWPT selected for flushing.
+
+ - Flushing is now controlled by FlushPolicy that is called for every add,
+ update or delete on IndexWriter. By default DWPTs are flushed either on
+ maxBufferedDocs per DWPT or the global active used memory. Once the active
+ memory exceeds ramBufferSizeMB only the largest DWPT is selected for
+ flushing and the memory used by this DWPT is subtracted from the active
+ memory and added to a flushing memory pool, which can lead to temporarily
+ higher memory usage due to ongoing indexing.
+
+ - IndexWriter now can utilize ramBufferSize > 2048 MB. Each DWPT can address
+ up to 2048 MB memory such that the ramBufferSize is now bounded by the max
+ number of DWPT available in the used DocumentsWriterPerThreadPool.
+ IndexWriters net memory consumption can grow far beyond the 2048 MB limit if
+ the application can use all available DWPTs. To prevent a DWPT from
+ exhausting its address space IndexWriter will forcefully flush a DWPT if its
+ hard memory limit is exceeded. The RAMPerThreadHardLimitMB can be controlled
+ via IndexWriterConfig and defaults to 1945 MB.
+ Since IndexWriter flushes DWPT concurrently not all memory is released
+ immediately. Applications should still use a ramBufferSize significantly
+ lower than the JVMs available heap memory since under high load multiple
+ flushing DWPT can consume substantial transient memory when IO performance
+ is slow relative to indexing rate.
+
+ - IndexWriter#commit now doesn't block concurrent indexing while flushing all
+ 'currently' RAM resident documents to disk. Yet, flushes that occur while a
+ a full flush is running are queued and will happen after all DWPT involved
+ in the full flush are done flushing. Applications using multiple threads
+ during indexing and trigger a full flush (eg call commit() or open a new
+ NRT reader) can use significantly more transient memory.
+
+ - IndexWriter#addDocument and IndexWriter.updateDocument can block indexing
+ threads if the number of active + number of flushing DWPT exceed a
+ safety limit. By default this happens if 2 * max number available thread
+ states (DWPTPool) is exceeded. This safety limit prevents applications from
+ exhausting their available memory if flushing can't keep up with
+ concurrently indexing threads.
+
+ - IndexWriter only applies and flushes deletes if the maxBufferedDelTerms
+ limit is reached during indexing. No segment flushes will be triggered
+ due to this setting.
+
+ - IndexWriter#flush(boolean, boolean) doesn't synchronized on IndexWriter
+ anymore. A dedicated flushLock has been introduced to prevent multiple full-
+ flushes happening concurrently.
+
+ - DocumentsWriter doesn't write shared doc stores anymore.
+
+ (Mike McCandless, Michael Busch, Simon Willnauer)
+
+* LUCENE-3309: Stored fields no longer record whether they were
+ tokenized or not. In general you should not rely on stored fields
+ to record any "metadata" from indexing (tokenized, omitNorms,
+ IndexOptions, boost, etc.) (Mike McCandless)
+
+* LUCENE-3309: Fast vector highlighter now inserts the
+ MultiValuedSeparator for NOT_ANALYZED fields (in addition to
+ ANALYZED fields). To ensure your offsets are correct you should
+ provide an analyzer that returns 1 from the offsetGap method.
+ (Mike McCandless)
+
+* LUCENE-2621: Removed contrib/instantiated. (Robert Muir)
+
+* LUCENE-1768: StandardQueryTreeBuilder no longer uses RangeQueryNodeBuilder
+ for RangeQueryNodes, since theses two classes were removed;
+ TermRangeQueryNodeProcessor now creates TermRangeQueryNode,
+ instead of RangeQueryNode; the same applies for numeric nodes;
+ (Vinicius Barros via Uwe Schindler)
+
+* LUCENE-3455: QueryParserBase.newFieldQuery() will throw a ParseException if
+ any of the calls to the Analyzer throw an IOException. QueryParseBase.analyzeRangePart()
+ will throw a RuntimeException if an IOException is thrown by the Analyzer.
+
+* LUCENE-4127: IndexWriter will now throw IllegalArgumentException if
+ the first token of an indexed field has 0 positionIncrement
+ (previously it silently corrected it to 1, possibly masking bugs).
+ OffsetAttributeImpl will throw IllegalArgumentException if startOffset
+ is less than endOffset, or if offsets are negative.
+ (Robert Muir, Mike McCandless)
+
+API Changes
+
+* LUCENE-2302, LUCENE-1458, LUCENE-2111, LUCENE-2514: Terms are no longer
+ required to be character based. Lucene views a term as an arbitrary byte[]:
+ during analysis, character-based terms are converted to UTF8 byte[],
+ but analyzers are free to directly create terms as byte[]
+ (NumericField does this, for example). The term data is buffered as
+ byte[] during indexing, written as byte[] into the terms dictionary,
+ and iterated as byte[] (wrapped in a BytesRef) by IndexReader for
+ searching.
+
+* LUCENE-1458, LUCENE-2111: AtomicReader now directly exposes its
+ deleted docs (getDeletedDocs), providing a new Bits interface to
+ directly query by doc ID.
+
+* LUCENE-2691: IndexWriter.getReader() has been made package local and is now
+ exposed via open and reopen methods on DirectoryReader. The semantics of the
+ call is the same as it was prior to the API change.
+ (Grant Ingersoll, Mike McCandless)
+
+* LUCENE-2566: QueryParser: Unary operators +,-,! will not be treated as
+ operators if they are followed by whitespace. (yonik)
+
+* LUCENE-2831: Weight#scorer, Weight#explain, Filter#getDocIdSet,
+ Collector#setNextReader & FieldComparator#setNextReader now expect an
+ AtomicReaderContext instead of an IndexReader. (Simon Willnauer)
+
+* LUCENE-2892: Add QueryParser.newFieldQuery (called by getFieldQuery by
+ default) which takes Analyzer as a parameter, for easier customization by
+ subclasses. (Robert Muir)
+
+* LUCENE-2953: In addition to changes in 3.x, PriorityQueue#initialize(int)
+ function was moved into the ctor. (Uwe Schindler, Yonik Seeley)
+
+* LUCENE-3219: SortField type properties have been moved to an enum
+ SortField.Type. In be consistent, CachedArrayCreator.getSortTypeID() has
+ been changed CachedArrayCreator.getSortType(). (Chris Male)
+
+* LUCENE-3225: Add TermsEnum.seekExact for faster seeking when you
+ don't need the ceiling term; renamed existing seek methods to either
+ seekCeil or seekExact; changed seekExact(ord) to return no value.
+ Fixed MemoryCodec and SimpleTextCodec to optimize the seekExact
+ case, and fixed places in Lucene to use seekExact when possible.
+ (Mike McCandless)
+
+* LUCENE-1536: Filter.getDocIdSet() now takes an acceptDocs Bits interface (like
+ Scorer) limiting the documents that can appear in the returned DocIdSet.
+ Filters are now required to respect these acceptDocs, otherwise deleted documents
+ may get returned by searches. Most filters will pass these Bits down to DocsEnum,
+ but those, e.g. working on FieldCache, may need to use BitsFilteredDocIdSet.wrap()
+ to exclude them.
+ (Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+ Jason Rutherglen, Paul Elschot)
+
+* LUCENE-3722: Similarity methods and collection/term statistics now take
+ long instead of int (to enable distributed scoring of > 2B docs).
+ (Yonik Seeley, Andrzej Bialecki, Robert Muir)
+
+* LUCENE-3761: Generalize SearcherManager into an abstract ReferenceManager.
+ SearcherManager remains a concrete class, but due to the refactoring, the
+ method maybeReopen has been deprecated in favor of maybeRefresh().
+ (Shai Erera, Mike McCandless, Simon Willnauer)
+
+* LUCENE-3859: AtomicReader.hasNorms(field) is deprecated, instead you
+ can inspect the FieldInfo yourself to see if norms are present, which
+ also allows you to get the type. (Robert Muir)
+
+* LUCENE-2606: Changed RegexCapabilities interface to fix thread
+ safety, serialization, and performance problems. If you have
+ written a custom RegexCapabilities it will need to be updated
+ to the new API. (Robert Muir, Uwe Schindler)
+
+* LUCENE-2638 MakeHighFreqTerms.TermStats public to make it more useful
+ for API use. (Andrzej Bialecki)
+
+* LUCENE-2912: The field-specific hashmaps in SweetSpotSimilarity were removed.
+ Instead, use PerFieldSimilarityWrapper to return different SweetSpotSimilaritys
+ for different fields, this way all parameters (such as TF factors) can be
+ customized on a per-field basis. (Robert Muir)
+
+* LUCENE-3308: DuplicateFilter keepMode and processingMode have been converted to
+ enums DuplicateFilter.KeepMode and DuplicateFilter.ProcessingMode respectively.
+
+* LUCENE-3483: Move Function grouping collectors from Solr to grouping module.
+ (Martijn van Groningen)
+
+* LUCENE-3606: FieldNormModifier was deprecated, because IndexReader's
+ setNorm() was deprecated. Furthermore, this class is broken, as it does
+ not take position overlaps into account while recalculating norms.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-3936: Renamed StringIndexDocValues to DocTermsIndexDocValues.
+ (Martijn van Groningen)
+
+* LUCENE-1768: Deprecated Parametric(Range)QueryNode, RangeQueryNode(Builder),
+ ParametricRangeQueryNodeProcessor were removed. (Vinicius Barros via Uwe Schindler)
+
+* LUCENE-3820: Deprecated constructors accepting pattern matching bounds. The input
+ is buffered and matched in one pass. (Dawid Weiss)
+
+* LUCENE-2413: Deprecated PatternAnalyzer in common/miscellaneous, in favor
+ of the pattern package (CharFilter, Tokenizer, TokenFilter). (Robert Muir)
+
+* LUCENE-2413: Removed the AnalyzerUtil in common/miscellaneous. (Robert Muir)
+
+* LUCENE-1370: Added ShingleFilter option to output unigrams if no shingles
+ can be generated. (Chris Harris via Steven Rowe)
+
+* LUCENE-2514, LUCENE-2551: JDK and ICU CollationKeyAnalyzers were changed to
+ use pure byte keys when Version >= 4.0. This cuts sort key size approximately
+ in half. (Robert Muir)
+
+* LUCENE-3400: Removed DutchAnalyzer.setStemDictionary (Chris Male)
+
+* LUCENE-3431: Removed QueryAutoStopWordAnalyzer.addStopWords* deprecated methods
+ since they prevented reuse. Stopwords are now generated at instantiation through
+ the Analyzer's constructors. (Chris Male)
+
+* LUCENE-3434: Removed ShingleAnalyzerWrapper.set* and PerFieldAnalyzerWrapper.addAnalyzer
+ since they prevent reuse. Both Analyzers should be configured at instantiation.
+ (Chris Male)
+
+* LUCENE-3765: Stopset ctors that previously took Set<?> or Map<?,String> now take
+ CharArraySet and CharArrayMap respectively. Previously the behavior was confusing,
+ and sometimes different depending on the type of set, and ultimately a CharArraySet
+ or CharArrayMap was always used anyway. (Robert Muir)
+
+* LUCENE-3830: Switched to NormalizeCharMap.Builder to create
+ immutable instances of NormalizeCharMap. (Dawid Weiss, Mike
+ McCandless)
+
+* LUCENE-4063: FrenchLightStemmer no longer deletes repeated digits.
+ (Tanguy Moal via Steve Rowe)
+
+* LUCENE-4122: Replace Payload with BytesRef. (Andrzej Bialecki)
+
+* LUCENE-4132: IndexWriter.getConfig() now returns a LiveIndexWriterConfig object
+ which can be used to change the IndexWriter's live settings. IndexWriterConfig
+ is used only for initializing the IndexWriter. (Shai Erera)
+
+* LUCENE-3866: IndexReaderContext.leaves() is now the preferred way to access
+ atomic sub-readers of any kind of IndexReader (for AtomicReaders it returns
+ itself as only leaf with docBase=0). (Uwe Schindler)
+
+New features
+
+* LUCENE-2604: Added RegexpQuery support to QueryParser. Regular expressions
+ are directly supported by the standard queryparser via
+ fieldName:/expression/ OR /expression against default field/
+ Users who wish to search for literal "/" characters are advised to
+ backslash-escape or quote those characters as needed.
+ (Simon Willnauer, Robert Muir)
+
+* LUCENE-1606, LUCENE-2089: Adds AutomatonQuery, a MultiTermQuery that
+ matches terms against a finite-state machine. Implement WildcardQuery
+ and FuzzyQuery with finite-state methods. Adds RegexpQuery.
+ (Robert Muir, Mike McCandless, Uwe Schindler, Mark Miller)
+
+* LUCENE-3662: Add support for levenshtein distance with transpositions
+ to LevenshteinAutomata, FuzzyTermsEnum, and DirectSpellChecker.
+ (Jean-Philippe Barrette-LaPierre, Robert Muir)
+
+* LUCENE-2321: Cutover to a more RAM efficient packed-ints based
+ representation for the in-memory terms dict index. (Mike
+ McCandless)
+
+* LUCENE-2126: Add new classes for data (de)serialization: DataInput
+ and DataOutput. IndexInput and IndexOutput extend these new classes.
+ (Michael Busch)
+
+* LUCENE-1458, LUCENE-2111: With flexible indexing it is now possible
+ for an application to create its own postings codec, to alter how
+ fields, terms, docs and positions are encoded into the index. The
+ standard codec is the default codec. IndexWriter accepts a Codec
+ class to obtain codecs for newly written segments.
+
+* LUCENE-1458, LUCENE-2111: Some experimental codecs have been added
+ for flexible indexing, including pulsing codec (inlines
+ low-frequency terms directly into the terms dict, avoiding seeking
+ for some queries), sep codec (stores docs, freqs, positions, skip
+ data and payloads in 5 separate files instead of the 2 used by
+ standard codec), and int block (really a "base" for using
+ block-based compressors like PForDelta for storing postings data).
+
+* LUCENE-1458, LUCENE-2111: The in-memory terms index used by standard
+ codec is more RAM efficient: terms data is stored as block byte
+ arrays and packed integers. Net RAM reduction for indexes that have
+ many unique terms should be substantial, and initial open time for
+ IndexReaders should be faster. These gains only apply for newly
+ written segments after upgrading.
+
+* LUCENE-1458, LUCENE-2111: Terms data are now buffered directly as
+ byte[] during indexing, which uses half the RAM for ascii terms (and
+ also numeric fields). This can improve indexing throughput for
+ applications that have many unique terms, since it reduces how often
+ a new segment must be flushed given a fixed RAM buffer size.
+
+* LUCENE-2489: Added PerFieldCodecWrapper (in oal.index.codecs) which
+ lets you set the Codec per field (Mike McCandless)
+
+* LUCENE-2373: Extend Codec to use SegmentInfosWriter and
+ SegmentInfosReader to allow customization of SegmentInfos data.
+ (Andrzej Bialecki)
+
+* LUCENE-2504: FieldComparator.setNextReader now returns a
+ FieldComparator instance. You can "return this", to just reuse the
+ same instance, or you can return a comparator optimized to the new
+ segment. (yonik, Mike McCandless)
+
+* LUCENE-2648: PackedInts.Iterator now supports to advance by more than a
+ single ordinal. (Simon Willnauer)
+
+* LUCENE-2649: Objects in the FieldCache can optionally store Bits
+ that mark which docs have real values in the native[] (ryan)
+
+* LUCENE-2664: Add SimpleText codec, which stores all terms/postings
+ data in a single text file for transparency (at the expense of poor
+ performance). (Sahin Buyrukbilen via Mike McCandless)
+
+* LUCENE-2589: Add a VariableSizedIntIndexInput, which, when used w/
+ Sep*, makes it simple to take any variable sized int block coders
+ (like Simple9/16) and use them in a codec. (Mike McCandless)
+
+* LUCENE-2597: Add oal.index.SlowCompositeReaderWrapper, to wrap a
+ composite reader (eg MultiReader or DirectoryReader), making it
+ pretend it's an atomic reader. This is a convenience class (you can
+ use MultiFields static methods directly, instead) if you need to use
+ the flex APIs directly on a composite reader. (Mike McCandless)
+
+* LUCENE-2690: MultiTermQuery boolean rewrites per segment.
+ (Uwe Schindler, Robert Muir, Mike McCandless, Simon Willnauer)
+
+* LUCENE-996: The QueryParser now accepts mixed inclusive and exclusive
+ bounds for range queries. Example: "{3 TO 5]"
+ QueryParser subclasses that overrode getRangeQuery will need to be changed
+ to use the new getRangeQuery method. (Andrew Schurman, Mark Miller, yonik)
+
+* LUCENE-2742: Add native per-field postings format support. Codec lets you now
+ register a postings format for each field and which is in turn recorded
+ into the index. Postings formats are maintained on a per-segment basis and be
+ resolved without knowing the actual postings format used for writing the segment.
+ (Simon Willnauer)
+
+* LUCENE-2741: Add support for multiple codecs that use the same file
+ extensions within the same segment. Codecs now use their per-segment codec
+ ID in the file names. (Simon Willnauer)
+
+* LUCENE-2843: Added a new terms index impl,
+ VariableGapTermsIndexWriter/Reader, that accepts a pluggable
+ IndexTermSelector for picking which terms should be indexed in the
+ terms dict. This impl stores the indexed terms in an FST, which is
+ much more RAM efficient than FixedGapTermsIndex. (Mike McCandless)
+
+* LUCENE-2862: Added TermsEnum.totalTermFreq() and
+ Terms.getSumTotalTermFreq(). (Mike McCandless, Robert Muir)
+
+* LUCENE-3290: Added Terms.getSumDocFreq() (Mike McCandless, Robert Muir)
+
+* LUCENE-3003: Added new expert class oal.index.DocTermsOrd,
+ refactored from Solr's UnInvertedField, for accessing term ords for
+ multi-valued fields, per document. This is similar to FieldCache in
+ that it inverts the index to compute the ords, but differs in that
+ it's able to handle multi-valued fields and does not hold the term
+ bytes in RAM. (Mike McCandless)
+
+* LUCENE-3108, LUCENE-2935, LUCENE-2168, LUCENE-1231: Changes from
+ DocValues (ColumnStrideFields):
+
+ - IndexWriter now supports typesafe dense per-document values stored in
+ a column like storage. DocValues are stored on a per-document
+ basis where each documents field can hold exactly one value of a given
+ type. DocValues are provided via Fieldable and can be used in
+ conjunction with stored and indexed values.
+
+ - DocValues provides an entirely RAM resident document id to value
+ mapping per field as well as a DocIdSetIterator based disk-resident
+ sequential access API relying on filesystem-caches.
+
+ - Both APIs are exposed via IndexReader and the Codec / Flex API allowing
+ expert users to integrate customized DocValues reader and writer
+ implementations by extending existing Codecs.
+
+ - DocValues provides implementations for primitive datatypes like int,
+ long, float, double and arrays of byte. Byte based implementations further
+ provide storage variants like straight or dereferenced stored bytes, fixed
+ and variable length bytes as well as index time sorted based on
+ user-provided comparators.
+
+ (Mike McCandless, Simon Willnauer)
+
+* LUCENE-3209: Added MemoryCodec, which stores all terms & postings in
+ RAM as an FST; this is good for primary-key fields if you frequently
+ need to lookup by that field or perform deletions against it, for
+ example in a near-real-time setting. (Mike McCandless)
+
+* SOLR-2533: Added support for rewriting Sort and SortFields using an
+ IndexSearcher. SortFields can have SortField.REWRITEABLE type which
+ requires they are rewritten before they are used. (Chris Male)
+
+* LUCENE-3203: FSDirectory can now limit the max allowed write rate
+ (MB/sec) of all running merges, to reduce impact ongoing merging has
+ on searching, NRT reopen time, etc. (Mike McCandless)
+
+* LUCENE-2793: Directory#createOutput & Directory#openInput now accept an
+ IOContext instead of a buffer size to allow low level optimizations for
+ different usecases like merging, flushing and reading.
+ (Simon Willnauer, Mike McCandless, Varun Thacker)
+
+* LUCENE-3354: FieldCache can cache DocTermOrds. (Martijn van Groningen)
+
+* LUCENE-3376: ReusableAnalyzerBase has been moved from modules/analysis/common
+ into lucene/src/java/org/apache/lucene/analysis (Chris Male)
+
+* LUCENE-3423: add Terms.getDocCount(), which returns the number of documents
+ that have at least one term for a field. (Yonik Seeley, Robert Muir)
+
+* LUCENE-2959: Added a variety of different relevance ranking systems to Lucene.
+
+ - Added Okapi BM25, Language Models, Divergence from Randomness, and
+ Information-Based Models. The models are pluggable, support all of lucene's
+ features (boosts, slops, explanations, etc) and queries (spans, etc).
+
+ - All models default to the same index-time norm encoding as
+ DefaultSimilarity, so you can easily try these out/switch back and
+ forth/run experiments and comparisons without reindexing. Note: most of
+ the models do rely upon index statistics that are new in Lucene 4.0, so
+ for existing 3.x indexes it's a good idea to upgrade your index to the
+ new format with IndexUpgrader first.
+
+ - Added a new subclass SimilarityBase which provides a simplified API
+ for plugging in new ranking algorithms without dealing with all of the
+ nuances and implementation details of Lucene.
+
+ - For example, to use BM25 for all fields:
+ searcher.setSimilarity(new BM25Similarity());
+
+ If you instead want to apply different similarities (e.g. ones with
+ different parameter values or different algorithms entirely) to different
+ fields, implement PerFieldSimilarityWrapper with your per-field logic.
+
+ (David Mark Nemeskey via Robert Muir)
+
+* LUCENE-3396: ReusableAnalyzerBase now provides a ReuseStrategy abstraction
+ which controls how TokenStreamComponents are reused per request. Two
+ implementations are provided - GlobalReuseStrategy which implements the
+ current behavior of sharing components between all fields, and
+ PerFieldReuseStrategy which shares per field. (Chris Male)
+
+* LUCENE-2309: Added IndexableField.tokenStream(Analyzer) which is now
+ responsible for creating the TokenStreams for Fields when they are to
+ be indexed. (Chris Male)
+
+* LUCENE-3433: Added random access for non RAM resident IndexDocValues. RAM
+ resident and disk resident IndexDocValues are now exposed via the Source
+ interface. ValuesEnum has been removed in favour of Source. (Simon Willnauer)
+
+* LUCENE-1536: Filters can now be applied down-low, if their DocIdSet implements
+ a new bits() method, returning all documents in a random access way. If the
+ DocIdSet is not too sparse, it will be passed as acceptDocs down to the Scorer
+ as replacement for AtomicReader's live docs.
+ In addition, FilteredQuery backs now IndexSearcher's filtering search methods.
+ Using FilteredQuery you can chain Filters in a very performant way
+ [new FilteredQuery(new FilteredQuery(query, filter1), filter2)], which was not
+ possible with IndexSearcher's methods. FilteredQuery also allows to override
+ the heuristics used to decide if filtering should be done random access or
+ using a conjunction on DocIdSet's iterator().
+ (Mike McCandless, Uwe Schindler, Robert Muir, Chris Male, Yonik Seeley,
+ Jason Rutherglen, Paul Elschot)
+
+* LUCENE-3638: Added sugar methods to IndexReader and IndexSearcher to
+ load only certain fields when loading a document. (Peter Chang via
+ Mike McCandless)
+
+* LUCENE-3628: Norms are represented as DocValues. AtomicReader exposes
+ a #normValues(String) method to obtain norms per field. (Simon Willnauer)
+
+* LUCENE-3687: Similarity#computeNorm(FieldInvertState, Norm) allows to compute
+ norm values or arbitrary precision. Instead of returning a fixed single byte
+ value, custom similarities can now set a integer, float or byte value to the
+ given Norm object. (Simon Willnauer)
+
+* LUCENE-2604, LUCENE-4103: Added RegexpQuery support to contrib/queryparser.
+ (Simon Willnauer, Robert Muir, Daniel Truemper)
+
+* LUCENE-2373: Added a Codec implementation that works with append-only
+ filesystems (such as e.g. Hadoop DFS). SegmentInfos writing/reading
+ code is refactored to support append-only FS, and to allow for future
+ customization of per-segment information. (Andrzej Bialecki)
+
+* LUCENE-2479: Added ability to provide a sort comparator for spelling suggestions along
+ with two implementations. The existing comparator (score, then frequency) is the default (Grant Ingersoll)
+
+* LUCENE-2608: Added the ability to specify the accuracy at method time in the SpellChecker. The per class
+ method is also still available. (Grant Ingersoll)
+
+* LUCENE-2507: Added DirectSpellChecker, which retrieves correction candidates directly
+ from the term dictionary using levenshtein automata. (Robert Muir)
+
+* LUCENE-3527: Add LuceneLevenshteinDistance, which computes string distance in a compatible
+ way as DirectSpellChecker. This can be used to merge top-N results from more than one
+ SpellChecker. (James Dyer via Robert Muir)
+
+* LUCENE-3496: Support grouping by DocValues. (Martijn van Groningen)
+
+* LUCENE-2795: Generified DirectIOLinuxDirectory to work across any
+ unix supporting the O_DIRECT flag when opening a file (tested on
+ Linux and OS X but likely other Unixes will work), and improved it
+ so it can be used for indexing and searching. The directory uses
+ direct IO when doing large merges to avoid unnecessarily evicting
+ cached IO pages due to large merges. (Varun Thacker, Mike
+ McCandless)
+
+* LUCENE-3827: DocsAndPositionsEnum from MemoryIndex implements
+ start/endOffset, if offsets are indexed. (Alan Woodward via Mike
+ McCandless)
+
+* LUCENE-3802, LUCENE-3856: Support for grouped faceting. (Martijn van Groningen)
+
+* LUCENE-3444: Added a second pass grouping collector that keeps track of distinct
+ values for a specified field for the top N group. (Martijn van Groningen)
+
+* LUCENE-3778: Added a grouping utility class that makes it easier to use result
+ grouping for pure Lucene apps. (Martijn van Groningen)
+
+* LUCENE-2341: A new analysis/ filter: Morfologik - a dictionary-driven lemmatizer
+ (accurate stemmer) for Polish (includes morphosyntactic annotations).
+ (Michał Dybizbański, Dawid Weiss)
+
+* LUCENE-2413: Consolidated Lucene/Solr analysis components into analysis/common.
+ New features from Solr now available to Lucene users include:
+ - o.a.l.analysis.commongrams: Constructs n-grams for frequently occurring terms
+ and phrases.
+ - o.a.l.analysis.charfilter.HTMLStripCharFilter: CharFilter that strips HTML
+ constructs.
+ - o.a.l.analysis.miscellaneous.WordDelimiterFilter: TokenFilter that splits words
+ into subwords and performs optional transformations on subword groups.
+ - o.a.l.analysis.miscellaneous.RemoveDuplicatesTokenFilter: TokenFilter which
+ filters out Tokens at the same position and Term text as the previous token.
+ - o.a.l.analysis.miscellaneous.TrimFilter: Trims leading and trailing whitespace
+ from Tokens in the stream.
+ - o.a.l.analysis.miscellaneous.KeepWordFilter: A TokenFilter that only keeps tokens
+ with text contained in the required words (inverse of StopFilter).
+ - o.a.l.analysis.miscellaneous.HyphenatedWordsFilter: A TokenFilter that puts
+ hyphenated words broken into two lines back together.
+ - o.a.l.analysis.miscellaneous.CapitalizationFilter: A TokenFilter that applies
+ capitalization rules to tokens.
+ - o.a.l.analysis.pattern: Package for pattern-based analysis, containing a
+ CharFilter, Tokenizer, and TokenFilter for transforming text with regexes.
+ - o.a.l.analysis.synonym.SynonymFilter: A synonym filter that supports multi-word
+ synonyms.
+ - o.a.l.analysis.phonetic: Package for phonetic search, containing various
+ phonetic encoders such as Double Metaphone.
+
+ Some existing analysis components changed packages:
+ - o.a.l.analysis.KeywordAnalyzer -> o.a.l.analysis.core.KeywordAnalyzer
+ - o.a.l.analysis.KeywordTokenizer -> o.a.l.analysis.core.KeywordTokenizer
+ - o.a.l.analysis.LetterTokenizer -> o.a.l.analysis.core.LetterTokenizer
+ - o.a.l.analysis.LowerCaseFilter -> o.a.l.analysis.core.LowerCaseFilter
+ - o.a.l.analysis.LowerCaseTokenizer -> o.a.l.analysis.core.LowerCaseTokenizer
+ - o.a.l.analysis.SimpleAnalyzer -> o.a.l.analysis.core.SimpleAnalyzer
+ - o.a.l.analysis.StopAnalyzer -> o.a.l.analysis.core.StopAnalyzer
+ - o.a.l.analysis.StopFilter -> o.a.l.analysis.core.StopFilter
+ - o.a.l.analysis.WhitespaceAnalyzer -> o.a.l.analysis.core.WhitespaceAnalyzer
+ - o.a.l.analysis.WhitespaceTokenizer -> o.a.l.analysis.core.WhitespaceTokenizer
+ - o.a.l.analysis.PorterStemFilter -> o.a.l.analysis.en.PorterStemFilter
+ - o.a.l.analysis.ASCIIFoldingFilter -> o.a.l.analysis.miscellaneous.ASCIIFoldingFilter
+ - o.a.l.analysis.ISOLatin1AccentFilter -> o.a.l.analysis.miscellaneous.ISOLatin1AccentFilter
+ - o.a.l.analysis.KeywordMarkerFilter -> o.a.l.analysis.miscellaneous.KeywordMarkerFilter
+ - o.a.l.analysis.LengthFilter -> o.a.l.analysis.miscellaneous.LengthFilter
+ - o.a.l.analysis.PerFieldAnalyzerWrapper -> o.a.l.analysis.miscellaneous.PerFieldAnalyzerWrapper
+ - o.a.l.analysis.TeeSinkTokenFilter -> o.a.l.analysis.sinks.TeeSinkTokenFilter
+ - o.a.l.analysis.CharFilter -> o.a.l.analysis.charfilter.CharFilter
+ - o.a.l.analysis.BaseCharFilter -> o.a.l.analysis.charfilter.BaseCharFilter
+ - o.a.l.analysis.MappingCharFilter -> o.a.l.analysis.charfilter.MappingCharFilter
+ - o.a.l.analysis.NormalizeCharMap -> o.a.l.analysis.charfilter.NormalizeCharMap
+ - o.a.l.analysis.CharArraySet -> o.a.l.analysis.util.CharArraySet
+ - o.a.l.analysis.CharArrayMap -> o.a.l.analysis.util.CharArrayMap
+ - o.a.l.analysis.ReusableAnalyzerBase -> o.a.l.analysis.util.ReusableAnalyzerBase
+ - o.a.l.analysis.StopwordAnalyzerBase -> o.a.l.analysis.util.StopwordAnalyzerBase
+ - o.a.l.analysis.WordListLoader -> o.a.l.analysis.util.WordListLoader
+ - o.a.l.analysis.CharTokenizer -> o.a.l.analysis.util.CharTokenizer
+ - o.a.l.util.CharacterUtils -> o.a.l.analysis.util.CharacterUtils
+
+ All analyzers in contrib/analyzers and contrib/icu were moved to the
+ analysis/ module. The 'smartcn' and 'stempel' components now depend on 'common'.
+ (Chris Male, Robert Muir)
+
+* LUCENE-4004: Add DisjunctionMaxQuery support to the xml query parser.
+ (Benson Margulies via Robert Muir)
+
+* LUCENE-4025: Add maybeRefreshBlocking to ReferenceManager, to let a caller
+ block until the refresh logic has been executed. (Shai Erera, Mike McCandless)
+
+* LUCENE-4039: Add AddIndexesTask to benchmark, which uses IW.addIndexes.
+ (Shai Erera)
+
+* LUCENE-3514: Added IndexSearcher.searchAfter when Sort is used,
+ returning results after a specified FieldDoc for deep
+ paging. (Mike McCandless)
+
+* LUCENE-4043: Added scoring support via score mode for query time joining.
+ (Martijn van Groningen, Mike McCandless)
+
+* LUCENE-3523: Added oal.search.spell.WordBreakSpellChecker, which
+ generates suggestions by combining two or more terms and/or
+ breaking terms into multiple words. See Javadocs for usage. (James Dyer)
+
+* LUCENE-4019: Added improved parsing of Hunspell Dictionaries so those
+ rules missing the required number of parameters either ignored or
+ cause a ParseException (depending on whether strict parsing is enabled).
+ (Luca Cavanna via Chris Male)
+
+* LUCENE-3440: Add ordered fragments feature with IDF-weighted terms for FVH.
+ (Sebastian Lutze via Koji Sekiguchi)
+
+* LUCENE-4082: Added explain to ToParentBlockJoinQuery.
+ (Christoph Kaser, Martijn van Groningen)
+
+* LUCENE-4108: add replaceTaxonomy to DirectoryTaxonomyWriter, which replaces
+ the taxonomy in place with the given one. (Shai Erera)
+
+* LUCENE-3030: new BlockTree terms dictionary (used by the default
+ Lucene40 postings format) uses less RAM (for the terms index) and
+ disk space (for all terms and metadata) and gives sizable
+ performance gains for terms dictionary intensive operations like
+ FuzzyQuery, direct spell checker and primary-key lookup (Mike
+ McCandless).
+
+Optimizations
+
+* LUCENE-2588: Don't store unnecessary suffixes when writing the terms
+ index, saving RAM in IndexReader; change default terms index
+ interval from 128 to 32, because the terms index now requires much
+ less RAM. (Robert Muir, Mike McCandless)
+
+* LUCENE-2669: Optimize NumericRangeQuery.NumericRangeTermsEnum to
+ not seek backwards when a sub-range has no terms. It now only seeks
+ when the current term is less than the next sub-range's lower end.
+ (Uwe Schindler, Mike McCandless)
+
+* LUCENE-2694: Optimize MultiTermQuery to be single pass for Term lookups.
+ MultiTermQuery now stores TermState per leaf reader during rewrite to re-
+ seek the term dictionary in TermQuery / TermWeight.
+ (Simon Willnauer, Mike McCandless, Robert Muir)
+
+* LUCENE-3292: IndexWriter no longer shares the same SegmentReader
+ instance for merging and NRT readers, which enables directory impls
+ to separately tune IO flags for each. (Varun Thacker, Simon
+ Willnauer, Mike McCandless)
+
+* LUCENE-3328: BooleanQuery now uses a specialized ConjunctionScorer if all
+ boolean clauses are required and instances of TermQuery.
+ (Simon Willnauer, Robert Muir)
+
+* LUCENE-3643: FilteredQuery and IndexSearcher.search(Query, Filter,...)
+ now optimize the special case query instanceof MatchAllDocsQuery to
+ execute as ConstantScoreQuery. (Uwe Schindler)
+
+* LUCENE-3509: Added fasterButMoreRam option for docvalues. This option controls whether the space for packed ints
+ should be rounded up for better performance. This option only applies for docvalues types bytes fixed sorted
+ and bytes var sorted. (Simon Willnauer, Martijn van Groningen)
+
+* LUCENE-3795: Replace contrib/spatial with modules/spatial. This includes
+ a basic spatial strategy interface. (David Smiley, Chris Male, ryan)
+
+* LUCENE-3932: Lucene3x codec loads terms index faster, by
+ pre-allocating the packed ints array based on the .tii file size
+ (Sean Bridges via Mike McCandless)
+
+* LUCENE-3468: Replaced last() and remove() with pollLast() in
+ FirstPassGroupingCollector (Martijn van Groningen)
+
+* LUCENE-3830: Changed MappingCharFilter/NormalizeCharMap to use an
+ FST under the hood, which requires less RAM. NormalizeCharMap no
+ longer accepts empty string match (it did previously, but ignored
+ it). (Dawid Weiss, Mike McCandless)
+
+* LUCENE-4061: improve synchronization in DirectoryTaxonomyWriter.addCategory
+ and few general improvements to DirectoryTaxonomyWriter.
+ (Shai Erera, Gilad Barkai)
+
+* LUCENE-4062: Add new aligned packed bits impls for faster lookup
+ performance; add float acceptableOverheadRatio to getWriter and
+ getMutable API to give packed ints freedom to pick faster
+ implementations (Adrien Grand via Mike McCandless)
+
+* LUCENE-2357: Reduce transient RAM usage when merging segments in
+ IndexWriter. (Adrien Grand)
+
+* LUCENE-4098: Add bulk get/set methods to PackedInts (Adrien Grand
+ via Mike McCandless)
+
+* LUCENE-4156: DirectoryTaxonomyWriter.getSize is no longer synchronized.
+ (Shai Erera, Sivan Yogev)
+
+* LUCENE-4163: Improve concurrency of MMapIndexInput.clone() by using
+ the new WeakIdentityMap on top of a ConcurrentHashMap to manage
+ the cloned instances. WeakIdentityMap was extended to support
+ iterating over its keys. (Uwe Schindler)
+
+Bug fixes
+
+* LUCENE-2803: The FieldCache can miss values if an entry for a reader
+ with more document deletions is requested before a reader with fewer
+ deletions, provided they share some segments. (yonik)
+
+* LUCENE-2645: Fix false assertion error when same token was added one
+ after another with 0 posIncr. (David Smiley, Kurosaka Teruhiko via Mike
+ McCandless)
+
+* LUCENE-3348: Fix thread safety hazards in IndexWriter that could
+ rarely cause deletions to be incorrectly applied. (Yonik Seeley,
+ Simon Willnauer, Mike McCandless)
+
+* LUCENE-3515: Fix terrible merge performance versus 3.x, especially
+ when the directory isn't MMapDirectory, due to failing to reuse
+ DocsAndPositionsEnum while merging (Marc Sturlese, Erick Erickson,
+ Robert Muir, Simon Willnauer, Mike McCandless)
+
+* LUCENE-3589: BytesRef copy(short) didn't set length.
+ (Peter Chang via Robert Muir)
+
+* LUCENE-3045: fixed QueryNodeImpl.containsTag(String key) that was
+ not lowercasing the key before checking for the tag (Adriano Crestani)
+
+* LUCENE-3890: Fixed NPE for grouped faceting on multi-valued fields.
+ (Michael McCandless, Martijn van Groningen)
+
+* LUCENE-2945: Fix hashCode/equals for surround query parser generated queries.
+ (Paul Elschot, Simon Rosenthal, gsingers via ehatcher)
+
+* LUCENE-3971: MappingCharFilter could return invalid final token position.
+ (Dawid Weiss, Robert Muir)
+
+* LUCENE-3820: PatternReplaceCharFilter could return invalid token positions.
+ (Dawid Weiss)
+
+* LUCENE-3969: Throw IAE on bad arguments that could cause confusing errors in
+ CompoundWordTokenFilterBase, PatternTokenizer, PositionFilter,
+ SnowballFilter, PathHierarchyTokenizer, ReversePathHierarchyTokenizer,
+ WikipediaTokenizer, and KeywordTokenizer. ShingleFilter and
+ CommonGramsFilter now populate PositionLengthAttribute. Fixed
+ PathHierarchyTokenizer to reset() all state. Protect against AIOOBE in
+ ReversePathHierarchyTokenizer if skip is large. Fixed wrong final
+ offset calculation in PathHierarchyTokenizer.
+ (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-4060: Fix a synchronization bug in
+ DirectoryTaxonomyWriter.addTaxonomies(). Also, the method has been renamed to
+ addTaxonomy and now takes only one Directory and one OrdinalMap.
+ (Shai Erera, Gilad Barkai)
+
+* LUCENE-3590: Fix AIOOBE in BytesRef/CharsRef copyBytes/copyChars when
+ offset is nonzero, fix off-by-one in CharsRef.subSequence, and fix
+ CharsRef's CharSequence methods to throw exceptions in boundary cases
+ to properly meet the specification. (Robert Muir)
+
+* LUCENE-4084: Attempting to reuse a single IndexWriterConfig instance
+ across more than one IndexWriter resulted in a cryptic exception.
+ This is now fixed, but requires that certain members of
+ IndexWriterConfig (MergePolicy, FlushPolicy,
+ DocumentsWriterThreadPool) implement clone. (Robert Muir, Simon
+ Willnauer, Mike McCandless)
+
+* LUCENE-4079: Fixed loading of Hunspell dictionaries that use aliasing (AF rules)
+ (Ludovic Boutros via Chris Male)
+
+* LUCENE-4077: Expose the max score and per-group scores from
+ ToParentBlockJoinCollector (Christoph Kaser, Mike McCandless)
+
+* LUCENE-4114: Fix int overflow bugs in BYTES_FIXED_STRAIGHT and
+ BYTES_FIXED_DEREF doc values implementations (Walt Elder via Mike McCandless).
+
+* LUCENE-4147: Fixed thread safety issues when rollback() and commit()
+ are called simultaneously. (Simon Willnauer, Mike McCandless)
+
+* LUCENE-4165: Removed closing of the Reader used to read the affix file in
+ HunspellDictionary. Consumers are now responsible for closing all InputStreams
+ once the Dictionary has been instantiated. (Torsten Krah, Uwe Schindler, Chris Male)
+
+Documentation
+
+* LUCENE-3958: Javadocs corrections for IndexWriter.
+ (Iulius Curt via Robert Muir)
+
+Build
+
+* LUCENE-4047: Cleanup of LuceneTestCase: moved blocks of initialization/ cleanup
+ code into JUnit instance and class rules. (Dawid Weiss)
+
+* LUCENE-4016: Require ANT 1.8.2+ for the build.
+
+* LUCENE-3808: Refactoring of testing infrastructure to use randomizedtesting
+ package: http://labs.carrotsearch.com/randomizedtesting.html (Dawid Weiss)
+
+* LUCENE-3964: Added target stage-maven-artifacts, which stages
+ Maven release artifacts to a Maven staging repository in preparation
+ for release. (Steve Rowe)
+
+* LUCENE-2845: Moved contrib/benchmark to lucene/benchmark.
+
+* LUCENE-2995: Moved contrib/spellchecker into lucene/suggest.
+
+* LUCENE-3285: Moved contrib/queryparser into lucene/queryparser
+
+* LUCENE-3285: Moved contrib/xml-query-parser's demo into lucene/demo
+
+* LUCENE-3271: Moved contrib/queries BooleanFilter, BoostingQuery,
+ ChainedFilter, FilterClause and TermsFilter into lucene/queries
+
+* LUCENE-3381: Moved contrib/queries regex.*, DuplicateFilter,
+ FuzzyLikeThisQuery and SlowCollated* into lucene/sandbox.
+ Removed contrib/queries.
+
+* LUCENE-3286: Moved remainder of contrib/xml-query-parser to lucene/queryparser.
+ Classes now found at org.apache.lucene.queryparser.xml.*
+
+* LUCENE-4059: Improve ANT task prepare-webpages (used by documentation
+ tasks) to correctly encode build file names as URIs for later processing by
+ XSL. (Greg Bowyer, Uwe Schindler)
+
+
+======================= Lucene 3.6.2 =======================
+
+Bug Fixes
+
+* LUCENE-4234: Exception when FacetsCollector is used with ScoreFacetRequest,
+ and the number of matching documents is too large. (Gilad Barkai via Shai Erera)
+
+* LUCENE-2686, LUCENE-3505, LUCENE-4401: Fix BooleanQuery scorers to
+ return correct freq().
+ (Koji Sekiguchi, Mike McCandless, Liu Chao, Robert Muir)
+
+* LUCENE-2501: Fixed rare thread-safety issue that could cause
+ ArrayIndexOutOfBoundsException inside ByteBlockPool (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-4297: BooleanScorer2 would multiply the coord() factor
+ twice for conjunctions: for most users this is no problem, but
+ if you had a customized Similarity that returned something other
+ than 1 when overlap == maxOverlap (always the case for conjunctions),
+ then the score would be incorrect. (Pascal Chollet, Robert Muir)
+
+* LUCENE-4300: BooleanQuery's rewrite was not always safe: if you
+ had a custom Similarity where coord(1,1) != 1F, then the rewritten
+ query would be scored differently. (Robert Muir)
+
+* LUCENE-4398: If you index many different field names in your
+ documents then due to a bug in how it measures its RAM
+ usage, IndexWriter would flush each segment too early eventually
+ reaching the point where it flushes after every doc. (Tim Smith via
+ Mike McCandless)
+
+* LUCENE-4411: when sampling is enabled for a FacetRequest, its depth
+ parameter is reset to the default (1), even if set otherwise.
+ (Gilad Barkai via Shai Erera)
+
+* LUCENE-4635: Fixed ArrayIndexOutOfBoundsException when in-memory
+ terms index requires more than 2.1 GB RAM (indices with billions of
+ terms). (Tom Burton-West via Mike McCandless)
+
+Documentation
+
+* LUCENE-4302: Fix facet userguide to have HTML loose doctype like
+ all other javadocs. (Karl Nicholas via Uwe Schindler)
+
+
+======================= Lucene 3.6.1 =======================
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/lucene-java/Lucene3.6.1
+
+Bug Fixes
+
+* LUCENE-3969: Throw IAE on bad arguments that could cause confusing
+ errors in KeywordTokenizer.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-3971: MappingCharFilter could return invalid final token position.
+ (Dawid Weiss, Robert Muir)
+
+* LUCENE-4023: DisjunctionMaxScorer now implements visitSubScorers().
+ (Uwe Schindler)
+
+* LUCENE-2566: + - operators allow any amount of whitespace (yonik, janhoy)
+
+* LUCENE-3590: Fix AIOOBE in BytesRef/CharsRef copyBytes/copyChars when
+ offset is nonzero, fix off-by-one in CharsRef.subSequence, and fix
+ CharsRef's CharSequence methods to throw exceptions in boundary cases
+ to properly meet the specification. (Robert Muir)
+
+* LUCENE-4222: TieredMergePolicy.getFloorSegmentMB was returning the
+ size in bytes not MB (Chris Fuller via Mike McCandless)
+
+API Changes
+
+* LUCENE-4023: Changed the visibility of Scorer#visitSubScorers() to
+ public, otherwise it's impossible to implement Scorers outside
+ the Lucene package. (Uwe Schindler)
+
+Optimizations
+
+* LUCENE-4163: Improve concurrency of MMapIndexInput.clone() by using
+ the new WeakIdentityMap on top of a ConcurrentHashMap to manage
+ the cloned instances. WeakIdentityMap was extended to support
+ iterating over its keys. (Uwe Schindler)
+
+Tests
+
+* LUCENE-3873: add MockGraphTokenFilter, testing analyzers with
+ random graph tokens. (Mike McCandless)
+
+* LUCENE-3968: factor out LookaheadTokenFilter from
+ MockGraphTokenFilter (Mike McCandless)
+
+
+======================= Lucene 3.6.0 =======================
+More information about this release, including any errata related to the
+release notes, upgrade instructions, or other changes may be found online at:
+ https://wiki.apache.org/lucene-java/Lucene3.6
+
+Changes in backwards compatibility policy
+
+* LUCENE-3594: The protected inner class (never intended to be visible)
+ FieldCacheTermsFilter.FieldCacheTermsFilterDocIdSet was removed and
+ replaced by another internal implementation. (Uwe Schindler)
+
+* LUCENE-3620: FilterIndexReader now overrides all methods of IndexReader that
+ it should (note that some are still not overridden, as they should be
+ overridden by sub-classes only). In the process, some methods of IndexReader
+ were made final. This is not expected to affect many apps, since these methods
+ already delegate to abstract methods, which you had to already override
+ anyway. (Shai Erera)
+
+* LUCENE-3636: Added SearcherFactory, used by SearcherManager and NRTManager
+ to create new IndexSearchers. You can provide your own implementation to
+ warm new searchers, set an ExecutorService, set a custom Similarity, or
+ even return your own subclass of IndexSearcher. The SearcherWarmer and
+ ExecutorService parameters on these classes were removed, as they are
+ subsumed by SearcherFactory. (Shai Erera, Mike McCandless, Robert Muir)
+
+* LUCENE-3644: The expert ReaderFinishedListener api suffered problems (propagated
+ down to subreaders, but was not called on SegmentReaders, unless they were
+ the owner of the reader core, and other ambiguities). The API is revised:
+ You can set ReaderClosedListeners on any IndexReader, and onClose is called
+ when that reader is closed. SegmentReader has CoreClosedListeners that you
+ can register to know when a shared reader core is closed.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+* LUCENE-3652: The package org.apache.lucene.messages was moved to
+ contrib/queryparser. If you have used those classes in your code
+ just add the lucene-queryparser.jar file to your classpath.
+ (Uwe Schindler)
+
+* LUCENE-3681: FST now stores labels for BYTE2 input type as 2 bytes
+ instead of vInt; this can make FSTs smaller and faster, but it is a
+ break in the binary format so if you had built and saved any FSTs
+ then you need to rebuild them. (Robert Muir, Mike McCandless)
+
+* LUCENE-3679: The expert IndexReader.getFieldNames(FieldOption) API
+ has been removed and replaced with the experimental getFieldInfos
+ API. All IndexReader subclasses must implement getFieldInfos.
+ (Mike McCandless)
+
+* LUCENE-3695: Move confusing add(X) methods out of FST.Builder into
+ FST.Util. (Robert Muir, Mike McCandless)
+
+* LUCENE-3701: Added an additional argument to the expert FST.Builder
+ ctor to take FreezeTail, which you can use to (very-expertly) customize
+ the FST construction process. Pass null if you want the default
+ behavior. Added seekExact() to FSTEnum, and added FST.save/read
+ from a File. (Mike McCandless, Dawid Weiss, Robert Muir)
+
+* LUCENE-3712: Removed unused and untested ReaderUtil#subReader methods.
+ (Uwe Schindler)
+
+* LUCENE-3672: Deprecate Directory.fileModified,
+ IndexCommit.getTimestamp and .getVersion and
+ IndexReader.lastModified and getCurrentVersion (Andrzej Bialecki,
+ Robert Muir, Mike McCandless)
+
+* LUCENE-3760: In IndexReader/DirectoryReader, deprecate static
+ methods getCurrentVersion and getCommitUserData, and non-static
+ method getCommitUserData (use getIndexCommit().getUserData()
+ instead). (Ryan McKinley, Robert Muir, Mike McCandless)
+
+* LUCENE-3867: Deprecate instance creation of RamUsageEstimator, instead
+ the new static method sizeOf(Object) should be used. As the algorithm
+ is now using Hotspot(TM) internals (reference size, header sizes,
+ object alignment), the abstract o.a.l.util.MemoryModel class was
+ completely removed (without replacement). The new static methods
+ no longer support String intern-ness checking, interned strings
+ now count to memory usage as any other Java object.
+ (Dawid Weiss, Uwe Schindler, Shai Erera)
+
+* LUCENE-3738: All readXxx methods in BufferedIndexInput were made
+ final. Subclasses should only override protected readInternal /
+ seekInternal. (Uwe Schindler)
+
+* LUCENE-2599: Deprecated the spatial contrib module, which was buggy and not
+ well maintained. Lucene 4 includes a new spatial module that replaces this.
+ (David Smiley, Ryan McKinley, Chris Male)
+
+Changes in Runtime Behavior
+
+* LUCENE-3796, SOLR-3241: Throw an exception if you try to set an index-time
+ boost on a field that omits norms. Because the index-time boost
+ is multiplied into the norm, previously your boost would be
+ silently discarded. (Tomás Fernández Löbbe, Hoss Man, Robert Muir)
+
+* LUCENE-3848: Fix tokenstreams to not produce a stream with an initial
+ position increment of 0: which is out of bounds (overlapping with a
+ non-existent previous term). Consumers such as IndexWriter and QueryParser
+ still check for and silently correct this situation today, but at some point
+ in the future they may throw an exception. (Mike McCandless, Robert Muir)
+
+* LUCENE-3738: DataInput/DataOutput no longer allow negative vLongs. Negative
+ vInts are still supported (for index backwards compatibility), but
+ should not be used in new code. The read method for negative vLongs
+ was already broken since Lucene 3.1.
+ (Uwe Schindler, Mike McCandless, Robert Muir)
+
+Security fixes
+
+* LUCENE-3588: Try harder to prevent SIGSEGV on cloned MMapIndexInputs:
+ Previous versions of Lucene could SIGSEGV the JVM if you try to access
+ the clone of an IndexInput retrieved from MMapDirectory. This security fix
+ prevents this as best as it can by throwing AlreadyClosedException
+ also on clones. (Uwe Schindler, Robert Muir)
+
+API Changes
+
+* LUCENE-3606: IndexReader will be made read-only in Lucene 4.0, so all
+ methods allowing to delete or undelete documents using IndexReader were
+ deprecated; you should use IndexWriter now. Consequently
+ IndexReader.commit() and all open(), openIfChanged(), clone() methods
+ taking readOnly booleans (or IndexDeletionPolicy instances) were
+ deprecated. IndexReader.setNorm() is superfluous and was deprecated.
+ If you have to change per-document boost use CustomScoreQuery.
+ If you want to dynamically change norms (boost *and* length norm) at
+ query time, wrap your IndexReader using FilterIndexReader, overriding
+ FilterIndexReader.norms(). To persist the changes on disk, copy the
+ FilteredIndexReader to a new index using IndexWriter.addIndexes().
+ In Lucene 4.0, SimilarityProvider will allow you to customize scoring
+ using external norms, too. (Uwe Schindler, Robert Muir)
+
+* LUCENE-3735: PayloadProcessorProvider was changed to return a
+ ReaderPayloadProcessor instead of DirPayloadProcessor. The selection
+ of the provider to return for the factory is now based on the IndexReader
+ to be merged. To mimic the old behaviour, just use IndexReader.directory()
+ for choosing the provider by Directory. (Uwe Schindler)
+
+* LUCENE-3765: Deprecated StopFilter ctor that took ignoreCase, because
+ in some cases (if the set is a CharArraySet), the argument is ignored.
+ Deprecated StandardAnalyzer and ClassicAnalyzer ctors that take File,
+ please use the Reader ctor instead. (Robert Muir)
+
+* LUCENE-3766: Deprecate no-arg ctors of Tokenizer. Tokenizers are
+ TokenStreams with Readers: tokenizers with null Readers will not be
+ supported in Lucene 4.0, just use a TokenStream.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-3769: Simplified NRTManager by requiring applyDeletes to be
+ passed to ctor only; if an app needs to mix and match it's free to
+ create two NRTManagers (one always applying deletes and the other
+ never applying deletes). (MJB, Shai Erera, Mike McCandless)
+
+* LUCENE-3761: Generalize SearcherManager into an abstract ReferenceManager.
+ SearcherManager remains a concrete class, but due to the refactoring, the
+ method maybeReopen has been deprecated in favor of maybeRefresh().
+ (Shai Erera, Mike McCandless, Simon Willnauer)
+
+* LUCENE-3776: You now acquire/release the IndexSearcher directly from
+ NRTManager. (Mike McCandless)
+
+New Features
+
+* LUCENE-3593: Added a FieldValueFilter that accepts all documents that either
+ have at least one or no value at all in a specific field. (Simon Willnauer,
+ Uwe Schindler, Robert Muir)
+
+* LUCENE-3586: CheckIndex and IndexUpgrader allow you to specify the
+ specific FSDirectory implementation to use (with the new -dir-impl
+ command-line option). (Luca Cavanna via Mike McCandless)
+
+* LUCENE-3634: IndexReader's static main method was moved to a new
+ tool, CompoundFileExtractor, in contrib/misc. (Robert Muir, Mike
+ McCandless)
+
+* LUCENE-995: The QueryParser now interprets * as an open end for range
+ queries. Literal asterisks may be represented by quoting or escaping
+ (i.e. \* or "*") Custom QueryParser subclasses overriding getRangeQuery()
+ will be passed null for any open endpoint. (Ingo Renner, Adriano
+ Crestani, yonik, Mike McCandless
+
+* LUCENE-3121: Add sugar reverse lookup (given an output, find the
+ input mapping to it) for FSTs that have strictly monotonic long
+ outputs (such as an ord). (Mike McCandless)
+
+* LUCENE-3671: Add TypeTokenFilter that filters tokens based on
+ their TypeAttribute. (Tommaso Teofili via Uwe Schindler)
+
+* LUCENE-3690,LUCENE-3913: Added HTMLStripCharFilter, a CharFilter that strips
+ HTML markup. (Steve Rowe)
+
+* LUCENE-3725: Added optional packing to FST building; this uses extra
+ RAM during building but results in a smaller FST. (Mike McCandless)
+
+* LUCENE-3714: Add top N shortest cost paths search for FST.
+ (Robert Muir, Dawid Weiss, Mike McCandless)
+
+* LUCENE-3789: Expose MTQ TermsEnum via RewriteMethod for non package private
+ access (Simon Willnauer)
+
+* LUCENE-3881: Added UAX29URLEmailAnalyzer: a standard analyzer that recognizes
+ URLs and emails. (Steve Rowe)
+
+Bug fixes
+
+* LUCENE-3595: Fixed FieldCacheRangeFilter and FieldCacheTermsFilter
+ to correctly respect deletions on reopened SegmentReaders. Factored out
+ FieldCacheDocIdSet to be a top-level class. (Uwe Schindler, Simon Willnauer)
+
+* LUCENE-3627: Don't let an errant 0-byte segments_N file corrupt the index.
+ (Ken McCracken via Mike McCandless)
+
+* LUCENE-3630: The internal method MultiReader.doOpenIfChanged(boolean doClone)
+ was overriding IndexReader.doOpenIfChanged(boolean readOnly), so changing the
+ contract of the overridden method. This method was renamed and made private.
+ In ParallelReader the bug was not existent, but the implementation method
+ was also made private. (Uwe Schindler)
+
+* LUCENE-3641: Fixed MultiReader to correctly propagate readerFinishedListeners
+ to clones/reopened readers. (Uwe Schindler)
+
+* LUCENE-3642, SOLR-2891, LUCENE-3717: Fixed bugs in CharTokenizer, n-gram tokenizers/filters,
+ compound token filters, thai word filter, icutokenizer, pattern analyzer,
+ wikipediatokenizer, and smart chinese where they would create invalid offsets in
+ some situations, leading to problems in highlighting.
+ (Max Beutel, Edwin Steiner via Robert Muir)
+
+* LUCENE-3639: TopDocs.merge was incorrectly setting TopDocs.maxScore to
+ Float.MIN_VALUE when it should be Float.NaN, when there were 0
+ hits. Improved age calculation in SearcherLifetimeManager, to have
+ double precision and to compute age to be how long ago the searcher
+ was replaced with a new searcher (Mike McCandless)
+
+* LUCENE-3658: Corrected potential concurrency issues with
+ NRTCachingDir, fixed createOutput to overwrite any previous file,
+ and removed invalid asserts (Robert Muir, Mike McCandless)
+
+* LUCENE-3605: don't sleep in a retry loop when trying to locate the
+ segments_N file (Robert Muir, Mike McCandless)
+
+* LUCENE-3711: SentinelIntSet with a small initial size can go into
+ an infinite loop when expanded. This can affect grouping using
+ TermAllGroupsCollector or TermAllGroupHeadsCollector if instantiated with a
+ non default small size. (Martijn van Groningen, yonik)
+
+* LUCENE-3727: When writing stored fields and term vectors, Lucene
+ checks file sizes to detect a bug in some Sun JREs (LUCENE-1282),
+ however, on some NFS filesystems File.length() could be stale,
+ resulting in false errors like "fdx size mismatch while indexing".
+ These checks now use getFilePointer instead to avoid this.
+ (Jamir Shaikh, Mike McCandless, Robert Muir)
+
+* LUCENE-3816: Fixed problem in FilteredDocIdSet, if null was returned
+ from the delegate DocIdSet.iterator(), which is allowed to return
+ null by DocIdSet specification when no documents match.
+ (Shay Banon via Uwe Schindler)
+
+* LUCENE-3821: SloppyPhraseScorer missed documents that ExactPhraseScorer finds
+ When phrase query had repeating terms (e.g. "yes no yes")
+ sloppy query missed documents that exact query matched.
+ Fixed except when for repeating multiterms (e.g. "yes no yes|no").
+ (Robert Muir, Doron Cohen)
+
+* LUCENE-3841: Fix CloseableThreadLocal to also purge stale entries on
+ get(); this fixes certain cases where we were holding onto objects
+ for dead threads for too long (Matthew Bellew, Mike McCandless)
+
+* LUCENE-3872: IndexWriter.close() now throws IllegalStateException if
+ you call it after calling prepareCommit() without calling commit()
+ first. (Tim Bogaert via Mike McCandless)
+
+* LUCENE-3874: Throw IllegalArgumentException from IndexWriter (rather
+ than producing a corrupt index), if a positionIncrement would cause
+ integer overflow. This can happen, for example when using a buggy
+ TokenStream that forgets to call clearAttributes() in combination
+ with a StopFilter. (Robert Muir)
+
+* LUCENE-3876: Fix bug where positions for a document exceeding
+ Integer.MAX_VALUE/2 would produce a corrupt index.
+ (Simon Willnauer, Mike McCandless, Robert Muir)
+
+* LUCENE-3880: UAX29URLEmailTokenizer now recognizes emails when the mailto:
+ scheme is prepended. (Kai Gülzau, Steve Rowe)
+
+Optimizations
+
+* LUCENE-3653: Improve concurrency in VirtualMethod and AttributeSource by
+ using a WeakIdentityMap based on a ConcurrentHashMap. (Uwe Schindler,
+ Gerrit Jansen van Vuuren)
+
+Documentation
+
+* LUCENE-3597: Fixed incorrect grouping documentation. (Martijn van Groningen,
+ Robert Muir)
+
+* LUCENE-3926: Improve documentation of RAMDirectory, because this
+ class is not intended to work with huge indexes. Everything beyond
+ several hundred megabytes will waste resources (GC cycles), because
+ it uses an internal buffer size of 1024 bytes, producing millions of
+ byte[1024] arrays. This class is optimized for small memory-resident
+ indexes. It also has bad concurrency on multithreaded environments.
+ It is recommended to materialize large indexes on disk and use
+ MMapDirectory, which is a high-performance directory implementation
+ working directly on the file system cache of the operating system,
+ so copying data to Java heap space is not useful. (Uwe Schindler,
+ Mike McCandless, Robert Muir)
+
+Build
+
+* LUCENE-3857: exceptions from other threads in beforeclass/etc do not fail
+ the test (Dawid Weiss)
+
+* LUCENE-3847: LuceneTestCase will now check for modifications of System
+ properties before and after each test (and suite). If changes are detected,
+ the test will fail. A rule can be used to reset system properties to
+ before-scope state (and this has been used to make Solr tests pass).
+ (Dawid Weiss, Uwe Schindler).
+
+* LUCENE-3228: Stop downloading external javadoc package-list files:
+
+ - Added package-list files for Oracle Java javadocs and JUnit javadocs to
+ Lucene/Solr subversion.
+
+ - The Oracle Java javadocs package-list file is excluded from Lucene and
+ Solr source release packages.
+
+ - Regardless of network connectivity, javadocs built from a subversion
+ checkout contain links to Oracle & JUnit javadocs.
+
+ - Building javadocs from a source release package will download the Oracle
+ Java package-list file if it isn't already present.
+
+ - When the Oracle Java package-list file is not present and download fails,
+ the javadocs targets will not fail the build, though an error will appear
+ in the build log. In this case, the built javadocs will not contain links
+ to Oracle Java javadocs.
+
+ - Links from Solr javadocs to Lucene's javadocs are enabled. When building
+ a X.Y.Z-SNAPSHOT version, the links are to the most recently built nightly
+ Jenkins javadocs. When building a release version, links are to the
+ Lucene release javadocs for the same version.
+
+ (Steve Rowe, hossman)
+
+* LUCENE-3753: Restructure the Lucene build system:
+ - Created a new Lucene-internal module named "core" by moving the java/
+ and test/ directories from lucene/src/ to lucene/core/src/.
+ - Eliminated lucene/src/ by moving all its directories up one level.
+ - Each internal module (core/, test-framework/, and tools/) now has its own
+ build.xml, from which it is possible to run module-specific targets.
+ lucene/build.xml delegates all build tasks (via
+ <ant dir="internal-module-dir"> calls) to these modules' build.xml files.
+ (Steve Rowe)
+
+* LUCENE-3774: Optimized and streamlined license and notice file validation
+ by refactoring the build task into an ANT task and modifying build scripts
+ to perform top-level checks. (Dawid Weiss, Steve Rowe, Robert Muir)
+
+* LUCENE-3762: Upgrade JUnit to 4.10, refactor state-machine of detecting
+ setUp/tearDown call chaining in LuceneTestCase. (Dawid Weiss, Robert Muir)
+
+* LUCENE-3944: Make the 'generate-maven-artifacts' target use filtered POMs
+ placed under lucene/build/poms/, rather than in each module's base
+ directory. The 'clean' target now removes them.
+ (Steve Rowe, Robert Muir)
+
+* LUCENE-3930: Changed build system to use Apache Ivy for retrival of 3rd
+ party JAR files. Please review BUILD.txt for instructions.
+ (Robert Muir, Chris Male, Uwe Schindler, Steven Rowe, Hossman)
+
+
+======================= Lucene 3.5.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-3390: The first approach in Lucene 3.4.0 for missing values
+ support for sorting had a design problem that made the missing value
+ be populated directly into the FieldCache arrays during sorting,
+ leading to concurrency issues. To fix this behaviour, the method
+ signatures had to be changed:
+ - FieldCache.getUnValuedDocs() was renamed to FieldCache.getDocsWithField()
+ returning a Bits interface (backported from Lucene 4.0).
+ - FieldComparator.setMissingValue() was removed and added to
+ constructor
+ As this is expert API, most code will not be affected.
+ (Uwe Schindler, Doron Cohen, Mike McCandless)
+
+* LUCENE-3541: Remove IndexInput's protected copyBuf. If you want to
+ keep a buffer in your IndexInput, do this yourself in your implementation,
+ and be sure to do the right thing on clone()! (Robert Muir)
+
+* LUCENE-2822: TimeLimitingCollector now expects a counter clock instead of
+ relying on a private daemon thread. The global time limiting clock thread
+ has been exposed and is now lazily loaded and fully optional.
+ TimeLimitingCollector now supports setting clock baseline manually to include
+ prelude of a search. Previous versions set the baseline on construction time,
+ now baseline is set once the first IndexReader is passed to the collector
+ unless set before. (Simon Willnauer)
+
+Changes in runtime behavior
+
+* LUCENE-3520: IndexReader.openIfChanged, when passed a near-real-time
+ reader, will now return null if there are no changes. The API has
+ always reserved the right to do this; it's just that in the past for
+ near-real-time readers it never did. (Mike McCandless)
+
+Bug fixes
+
+* LUCENE-3412: SloppyPhraseScorer was returning non-deterministic results
+ for queries with many repeats (Doron Cohen)
+
+* LUCENE-3421: PayloadTermQuery's explain was wrong when includeSpanScore=false.
+ (Edward Drapkin via Robert Muir)
+
+* LUCENE-3432: IndexWriter.expungeDeletes with TieredMergePolicy
+ should ignore the maxMergedSegmentMB setting (v.sevel via Mike
+ McCandless)
+
+* LUCENE-3442: TermQuery.TermWeight.scorer() returns null for non-atomic
+ IndexReaders (optimization bug, introcuced by LUCENE-2829), preventing
+ QueryWrapperFilter and similar classes to get a top-level DocIdSet.
+ (Dan C., Uwe Schindler)
+
+* LUCENE-3390: Corrected handling of missing values when two parallel searches
+ using different missing values for sorting: the missing value was populated
+ directly into the FieldCache arrays during sorting, leading to concurrency
+ issues. (Uwe Schindler, Doron Cohen, Mike McCandless)
+
+* LUCENE-3439: Closing an NRT reader after the writer was closed was
+ incorrectly invoking the DeletionPolicy and (then possibly deleting
+ files) on the closed IndexWriter (Robert Muir, Mike McCandless)
+
+* LUCENE-3215: SloppyPhraseScorer sometimes computed Infinite freq
+ (Robert Muir, Doron Cohen)
+
+* LUCENE-3503: DisjunctionSumScorer would give slightly different scores
+ for a document depending if you used nextDoc() versus advance().
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-3529: Properly support indexing an empty field with empty term text.
+ Previously, if you had assertions enabled you would receive an error during
+ flush, if you didn't, you would get an invalid index.
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-2633: PackedInts Packed32 and Packed64 did not support internal
+ structures larger than 256MB (Toke Eskildsen via Mike McCandless)
+
+* LUCENE-3540: LUCENE-3255 dropped support for pre-1.9 indexes, but the
+ error message in IndexFormatTooOldException was incorrect. (Uwe Schindler,
+ Mike McCandless)
+
+* LUCENE-3541: IndexInput's default copyBytes() implementation was not safe
+ across multiple threads, because all clones shared the same buffer.
+ (Robert Muir)
+
+* LUCENE-3548: Fix CharsRef#append to extend length of the existing char[]
+ and preserve existing chars. (Simon Willnauer)
+
+* LUCENE-3582: Normalize NaN values in NumericUtils.floatToSortableInt() /
+ NumericUtils.doubleToSortableLong(), so this is consistent with stored
+ fields. Also fix NumericRangeQuery to not falsely hit NaNs on half-open
+ ranges (one bound is null). Because of normalization, NumericRangeQuery
+ can now be used to hit NaN values by creating a query with
+ upper == lower == NaN (inclusive). (Dawid Weiss, Uwe Schindler)
+
+API Changes
+
+* LUCENE-3454: Rename IndexWriter.optimize to forceMerge to discourage
+ use of this method since it is horribly costly and rarely justified
+ anymore. MergePolicy.findMergesForOptimize was renamed to
+ findForcedMerges. IndexReader.isOptimized was
+ deprecated. IndexCommit.isOptimized was replaced with
+ getSegmentCount. (Robert Muir, Mike McCandless)
+
+* LUCENE-3205: Deprecated MultiTermQuery.getTotalNumerOfTerms() [and
+ related methods], as the numbers returned are not useful
+ for multi-segment indexes. They were only needed for tests of
+ NumericRangeQuery. (Mike McCandless, Uwe Schindler)
+
+* LUCENE-3574: Deprecate outdated constants in org.apache.lucene.util.Constants
+ and add new ones for Java 6 and Java 7. (Uwe Schindler)
+
+* LUCENE-3571: Deprecate IndexSearcher(Directory). Use the constructors
+ that take IndexReader instead. (Robert Muir)
+
+* LUCENE-3577: Rename IndexWriter.expungeDeletes to forceMergeDeletes,
+ and revamped the javadocs, to discourage
+ use of this method since it is horribly costly and rarely
+ justified. MergePolicy.findMergesToExpungeDeletes was renamed to
+ findForcedDeletesMerges. (Robert Muir, Mike McCandless)
+
+* LUCENE-3464: IndexReader.reopen has been renamed to
+ IndexReader.openIfChanged (a static method), and now returns null
+ (instead of the old reader) if there are no changes in the index, to
+ prevent the common pitfall of accidentally closing the old reader.
+
+New Features
+
+* LUCENE-3448: Added FixedBitSet.and(other/DISI), andNot(other/DISI).
+ (Uwe Schindler)
+
+* LUCENE-2215: Added IndexSearcher.searchAfter which returns results after a
+ specified ScoreDoc (e.g. last document on the previous page) to support deep
+ paging use cases. (Aaron McCurry, Grant Ingersoll, Robert Muir)
+
+* LUCENE-1990: Adds internal packed ints implementation, to be used
+ for more efficient storage of int arrays when the values are
+ bounded, for example for storing the terms dict index (Toke
+ Eskildsen via Mike McCandless)
+
+* LUCENE-3558: Moved SearcherManager, NRTManager & SearcherLifetimeManager into
+ core. All classes are contained in o.a.l.search. (Simon Willnauer)
+
+Optimizations
+
+* LUCENE-3426: Add NGramPhraseQuery which extends PhraseQuery and tries to
+ reduce the number of terms of the query when rewrite(), in order to improve
+ performance. (Robert Muir, Koji Sekiguchi)
+
+* LUCENE-3494: Optimize FilteredQuery to remove a multiply in score()
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-3534: Remove filter logic from IndexSearcher and delegate to
+ FilteredQuery's Scorer. This is a partial backport of a cleanup in
+ FilteredQuery/IndexSearcher added by LUCENE-1536 to Lucene 4.0.
+ (Uwe Schindler)
+
+* LUCENE-2205: Very substantial (3-5X) RAM reduction required to hold
+ the terms index on opening an IndexReader (Aaron McCurry via Mike McCandless)
+
+* LUCENE-3443: FieldCache can now set docsWithField, and create an
+ array, in a single pass. This results in faster init time for apps
+ that need both (such as sorting by a field with a missing value).
+ (Mike McCandless)
+
+Test Cases
+
+* LUCENE-3420: Disable the finalness checks in TokenStream and Analyzer
+ for implementing subclasses in different packages, where assertions are not
+ enabled. (Uwe Schindler)
+
+* LUCENE-3506: tests relying on assertions being enabled were no-op because
+ they ignored AssertionError. With this fix now entire test framework
+ (every test) fails if assertions are disabled, unless
+ -Dtests.asserts.gracious=true is specified. (Doron Cohen)
+
+Build
+
+* SOLR-2849: Fix dependencies in Maven POMs. (David Smiley via Steve Rowe)
+
+* LUCENE-3561: Fix maven xxx-src.jar files that were missing resources.
+ (Uwe Schindler)
+
+======================= Lucene 3.4.0 =======================
+
+Bug fixes
+
+* LUCENE-3251: Directory#copy failed to close target output if opening the
+ source stream failed. (Simon Willnauer)
+
+* LUCENE-3255: If segments_N file is all zeros (due to file
+ corruption), don't read that to mean the index is empty. (Gregory
+ Tarr, Mark Harwood, Simon Willnauer, Mike McCandless)
+
+* LUCENE-3254: Fixed minor bug in deletes were written to disk,
+ causing the file to sometimes be larger than it needed to be. (Mike
+ McCandless)
+
+* LUCENE-3224: Fixed a big where CheckIndex would incorrectly report a
+ corrupt index if a term with docfreq >= 16 was indexed more than once
+ at the same position. (Robert Muir)
+
+* LUCENE-3339: Fixed deadlock case when multiple threads use the new
+ block-add (IndexWriter.add/updateDocuments) methods. (Robert Muir,
+ Mike McCandless)
+
+* LUCENE-3340: Fixed case where IndexWriter was not flushing at
+ exactly maxBufferedDeleteTerms (Mike McCandless)
+
+* LUCENE-3358, LUCENE-3361: StandardTokenizer and UAX29URLEmailTokenizer
+ wrongly discarded combining marks attached to Han or Hiragana characters,
+ this is fixed if you supply Version >= 3.4 If you supply a previous
+ lucene version, you get the old buggy behavior for backwards compatibility.
+ (Trejkaz, Robert Muir)
+
+* LUCENE-3368: IndexWriter commits segments without applying their buffered
+ deletes when flushing concurrently. (Simon Willnauer, Mike McCandless)
+
+* LUCENE-3365: Create or Append mode determined before obtaining write lock
+ can cause IndexWriter overriding an existing index.
+ (Geoff Cooney via Simon Willnauer)
+
+* LUCENE-3380: Fixed a bug where FileSwitchDirectory's listAll() would wrongly
+ throw NoSuchDirectoryException when all files written so far have been
+ written to one directory, but the other still has not yet been created on the
+ filesystem. (Robert Muir)
+
+* LUCENE-3409: IndexWriter.deleteAll was failing to close pooled NRT
+ SegmentReaders, leading to unused files accumulating in the
+ Directory. (tal steier via Mike McCandless)
+
+* LUCENE-3418: Lucene was failing to fsync index files on commit,
+ meaning an operating system or hardware crash, or power loss, could
+ easily corrupt the index. (Mark Miller, Robert Muir, Mike
+ McCandless)
+
+New Features
+
+* LUCENE-3290: Added FieldInvertState.numUniqueTerms
+ (Mike McCandless, Robert Muir)
+
+* LUCENE-3280: Add FixedBitSet, like OpenBitSet but is not elastic
+ (grow on demand if you set/get/clear too-large indices). (Mike
+ McCandless)
+
+* LUCENE-2048: Added the ability to omit positions but still index
+ term frequencies, you can now control what is indexed into
+ the postings via AbstractField.setIndexOptions:
+ DOCS_ONLY: only documents are indexed: term frequencies and positions are omitted
+ DOCS_AND_FREQS: only documents and term frequencies are indexed: positions are omitted
+ DOCS_AND_FREQS_AND_POSITIONS: full postings: documents, frequencies, and positions
+ AbstractField.setOmitTermFrequenciesAndPositions is deprecated,
+ you should use DOCS_ONLY instead. (Robert Muir)
+
+* LUCENE-3097: Added a new grouping collector that can be used to retrieve all most relevant
+ documents per group. This can be useful in situations when one wants to compute grouping
+ based facets / statistics on the complete query result. (Martijn van Groningen)
+
+* LUCENE-3334: If Java7 is detected, IOUtils.closeSafely() will log
+ suppressed exceptions in the original exception, so stack trace
+ will contain them. (Uwe Schindler)
+
+Optimizations
+
+* LUCENE-3201, LUCENE-3218: CompoundFileSystem code has been consolidated
+ into a Directory implementation. Reading is optimized for MMapDirectory,
+ NIOFSDirectory and SimpleFSDirectory to only map requested parts of the
+ CFS into an IndexInput. Writing to a CFS now tries to append to the CF
+ directly if possible and merges separately written files on the fly instead
+ of during close. (Simon Willnauer, Robert Muir)
+
+* LUCENE-3289: When building an FST you can now tune how aggressively
+ the FST should try to share common suffixes. Typically you can
+ greatly reduce RAM required during building, and CPU consumed, at
+ the cost of a somewhat larger FST. (Mike McCandless)
+
+Test Cases
+
+* LUCENE-3327: Fix AIOOBE when TestFSTs is run with -Dtests.verbose=true
+ (James Dyer via Mike McCandless)
+
+Build
+
+* LUCENE-3406: Add ant target 'package-local-src-tgz' to Lucene and Solr
+ to package sources from the local working copy.
+ (Seung-Yeoul Yang via Steve Rowe)
+
+
+======================= Lucene 3.3.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-3140: IndexOutput.copyBytes now takes a DataInput (superclass
+ of IndexInput) as its first argument. (Robert Muir, Dawid Weiss,
+ Mike McCandless)
+
+* LUCENE-3191: FieldComparator.value now returns an Object not
+ Comparable; FieldDoc.fields also changed from Comparable[] to
+ Object[] (Uwe Schindler, Mike McCandless)
+
+* LUCENE-3208: Made deprecated methods Query.weight(Searcher) and
+ Searcher.createWeight() final to prevent override. If you have
+ overridden one of these methods, cut over to the non-deprecated
+ implementation. (Uwe Schindler, Robert Muir, Yonik Seeley)
+
+* LUCENE-3238: Made MultiTermQuery.rewrite() final, to prevent
+ problems (such as not properly setting rewrite methods, or
+ not working correctly with things like SpanMultiTermQueryWrapper).
+ To rewrite to a simpler form, instead return a simpler enum
+ from getEnum(IndexReader). For example, to rewrite to a single term,
+ return a SingleTermEnum. (ludovic Boutros, Uwe Schindler, Robert Muir)
+
+Changes in runtime behavior
+
+* LUCENE-2834: the hash used to compute the lock file name when the
+ lock file is not stored in the index has changed. This means you
+ will see a different lucene-XXX-write.lock in your lock directory.
+ (Robert Muir, Uwe Schindler, Mike McCandless)
+
+* LUCENE-3146: IndexReader.setNorm throws IllegalStateException if the field
+ does not store norms. (Shai Erera, Mike McCandless)
+
+* LUCENE-3198: On Linux, if the JRE is 64 bit and supports unmapping,
+ FSDirectory.open now defaults to MMapDirectory instead of
+ NIOFSDirectory since MMapDirectory gives better performance. (Mike
+ McCandless)
+
+* LUCENE-3200: MMapDirectory now uses chunk sizes that are powers of 2.
+ When setting the chunk size, it is rounded down to the next possible
+ value. The new default value for 64 bit platforms is 2^30 (1 GiB),
+ for 32 bit platforms it stays unchanged at 2^28 (256 MiB).
+ Internally, MMapDirectory now only uses one dedicated final IndexInput
+ implementation supporting multiple chunks, which makes Hotspot's life
+ easier. (Uwe Schindler, Robert Muir, Mike McCandless)
+
+Bug fixes
+
+* LUCENE-3147,LUCENE-3152: Fixed open file handles leaks in many places in the
+ code. Now MockDirectoryWrapper (in test-framework) tracks all open files,
+ including locks, and fails if the test fails to release all of them.
+ (Mike McCandless, Robert Muir, Shai Erera, Simon Willnauer)
+
+* LUCENE-3102: CachingCollector.replay was failing to call setScorer
+ per-segment (Martijn van Groningen via Mike McCandless)
+
+* LUCENE-3183: Fix rare corner case where seeking to empty term
+ (field="", term="") with terms index interval 1 could hit
+ ArrayIndexOutOfBoundsException (selckin, Robert Muir, Mike
+ McCandless)
+
+* LUCENE-3208: IndexSearcher had its own private similarity field
+ and corresponding get/setter overriding Searcher's implementation. If you
+ setted a different Similarity instance on IndexSearcher, methods implemented
+ in the superclass Searcher were not using it, leading to strange bugs.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-3197: Fix core merge policies to not over-merge during
+ background optimize when documents are still being deleted
+ concurrently with the optimize (Mike McCandless)
+
+* LUCENE-3222: The RAM accounting for buffered delete terms was
+ failing to measure the space required to hold the term's field and
+ text character data. (Mike McCandless)
+
+* LUCENE-3238: Fixed bug where using WildcardQuery("prefix*") inside
+ of a SpanMultiTermQueryWrapper rewrote incorrectly and returned
+ an error instead. (ludovic Boutros, Uwe Schindler, Robert Muir)
+
+API Changes
+
+* LUCENE-3208: Renamed protected IndexSearcher.createWeight() to expert
+ public method IndexSearcher.createNormalizedWeight() as this better describes
+ what this method does. The old method is still there for backwards
+ compatibility. Query.weight() was deprecated and simply delegates to
+ IndexSearcher. Both deprecated methods will be removed in Lucene 4.0.
+ (Uwe Schindler, Robert Muir, Yonik Seeley)
+
+* LUCENE-3197: MergePolicy.findMergesForOptimize now takes
+ Map<SegmentInfo,Boolean> instead of Set<SegmentInfo> as the second
+ argument, so the merge policy knows which segments were originally
+ present vs produced by an optimizing merge (Mike McCandless)
+
+Optimizations
+
+* LUCENE-1736: DateTools.java general improvements.
+ (David Smiley via Steve Rowe)
+
+New Features
+
+* LUCENE-3140: Added experimental FST implementation to Lucene.
+ (Robert Muir, Dawid Weiss, Mike McCandless)
+
+* LUCENE-3193: A new TwoPhaseCommitTool allows running a 2-phase commit
+ algorithm over objects that implement the new TwoPhaseCommit interface (such
+ as IndexWriter). (Shai Erera)
+
+* LUCENE-3191: Added TopDocs.merge, to facilitate merging results from
+ different shards (Uwe Schindler, Mike McCandless)
+
+* LUCENE-3179: Added OpenBitSet.prevSetBit (Paul Elschot via Mike McCandless)
+
+* LUCENE-3210: Made TieredMergePolicy more aggressive in reclaiming
+ segments with deletions; added new methods
+ set/getReclaimDeletesWeight to control this. (Mike McCandless)
+
+Build
+
+* LUCENE-1344: Create OSGi bundle using dev-tools/maven.
+ (Nicolas Lalevée, Luca Stancapiano via ryan)
+
+* LUCENE-3204: The maven-ant-tasks jar is now included in the source tree;
+ users of the generate-maven-artifacts target no longer have to manually
+ place this jar in the Ant classpath. NOTE: when Ant looks for the
+ maven-ant-tasks jar, it looks first in its pre-existing classpath, so
+ any copies it finds will be used instead of the copy included in the
+ Lucene/Solr source tree. For this reason, it is recommeded to remove
+ any copies of the maven-ant-tasks jar in the Ant classpath, e.g. under
+ ~/.ant/lib/ or under the Ant installation's lib/ directory. (Steve Rowe)
+
+
+======================= Lucene 3.2.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-2953: PriorityQueue's internal heap was made private, as subclassing
+ with generics can lead to ClassCastException. For advanced use (e.g. in Solr)
+ a method getHeapArray() was added to retrieve the internal heap array as a
+ non-generic Object[]. (Uwe Schindler, Yonik Seeley)
+
+* LUCENE-1076: IndexWriter.setInfoStream now throws IOException
+ (Mike McCandless, Shai Erera)
+
+* LUCENE-3084: MergePolicy.OneMerge.segments was changed from
+ SegmentInfos to a List<SegmentInfo>. SegmentInfos itself was changed
+ to no longer extend Vector<SegmentInfo> (to update code that is using
+ Vector-API, use the new asList() and asSet() methods returning unmodifiable
+ collections; modifying SegmentInfos is now only possible through
+ the explicitely declared methods). IndexWriter.segString() now takes
+ Iterable<SegmentInfo> instead of List<SegmentInfo>. A simple recompile
+ should fix this. MergePolicy and SegmentInfos are internal/experimental
+ APIs not covered by the strict backwards compatibility policy.
+ (Uwe Schindler, Mike McCandless)
+
+Changes in runtime behavior
+
+* LUCENE-3065: When a NumericField is retrieved from a Document loaded
+ from IndexReader (or IndexSearcher), it will now come back as
+ NumericField not as a Field with a string-ified version of the
+ numeric value you had indexed. Note that this only applies for
+ newly-indexed Documents; older indices will still return Field
+ with the string-ified numeric value. If you call Document.get(),
+ the value comes still back as String, but Document.getFieldable()
+ returns NumericField instances. (Uwe Schindler, Ryan McKinley,
+ Mike McCandless)
+
+* LUCENE-1076: Changed the default merge policy from
+ LogByteSizeMergePolicy to TieredMergePolicy, as of Version.LUCENE_32
+ (passed to IndexWriterConfig), which is able to merge non-contiguous
+ segments. This means docIDs no longer necessarily stay "in order"
+ during indexing. If this is a problem then you can use either of
+ the LogMergePolicy impls. (Mike McCandless)
+
+New features
+
+* LUCENE-3082: Added index upgrade tool oal.index.IndexUpgrader
+ that allows to upgrade all segments to last recent supported index
+ format without fully optimizing. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-1076: Added TieredMergePolicy which is able to merge non-contiguous
+ segments, which means docIDs no longer necessarily stay "in order".
+ (Mike McCandless, Shai Erera)
+
+* LUCENE-3071: Adding ReversePathHierarchyTokenizer, added skip parameter to
+ PathHierarchyTokenizer (Olivier Favre via ryan)
+
+* LUCENE-1421, LUCENE-3102: added CachingCollector which allow you to cache
+ document IDs and scores encountered during the search, and "replay" them to
+ another Collector. (Mike McCandless, Shai Erera)
+
+* LUCENE-3112: Added experimental IndexWriter.add/updateDocuments,
+ enabling a block of documents to be indexed, atomically, with
+ guaranteed sequential docIDs. (Mike McCandless)
+
+API Changes
+
+* LUCENE-3061: IndexWriter's getNextMerge() and merge(OneMerge) are now public
+ (though @lucene.experimental), allowing for custom MergeScheduler
+ implementations. (Shai Erera)
+
+* LUCENE-3065: Document.getField() was deprecated, as it throws
+ ClassCastException when loading lazy fields or NumericFields.
+ (Uwe Schindler, Ryan McKinley, Mike McCandless)
+
+* LUCENE-2027: Directory.touchFile is deprecated and will be removed
+ in 4.0. (Mike McCandless)
+
+Optimizations
+
+* LUCENE-2990: ArrayUtil/CollectionUtil.*Sort() methods now exit early
+ on empty or one-element lists/arrays. (Uwe Schindler)
+
+* LUCENE-2897: Apply deleted terms while flushing a segment. We still
+ buffer deleted terms to later apply to past segments. (Mike McCandless)
+
+* LUCENE-3126: IndexWriter.addIndexes copies incoming segments into CFS if they
+ aren't already and MergePolicy allows that. (Shai Erera)
+
+Bug fixes
+
+* LUCENE-2996: addIndexes(IndexReader) did not flush before adding the new
+ indexes, causing existing deletions to be applied on the incoming indexes as
+ well. (Shai Erera, Mike McCandless)
+
+* LUCENE-3024: Index with more than 2.1B terms was hitting AIOOBE when
+ seeking TermEnum (eg used by Solr's faceting) (Tom Burton-West, Mike
+ McCandless)
+
+* LUCENE-3042: When a filter or consumer added Attributes to a TokenStream
+ chain after it was already (partly) consumed [or clearAttributes(),
+ captureState(), cloneAttributes(),... was called by the Tokenizer],
+ the Tokenizer calling clearAttributes() or capturing state after addition
+ may not do this on the newly added Attribute. This bug affected only
+ very special use cases of the TokenStream-API, most users would not
+ have recognized it. (Uwe Schindler, Robert Muir)
+
+* LUCENE-3054: PhraseQuery can in some cases stack overflow in
+ SorterTemplate.quickSort(). This fix also adds an optimization to
+ PhraseQuery as term with lower doc freq will also have less positions.
+ (Uwe Schindler, Robert Muir, Otis Gospodnetic)
+
+* LUCENE-3068: sloppy phrase query failed to match valid documents when multiple
+ query terms had same position in the query. (Doron Cohen)
+
+* LUCENE-3012: Lucene writes the header now for separate norm files (*.sNNN)
+ (Robert Muir)
+
+Build
+
+* LUCENE-3006: Building javadocs will fail on warnings by default.
+ Override with -Dfailonjavadocwarning=false (sarowe, gsingers)
+
+* LUCENE-3128: "ant eclipse" creates a .project file for easier Eclipse
+ integration (unless one already exists). (Daniel Serodio via Shai Erera)
+
+Test Cases
+
+* LUCENE-3002: added 'tests.iter.min' to control 'tests.iter' by allowing to
+ stop iterating if at least 'tests.iter.min' ran and a failure occured.
+ (Shai Erera, Chris Hostetter)
+
+======================= Lucene 3.1.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-2719: Changed API of internal utility class
+ org.apache.lucene.util.SorterTemplate to support faster quickSort using
+ pivot values and also merge sort and insertion sort. If you have used
+ this class, you have to implement two more methods for handling pivots.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-1923: Renamed SegmentInfo & SegmentInfos segString method to
+ toString. These are advanced APIs and subject to change suddenly.
+ (Tim Smith via Mike McCandless)
+
+* LUCENE-2190: Removed deprecated customScore() and customExplain()
+ methods from experimental CustomScoreQuery. (Uwe Schindler)
+
+* LUCENE-2286: Enabled DefaultSimilarity.setDiscountOverlaps by default.
+ This means that terms with a position increment gap of zero do not
+ affect the norms calculation by default. (Robert Muir)
+
+* LUCENE-2320: MergePolicy.writer is now of type SetOnce, which allows setting
+ the IndexWriter for a MergePolicy exactly once. You can change references to
+ 'writer' from <code>writer.doXYZ()</code> to <code>writer.get().doXYZ()</code>
+ (it is also advisable to add an <code>assert writer != null;</code> before you
+ access the wrapped IndexWriter.)
+
+ In addition, MergePolicy only exposes a default constructor, and the one that
+ took IndexWriter as argument has been removed from all MergePolicy extensions.
+ (Shai Erera via Mike McCandless)
+
+* LUCENE-2328: SimpleFSDirectory.SimpleFSIndexInput is moved to
+ FSDirectory.FSIndexInput. Anyone extending this class will have to
+ fix their code on upgrading. (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2302: The new interface for term attributes, CharTermAttribute,
+ now implements CharSequence. This requires the toString() methods of
+ CharTermAttribute, deprecated TermAttribute, and Token to return only
+ the term text and no other attribute contents. LUCENE-2374 implements
+ an attribute reflection API to no longer rely on toString() for attribute
+ inspection. (Uwe Schindler, Robert Muir)
+
+* LUCENE-2372, LUCENE-2389: StandardAnalyzer, KeywordAnalyzer,
+ PerFieldAnalyzerWrapper, WhitespaceTokenizer are now final. Also removed
+ the now obsolete and deprecated Analyzer.setOverridesTokenStreamMethod().
+ Analyzer and TokenStream base classes now have an assertion in their ctor,
+ that check subclasses to be final or at least have final implementations
+ of incrementToken(), tokenStream(), and reusableTokenStream().
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-2316: Directory.fileLength contract was clarified - it returns the
+ actual file's length if the file exists, and throws FileNotFoundException
+ otherwise. Returning length=0 for a non-existent file is no longer allowed. If
+ you relied on that, make sure to catch the exception. (Shai Erera)
+
+* LUCENE-2386: IndexWriter no longer performs an empty commit upon new index
+ creation. Previously, if you passed an empty Directory and set OpenMode to
+ CREATE*, IndexWriter would make a first empty commit. If you need that
+ behavior you can call writer.commit()/close() immediately after you create it.
+ (Shai Erera, Mike McCandless)
+
+* LUCENE-2733: Removed public constructors of utility classes with only static
+ methods to prevent instantiation. (Uwe Schindler)
+
+* LUCENE-2602: The default (LogByteSizeMergePolicy) merge policy now
+ takes deletions into account by default. You can disable this by
+ calling setCalibrateSizeByDeletes(false) on the merge policy. (Mike
+ McCandless)
+
+* LUCENE-2529, LUCENE-2668: Position increment gap and offset gap of empty
+ values in multi-valued field has been changed for some cases in index.
+ If you index empty fields and uses positions/offsets information on that
+ fields, reindex is recommended. (David Smiley, Koji Sekiguchi)
+
+* LUCENE-2804: Directory.setLockFactory new declares throwing an IOException.
+ (Shai Erera, Robert Muir)
+
+* LUCENE-2837: Added deprecations noting that in 4.0, Searcher and
+ Searchable are collapsed into IndexSearcher; contrib/remote and
+ MultiSearcher have been removed. (Mike McCandless)
+
+* LUCENE-2854: Deprecated SimilarityDelegator and
+ Similarity.lengthNorm; the latter is now final, forcing any custom
+ Similarity impls to cutover to the more general computeNorm (Robert
+ Muir, Mike McCandless)
+
+* LUCENE-2869: Deprecated Query.getSimilarity: instead of using
+ "runtime" subclassing/delegation, subclass the Weight instead.
+ (Robert Muir)
+
+* LUCENE-2674: A new idfExplain method was added to Similarity, that
+ accepts an incoming docFreq. If you subclass Similarity, make sure
+ you also override this method on upgrade. (Robert Muir, Mike
+ McCandless)
+
+Changes in runtime behavior
+
+* LUCENE-1923: Made IndexReader.toString() produce something
+ meaningful (Tim Smith via Mike McCandless)
+
+* LUCENE-2179: CharArraySet.clear() is now functional.
+ (Robert Muir, Uwe Schindler)
+
+* LUCENE-2455: IndexWriter.addIndexes no longer optimizes the target index
+ before it adds the new ones. Also, the existing segments are not merged and so
+ the index will not end up with a single segment (unless it was empty before).
+ In addition, addIndexesNoOptimize was renamed to addIndexes and no longer
+ invokes a merge on the incoming and target segments, but instead copies the
+ segments to the target index. You can call maybeMerge or optimize after this
+ method completes, if you need to.
+
+ In addition, Directory.copyTo* were removed in favor of copy which takes the
+ target Directory, source and target files as arguments, and copies the source
+ file to the target Directory under the target file name. (Shai Erera)
+
+* LUCENE-2663: IndexWriter no longer forcefully clears any existing
+ locks when create=true. This was a holdover from when
+ SimpleFSLockFactory was the default locking implementation, and,
+ even then it was dangerous since it could mask bugs in IndexWriter's
+ usage, allowing applications to accidentally open two writers on the
+ same directory. (Mike McCandless)
+
+* LUCENE-2701: maxMergeMBForOptimize and maxMergeDocs constraints set on
+ LogMergePolicy now affect optimize() as well (as opposed to only regular
+ merges). This means that you can run optimize() and too large segments won't
+ be merged. (Shai Erera)
+
+* LUCENE-2753: IndexReader and DirectoryReader .listCommits() now return a List,
+ guaranteeing the commits are sorted from oldest to latest. (Shai Erera)
+
+* LUCENE-2785: TopScoreDocCollector, TopFieldCollector and
+ the IndexSearcher search methods that take an int nDocs will now
+ throw IllegalArgumentException if nDocs is 0. Instead, you should
+ use the newly added TotalHitCountCollector. (Mike McCandless)
+
+* LUCENE-2790: LogMergePolicy.useCompoundFile's logic now factors in noCFSRatio
+ to determine whether the passed in segment should be compound.
+ (Shai Erera, Earwin Burrfoot)
+
+* LUCENE-2805: IndexWriter now increments the index version on every change to
+ the index instead of for every commit. Committing or closing the IndexWriter
+ without any changes to the index will not cause any index version increment.
+ (Simon Willnauer, Mike McCandless)
+
+* LUCENE-2650, LUCENE-2825: The behavior of FSDirectory.open has changed. On 64-bit
+ Windows and Solaris systems that support unmapping, FSDirectory.open returns
+ MMapDirectory. Additionally the behavior of MMapDirectory has been
+ changed to enable unmapping by default if supported by the JRE.
+ (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-2829: Improve the performance of "primary key" lookup use
+ case (running a TermQuery that matches one document) on a
+ multi-segment index. (Robert Muir, Mike McCandless)
+
+* LUCENE-2010: Segments with 100% deleted documents are now removed on
+ IndexReader or IndexWriter commit. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-2960: Allow some changes to IndexWriterConfig to take effect
+ "live" (after an IW is instantiated), via
+ IndexWriter.getConfig().setXXX(...) (Shay Banon, Mike McCandless)
+
+API Changes
+
+* LUCENE-2076: Rename FSDirectory.getFile -> getDirectory. (George
+ Aroush via Mike McCandless)
+
+* LUCENE-1260: Change norm encode (float->byte) and decode
+ (byte->float) to be instance methods not static methods. This way a
+ custom Similarity can alter how norms are encoded, though they must
+ still be encoded as a single byte (Johan Kindgren via Mike
+ McCandless)
+
+* LUCENE-2103: NoLockFactory should have a private constructor;
+ until Lucene 4.0 the default one will be deprecated.
+ (Shai Erera via Uwe Schindler)
+
+* LUCENE-2177: Deprecate the Field ctors that take byte[] and Store.
+ Since the removal of compressed fields, Store can only be YES, so
+ it's not necessary to specify. (Erik Hatcher via Mike McCandless)
+
+* LUCENE-2200: Several final classes had non-overriding protected
+ members. These were converted to private and unused protected
+ constructors removed. (Steven Rowe via Robert Muir)
+
+* LUCENE-2240: SimpleAnalyzer and WhitespaceAnalyzer now have
+ Version ctors. (Simon Willnauer via Uwe Schindler)
+
+* LUCENE-2259: Add IndexWriter.deleteUnusedFiles, to attempt removing
+ unused files. This is only useful on Windows, which prevents
+ deletion of open files. IndexWriter will eventually remove these
+ files itself; this method just lets you do so when you know the
+ files are no longer open by IndexReaders. (luocanrao via Mike
+ McCandless)
+
+* LUCENE-2282: IndexFileNames is exposed as a public class allowing for easier
+ use by external code. In addition it offers a matchExtension method which
+ callers can use to query whether a certain file matches a certain extension.
+ (Shai Erera via Mike McCandless)
+
+* LUCENE-124: Add a TopTermsBoostOnlyBooleanQueryRewrite to MultiTermQuery.
+ This rewrite method is similar to TopTermsScoringBooleanQueryRewrite, but
+ only scores terms by their boost values. For example, this can be used
+ with FuzzyQuery to ensure that exact matches are always scored higher,
+ because only the boost will be used in scoring. (Robert Muir)
+
+* LUCENE-2015: Add a static method foldToASCII to ASCIIFoldingFilter to
+ expose its folding logic. (Cédrik Lime via Robert Muir)
+
+* LUCENE-2294: IndexWriter constructors have been deprecated in favor of a
+ single ctor which accepts IndexWriterConfig and a Directory. You can set all
+ the parameters related to IndexWriter on IndexWriterConfig. The different
+ setter/getter methods were deprecated as well. One should call
+ writer.getConfig().getXYZ() to query for a parameter XYZ.
+ Additionally, the setter/getter related to MergePolicy were deprecated as
+ well. One should interact with the MergePolicy directly.
+ (Shai Erera via Mike McCandless)
+
+* LUCENE-2320: IndexWriter's MergePolicy configuration was moved to
+ IndexWriterConfig and the respective methods on IndexWriter were deprecated.
+ (Shai Erera via Mike McCandless)
+
+* LUCENE-2328: Directory now keeps track itself of the files that are written
+ but not yet fsynced. The old Directory.sync(String file) method is deprecated
+ and replaced with Directory.sync(Collection<String> files). Take a look at
+ FSDirectory to see a sample of how such tracking might look like, if needed
+ in your custom Directories. (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2302: Deprecated TermAttribute and replaced by a new
+ CharTermAttribute. The change is backwards compatible, so
+ mixed new/old TokenStreams all work on the same char[] buffer
+ independent of which interface they use. CharTermAttribute
+ has shorter method names and implements CharSequence and
+ Appendable. This allows usage like Java's StringBuilder in
+ addition to direct char[] access. Also terms can directly be
+ used in places where CharSequence is allowed (e.g. regular
+ expressions).
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-2402: IndexWriter.deleteUnusedFiles now deletes unreferenced commit
+ points too. If you use an IndexDeletionPolicy which holds onto index commits
+ (such as SnapshotDeletionPolicy), you can call this method to remove those
+ commit points when they are not needed anymore (instead of waiting for the
+ next commit). (Shai Erera)
+
+* LUCENE-2481: SnapshotDeletionPolicy.snapshot() and release() were replaced
+ with equivalent ones that take a String (id) as argument. You can pass
+ whatever ID you want, as long as you use the same one when calling both.
+ (Shai Erera)
+
+* LUCENE-2356: Add IndexWriterConfig.set/getReaderTermIndexDivisor, to
+ set what IndexWriter passes for termsIndexDivisor to the readers it
+ opens internally when apply deletions or creating a near-real-time
+ reader. (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2167,LUCENE-2699,LUCENE-2763,LUCENE-2847: StandardTokenizer/Analyzer
+ in common/standard/ now implement the Word Break rules from the Unicode 6.0.0
+ Text Segmentation algorithm (UAX#29), covering the full range of Unicode code
+ points, including values from U+FFFF to U+10FFFF
+
+ ClassicTokenizer/Analyzer retains the old (pre-Lucene 3.1) StandardTokenizer/
+ Analyzer implementation and behavior. Only the Unicode Basic Multilingual
+ Plane (code points from U+0000 to U+FFFF) is covered.
+
+ UAX29URLEmailTokenizer tokenizes URLs and E-mail addresses according to the
+ relevant RFCs, in addition to implementing the UAX#29 Word Break rules.
+ (Steven Rowe, Robert Muir, Uwe Schindler)
+
+* LUCENE-2778: RAMDirectory now exposes newRAMFile() which allows to override
+ and return a different RAMFile implementation. (Shai Erera)
+
+* LUCENE-2785: Added TotalHitCountCollector whose sole purpose is to
+ count the number of hits matching the query. (Mike McCandless)
+
+* LUCENE-2846: Deprecated IndexReader.setNorm(int, String, float). This method
+ is only syntactic sugar for setNorm(int, String, byte), but using the global
+ Similarity.getDefault().encodeNormValue(). Use the byte-based method instead
+ to ensure that the norm is encoded with your Similarity.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-2374: Added Attribute reflection API: It's now possible to inspect the
+ contents of AttributeImpl and AttributeSource using a well-defined API.
+ This is e.g. used by Solr's AnalysisRequestHandlers to display all attributes
+ in a structured way.
+ There are also some backwards incompatible changes in toString() output,
+ as LUCENE-2302 introduced the CharSequence interface to CharTermAttribute
+ leading to changed toString() return values. The new API allows to get a
+ string representation in a well-defined way using a new method
+ reflectAsString(). For backwards compatibility reasons, when toString()
+ was implemented by implementation subclasses, the default implementation of
+ AttributeImpl.reflectWith() uses toString()s output instead to report the
+ Attribute's properties. Otherwise, reflectWith() uses Java's reflection
+ (like toString() did before) to get the attribute properties.
+ In addition, the mandatory equals() and hashCode() are no longer required
+ for AttributeImpls, but can still be provided (if needed).
+ (Uwe Schindler)
+
+* LUCENE-2691: Deprecate IndexWriter.getReader in favor of
+ IndexReader.open(IndexWriter) (Grant Ingersoll, Mike McCandless)
+
+* LUCENE-2876: Deprecated Scorer.getSimilarity(). If your Scorer uses a Similarity,
+ it should keep it itself. Fixed Scorers to pass their parent Weight, so that
+ Scorer.visitSubScorers (LUCENE-2590) will work correctly.
+ (Robert Muir, Doron Cohen)
+
+* LUCENE-2900: When opening a near-real-time (NRT) reader
+ (IndexReader.re/open(IndexWriter)) you can now specify whether
+ deletes should be applied. Applying deletes can be costly, and some
+ expert use cases can handle seeing deleted documents returned. The
+ deletes remain buffered so that the next time you open an NRT reader
+ and pass true, all deletes will be a applied. (Mike McCandless)
+
+* LUCENE-1253: LengthFilter (and Solr's KeepWordTokenFilter) now
+ require up front specification of enablePositionIncrement. Together with
+ StopFilter they have a common base class (FilteringTokenFilter) that handles
+ the position increments automatically. Implementors only need to override an
+ accept() method that filters tokens. (Uwe Schindler, Robert Muir)
+
+Bug fixes
+
+* LUCENE-2249: ParallelMultiSearcher should shut down thread pool on
+ close. (Martin Traverso via Uwe Schindler)
+
+* LUCENE-2273: FieldCacheImpl.getCacheEntries() used WeakHashMap
+ incorrectly and lead to ConcurrentModificationException.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-2328: Index files fsync tracking moved from
+ IndexWriter/IndexReader to Directory, and it no longer leaks memory.
+ (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2074: Reduce buffer size of lexer back to default on reset.
+ (Ruben Laguna, Shai Erera via Uwe Schindler)
+
+* LUCENE-2496: Don't throw NPE if IndexWriter is opened with CREATE on
+ a prior (corrupt) index missing its segments_N file. (Mike
+ McCandless)
+
+* LUCENE-2458: QueryParser no longer automatically forms phrase queries,
+ assuming whitespace tokenization. Previously all CJK queries, for example,
+ would be turned into phrase queries. The old behavior is preserved with
+ the matchVersion parameter for previous versions. Additionally, you can
+ explicitly enable the old behavior with setAutoGeneratePhraseQueries(true)
+ (Robert Muir)
+
+* LUCENE-2537: FSDirectory.copy() implementation was unsafe and could result in
+ OOM if a large file was copied. (Shai Erera)
+
+* LUCENE-2580: MultiPhraseQuery throws AIOOBE if number of positions
+ exceeds number of terms at one position (Jayendra Patil via Mike McCandless)
+
+* LUCENE-2617: Optional clauses of a BooleanQuery were not factored
+ into coord if the scorer for that segment returned null. This
+ can cause the same document to score to differently depending on
+ what segment it resides in. (yonik)
+
+* LUCENE-2272: Fix explain in PayloadNearQuery and also fix scoring issue (Peter Keegan via Grant Ingersoll)
+
+* LUCENE-2732: Fix charset problems in XML loading in
+ HyphenationCompoundWordTokenFilter. (Uwe Schindler)
+
+* LUCENE-2802: NRT DirectoryReader returned incorrect values from
+ getVersion, isOptimized, getCommitUserData, getIndexCommit and isCurrent due
+ to a mutable reference to the IndexWriters SegmentInfos.
+ (Simon Willnauer, Earwin Burrfoot)
+
+* LUCENE-2852: Fixed corner case in RAMInputStream that would hit a
+ false EOF after seeking to EOF then seeking back to same block you
+ were just in and then calling readBytes (Robert Muir, Mike McCandless)
+
+* LUCENE-2860: Fixed SegmentInfo.sizeInBytes to factor includeDocStores when it
+ decides whether to return the cached computed size or not. (Shai Erera)
+
+* LUCENE-2584: SegmentInfo.files() could hit ConcurrentModificationException if
+ called by multiple threads. (Alexander Kanarsky via Shai Erera)
+
+* LUCENE-2809: Fixed IndexWriter.numDocs to take into account
+ applied but not yet flushed deletes. (Mike McCandless)
+
+* LUCENE-2879: MultiPhraseQuery previously calculated its phrase IDF by summing
+ internally, it now calls Similarity.idfExplain(Collection, IndexSearcher).
+ (Robert Muir)
+
+* LUCENE-2693: RAM used by IndexWriter was slightly incorrectly computed.
+ (Jason Rutherglen via Shai Erera)
+
+* LUCENE-1846: DateTools now uses the US locale everywhere, so DateTools.round()
+ is safe also in strange locales. (Uwe Schindler)
+
+* LUCENE-2891: IndexWriterConfig did not accept -1 in setReaderTermIndexDivisor,
+ which can be used to prevent loading the terms index into memory. (Shai Erera)
+
+* LUCENE-2937: Encoding a float into a byte (e.g. encoding field norms during
+ indexing) had an underflow detection bug that caused floatToByte(f)==0 where
+ f was greater than 0, but slightly less than byteToFloat(1). This meant that
+ certain very small field norms (index_boost * length_norm) could have
+ been rounded down to 0 instead of being rounded up to the smallest
+ positive number. (yonik)
+
+* LUCENE-2936: PhraseQuery score explanations were not correctly
+ identifying matches vs non-matches. (hossman)
+
+* LUCENE-2975: A hotspot bug corrupts IndexInput#readVInt()/readVLong() if
+ the underlying readByte() is inlined (which happens e.g. in MMapDirectory).
+ The loop was unwinded which makes the hotspot bug disappear.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+New features
+
+* LUCENE-2128: Parallelized fetching document frequencies during weight
+ creation. (Israel Tsadok, Simon Willnauer via Uwe Schindler)
+
+* LUCENE-2069: Added Unicode 4 support to CharArraySet. Due to the switch
+ to Java 5, supplementary characters are now lowercased correctly if the
+ set is created as case insensitive.
+ CharArraySet now requires a Version argument to preserve
+ backwards compatibility. If Version < 3.1 is passed to the constructor,
+ CharArraySet yields the old behavior. (Simon Willnauer)
+
+* LUCENE-2069: Added Unicode 4 support to LowerCaseFilter. Due to the switch
+ to Java 5, supplementary characters are now lowercased correctly.
+ LowerCaseFilter now requires a Version argument to preserve
+ backwards compatibility. If Version < 3.1 is passed to the constructor,
+ LowerCaseFilter yields the old behavior. (Simon Willnauer, Robert Muir)
+
+* LUCENE-2034: Added ReusableAnalyzerBase, an abstract subclass of Analyzer
+ that makes it easier to reuse TokenStreams correctly. This issue also added
+ StopwordAnalyzerBase, which improves consistency of all Analyzers that use
+ stopwords, and implement many analyzers in contrib with it.
+ (Simon Willnauer via Robert Muir)
+
+* LUCENE-2198, LUCENE-2901: Support protected words in stemming TokenFilters using a
+ new KeywordAttribute. (Simon Willnauer, Drew Farris via Uwe Schindler)
+
+* LUCENE-2183, LUCENE-2240, LUCENE-2241: Added Unicode 4 support
+ to CharTokenizer and its subclasses. CharTokenizer now has new
+ int-API which is conditionally preferred to the old char-API depending
+ on the provided Version. Version < 3.1 will use the char-API.
+ (Simon Willnauer via Uwe Schindler)
+
+* LUCENE-2247: Added a CharArrayMap<V> for performance improvements
+ in some stemmers and synonym filters. (Uwe Schindler)
+
+* LUCENE-2320: Added SetOnce which wraps an object and allows it to be set
+ exactly once. (Shai Erera via Mike McCandless)
+
+* LUCENE-2314: Added AttributeSource.copyTo(AttributeSource) that
+ allows to use cloneAttributes() and this method as a replacement
+ for captureState()/restoreState(), if the state itself
+ needs to be inspected/modified. (Uwe Schindler)
+
+* LUCENE-2293: Expose control over max number of threads that
+ IndexWriter will allow to run concurrently while indexing
+ documents (previously this was hardwired to 5), using
+ IndexWriterConfig.setMaxThreadStates. (Mike McCandless)
+
+* LUCENE-2297: Enable turning on reader pooling inside IndexWriter
+ even when getReader (near-real-timer reader) is not in use, through
+ IndexWriterConfig.enable/disableReaderPooling. (Mike McCandless)
+
+* LUCENE-2331: Add NoMergePolicy which never returns any merges to execute. In
+ addition, add NoMergeScheduler which never executes any merges. These two are
+ convenient classes in case you want to disable segment merges by IndexWriter
+ without tweaking a particular MergePolicy parameters, such as mergeFactor.
+ MergeScheduler's methods are now public. (Shai Erera via Mike McCandless)
+
+* LUCENE-2339: Deprecate static method Directory.copy in favor of
+ Directory.copyTo, and use nio's FileChannel.transferTo when copying
+ files between FSDirectory instances. (Earwin Burrfoot via Mike
+ McCandless).
+
+* LUCENE-2074: Make StandardTokenizer fit for Unicode 4.0, if the
+ matchVersion parameter is Version.LUCENE_31. (Uwe Schindler)
+
+* LUCENE-2385: Moved NoDeletionPolicy from benchmark to core. NoDeletionPolicy
+ can be used to prevent commits from ever getting deleted from the index.
+ (Shai Erera)
+
+* LUCENE-1585: IndexWriter now accepts a PayloadProcessorProvider which can
+ return a DirPayloadProcessor for a given Directory, which returns a
+ PayloadProcessor for a given Term. The PayloadProcessor will be used to
+ process the payloads of the segments as they are merged (e.g. if one wants to
+ rewrite payloads of external indexes as they are added, or of local ones).
+ (Shai Erera, Michael Busch, Mike McCandless)
+
+* LUCENE-2440: Add support for custom ExecutorService in
+ ParallelMultiSearcher (Edward Drapkin via Mike McCandless)
+
+* LUCENE-2295: Added a LimitTokenCountAnalyzer / LimitTokenCountFilter
+ to wrap any other Analyzer and provide the same functionality as
+ MaxFieldLength provided on IndexWriter. This patch also fixes a bug
+ in the offset calculation in CharTokenizer. (Uwe Schindler, Shai Erera)
+
+* LUCENE-2526: Don't throw NPE from MultiPhraseQuery.toString when
+ it's empty. (Ross Woolf via Mike McCandless)
+
+* LUCENE-2559: Added SegmentReader.reopen methods (John Wang via Mike
+ McCandless)
+
+* LUCENE-2590: Added Scorer.visitSubScorers, and Scorer.freq. Along
+ with a custom Collector these experimental methods make it possible
+ to gather the hit-count per sub-clause and per document while a
+ search is running. (Simon Willnauer, Mike McCandless)
+
+* LUCENE-2636: Added MultiCollector which allows running the search with several
+ Collectors. (Shai Erera)
+
+* LUCENE-2754, LUCENE-2757: Added a wrapper around MultiTermQueries
+ to add span support: SpanMultiTermQueryWrapper<Q extends MultiTermQuery>.
+ Using this wrapper it's easy to add fuzzy/wildcard to e.g. a SpanNearQuery.
+ (Robert Muir, Uwe Schindler)
+
+* LUCENE-2838: ConstantScoreQuery now directly supports wrapping a Query
+ instance for stripping off scores. The use of a QueryWrapperFilter
+ is no longer needed and discouraged for that use case. Directly wrapping
+ Query improves performance, as out-of-order collection is now supported.
+ (Uwe Schindler)
+
+* LUCENE-2864: Add getMaxTermFrequency (maximum within-document TF) to
+ FieldInvertState so that it can be used in Similarity.computeNorm.
+ (Robert Muir)
+
+* LUCENE-2720: Segments now record the code version which created them.
+ (Shai Erera, Mike McCandless, Uwe Schindler)
+
+* LUCENE-2474: Added expert ReaderFinishedListener API to
+ IndexReader, to allow apps that maintain external per-segment caches
+ to evict entries when a segment is finished. (Shay Banon, Yonik
+ Seeley, Mike McCandless)
+
+* LUCENE-2911: The new StandardTokenizer, UAX29URLEmailTokenizer, and
+ the ICUTokenizer in contrib now all tag types with a consistent set
+ of token types (defined in StandardTokenizer). Tokens in the major
+ CJK types are explicitly marked to allow for custom downstream handling:
+ <IDEOGRAPHIC>, <HANGUL>, <KATAKANA>, and <HIRAGANA>.
+ (Robert Muir, Steven Rowe)
+
+* LUCENE-2913: Add missing getters to Numeric* classes. (Uwe Schindler)
+
+* LUCENE-1810: Added FieldSelectorResult.LATENT to not cache lazy loaded fields
+ (Tim Smith, Grant Ingersoll)
+
+* LUCENE-2692: Added several new SpanQuery classes for positional checking
+ (match is in a range, payload is a specific value) (Grant Ingersoll)
+
+Optimizations
+
+* LUCENE-2494: Use CompletionService in ParallelMultiSearcher instead of
+ simple polling for results. (Edward Drapkin, Simon Willnauer)
+
+* LUCENE-2075: Terms dict cache is now shared across threads instead
+ of being stored separately in thread local storage. Also fixed
+ terms dict so that the cache is used when seeking the thread local
+ term enum, which will be important for MultiTermQuery impls that do
+ lots of seeking (Mike McCandless, Uwe Schindler, Robert Muir, Yonik
+ Seeley)
+
+* LUCENE-2136: If the multi reader (DirectoryReader or MultiReader)
+ only has a single sub-reader, delegate all enum requests to it.
+ This avoid the overhead of using a PQ unnecessarily. (Mike
+ McCandless)
+
+* LUCENE-2137: Switch to AtomicInteger for some ref counting (Earwin
+ Burrfoot via Mike McCandless)
+
+* LUCENE-2123, LUCENE-2261: Move FuzzyQuery rewrite to separate RewriteMode
+ into MultiTermQuery. The number of fuzzy expansions can be specified with
+ the maxExpansions parameter to FuzzyQuery.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-2164: ConcurrentMergeScheduler has more control over merge
+ threads. First, it gives smaller merges higher thread priority than
+ larges ones. Second, a new set/getMaxMergeCount setting will pause
+ the larger merges to allow smaller ones to finish. The defaults for
+ these settings are now dynamic, depending the number CPU cores as
+ reported by Runtime.getRuntime().availableProcessors() (Mike
+ McCandless)
+
+* LUCENE-2169: Improved CharArraySet.copy(), if source set is
+ also a CharArraySet. (Simon Willnauer via Uwe Schindler)
+
+* LUCENE-2084: Change IndexableBinaryStringTools to work on byte[] and char[]
+ directly, instead of Byte/CharBuffers, and modify CollationKeyFilter to
+ take advantage of this for faster performance.
+ (Steven Rowe, Uwe Schindler, Robert Muir)
+
+* LUCENE-2188: Add a utility class for tracking deprecated overridden
+ methods in non-final subclasses.
+ (Uwe Schindler, Robert Muir)
+
+* LUCENE-2195: Speedup CharArraySet if set is empty.
+ (Simon Willnauer via Robert Muir)
+
+* LUCENE-2285: Code cleanup. (Shai Erera via Uwe Schindler)
+
+* LUCENE-2303: Remove code duplication in Token class by subclassing
+ TermAttributeImpl, move DEFAULT_TYPE constant to TypeInterface, improve
+ null-handling for TypeAttribute. (Uwe Schindler)
+
+* LUCENE-2329: Switch TermsHash* from using a PostingList object per unique
+ term to parallel arrays, indexed by termID. This reduces garbage collection
+ overhead significantly, which results in great indexing performance wins
+ when the available JVM heap space is low. This will become even more
+ important when the DocumentsWriter RAM buffer is searchable in the future,
+ because then it will make sense to make the RAM buffers as large as
+ possible. (Mike McCandless, Michael Busch)
+
+* LUCENE-2380: The terms field cache methods (getTerms,
+ getTermsIndex), which replace the older String equivalents
+ (getStrings, getStringIndex), consume quite a bit less RAM in most
+ cases. (Mike McCandless)
+
+* LUCENE-2410: ~20% speedup on exact (slop=0) PhraseQuery matching.
+ (Mike McCandless)
+
+* LUCENE-2531: Fix issue when sorting by a String field that was
+ causing too many fallbacks to compare-by-value (instead of by-ord).
+ (Mike McCandless)
+
+* LUCENE-2574: IndexInput exposes copyBytes(IndexOutput, long) to allow for
+ efficient copying by sub-classes. Optimized copy is implemented for RAM and FS
+ streams. (Shai Erera)
+
+* LUCENE-2719: Improved TermsHashPerField's sorting to use a better
+ quick sort algorithm that dereferences the pivot element not on
+ every compare call. Also replaced lots of sorting code in Lucene
+ by the improved SorterTemplate class.
+ (Uwe Schindler, Robert Muir, Mike McCandless)
+
+* LUCENE-2760: Optimize SpanFirstQuery and SpanPositionRangeQuery.
+ (Robert Muir)
+
+* LUCENE-2770: Make SegmentMerger always work on atomic subreaders,
+ even when IndexWriter.addIndexes(IndexReader...) is used with
+ DirectoryReaders or other MultiReaders. This saves lots of memory
+ during merge of norms. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-2824: Optimize BufferedIndexInput to do less bounds checks.
+ (Robert Muir)
+
+* LUCENE-2010: Segments with 100% deleted documents are now removed on
+ IndexReader or IndexWriter commit. (Uwe Schindler, Mike McCandless)
+
+* LUCENE-1472: Removed synchronization from static DateTools methods
+ by using a ThreadLocal. Also converted DateTools.Resolution to a
+ Java 5 enum (this should not break backwards). (Uwe Schindler)
+
+Build
+
+* LUCENE-2124: Moved the JDK-based collation support from contrib/collation
+ into core, and moved the ICU-based collation support into contrib/icu.
+ (Robert Muir)
+
+* LUCENE-2326: Removed SVN checkouts for backwards tests. The backwards
+ branch is now included in the svn repository using "svn copy"
+ after release. (Uwe Schindler)
+
+* LUCENE-2074: Regenerating StandardTokenizerImpl files now needs
+ JFlex 1.5 (currently only available on SVN). (Uwe Schindler)
+
+* LUCENE-1709: Tests are now parallelized by default (except for benchmark). You
+ can force them to run sequentially by passing -Drunsequential=1 on the command
+ line. The number of threads that are spawned per CPU defaults to '1'. If you
+ wish to change that, you can run the tests with -DthreadsPerProcessor=[num].
+ (Robert Muir, Shai Erera, Peter Kofler)
+
+* LUCENE-2516: Backwards tests are now compiled against released lucene-core.jar
+ from tarball of previous version. Backwards tests are now packaged together
+ with src distribution. (Uwe Schindler)
+
+* LUCENE-2611: Added Ant target to install IntelliJ IDEA configuration:
+ "ant idea". See http://wiki.apache.org/lucene-java/HowtoConfigureIntelliJ
+ (Steven Rowe)
+
+* LUCENE-2657: Switch from using Maven POM templates to full POMs when
+ generating Maven artifacts (Steven Rowe)
+
+* LUCENE-2609: Added jar-test-framework Ant target which packages Lucene's
+ tests' framework classes. (Drew Farris, Grant Ingersoll, Shai Erera,
+ Steven Rowe)
+
+Test Cases
+
+* LUCENE-2037 Allow Junit4 tests in our environment (Erick Erickson
+ via Mike McCandless)
+
+* LUCENE-1844: Speed up the unit tests (Mark Miller, Erick Erickson,
+ Mike McCandless)
+
+* LUCENE-2065: Use Java 5 generics throughout our unit tests. (Kay
+ Kay via Mike McCandless)
+
+* LUCENE-2155: Fix time and zone dependent localization test failures
+ in queryparser tests. (Uwe Schindler, Chris Male, Robert Muir)
+
+* LUCENE-2170: Fix thread starvation problems. (Uwe Schindler)
+
+* LUCENE-2248, LUCENE-2251, LUCENE-2285: Refactor tests to not use
+ Version.LUCENE_CURRENT, but instead use a global static value
+ from LuceneTestCase(J4), that contains the release version.
+ (Uwe Schindler, Simon Willnauer, Shai Erera)
+
+* LUCENE-2313, LUCENE-2322: Add VERBOSE to LuceneTestCase(J4) to control
+ verbosity of tests. If VERBOSE==false (default) tests should not print
+ anything other than errors to System.(out|err). The setting can be
+ changed with -Dtests.verbose=true on test invocation.
+ (Shai Erera, Paul Elschot, Uwe Schindler)
+
+* LUCENE-2318: Remove inconsistent system property code for retrieving
+ temp and data directories inside test cases. It is now centralized in
+ LuceneTestCase(J4). Also changed lots of tests to use
+ getClass().getResourceAsStream() to retrieve test data. Tests needing
+ access to "real" files from the test folder itself, can use
+ LuceneTestCase(J4).getDataFile(). (Uwe Schindler)
+
+* LUCENE-2398, LUCENE-2611: Improve tests to work better from IDEs such
+ as Eclipse and IntelliJ.
+ (Paolo Castagna, Steven Rowe via Robert Muir)
+
+* LUCENE-2804: add newFSDirectory to LuceneTestCase to create a FSDirectory at
+ random. (Shai Erera, Robert Muir)
+
+Documentation
+
+* LUCENE-2579: Fix oal.search's package.html description of abstract
+ methods. (Santiago M. Mola via Mike McCandless)
+
+* LUCENE-2625: Add a note to IndexReader.termDocs() with additional verbiage
+ that the TermEnum must be seeked since it is unpositioned.
+ (Adriano Crestani via Robert Muir)
+
+* LUCENE-2894: Use google-code-prettify for syntax highlighting in javadoc.
+ (Shinichiro Abe, Koji Sekiguchi)
+
+================== Release 2.9.4 / 3.0.3 ====================
+
+Changes in runtime behavior
+
+* LUCENE-2689: NativeFSLockFactory no longer attempts to acquire a
+ test lock just before the real lock is acquired. (Surinder Pal
+ Singh Bindra via Mike McCandless)
+
+* LUCENE-2762: Fixed bug in IndexWriter causing it to hold open file
+ handles against deleted files when compound-file was enabled (the
+ default) and readers are pooled. As a result of this the peak
+ worst-case free disk space required during optimize is now 3X the
+ index size, when compound file is enabled (else 2X). (Mike
+ McCandless)
+
+* LUCENE-2773: LogMergePolicy accepts a double noCFSRatio (default =
+ 0.1), which means any time a merged segment is greater than 10% of
+ the index size, it will be left in non-compound format even if
+ compound format is on. This change was made to reduce peak
+ transient disk usage during optimize which increased due to
+ LUCENE-2762. (Mike McCandless)
+
+Bug fixes
+
+* LUCENE-2142 (correct fix): FieldCacheImpl.getStringIndex no longer
+ throws an exception when term count exceeds doc count.
+ (Mike McCandless, Uwe Schindler)
+
+* LUCENE-2513: when opening writable IndexReader on a not-current
+ commit, do not overwrite "future" commits. (Mike McCandless)
+
+* LUCENE-2536: IndexWriter.rollback was failing to properly rollback
+ buffered deletions against segments that were flushed (Mark Harwood
+ via Mike McCandless)
+
+* LUCENE-2541: Fixed NumericRangeQuery that returned incorrect results
+ with endpoints near Long.MIN_VALUE and Long.MAX_VALUE:
+ NumericUtils.splitRange() overflowed, if
+ - the range contained a LOWER bound
+ that was greater than (Long.MAX_VALUE - (1L << precisionStep))
+ - the range contained an UPPER bound
+ that was less than (Long.MIN_VALUE + (1L << precisionStep))
+ With standard precision steps around 4, this had no effect on
+ most queries, only those that met the above conditions.
+ Queries with large precision steps failed more easy. Queries with
+ precision step >=64 were not affected. Also 32 bit data types int
+ and float were not affected.
+ (Yonik Seeley, Uwe Schindler)
+
+* LUCENE-2593: Fixed certain rare cases where a disk full could lead
+ to a corrupted index (Robert Muir, Mike McCandless)
+
+* LUCENE-2620: Fixed a bug in WildcardQuery where too many asterisks
+ would result in unbearably slow performance. (Nick Barkas via Robert Muir)
+
+* LUCENE-2627: Fixed bug in MMapDirectory chunking when a file is an
+ exact multiple of the chunk size. (Robert Muir)
+
+* LUCENE-2634: isCurrent on an NRT reader was failing to return false
+ if the writer had just committed (Nikolay Zamosenchuk via Mike McCandless)
+
+* LUCENE-2650: Added extra safety to MMapIndexInput clones to prevent accessing
+ an unmapped buffer if the input is closed (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-2384: Reset zzBuffer in StandardTokenizerImpl when lexer is reset.
+ (Ruben Laguna via Uwe Schindler, sub-issue of LUCENE-2074)
+
+* LUCENE-2658: Exceptions while processing term vectors enabled for multiple
+ fields could lead to invalid ArrayIndexOutOfBoundsExceptions.
+ (Robert Muir, Mike McCandless)
+
+* LUCENE-2235: Implement missing PerFieldAnalyzerWrapper.getOffsetGap().
+ (Javier Godoy via Uwe Schindler)
+
+* LUCENE-2328: Fixed memory leak in how IndexWriter/Reader tracked
+ already sync'd files. (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2549: Fix TimeLimitingCollector#TimeExceededException to record
+ the absolute docid. (Uwe Schindler)
+
+* LUCENE-2533: fix FileSwitchDirectory.listAll to not return dups when
+ primary & secondary dirs share the same underlying directory.
+ (Michael McCandless)
+
+* LUCENE-2365: IndexWriter.newestSegment (used normally for testing)
+ is fixed to return null if there are no segments. (Karthick
+ Sankarachary via Mike McCandless)
+
+* LUCENE-2730: Fix two rare deadlock cases in IndexWriter (Mike McCandless)
+
+* LUCENE-2744: CheckIndex was stating total number of fields,
+ not the number that have norms enabled, on the "test: field
+ norms..." output. (Mark Kristensson via Mike McCandless)
+
+* LUCENE-2759: Fixed two near-real-time cases where doc store files
+ may be opened for read even though they are still open for write.
+ (Mike McCandless)
+
+* LUCENE-2618: Fix rare thread safety issue whereby
+ IndexWriter.optimize could sometimes return even though the index
+ wasn't fully optimized (Mike McCandless)
+
+* LUCENE-2767: Fix thread safety issue in addIndexes(IndexReader[])
+ that could potentially result in index corruption. (Mike
+ McCandless)
+
+* LUCENE-2762: Fixed bug in IndexWriter causing it to hold open file
+ handles against deleted files when compound-file was enabled (the
+ default) and readers are pooled. As a result of this the peak
+ worst-case free disk space required during optimize is now 3X the
+ index size, when compound file is enabled (else 2X). (Mike
+ McCandless)
+
+* LUCENE-2216: OpenBitSet.hashCode returned different hash codes for
+ sets that only differed by trailing zeros. (Dawid Weiss, yonik)
+
+* LUCENE-2782: Fix rare potential thread hazard with
+ IndexWriter.commit (Mike McCandless)
+
+API Changes
+
+* LUCENE-2773: LogMergePolicy accepts a double noCFSRatio (default =
+ 0.1), which means any time a merged segment is greater than 10% of
+ the index size, it will be left in non-compound format even if
+ compound format is on. This change was made to reduce peak
+ transient disk usage during optimize which increased due to
+ LUCENE-2762. (Mike McCandless)
+
+Optimizations
+
+* LUCENE-2556: Improve memory usage after cloning TermAttribute.
+ (Adriano Crestani via Uwe Schindler)
+
+* LUCENE-2098: Improve the performance of BaseCharFilter, especially for
+ large documents. (Robin Wojciki, Koji Sekiguchi, Robert Muir)
+
+New features
+
+* LUCENE-2675 (2.9.4 only): Add support for Lucene 3.0 stored field files
+ also in 2.9. The file format did not change, only the version number was
+ upgraded to mark segments that have no compression. FieldsWriter still only
+ writes 2.9 segments as they could contain compressed fields. This cross-version
+ index format compatibility is provided here solely because Lucene 2.9 and 3.0
+ have the same bugfix level, features, and the same index format with this slight
+ compression difference. In general, Lucene does not support reading newer
+ indexes with older library versions. (Uwe Schindler)
+
+Documentation
+
+* LUCENE-2239: Documented limitations in NIOFSDirectory and MMapDirectory due to
+ Java NIO behavior when a Thread is interrupted while blocking on IO.
+ (Simon Willnauer, Robert Muir)
+
+================== Release 2.9.3 / 3.0.2 ====================
+
+Changes in backwards compatibility policy
+
+* LUCENE-2135: Added FieldCache.purge(IndexReader) method to the
+ interface. Anyone implementing FieldCache externally will need to
+ fix their code to implement this, on upgrading. (Mike McCandless)
+
+Changes in runtime behavior
+
+* LUCENE-2421: NativeFSLockFactory does not throw LockReleaseFailedException if
+ it cannot delete the lock file, since obtaining the lock does not fail if the
+ file is there. (Shai Erera)
+
+* LUCENE-2060 (2.9.3 only): Changed ConcurrentMergeScheduler's default for
+ maxNumThreads from 3 to 1, because in practice we get the most gains
+ from running a single merge in the backround. More than one
+ concurrent merge causes alot of thrashing (though it's possible on
+ SSD storage that there would be net gains). (Jason Rutherglen, Mike
+ McCandless)
+
+Bug fixes
+
+* LUCENE-2046 (2.9.3 only): IndexReader should not see the index as changed, after
+ IndexWriter.prepareCommit has been called but before
+ IndexWriter.commit is called. (Peter Keegan via Mike McCandless)
+
+* LUCENE-2119: Don't throw NegativeArraySizeException if you pass
+ Integer.MAX_VALUE as nDocs to IndexSearcher search methods. (Paul
+ Taylor via Mike McCandless)
+
+* LUCENE-2142: FieldCacheImpl.getStringIndex no longer throws an
+ exception when term count exceeds doc count. (Mike McCandless)
+
+* LUCENE-2104: NativeFSLock.release() would silently fail if the lock is held by
+ another thread/process. (Shai Erera via Uwe Schindler)
+
+* LUCENE-2283: Use shared memory pool for term vector and stored
+ fields buffers. This memory will be reclaimed if needed according to
+ the configured RAM Buffer Size for the IndexWriter. This also fixes
+ potentially excessive memory usage when many threads are indexing a
+ mix of small and large documents. (Tim Smith via Mike McCandless)
+
+* LUCENE-2300: If IndexWriter is pooling reader (because NRT reader
+ has been obtained), and addIndexes* is run, do not pool the
+ readers from the external directory. This is harmless (NRT reader is
+ correct), but a waste of resources. (Mike McCandless)
+
+* LUCENE-2422: Don't reuse byte[] in IndexInput/Output -- it gains
+ little performance, and ties up possibly large amounts of memory
+ for apps that index large docs. (Ross Woolf via Mike McCandless)
+
+* LUCENE-2387: Don't hang onto Fieldables from the last doc indexed,
+ in IndexWriter, nor the Reader in Tokenizer after close is
+ called. (Ruben Laguna, Uwe Schindler, Mike McCandless)
+
+* LUCENE-2417: IndexCommit did not implement hashCode() and equals()
+ consistently. Now they both take Directory and version into consideration. In
+ addition, all of IndexComnmit methods which threw
+ UnsupportedOperationException are now abstract. (Shai Erera)
+
+* LUCENE-2467: Fixed memory leaks in IndexWriter when large documents
+ are indexed. (Mike McCandless)
+
+* LUCENE-2473: Clicking on the "More Results" link in the luceneweb.war
+ demo resulted in ArrayIndexOutOfBoundsException.
+ (Sami Siren via Robert Muir)
+
+* LUCENE-2476: If any exception is hit init'ing IW, release the write
+ lock (previously we only released on IOException). (Tamas Cservenak
+ via Mike McCandless)
+
+* LUCENE-2478: Fix CachingWrapperFilter to not throw NPE when
+ Filter.getDocIdSet() returns null. (Uwe Schindler, Daniel Noll)
+
+* LUCENE-2468: Allow specifying how new deletions should be handled in
+ CachingWrapperFilter and CachingSpanFilter. By default, new
+ deletions are ignored in CachingWrapperFilter, since typically this
+ filter is AND'd with a query that correctly takes new deletions into
+ account. This should be a performance gain (higher cache hit rate)
+ in apps that reopen readers, or use near-real-time reader
+ (IndexWriter.getReader()), but may introduce invalid search results
+ (allowing deleted docs to be returned) for certain cases, so a new
+ expert ctor was added to CachingWrapperFilter to enforce deletions
+ at a performance cost. CachingSpanFilter by default recaches if
+ there are new deletions (Shay Banon via Mike McCandless)
+
+* LUCENE-2299: If you open an NRT reader while addIndexes* is running,
+ it may miss some segments (Earwin Burrfoot via Mike McCandless)
+
+* LUCENE-2397: Don't throw NPE from SnapshotDeletionPolicy.snapshot if
+ there are no commits yet (Shai Erera)
+
+* LUCENE-2424: Fix FieldDoc.toString to actually return its fields
+ (Stephen Green via Mike McCandless)
+
+* LUCENE-2311: Always pass a "fully loaded" (terms index & doc stores)
+ SegmentsReader to IndexWriter's mergedSegmentWarmer (if set), so
+ that warming is free to do whatever it needs to. (Earwin Burrfoot
+ via Mike McCandless)
+
+* LUCENE-3029: Fix corner case when MultiPhraseQuery is used with zero
+ position-increment tokens that would sometimes assign different
+ scores to identical docs. (Mike McCandless)
+
+* LUCENE-2486: Fixed intermittent FileNotFoundException on doc store
+ files when a mergedSegmentWarmer is set on IndexWriter. (Mike
+ McCandless)
+
+* LUCENE-2130: Fix performance issue when FuzzyQuery runs on a
+ multi-segment index (Michael McCandless)
+
+API Changes
+
+* LUCENE-2281: added doBeforeFlush to IndexWriter to allow extensions to perform
+ operations before flush starts. Also exposed doAfterFlush as protected instead
+ of package-private. (Shai Erera via Mike McCandless)
+
+* LUCENE-2356: Add IndexWriter.set/getReaderTermsIndexDivisor, to set
+ what IndexWriter passes for termsIndexDivisor to the readers it
+ opens internally when applying deletions or creating a
+ near-real-time reader. (Earwin Burrfoot via Mike McCandless)
+
+Optimizations
+
+* LUCENE-2494 (3.0.2 only): Use CompletionService in ParallelMultiSearcher
+ instead of simple polling for results. (Edward Drapkin, Simon Willnauer)
+
+* LUCENE-2135: On IndexReader.close, forcefully evict any entries from
+ the FieldCache rather than waiting for the WeakHashMap to release
+ the reference (Mike McCandless)
+
+* LUCENE-2161: Improve concurrency of IndexReader, especially in the
+ context of near real-time readers. (Mike McCandless)
+
+* LUCENE-2360: Small speedup to recycling of reused per-doc RAM in
+ IndexWriter (Robert Muir, Mike McCandless)
+
+Build
+
+* LUCENE-2488 (2.9.3 only): Support build with JDK 1.4 and exclude Java 1.5
+ contrib modules on request (pass '-Dforce.jdk14.build=true') when
+ compiling/testing/packaging. This marks the benchmark contrib also
+ as Java 1.5, as it depends on fast-vector-highlighter. (Uwe Schindler)
+
+================== Release 2.9.2 / 3.0.1 ====================
+
+Changes in backwards compatibility policy
+
+* LUCENE-2123 (3.0.1 only): Removed the protected inner class ScoreTerm
+ from FuzzyQuery. The change was needed because the comparator of this
+ class had to be changed in an incompatible way. The class was never
+ intended to be public. (Uwe Schindler, Mike McCandless)
+
+Bug fixes
+
+ * LUCENE-2092: BooleanQuery was ignoring disableCoord in its hashCode
+ and equals methods, cause bad things to happen when caching
+ BooleanQueries. (Chris Hostetter, Mike McCandless)
+
+ * LUCENE-2095: Fixes: when two threads call IndexWriter.commit() at
+ the same time, it's possible for commit to return control back to
+ one of the threads before all changes are actually committed.
+ (Sanne Grinovero via Mike McCandless)
+
+ * LUCENE-2132 (3.0.1 only): Fix the demo result.jsp to use QueryParser
+ with a Version argument. (Brian Li via Robert Muir)
+
+ * LUCENE-2166: Don't incorrectly keep warning about the same immense
+ term, when IndexWriter.infoStream is on. (Mike McCandless)
+
+ * LUCENE-2158: At high indexing rates, NRT reader could temporarily
+ lose deletions. (Mike McCandless)
+
+ * LUCENE-2182: DEFAULT_ATTRIBUTE_FACTORY was failing to load
+ implementation class when interface was loaded by a different
+ class loader. (Uwe Schindler, reported on java-user by Ahmed El-dawy)
+
+ * LUCENE-2257: Increase max number of unique terms in one segment to
+ termIndexInterval (default 128) * ~2.1 billion = ~274 billion.
+ (Tom Burton-West via Mike McCandless)
+
+ * LUCENE-2260: Fixed AttributeSource to not hold a strong
+ reference to the Attribute/AttributeImpl classes which prevents
+ unloading of custom attributes loaded by other classloaders
+ (e.g. in Solr plugins). (Uwe Schindler)
+
+ * LUCENE-1941: Fix Min/MaxPayloadFunction returns 0 when
+ only one payload is present. (Erik Hatcher, Mike McCandless
+ via Uwe Schindler)
+
+ * LUCENE-2270: Queries consisting of all zero-boost clauses
+ (for example, text:foo^0) sorted incorrectly and produced
+ invalid docids. (yonik)
+
+API Changes
+
+ * LUCENE-1609 (3.0.1 only): Restore IndexReader.getTermInfosIndexDivisor
+ (it was accidentally removed in 3.0.0) (Mike McCandless)
+
+ * LUCENE-1972 (3.0.1 only): Restore SortField.getComparatorSource
+ (it was accidentally removed in 3.0.0) (John Wang via Uwe Schindler)
+
+ * LUCENE-2190: Added a new class CustomScoreProvider to function package
+ that can be subclassed to provide custom scoring to CustomScoreQuery.
+ The methods in CustomScoreQuery that did this before were deprecated
+ and replaced by a method getCustomScoreProvider(IndexReader) that
+ returns a custom score implementation using the above class. The change
+ is necessary with per-segment searching, as CustomScoreQuery is
+ a stateless class (like all other Queries) and does not know about
+ the currently searched segment. This API works similar to Filter's
+ getDocIdSet(IndexReader). (Paul chez Jamespot via Mike McCandless,
+ Uwe Schindler)
+
+ * LUCENE-2080: Deprecate Version.LUCENE_CURRENT, as using this constant
+ will cause backwards compatibility problems when upgrading Lucene. See
+ the Version javadocs for additional information.
+ (Robert Muir)
+
+Optimizations
+
+ * LUCENE-2086: When resolving deleted terms, do so in term sort order
+ for better performance (Bogdan Ghidireac via Mike McCandless)
+
+ * LUCENE-2123 (partly, 3.0.1 only): Fixes a slowdown / memory issue
+ added by LUCENE-504. (Uwe Schindler, Robert Muir, Mike McCandless)
+
+ * LUCENE-2258: Remove unneeded synchronization in FuzzyTermEnum.
+ (Uwe Schindler, Robert Muir)
+
+Test Cases
+
+ * LUCENE-2114: Change TestFilteredSearch to test on multi-segment
+ index as well. (Simon Willnauer via Mike McCandless)
+
+ * LUCENE-2211: Improves BaseTokenStreamTestCase to use a fake attribute
+ that checks if clearAttributes() was called correctly.
+ (Uwe Schindler, Robert Muir)
+
+ * LUCENE-2207, LUCENE-2219: Improve BaseTokenStreamTestCase to check if
+ end() is implemented correctly. (Koji Sekiguchi, Robert Muir)
+
+Documentation
+
+ * LUCENE-2114: Improve javadocs of Filter to call out that the
+ provided reader is per-segment (Simon Willnauer via Mike
+ McCandless)
+
+======================= Release 3.0.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-1979: Change return type of SnapshotDeletionPolicy#snapshot()
+ from IndexCommitPoint to IndexCommit. Code that uses this method
+ needs to be recompiled against Lucene 3.0 in order to work. The
+ previously deprecated IndexCommitPoint is also removed.
+ (Michael Busch)
+
+* o.a.l.Lock.isLocked() is now allowed to throw an IOException.
+ (Mike McCandless)
+
+* LUCENE-2030: CachingWrapperFilter and CachingSpanFilter now hide
+ the internal cache implementation for thread safety, before it was
+ declared protected. (Peter Lenahan, Uwe Schindler, Simon Willnauer)
+
+* LUCENE-2053: If you call Thread.interrupt() on a thread inside
+ Lucene, Lucene will do its best to interrupt the thread. However,
+ instead of throwing InterruptedException (which is a checked
+ exception), you'll get an oal.util.ThreadInterruptedException (an
+ unchecked exception, subclassing RuntimeException). The interrupt
+ status on the thread is cleared when this exception is thrown.
+ (Mike McCandless)
+
+* LUCENE-2052: Some methods in Lucene core were changed to accept
+ Java 5 varargs. This is not a backwards compatibility problem as
+ long as you not try to override such a method. We left common
+ overridden methods unchanged and added varargs to constructors,
+ static, or final methods (MultiSearcher,...). (Uwe Schindler)
+
+* LUCENE-1558: IndexReader.open(Directory) now opens a readOnly=true
+ reader, and new IndexSearcher(Directory) does the same. Note that
+ this is a change in the default from 2.9, when these methods were
+ previously deprecated. (Mike McCandless)
+
+* LUCENE-1753: Make not yet final TokenStreams final to enforce
+ decorator pattern. (Uwe Schindler)
+
+Changes in runtime behavior
+
+* LUCENE-1677: Remove the system property to set SegmentReader class
+ implementation. (Uwe Schindler)
+
+* LUCENE-1960: As a consequence of the removal of Field.Store.COMPRESS,
+ support for this type of fields was removed. Lucene 3.0 is still able
+ to read indexes with compressed fields, but as soon as merges occur
+ or the index is optimized, all compressed fields are decompressed
+ and converted to Field.Store.YES. Because of this, indexes with
+ compressed fields can suddenly get larger. Also the first merge with
+ decompression cannot be done in raw mode, it is therefore slower.
+ This change has no effect for code that uses such old indexes,
+ they behave as before (fields are automatically decompressed
+ during read). Indexes converted to Lucene 3.0 format cannot be read
+ anymore with previous versions.
+ It is recommended to optimize your indexes after upgrading to convert
+ to the new format and decompress all fields.
+ If you want compressed fields, you can use CompressionTools, that
+ creates compressed byte[] to be added as binary stored field. This
+ cannot be done automatically, as you also have to decompress such
+ fields when reading. You have to reindex to do that.
+ (Michael Busch, Uwe Schindler)
+
+* LUCENE-2060: Changed ConcurrentMergeScheduler's default for
+ maxNumThreads from 3 to 1, because in practice we get the most
+ gains from running a single merge in the background. More than one
+ concurrent merge causes a lot of thrashing (though it's possible on
+ SSD storage that there would be net gains). (Jason Rutherglen,
+ Mike McCandless)
+
+API Changes
+
+* LUCENE-1257, LUCENE-1984, LUCENE-1985, LUCENE-2057, LUCENE-1833, LUCENE-2012,
+ LUCENE-1998: Port to Java 1.5:
+
+ - Add generics to public and internal APIs (see below).
+ - Replace new Integer(int), new Double(double),... by static valueOf() calls.
+ - Replace for-loops with Iterator by foreach loops.
+ - Replace StringBuffer with StringBuilder.
+ - Replace o.a.l.util.Parameter by Java 5 enums (see below).
+ - Add @Override annotations.
+ (Uwe Schindler, Robert Muir, Karl Wettin, Paul Elschot, Kay Kay, Shai Erera,
+ DM Smith)
+
+* Generify Lucene API:
+
+ - TokenStream/AttributeSource: Now addAttribute()/getAttribute() return an
+ instance of the requested attribute interface and no cast needed anymore
+ (LUCENE-1855).
+ - NumericRangeQuery, NumericRangeFilter, and FieldCacheRangeFilter
+ now have Integer, Long, Float, Double as type param (LUCENE-1857).
+ - Document.getFields() returns List<Fieldable>.
+ - Query.extractTerms(Set<Term>)
+ - CharArraySet and stop word sets in core/contrib
+ - PriorityQueue (LUCENE-1935)
+ - TopDocCollector
+ - DisjunctionMaxQuery (LUCENE-1984)
+ - MultiTermQueryWrapperFilter
+ - CloseableThreadLocal
+ - MapOfSets
+ - o.a.l.util.cache package
+ - lot's of internal APIs of IndexWriter
+ (Uwe Schindler, Michael Busch, Kay Kay, Robert Muir, Adriano Crestani)
+
+* LUCENE-1944, LUCENE-1856, LUCENE-1957, LUCENE-1960, LUCENE-1961,
+ LUCENE-1968, LUCENE-1970, LUCENE-1946, LUCENE-1971, LUCENE-1975,
+ LUCENE-1972, LUCENE-1978, LUCENE-944, LUCENE-1979, LUCENE-1973, LUCENE-2011:
+ Remove deprecated methods/constructors/classes:
+
+ - Remove all String/File directory paths in IndexReader /
+ IndexSearcher / IndexWriter.
+ - Remove FSDirectory.getDirectory()
+ - Make FSDirectory abstract.
+ - Remove Field.Store.COMPRESS (see above).
+ - Remove Filter.bits(IndexReader) method and make
+ Filter.getDocIdSet(IndexReader) abstract.
+ - Remove old DocIdSetIterator methods and make the new ones abstract.
+ - Remove some methods in PriorityQueue.
+ - Remove old TokenStream API and backwards compatibility layer.
+ - Remove RangeQuery, RangeFilter and ConstantScoreRangeQuery.
+ - Remove SpanQuery.getTerms().
+ - Remove ExtendedFieldCache, custom and auto caches, SortField.AUTO.
+ - Remove old-style custom sort.
+ - Remove legacy search setting in SortField.
+ - Remove Hits and all references from core and contrib.
+ - Remove HitCollector and its TopDocs support implementations.
+ - Remove term field and accessors in MultiTermQuery
+ (and fix Highlighter).
+ - Remove deprecated methods in BooleanQuery.
+ - Remove deprecated methods in Similarity.
+ - Remove BoostingTermQuery.
+ - Remove MultiValueSource.
+ - Remove Scorer.explain(int).
+ ...and some other minor ones (Uwe Schindler, Michael Busch, Mark Miller)
+
+* LUCENE-1925: Make IndexSearcher's subReaders and docStarts members
+ protected; add expert ctor to directly specify reader, subReaders
+ and docStarts. (John Wang, Tim Smith via Mike McCandless)
+
+* LUCENE-1945: All public classes that have a close() method now
+ also implement java.io.Closeable (IndexReader, IndexWriter, Directory,...).
+ (Uwe Schindler)
+
+* LUCENE-1998: Change all Parameter instances to Java 5 enums. This
+ is no backwards-break, only a change of the super class. Parameter
+ was deprecated and will be removed in a later version.
+ (DM Smith, Uwe Schindler)
+
+Bug fixes
+
+* LUCENE-1951: When the text provided to WildcardQuery has no wildcard
+ characters (ie matches a single term), don't lose the boost and
+ rewrite method settings. Also, rewrite to PrefixQuery if the
+ wildcard is form "foo*", for slightly faster performance. (Robert
+ Muir via Mike McCandless)
+
+* LUCENE-2013: SpanRegexQuery does not work with QueryScorer.
+ (Benjamin Keil via Mark Miller)
+
+* LUCENE-2088: addAttribute() should only accept interfaces that
+ extend Attribute. (Shai Erera, Uwe Schindler)
+
+* LUCENE-2045: Fix silly FileNotFoundException hit if you enable
+ infoStream on IndexWriter and then add an empty document and commit
+ (Shai Erera via Mike McCandless)
+
+* LUCENE-2046: IndexReader should not see the index as changed, after
+ IndexWriter.prepareCommit has been called but before
+ IndexWriter.commit is called. (Peter Keegan via Mike McCandless)
+
+New features
+
+* LUCENE-1933: Provide a convenience AttributeFactory that creates a
+ Token instance for all basic attributes. (Uwe Schindler)
+
+* LUCENE-2041: Parallelize the rest of ParallelMultiSearcher. Lots of
+ code refactoring and Java 5 concurrent support in MultiSearcher.
+ (Joey Surls, Simon Willnauer via Uwe Schindler)
+
+* LUCENE-2051: Add CharArraySet.copy() as a simple method to copy
+ any Set<?> to a CharArraySet that is optimized, if Set<?> is already
+ an CharArraySet. (Simon Willnauer)
+
+Optimizations
+
+* LUCENE-1183: Optimize Levenshtein Distance computation in
+ FuzzyQuery. (Cédrik Lime via Mike McCandless)
+
+* LUCENE-2006: Optimization of FieldDocSortedHitQueue to always
+ use Comparable<?> interface. (Uwe Schindler, Mark Miller)
+
+* LUCENE-2087: Remove recursion in NumericRangeTermEnum.
+ (Uwe Schindler)
+
+Build
+
+* LUCENE-486: Remove test->demo dependencies. (Michael Busch)
+
+* LUCENE-2024: Raise build requirements to Java 1.5 and ANT 1.7.0
+ (Uwe Schindler, Mike McCandless)
+
+======================= Release 2.9.1 =======================
+
+Changes in backwards compatibility policy
+
+ * LUCENE-2002: Add required Version matchVersion argument when
+ constructing QueryParser or MultiFieldQueryParser and, default (as
+ of 2.9) enablePositionIncrements to true to match
+ StandardAnalyzer's 2.9 default (Uwe Schindler, Mike McCandless)
+
+Bug fixes
+
+ * LUCENE-1974: Fixed nasty bug in BooleanQuery (when it used
+ BooleanScorer for scoring), whereby some matching documents fail to
+ be collected. (Fulin Tang via Mike McCandless)
+
+ * LUCENE-1124: Make sure FuzzyQuery always matches the precise term.
+ (stefatwork@gmail.com via Mike McCandless)
+
+ * LUCENE-1976: Fix IndexReader.isCurrent() to return the right thing
+ when the reader is a near real-time reader. (Jake Mannix via Mike
+ McCandless)
+
+ * LUCENE-1986: Fix NPE when scoring PayloadNearQuery (Peter Keegan,
+ Mark Miller via Mike McCandless)
+
+ * LUCENE-1992: Fix thread hazard if a merge is committing just as an
+ exception occurs during sync (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-1995: Note in javadocs that IndexWriter.setRAMBufferSizeMB
+ cannot exceed 2048 MB, and throw IllegalArgumentException if it
+ does. (Aaron McKee, Yonik Seeley, Mike McCandless)
+
+ * LUCENE-2004: Fix Constants.LUCENE_MAIN_VERSION to not be inlined
+ by client code. (Uwe Schindler)
+
+ * LUCENE-2016: Replace illegal U+FFFF character with the replacement
+ char (U+FFFD) during indexing, to prevent silent index corruption.
+ (Peter Keegan, Mike McCandless)
+
+API Changes
+
+ * Un-deprecate search(Weight weight, Filter filter, int n) from
+ Searchable interface (deprecated by accident). (Uwe Schindler)
+
+ * Un-deprecate o.a.l.util.Version constants. (Mike McCandless)
+
+ * LUCENE-1987: Un-deprecate some ctors of Token, as they will not
+ be removed in 3.0 and are still useful. Also add some missing
+ o.a.l.util.Version constants for enabling invalid acronym
+ settings in StandardAnalyzer to be compatible with the coming
+ Lucene 3.0. (Uwe Schindler)
+
+ * LUCENE-1973: Un-deprecate IndexSearcher.setDefaultFieldSortScoring,
+ to allow controlling per-IndexSearcher whether scores are computed
+ when sorting by field. (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-2043: Make IndexReader.commit(Map<String,String>) public.
+ (Mike McCandless)
+
+Documentation
+
+ * LUCENE-1955: Fix Hits deprecation notice to point users in right
+ direction. (Mike McCandless, Mark Miller)
+
+ * Fix javadoc about score tracking done by search methods in Searcher
+ and IndexSearcher. (Mike McCandless)
+
+ * LUCENE-2008: Javadoc improvements for TokenStream/Tokenizer/Token
+ (Luke Nezda via Mike McCandless)
+
+======================= Release 2.9.0 =======================
+
+Changes in backwards compatibility policy
+
+ * LUCENE-1575: Searchable.search(Weight, Filter, int, Sort) no
+ longer computes a document score for each hit by default. If
+ document score tracking is still needed, you can call
+ IndexSearcher.setDefaultFieldSortScoring(true, true) to enable
+ both per-hit and maxScore tracking; however, this is deprecated
+ and will be removed in 3.0.
+
+ Alternatively, use Searchable.search(Weight, Filter, Collector)
+ and pass in a TopFieldCollector instance, using the following code
+ sample:
+
+ <code>
+ TopFieldCollector tfc = TopFieldCollector.create(sort, numHits, fillFields,
+ true /* trackDocScores */,
+ true /* trackMaxScore */,
+ false /* docsInOrder */);
+ searcher.search(query, tfc);
+ TopDocs results = tfc.topDocs();
+ </code>
+
+ Note that your Sort object cannot use SortField.AUTO when you
+ directly instantiate TopFieldCollector.
+
+ Also, the method search(Weight, Filter, Collector) was added to
+ the Searchable interface and the Searcher abstract class to
+ replace the deprecated HitCollector versions. If you either
+ implement Searchable or extend Searcher, you should change your
+ code to implement this method. If you already extend
+ IndexSearcher, no further changes are needed to use Collector.
+
+ Finally, the values Float.NaN and Float.NEGATIVE_INFINITY are not
+ valid scores. Lucene uses these values internally in certain
+ places, so if you have hits with such scores, it will cause
+ problems. (Shai Erera via Mike McCandless)
+
+ * LUCENE-1687: All methods and parsers from the interface ExtendedFieldCache
+ have been moved into FieldCache. ExtendedFieldCache is now deprecated and
+ contains only a few declarations for binary backwards compatibility.
+ ExtendedFieldCache will be removed in version 3.0. Users of FieldCache and
+ ExtendedFieldCache will be able to plug in Lucene 2.9 without recompilation.
+ The auto cache (FieldCache.getAuto) is now deprecated. Due to the merge of
+ ExtendedFieldCache and FieldCache, FieldCache can now additionally return
+ long[] and double[] arrays in addition to int[] and float[] and StringIndex.
+
+ The interface changes are only notable for users implementing the interfaces,
+ which was unlikely done, because there is no possibility to change
+ Lucene's FieldCache implementation. (Grant Ingersoll, Uwe Schindler)
+
+ * LUCENE-1630, LUCENE-1771: Weight, previously an interface, is now an abstract
+ class. Some of the method signatures have changed, but it should be fairly
+ easy to see what adjustments must be made to existing code to sync up
+ with the new API. You can find more detail in the API Changes section.
+
+ Going forward Searchable will be kept for convenience only and may
+ be changed between minor releases without any deprecation
+ process. It is not recommended that you implement it, but rather extend
+ Searcher.
+ (Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)
+
+ * LUCENE-1422, LUCENE-1693: The new Attribute based TokenStream API (see below)
+ has some backwards breaks in rare cases. We did our best to make the
+ transition as easy as possible and you are not likely to run into any problems.
+ If your tokenizers still implement next(Token) or next(), the calls are
+ automatically wrapped. The indexer and query parser use the new API
+ (eg use incrementToken() calls). All core TokenStreams are implemented using
+ the new API. You can mix old and new API style TokenFilters/TokenStream.
+ Problems only occur when you have done the following:
+ You have overridden next(Token) or next() in one of the non-abstract core
+ TokenStreams/-Filters. These classes should normally be final, but some
+ of them are not. In this case, next(Token)/next() would never be called.
+ To fail early with a hard compile/runtime error, the next(Token)/next()
+ methods in these TokenStreams/-Filters were made final in this release.
+ (Michael Busch, Uwe Schindler)
+
+ * LUCENE-1763: MergePolicy now requires an IndexWriter instance to
+ be passed upon instantiation. As a result, IndexWriter was removed
+ as a method argument from all MergePolicy methods. (Shai Erera via
+ Mike McCandless)
+
+ * LUCENE-1748: LUCENE-1001 introduced PayloadSpans, but this was a back
+ compat break and caused custom SpanQuery implementations to fail at runtime
+ in a variety of ways. This issue attempts to remedy things by causing
+ a compile time break on custom SpanQuery implementations and removing
+ the PayloadSpans class, with its functionality now moved to Spans. To
+ help in alleviating future back compat pain, Spans has been changed from
+ an interface to an abstract class.
+ (Hugh Cayless, Mark Miller)
+
+ * LUCENE-1808: Query.createWeight has been changed from protected to
+ public. This will be a back compat break if you have overridden this
+ method - but you are likely already affected by the LUCENE-1693 (make Weight
+ abstract rather than an interface) back compat break if you have overridden
+ Query.creatWeight, so we have taken the opportunity to make this change.
+ (Tim Smith, Shai Erera via Mark Miller)
+
+ * LUCENE-1708 - IndexReader.document() no longer checks if the document is
+ deleted. You can call IndexReader.isDeleted(n) prior to calling document(n).
+ (Shai Erera via Mike McCandless)
+
+
+Changes in runtime behavior
+
+ * LUCENE-1424: QueryParser now by default uses constant score auto
+ rewriting when it generates a WildcardQuery and PrefixQuery (it
+ already does so for TermRangeQuery, as well). Call
+ setMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE)
+ to revert to slower BooleanQuery rewriting method. (Mark Miller via Mike
+ McCandless)
+
+ * LUCENE-1575: As of 2.9, the core collectors as well as
+ IndexSearcher's search methods that return top N results, no
+ longer filter documents with scores <= 0.0. If you rely on this
+ functionality you can use PositiveScoresOnlyCollector like this:
+
+ <code>
+ TopDocsCollector tdc = new TopScoreDocCollector(10);
+ Collector c = new PositiveScoresOnlyCollector(tdc);
+ searcher.search(query, c);
+ TopDocs hits = tdc.topDocs();
+ ...
+ </code>
+
+ * LUCENE-1604: IndexReader.norms(String field) is now allowed to
+ return null if the field has no norms, as long as you've
+ previously called IndexReader.setDisableFakeNorms(true). This
+ setting now defaults to false (to preserve the fake norms back
+ compatible behavior) but in 3.0 will be hardwired to true. (Shon
+ Vella via Mike McCandless).
+
+ * LUCENE-1624: If you open IndexWriter with create=true and
+ autoCommit=false on an existing index, IndexWriter no longer
+ writes an empty commit when it's created. (Paul Taylor via Mike
+ McCandless)
+
+ * LUCENE-1593: When you call Sort() or Sort.setSort(String field,
+ boolean reverse), the resulting SortField array no longer ends
+ with SortField.FIELD_DOC (it was unnecessary as Lucene breaks ties
+ internally by docID). (Shai Erera via Michael McCandless)
+
+ * LUCENE-1542: When the first token(s) have 0 position increment,
+ IndexWriter used to incorrectly record the position as -1, if no
+ payload is present, or Integer.MAX_VALUE if a payload is present.
+ This causes positional queries to fail to match. The bug is now
+ fixed, but if your app relies on the buggy behavior then you must
+ call IndexWriter.setAllowMinus1Position(). That API is deprecated
+ so you must fix your application, and rebuild your index, to not
+ rely on this behavior by the 3.0 release of Lucene. (Jonathan
+ Mamou, Mark Miller via Mike McCandless)
+
+
+ * LUCENE-1715: Finalizers have been removed from the 4 core classes
+ that still had them, since they will cause GC to take longer, thus
+ tying up memory for longer, and at best they mask buggy app code.
+ DirectoryReader (returned from IndexReader.open) & IndexWriter
+ previously released the write lock during finalize.
+ SimpleFSDirectory.FSIndexInput closed the descriptor in its
+ finalizer, and NativeFSLock released the lock. It's possible
+ applications will be affected by this, but only if the application
+ is failing to close reader/writers. (Brian Groose via Mike
+ McCandless)
+
+ * LUCENE-1717: Fixed IndexWriter to account for RAM usage of
+ buffered deletions. (Mike McCandless)
+
+ * LUCENE-1727: Ensure that fields are stored & retrieved in the
+ exact order in which they were added to the document. This was
+ true in all Lucene releases before 2.3, but was broken in 2.3 and
+ 2.4, and is now fixed in 2.9. (Mike McCandless)
+
+ * LUCENE-1678: The addition of Analyzer.reusableTokenStream
+ accidentally broke back compatibility of external analyzers that
+ subclassed core analyzers that implemented tokenStream but not
+ reusableTokenStream. This is now fixed, such that if
+ reusableTokenStream is invoked on such a subclass, that method
+ will forcefully fallback to tokenStream. (Mike McCandless)
+
+ * LUCENE-1801: Token.clear() and Token.clearNoTermBuffer() now also clear
+ startOffset, endOffset and type. This is not likely to affect any
+ Tokenizer chains, as Tokenizers normally always set these three values.
+ This change was made to be conform to the new AttributeImpl.clear() and
+ AttributeSource.clearAttributes() to work identical for Token as one for all
+ AttributeImpl and the 6 separate AttributeImpls. (Uwe Schindler, Michael Busch)
+
+ * LUCENE-1483: When searching over multiple segments, a new Scorer is now created
+ for each segment. Searching has been telescoped out a level and IndexSearcher now
+ operates much like MultiSearcher does. The Weight is created only once for the top
+ level Searcher, but each Scorer is passed a per-segment IndexReader. This will
+ result in doc ids in the Scorer being internal to the per-segment IndexReader. It
+ has always been outside of the API to count on a given IndexReader to contain every
+ doc id in the index - and if you have been ignoring MultiSearcher in your custom code
+ and counting on this fact, you will find your code no longer works correctly. If a
+ custom Scorer implementation uses any caches/filters that rely on being based on the
+ top level IndexReader, it will need to be updated to correctly use contextless
+ caches/filters eg you can't count on the IndexReader to contain any given doc id or
+ all of the doc ids. (Mark Miller, Mike McCandless)
+
+ * LUCENE-1846: DateTools now uses the US locale to format the numbers in its
+ date/time strings instead of the default locale. For most locales there will
+ be no change in the index format, as DateFormatSymbols is using ASCII digits.
+ The usage of the US locale is important to guarantee correct ordering of
+ generated terms. (Uwe Schindler)
+
+ * LUCENE-1860: MultiTermQuery now defaults to
+ CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method (previously it
+ was SCORING_BOOLEAN_QUERY_REWRITE). This means that PrefixQuery
+ and WildcardQuery will now produce constant score for all matching
+ docs, equal to the boost of the query. (Mike McCandless)
+
+API Changes
+
+ * LUCENE-1419: Add expert API to set custom indexing chain. This API is
+ package-protected for now, so we don't have to officially support it.
+ Yet, it will give us the possibility to try out different consumers
+ in the chain. (Michael Busch)
+
+ * LUCENE-1427: DocIdSet.iterator() is now allowed to throw
+ IOException. (Paul Elschot, Mike McCandless)
+
+ * LUCENE-1422, LUCENE-1693: New TokenStream API that uses a new class called
+ AttributeSource instead of the Token class, which is now a utility class that
+ holds common Token attributes. All attributes that the Token class had have
+ been moved into separate classes: TermAttribute, OffsetAttribute,
+ PositionIncrementAttribute, PayloadAttribute, TypeAttribute and FlagsAttribute.
+ The new API is much more flexible; it allows to combine the Attributes
+ arbitrarily and also to define custom Attributes. The new API has the same
+ performance as the old next(Token) approach. For conformance with this new
+ API Tee-/SinkTokenizer was deprecated and replaced by a new TeeSinkTokenFilter.
+ (Michael Busch, Uwe Schindler; additional contributions and bug fixes by
+ Daniel Shane, Doron Cohen)
+
+ * LUCENE-1467: Add nextDoc() and next(int) methods to OpenBitSetIterator.
+ These methods can be used to avoid additional calls to doc().
+ (Michael Busch)
+
+ * LUCENE-1468: Deprecate Directory.list(), which sometimes (in
+ FSDirectory) filters out files that don't look like index files, in
+ favor of new Directory.listAll(), which does no filtering. Also,
+ listAll() will never return null; instead, it throws an IOException
+ (or subclass). Specifically, FSDirectory.listAll() will throw the
+ newly added NoSuchDirectoryException if the directory does not
+ exist. (Marcel Reutegger, Mike McCandless)
+
+ * LUCENE-1546: Add IndexReader.flush(Map commitUserData), allowing
+ you to record an opaque commitUserData (maps String -> String) into
+ the commit written by IndexReader. This matches IndexWriter's
+ commit methods. (Jason Rutherglen via Mike McCandless)
+
+ * LUCENE-652: Added org.apache.lucene.document.CompressionTools, to
+ enable compressing & decompressing binary content, external to
+ Lucene's indexing. Deprecated Field.Store.COMPRESS.
+
+ * LUCENE-1561: Renamed Field.omitTf to Field.omitTermFreqAndPositions
+ (Otis Gospodnetic via Mike McCandless)
+
+ * LUCENE-1500: Added new InvalidTokenOffsetsException to Highlighter methods
+ to denote issues when offsets in TokenStream tokens exceed the length of the
+ provided text. (Mark Harwood)
+
+ * LUCENE-1575, LUCENE-1483: HitCollector is now deprecated in favor of
+ a new Collector abstract class. For easy migration, people can use
+ HitCollectorWrapper which translates (wraps) HitCollector into
+ Collector. Note that this class is also deprecated and will be
+ removed when HitCollector is removed. Also TimeLimitedCollector
+ is deprecated in favor of the new TimeLimitingCollector which
+ extends Collector. (Shai Erera, Mark Miller, Mike McCandless)
+
+ * LUCENE-1592: The method TermsEnum.skipTo() was deprecated, because
+ it is used nowhere in core/contrib and there is only a very ineffective
+ default implementation available. If you want to position a TermEnum
+ to another Term, create a new one using IndexReader.terms(Term).
+ (Uwe Schindler)
+
+ * LUCENE-1621: MultiTermQuery.getTerm() has been deprecated as it does
+ not make sense for all subclasses of MultiTermQuery. Check individual
+ subclasses to see if they support getTerm(). (Mark Miller)
+
+ * LUCENE-1636: Make TokenFilter.input final so it's set only
+ once. (Wouter Heijke, Uwe Schindler via Mike McCandless).
+
+ * LUCENE-1658, LUCENE-1451: Renamed FSDirectory to SimpleFSDirectory
+ (but left an FSDirectory base class). Added an FSDirectory.open
+ static method to pick a good default FSDirectory implementation
+ given the OS. FSDirectories should now be instantiated using
+ FSDirectory.open or with public constructors rather than
+ FSDirectory.getDirectory(), which has been deprecated.
+ (Michael McCandless, Uwe Schindler, yonik)
+
+ * LUCENE-1665: Deprecate SortField.AUTO, to be removed in 3.0.
+ Instead, when sorting by field, the application should explicitly
+ state the type of the field. (Mike McCandless)
+
+ * LUCENE-1660: StopFilter, StandardAnalyzer, StopAnalyzer now
+ require up front specification of enablePositionIncrement (Mike
+ McCandless)
+
+ * LUCENE-1614: DocIdSetIterator's next() and skipTo() were deprecated in favor
+ of the new nextDoc() and advance(). The new methods return the doc Id they
+ landed on, saving an extra call to doc() in most cases.
+ For easy migration of the code, you can change the calls to next() to
+ nextDoc() != DocIdSetIterator.NO_MORE_DOCS and similarly for skipTo().
+ However it is advised that you take advantage of the returned doc ID and not
+ call doc() following those two.
+ Also, doc() was deprecated in favor of docID(). docID() should return -1 or
+ NO_MORE_DOCS if nextDoc/advance were not called yet, or NO_MORE_DOCS if the
+ iterator has exhausted. Otherwise it should return the current doc ID.
+ (Shai Erera via Mike McCandless)
+
+ * LUCENE-1672: All ctors/opens and other methods using String/File to
+ specify the directory in IndexReader, IndexWriter, and IndexSearcher
+ were deprecated. You should instantiate the Directory manually before
+ and pass it to these classes (LUCENE-1451, LUCENE-1658).
+ (Uwe Schindler)
+
+ * LUCENE-1407: Move RemoteSearchable, RemoteCachingWrapperFilter out
+ of Lucene's core into new contrib/remote package. Searchable no
+ longer extends java.rmi.Remote (Simon Willnauer via Mike
+ McCandless)
+
+ * LUCENE-1677: The global property
+ org.apache.lucene.SegmentReader.class, and
+ ReadOnlySegmentReader.class are now deprecated, to be removed in
+ 3.0. src/gcj/* has been removed. (Earwin Burrfoot via Mike
+ McCandless)
+
+ * LUCENE-1673: Deprecated NumberTools in favour of the new
+ NumericRangeQuery and its new indexing format for numeric or
+ date values. (Uwe Schindler)
+
+ * LUCENE-1630, LUCENE-1771: Weight is now an abstract class, and adds
+ a scorer(IndexReader, boolean /* scoreDocsInOrder */, boolean /*
+ topScorer */) method instead of scorer(IndexReader). IndexSearcher uses
+ this method to obtain a scorer matching the capabilities of the Collector
+ wrt orderedness of docIDs. Some Scorers (like BooleanScorer) are much more
+ efficient if out-of-order documents scoring is allowed by a Collector.
+ Collector must now implement acceptsDocsOutOfOrder. If you write a
+ Collector which does not care about doc ID orderness, it is recommended
+ that you return true. Weight has a scoresDocsOutOfOrder method, which by
+ default returns false. If you create a Weight which will score documents
+ out of order if requested, you should override that method to return true.
+ BooleanQuery's setAllowDocsOutOfOrder and getAllowDocsOutOfOrder have been
+ deprecated as they are not needed anymore. BooleanQuery will now score docs
+ out of order when used with a Collector that can accept docs out of order.
+ Finally, Weight#explain now takes a sub-reader and sub-docID, rather than
+ a top level reader and docID.
+ (Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)
+
+ * LUCENE-1466, LUCENE-1906: Added CharFilter and MappingCharFilter, which allows
+ chaining & mapping of characters before tokenizers run. CharStream (subclass of
+ Reader) is the base class for custom java.io.Reader's, that support offset
+ correction. Tokenizers got an additional method correctOffset() that is passed
+ down to the underlying CharStream if input is a subclass of CharStream/-Filter.
+ (Koji Sekiguchi via Mike McCandless, Uwe Schindler)
+
+ * LUCENE-1703: Add IndexWriter.waitForMerges. (Tim Smith via Mike
+ McCandless)
+
+ * LUCENE-1625: CheckIndex's programmatic API now returns separate
+ classes detailing the status of each component in the index, and
+ includes more detailed status than previously. (Tim Smith via
+ Mike McCandless)
+
+ * LUCENE-1713: Deprecated RangeQuery and RangeFilter and renamed to
+ TermRangeQuery and TermRangeFilter. TermRangeQuery is in constant
+ score auto rewrite mode by default. The new classes also have new
+ ctors taking field and term ranges as Strings (see also
+ LUCENE-1424). (Uwe Schindler)
+
+ * LUCENE-1609: The termInfosIndexDivisor must now be specified
+ up-front when opening the IndexReader. Attempts to call
+ IndexReader.setTermInfosIndexDivisor will hit an
+ UnsupportedOperationException. This was done to enable removal of
+ all synchronization in TermInfosReader, which previously could
+ cause threads to pile up in certain cases. (Dan Rosher via Mike
+ McCandless)
+
+ * LUCENE-1688: Deprecate static final String stop word array in and
+ StopAnalzyer and replace it with an immutable implementation of
+ CharArraySet. (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1742: SegmentInfos, SegmentInfo and SegmentReader have been
+ made public as expert, experimental APIs. These APIs may suddenly
+ change from release to release (Jason Rutherglen via Mike
+ McCandless).
+
+ * LUCENE-1754: QueryWeight.scorer() can return null if no documents
+ are going to be matched by the query. Similarly,
+ Filter.getDocIdSet() can return null if no documents are going to
+ be accepted by the Filter. Note that these 'can' return null,
+ however they don't have to and can return a Scorer/DocIdSet which
+ does not match / reject all documents. This is already the
+ behavior of some QueryWeight/Filter implementations, and is
+ documented here just for emphasis. (Shai Erera via Mike
+ McCandless)
+
+ * LUCENE-1705: Added IndexWriter.deleteAllDocuments. (Tim Smith via
+ Mike McCandless)
+
+ * LUCENE-1460: Changed TokenStreams/TokenFilters in contrib to
+ use the new TokenStream API. (Robert Muir, Michael Busch)
+
+ * LUCENE-1748: LUCENE-1001 introduced PayloadSpans, but this was a back
+ compat break and caused custom SpanQuery implementations to fail at runtime
+ in a variety of ways. This issue attempts to remedy things by causing
+ a compile time break on custom SpanQuery implementations and removing
+ the PayloadSpans class, with its functionality now moved to Spans. To
+ help in alleviating future back compat pain, Spans has been changed from
+ an interface to an abstract class.
+ (Hugh Cayless, Mark Miller)
+
+ * LUCENE-1808: Query.createWeight has been changed from protected to
+ public. (Tim Smith, Shai Erera via Mark Miller)
+
+ * LUCENE-1826: Add constructors that take AttributeSource and
+ AttributeFactory to all Tokenizer implementations.
+ (Michael Busch)
+
+ * LUCENE-1847: Similarity#idf for both a Term and Term Collection have
+ been deprecated. New versions that return an IDFExplanation have been
+ added. (Yasoja Seneviratne, Mike McCandless, Mark Miller)
+
+ * LUCENE-1877: Made NativeFSLockFactory the default for
+ the new FSDirectory API (open(), FSDirectory subclass ctors).
+ All FSDirectory system properties were deprecated and all lock
+ implementations use no lock prefix if the locks are stored inside
+ the index directory. Because the deprecated String/File ctors of
+ IndexWriter and IndexReader (LUCENE-1672) and FSDirectory.getDirectory()
+ still use the old SimpleFSLockFactory and the new API
+ NativeFSLockFactory, we strongly recommend not to mix deprecated
+ and new API. (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-1911: Added a new method isCacheable() to DocIdSet. This method
+ should return true, if the underlying implementation does not use disk
+ I/O and is fast enough to be directly cached by CachingWrapperFilter.
+ OpenBitSet, SortedVIntList, and DocIdBitSet are such candidates.
+ The default implementation of the abstract DocIdSet class returns false.
+ In this case, CachingWrapperFilter copies the DocIdSetIterator into an
+ OpenBitSet for caching. (Uwe Schindler, Thomas Becker)
+
+Bug fixes
+
+ * LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
+ implementation - Leads to Solr Cache misses.
+ (Todd Feak, Mark Miller via yonik)
+
+ * LUCENE-1327: Fix TermSpans#skipTo() to behave as specified in javadocs
+ of Terms#skipTo(). (Michael Busch)
+
+ * LUCENE-1573: Do not ignore InterruptedException (caused by
+ Thread.interrupt()) nor enter deadlock/spin loop. Now, an interrupt
+ will cause a RuntimeException to be thrown. In 3.0 we will change
+ public APIs to throw InterruptedException. (Jeremy Volkman via
+ Mike McCandless)
+
+ * LUCENE-1590: Fixed stored-only Field instances do not change the
+ value of omitNorms, omitTermFreqAndPositions in FieldInfo; when you
+ retrieve such fields they will now have omitNorms=true and
+ omitTermFreqAndPositions=false (though these values are unused).
+ (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1587: RangeQuery#equals() could consider a RangeQuery
+ without a collator equal to one with a collator.
+ (Mark Platvoet via Mark Miller)
+
+ * LUCENE-1600: Don't call String.intern unnecessarily in some cases
+ when loading documents from the index. (P Eger via Mike
+ McCandless)
+
+ * LUCENE-1611: Fix case where OutOfMemoryException in IndexWriter
+ could cause "infinite merging" to happen. (Christiaan Fluit via
+ Mike McCandless)
+
+ * LUCENE-1623: Properly handle back-compatibility of 2.3.x indexes that
+ contain field names with non-ascii characters. (Mike Streeton via
+ Mike McCandless)
+
+ * LUCENE-1593: MultiSearcher and ParallelMultiSearcher did not break ties (in
+ sort) by doc Id in a consistent manner (i.e., if Sort.FIELD_DOC was used vs.
+ when it wasn't). (Shai Erera via Michael McCandless)
+
+ * LUCENE-1647: Fix case where IndexReader.undeleteAll would cause
+ the segment's deletion count to be incorrect. (Mike McCandless)
+
+ * LUCENE-1542: When the first token(s) have 0 position increment,
+ IndexWriter used to incorrectly record the position as -1, if no
+ payload is present, or Integer.MAX_VALUE if a payload is present.
+ This causes positional queries to fail to match. The bug is now
+ fixed, but if your app relies on the buggy behavior then you must
+ call IndexWriter.setAllowMinus1Position(). That API is deprecated
+ so you must fix your application, and rebuild your index, to not
+ rely on this behavior by the 3.0 release of Lucene. (Jonathan
+ Mamou, Mark Miller via Mike McCandless)
+
+ * LUCENE-1658: Fixed MMapDirectory to correctly throw IOExceptions
+ on EOF, removed numeric overflow possibilities and added support
+ for a hack to unmap the buffers on closing IndexInput.
+ (Uwe Schindler)
+
+ * LUCENE-1681: Fix infinite loop caused by a call to DocValues methods
+ getMinValue, getMaxValue, getAverageValue. (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1599: Add clone support for SpanQuerys. SpanRegexQuery counts
+ on this functionality and does not work correctly without it.
+ (Billow Gao, Mark Miller)
+
+ * LUCENE-1718: Fix termInfosIndexDivisor to carry over to reopened
+ readers (Mike McCandless)
+
+ * LUCENE-1583: SpanOrQuery skipTo() doesn't always move forwards as Spans
+ documentation indicates it should. (Moti Nisenson via Mark Miller)
+
+ * LUCENE-1566: Sun JVM Bug
+ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6478546 causes
+ invalid OutOfMemoryError when reading too many bytes at once from
+ a file on 32bit JVMs that have a large maximum heap size. This
+ fix adds set/getReadChunkSize to FSDirectory so that large reads
+ are broken into chunks, to work around this JVM bug. On 32bit
+ JVMs the default chunk size is 100 MB; on 64bit JVMs, which don't
+ show the bug, the default is Integer.MAX_VALUE. (Simon Willnauer
+ via Mike McCandless)
+
+ * LUCENE-1448: Added TokenStream.end() to perform end-of-stream
+ operations (ie to return the end offset of the tokenization).
+ This is important when multiple fields with the same name are added
+ to a document, to ensure offsets recorded in term vectors for all
+ of the instances are correct.
+ (Mike McCandless, Mark Miller, Michael Busch)
+
+ * LUCENE-1805: CloseableThreadLocal did not allow a null Object in get(),
+ although it does allow it in set(Object). Fix get() to not assert the object
+ is not null. (Shai Erera via Mike McCandless)
+
+ * LUCENE-1801: Changed all Tokenizers or TokenStreams in core/contrib)
+ that are the source of Tokens to always call
+ AttributeSource.clearAttributes() first. (Uwe Schindler)
+
+ * LUCENE-1819: MatchAllDocsQuery.toString(field) should produce output
+ that is parsable by the QueryParser. (John Wang, Mark Miller)
+
+ * LUCENE-1836: Fix localization bug in the new query parser and add
+ new LocalizedTestCase as base class for localization junit tests.
+ (Robert Muir, Uwe Schindler via Michael Busch)
+
+ * LUCENE-1847: PhraseQuery/TermQuery/SpanQuery use IndexReader specific stats
+ in their Weight#explain methods - these stats should be corpus wide.
+ (Yasoja Seneviratne, Mike McCandless, Mark Miller)
+
+ * LUCENE-1885: Fix the bug that NativeFSLock.isLocked() did not work,
+ if the lock was obtained by another NativeFSLock(Factory) instance.
+ Because of this IndexReader.isLocked() and IndexWriter.isLocked() did
+ not work correctly. (Uwe Schindler)
+
+ * LUCENE-1899: Fix O(N^2) CPU cost when setting docIDs in order in an
+ OpenBitSet, due to an inefficiency in how the underlying storage is
+ reallocated. (Nadav Har'El via Mike McCandless)
+
+ * LUCENE-1918: Fixed cases where a ParallelReader would
+ generate exceptions on being passed to
+ IndexWriter.addIndexes(IndexReader[]). First case was when the
+ ParallelReader was empty. Second case was when the ParallelReader
+ used to contain documents with TermVectors, but all such documents
+ have been deleted. (Christian Kohlschütter via Mike McCandless)
+
+New features
+
+ * LUCENE-1411: Added expert API to open an IndexWriter on a prior
+ commit, obtained from IndexReader.listCommits. This makes it
+ possible to rollback changes to an index even after you've closed
+ the IndexWriter that made the changes, assuming you are using an
+ IndexDeletionPolicy that keeps past commits around. This is useful
+ when building transactional support on top of Lucene. (Mike
+ McCandless)
+
+ * LUCENE-1382: Add an optional arbitrary Map (String -> String)
+ "commitUserData" to IndexWriter.commit(), which is stored in the
+ segments file and is then retrievable via
+ IndexReader.getCommitUserData instance and static methods.
+ (Shalin Shekhar Mangar via Mike McCandless)
+
+ * LUCENE-1420: Similarity now has a computeNorm method that allows
+ custom Similarity classes to override how norm is computed. It's
+ provided a FieldInvertState instance that contains details from
+ inverting the field. The default impl is boost *
+ lengthNorm(numTerms), to be backwards compatible. Also added
+ {set/get}DiscountOverlaps to DefaultSimilarity, to control whether
+ overlapping tokens (tokens with 0 position increment) should be
+ counted in lengthNorm. (Andrzej Bialecki via Mike McCandless)
+
+ * LUCENE-1424: Moved constant score query rewrite capability into
+ MultiTermQuery, allowing TermRangeQuery, PrefixQuery and WildcardQuery
+ to switch between constant-score rewriting or BooleanQuery
+ expansion rewriting via a new setRewriteMethod method.
+ Deprecated ConstantScoreRangeQuery (Mark Miller via Mike
+ McCandless)
+
+ * LUCENE-1461: Added FieldCacheRangeFilter, a RangeFilter for
+ single-term fields that uses FieldCache to compute the filter. If
+ your documents all have a single term for a given field, and you
+ need to create many RangeFilters with varying lower/upper bounds,
+ then this is likely a much faster way to create the filters than
+ RangeFilter. FieldCacheRangeFilter allows ranges on all data types,
+ FieldCache supports (term ranges, byte, short, int, long, float, double).
+ However, it comes at the expense of added RAM consumption and slower
+ first-time usage due to populating the FieldCache. It also does not
+ support collation (Tim Sturge, Matt Ericson via Mike McCandless and
+ Uwe Schindler)
+
+ * LUCENE-1296: add protected method CachingWrapperFilter.docIdSetToCache
+ to allow subclasses to choose which DocIdSet implementation to use
+ (Paul Elschot via Mike McCandless)
+
+ * LUCENE-1390: Added ASCIIFoldingFilter, a Filter that converts
+ alphabetic, numeric, and symbolic Unicode characters which are not in
+ the first 127 ASCII characters (the "Basic Latin" Unicode block) into
+ their ASCII equivalents, if one exists. ISOLatin1AccentFilter, which
+ handles a subset of this filter, has been deprecated.
+ (Andi Vajda, Steven Rowe via Mark Miller)
+
+ * LUCENE-1478: Added new SortField constructor allowing you to
+ specify a custom FieldCache parser to generate numeric values from
+ terms for a field. (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1528: Add support for Ideographic Space to the queryparser.
+ (Luis Alves via Michael Busch)
+
+ * LUCENE-1487: Added FieldCacheTermsFilter, to filter by multiple
+ terms on single-valued fields. The filter loads the FieldCache
+ for the field the first time it's called, and subsequent usage of
+ that field, even with different Terms in the filter, are fast.
+ (Tim Sturge, Shalin Shekhar Mangar via Mike McCandless).
+
+ * LUCENE-1314: Add clone(), clone(boolean readOnly) and
+ reopen(boolean readOnly) to IndexReader. Cloning an IndexReader
+ gives you a new reader which you can make changes to (deletions,
+ norms) without affecting the original reader. Now, with clone or
+ reopen you can change the readOnly of the original reader. (Jason
+ Rutherglen, Mike McCandless)
+
+ * LUCENE-1506: Added FilteredDocIdSet, an abstract class which you
+ subclass to implement the "match" method to accept or reject each
+ docID. Unlike ChainedFilter (under contrib/misc),
+ FilteredDocIdSet never requires you to materialize the full
+ bitset. Instead, match() is called on demand per docID. (John
+ Wang via Mike McCandless)
+
+ * LUCENE-1398: Add ReverseStringFilter to contrib/analyzers, a filter
+ to reverse the characters in each token. (Koji Sekiguchi via yonik)
+
+ * LUCENE-1551: Add expert IndexReader.reopen(IndexCommit) to allow
+ efficiently opening a new reader on a specific commit, sharing
+ resources with the original reader. (Torin Danil via Mike
+ McCandless)
+
+ * LUCENE-1434: Added org.apache.lucene.util.IndexableBinaryStringTools,
+ to encode byte[] as String values that are valid terms, and
+ maintain sort order of the original byte[] when the bytes are
+ interpreted as unsigned. (Steven Rowe via Mike McCandless)
+
+ * LUCENE-1543: Allow MatchAllDocsQuery to optionally use norms from
+ a specific fields to set the score for a document. (Karl Wettin
+ via Mike McCandless)
+
+ * LUCENE-1586: Add IndexReader.getUniqueTermCount(). (Mike
+ McCandless via Derek)
+
+ * LUCENE-1516: Added "near real-time search" to IndexWriter, via a
+ new expert getReader() method. This method returns a reader that
+ searches the full index, including any uncommitted changes in the
+ current IndexWriter session. This should result in a faster
+ turnaround than the normal approach of commiting the changes and
+ then reopening a reader. (Jason Rutherglen via Mike McCandless)
+
+ * LUCENE-1603: Added new MultiTermQueryWrapperFilter, to wrap any
+ MultiTermQuery as a Filter. Also made some improvements to
+ MultiTermQuery: return DocIdSet.EMPTY_DOCIDSET if there are no
+ terms in the enum; track the total number of terms it visited
+ during rewrite (getTotalNumberOfTerms). FilteredTermEnum is also
+ more friendly to subclassing. (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1605: Added BitVector.subset(). (Jeremy Volkman via Mike
+ McCandless)
+
+ * LUCENE-1618: Added FileSwitchDirectory that enables files with
+ specified extensions to be stored in a primary directory and the
+ rest of the files to be stored in the secondary directory. For
+ example, this can be useful for the large doc-store (stored
+ fields, term vectors) files in FSDirectory and the rest of the
+ index files in a RAMDirectory. (Jason Rutherglen via Mike
+ McCandless)
+
+ * LUCENE-1494: Added FieldMaskingSpanQuery which can be used to
+ cross-correlate Spans from different fields.
+ (Paul Cowan and Chris Hostetter)
+
+ * LUCENE-1634: Add calibrateSizeByDeletes to LogMergePolicy, to take
+ deletions into account when considering merges. (Yasuhiro Matsuda
+ via Mike McCandless)
+
+ * LUCENE-1550: Added new n-gram based String distance measure for spell checking.
+ See the Javadocs for NGramDistance.java for a reference paper on why
+ this is helpful (Tom Morton via Grant Ingersoll)
+
+ * LUCENE-1470, LUCENE-1582, LUCENE-1602, LUCENE-1673, LUCENE-1701, LUCENE-1712:
+ Added NumericRangeQuery and NumericRangeFilter, a fast alternative to
+ RangeQuery/RangeFilter for numeric searches. They depend on a specific
+ structure of terms in the index that can be created by indexing
+ using the new NumericField or NumericTokenStream classes. NumericField
+ can only be used for indexing and optionally stores the values as
+ string representation in the doc store. Documents returned from
+ IndexReader/IndexSearcher will return only the String value using
+ the standard Fieldable interface. NumericFields can be sorted on
+ and loaded into the FieldCache. (Uwe Schindler, Yonik Seeley,
+ Mike McCandless)
+
+ * LUCENE-1405: Added support for Ant resource collections in contrib/ant
+ <index> task. (Przemyslaw Sztoch via Erik Hatcher)
+
+ * LUCENE-1699: Allow setting a TokenStream on Field/Fieldable for indexing
+ in conjunction with any other ways to specify stored field values,
+ currently binary or string values. (yonik)
+
+ * LUCENE-1701: Made the standard FieldCache.Parsers public and added
+ parsers for fields generated using NumericField/NumericTokenStream.
+ All standard parsers now also implement Serializable and enforce
+ their singleton status. (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-1741: User configurable maximum chunk size in MMapDirectory.
+ On 32 bit platforms, the address space can be very fragmented, so
+ one big ByteBuffer for the whole file may not fit into address space.
+ (Eks Dev via Uwe Schindler)
+
+ * LUCENE-1644: Enable 4 rewrite modes for queries deriving from
+ MultiTermQuery (WildcardQuery, PrefixQuery, TermRangeQuery,
+ NumericRangeQuery): CONSTANT_SCORE_FILTER_REWRITE first creates a
+ filter and then assigns constant score (boost) to docs;
+ CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE create a BooleanQuery but
+ uses a constant score (boost); SCORING_BOOLEAN_QUERY_REWRITE also
+ creates a BooleanQuery but keeps the BooleanQuery's scores;
+ CONSTANT_SCORE_AUTO_REWRITE tries to pick the most performant
+ constant-score rewrite method. (Mike McCandless)
+
+ * LUCENE-1448: Added TokenStream.end(), to perform end-of-stream
+ operations. This is currently used to fix offset problems when
+ multiple fields with the same name are added to a document.
+ (Mike McCandless, Mark Miller, Michael Busch)
+
+ * LUCENE-1776: Add an option to not collect payloads for an ordered
+ SpanNearQuery. Payloads were not lazily loaded in this case as
+ the javadocs implied. If you have payloads and want to use an ordered
+ SpanNearQuery that does not need to use the payloads, you can
+ disable loading them with a new constructor switch. (Mark Miller)
+
+ * LUCENE-1341: Added PayloadNearQuery to enable SpanNearQuery functionality
+ with payloads (Peter Keegan, Grant Ingersoll, Mark Miller)
+
+ * LUCENE-1790: Added PayloadTermQuery to enable scoring of payloads
+ based on the maximum payload seen for a document.
+ Slight refactoring of Similarity and other payload queries (Grant Ingersoll, Mark Miller)
+
+ * LUCENE-1749: Addition of FieldCacheSanityChecker utility, and
+ hooks to use it in all existing Lucene Tests. This class can
+ be used by any application to inspect the FieldCache and provide
+ diagnostic information about the possibility of inconsistent
+ FieldCache usage. Namely: FieldCache entries for the same field
+ with different datatypes or parsers; and FieldCache entries for
+ the same field in both a reader, and one of its (descendant) sub
+ readers.
+ (Chris Hostetter, Mark Miller)
+
+ * LUCENE-1789: Added utility class
+ oal.search.function.MultiValueSource to ease the transition to
+ segment based searching for any apps that directly call
+ oal.search.function.* APIs. This class wraps any other
+ ValueSource, but takes care when composite (multi-segment) are
+ passed to not double RAM usage in the FieldCache. (Chris
+ Hostetter, Mark Miller, Mike McCandless)
+
+Optimizations
+
+ * LUCENE-1427: Fixed QueryWrapperFilter to not waste time computing
+ scores of the query, since they are just discarded. Also, made it
+ more efficient (single pass) by not creating & populating an
+ intermediate OpenBitSet (Paul Elschot, Mike McCandless)
+
+ * LUCENE-1443: Performance improvement for OpenBitSetDISI.inPlaceAnd()
+ (Paul Elschot via yonik)
+
+ * LUCENE-1484: Remove synchronization of IndexReader.document() by
+ using CloseableThreadLocal internally. (Jason Rutherglen via Mike
+ McCandless).
+
+ * LUCENE-1124: Short circuit FuzzyQuery.rewrite when input token length
+ is small compared to minSimilarity. (Timo Nentwig, Mark Miller)
+
+ * LUCENE-1316: MatchAllDocsQuery now avoids the synchronized
+ IndexReader.isDeleted() call per document, by directly accessing
+ the underlying deleteDocs BitVector. This improves performance
+ with non-readOnly readers, especially in a multi-threaded
+ environment. (Todd Feak, Yonik Seeley, Jason Rutherglen via Mike
+ McCandless)
+
+ * LUCENE-1483: When searching over multiple segments we now visit
+ each sub-reader one at a time. This speeds up warming, since
+ FieldCache entries (if required) can be shared across reopens for
+ those segments that did not change, and also speeds up searches
+ that sort by relevance or by field values. (Mark Miller, Mike
+ McCandless)
+
+ * LUCENE-1575: The new Collector class decouples collect() from
+ score computation. Collector.setScorer is called to establish the
+ current Scorer in-use per segment. Collectors that require the
+ score should then call Scorer.score() per hit inside
+ collect(). (Shai Erera via Mike McCandless)
+
+ * LUCENE-1596: MultiTermDocs speedup when set with
+ MultiTermDocs.seek(MultiTermEnum) (yonik)
+
+ * LUCENE-1653: Avoid creating a Calendar in every call to
+ DateTools#dateToString, DateTools#timeToString and
+ DateTools#round. (Shai Erera via Mark Miller)
+
+ * LUCENE-1688: Deprecate static final String stop word array and
+ replace it with an immutable implementation of CharArraySet.
+ Removes conversions between Set and array.
+ (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1754: BooleanQuery.queryWeight.scorer() will return null if
+ it won't match any documents (e.g. if there are no required and
+ optional scorers, or not enough optional scorers to satisfy
+ minShouldMatch). (Shai Erera via Mike McCandless)
+
+ * LUCENE-1607: To speed up string interning for commonly used
+ strings, the StringHelper.intern() interface was added with a
+ default implementation that uses a lockless cache.
+ (Earwin Burrfoot, yonik)
+
+ * LUCENE-1800: QueryParser should use reusable TokenStreams. (yonik)
+
+
+Documentation
+
+ * LUCENE-1908: Scoring documentation imrovements in Similarity javadocs.
+ (Mark Miller, Shai Erera, Ted Dunning, Jiri Kuhn, Marvin Humphrey, Doron Cohen)
+
+ * LUCENE-1872: NumericField javadoc improvements
+ (Michael McCandless, Uwe Schindler)
+
+ * LUCENE-1875: Make TokenStream.end javadoc less confusing.
+ (Uwe Schindler)
+
+ * LUCENE-1862: Rectified duplicate package level javadocs for
+ o.a.l.queryParser and o.a.l.analysis.cn.
+ (Chris Hostetter)
+
+ * LUCENE-1886: Improved hyperlinking in key Analysis javadocs
+ (Bernd Fondermann via Chris Hostetter)
+
+ * LUCENE-1884: massive javadoc and comment cleanup, primarily dealing with
+ typos.
+ (Robert Muir via Chris Hostetter)
+
+ * LUCENE-1898: Switch changes to use bullets rather than numbers and
+ update changes-to-html script to handle the new format.
+ (Steven Rowe, Mark Miller)
+
+ * LUCENE-1900: Improve Searchable Javadoc.
+ (Nadav Har'El, Doron Cohen, Marvin Humphrey, Mark Miller)
+
+ * LUCENE-1896: Improve Similarity#queryNorm javadocs.
+ (Jiri Kuhn, Mark Miller)
+
+Build
+
+ * LUCENE-1440: Add new targets to build.xml that allow downloading
+ and executing the junit testcases from an older release for
+ backwards-compatibility testing. (Michael Busch)
+
+ * LUCENE-1446: Add compatibility tag to common-build.xml and run
+ backwards-compatibility tests in the nightly build. (Michael Busch)
+
+ * LUCENE-1529: Properly test "drop-in" replacement of jar with
+ backwards-compatibility tests. (Mike McCandless, Michael Busch)
+
+ * LUCENE-1851: Change 'javacc' and 'clean-javacc' targets to build
+ and clean contrib/surround files. (Luis Alves via Michael Busch)
+
+ * LUCENE-1854: tar task should use longfile="gnu" to avoid false file
+ name length warnings. (Mark Miller)
+
+Test Cases
+
+ * LUCENE-1791: Enhancements to the QueryUtils and CheckHits utility
+ classes to wrap IndexReaders and Searchers in MultiReaders or
+ MultiSearcher when possible to help exercise more edge cases.
+ (Chris Hostetter, Mark Miller)
+
+ * LUCENE-1852: Fix localization test failures.
+ (Robert Muir via Michael Busch)
+
+ * LUCENE-1843: Refactored all tests that use assertAnalyzesTo() & others
+ in core and contrib to use a new BaseTokenStreamTestCase
+ base class. Also rewrote some tests to use this general analysis assert
+ functions instead of own ones (e.g. TestMappingCharFilter).
+ The new base class also tests tokenization with the TokenStream.next()
+ backwards layer enabled (using Token/TokenWrapper as attribute
+ implementation) and disabled (default for Lucene 3.0)
+ (Uwe Schindler, Robert Muir)
+
+ * LUCENE-1836: Added a new LocalizedTestCase as base class for localization
+ junit tests. (Robert Muir, Uwe Schindler via Michael Busch)
+
+======================= Release 2.4.1 =======================
+
+API Changes
+
+1. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+ resources. (Christian Kohlschütter via Mike McCandless)
+
+Bug fixes
+
+1. LUCENE-1452: Fixed silent data-loss case whereby binary fields are
+ truncated to 0 bytes during merging if the segments being merged
+ are non-congruent (same field name maps to different field
+ numbers). This bug was introduced with LUCENE-1219. (Andrzej
+ Bialecki via Mike McCandless).
+
+2. LUCENE-1429: Don't throw incorrect IllegalStateException from
+ IndexWriter.close() if you've hit an OOM when autoCommit is true.
+ (Mike McCandless)
+
+3. LUCENE-1474: If IndexReader.flush() is called twice when there were
+ pending deletions, it could lead to later false AssertionError
+ during IndexReader.open. (Mike McCandless)
+
+4. LUCENE-1430: Fix false AlreadyClosedException from IndexReader.open
+ (masking an actual IOException) that takes String or File path.
+ (Mike McCandless)
+
+5. LUCENE-1442: Multiple-valued NOT_ANALYZED fields can double-count
+ token offsets. (Mike McCandless)
+
+6. LUCENE-1453: Ensure IndexReader.reopen()/clone() does not result in
+ incorrectly closing the shared FSDirectory. This bug would only
+ happen if you use IndexReader.open() with a File or String argument.
+ The returned readers are wrapped by a FilterIndexReader that
+ correctly handles closing of directory after reopen()/clone().
+ (Mark Miller, Uwe Schindler, Mike McCandless)
+
+7. LUCENE-1457: Fix possible overflow bugs during binary
+ searches. (Mark Miller via Mike McCandless)
+
+8. LUCENE-1459: Fix CachingWrapperFilter to not throw exception if
+ both bits() and getDocIdSet() methods are called. (Matt Jones via
+ Mike McCandless)
+
+9. LUCENE-1519: Fix int overflow bug during segment merging. (Deepak
+ via Mike McCandless)
+
+10. LUCENE-1521: Fix int overflow bug when flushing segment.
+ (Shon Vella via Mike McCandless).
+
+11. LUCENE-1544: Fix deadlock in IndexWriter.addIndexes(IndexReader[]).
+ (Mike McCandless via Doug Sale)
+
+12. LUCENE-1547: Fix rare thread safety issue if two threads call
+ IndexWriter commit() at the same time. (Mike McCandless)
+
+13. LUCENE-1465: NearSpansOrdered returns payloads from first possible match
+ rather than the correct, shortest match; Payloads could be returned even
+ if the max slop was exceeded; The wrong payload could be returned in
+ certain situations. (Jonathan Mamou, Greg Shackles, Mark Miller)
+
+14. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+ resources. (Christian Kohlschütter via Mike McCandless)
+
+15. LUCENE-1552: Fix IndexWriter.addIndexes(IndexReader[]) to properly
+ rollback IndexWriter's internal state on hitting an
+ exception. (Scott Garland via Mike McCandless)
+
+======================= Release 2.4.0 =======================
+
+Changes in backwards compatibility policy
+
+1. LUCENE-1340: In a minor change to Lucene's backward compatibility
+ policy, we are now allowing the Fieldable interface to have
+ changes, within reason, and made on a case-by-case basis. If an
+ application implements its own Fieldable, please be aware of
+ this. Otherwise, no need to be concerned. This is in effect for
+ all 2.X releases, starting with 2.4. Also note, that in all
+ likelihood, Fieldable will be changed in 3.0.
+
+
+Changes in runtime behavior
+
+ 1. LUCENE-1151: Fix StandardAnalyzer to not mis-identify host names
+ (eg lucene.apache.org) as an ACRONYM. To get back to the pre-2.4
+ backwards compatible, but buggy, behavior, you can either call
+ StandardAnalyzer.setDefaultReplaceInvalidAcronym(false) (static
+ method), or, set system property
+ org.apache.lucene.analysis.standard.StandardAnalyzer.replaceInvalidAcronym
+ to "false" on JVM startup. All StandardAnalyzer instances created
+ after that will then show the pre-2.4 behavior. Alternatively,
+ you can call setReplaceInvalidAcronym(false) to change the
+ behavior per instance of StandardAnalyzer. This backwards
+ compatibility will be removed in 3.0 (hardwiring the value to
+ true). (Mike McCandless)
+
+ 2. LUCENE-1044: IndexWriter with autoCommit=true now commits (such
+ that a reader can see the changes) far less often than it used to.
+ Previously, every flush was also a commit. You can always force a
+ commit by calling IndexWriter.commit(). Furthermore, in 3.0,
+ autoCommit will be hardwired to false (IndexWriter constructors
+ that take an autoCommit argument have been deprecated) (Mike
+ McCandless)
+
+ 3. LUCENE-1335: IndexWriter.addIndexes(Directory[]) and
+ addIndexesNoOptimize no longer allow the same Directory instance
+ to be passed in more than once. Internally, IndexWriter uses
+ Directory and segment name to uniquely identify segments, so
+ adding the same Directory more than once was causing duplicates
+ which led to problems (Mike McCandless)
+
+ 4. LUCENE-1396: Improve PhraseQuery.toString() so that gaps in the
+ positions are indicated with a ? and multiple terms at the same
+ position are joined with a |. (Andrzej Bialecki via Mike
+ McCandless)
+
+API Changes
+
+ 1. LUCENE-1084: Changed all IndexWriter constructors to take an
+ explicit parameter for maximum field size. Deprecated all the
+ pre-existing constructors; these will be removed in release 3.0.
+ NOTE: these new constructors set autoCommit to false. (Steven
+ Rowe via Mike McCandless)
+
+ 2. LUCENE-584: Changed Filter API to return a DocIdSet instead of a
+ java.util.BitSet. This allows using more efficient data structures
+ for Filters and makes them more flexible. This deprecates
+ Filter.bits(), so all filters that implement this outside
+ the Lucene code base will need to be adapted. See also the javadocs
+ of the Filter class. (Paul Elschot, Michael Busch)
+
+ 3. LUCENE-1044: Added IndexWriter.commit() which flushes any buffered
+ adds/deletes and then commits a new segments file so readers will
+ see the changes. Deprecate IndexWriter.flush() in favor of
+ IndexWriter.commit(). (Mike McCandless)
+
+ 4. LUCENE-325: Added IndexWriter.expungeDeletes methods, which
+ consult the MergePolicy to find merges necessary to merge away all
+ deletes from the index. This should be a somewhat lower cost
+ operation than optimize. (John Wang via Mike McCandless)
+
+ 5. LUCENE-1233: Return empty array instead of null when no fields
+ match the specified name in these methods in Document:
+ getFieldables, getFields, getValues, getBinaryValues. (Stefan
+ Trcek vai Mike McCandless)
+
+ 6. LUCENE-1234: Make BoostingSpanScorer protected. (Andi Vajda via Grant Ingersoll)
+
+ 7. LUCENE-510: The index now stores strings as true UTF-8 bytes
+ (previously it was Java's modified UTF-8). If any text, either
+ stored fields or a token, has illegal UTF-16 surrogate characters,
+ these characters are now silently replaced with the Unicode
+ replacement character U+FFFD. This is a change to the index file
+ format. (Marvin Humphrey via Mike McCandless)
+
+ 8. LUCENE-852: Let the SpellChecker caller specify IndexWriter mergeFactor
+ and RAM buffer size. (Otis Gospodnetic)
+
+ 9. LUCENE-1290: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator
+ and remove all references to these classes from the core. Also update demos
+ and tutorials. (Michael Busch)
+
+10. LUCENE-1288: Add getVersion() and getGeneration() to IndexCommit.
+ getVersion() returns the same value that IndexReader.getVersion()
+ returns when the reader is opened on the same commit. (Jason
+ Rutherglen via Mike McCandless)
+
+11. LUCENE-1311: Added IndexReader.listCommits(Directory) static
+ method to list all commits in a Directory, plus IndexReader.open
+ methods that accept an IndexCommit and open the index as of that
+ commit. These methods are only useful if you implement a custom
+ DeletionPolicy that keeps more than the last commit around.
+ (Jason Rutherglen via Mike McCandless)
+
+12. LUCENE-1325: Added IndexCommit.isOptimized(). (Shalin Shekhar
+ Mangar via Mike McCandless)
+
+13. LUCENE-1324: Added TokenFilter.reset(). (Shai Erera via Mike
+ McCandless)
+
+14. LUCENE-1340: Added Fieldable.omitTf() method to skip indexing term
+ frequency, positions and payloads. This saves index space, and
+ indexing/searching time. (Eks Dev via Mike McCandless)
+
+15. LUCENE-1219: Add basic reuse API to Fieldable for binary fields:
+ getBinaryValue/Offset/Length(); currently only lazy fields reuse
+ the provided byte[] result to getBinaryValue. (Eks Dev via Mike
+ McCandless)
+
+16. LUCENE-1334: Add new constructor for Term: Term(String fieldName)
+ which defaults term text to "". (DM Smith via Mike McCandless)
+
+17. LUCENE-1333: Added Token.reinit(*) APIs to re-initialize (reuse) a
+ Token. Also added term() method to return a String, with a
+ performance penalty clearly documented. Also implemented
+ hashCode() and equals() in Token, and fixed all core and contrib
+ analyzers to use the re-use APIs. (DM Smith via Mike McCandless)
+
+18. LUCENE-1329: Add optional readOnly boolean when opening an
+ IndexReader. A readOnly reader is not allowed to make changes
+ (deletions, norms) to the index; in exchanged, the isDeleted
+ method, often a bottleneck when searching with many threads, is
+ not synchronized. The default for readOnly is still false, but in
+ 3.0 the default will become true. (Jason Rutherglen via Mike
+ McCandless)
+
+19. LUCENE-1367: Add IndexCommit.isDeleted(). (Shalin Shekhar Mangar
+ via Mike McCandless)
+
+20. LUCENE-1061: Factored out all "new XXXQuery(...)" in
+ QueryParser.java into protected methods newXXXQuery(...) so that
+ subclasses can create their own subclasses of each Query type.
+ (John Wang via Mike McCandless)
+
+21. LUCENE-753: Added new Directory implementation
+ org.apache.lucene.store.NIOFSDirectory, which uses java.nio's
+ FileChannel to do file reads. On most non-Windows platforms, with
+ many threads sharing a single searcher, this may yield sizable
+ improvement to query throughput when compared to FSDirectory,
+ which only allows a single thread to read from an open file at a
+ time. (Jason Rutherglen via Mike McCandless)
+
+22. LUCENE-1371: Added convenience method TopDocs Searcher.search(Query query, int n).
+ (Mike McCandless)
+
+23. LUCENE-1356: Allow easy extensions of TopDocCollector by turning
+ constructor and fields from package to protected. (Shai Erera
+ via Doron Cohen)
+
+24. LUCENE-1375: Added convenience method IndexCommit.getTimestamp,
+ which is equivalent to
+ getDirectory().fileModified(getSegmentsFileName()). (Mike McCandless)
+
+23. LUCENE-1366: Rename Field.Index options to be more accurate:
+ TOKENIZED becomes ANALYZED; UN_TOKENIZED becomes NOT_ANALYZED;
+ NO_NORMS becomes NOT_ANALYZED_NO_NORMS and a new ANALYZED_NO_NORMS
+ is added. (Mike McCandless)
+
+24. LUCENE-1131: Added numDeletedDocs method to IndexReader (Otis Gospodnetic)
+
+Bug fixes
+
+ 1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single
+ clause query if minNumShouldMatch<=0. (Shai Erera via Michael Busch)
+
+ 2. LUCENE-1169: Fixed bug in IndexSearcher.search(): searching with
+ a filter might miss some hits because scorer.skipTo() is called
+ without checking if the scorer is already at the right position.
+ scorer.skipTo(scorer.doc()) is not a NOOP, it behaves as
+ scorer.next(). (Eks Dev, Michael Busch)
+
+ 3. LUCENE-1182: Added scorePayload to SimilarityDelegator (Andi Vajda via Grant Ingersoll)
+
+ 4. LUCENE-1213: MultiFieldQueryParser was ignoring slop in case
+ of a single field phrase. (Trejkaz via Doron Cohen)
+
+ 5. LUCENE-1228: IndexWriter.commit() was not updating the index version and as
+ result IndexReader.reopen() failed to sense index changes. (Doron Cohen)
+
+ 6. LUCENE-1267: Added numDocs() and maxDoc() to IndexWriter;
+ deprecated docCount(). (Mike McCandless)
+
+ 7. LUCENE-1274: Added new prepareCommit() method to IndexWriter,
+ which does phase 1 of a 2-phase commit (commit() does phase 2).
+ This is needed when you want to update an index as part of a
+ transaction involving external resources (eg a database). Also
+ deprecated abort(), renaming it to rollback(). (Mike McCandless)
+
+ 8. LUCENE-1003: Stop RussianAnalyzer from removing numbers.
+ (TUSUR OpenTeam, Dmitry Lihachev via Otis Gospodnetic)
+
+ 9. LUCENE-1152: SpellChecker fix around clearIndex and indexDictionary
+ methods, plus removal of IndexReader reference.
+ (Naveen Belkale via Otis Gospodnetic)
+
+10. LUCENE-1046: Removed dead code in SpellChecker
+ (Daniel Naber via Otis Gospodnetic)
+
+11. LUCENE-1189: Fixed the QueryParser to handle escaped characters within
+ quoted terms correctly. (Tomer Gabel via Michael Busch)
+
+12. LUCENE-1299: Fixed NPE in SpellChecker when IndexReader is not null and field is (Grant Ingersoll)
+
+13. LUCENE-1303: Fixed BoostingTermQuery's explanation to be marked as a Match
+ depending only upon the non-payload score part, regardless of the effect of
+ the payload on the score. Prior to this, score of a query containing a BTQ
+ differed from its explanation. (Doron Cohen)
+
+14. LUCENE-1310: Fixed SloppyPhraseScorer to work also for terms repeating more
+ than twice in the query. (Doron Cohen)
+
+15. LUCENE-1351: ISOLatin1AccentFilter now cleans additional ligatures (Cedrik Lime via Grant Ingersoll)
+
+16. LUCENE-1383: Workaround a nasty "leak" in Java's builtin
+ ThreadLocal, to prevent Lucene from causing unexpected
+ OutOfMemoryError in certain situations (notably J2EE
+ applications). (Chris Lu via Mike McCandless)
+
+New features
+
+ 1. LUCENE-1137: Added Token.set/getFlags() accessors for passing more information about a Token through the analysis
+ process. The flag is not indexed/stored and is thus only used by analysis.
+
+ 2. LUCENE-1147: Add -segment option to CheckIndex tool so you can
+ check only a specific segment or segments in your index. (Mike
+ McCandless)
+
+ 3. LUCENE-1045: Reopened this issue to add support for short and bytes.
+
+ 4. LUCENE-584: Added new data structures to o.a.l.util, such as
+ OpenBitSet and SortedVIntList. These extend DocIdSet and can
+ directly be used for Filters with the new Filter API. Also changed
+ the core Filters to use OpenBitSet instead of java.util.BitSet.
+ (Paul Elschot, Michael Busch)
+
+ 5. LUCENE-494: Added QueryAutoStopWordAnalyzer to allow for the automatic removal, from a query of frequently occurring terms.
+ This Analyzer is not intended for use during indexing. (Mark Harwood via Grant Ingersoll)
+
+ 6. LUCENE-1044: Change Lucene to properly "sync" files after
+ committing, to ensure on a machine or OS crash or power cut, even
+ with cached writes, the index remains consistent. Also added
+ explicit commit() method to IndexWriter to force a commit without
+ having to close. (Mike McCandless)
+
+ 7. LUCENE-997: Add search timeout (partial) support.
+ A TimeLimitedCollector was added to allow limiting search time.
+ It is a partial solution since timeout is checked only when
+ collecting a hit, and therefore a search for rare words in a
+ huge index might not stop within the specified time.
+ (Sean Timm via Doron Cohen)
+
+ 8. LUCENE-1184: Allow SnapshotDeletionPolicy to be re-used across
+ close/re-open of IndexWriter while still protecting an open
+ snapshot (Tim Brennan via Mike McCandless)
+
+ 9. LUCENE-1194: Added IndexWriter.deleteDocuments(Query) to delete
+ documents matching the specified query. Also added static unlock
+ and isLocked methods (deprecating the ones in IndexReader). (Mike
+ McCandless)
+
+10. LUCENE-1201: Add IndexReader.getIndexCommit() method. (Tim Brennan
+ via Mike McCandless)
+
+11. LUCENE-550: Added InstantiatedIndex implementation. Experimental
+ Index store similar to MemoryIndex but allows for multiple documents
+ in memory. (Karl Wettin via Grant Ingersoll)
+
+12. LUCENE-400: Added word based n-gram filter (in contrib/analyzers) called ShingleFilter and an Analyzer wrapper
+ that wraps another Analyzer's token stream with a ShingleFilter (Sebastian Kirsch, Steve Rowe via Grant Ingersoll)
+
+13. LUCENE-1166: Decomposition tokenfilter for languages like German and Swedish (Thomas Peuss via Grant Ingersoll)
+
+14. LUCENE-1187: ChainedFilter and BooleanFilter now work with new Filter API
+ and DocIdSetIterator-based filters. Backwards-compatibility with old
+ BitSet-based filters is ensured. (Paul Elschot via Michael Busch)
+
+15. LUCENE-1295: Added new method to MoreLikeThis for retrieving interesting terms and made retrieveTerms(int) public. (Grant Ingersoll)
+
+16. LUCENE-1298: MoreLikeThis can now accept a custom Similarity (Grant Ingersoll)
+
+17. LUCENE-1297: Allow other string distance measures for the SpellChecker
+ (Thomas Morton via Otis Gospodnetic)
+
+18. LUCENE-1001: Provide access to Payloads via Spans. All existing Span Query implementations in Lucene implement. (Mark Miller, Grant Ingersoll)
+
+19. LUCENE-1354: Provide programmatic access to CheckIndex (Grant Ingersoll, Mike McCandless)
+
+20. LUCENE-1279: Add support for Collators to RangeFilter/Query and Query Parser. (Steve Rowe via Grant Ingersoll)
+
+Optimizations
+
+ 1. LUCENE-705: When building a compound file, use
+ RandomAccessFile.setLength() to tell the OS/filesystem to
+ pre-allocate space for the file. This may improve fragmentation
+ in how the CFS file is stored, and allows us to detect an upcoming
+ disk full situation before actually filling up the disk. (Mike
+ McCandless)
+
+ 2. LUCENE-1120: Speed up merging of term vectors by bulk-copying the
+ raw bytes for each contiguous range of non-deleted documents.
+ (Mike McCandless)
+
+ 3. LUCENE-1185: Avoid checking if the TermBuffer 'scratch' in
+ SegmentTermEnum is null for every call of scanTo().
+ (Christian Kohlschuetter via Michael Busch)
+
+ 4. LUCENE-1217: Internal to Field.java, use isBinary instead of
+ runtime type checking for possible speedup of binaryValue().
+ (Eks Dev via Mike McCandless)
+
+ 5. LUCENE-1183: Optimized TRStringDistance class (in contrib/spell) that uses
+ less memory than the previous version. (Cédrik LIME via Otis Gospodnetic)
+
+ 6. LUCENE-1195: Improve term lookup performance by adding a LRU cache to the
+ TermInfosReader. In performance experiments the speedup was about 25% on
+ average on mid-size indexes with ~500,000 documents for queries with 3
+ terms and about 7% on larger indexes with ~4.3M documents. (Michael Busch)
+
+Documentation
+
+ 1. LUCENE-1236: Added some clarifying remarks to EdgeNGram*.java (Hiroaki Kawai via Grant Ingersoll)
+
+ 2. LUCENE-1157 and LUCENE-1256: HTML changes log, created automatically
+ from CHANGES.txt. This HTML file is currently visible only via developers page.
+ (Steven Rowe via Doron Cohen)
+
+ 3. LUCENE-1349: Fieldable can now be changed without breaking backward compatibility rules (within reason. See the note at
+ the top of this file and also on Fieldable.java). (Grant Ingersoll)
+
+ 4. LUCENE-1873: Update documentation to reflect current Contrib area status.
+ (Steven Rowe, Mark Miller)
+
+Build
+
+ 1. LUCENE-1153: Added JUnit JAR to new lib directory. Updated build to rely on local JUnit instead of ANT/lib.
+
+ 2. LUCENE-1202: Small fixes to the way Clover is used to work better
+ with contribs. Of particular note: a single clover db is used
+ regardless of whether tests are run globally or in the specific
+ contrib directories.
+
+ 3. LUCENE-1353: Javacc target in contrib/miscellaneous for
+ generating the precedence query parser.
+
+Test Cases
+
+ 1. LUCENE-1238: Fixed intermittent failures of TestTimeLimitedCollector.testTimeoutMultiThreaded.
+ Within this fix, "greedy" flag was added to TimeLimitedCollector, to allow the wrapped
+ collector to collect also the last doc, after allowed-tTime passed. (Doron Cohen)
+
+ 2. LUCENE-1348: relax TestTimeLimitedCollector to not fail due to
+ timeout exceeded (just because test machine is very busy).
+
+======================= Release 2.3.2 =======================
+
+Bug fixes
+
+ 1. LUCENE-1191: On hitting OutOfMemoryError in any index-modifying
+ methods in IndexWriter, do not commit any further changes to the
+ index to prevent risk of possible corruption. (Mike McCandless)
+
+ 2. LUCENE-1197: Fixed issue whereby IndexWriter would flush by RAM
+ too early when TermVectors were in use. (Mike McCandless)
+
+ 3. LUCENE-1198: Don't corrupt index if an exception happens inside
+ DocumentsWriter.init (Mike McCandless)
+
+ 4. LUCENE-1199: Added defensive check for null indexReader before
+ calling close in IndexModifier.close() (Mike McCandless)
+
+ 5. LUCENE-1200: Fix rare deadlock case in addIndexes* when
+ ConcurrentMergeScheduler is in use (Mike McCandless)
+
+ 6. LUCENE-1208: Fix deadlock case on hitting an exception while
+ processing a document that had triggered a flush (Mike McCandless)
+
+ 7. LUCENE-1210: Fix deadlock case on hitting an exception while
+ starting a merge when using ConcurrentMergeScheduler (Mike McCandless)
+
+ 8. LUCENE-1222: Fix IndexWriter.doAfterFlush to always be called on
+ flush (Mark Ferguson via Mike McCandless)
+
+ 9. LUCENE-1226: Fixed IndexWriter.addIndexes(IndexReader[]) to commit
+ successfully created compound files. (Michael Busch)
+
+10. LUCENE-1150: Re-expose StandardTokenizer's constants publicly;
+ this was accidentally lost with LUCENE-966. (Nicolas Lalevée via
+ Mike McCandless)
+
+11. LUCENE-1262: Fixed bug in BufferedIndexReader.refill whereby on
+ hitting an exception in readInternal, the buffer is incorrectly
+ filled with stale bytes such that subsequent calls to readByte()
+ return incorrect results. (Trejkaz via Mike McCandless)
+
+12. LUCENE-1270: Fixed intermittent case where IndexWriter.close()
+ would hang after IndexWriter.addIndexesNoOptimize had been
+ called. (Stu Hood via Mike McCandless)
+
+Build
+
+ 1. LUCENE-1230: Include *pom.xml* in source release files. (Michael Busch)
+
+
+======================= Release 2.3.1 =======================
+
+Bug fixes
+
+ 1. LUCENE-1168: Fixed corruption cases when autoCommit=false and
+ documents have mixed term vectors (Suresh Guvvala via Mike
+ McCandless).
+
+ 2. LUCENE-1171: Fixed some cases where OOM errors could cause
+ deadlock in IndexWriter (Mike McCandless).
+
+ 3. LUCENE-1173: Fixed corruption case when autoCommit=false and bulk
+ merging of stored fields is used (Yonik via Mike McCandless).
+
+ 4. LUCENE-1163: Fixed bug in CharArraySet.contains(char[] buffer, int
+ offset, int len) that was ignoring offset and thus giving the
+ wrong answer. (Thomas Peuss via Mike McCandless)
+
+ 5. LUCENE-1177: Fix rare case where IndexWriter.optimize might do too
+ many merges at the end. (Mike McCandless)
+
+ 6. LUCENE-1176: Fix corruption case when documents with no term
+ vector fields are added before documents with term vector fields.
+ (Mike McCandless)
+
+ 7. LUCENE-1179: Fixed assert statement that was incorrectly
+ preventing Fields with empty-string field name from working.
+ (Sergey Kabashnyuk via Mike McCandless)
+
+======================= Release 2.3.0 =======================
+
+Changes in runtime behavior
+
+ 1. LUCENE-994: Defaults for IndexWriter have been changed to maximize
+ out-of-the-box indexing speed. First, IndexWriter now flushes by
+ RAM usage (16 MB by default) instead of a fixed doc count (call
+ IndexWriter.setMaxBufferedDocs to get backwards compatible
+ behavior). Second, ConcurrentMergeScheduler is used to run merges
+ using background threads (call IndexWriter.setMergeScheduler(new
+ SerialMergeScheduler()) to get backwards compatible behavior).
+ Third, merges are chosen based on size in bytes of each segment
+ rather than document count of each segment (call
+ IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get
+ backwards compatible behavior).
+
+ NOTE: users of ParallelReader must change back all of these
+ defaults in order to ensure the docIDs "align" across all parallel
+ indices.
+
+ (Mike McCandless)
+
+ 2. LUCENE-1045: SortField.AUTO didn't work with long. When detecting
+ the field type for sorting automatically, numbers used to be
+ interpreted as int, then as float, if parsing the number as an int
+ failed. Now the detection checks for int, then for long,
+ then for float. (Daniel Naber)
+
+API Changes
+
+ 1. LUCENE-843: Added IndexWriter.setRAMBufferSizeMB(...) to have
+ IndexWriter flush whenever the buffered documents are using more
+ than the specified amount of RAM. Also added new APIs to Token
+ that allow one to set a char[] plus offset and length to specify a
+ token (to avoid creating a new String() for each Token). (Mike
+ McCandless)
+
+ 2. LUCENE-963: Add setters to Field to allow for re-using a single
+ Field instance during indexing. This is a sizable performance
+ gain, especially for small documents. (Mike McCandless)
+
+ 3. LUCENE-969: Add new APIs to Token, TokenStream and Analyzer to
+ permit re-using of Token and TokenStream instances during
+ indexing. Changed Token to use a char[] as the store for the
+ termText instead of String. This gives faster tokenization
+ performance (~10-15%). (Mike McCandless)
+
+ 4. LUCENE-847: Factored MergePolicy, which determines which merges
+ should take place and when, as well as MergeScheduler, which
+ determines when the selected merges should actually run, out of
+ IndexWriter. The default merge policy is now
+ LogByteSizeMergePolicy (see LUCENE-845) and the default merge
+ scheduler is now ConcurrentMergeScheduler (see
+ LUCENE-870). (Steven Parkes via Mike McCandless)
+
+ 5. LUCENE-1052: Add IndexReader.setTermInfosIndexDivisor(int) method
+ that allows you to reduce memory usage of the termInfos by further
+ sub-sampling (over the termIndexInterval that was used during
+ indexing) which terms are loaded into memory. (Chuck Williams,
+ Doug Cutting via Mike McCandless)
+
+ 6. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+ existing IndexReader (see New features -> 8.) (Michael Busch)
+
+ 7. LUCENE-1062: Add setData(byte[] data),
+ setData(byte[] data, int offset, int length), getData(), getOffset()
+ and clone() methods to o.a.l.index.Payload. Also add the field name
+ as arg to Similarity.scorePayload(). (Michael Busch)
+
+ 8. LUCENE-982: Add IndexWriter.optimize(int maxNumSegments) method to
+ "partially optimize" an index down to maxNumSegments segments.
+ (Mike McCandless)
+
+ 9. LUCENE-1080: Changed Token.DEFAULT_TYPE to be public.
+
+10. LUCENE-1064: Changed TopDocs constructor to be public.
+ (Shai Erera via Michael Busch)
+
+11. LUCENE-1079: DocValues cleanup: constructor now has no params,
+ and getInnerArray() now throws UnsupportedOperationException (Doron Cohen)
+
+12. LUCENE-1089: Added PriorityQueue.insertWithOverflow, which returns
+ the Object (if any) that was bumped from the queue to allow
+ re-use. (Shai Erera via Mike McCandless)
+
+13. LUCENE-1101: Token reuse 'contract' (defined LUCENE-969)
+ modified so it is token producer's responsibility
+ to call Token.clear(). (Doron Cohen)
+
+14. LUCENE-1118: Changed StandardAnalyzer to skip too-long (default >
+ 255 characters) tokens. You can increase this limit by calling
+ StandardAnalyzer.setMaxTokenLength(...). (Michael McCandless)
+
+
+Bug fixes
+
+ 1. LUCENE-933: QueryParser fixed to not produce empty sub
+ BooleanQueries "()" even if the Analyzer produced no
+ tokens for input. (Doron Cohen)
+
+ 2. LUCENE-955: Fixed SegmentTermPositions to work correctly with the
+ first term in the dictionary. (Michael Busch)
+
+ 3. LUCENE-951: Fixed NullPointerException in MultiLevelSkipListReader
+ that was thrown after a call of TermPositions.seek().
+ (Rich Johnson via Michael Busch)
+
+ 4. LUCENE-938: Fixed cases where an unhandled exception in
+ IndexWriter's methods could cause deletes to be lost.
+ (Steven Parkes via Mike McCandless)
+
+ 5. LUCENE-962: Fixed case where an unhandled exception in
+ IndexWriter.addDocument or IndexWriter.updateDocument could cause
+ unreferenced files in the index to not be deleted
+ (Steven Parkes via Mike McCandless)
+
+ 6. LUCENE-957: RAMDirectory fixed to properly handle directories
+ larger than Integer.MAX_VALUE. (Doron Cohen)
+
+ 7. LUCENE-781: MultiReader fixed to not throw NPE if isCurrent(),
+ isOptimized() or getVersion() is called. Separated MultiReader
+ into two classes: MultiSegmentReader extends IndexReader, is
+ package-protected and is created automatically by IndexReader.open()
+ in case the index has multiple segments. The public MultiReader
+ now extends MultiSegmentReader and is intended to be used by users
+ who want to add their own subreaders. (Daniel Naber, Michael Busch)
+
+ 8. LUCENE-970: FilterIndexReader now implements isOptimized(). Before
+ a call of isOptimized() would throw a NPE. (Michael Busch)
+
+ 9. LUCENE-832: ParallelReader fixed to not throw NPE if isCurrent(),
+ isOptimized() or getVersion() is called. (Michael Busch)
+
+10. LUCENE-948: Fix FNFE exception caused by stale NFS client
+ directory listing caches when writers on different machines are
+ sharing an index over NFS and using a custom deletion policy (Mike
+ McCandless)
+
+11. LUCENE-978: Ensure TermInfosReader, FieldsReader, and FieldsReader
+ close any streams they had opened if an exception is hit in the
+ constructor. (Ning Li via Mike McCandless)
+
+12. LUCENE-985: If an extremely long term is in a doc (> 16383 chars),
+ we now throw an IllegalArgumentException saying the term is too
+ long, instead of cryptic ArrayIndexOutOfBoundsException. (Karl
+ Wettin via Mike McCandless)
+
+13. LUCENE-991: The explain() method of BoostingTermQuery had errors
+ when no payloads were present on a document. (Peter Keegan via
+ Grant Ingersoll)
+
+14. LUCENE-992: Fixed IndexWriter.updateDocument to be atomic again
+ (this was broken by LUCENE-843). (Ning Li via Mike McCandless)
+
+15. LUCENE-1008: Fixed corruption case when document with no term
+ vector fields is added after documents with term vector fields.
+ This bug was introduced with LUCENE-843. (Grant Ingersoll via
+ Mike McCandless)
+
+16. LUCENE-1006: Fixed QueryParser to accept a "" field value (zero
+ length quoted string.) (yonik)
+
+17. LUCENE-1010: Fixed corruption case when document with no term
+ vector fields is added after documents with term vector fields.
+ This case is hit during merge and would cause an EOFException.
+ This bug was introduced with LUCENE-984. (Andi Vajda via Mike
+ McCandless)
+
+19. LUCENE-1009: Fix merge slowdown with LogByteSizeMergePolicy when
+ autoCommit=false and documents are using stored fields and/or term
+ vectors. (Mark Miller via Mike McCandless)
+
+20. LUCENE-1011: Fixed corruption case when two or more machines,
+ sharing an index over NFS, can be writers in quick succession.
+ (Patrick Kimber via Mike McCandless)
+
+21. LUCENE-1028: Fixed Weight serialization for few queries:
+ DisjunctionMaxQuery, ValueSourceQuery, CustomScoreQuery.
+ Serialization check added for all queries.
+ (Kyle Maxwell via Doron Cohen)
+
+22. LUCENE-1048: Fixed incorrect behavior in Lock.obtain(...) when the
+ timeout argument is very large (eg Long.MAX_VALUE). Also added
+ Lock.LOCK_OBTAIN_WAIT_FOREVER constant to never timeout. (Nikolay
+ Diakov via Mike McCandless)
+
+23. LUCENE-1050: Throw LockReleaseFailedException in
+ Simple/NativeFSLockFactory if we fail to delete the lock file when
+ releasing the lock. (Nikolay Diakov via Mike McCandless)
+
+24. LUCENE-1071: Fixed SegmentMerger to correctly set payload bit in
+ the merged segment. (Michael Busch)
+
+25. LUCENE-1042: Remove throwing of IOException in getTermFreqVector(int, String, TermVectorMapper) to be consistent
+ with other getTermFreqVector calls. Also removed the throwing of the other IOException in that method to be consistent. (Karl Wettin via Grant Ingersoll)
+
+26. LUCENE-1096: Fixed Hits behavior when hits' docs are deleted
+ along with iterating the hits. Deleting docs already retrieved
+ now works seamlessly. If docs not yet retrieved are deleted
+ (e.g. from another thread), and then, relying on the initial
+ Hits.length(), an application attempts to retrieve more hits
+ than actually exist , a ConcurrentMidificationException
+ is thrown. (Doron Cohen)
+
+27. LUCENE-1068: Changed StandardTokenizer to fix an issue with it marking
+ the type of some tokens incorrectly. This is done by adding a new flag named
+ replaceInvalidAcronym which defaults to false, the current, incorrect behavior. Setting
+ this flag to true fixes the problem. This flag is a temporary fix and is already
+ marked as being deprecated. 3.x will implement the correct approach. (Shai Erera via Grant Ingersoll)
+ LUCENE-1140: Fixed NPE caused by 1068 (Alexei Dets via Grant Ingersoll)
+
+28. LUCENE-749: ChainedFilter behavior fixed when logic of
+ first filter is ANDNOT. (Antonio Bruno via Doron Cohen)
+
+29. LUCENE-508: Make sure SegmentTermEnum.prev() is accurate (= last
+ term) after next() returns false. (Steven Tamm via Mike
+ McCandless)
+
+
+New features
+
+ 1. LUCENE-906: Elision filter for French.
+ (Mathieu Lecarme via Otis Gospodnetic)
+
+ 2. LUCENE-960: Added a SpanQueryFilter and related classes to allow for
+ not only filtering, but knowing where in a Document a Filter matches
+ (Grant Ingersoll)
+
+ 3. LUCENE-868: Added new Term Vector access features. New callback
+ mechanism allows application to define how and where to read Term
+ Vectors from disk. This implementation contains several extensions
+ of the new abstract TermVectorMapper class. The new API should be
+ back-compatible. No changes in the actual storage of Term Vectors
+ has taken place.
+ 3.1 LUCENE-1038: Added setDocumentNumber() method to TermVectorMapper
+ to provide information about what document is being accessed.
+ (Karl Wettin via Grant Ingersoll)
+
+ 4. LUCENE-975: Added PositionBasedTermVectorMapper that allows for
+ position based lookup of term vector information.
+ See item #3 above (LUCENE-868).
+
+ 5. LUCENE-1011: Added simple tools (all in org.apache.lucene.store)
+ to verify that locking is working properly. LockVerifyServer runs
+ a separate server to verify locks. LockStressTest runs a simple
+ tool that rapidly obtains and releases locks.
+ VerifyingLockFactory is a LockFactory that wraps any other
+ LockFactory and consults the LockVerifyServer whenever a lock is
+ obtained or released, throwing an exception if an illegal lock
+ obtain occurred. (Patrick Kimber via Mike McCandless)
+
+ 6. LUCENE-1015: Added FieldCache extension (ExtendedFieldCache) to
+ support doubles and longs. Added support into SortField for sorting
+ on doubles and longs as well. (Grant Ingersoll)
+
+ 7. LUCENE-1020: Created basic index checking & repair tool
+ (o.a.l.index.CheckIndex). When run without -fix it does a
+ detailed test of all segments in the index and reports summary
+ information and any errors it hit. With -fix it will remove
+ segments that had errors. (Mike McCandless)
+
+ 8. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+ existing IndexReader by only loading those portions of an index
+ that have changed since the reader was (re)opened. reopen() can
+ be significantly faster than open(), depending on the amount of
+ index changes. SegmentReader, MultiSegmentReader, MultiReader,
+ and ParallelReader implement reopen(). (Michael Busch)
+
+ 9. LUCENE-1040: CharArraySet useful for efficiently checking
+ set membership of text specified by char[]. (yonik)
+
+10. LUCENE-1073: Created SnapshotDeletionPolicy to facilitate taking a
+ live backup of an index without pausing indexing. (Mike
+ McCandless)
+
+11. LUCENE-1019: CustomScoreQuery enhanced to support multiple
+ ValueSource queries. (Kyle Maxwell via Doron Cohen)
+
+12. LUCENE-1095: Added an option to StopFilter to increase
+ positionIncrement of the token succeeding a stopped token.
+ Disabled by default. Similar option added to QueryParser
+ to consider token positions when creating PhraseQuery
+ and MultiPhraseQuery. Disabled by default (so by default
+ the query parser ignores position increments).
+ (Doron Cohen)
+
+13. LUCENE-1380: Added TokenFilter for setting position increment in special cases related to the ShingleFilter (Mck SembWever, Steve Rowe, Karl Wettin via Grant Ingersoll)
+
+
+
+Optimizations
+
+ 1. LUCENE-937: CachingTokenFilter now uses an iterator to access the
+ Tokens that are cached in the LinkedList. This increases performance
+ significantly, especially when the number of Tokens is large.
+ (Mark Miller via Michael Busch)
+
+ 2. LUCENE-843: Substantial optimizations to improve how IndexWriter
+ uses RAM for buffering documents and to speed up indexing (2X-8X
+ faster). A single shared hash table now records the in-memory
+ postings per unique term and is directly flushed into a single
+ segment. (Mike McCandless)
+
+ 3. LUCENE-892: Fixed extra "buffer to buffer copy" that sometimes
+ takes place when using compound files. (Mike McCandless)
+
+ 4. LUCENE-959: Remove synchronization in Document (yonik)
+
+ 5. LUCENE-963: Add setters to Field to allow for re-using a single
+ Field instance during indexing. This is a sizable performance
+ gain, especially for small documents. (Mike McCandless)
+
+ 6. LUCENE-939: Check explicitly for boundary conditions in FieldInfos
+ and don't rely on exceptions. (Michael Busch)
+
+ 7. LUCENE-966: Very substantial speedups (~6X faster) for
+ StandardTokenizer (StandardAnalyzer) by using JFlex instead of
+ JavaCC to generate the tokenizer.
+ (Stanislaw Osinski via Mike McCandless)
+
+ 8. LUCENE-969: Changed core tokenizers & filters to re-use Token and
+ TokenStream instances when possible to improve tokenization
+ performance (~10-15%). (Mike McCandless)
+
+ 9. LUCENE-871: Speedup ISOLatin1AccentFilter (Ian Boston via Mike
+ McCandless)
+
+10. LUCENE-986: Refactored SegmentInfos from IndexReader into the new
+ subclass DirectoryIndexReader. SegmentReader and MultiSegmentReader
+ now extend DirectoryIndexReader and are the only IndexReader
+ implementations that use SegmentInfos to access an index and
+ acquire a write lock for index modifications. (Michael Busch)
+
+11. LUCENE-1007: Allow flushing in IndexWriter to be triggered by
+ either RAM usage or document count or both (whichever comes
+ first), by adding symbolic constant DISABLE_AUTO_FLUSH to disable
+ one of the flush triggers. (Ning Li via Mike McCandless)
+
+12. LUCENE-1043: Speed up merging of stored fields by bulk-copying the
+ raw bytes for each contiguous range of non-deleted documents.
+ (Robert Engels via Mike McCandless)
+
+13. LUCENE-693: Speed up nested conjunctions (~2x) that match many
+ documents, and a slight performance increase for top level
+ conjunctions. (yonik)
+
+14. LUCENE-1098: Make inner class StandardAnalyzer.SavedStreams static
+ and final. (Nathan Beyer via Michael Busch)
+
+Documentation
+
+ 1. LUCENE-1051: Generate separate javadocs for core, demo and contrib
+ classes, as well as an unified view. Also add an appropriate menu
+ structure to the website. (Michael Busch)
+
+ 2. LUCENE-746: Fix error message in AnalyzingQueryParser.getPrefixQuery.
+ (Ronnie Kolehmainen via Michael Busch)
+
+Build
+
+ 1. LUCENE-908: Improvements and simplifications for how the MANIFEST
+ file and the META-INF dir are created. (Michael Busch)
+
+ 2. LUCENE-935: Various improvements for the maven artifacts. Now the
+ artifacts also include the sources as .jar files. (Michael Busch)
+
+ 3. Added apply-patch target to top-level build. Defaults to looking for
+ a patch in ${basedir}/../patches with name specified by -Dpatch.name.
+ Can also specify any location by -Dpatch.file property on the command
+ line. This should be helpful for easy application of patches, but it
+ is also a step towards integrating automatic patch application with
+ JIRA and Hudson, and is thus subject to change. (Grant Ingersoll)
+
+ 4. LUCENE-935: Defined property "m2.repository.url" to allow setting
+ the url to a maven remote repository to deploy to. (Michael Busch)
+
+ 5. LUCENE-1051: Include javadocs in the maven artifacts. (Michael Busch)
+
+ 6. LUCENE-1055: Remove gdata-server from build files and its sources
+ from trunk. (Michael Busch)
+
+ 7. LUCENE-935: Allow to deploy maven artifacts to a remote m2 repository
+ via scp and ssh authentication. (Michael Busch)
+
+ 8. LUCENE-1123: Allow overriding the specification version for
+ MANIFEST.MF (Michael Busch)
+
+Test Cases
+
+ 1. LUCENE-766: Test adding two fields with the same name but different
+ term vector setting. (Nicolas Lalevée via Doron Cohen)
+
+======================= Release 2.2.0 =======================
+
+Changes in runtime behavior
+
+API Changes
+
+ 1. LUCENE-793: created new exceptions and added them to throws clause
+ for many methods (all subclasses of IOException for backwards
+ compatibility): index.StaleReaderException,
+ index.CorruptIndexException, store.LockObtainFailedException.
+ This was done to better call out the possible root causes of an
+ IOException from these methods. (Mike McCandless)
+
+ 2. LUCENE-811: make SegmentInfos class, plus a few methods from related
+ classes, package-private again (they were unnecessarily made public
+ as part of LUCENE-701). (Mike McCandless)
+
+ 3. LUCENE-710: added optional autoCommit boolean to IndexWriter
+ constructors. When this is false, index changes are not committed
+ until the writer is closed. This gives explicit control over when
+ a reader will see the changes. Also added optional custom
+ deletion policy to explicitly control when prior commits are
+ removed from the index. This is intended to allow applications to
+ share an index over NFS by customizing when prior commits are
+ deleted. (Mike McCandless)
+
+ 4. LUCENE-818: changed most public methods of IndexWriter,
+ IndexReader (and its subclasses), FieldsReader and RAMDirectory to
+ throw AlreadyClosedException if they are accessed after being
+ closed. (Mike McCandless)
+
+ 5. LUCENE-834: Changed some access levels for certain Span classes to allow them
+ to be overridden. They have been marked expert only and not for public
+ consumption. (Grant Ingersoll)
+
+ 6. LUCENE-796: Removed calls to super.* from various get*Query methods in
+ MultiFieldQueryParser, in order to allow sub-classes to override them.
+ (Steven Parkes via Otis Gospodnetic)
+
+ 7. LUCENE-857: Removed caching from QueryFilter and deprecated QueryFilter
+ in favour of QueryWrapperFilter or QueryWrapperFilter + CachingWrapperFilter
+ combination when caching is desired.
+ (Chris Hostetter, Otis Gospodnetic)
+
+ 8. LUCENE-869: Changed FSIndexInput and FSIndexOutput to inner classes of FSDirectory
+ to enable extensibility of these classes. (Michael Busch)
+
+ 9. LUCENE-580: Added the public method reset() to TokenStream. This method does
+ nothing by default, but may be overwritten by subclasses to support consuming
+ the TokenStream more than once. (Michael Busch)
+
+10. LUCENE-580: Added a new constructor to Field that takes a TokenStream as
+ argument, available as tokenStreamValue(). This is useful to avoid the need of
+ "dummy analyzers" for pre-analyzed fields. (Karl Wettin, Michael Busch)
+
+11. LUCENE-730: Added the new methods to BooleanQuery setAllowDocsOutOfOrder() and
+ getAllowDocsOutOfOrder(). Deprecated the methods setUseScorer14() and
+ getUseScorer14(). The optimization patch LUCENE-730 (see Optimizations->3.)
+ improves performance for certain queries but results in scoring out of docid
+ order. This patch reverse this change, so now by default hit docs are scored
+ in docid order if not setAllowDocsOutOfOrder(true) is explicitly called.
+ This patch also enables the tests in QueryUtils again that check for docid
+ order. (Paul Elschot, Doron Cohen, Michael Busch)
+
+12. LUCENE-888: Added Directory.openInput(File path, int bufferSize)
+ to optionally specify the size of the read buffer. Also added
+ BufferedIndexInput.setBufferSize(int) to change the buffer size.
+ (Mike McCandless)
+
+13. LUCENE-923: Make SegmentTermPositionVector package-private. It does not need
+ to be public because it implements the public interface TermPositionVector.
+ (Michael Busch)
+
+Bug fixes
+
+ 1. LUCENE-804: Fixed build.xml to pack a fully compilable src dist. (Doron Cohen)
+
+ 2. LUCENE-813: Leading wildcard fixed to work with trailing wildcard.
+ Query parser modified to create a prefix query only for the case
+ that there is a single trailing wildcard (and no additional wildcard
+ or '?' in the query text). (Doron Cohen)
+
+ 3. LUCENE-812: Add no-argument constructors to NativeFSLockFactory
+ and SimpleFSLockFactory. This enables all 4 builtin LockFactory
+ implementations to be specified via the System property
+ org.apache.lucene.store.FSDirectoryLockFactoryClass. (Mike McCandless)
+
+ 4. LUCENE-821: The new single-norm-file introduced by LUCENE-756
+ failed to reduce the number of open descriptors since it was still
+ opened once per field with norms. (yonik)
+
+ 5. LUCENE-823: Make sure internal file handles are closed when
+ hitting an exception (eg disk full) while flushing deletes in
+ IndexWriter's mergeSegments, and also during
+ IndexWriter.addIndexes. (Mike McCandless)
+
+ 6. LUCENE-825: If directory is removed after
+ FSDirectory.getDirectory() but before IndexReader.open you now get
+ a FileNotFoundException like Lucene pre-2.1 (before this fix you
+ got an NPE). (Mike McCandless)
+
+ 7. LUCENE-800: Removed backslash from the TERM_CHAR list in the queryparser,
+ because the backslash is the escape character. Also changed the ESCAPED_CHAR
+ list to contain all possible characters, because every character that
+ follows a backslash should be considered as escaped. (Michael Busch)
+
+ 8. LUCENE-372: QueryParser.parse() now ensures that the entire input string
+ is consumed. Now a ParseException is thrown if a query contains too many
+ closing parentheses. (Andreas Neumann via Michael Busch)
+
+ 9. LUCENE-814: javacc build targets now fix line-end-style of generated files.
+ Now also deleting all javacc generated files before calling javacc.
+ (Steven Parkes, Doron Cohen)
+
+10. LUCENE-829: close readers in contrib/benchmark. (Karl Wettin, Doron Cohen)
+
+11. LUCENE-828: Minor fix for Term's equal().
+ (Paul Cowan via Otis Gospodnetic)
+
+12. LUCENE-846: Fixed: if IndexWriter is opened with autoCommit=false,
+ and you call addIndexes, and hit an exception (eg disk full) then
+ when IndexWriter rolls back its internal state this could corrupt
+ the instance of IndexWriter (but, not the index itself) by
+ referencing already deleted segments. This bug was only present
+ in 2.2 (trunk), ie was never released. (Mike McCandless)
+
+13. LUCENE-736: Sloppy phrase query with repeating terms matches wrong docs.
+ For example query "B C B"~2 matches the doc "A B C D E". (Doron Cohen)
+
+14. LUCENE-789: Fixed: custom similarity is ignored when using MultiSearcher (problem reported
+ by Alexey Lef). Now the similarity applied by MultiSearcer.setSimilarity(sim) is being used.
+ Note that as before this fix, creating a multiSearcher from Searchers for whom custom similarity
+ was set has no effect - it is masked by the similarity of the MultiSearcher. This is as
+ designed, because MultiSearcher operates on Searchables (not Searchers). (Doron Cohen)
+
+15. LUCENE-880: Fixed DocumentWriter to close the TokenStreams after it
+ has written the postings. Then the resources associated with the
+ TokenStreams can safely be released. (Michael Busch)
+
+16. LUCENE-883: consecutive calls to Spellchecker.indexDictionary()
+ won't insert terms twice anymore. (Daniel Naber)
+
+17. LUCENE-881: QueryParser.escape() now also escapes the characters
+ '|' and '&' which are part of the queryparser syntax. (Michael Busch)
+
+18. LUCENE-886: Spellchecker clean up: exceptions aren't printed to STDERR
+ anymore and ignored, but re-thrown. Some javadoc improvements.
+ (Daniel Naber)
+
+19. LUCENE-698: FilteredQuery now takes the query boost into account for
+ scoring. (Michael Busch)
+
+20. LUCENE-763: Spellchecker: LuceneDictionary used to skip first word in
+ enumeration. (Christian Mallwitz via Daniel Naber)
+
+21. LUCENE-903: FilteredQuery explanation inaccuracy with boost.
+ Explanation tests now "deep" check the explanation details.
+ (Chris Hostetter, Doron Cohen)
+
+22. LUCENE-912: DisjunctionMaxScorer first skipTo(target) call ignores the
+ skip target param and ends up at the first match.
+ (Sudaakeran B. via Chris Hostetter & Doron Cohen)
+
+23. LUCENE-913: Two consecutive score() calls return different
+ scores for Boolean Queries. (Michael Busch, Doron Cohen)
+
+24. LUCENE-1013: Fix IndexWriter.setMaxMergeDocs to work "out of the
+ box", again, by moving set/getMaxMergeDocs up from
+ LogDocMergePolicy into LogMergePolicy. This fixes the API
+ breakage (non backwards compatible change) caused by LUCENE-994.
+ (Yonik Seeley via Mike McCandless)
+
+New features
+
+ 1. LUCENE-759: Added two n-gram-producing TokenFilters.
+ (Otis Gospodnetic)
+
+ 2. LUCENE-822: Added FieldSelector capabilities to Searchable for use with
+ RemoteSearcher, and other Searchable implementations. (Mark Miller, Grant Ingersoll)
+
+ 3. LUCENE-755: Added the ability to store arbitrary binary metadata in the posting list.
+ These metadata are called Payloads. For every position of a Token one Payload in the form
+ of a variable length byte array can be stored in the prox file.
+ Remark: The APIs introduced with this feature are in experimental state and thus
+ contain appropriate warnings in the javadocs.
+ (Michael Busch)
+
+ 4. LUCENE-834: Added BoostingTermQuery which can boost scores based on the
+ values of a payload (see #3 above.) (Grant Ingersoll)
+
+ 5. LUCENE-834: Similarity has a new method for scoring payloads called
+ scorePayloads that can be overridden to take advantage of payload
+ storage (see #3 above)
+
+ 6. LUCENE-834: Added isPayloadAvailable() onto TermPositions interface and
+ implemented it in the appropriate places (Grant Ingersoll)
+
+ 7. LUCENE-853: Added RemoteCachingWrapperFilter to enable caching of Filters
+ on the remote side of the RMI connection.
+ (Matt Ericson via Otis Gospodnetic)
+
+ 8. LUCENE-446: Added Solr's search.function for scores based on field
+ values, plus CustomScoreQuery for simple score (post) customization.
+ (Yonik Seeley, Doron Cohen)
+
+ 9. LUCENE-1058: Added new TeeTokenFilter (like the UNIX 'tee' command) and SinkTokenizer which can be used to share tokens between two or more
+ Fields such that the other Fields do not have to go through the whole Analysis process over again. For instance, if you have two
+ Fields that share all the same analysis steps except one lowercases tokens and the other does not, you can coordinate the operations
+ between the two using the TeeTokenFilter and the SinkTokenizer. See TeeSinkTokenTest.java for examples.
+ (Grant Ingersoll, Michael Busch, Yonik Seeley)
+
+Optimizations
+
+ 1. LUCENE-761: The proxStream is now cloned lazily in SegmentTermPositions
+ when nextPosition() is called for the first time. This allows using instances
+ of SegmentTermPositions instead of SegmentTermDocs without additional costs.
+ (Michael Busch)
+
+ 2. LUCENE-431: RAMInputStream and RAMOutputStream extend IndexInput and
+ IndexOutput directly now. This avoids further buffering and thus avoids
+ unnecessary array copies. (Michael Busch)
+
+ 3. LUCENE-730: Updated BooleanScorer2 to make use of BooleanScorer in some
+ cases and possibly improve scoring performance. Documents can now be
+ delivered out-of-order as they are scored (e.g. to HitCollector).
+ N.B. A bit of code had to be disabled in QueryUtils in order for
+ TestBoolean2 test to keep passing.
+ (Paul Elschot via Otis Gospodnetic)
+
+ 4. LUCENE-882: Spellchecker doesn't store the ngrams anymore but only indexes
+ them to keep the spell index small. (Daniel Naber)
+
+ 5. LUCENE-430: Delay allocation of the buffer after a clone of BufferedIndexInput.
+ Together with LUCENE-888 this will allow to adjust the buffer size
+ dynamically. (Paul Elschot, Michael Busch)
+
+ 6. LUCENE-888: Increase buffer sizes inside CompoundFileWriter and
+ BufferedIndexOutput. Also increase buffer size in
+ BufferedIndexInput, but only when used during merging. Together,
+ these increases yield 10-18% overall performance gain vs the
+ previous 1K defaults. (Mike McCandless)
+
+ 7. LUCENE-866: Adds multi-level skip lists to the posting lists. This speeds
+ up most queries that use skipTo(), especially on big indexes with large posting
+ lists. For average AND queries the speedup is about 20%, for queries that
+ contain very frequent and very unique terms the speedup can be over 80%.
+ (Michael Busch)
+
+Documentation
+
+ 1. LUCENE 791 && INFRA-1173: Infrastructure moved the Wiki to
+ http://wiki.apache.org/lucene-java/ Updated the links in the docs and
+ wherever else I found references. (Grant Ingersoll, Joe Schaefer)
+
+ 2. LUCENE-807: Fixed the javadoc for ScoreDocComparator.compare() to be
+ consistent with java.util.Comparator.compare(): Any integer is allowed to
+ be returned instead of only -1/0/1.
+ (Paul Cowan via Michael Busch)
+
+ 3. LUCENE-875: Solved javadoc warnings & errors under jdk1.4.
+ Solved javadoc errors under jdk5 (jars in path for gdata).
+ Made "javadocs" target depend on "build-contrib" for first downloading
+ contrib jars configured for dynamic downloaded. (Note: when running
+ behind firewall, a firewall prompt might pop up) (Doron Cohen)
+
+ 4. LUCENE-740: Added SNOWBALL-LICENSE.txt to the snowball package and a
+ remark about the license to NOTICE.TXT. (Steven Parkes via Michael Busch)
+
+ 5. LUCENE-925: Added analysis package javadocs. (Grant Ingersoll and Doron Cohen)
+
+ 6. LUCENE-926: Added document package javadocs. (Grant Ingersoll)
+
+Build
+
+ 1. LUCENE-802: Added LICENSE.TXT and NOTICE.TXT to Lucene jars.
+ (Steven Parkes via Michael Busch)
+
+ 2. LUCENE-885: "ant test" now includes all contrib tests. The new
+ "ant test-core" target can be used to run only the Core (non
+ contrib) tests.
+ (Chris Hostetter)
+
+ 3. LUCENE-900: "ant test" now enables Java assertions (in Lucene packages).
+ (Doron Cohen)
+
+ 4. LUCENE-894: Add custom build file for binary distributions that includes
+ targets to build the demos. (Chris Hostetter, Michael Busch)
+
+ 5. LUCENE-904: The "package" targets in build.xml now also generate .md5
+ checksum files. (Chris Hostetter, Michael Busch)
+
+ 6. LUCENE-907: Include LICENSE.TXT and NOTICE.TXT in the META-INF dirs of
+ demo war, demo jar, and the contrib jars. (Michael Busch)
+
+ 7. LUCENE-909: Demo targets for running the demo. (Doron Cohen)
+
+ 8. LUCENE-908: Improves content of MANIFEST file and makes it customizable
+ for the contribs. Adds SNOWBALL-LICENSE.txt to META-INF of the snowball
+ jar and makes sure that the lucli jar contains LICENSE.txt and NOTICE.txt.
+ (Chris Hostetter, Michael Busch)
+
+ 9. LUCENE-930: Various contrib building improvements to ensure contrib
+ dependencies are met, and test compilation errors fail the build.
+ (Steven Parkes, Chris Hostetter)
+
+10. LUCENE-622: Add ant target and pom.xml files for building maven artifacts
+ of the Lucene core and the contrib modules.
+ (Sami Siren, Karl Wettin, Michael Busch)
+
+======================= Release 2.1.0 =======================
+
+Changes in runtime behavior
+
+ 1. 's' and 't' have been removed from the list of default stopwords
+ in StopAnalyzer (also used in by StandardAnalyzer). Having e.g. 's'
+ as a stopword meant that 's-class' led to the same results as 'class'.
+ Note that this problem still exists for 'a', e.g. in 'a-class' as
+ 'a' continues to be a stopword.
+ (Daniel Naber)
+
+ 2. LUCENE-478: Updated the list of Unicode code point ranges for CJK
+ (now split into CJ and K) in StandardAnalyzer. (John Wang and
+ Steven Rowe via Otis Gospodnetic)
+
+ 3. Modified some CJK Unicode code point ranges in StandardTokenizer.jj,
+ and added a few more of them to increase CJK character coverage.
+ Also documented some of the ranges.
+ (Otis Gospodnetic)
+
+ 4. LUCENE-489: Add support for leading wildcard characters (*, ?) to
+ QueryParser. Default is to disallow them, as before.
+ (Steven Parkes via Otis Gospodnetic)
+
+ 5. LUCENE-703: QueryParser changed to default to use of ConstantScoreRangeQuery
+ for range queries. Added useOldRangeQuery property to QueryParser to allow
+ selection of old RangeQuery class if required.
+ (Mark Harwood)
+
+ 6. LUCENE-543: WildcardQuery now performs a TermQuery if the provided term
+ does not contain a wildcard character (? or *), when previously a
+ StringIndexOutOfBoundsException was thrown.
+ (Michael Busch via Erik Hatcher)
+
+ 7. LUCENE-726: Removed the use of deprecated doc.fields() method and
+ Enumeration.
+ (Michael Busch via Otis Gospodnetic)
+
+ 8. LUCENE-436: Removed finalize() in TermInfosReader and SegmentReader,
+ and added a call to enumerators.remove() in TermInfosReader.close().
+ The finalize() overrides were added to help with a pre-1.4.2 JVM bug
+ that has since been fixed, plus we no longer support pre-1.4.2 JVMs.
+ (Otis Gospodnetic)
+
+ 9. LUCENE-771: The default location of the write lock is now the
+ index directory, and is named simply "write.lock" (without a big
+ digest prefix). The system properties "org.apache.lucene.lockDir"
+ nor "java.io.tmpdir" are no longer used as the global directory
+ for storing lock files, and the LOCK_DIR field of FSDirectory is
+ now deprecated. (Mike McCandless)
+
+New features
+
+ 1. LUCENE-503: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers
+ (Samphan Raruenrom via Chris Hostetter)
+
+ 2. LUCENE-545: New FieldSelector API and associated changes to
+ IndexReader and implementations. New Fieldable interface for use
+ with the lazy field loading mechanism. (Grant Ingersoll and Chuck
+ Williams via Grant Ingersoll)
+
+ 3. LUCENE-676: Move Solr's PrefixFilter to Lucene core. (Yura
+ Smolsky, Yonik Seeley)
+
+ 4. LUCENE-678: Added NativeFSLockFactory, which implements locking
+ using OS native locking (via java.nio.*). (Michael McCandless via
+ Yonik Seeley)
+
+ 5. LUCENE-544: Added the ability to specify different boosts for
+ different fields when using MultiFieldQueryParser (Matt Ericson
+ via Otis Gospodnetic)
+
+ 6. LUCENE-528: New IndexWriter.addIndexesNoOptimize() that doesn't
+ optimize the index when adding new segments, only performing
+ merges as needed. (Ning Li via Yonik Seeley)
+
+ 7. LUCENE-573: QueryParser now allows backslash escaping in
+ quoted terms and phrases. (Michael Busch via Yonik Seeley)
+
+ 8. LUCENE-716: QueryParser now allows specification of Unicode
+ characters in terms via a unicode escape of the form \uXXXX
+ (Michael Busch via Yonik Seeley)
+
+ 9. LUCENE-709: Added RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes()
+ and IndexWriter.flushRamSegments(), allowing applications to
+ control the amount of memory used to buffer documents.
+ (Chuck Williams via Yonik Seeley)
+
+10. LUCENE-723: QueryParser now parses *:* as MatchAllDocsQuery
+ (Yonik Seeley)
+
+11. LUCENE-741: Command-line utility for modifying or removing norms
+ on fields in an existing index. This is mostly based on LUCENE-496
+ and lives in contrib/miscellaneous.
+ (Chris Hostetter, Otis Gospodnetic)
+
+12. LUCENE-759: Added NGramTokenizer and EdgeNGramTokenizer classes and
+ their passing unit tests.
+ (Otis Gospodnetic)
+
+13. LUCENE-565: Added methods to IndexWriter to more efficiently
+ handle updating documents (the "delete then add" use case). This
+ is intended to be an eventual replacement for the existing
+ IndexModifier. Added IndexWriter.flush() (renamed from
+ flushRamSegments()) to flush all pending updates (held in RAM), to
+ the Directory. (Ning Li via Mike McCandless)
+
+14. LUCENE-762: Added in SIZE and SIZE_AND_BREAK FieldSelectorResult options
+ which allow one to retrieve the size of a field without retrieving the
+ actual field. (Chuck Williams via Grant Ingersoll)
+
+15. LUCENE-799: Properly handle lazy, compressed fields.
+ (Mike Klaas via Grant Ingersoll)
+
+API Changes
+
+ 1. LUCENE-438: Remove "final" from Token, implement Cloneable, allow
+ changing of termText via setTermText(). (Yonik Seeley)
+
+ 2. org.apache.lucene.analysis.nl.WordlistLoader has been deprecated
+ and is supposed to be replaced with the WordlistLoader class in
+ package org.apache.lucene.analysis (Daniel Naber)
+
+ 3. LUCENE-609: Revert return type of Document.getField(s) to Field
+ for backward compatibility, added new Document.getFieldable(s)
+ for access to new lazy loaded fields. (Yonik Seeley)
+
+ 4. LUCENE-608: Document.fields() has been deprecated and a new method
+ Document.getFields() has been added that returns a List instead of
+ an Enumeration (Daniel Naber)
+
+ 5. LUCENE-605: New Explanation.isMatch() method and new ComplexExplanation
+ subclass allows explain methods to produce Explanations which model
+ "matching" independent of having a positive value.
+ (Chris Hostetter)
+
+ 6. LUCENE-621: New static methods IndexWriter.setDefaultWriteLockTimeout
+ and IndexWriter.setDefaultCommitLockTimeout for overriding default
+ timeout values for all future instances of IndexWriter (as well
+ as for any other classes that may reference the static values,
+ ie: IndexReader).
+ (Michael McCandless via Chris Hostetter)
+
+ 7. LUCENE-638: FSDirectory.list() now only returns the directory's
+ Lucene-related files. Thanks to this change one can now construct
+ a RAMDirectory from a file system directory that contains files
+ not related to Lucene.
+ (Simon Willnauer via Daniel Naber)
+
+ 8. LUCENE-635: Decoupling locking implementation from Directory
+ implementation. Added set/getLockFactory to Directory and moved
+ all locking code into subclasses of abstract class LockFactory.
+ FSDirectory and RAMDirectory still default to their prior locking
+ implementations, but now you can mix & match, for example using
+ SingleInstanceLockFactory (ie, in memory locking) locking with an
+ FSDirectory. Note that now you must call setDisableLocks before
+ the instantiation a FSDirectory if you wish to disable locking
+ for that Directory.
+ (Michael McCandless, Jeff Patterson via Yonik Seeley)
+
+ 9. LUCENE-657: Made FuzzyQuery non-final and inner ScoreTerm protected.
+ (Steven Parkes via Otis Gospodnetic)
+
+10. LUCENE-701: Lockless commits: a commit lock is no longer required
+ when a writer commits and a reader opens the index. This includes
+ a change to the index file format (see docs/fileformats.html for
+ details). It also removes all APIs associated with the commit
+ lock & its timeout. Readers are now truly read-only and do not
+ block one another on startup. This is the first step to getting
+ Lucene to work correctly over NFS (second step is
+ LUCENE-710). (Mike McCandless)
+
+11. LUCENE-722: DEFAULT_MIN_DOC_FREQ was misspelled DEFALT_MIN_DOC_FREQ
+ in Similarity's MoreLikeThis class. The misspelling has been
+ replaced by the correct spelling.
+ (Andi Vajda via Daniel Naber)
+
+12. LUCENE-738: Reduce the size of the file that keeps track of which
+ documents are deleted when the number of deleted documents is
+ small. This changes the index file format and cannot be
+ read by previous versions of Lucene. (Doron Cohen via Yonik Seeley)
+
+13. LUCENE-756: Maintain all norms in a single .nrm file to reduce the
+ number of open files and file descriptors for the non-compound index
+ format. This changes the index file format, but maintains the
+ ability to read and update older indices. The first segment merge
+ on an older format index will create a single .nrm file for the new
+ segment. (Doron Cohen via Yonik Seeley)
+
+14. LUCENE-732: DateTools support has been added to QueryParser, with
+ setters for both the default Resolution, and per-field Resolution.
+ For backwards compatibility, DateField is still used if no Resolutions
+ are specified. (Michael Busch via Chris Hostetter)
+
+15. Added isOptimized() method to IndexReader.
+ (Otis Gospodnetic)
+
+16. LUCENE-773: Deprecate the FSDirectory.getDirectory(*) methods that
+ take a boolean "create" argument. Instead you should use
+ IndexWriter's "create" argument to create a new index.
+ (Mike McCandless)
+
+17. LUCENE-780: Add a static Directory.copy() method to copy files
+ from one Directory to another. (Jiri Kuhn via Mike McCandless)
+
+18. LUCENE-773: Added Directory.clearLock(String name) to forcefully
+ remove an old lock. The default implementation is to ask the
+ lockFactory (if non null) to clear the lock. (Mike McCandless)
+
+19. LUCENE-795: Directory.renameFile() has been deprecated as it is
+ not used anymore inside Lucene. (Daniel Naber)
+
+Bug fixes
+
+ 1. Fixed the web application demo (built with "ant war-demo") which
+ didn't work because it used a QueryParser method that had
+ been removed (Daniel Naber)
+
+ 2. LUCENE-583: ISOLatin1AccentFilter fails to preserve positionIncrement
+ (Yonik Seeley)
+
+ 3. LUCENE-575: SpellChecker min score is incorrectly changed by suggestSimilar
+ (Karl Wettin via Yonik Seeley)
+
+ 4. LUCENE-587: Explanation.toHtml was producing malformed HTML
+ (Chris Hostetter)
+
+ 5. Fix to allow MatchAllDocsQuery to be used with RemoteSearcher (Yonik Seeley)
+
+ 6. LUCENE-601: RAMDirectory and RAMFile made Serializable
+ (Karl Wettin via Otis Gospodnetic)
+
+ 7. LUCENE-557: Fixes to BooleanQuery and FilteredQuery so that the score
+ Explanations match up with the real scores.
+ (Chris Hostetter)
+
+ 8. LUCENE-607: ParallelReader's TermEnum fails to advance properly to
+ new fields (Chuck Williams, Christian Kohlschuetter via Yonik Seeley)
+
+ 9. LUCENE-610,LUCENE-611: Simple syntax changes to allow compilation with ecj:
+ disambiguate inner class scorer's use of doc() in BooleanScorer2,
+ other test code changes. (DM Smith via Yonik Seeley)
+
+10. LUCENE-451: All core query types now use ComplexExplanations so that
+ boosts of zero don't confuse the BooleanWeight explain method.
+ (Chris Hostetter)
+
+11. LUCENE-593: Fixed LuceneDictionary's inner Iterator
+ (KÃ¥re Fiedler Christiansen via Otis Gospodnetic)
+
+12. LUCENE-641: fixed an off-by-one bug with IndexWriter.setMaxFieldLength()
+ (Daniel Naber)
+
+13. LUCENE-659: Make PerFieldAnalyzerWrapper delegate getPositionIncrementGap()
+ to the correct analyzer for the field. (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-650: Fixed NPE in Locale specific String Sort when Document
+ has no value.
+ (Oliver Hutchison via Chris Hostetter)
+
+15. LUCENE-683: Fixed data corruption when reading lazy loaded fields.
+ (Yonik Seeley)
+
+16. LUCENE-678: Fixed bug in NativeFSLockFactory which caused the same
+ lock to be shared between different directories.
+ (Michael McCandless via Yonik Seeley)
+
+17. LUCENE-690: Fixed thread unsafe use of IndexInput by lazy loaded fields.
+ (Yonik Seeley)
+
+18. LUCENE-696: Fix bug when scorer for DisjunctionMaxQuery has skipTo()
+ called on it before next(). (Yonik Seeley)
+
+19. LUCENE-569: Fixed SpanNearQuery bug, for 'inOrder' queries it would fail
+ to recognize ordered spans if they overlapped with unordered spans.
+ (Paul Elschot via Chris Hostetter)
+
+20. LUCENE-706: Updated fileformats.xml|html concerning the docdelta value
+ in the frequency file. (Johan Stuyts, Doron Cohen via Grant Ingersoll)
+
+21. LUCENE-715: Fixed private constructor in IndexWriter.java to
+ properly release the acquired write lock if there is an
+ IOException after acquiring the write lock but before finishing
+ instantiation. (Matthew Bogosian via Mike McCandless)
+
+22. LUCENE-651: Multiple different threads requesting the same
+ FieldCache entry (often for Sorting by a field) at the same
+ time caused multiple generations of that entry, which was
+ detrimental to performance and memory use.
+ (Oliver Hutchison via Otis Gospodnetic)
+
+23. LUCENE-717: Fixed build.xml not to fail when there is no lib dir.
+ (Doron Cohen via Otis Gospodnetic)
+
+24. LUCENE-728: Removed duplicate/old MoreLikeThis and SimilarityQueries
+ classes from contrib/similarity, as their new home is under
+ contrib/queries.
+ (Otis Gospodnetic)
+
+25. LUCENE-669: Do not double-close the RandomAccessFile in
+ FSIndexInput/Output during finalize(). Besides sending an
+ IOException up to the GC, this may also be the cause intermittent
+ "The handle is invalid" IOExceptions on Windows when trying to
+ close readers or writers. (Michael Busch via Mike McCandless)
+
+26. LUCENE-702: Fix IndexWriter.addIndexes(*) to not corrupt the index
+ on any exceptions (eg disk full). The semantics of these methods
+ is now transactional: either all indices are merged or none are.
+ Also fixed IndexWriter.mergeSegments (called outside of
+ addIndexes(*) by addDocument, optimize, flushRamSegments) and
+ IndexReader.commit() (called by close) to clean up and keep the
+ instance state consistent to what's actually in the index (Mike
+ McCandless).
+
+27. LUCENE-129: Change finalizers to do "try {...} finally
+ {super.finalize();}" to make sure we don't miss finalizers in
+ classes above us. (Esmond Pitt via Mike McCandless)
+
+28. LUCENE-754: Fix a problem introduced by LUCENE-651, causing
+ IndexReaders to hang around forever, in addition to not
+ fixing the original FieldCache performance problem.
+ (Chris Hostetter, Yonik Seeley)
+
+29. LUCENE-140: Fix IndexReader.deleteDocument(int docNum) to
+ correctly raise ArrayIndexOutOfBoundsException when docNum is too
+ large. Previously, if docNum was only slightly too large (within
+ the same multiple of 8, ie, up to 7 ints beyond maxDoc), no
+ exception would be raised and instead the index would become
+ silently corrupted. The corruption then only appears much later,
+ in mergeSegments, when the corrupted segment is merged with
+ segment(s) after it. (Mike McCandless)
+
+30. LUCENE-768: Fix case where an Exception during deleteDocument,
+ undeleteAll or setNorm in IndexReader could leave the reader in a
+ state where close() fails to release the write lock.
+ (Mike McCandless)
+
+31. Remove "tvp" from known index file extensions because it is
+ never used. (Nicolas Lalevée via Bernhard Messer)
+
+32. LUCENE-767: Change how SegmentReader.maxDoc() is computed to not
+ rely on file length check and instead use the SegmentInfo's
+ docCount that's already stored explicitly in the index. This is a
+ defensive bug fix (ie, there is no known problem seen "in real
+ life" due to this, just a possible future problem). (Chuck
+ Williams via Mike McCandless)
+
+Optimizations
+
+ 1. LUCENE-586: TermDocs.skipTo() is now more efficient for
+ multi-segment indexes. This will improve the performance of many
+ types of queries against a non-optimized index. (Andrew Hudson
+ via Yonik Seeley)
+
+ 2. LUCENE-623: RAMDirectory.close now nulls out its reference to all
+ internal "files", allowing them to be GCed even if references to the
+ RAMDirectory itself still exist. (Nadav Har'El via Chris Hostetter)
+
+ 3. LUCENE-629: Compressed fields are no longer uncompressed and
+ recompressed during segment merges (e.g. during indexing or
+ optimizing), thus improving performance . (Michael Busch via Otis
+ Gospodnetic)
+
+ 4. LUCENE-388: Improve indexing performance when maxBufferedDocs is
+ large by keeping a count of buffered documents rather than
+ counting after each document addition. (Doron Cohen, Paul Smith,
+ Yonik Seeley)
+
+ 5. Modified TermScorer.explain to use TermDocs.skipTo() instead of
+ looping through docs. (Grant Ingersoll)
+
+ 6. LUCENE-672: New indexing segment merge policy flushes all
+ buffered docs to their own segment and delays a merge until
+ mergeFactor segments of a certain level have been accumulated.
+ This increases indexing performance in the presence of deleted
+ docs or partially full segments as well as enabling future
+ optimizations.
+
+ NOTE: this also fixes an "under-merging" bug whereby it is
+ possible to get far too many segments in your index (which will
+ drastically slow down search, risks exhausting file descriptor
+ limit, etc.). This can happen when the number of buffered docs
+ at close, plus the number of docs in the last non-ram segment is
+ greater than mergeFactor. (Ning Li, Yonik Seeley)
+
+ 7. Lazy loaded fields unnecessarily retained an extra copy of loaded
+ String data. (Yonik Seeley)
+
+ 8. LUCENE-443: ConjunctionScorer performance increase. Speed up
+ any BooleanQuery with more than one mandatory clause.
+ (Abdul Chaudhry, Paul Elschot via Yonik Seeley)
+
+ 9. LUCENE-365: DisjunctionSumScorer performance increase of
+ ~30%. Speeds up queries with optional clauses. (Paul Elschot via
+ Yonik Seeley)
+
+ 10. LUCENE-695: Optimized BufferedIndexInput.readBytes() for medium
+ size buffers, which will speed up merging and retrieving binary
+ and compressed fields. (Nadav Har'El via Yonik Seeley)
+
+ 11. LUCENE-687: Lazy skipping on proximity file speeds up most
+ queries involving term positions, including phrase queries.
+ (Michael Busch via Yonik Seeley)
+
+ 12. LUCENE-714: Replaced 2 cases of manual for-loop array copying
+ with calls to System.arraycopy instead, in DocumentWriter.java.
+ (Nicolas Lalevee via Mike McCandless)
+
+ 13. LUCENE-729: Non-recursive skipTo and next implementation of
+ TermDocs for a MultiReader. The old implementation could
+ recurse up to the number of segments in the index. (Yonik Seeley)
+
+ 14. LUCENE-739: Improve segment merging performance by reusing
+ the norm array across different fields and doing bulk writes
+ of norms of segments with no deleted docs.
+ (Michael Busch via Yonik Seeley)
+
+ 15. LUCENE-745: Add BooleanQuery.clauses(), allowing direct access
+ to the List of clauses and replaced the internal synchronized Vector
+ with an unsynchronized List. (Yonik Seeley)
+
+ 16. LUCENE-750: Remove finalizers from FSIndexOutput and move the
+ FSIndexInput finalizer to the actual file so all clones don't
+ register a new finalizer. (Yonik Seeley)
+
+Test Cases
+
+ 1. Added TestTermScorer.java (Grant Ingersoll)
+
+ 2. Added TestWindowsMMap.java (Benson Margulies via Mike McCandless)
+
+ 3. LUCENE-744 Append the user.name property onto the temporary directory
+ that is created so it doesn't interfere with other users. (Grant Ingersoll)
+
+Documentation
+
+ 1. Added style sheet to xdocs named lucene.css and included in the
+ Anakia VSL descriptor. (Grant Ingersoll)
+
+ 2. Added scoring.xml document into xdocs. Updated Similarity.java
+ scoring formula.(Grant Ingersoll and Steve Rowe. Updates from:
+ Michael McCandless, Doron Cohen, Chris Hostetter, Doug Cutting).
+ Issue 664.
+
+ 3. Added javadocs for FieldSelectorResult.java. (Grant Ingersoll)
+
+ 4. Moved xdocs directory to src/site/src/documentation/content/xdocs per
+ Issue 707. Site now builds using Forrest, just like the other Lucene
+ siblings. See http://wiki.apache.org/jakarta-lucene/HowToUpdateTheWebsite
+ for info on updating the website. (Grant Ingersoll with help from Steve Rowe,
+ Chris Hostetter, Doug Cutting, Otis Gospodnetic, Yonik Seeley)
+
+ 5. Added in Developer and System Requirements sections under Resources (Grant Ingersoll)
+
+ 6. LUCENE-713 Updated the Term Vector section of File Formats to include
+ documentation on how Offset and Position info are stored in the TVF file.
+ (Grant Ingersoll, Samir Abdou)
+
+ 7. Added in link to Clover Test Code Coverage Reports under the Develop
+ section in Resources (Grant Ingersoll)
+
+ 8. LUCENE-748: Added details for semantics of IndexWriter.close on
+ hitting an Exception. (Jed Wesley-Smith via Mike McCandless)
+
+ 9. Added some text about what is contained in releases.
+ (Eric Haszlakiewicz via Grant Ingersoll)
+
+ 10. LUCENE-758: Fix javadoc to clarify that RAMDirectory(Directory)
+ makes a full copy of the starting Directory. (Mike McCandless)
+
+ 11. LUCENE-764: Fix javadocs to detail temporary space requirements
+ for IndexWriter's optimize(), addIndexes(*) and addDocument(...)
+ methods. (Mike McCandless)
+
+Build
+
+ 1. Added in clover test code coverage per http://issues.apache.org/jira/browse/LUCENE-721
+ To enable clover code coverage, you must have clover.jar in the ANT
+ classpath and specify -Drun.clover=true on the command line.
+ (Michael Busch and Grant Ingersoll)
+
+ 2. Added a sysproperty in common-build.xml per Lucene 752 to map java.io.tmpdir to
+ ${build.dir}/test just like the tempDir sysproperty.
+
+ 3. LUCENE-757 Added new target named init-dist that does setup for
+ distribution of both binary and source distributions. Called by package
+ and package-*-src
+
+======================= Release 2.0.0 =======================
+
+API Changes
+
+ 1. All deprecated methods and fields have been removed, except
+ DateField, which will still be supported for some time
+ so Lucene can read its date fields from old indexes
+ (Yonik Seeley & Grant Ingersoll)
+
+ 2. DisjunctionSumScorer is no longer public.
+ (Paul Elschot via Otis Gospodnetic)
+
+ 3. Creating a Field with both an empty name and an empty value
+ now throws an IllegalArgumentException
+ (Daniel Naber)
+
+ 4. LUCENE-301: Added new IndexWriter({String,File,Directory},
+ Analyzer) constructors that do not take a boolean "create"
+ argument. These new constructors will create a new index if
+ necessary, else append to the existing one. (Dan Armbrust via
+ Mike McCandless)
+
+New features
+
+ 1. LUCENE-496: Command line tool for modifying the field norms of an
+ existing index; added to contrib/miscellaneous. (Chris Hostetter)
+
+ 2. LUCENE-577: SweetSpotSimilarity added to contrib/miscellaneous.
+ (Chris Hostetter)
+
+Bug fixes
+
+ 1. LUCENE-330: Fix issue of FilteredQuery not working properly within
+ BooleanQuery. (Paul Elschot via Erik Hatcher)
+
+ 2. LUCENE-515: Make ConstantScoreRangeQuery and ConstantScoreQuery work
+ with RemoteSearchable. (Philippe Laflamme via Yonik Seeley)
+
+ 3. Added methods to get/set writeLockTimeout and commitLockTimeout in
+ IndexWriter. These could be set in Lucene 1.4 using a system property.
+ This feature had been removed without adding the corresponding
+ getter/setter methods. (Daniel Naber)
+
+ 4. LUCENE-413: Fixed ArrayIndexOutOfBoundsException exceptions
+ when using SpanQueries. (Paul Elschot via Yonik Seeley)
+
+ 5. Implemented FilterIndexReader.getVersion() and isCurrent()
+ (Yonik Seeley)
+
+ 6. LUCENE-540: Fixed a bug with IndexWriter.addIndexes(Directory[])
+ that sometimes caused the index order of documents to change.
+ (Yonik Seeley)
+
+ 7. LUCENE-526: Fixed a bug in FieldSortedHitQueue that caused
+ subsequent String sorts with different locales to sort identically.
+ (Paul Cowan via Yonik Seeley)
+
+ 8. LUCENE-541: Add missing extractTerms() to DisjunctionMaxQuery
+ (Stefan Will via Yonik Seeley)
+
+ 9. LUCENE-514: Added getTermArrays() and extractTerms() to
+ MultiPhraseQuery (Eric Jain & Yonik Seeley)
+
+10. LUCENE-512: Fixed ClassCastException in ParallelReader.getTermFreqVectors
+ (frederic via Yonik)
+
+11. LUCENE-352: Fixed bug in SpanNotQuery that manifested as
+ NullPointerException when "exclude" query was not a SpanTermQuery.
+ (Chris Hostetter)
+
+12. LUCENE-572: Fixed bug in SpanNotQuery hashCode, was ignoring exclude clause
+ (Chris Hostetter)
+
+13. LUCENE-561: Fixed some ParallelReader bugs. NullPointerException if the reader
+ didn't know about the field yet, reader didn't keep track if it had deletions,
+ and deleteDocument calls could circumvent synchronization on the subreaders.
+ (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-556: Added empty extractTerms() implementation to MatchAllDocsQuery and
+ ConstantScoreQuery in order to allow their use with a MultiSearcher.
+ (Yonik Seeley)
+
+15. LUCENE-546: Removed 2GB file size limitations for RAMDirectory.
+ (Peter Royal, Michael Chan, Yonik Seeley)
+
+16. LUCENE-485: Don't hold commit lock while removing obsolete index
+ files. (Luc Vanlerberghe via cutting)
+
+
+1.9.1
+
+Bug fixes
+
+ 1. LUCENE-511: Fix a bug in the BufferedIndexOutput optimization
+ introduced in 1.9-final. (Shay Banon & Steven Tamm via cutting)
+
+1.9 final
+
+Note that this release is mostly but not 100% source compatible with
+the previous release of Lucene (1.4.3). In other words, you should
+make sure your application compiles with this version of Lucene before
+you replace the old Lucene JAR with the new one. Many methods have
+been deprecated in anticipation of release 2.0, so deprecation
+warnings are to be expected when upgrading from 1.4.3 to 1.9.
+
+Bug fixes
+
+ 1. The fix that made IndexWriter.setMaxBufferedDocs(1) work had negative
+ effects on indexing performance and has thus been reverted. The
+ argument for setMaxBufferedDocs(int) must now at least be 2, otherwise
+ an exception is thrown. (Daniel Naber)
+
+Optimizations
+
+ 1. Optimized BufferedIndexOutput.writeBytes() to use
+ System.arraycopy() in more cases, rather than copying byte-by-byte.
+ (Lukas Zapletal via Cutting)
+
+1.9 RC1
+
+Requirements
+
+ 1. To compile and use Lucene you now need Java 1.4 or later.
+
+Changes in runtime behavior
+
+ 1. FuzzyQuery can no longer throw a TooManyClauses exception. If a
+ FuzzyQuery expands to more than BooleanQuery.maxClauseCount
+ terms only the BooleanQuery.maxClauseCount most similar terms
+ go into the rewritten query and thus the exception is avoided.
+ (Christoph)
+
+ 2. Changed system property from "org.apache.lucene.lockdir" to
+ "org.apache.lucene.lockDir", so that its casing follows the existing
+ pattern used in other Lucene system properties. (Bernhard)
+
+ 3. The terms of RangeQueries and FuzzyQueries are now converted to
+ lowercase by default (as it has been the case for PrefixQueries
+ and WildcardQueries before). Use setLowercaseExpandedTerms(false)
+ to disable that behavior but note that this also affects
+ PrefixQueries and WildcardQueries. (Daniel Naber)
+
+ 4. Document frequency that is computed when MultiSearcher is used is now
+ computed correctly and "globally" across subsearchers and indices, while
+ before it used to be computed locally to each index, which caused
+ ranking across multiple indices not to be equivalent.
+ (Chuck Williams, Wolf Siberski via Otis, bug #31841)
+
+ 5. When opening an IndexWriter with create=true, Lucene now only deletes
+ its own files from the index directory (looking at the file name suffixes
+ to decide if a file belongs to Lucene). The old behavior was to delete
+ all files. (Daniel Naber and Bernhard Messer, bug #34695)
+
+ 6. The version of an IndexReader, as returned by getCurrentVersion()
+ and getVersion() doesn't start at 0 anymore for new indexes. Instead, it
+ is now initialized by the system time in milliseconds.
+ (Bernhard Messer via Daniel Naber)
+
+ 7. Several default values cannot be set via system properties anymore, as
+ this has been considered inappropriate for a library like Lucene. For
+ most properties there are set/get methods available in IndexWriter which
+ you should use instead. This affects the following properties:
+ See IndexWriter for getter/setter methods:
+ org.apache.lucene.writeLockTimeout, org.apache.lucene.commitLockTimeout,
+ org.apache.lucene.minMergeDocs, org.apache.lucene.maxMergeDocs,
+ org.apache.lucene.maxFieldLength, org.apache.lucene.termIndexInterval,
+ org.apache.lucene.mergeFactor,
+ See BooleanQuery for getter/setter methods:
+ org.apache.lucene.maxClauseCount
+ See FSDirectory for getter/setter methods:
+ disableLuceneLocks
+ (Daniel Naber)
+
+ 8. Fixed FieldCacheImpl to use user-provided IntParser and FloatParser,
+ instead of using Integer and Float classes for parsing.
+ (Yonik Seeley via Otis Gospodnetic)
+
+ 9. Expert level search routines returning TopDocs and TopFieldDocs
+ no longer normalize scores. This also fixes bugs related to
+ MultiSearchers and score sorting/normalization.
+ (Luc Vanlerberghe via Yonik Seeley, LUCENE-469)
+
+New features
+
+ 1. Added support for stored compressed fields (patch #31149)
+ (Bernhard Messer via Christoph)
+
+ 2. Added support for binary stored fields (patch #29370)
+ (Drew Farris and Bernhard Messer via Christoph)
+
+ 3. Added support for position and offset information in term vectors
+ (patch #18927). (Grant Ingersoll & Christoph)
+
+ 4. A new class DateTools has been added. It allows you to format dates
+ in a readable format adequate for indexing. Unlike the existing
+ DateField class DateTools can cope with dates before 1970 and it
+ forces you to specify the desired date resolution (e.g. month, day,
+ second, ...) which can make RangeQuerys on those fields more efficient.
+ (Daniel Naber)
+
+ 5. QueryParser now correctly works with Analyzers that can return more
+ than one token per position. For example, a query "+fast +car"
+ would be parsed as "+fast +(car automobile)" if the Analyzer
+ returns "car" and "automobile" at the same position whenever it
+ finds "car" (Patch #23307).
+ (Pierrick Brihaye, Daniel Naber)
+
+ 6. Permit unbuffered Directory implementations (e.g., using mmap).
+ InputStream is replaced by the new classes IndexInput and
+ BufferedIndexInput. OutputStream is replaced by the new classes
+ IndexOutput and BufferedIndexOutput. InputStream and OutputStream
+ are now deprecated and FSDirectory is now subclassable. (cutting)
+
+ 7. Add native Directory and TermDocs implementations that work under
+ GCJ. These require GCC 3.4.0 or later and have only been tested
+ on Linux. Use 'ant gcj' to build demo applications. (cutting)
+
+ 8. Add MMapDirectory, which uses nio to mmap input files. This is
+ still somewhat slower than FSDirectory. However it uses less
+ memory per query term, since a new buffer is not allocated per
+ term, which may help applications which use, e.g., wildcard
+ queries. It may also someday be faster. (cutting & Paul Elschot)
+
+ 9. Added javadocs-internal to build.xml - bug #30360
+ (Paul Elschot via Otis)
+
+10. Added RangeFilter, a more generically useful filter than DateFilter.
+ (Chris M Hostetter via Erik)
+
+11. Added NumberTools, a utility class indexing numeric fields.
+ (adapted from code contributed by Matt Quail; committed by Erik)
+
+12. Added public static IndexReader.main(String[] args) method.
+ IndexReader can now be used directly at command line level
+ to list and optionally extract the individual files from an existing
+ compound index file.
+ (adapted from code contributed by Garrett Rooney; committed by Bernhard)
+
+13. Add IndexWriter.setTermIndexInterval() method. See javadocs.
+ (Doug Cutting)
+
+14. Added LucenePackage, whose static get() method returns java.util.Package,
+ which lets the caller get the Lucene version information specified in
+ the Lucene Jar.
+ (Doug Cutting via Otis)
+
+15. Added Hits.iterator() method and corresponding HitIterator and Hit objects.
+ This provides standard java.util.Iterator iteration over Hits.
+ Each call to the iterator's next() method returns a Hit object.
+ (Jeremy Rayner via Erik)
+
+16. Add ParallelReader, an IndexReader that combines separate indexes
+ over different fields into a single virtual index. (Doug Cutting)
+
+17. Add IntParser and FloatParser interfaces to FieldCache, so that
+ fields in arbitrarily formats can be cached as ints and floats.
+ (Doug Cutting)
+
+18. Added class org.apache.lucene.index.IndexModifier which combines
+ IndexWriter and IndexReader, so you can add and delete documents without
+ worrying about synchronization/locking issues.
+ (Daniel Naber)
+
+19. Lucene can now be used inside an unsigned applet, as Lucene's access
+ to system properties will not cause a SecurityException anymore.
+ (Jon Schuster via Daniel Naber, bug #34359)
+
+20. Added a new class MatchAllDocsQuery that matches all documents.
+ (John Wang via Daniel Naber, bug #34946)
+
+21. Added ability to omit norms on a per field basis to decrease
+ index size and memory consumption when there are many indexed fields.
+ See Field.setOmitNorms()
+ (Yonik Seeley, LUCENE-448)
+
+22. Added NullFragmenter to contrib/highlighter, which is useful for
+ highlighting entire documents or fields.
+ (Erik Hatcher)
+
+23. Added regular expression queries, RegexQuery and SpanRegexQuery.
+ Note the same term enumeration caveats apply with these queries as
+ apply to WildcardQuery and other term expanding queries.
+ These two new queries are not currently supported via QueryParser.
+ (Erik Hatcher)
+
+24. Added ConstantScoreQuery which wraps a filter and produces a score
+ equal to the query boost for every matching document.
+ (Yonik Seeley, LUCENE-383)
+
+25. Added ConstantScoreRangeQuery which produces a constant score for
+ every document in the range. One advantage over a normal RangeQuery
+ is that it doesn't expand to a BooleanQuery and thus doesn't have a maximum
+ number of terms the range can cover. Both endpoints may also be open.
+ (Yonik Seeley, LUCENE-383)
+
+26. Added ability to specify a minimum number of optional clauses that
+ must match in a BooleanQuery. See BooleanQuery.setMinimumNumberShouldMatch().
+ (Paul Elschot, Chris Hostetter via Yonik Seeley, LUCENE-395)
+
+27. Added DisjunctionMaxQuery which provides the maximum score across its clauses.
+ It's very useful for searching across multiple fields.
+ (Chuck Williams via Yonik Seeley, LUCENE-323)
+
+28. New class ISOLatin1AccentFilter that replaces accented characters in the ISO
+ Latin 1 character set by their unaccented equivalent.
+ (Sven Duzont via Erik Hatcher)
+
+29. New class KeywordAnalyzer. "Tokenizes" the entire stream as a single token.
+ This is useful for data like zip codes, ids, and some product names.
+ (Erik Hatcher)
+
+30. Copied LengthFilter from contrib area to core. Removes words that are too
+ long and too short from the stream.
+ (David Spencer via Otis and Daniel)
+
+31. Added getPositionIncrementGap(String fieldName) to Analyzer. This allows
+ custom analyzers to put gaps between Field instances with the same field
+ name, preventing phrase or span queries crossing these boundaries. The
+ default implementation issues a gap of 0, allowing the default token
+ position increment of 1 to put the next field's first token into a
+ successive position.
+ (Erik Hatcher, with advice from Yonik)
+
+32. StopFilter can now ignore case when checking for stop words.
+ (Grant Ingersoll via Yonik, LUCENE-248)
+
+33. Add TopDocCollector and TopFieldDocCollector. These simplify the
+ implementation of hit collectors that collect only the
+ top-scoring or top-sorting hits.
+
+API Changes
+
+ 1. Several methods and fields have been deprecated. The API documentation
+ contains information about the recommended replacements. It is planned
+ that most of the deprecated methods and fields will be removed in
+ Lucene 2.0. (Daniel Naber)
+
+ 2. The Russian and the German analyzers have been moved to contrib/analyzers.
+ Also, the WordlistLoader class has been moved one level up in the
+ hierarchy and is now org.apache.lucene.analysis.WordlistLoader
+ (Daniel Naber)
+
+ 3. The API contained methods that declared to throw an IOException
+ but that never did this. These declarations have been removed. If
+ your code tries to catch these exceptions you might need to remove
+ those catch clauses to avoid compile errors. (Daniel Naber)
+
+ 4. Add a serializable Parameter Class to standardize parameter enum
+ classes in BooleanClause and Field. (Christoph)
+
+ 5. Added rewrite methods to all SpanQuery subclasses that nest other SpanQuerys.
+ This allows custom SpanQuery subclasses that rewrite (for term expansion, for
+ example) to nest within the built-in SpanQuery classes successfully.
+
+Bug fixes
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly closes the
+ IndexSearcher it opens. (Daniel Naber)
+
+ 2. Fixed a bug in IndexWriter.addIndexes(IndexReader[] readers) that
+ prevented deletion of obsolete segments. (Christoph Goller)
+
+ 3. Fix in FieldInfos to avoid the return of an extra blank field in
+ IndexReader.getFieldNames() (Patch #19058). (Mark Harwood via Bernhard)
+
+ 4. Some combinations of BooleanQuery and MultiPhraseQuery (formerly
+ PhrasePrefixQuery) could provoke UnsupportedOperationException
+ (bug #33161). (Rhett Sutphin via Daniel Naber)
+
+ 5. Small bug in skipTo of ConjunctionScorer that caused NullPointerException
+ if skipTo() was called without prior call to next() fixed. (Christoph)
+
+ 6. Disable Similiarty.coord() in the scoring of most automatically
+ generated boolean queries. The coord() score factor is
+ appropriate when clauses are independently specified by a user,
+ but is usually not appropriate when clauses are generated
+ automatically, e.g., by a fuzzy, wildcard or range query. Matches
+ on such automatically generated queries are no longer penalized
+ for not matching all terms. (Doug Cutting, Patch #33472)
+
+ 7. Getting a lock file with Lock.obtain(long) was supposed to wait for
+ a given amount of milliseconds, but this didn't work.
+ (John Wang via Daniel Naber, Bug #33799)
+
+ 8. Fix FSDirectory.createOutput() to always create new files.
+ Previously, existing files were overwritten, and an index could be
+ corrupted when the old version of a file was longer than the new.
+ Now any existing file is first removed. (Doug Cutting)
+
+ 9. Fix BooleanQuery containing nested SpanTermQuery's, which previously
+ could return an incorrect number of hits.
+ (Reece Wilton via Erik Hatcher, Bug #35157)
+
+10. Fix NullPointerException that could occur with a MultiPhraseQuery
+ inside a BooleanQuery.
+ (Hans Hjelm and Scotty Allen via Daniel Naber, Bug #35626)
+
+11. Fixed SnowballFilter to pass through the position increment from
+ the original token.
+ (Yonik Seeley via Erik Hatcher, LUCENE-437)
+
+12. Added Unicode range of Korean characters to StandardTokenizer,
+ grouping contiguous characters into a token rather than one token
+ per character. This change also changes the token type to "<CJ>"
+ for Chinese and Japanese character tokens (previously it was "<CJK>").
+ (Cheolgoo Kang via Otis and Erik, LUCENE-444 and LUCENE-461)
+
+13. FieldsReader now looks at FieldInfo.storeOffsetWithTermVector and
+ FieldInfo.storePositionWithTermVector and creates the Field with
+ correct TermVector parameter.
+ (Frank Steinmann via Bernhard, LUCENE-455)
+
+14. Fixed WildcardQuery to prevent "cat" matching "ca??".
+ (Xiaozheng Ma via Bernhard, LUCENE-306)
+
+15. Fixed a bug where MultiSearcher and ParallelMultiSearcher could
+ change the sort order when sorting by string for documents without
+ a value for the sort field.
+ (Luc Vanlerberghe via Yonik, LUCENE-453)
+
+16. Fixed a sorting problem with MultiSearchers that can lead to
+ missing or duplicate docs due to equal docs sorting in an arbitrary order.
+ (Yonik Seeley, LUCENE-456)
+
+17. A single hit using the expert level sorted search methods
+ resulted in the score not being normalized.
+ (Yonik Seeley, LUCENE-462)
+
+18. Fixed inefficient memory usage when loading an index into RAMDirectory.
+ (Volodymyr Bychkoviak via Bernhard, LUCENE-475)
+
+19. Corrected term offsets returned by ChineseTokenizer.
+ (Ray Tsang via Erik Hatcher, LUCENE-324)
+
+20. Fixed MultiReader.undeleteAll() to correctly update numDocs.
+ (Robert Kirchgessner via Doug Cutting, LUCENE-479)
+
+21. Race condition in IndexReader.getCurrentVersion() and isCurrent()
+ fixed by acquiring the commit lock.
+ (Luc Vanlerberghe via Yonik Seeley, LUCENE-481)
+
+22. IndexWriter.setMaxBufferedDocs(1) didn't have the expected effect,
+ this has now been fixed. (Daniel Naber)
+
+23. Fixed QueryParser when called with a date in local form like
+ "[1/16/2000 TO 1/18/2000]". This query did not include the documents
+ of 1/18/2000, i.e. the last day was not included. (Daniel Naber)
+
+24. Removed sorting constraint that threw an exception if there were
+ not yet any values for the sort field (Yonik Seeley, LUCENE-374)
+
+Optimizations
+
+ 1. Disk usage (peak requirements during indexing and optimization)
+ in case of compound file format has been improved.
+ (Bernhard, Dmitry, and Christoph)
+
+ 2. Optimize the performance of certain uses of BooleanScorer,
+ TermScorer and IndexSearcher. In particular, a BooleanQuery
+ composed of TermQuery, with not all terms required, that returns a
+ TopDocs (e.g., through a Hits with no Sort specified) runs much
+ faster. (cutting)
+
+ 3. Removed synchronization from reading of term vectors with an
+ IndexReader (Patch #30736). (Bernhard Messer via Christoph)
+
+ 4. Optimize term-dictionary lookup to allocate far fewer terms when
+ scanning for the matching term. This speeds searches involving
+ low-frequency terms, where the cost of dictionary lookup can be
+ significant. (cutting)
+
+ 5. Optimize fuzzy queries so the standard fuzzy queries with a prefix
+ of 0 now run 20-50% faster (Patch #31882).
+ (Jonathan Hager via Daniel Naber)
+
+ 6. A Version of BooleanScorer (BooleanScorer2) added that delivers
+ documents in increasing order and implements skipTo. For queries
+ with required or forbidden clauses it may be faster than the old
+ BooleanScorer, for BooleanQueries consisting only of optional
+ clauses it is probably slower. The new BooleanScorer is now the
+ default. (Patch 31785 by Paul Elschot via Christoph)
+
+ 7. Use uncached access to norms when merging to reduce RAM usage.
+ (Bug #32847). (Doug Cutting)
+
+ 8. Don't read term index when random-access is not required. This
+ reduces time to open IndexReaders and they use less memory when
+ random access is not required, e.g., when merging segments. The
+ term index is now read into memory lazily at the first
+ random-access. (Doug Cutting)
+
+ 9. Optimize IndexWriter.addIndexes(Directory[]) when the number of
+ added indexes is larger than mergeFactor. Previously this could
+ result in quadratic performance. Now performance is n log(n).
+ (Doug Cutting)
+
+10. Speed up the creation of TermEnum for indices with multiple
+ segments and deleted documents, and thus speed up PrefixQuery,
+ RangeQuery, WildcardQuery, FuzzyQuery, RangeFilter, DateFilter,
+ and sorting the first time on a field.
+ (Yonik Seeley, LUCENE-454)
+
+11. Optimized and generalized 32 bit floating point to byte
+ (custom 8 bit floating point) conversions. Increased the speed of
+ Similarity.encodeNorm() anywhere from 10% to 250%, depending on the JVM.
+ (Yonik Seeley, LUCENE-467)
+
+Infrastructure
+
+ 1. Lucene's source code repository has converted from CVS to
+ Subversion. The new repository is at
+ http://svn.apache.org/repos/asf/lucene/java/trunk
+
+ 2. Lucene's issue tracker has migrated from Bugzilla to JIRA.
+ Lucene's JIRA is at http://issues.apache.org/jira/browse/LUCENE
+ The old issues are still available at
+ http://issues.apache.org/bugzilla/show_bug.cgi?id=xxxx
+ (use the bug number instead of xxxx)
+
+
+1.4.3
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly escapes error
+ messages which might contain user input (e.g. error messages about
+ query parsing). If you used that page as a starting point for your
+ own code please make sure your code also properly escapes HTML
+ characters from user input in order to avoid so-called cross site
+ scripting attacks. (Daniel Naber)
+
+ 2. QueryParser changes in 1.4.2 broke the QueryParser API. Now the old
+ API is supported again. (Christoph)
+
+
+1.4.2
+
+ 1. Fixed bug #31241: Sorting could lead to incorrect results (documents
+ missing, others duplicated) if the sort keys were not unique and there
+ were more than 100 matches. (Daniel Naber)
+
+ 2. Memory leak in Sort code (bug #31240) eliminated.
+ (Rafal Krzewski via Christoph and Daniel)
+
+ 3. FuzzyQuery now takes an additional parameter that specifies the
+ minimum similarity that is required for a term to match the query.
+ The QueryParser syntax for this is term~x, where x is a floating
+ point number >= 0 and < 1 (a bigger number means that a higher
+ similarity is required). Furthermore, a prefix can be specified
+ for FuzzyQuerys so that only those terms are considered similar that
+ start with this prefix. This can speed up FuzzyQuery greatly.
+ (Daniel Naber, Christoph Goller)
+
+ 4. PhraseQuery and PhrasePrefixQuery now allow the explicit specification
+ of relative positions. (Christoph Goller)
+
+ 5. QueryParser changes: Fix for ArrayIndexOutOfBoundsExceptions
+ (patch #9110); some unused method parameters removed; The ability
+ to specify a minimum similarity for FuzzyQuery has been added.
+ (Christoph Goller)
+
+ 6. IndexSearcher optimization: a new ScoreDoc is no longer allocated
+ for every non-zero-scoring hit. This makes 'OR' queries that
+ contain common terms substantially faster. (cutting)
+
+
+1.4.1
+
+ 1. Fixed a performance bug in hit sorting code, where values were not
+ correctly cached. (Aviran via cutting)
+
+ 2. Fixed errors in file format documentation. (Daniel Naber)
+
+
+1.4 final
+
+ 1. Added "an" to the list of stop words in StopAnalyzer, to complement
+ the existing "a" there. Fix for bug 28960
+ (http://issues.apache.org/bugzilla/show_bug.cgi?id=28960). (Otis)
+
+ 2. Added new class FieldCache to manage in-memory caches of field term
+ values. (Tim Jones)
+
+ 3. Added overloaded getFieldQuery method to QueryParser which
+ accepts the slop factor specified for the phrase (or the default
+ phrase slop for the QueryParser instance). This allows overriding
+ methods to replace a PhraseQuery with a SpanNearQuery instead,
+ keeping the proper slop factor. (Erik Hatcher)
+
+ 4. Changed the encoding of GermanAnalyzer.java and GermanStemmer.java to
+ UTF-8 and changed the build encoding to UTF-8, to make changed files
+ compile. (Otis Gospodnetic)
+
+ 5. Removed synchronization from term lookup under IndexReader methods
+ termFreq(), termDocs() or termPositions() to improve
+ multi-threaded performance. (cutting)
+
+ 6. Fix a bug where obsolete segment files were not deleted on Win32.
+
+
+1.4 RC3
+
+ 1. Fixed several search bugs introduced by the skipTo() changes in
+ release 1.4RC1. The index file format was changed a bit, so
+ collections must be re-indexed to take advantage of the skipTo()
+ optimizations. (Christoph Goller)
+
+ 2. Added new Document methods, removeField() and removeFields().
+ (Christoph Goller)
+
+ 3. Fixed inconsistencies with index closing. Indexes and directories
+ are now only closed automatically by Lucene when Lucene opened
+ them automatically. (Christoph Goller)
+
+ 4. Added new class: FilteredQuery. (Tim Jones)
+
+ 5. Added a new SortField type for custom comparators. (Tim Jones)
+
+ 6. Lock obtain timed out message now displays the full path to the lock
+ file. (Daniel Naber via Erik)
+
+ 7. Fixed a bug in SpanNearQuery when ordered. (Paul Elschot via cutting)
+
+ 8. Fixed so that FSDirectory's locks still work when the
+ java.io.tmpdir system property is null. (cutting)
+
+ 9. Changed FilteredTermEnum's constructor to take no parameters,
+ as the parameters were ignored anyway (bug #28858)
+
+1.4 RC2
+
+ 1. GermanAnalyzer now throws an exception if the stopword file
+ cannot be found (bug #27987). It now uses LowerCaseFilter
+ (bug #18410) (Daniel Naber via Otis, Erik)
+
+ 2. Fixed a few bugs in the file format documentation. (cutting)
+
+
+1.4 RC1
+
+ 1. Changed the format of the .tis file, so that:
+
+ - it has a format version number, which makes it easier to
+ back-compatibly change file formats in the future.
+
+ - the term count is now stored as a long. This was the one aspect
+ of the Lucene's file formats which limited index size.
+
+ - a few internal index parameters are now stored in the index, so
+ that they can (in theory) now be changed from index to index,
+ although there is not yet an API to do so.
+
+ These changes are back compatible. The new code can read old
+ indexes. But old code will not be able read new indexes. (cutting)
+
+ 2. Added an optimized implementation of TermDocs.skipTo(). A skip
+ table is now stored for each term in the .frq file. This only
+ adds a percent or two to overall index size, but can substantially
+ speedup many searches. (cutting)
+
+ 3. Restructured the Scorer API and all Scorer implementations to take
+ advantage of an optimized TermDocs.skipTo() implementation. In
+ particular, PhraseQuerys and conjunctive BooleanQuerys are
+ faster when one clause has substantially fewer matches than the
+ others. (A conjunctive BooleanQuery is a BooleanQuery where all
+ clauses are required.) (cutting)
+
+ 4. Added new class ParallelMultiSearcher. Combined with
+ RemoteSearchable this makes it easy to implement distributed
+ search systems. (Jean-Francois Halleux via cutting)
+
+ 5. Added support for hit sorting. Results may now be sorted by any
+ indexed field. For details see the javadoc for
+ Searcher#search(Query, Sort). (Tim Jones via Cutting)
+
+ 6. Changed FSDirectory to auto-create a full directory tree that it
+ needs by using mkdirs() instead of mkdir(). (Mladen Turk via Otis)
+
+ 7. Added a new span-based query API. This implements, among other
+ things, nested phrases. See javadocs for details. (Doug Cutting)
+
+ 8. Added new method Query.getSimilarity(Searcher), and changed
+ scorers to use it. This permits one to subclass a Query class so
+ that it can specify its own Similarity implementation, perhaps
+ one that delegates through that of the Searcher. (Julien Nioche
+ via Cutting)
+
+ 9. Added MultiReader, an IndexReader that combines multiple other
+ IndexReaders. (Cutting)
+
+10. Added support for term vectors. See Field#isTermVectorStored().
+ (Grant Ingersoll, Cutting & Dmitry)
+
+11. Fixed the old bug with escaping of special characters in query
+ strings: http://issues.apache.org/bugzilla/show_bug.cgi?id=24665
+ (Jean-Francois Halleux via Otis)
+
+12. Added support for overriding default values for the following,
+ using system properties:
+ - default commit lock timeout
+ - default maxFieldLength
+ - default maxMergeDocs
+ - default mergeFactor
+ - default minMergeDocs
+ - default write lock timeout
+ (Otis)
+
+13. Changed QueryParser.jj to allow '-' and '+' within tokens:
+ http://issues.apache.org/bugzilla/show_bug.cgi?id=27491
+ (Morus Walter via Otis)
+
+14. Changed so that the compound index format is used by default.
+ This makes indexing a bit slower, but vastly reduces the chances
+ of file handle problems. (Cutting)
+
+
+1.3 final
+
+ 1. Added catch of BooleanQuery$TooManyClauses in QueryParser to
+ throw ParseException instead. (Erik Hatcher)
+
+ 2. Fixed a NullPointerException in Query.explain(). (Doug Cutting)
+
+ 3. Added a new method IndexReader.setNorm(), that permits one to
+ alter the boosting of fields after an index is created.
+
+ 4. Distinguish between the final position and length when indexing a
+ field. The length is now defined as the total number of tokens,
+ instead of the final position, as it was previously. Length is
+ used for score normalization (Similarity.lengthNorm()) and for
+ controlling memory usage (IndexWriter.maxFieldLength). In both of
+ these cases, the total number of tokens is a better value to use
+ than the final token position. Position is used in phrase
+ searching (see PhraseQuery and Token.setPositionIncrement()).
+
+ 5. Fix StandardTokenizer's handling of CJK characters (Chinese,
+ Japanese and Korean ideograms). Previously contiguous sequences
+ were combined in a single token, which is not very useful. Now
+ each ideogram generates a separate token, which is more useful.
+
+
+1.3 RC3
+
+ 1. Added minMergeDocs in IndexWriter. This can be raised to speed
+ indexing without altering the number of files, but only using more
+ memory. (Julien Nioche via Otis)
+
+ 2. Fix bug #24786, in query rewriting. (bschneeman via Cutting)
+
+ 3. Fix bug #16952, in demo HTML parser, skip comments in
+ javascript. (Christoph Goller)
+
+ 4. Fix bug #19253, in demo HTML parser, add whitespace as needed to
+ output (Daniel Naber via Christoph Goller)
+
+ 5. Fix bug #24301, in demo HTML parser, long titles no longer
+ hang things. (Christoph Goller)
+
+ 6. Fix bug #23534, Replace use of file timestamp of segments file
+ with an index version number stored in the segments file. This
+ resolves problems when running on file systems with low-resolution
+ timestamps, e.g., HFS under MacOS X. (Christoph Goller)
+
+ 7. Fix QueryParser so that TokenMgrError is not thrown, only
+ ParseException. (Erik Hatcher)
+
+ 8. Fix some bugs introduced by change 11 of RC2. (Christoph Goller)
+
+ 9. Fixed a problem compiling TestRussianStem. (Christoph Goller)
+
+10. Cleaned up some build stuff. (Erik Hatcher)
+
+
+1.3 RC2
+
+ 1. Added getFieldNames(boolean) to IndexReader, SegmentReader, and
+ SegmentsReader. (Julien Nioche via otis)
+
+ 2. Changed file locking to place lock files in
+ System.getProperty("java.io.tmpdir"), where all users are
+ permitted to write files. This way folks can open and correctly
+ lock indexes which are read-only to them.
+
+ 3. IndexWriter: added a new method, addDocument(Document, Analyzer),
+ permitting one to easily use different analyzers for different
+ documents in the same index.
+
+ 4. Minor enhancements to FuzzyTermEnum.
+ (Christoph Goller via Otis)
+
+ 5. PriorityQueue: added insert(Object) method and adjusted IndexSearcher
+ and MultiIndexSearcher to use it.
+ (Christoph Goller via Otis)
+
+ 6. Fixed a bug in IndexWriter that returned incorrect docCount().
+ (Christoph Goller via Otis)
+
+ 7. Fixed SegmentsReader to eliminate the confusing and slightly different
+ behaviour of TermEnum when dealing with an enumeration of all terms,
+ versus an enumeration starting from a specific term.
+ This patch also fixes incorrect term document frequencies when the same term
+ is present in multiple segments.
+ (Christoph Goller via Otis)
+
+ 8. Added CachingWrapperFilter and PerFieldAnalyzerWrapper. (Erik Hatcher)
+
+ 9. Added support for the new "compound file" index format (Dmitry
+ Serebrennikov)
+
+10. Added Locale setting to QueryParser, for use by date range parsing.
+
+11. Changed IndexReader so that it can be subclassed by classes
+ outside of its package. Previously it had package-private
+ abstract methods. Also modified the index merging code so that it
+ can work on an arbitrary IndexReader implementation, and added a
+ new method, IndexWriter.addIndexes(IndexReader[]), to take
+ advantage of this. (cutting)
+
+12. Added a limit to the number of clauses which may be added to a
+ BooleanQuery. The default limit is 1024 clauses. This should
+ stop most OutOfMemoryExceptions by prefix, wildcard and fuzzy
+ queries which run amok. (cutting)
+
+13. Add new method: IndexReader.undeleteAll(). This undeletes all
+ deleted documents which still remain in the index. (cutting)
+
+
+1.3 RC1
+
+ 1. Fixed PriorityQueue's clear() method.
+ Fix for bug 9454, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9454
+ (Matthijs Bomhoff via otis)
+
+ 2. Changed StandardTokenizer.jj grammar for EMAIL tokens.
+ Fix for bug 9015, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9015
+ (Dale Anson via otis)
+
+ 3. Added the ability to disable lock creation by using disableLuceneLocks
+ system property. This is useful for read-only media, such as CD-ROMs.
+ (otis)
+
+ 4. Added id method to Hits to be able to access the index global id.
+ Required for sorting options.
+ (carlson)
+
+ 5. Added support for new range query syntax to QueryParser.jj.
+ (briangoetz)
+
+ 6. Added the ability to retrieve HTML documents' META tag values to
+ HTMLParser.jj.
+ (Mark Harwood via otis)
+
+ 7. Modified QueryParser to make it possible to programmatically specify the
+ default Boolean operator (OR or AND).
+ (Péter Halácsy via otis)
+
+ 8. Made many search methods and classes non-final, per requests.
+ This includes IndexWriter and IndexSearcher, among others.
+ (cutting)
+
+ 9. Added class RemoteSearchable, providing support for remote
+ searching via RMI. The test class RemoteSearchableTest.java
+ provides an example of how this can be used. (cutting)
+
+ 10. Added PhrasePrefixQuery (and supporting MultipleTermPositions). The
+ test class TestPhrasePrefixQuery provides the usage example.
+ (Anders Nielsen via otis)
+
+ 11. Changed the German stemming algorithm to ignore case while
+ stripping. The new algorithm is faster and produces more equal
+ stems from nouns and verbs derived from the same word.
+ (gschwarz)
+
+ 12. Added support for boosting the score of documents and fields via
+ the new methods Document.setBoost(float) and Field.setBoost(float).
+
+ Note: This changes the encoding of an indexed value. Indexes
+ should be re-created from scratch in order for search scores to
+ be correct. With the new code and an old index, searches will
+ yield very large scores for shorter fields, and very small scores
+ for longer fields. Once the index is re-created, scores will be
+ as before. (cutting)
+
+ 13. Added new method Token.setPositionIncrement().
+
+ This permits, for the purpose of phrase searching, placing
+ multiple terms in a single position. This is useful with
+ stemmers that produce multiple possible stems for a word.
+
+ This also permits the introduction of gaps between terms, so that
+ terms which are adjacent in a token stream will not be matched by
+ and exact phrase query. This makes it possible, e.g., to build
+ an analyzer where phrases are not matched over stop words which
+ have been removed.
+
+ Finally, repeating a token with an increment of zero can also be
+ used to boost scores of matches on that token. (cutting)
+
+ 14. Added new Filter class, QueryFilter. This constrains search
+ results to only match those which also match a provided query.
+ Results are cached, so that searches after the first on the same
+ index using this filter are very fast.
+
+ This could be used, for example, with a RangeQuery on a formatted
+ date field to implement date filtering. One could re-use a
+ single QueryFilter that matches, e.g., only documents modified
+ within the last week. The QueryFilter and RangeQuery would only
+ need to be reconstructed once per day. (cutting)
+
+ 15. Added a new IndexWriter method, getAnalyzer(). This returns the
+ analyzer used when adding documents to this index. (cutting)
+
+ 16. Fixed a bug with IndexReader.lastModified(). Before, document
+ deletion did not update this. Now it does. (cutting)
+
+ 17. Added Russian Analyzer.
+ (Boris Okner via otis)
+
+ 18. Added a public, extensible scoring API. For details, see the
+ javadoc for org.apache.lucene.search.Similarity.
+
+ 19. Fixed return of Hits.id() from float to int. (Terry Steichen via Peter).
+
+ 20. Added getFieldNames() to IndexReader and Segment(s)Reader classes.
+ (Peter Mularien via otis)
+
+ 21. Added getFields(String) and getValues(String) methods.
+ Contributed by Rasik Pandey on 2002-10-09
+ (Rasik Pandey via otis)
+
+ 22. Revised internal search APIs. Changes include:
+
+ a. Queries are no longer modified during a search. This makes
+ it possible, e.g., to reuse the same query instance with
+ multiple indexes from multiple threads.
+
+ b. Term-expanding queries (e.g. PrefixQuery, WildcardQuery,
+ etc.) now work correctly with MultiSearcher, fixing bugs 12619
+ and 12667.
+
+ c. Boosting BooleanQuery's now works, and is supported by the
+ query parser (problem reported by Lee Mallabone). Thus a query
+ like "(+foo +bar)^2 +baz" is now supported and equivalent to
+ "(+foo^2 +bar^2) +baz".
+
+ d. New method: Query.rewrite(IndexReader). This permits a
+ query to re-write itself as an alternate, more primitive query.
+ Most of the term-expanding query classes (PrefixQuery,
+ WildcardQuery, etc.) are now implemented using this method.
+
+ e. New method: Searchable.explain(Query q, int doc). This
+ returns an Explanation instance that describes how a particular
+ document is scored against a query. An explanation can be
+ displayed as either plain text, with the toString() method, or
+ as HTML, with the toHtml() method. Note that computing an
+ explanation is as expensive as executing the query over the
+ entire index. This is intended to be used in developing
+ Similarity implementations, and, for good performance, should
+ not be displayed with every hit.
+
+ f. Scorer and Weight are public, not package protected. It now
+ possible for someone to write a Scorer implementation that is
+ not in the org.apache.lucene.search package. This is still
+ fairly advanced programming, and I don't expect anyone to do
+ this anytime soon, but at least now it is possible.
+
+ g. Added public accessors to the primitive query classes
+ (TermQuery, PhraseQuery and BooleanQuery), permitting access to
+ their terms and clauses.
+
+ Caution: These are extensive changes and they have not yet been
+ tested extensively. Bug reports are appreciated.
+ (cutting)
+
+ 23. Added convenience RAMDirectory constructors taking File and String
+ arguments, for easy FSDirectory to RAMDirectory conversion.
+ (otis)
+
+ 24. Added code for manual renaming of files in FSDirectory, since it
+ has been reported that java.io.File's renameTo(File) method sometimes
+ fails on Windows JVMs.
+ (Matt Tucker via otis)
+
+ 25. Refactored QueryParser to make it easier for people to extend it.
+ Added the ability to automatically lower-case Wildcard terms in
+ the QueryParser.
+ (Tatu Saloranta via otis)
+
+
+1.2 RC6
+
+ 1. Changed QueryParser.jj to have "?" be a special character which
+ allowed it to be used as a wildcard term. Updated TestWildcard
+ unit test also. (Ralf Hettesheimer via carlson)
+
+1.2 RC5
+
+ 1. Renamed build.properties to default.properties and updated
+ the BUILD.txt document to describe how to override the
+ default.property settings without having to edit the file. This
+ brings the build process closer to Scarab's build process.
+ (jon)
+
+ 2. Added MultiFieldQueryParser class. (Kelvin Tan, via otis)
+
+ 3. Updated "powered by" links. (otis)
+
+ 4. Fixed instruction for setting up JavaCC - Bug #7017 (otis)
+
+ 5. Added throwing exception if FSDirectory could not create directory
+ - Bug #6914 (Eugene Gluzberg via otis)
+
+ 6. Update MultiSearcher, MultiFieldParse, Constants, DateFilter,
+ LowerCaseTokenizer javadoc (otis)
+
+ 7. Added fix to avoid NullPointerException in results.jsp
+ (Mark Hayes via otis)
+
+ 8. Changed Wildcard search to find 0 or more char instead of 1 or more
+ (Lee Mallobone, via otis)
+
+ 9. Fixed error in offset issue in GermanStemFilter - Bug #7412
+ (Rodrigo Reyes, via otis)
+
+ 10. Added unit tests for wildcard search and DateFilter (otis)
+
+ 11. Allow co-existence of indexed and non-indexed fields with the same name
+ (cutting/casper, via otis)
+
+ 12. Add escape character to query parser.
+ (briangoetz)
+
+ 13. Applied a patch that ensures that searches that use DateFilter
+ don't throw an exception when no matches are found. (David Smiley, via
+ otis)
+
+ 14. Fixed bugs in DateFilter and wildcardquery unit tests. (cutting, otis, carlson)
+
+
+1.2 RC4
+
+ 1. Updated contributions section of website.
+ Add XML Document #3 implementation to Document Section.
+ Also added Term Highlighting to Misc Section. (carlson)
+
+ 2. Fixed NullPointerException for phrase searches containing
+ unindexed terms, introduced in 1.2RC3. (cutting)
+
+ 3. Changed document deletion code to obtain the index write lock,
+ enforcing the fact that document addition and deletion cannot be
+ performed concurrently. (cutting)
+
+ 4. Various documentation cleanups. (otis, acoliver)
+
+ 5. Updated "powered by" links. (cutting, jon)
+
+ 6. Fixed a bug in the GermanStemmer. (Bernhard Messer, via otis)
+
+ 7. Changed Term and Query to implement Serializable. (scottganyo)
+
+ 8. Fixed to never delete indexes added with IndexWriter.addIndexes().
+ (cutting)
+
+ 9. Upgraded to JUnit 3.7. (otis)
+
+1.2 RC3
+
+ 1. IndexWriter: fixed a bug where adding an optimized index to an
+ empty index failed. This was encountered using addIndexes to copy
+ a RAMDirectory index to an FSDirectory.
+
+ 2. RAMDirectory: fixed a bug where RAMInputStream could not read
+ across more than across a single buffer boundary.
+
+ 3. Fix query parser so it accepts queries with unicode characters.
+ (briangoetz)
+
+ 4. Fix query parser so that PrefixQuery is used in preference to
+ WildcardQuery when there's only an asterisk at the end of the
+ term. Previously PrefixQuery would never be used.
+
+ 5. Fix tests so they compile; fix ant file so it compiles tests
+ properly. Added test cases for Analyzers and PriorityQueue.
+
+ 6. Updated demos, added Getting Started documentation. (acoliver)
+
+ 7. Added 'contributions' section to website & docs. (carlson)
+
+ 8. Removed JavaCC from source distribution for copyright reasons.
+ Folks must now download this separately from metamata in order to
+ compile Lucene. (cutting)
+
+ 9. Substantially improved the performance of DateFilter by adding the
+ ability to reuse TermDocs objects. (cutting)
+
+10. Added IndexReader methods:
+ public static boolean indexExists(String directory);
+ public static boolean indexExists(File directory);
+ public static boolean indexExists(Directory directory);
+ public static boolean isLocked(Directory directory);
+ public static void unlock(Directory directory);
+ (cutting, otis)
+
+11. Fixed bugs in GermanAnalyzer (gschwarz)
+
+
+1.2 RC2
+ - added sources to distribution
+ - removed broken build scripts and libraries from distribution
+ - SegmentsReader: fixed potential race condition
+ - FSDirectory: fixed so that getDirectory(xxx,true) correctly
+ erases the directory contents, even when the directory
+ has already been accessed in this JVM.
+ - RangeQuery: Fix issue where an inclusive range query would
+ include the nearest term in the index above a non-existant
+ specified upper term.
+ - SegmentTermEnum: Fix NullPointerException in clone() method
+ when the Term is null.
+ - JDK 1.1 compatibility fix: disabled lock files for JDK 1.1,
+ since they rely on a feature added in JDK 1.2.
+
+1.2 RC1
+ - first Apache release
+ - packages renamed from com.lucene to org.apache.lucene
+ - license switched from LGPL to Apache
+ - ant-only build -- no more makefiles
+ - addition of lock files--now fully thread & process safe
+ - addition of German stemmer
+ - MultiSearcher now supports low-level search API
+ - added RangeQuery, for term-range searching
+ - Analyzers can choose tokenizer based on field name
+ - misc bug fixes.
+
+1.01b
+ . last Sourceforge release
+ . a few bug fixes
+ . new Query Parser
+ . new prefix query (search for "foo*" matches "food")
+
+1.0
+
+This release fixes a few serious bugs and also includes some
+performance optimizations, a stemmer, and a few other minor
+enhancements.
+
+0.04
+
+Lucene now includes a grammar-based tokenizer, StandardTokenizer.
+
+The only tokenizer included in the previous release (LetterTokenizer)
+identified terms consisting entirely of alphabetic characters. The
+new tokenizer uses a regular-expression grammar to identify more
+complex classes of terms, including numbers, acronyms, email
+addresses, etc.
+
+StandardTokenizer serves two purposes:
+
+ 1. It is a much better, general purpose tokenizer for use by
+ applications as is.
+
+ The easiest way for applications to start using
+ StandardTokenizer is to use StandardAnalyzer.
+
+ 2. It provides a good example of grammar-based tokenization.
+
+ If an application has special tokenization requirements, it can
+ implement a custom tokenizer by copying the directory containing
+ the new tokenizer into the application and modifying it
+ accordingly.
+
+0.01
+
+First open source release.
+
+The code has been re-organized into a new package and directory
+structure for this release. It builds OK, but has not been tested
+beyond that since the re-organization.
diff --git a/solr-8.1.1/NOTICE.txt b/solr-8.1.1/NOTICE.txt
new file mode 100644
index 000000000..58b66c4fa
--- /dev/null
+++ b/solr-8.1.1/NOTICE.txt
@@ -0,0 +1,593 @@
+==============================================================
+ Apache Solr
+ Copyright 2006-2019 The Apache Software Foundation
+==============================================================
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Includes software from other Apache Software Foundation projects,
+including, but not limited to:
+ - Apache Lucene Java
+ - Apache Commons
+ - Apache Blur
+ - Apache Hadoop
+
+This product includes code forked from the Java-HLL library.
+Copyright (c) 2013 Aggregate Knowledge, Inc., https://github.com/aggregateknowledge/java-hll/
+
+This product includes the JQuery JavaScript library created by John Resig.
+Copyright (c) 2010 John Resig, http://jquery.com/
+
+This product includes the D3.js JavaScript library created by Michael Bostock.
+Copyright (c) 2012, Michael Bostock, https://github.com/mbostock/d3
+
+This product includes the highlight.js Javascript library created by Ivan Sagalaev
+Copyright (c) 2006, Ivan Sagalaev, https://github.com/isagalaev/highlight.js
+
+This product includes the Chosen Javascript library created by Patrick Filler
+Copyright (c) 2011-2014 by Harvest, https://github.com/harvesthq/chosen
+
+This product includes jquery.blockUI.js Javascript library created by Mike Alsup
+Copyright (c) 2007-2014 M. Alsup https://github.com/malsup/blockui/
+
+This product includes jquery.cookie.js Javascript library created by Klaus Hartl
+Copyright (c) 2013-2014 Klaus Hartl, https://github.com/carhartl/jquery-cookie
+
+This product includes jquery.form Javascript library created by Mike Alsup
+Copyright 2006-2014 (c) M. Alsup, https://github.com/malsup/form/
+
+This product includes the jquery.jstree.js Javascript library created by Ivan Bozhanov
+Copyright (c) 2013-2014 Ivan Bozhanov, https://github.com/vakata/jstree
+
+This product includes jquery.timeago.js Javascript library by Ryan McGeary
+Copyright (c) 2008-2014, Ryan McGeary, https://github.com/rmm5t/jquery-timeago
+
+This product includes require.js Javascript library created by James Burke
+Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs
+
+This product includes angular-utf8-base64.js Javascript library created by Andrey Bezyazychniy
+Copyright (c) 2014 Andrey Bezyazychniy, https://github.com/stranger82/angular-utf8-base64
+
+This product includes code copied and modified from the www-authenticate Javascript library
+Copyright (c) 2013 Randy McLaughlin, MIT-license, https://github.com/randymized/www-authenticate
+
+This product includes fugue icons created by Yusuke Kamiyamane
+Copyright (C) 2013-2014 Yusuke Kamiyamane, https://github.com/yusukekamiyamane/fugue-icons
+
+Jackcess: http://jackcess.sourceforge.net/
+Copyright (C) 2011-2014 James Ahlborn
+
+JavaMail: https://java.net/projects/javamail/
+License: Common Development and Distribution License (CDDL) v1.1 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
+
+JavaBeans Activation Framework (JAF): http://java.sun.com/products/javabeans/jaf/index.jsp
+License: Common Development and Distribution License (CDDL) v1.0 (https://glassfish.dev.java.net/public/CDDLv1.0.html)
+
+HSQL Database (HSQLDB): http://hsqldb.org/
+License: http://hsqldb.org/web/hsqlLicense.html
+
+Jersey Core: https://jersey.java.net/
+License: Common Development and Distribution License (CDDL) v1.0 (https://glassfish.dev.java.net/public/CDDLv1.0.html)
+
+The HdfsDirectory and BlockDirectory were derived from
+the Apache Blur incubating project and are Apache License 2.0.
+
+ASM (Java bytecode manipulation and analysis framework): http://asm.ow2.org/
+Copyright (c) 2000-2005 INRIA, France Telecom
+
+This project includes portions of the Jekyll Documentation Theme
+Copyright (c) 2016 Tom Johnson
+License: MIT https://github.com/tomjohnson1492/documentation-theme-jekyll/blob/gh-pages/licenses/LICENSE
+
+This project includes templates from the Asciidoctor HTML5 backend converter
+Copyright (c) 2014-2018 Jakub Jirutka
+License: MIT https://github.com/jirutka/asciidoctor-html5s/blob/master/LICENSE
+
+This project includes the Navgoco JQuery plugin
+Copyright (c) 2013 Christopher Tsoulloftas, http://www.komposta.net
+License: BSD https://github.com/tefra/navgoco/blob/master/LICENSE-BSD
+
+=========================================================================
+== Antlr2 Notice ==
+=========================================================================
+
+
+SOFTWARE RIGHTS
+
+ANTLR 1989-2006 Developed by Terence Parr
+Partially supported by University of San Francisco & jGuru.com
+
+We reserve no legal rights to the ANTLR--it is fully in the
+public domain. An individual or company may do whatever
+they wish with source code distributed with ANTLR or the
+code generated by ANTLR, including the incorporation of
+ANTLR, or its output, into commerical software.
+
+We encourage users to develop software with ANTLR. However,
+we do ask that credit is given to us for developing
+ANTLR. By "credit", we mean that if you use ANTLR or
+incorporate any source code into one of your programs
+(commercial product, research project, or otherwise) that
+you acknowledge this fact somewhere in the documentation,
+research report, etc... If you like ANTLR and have
+developed a nice tool with the output, please mention that
+you developed it using ANTLR. In addition, we ask that the
+headers remain intact in our source code. As long as these
+guidelines are kept, we expect to continue enhancing this
+system and expect to make other tools available as they are
+completed.
+
+The primary ANTLR guy:
+
+Terence Parr
+parrt@cs.usfca.edu
+parrt@antlr.org
+
+=========================================================================
+== Apache Lucene Notice ==
+=========================================================================
+
+Apache Lucene
+Copyright 2001-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Includes software from other Apache Software Foundation projects,
+including, but not limited to:
+ - Apache Ant
+ - Apache Jakarta Regexp
+ - Apache Commons
+ - Apache Xerces
+
+ICU4J, (under analysis/icu) is licensed under an MIT styles license
+and Copyright (c) 1995-2008 International Business Machines Corporation and others
+
+Some data files (under analysis/icu/src/data) are derived from Unicode data such
+as the Unicode Character Database. See http://unicode.org/copyright.html for more
+details.
+
+Brics Automaton (under core/src/java/org/apache/lucene/util/automaton) is
+BSD-licensed, created by Anders Møller. See http://www.brics.dk/automaton/
+
+The levenshtein automata tables (under core/src/java/org/apache/lucene/util/automaton) were
+automatically generated with the moman/finenight FSA library, created by
+Jean-Philippe Barrette-LaPierre. This library is available under an MIT license,
+see http://sites.google.com/site/rrettesite/moman and
+http://bitbucket.org/jpbarrette/moman/overview/
+
+The class org.apache.lucene.util.WeakIdentityMap was derived from
+the Apache CXF project and is Apache License 2.0.
+
+The Google Code Prettify is Apache License 2.0.
+See http://code.google.com/p/google-code-prettify/
+
+JUnit (junit-4.10) is licensed under the Common Public License v. 1.0
+See http://junit.sourceforge.net/cpl-v10.html
+
+This product includes code (JaspellTernarySearchTrie) from Java Spelling Checkin
+g Package (jaspell): http://jaspell.sourceforge.net/
+License: The BSD License (http://www.opensource.org/licenses/bsd-license.php)
+
+The snowball stemmers in
+ analysis/common/src/java/net/sf/snowball
+were developed by Martin Porter and Richard Boulton.
+The snowball stopword lists in
+ analysis/common/src/resources/org/apache/lucene/analysis/snowball
+were developed by Martin Porter and Richard Boulton.
+The full snowball package is available from
+ http://snowball.tartarus.org/
+
+The KStem stemmer in
+ analysis/common/src/org/apache/lucene/analysis/en
+was developed by Bob Krovetz and Sergio Guzman-Lara (CIIR-UMass Amherst)
+under the BSD-license.
+
+The Arabic,Persian,Romanian,Bulgarian, Hindi and Bengali analyzers (common) come with a default
+stopword list that is BSD-licensed created by Jacques Savoy. These files reside in:
+analysis/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/fa/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/ro/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/bg/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/hi/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/bn/stopwords.txt
+See http://members.unine.ch/jacques.savoy/clef/index.html.
+
+The German,Spanish,Finnish,French,Hungarian,Italian,Portuguese,Russian and Swedish light stemmers
+(common) are based on BSD-licensed reference implementations created by Jacques Savoy and
+Ljiljana Dolamic. These files reside in:
+analysis/common/src/java/org/apache/lucene/analysis/de/GermanLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/de/GermanMinimalStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/es/SpanishLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fi/FinnishLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fr/FrenchLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fr/FrenchMinimalStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/hu/HungarianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/it/ItalianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/pt/PortugueseLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/ru/RussianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/sv/SwedishLightStemmer.java
+
+The Stempel analyzer (stempel) includes BSD-licensed software developed
+by the Egothor project http://egothor.sf.net/, created by Leo Galambos, Martin Kvapil,
+and Edmond Nolan.
+
+The Polish analyzer (stempel) comes with a default
+stopword list that is BSD-licensed created by the Carrot2 project. The file resides
+in stempel/src/resources/org/apache/lucene/analysis/pl/stopwords.txt.
+See http://project.carrot2.org/license.html.
+
+The SmartChineseAnalyzer source code (smartcn) was
+provided by Xiaoping Gao and copyright 2009 by www.imdict.net.
+
+WordBreakTestUnicode_*.java (under modules/analysis/common/src/test/)
+is derived from Unicode data such as the Unicode Character Database.
+See http://unicode.org/copyright.html for more details.
+
+The Morfologik analyzer (morfologik) includes BSD-licensed software
+developed by Dawid Weiss and Marcin Miłkowski (http://morfologik.blogspot.com/).
+
+Morfologik uses data from Polish ispell/myspell dictionary
+(http://www.sjp.pl/slownik/en/) licenced on the terms of (inter alia)
+LGPL and Creative Commons ShareAlike.
+
+Morfologic includes data from BSD-licensed dictionary of Polish (SGJP)
+(http://sgjp.pl/morfeusz/)
+
+Servlet-api.jar and javax.servlet-*.jar are under the CDDL license, the original
+source code for this can be found at http://www.eclipse.org/jetty/downloads.php
+
+===========================================================================
+Kuromoji Japanese Morphological Analyzer - Apache Lucene Integration
+===========================================================================
+
+This software includes a binary and/or source version of data from
+
+ mecab-ipadic-2.7.0-20070801
+
+which can be obtained from
+
+ http://atilika.com/releases/mecab-ipadic/mecab-ipadic-2.7.0-20070801.tar.gz
+
+or
+
+ http://jaist.dl.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz
+
+===========================================================================
+mecab-ipadic-2.7.0-20070801 Notice
+===========================================================================
+
+Nara Institute of Science and Technology (NAIST),
+the copyright holders, disclaims all warranties with regard to this
+software, including all implied warranties of merchantability and
+fitness, in no event shall NAIST be liable for
+any special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether in an
+action of contract, negligence or other tortuous action, arising out
+of or in connection with the use or performance of this software.
+
+A large portion of the dictionary entries
+originate from ICOT Free Software. The following conditions for ICOT
+Free Software applies to the current dictionary as well.
+
+Each User may also freely distribute the Program, whether in its
+original form or modified, to any third party or parties, PROVIDED
+that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+on, or be attached to, the Program, which is distributed substantially
+in the same form as set out herein and that such intended
+distribution, if actually made, will neither violate or otherwise
+contravene any of the laws and regulations of the countries having
+jurisdiction over the User or the intended distribution itself.
+
+NO WARRANTY
+
+The program was produced on an experimental basis in the course of the
+research and development conducted during the project and is provided
+to users as so produced on an experimental basis. Accordingly, the
+program is provided without any warranty whatsoever, whether express,
+implied, statutory or otherwise. The term "warranty" used herein
+includes, but is not limited to, any warranty of the quality,
+performance, merchantability and fitness for a particular purpose of
+the program and the nonexistence of any infringement or violation of
+any right of any third party.
+
+Each user of the program will agree and understand, and be deemed to
+have agreed and understood, that there is no warranty whatsoever for
+the program and, accordingly, the entire risk arising from or
+otherwise connected with the program is assumed by the user.
+
+Therefore, neither ICOT, the copyright holder, or any other
+organization that participated in or was otherwise related to the
+development of the program and their respective officials, directors,
+officers and other employees shall be held liable for any and all
+damages, including, without limitation, general, special, incidental
+and consequential damages, arising out of or otherwise in connection
+with the use or inability to use the program or any product, material
+or result produced or otherwise obtained by using the program,
+regardless of whether they have been advised of, or otherwise had
+knowledge of, the possibility of such damages at any time during the
+project or thereafter. Each user will be deemed to have agreed to the
+foregoing by his or her commencement of use of the program. The term
+"use" as used herein includes, but is not limited to, the use,
+modification, copying and distribution of the program and the
+production of secondary products from the program.
+
+In the case where the program, whether in its original form or
+modified, was distributed or delivered to or received by a user from
+any person, organization or entity other than ICOT, unless it makes or
+grants independently of ICOT any specific warranty to the user in
+writing, such person, organization or entity, will also be exempted
+from and not be held liable to the user for any such damages as noted
+above as far as the program is concerned.
+
+===========================================================================
+Nori Korean Morphological Analyzer - Apache Lucene Integration
+===========================================================================
+
+This software includes a binary and/or source version of data from
+
+ mecab-ko-dic-2.0.3-20170922
+
+which can be obtained from
+
+ https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.3-20170922.tar.gz
+---
+
+This product includes/uses software, Woodstox (http://woodstox.codehaus.org),
+developed by Codehaus (http://www.codehaus.org/)
+License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+=========================================================================
+== Woodstox Notice ==
+=========================================================================
+This product currently only contains code developed by authors
+of specific components, as identified by the source code files.
+
+Since product implements StAX API, it has dependencies to StAX API
+classes.
+
+For additional credits (generally to people who reported problems)
+see CREDITS file.
+---
+
+This product includes software developed by the Eclipse Foundation
+(specifically, Jetty, the bundled servlet container in example),
+available under the Apache 2 License.
+
+Servlet-api.jar is under the CDDL license, the original source
+code for this can be found at http://www.eclipse.org/jetty/downloads.php
+
+=========================================================================
+== SLF4J Notice -- http://www.slf4j.org/license.html ==
+=========================================================================
+
+Copyright (c) 2004-2008 QOS.ch
+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.
+
+=========================================================================
+== Apache Tika Notices ==
+=========================================================================
+
+The following notices apply to contrib/extraction:
+
+This product includes software developed by the following copyright owners:
+
+Copyright (c) 2000-2006 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
+
+Copyright (c) 2003-2005, www.pdfbox.org
+
+Copyright (c) 2003-2005, www.fontbox.org
+
+Copyright (c) 1995-2005 International Business Machines Corporation and others
+
+Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
+
+Copyright 2004 Sun Microsystems, Inc. (Rome JAR)
+
+Copyright 2002-2008 by John Cowan (TagSoup -- http://ccil.org/~cowan/XML/tagsoup/)
+
+Copyright (C) 1994-2007 by the Xiph.org Foundation, http://www.xiph.org/ (OggVorbis)
+
+Copyright 2012 Kohei Taketa juniversalchardet (http://code.google.com/p/juniversalchardet/)
+
+Lasse Collin and others, XZ for Java (http://tukaani.org/xz/java.html)
+
+java-libpst is a pure java library for the reading of Outlook PST and OST files.
+https://github.com/rjohnsondev/java-libpst
+
+JMatIO is a JAVA library to read/write/manipulate with Matlab binary MAT-files.
+http://www.sourceforge.net/projects/jmatio
+
+=========================================================================
+== Language Detection Notices ==
+=========================================================================
+
+The following notices apply to contrib/langid:
+
+This product includes software developed by Cybozu Labs, Inc.
+(c)2010 All rights reserved by Cybozu Labs, Inc.
+http://code.google.com/p/language-detection/
+
+This product includes software developed by the Jsonic project:
+http://sourceforge.jp/projects/jsonic/
+
+=========================================================================
+== Carrot2 Notice ==
+=========================================================================
+Copyright (C) 2002-2010, Dawid Weiss, Stanislaw Osinski.
+Portions (C) Contributors listed in "carrot2.CONTRIBUTORS" file.
+All rights reserved.
+
+This product includes software developed by the Carrot2 Project.
+
+See http://project.carrot2.org/
+
+=========================================================================
+== Guava Notice ==
+=========================================================================
+
+Copyright (C) 2009 Google Inc.
+
+This product includes software developed by the Google Guava project.
+
+See http://code.google.com/p/guava-libraries/
+
+=========================================================================
+== Prettify Notice ==
+=========================================================================
+
+Copyright (C) 2009 Google Inc.
+
+This product includes software developed by the Google Prettify project.
+
+See http://code.google.com/p/google-code-prettify/
+
+=========================================================================
+== Jackson Notice ==
+=========================================================================
+Copyright 2010 FasterXML, LLC
+
+This product includes software developed by the Jackson project.
+
+See http://jackson.codehaus.org/
+
+=========================================================================
+== HSQLDB Notice ==
+=========================================================================
+
+For content, code, and products originally developed by Thomas Mueller and the Hypersonic SQL Group:
+
+Copyright (c) 1995-2000 by the Hypersonic SQL Group.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+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.
+
+Neither the name of the Hypersonic SQL Group 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 HYPERSONIC SQL GROUP,
+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.
+
+This software consists of voluntary contributions made by many individuals on behalf of the
+Hypersonic SQL Group.
+
+For work added by the HSQL Development Group (a.k.a. hsqldb_lic.txt):
+
+Copyright (c) 2001-2005, The HSQL Development Group
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+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.
+
+Neither the name of the HSQL Development Group 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 HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
+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.
+
+=========================================================================
+== Restlet Notice ==
+=========================================================================
+
+Copyright (C) 2005-2014 Restlet S.A.S.
+
+Restlet is a registered trademark of Restlet S.A.S.
+
+This product contains software developed by the Restlet project.
+
+See http://www.restlet.org/
+
+=========================================================================
+== Protocol Buffers Notice ==
+=========================================================================
+
+Protocol Buffers - Google's data interchange format
+Copyright 2008 Google Inc.
+http://code.google.com/apis/protocolbuffers/
+
+=========================================================================
+== SolrTextTagger Notice ==
+=========================================================================
+
+The TaggerRequestHandler and related classes in its package came from the
+OpenSextant Solr Text Tagger,
+Copyright 2013 The MITRE Corporation. All Rights Reserved.
+
+ This software was produced for the U. S. Government
+ under Contract No. W15P7T-11-C-F600, and is
+ subject to the Rights in Noncommercial Computer Software
+ and Noncommercial Computer Software Documentation
+ Clause 252.227-7014 (JUN 1995)
+
+=========================================================================
+== Jose4j Notice ==
+=========================================================================
+
+jose4j
+Copyright 2012-2015 Brian Campbell
+
+EcdsaUsingShaAlgorithm contains code for converting the concatenated
+R & S values of the signature to and from DER, which was originally
+derived from the Apache Santuario XML Security library's SignatureECDSA
+implementation. http://santuario.apache.org/
+
+The Base64 implementation in this software was derived from the
+Apache Commons Codec project. http://commons.apache.org/proper/commons-codec/
+
+JSON processing in this software was derived from the JSON.simple toolkit.
+https://code.google.com/p/json-simple/
diff --git a/solr-8.1.1/README.txt b/solr-8.1.1/README.txt
new file mode 100644
index 000000000..15e9b6090
--- /dev/null
+++ b/solr-8.1.1/README.txt
@@ -0,0 +1,189 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+Welcome to the Apache Solr project!
+-----------------------------------
+
+Solr is the popular, blazing fast open source enterprise search platform
+from the Apache Lucene project.
+
+For a complete description of the Solr project, team composition, source
+code repositories, and other details, please see the Solr web site at
+http://lucene.apache.org/solr
+
+
+Getting Started
+---------------
+
+To start Solr for the first time after installation, simply do:
+
+ bin/solr start
+
+This will launch a standalone Solr server in the background of your shell,
+listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
+which allows you to scale out using sharding and replication. To launch Solr
+in cloud mode, do:
+
+ bin/solr start -cloud
+
+To see all available options for starting Solr, please do:
+
+ bin/solr start -help
+
+After starting Solr, create either a core or collection depending on whether
+Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
+
+ bin/solr create -c <name>
+
+This will create a collection that uses a data-driven schema which tries to guess
+the correct field type when you add documents to the index. To see all available
+options for creating a new collection, execute:
+
+ bin/solr create -help
+
+After starting Solr, direct your Web browser to the Solr Admin Console at:
+
+ http://localhost:8983/solr/
+
+When finished with your Solr installation, shut it down by executing:
+
+ bin/solr stop -all
+
+The `-p PORT` option can also be used to identify the Solr instance to shutdown,
+where more than one Solr is running on the machine.
+
+
+Solr Examples
+---------------
+
+Solr includes a few examples to help you get started. To run a specific example, do:
+
+ bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
+
+ cloud : SolrCloud example
+ dih : Data Import Handler (rdbms, mail, atom, tika)
+ schemaless : Schema-less example (schema is inferred from data during indexing)
+ techproducts : Kitchen sink example providing comprehensive examples of Solr features
+
+For instance, if you want to run the Solr Data Import Handler example, do:
+
+ bin/solr -e dih
+
+
+Indexing Documents
+---------------
+
+To add documents to the index, use bin/post. For example:
+
+ bin/post -c <collection_name> example/exampledocs/*.xml
+
+For more information about Solr examples please read...
+
+ * example/README.txt
+ For more information about the "Solr Home" and Solr specific configuration
+ * https://lucene.apache.org/solr/guide/solr-tutorial.html
+ For a Solr tutorial
+ * http://lucene.apache.org/solr/resources.html
+ For a list of other tutorials and introductory articles.
+
+or linked from "docs/index.html" in a binary distribution.
+
+Also, there are Solr clients for many programming languages, see
+ http://wiki.apache.org/solr/IntegratingSolr
+
+
+Files included in an Apache Solr binary distribution
+----------------------------------------------------
+
+server/
+ A self-contained Solr instance, complete with a sample
+ configuration and documents to index. Please see: bin/solr start -help
+ for more information about starting a Solr server.
+
+example/
+ Contains example documents and an alternative Solr home
+ directory containing examples of how to use the Data Import Handler,
+ see example/example-DIH/README.txt for more information.
+
+dist/solr-<component>-XX.jar
+ The Apache Solr libraries. To compile Apache Solr Plugins,
+ one or more of these will be required. The core library is
+ required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
+ for more information).
+
+docs/index.html
+ A link to the online version of Apache Solr Javadoc API documentation and Tutorial
+
+
+Instructions for Building Apache Solr from Source
+-------------------------------------------------
+
+1. Download the Java SE 8 JDK (Java Development Kit) or later from http://www.oracle.com/java/
+ You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
+ folder included on your command path. To test this, issue a "java -version" command
+ from your shell (command prompt) and verify that the Java version is 1.8 or later.
+
+2. Download the Apache Ant binary distribution (1.8.2+) from
+ http://ant.apache.org/ You will need Ant installed and the $ANT_HOME/bin (Windows:
+ %ANT_HOME%\bin) folder included on your command path. To test this, issue a
+ "ant -version" command from your shell (command prompt) and verify that Ant is
+ available.
+
+ You will also need to install Apache Ivy binary distribution (2.2.0) from
+ http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
+ this step, the Solr build system will offer to do it for you.
+
+3. Download the Apache Solr distribution, linked from the above web site.
+ Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
+ Alternately, you can obtain a copy of the latest Apache Solr source code
+ directly from the GIT repository:
+
+ http://lucene.apache.org/solr/versioncontrol.html
+
+4. Navigate to the "solr" folder and issue an "ant" command to see the available options
+ for building, testing, and packaging Solr.
+
+ NOTE:
+ To see Solr in action, you may want to use the "ant server" command to build
+ and package Solr into the server directory. See also server/README.txt.
+
+
+Export control
+-------------------------------------------------
+This distribution includes cryptographic software. The country in
+which you currently reside may have restrictions on the import,
+possession, use, and/or re-export to another country, of
+encryption software. BEFORE using any encryption software, please
+check your country's laws, regulations and policies concerning the
+import, possession, or use, and re-export of encryption software, to
+see if this is permitted. See <http://www.wassenaar.org/> for more
+information.
+
+The U.S. Government Department of Commerce, Bureau of Industry and
+Security (BIS), has classified this software as Export Commodity
+Control Number (ECCN) 5D002.C.1, which includes information security
+software using or performing cryptographic functions with asymmetric
+algorithms. The form and manner of this Apache Software Foundation
+distribution makes it eligible for export under the License Exception
+ENC Technology Software Unrestricted (TSU) exception (see the BIS
+Export Administration Regulations, Section 740.13) for both object
+code and source code.
+
+The following provides more details on the included cryptographic
+software:
+ Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
+ extracting text content and metadata from encrypted PDF files.
+ See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr-8.1.1/bin/init.d/solr b/solr-8.1.1/bin/init.d/solr
new file mode 100644
index 000000000..e73e0d683
--- /dev/null
+++ b/solr-8.1.1/bin/init.d/solr
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+### BEGIN INIT INFO
+# Provides: solr
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Description: Controls Apache Solr as a Service
+### END INIT INFO
+
+# Example of a very simple *nix init script that delegates commands to the bin/solr script
+# Typical usage is to do:
+#
+# cp bin/init.d/solr /etc/init.d/solr
+# chmod 755 /etc/init.d/solr
+# chown root:root /etc/init.d/solr
+# update-rc.d solr defaults
+# update-rc.d solr enable
+
+# Where you extracted the Solr distribution bundle
+SOLR_INSTALL_DIR="/opt/solr"
+
+if [ ! -d "$SOLR_INSTALL_DIR" ]; then
+ echo "$SOLR_INSTALL_DIR not found! Please check the SOLR_INSTALL_DIR setting in your $0 script."
+ exit 1
+fi
+
+# Path to an include file that defines environment specific settings to override default
+# variables used by the bin/solr script. It's highly recommended to define this script so
+# that you can keep the Solr binary files separated from live files (pid, logs, index data, etc)
+# see bin/solr.in.sh for an example
+SOLR_ENV="/etc/default/solr.in.sh"
+
+if [ ! -f "$SOLR_ENV" ]; then
+ echo "$SOLR_ENV not found! Please check the SOLR_ENV setting in your $0 script."
+ exit 1
+fi
+
+# Specify the user to run Solr as; if not set, then Solr will run as root.
+# Running Solr as root is not recommended for production environments
+RUNAS="solr"
+
+# verify the specified run as user exists
+runas_uid="`id -u "$RUNAS"`"
+if [ $? -ne 0 ]; then
+ echo "User $RUNAS not found! Please create the $RUNAS user before running this script."
+ exit 1
+fi
+
+case "$1" in
+ start|stop|restart|status)
+ SOLR_CMD="$1"
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit
+esac
+
+if [ -n "$RUNAS" ]; then
+ su -c "SOLR_INCLUDE=\"$SOLR_ENV\" \"$SOLR_INSTALL_DIR/bin/solr\" $SOLR_CMD" - "$RUNAS"
+else
+ SOLR_INCLUDE="$SOLR_ENV" "$SOLR_INSTALL_DIR/bin/solr" "$SOLR_CMD"
+fi
diff --git a/solr-8.1.1/bin/install_solr_service.sh b/solr-8.1.1/bin/install_solr_service.sh
new file mode 100644
index 000000000..6cfb6a578
--- /dev/null
+++ b/solr-8.1.1/bin/install_solr_service.sh
@@ -0,0 +1,370 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [[ $EUID -ne 0 ]]; then
+ echo -e "\nERROR: This script must be run as root\n" 1>&2
+ exit 1
+fi
+
+print_usage() {
+ ERROR_MSG="$1"
+
+ if [ "$ERROR_MSG" != "" ]; then
+ echo -e "\nERROR: $ERROR_MSG\n" 1>&2
+ fi
+
+ echo ""
+ echo "Usage: install_solr_service.sh <path_to_solr_distribution_archive> [OPTIONS]"
+ echo ""
+ echo " The first argument to the script must be a path to a Solr distribution archive, such as solr-5.0.0.tgz"
+ echo " (only .tgz or .zip are supported formats for the archive)"
+ echo ""
+ echo " Supported OPTIONS include:"
+ echo ""
+ echo " -d Directory for live / writable Solr files, such as logs, pid files, and index data; defaults to /var/solr"
+ echo ""
+ echo " -i Directory to extract the Solr installation archive; defaults to /opt/"
+ echo " The specified path must exist prior to using this script."
+ echo ""
+ echo " -p Port Solr should bind to; default is 8983"
+ echo ""
+ echo " -s Service name; defaults to solr"
+ echo ""
+ echo " -u User to own the Solr files and run the Solr process as; defaults to solr"
+ echo " This script will create the specified user account if it does not exist."
+ echo ""
+ echo " -f Upgrade Solr. Overwrite symlink and init script of previous installation."
+ echo ""
+ echo " -n Do not start Solr service after install, and do not abort on missing Java"
+ echo ""
+ echo " NOTE: Must be run as the root user"
+ echo ""
+} # end print_usage
+
+print_error() {
+ echo $1
+ exit 1
+}
+
+# Locate *NIX distribution by looking for match from various detection strategies
+# We start with /etc/os-release, as this will also work for Docker containers
+for command in "grep -E \"^NAME=\" /etc/os-release" \
+ "lsb_release -i" \
+ "cat /proc/version" \
+ "uname -a" ; do
+ distro_string=$(eval $command 2>/dev/null)
+ unset distro
+ if [[ ${distro_string,,} == *"debian"* ]]; then
+ distro=Debian
+ elif [[ ${distro_string,,} == *"red hat"* ]]; then
+ distro=RedHat
+ elif [[ ${distro_string,,} == *"centos"* ]]; then
+ distro=CentOS
+ elif [[ ${distro_string,,} == *"ubuntu"* ]]; then
+ distro=Ubuntu
+ elif [[ ${distro_string,,} == *"suse"* ]]; then
+ distro=SUSE
+ elif [[ ${distro_string,,} == *"darwin"* ]]; then
+ echo "Sorry, this script does not support macOS. You'll need to setup Solr as a service manually using the documentation provided in the Solr Reference Guide."
+ echo "You could also try installing via Homebrew (http://brew.sh/), e.g. brew install solr"
+ exit 1
+ fi
+ if [[ $distro ]] ; then break ; fi
+done
+if [[ ! $distro ]] ; then
+ echo -e "\nERROR: Unable to auto-detect your *NIX distribution!\nYou'll need to setup Solr as a service manually using the documentation provided in the Solr Reference Guide.\n" 1>&2
+ exit 1
+fi
+
+if [ -z "$1" ]; then
+ print_usage "Must specify the path to the Solr installation archive, such as solr-5.0.0.tgz"
+ exit 1
+fi
+
+SOLR_ARCHIVE=$1
+if [ ! -f "$SOLR_ARCHIVE" ]; then
+ print_usage "Specified Solr installation archive $SOLR_ARCHIVE not found!"
+ exit 1
+fi
+
+# strip off path info
+SOLR_INSTALL_FILE=${SOLR_ARCHIVE##*/}
+is_tar=true
+if [ ${SOLR_INSTALL_FILE: -4} == ".tgz" ]; then
+ SOLR_DIR=${SOLR_INSTALL_FILE%.tgz}
+elif [ ${SOLR_INSTALL_FILE: -4} == ".zip" ]; then
+ SOLR_DIR=${SOLR_INSTALL_FILE%.zip}
+ is_tar=false
+else
+ print_usage "Solr installation archive $SOLR_ARCHIVE is invalid, expected a .tgz or .zip file!"
+ exit 1
+fi
+
+SOLR_START=true
+if [ $# -gt 1 ]; then
+ shift
+ while true; do
+ case $1 in
+ -i)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "Directory path is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_EXTRACT_DIR=$2
+ shift 2
+ ;;
+ -d)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "Directory path is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_VAR_DIR="$2"
+ shift 2
+ ;;
+ -u)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "Username is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_USER="$2"
+ shift 2
+ ;;
+ -s)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "Service name is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_SERVICE="$2"
+ shift 2
+ ;;
+ -p)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "Port is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_PORT="$2"
+ shift 2
+ ;;
+ -f)
+ SOLR_UPGRADE="YES"
+ shift 1
+ ;;
+ -n)
+ SOLR_START=false
+ shift 1
+ ;;
+ -help|-usage)
+ print_usage ""
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "$1" != "" ]; then
+ print_usage "Unrecognized or misplaced argument: $1!"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ ;;
+ esac
+ done
+fi
+
+# Test for availability of needed tools
+if [[ $is_tar ]] ; then
+ tar --version &>/dev/null || print_error "Script requires the 'tar' command"
+else
+ unzip -hh &>/dev/null || print_error "Script requires the 'unzip' command"
+fi
+if [[ $SOLR_START == "true" ]] ; then
+ service --version &>/dev/null || service --help &>/dev/null || print_error "Script requires the 'service' command"
+ java -version &>/dev/null || print_error "Solr requires java, please install or set JAVA_HOME properly"
+fi
+lsof -h &>/dev/null || echo "We recommend installing the 'lsof' command for more stable start/stop of Solr"
+
+
+if [ -z "$SOLR_EXTRACT_DIR" ]; then
+ SOLR_EXTRACT_DIR=/opt
+fi
+
+if [ ! -d "$SOLR_EXTRACT_DIR" ]; then
+ print_usage "Installation directory $SOLR_EXTRACT_DIR not found! Please create it before running this script."
+ exit 1
+fi
+
+if [ -z "$SOLR_SERVICE" ]; then
+ SOLR_SERVICE=solr
+fi
+
+if [ -z "$SOLR_VAR_DIR" ]; then
+ SOLR_VAR_DIR="/var/$SOLR_SERVICE"
+fi
+
+if [ -z "$SOLR_USER" ]; then
+ SOLR_USER=solr
+fi
+
+if [ -z "$SOLR_PORT" ]; then
+ SOLR_PORT=8983
+fi
+
+if [ -z "$SOLR_UPGRADE" ]; then
+ SOLR_UPGRADE=NO
+fi
+
+if [ ! "$SOLR_UPGRADE" = "YES" ]; then
+ if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then
+ print_usage "/etc/init.d/$SOLR_SERVICE already exists! Perhaps Solr is already setup as a service on this host? To upgrade Solr use the -f option."
+ exit 1
+ fi
+
+ if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then
+ print_usage "$SOLR_EXTRACT_DIR/$SOLR_SERVICE already exists! Please move this directory / link or choose a different service name using the -s option."
+ exit 1
+ fi
+fi
+
+# stop running instance
+if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then
+ echo -e "\nStopping Solr instance if exists ...\n"
+ service "$SOLR_SERVICE" stop
+fi
+
+# create user if not exists
+solr_uid="`id -u "$SOLR_USER"`"
+if [ $? -ne 0 ]; then
+ echo "Creating new user: $SOLR_USER"
+ if [ "$distro" == "RedHat" ] || [ "$distro" == "CentOS" ] ; then
+ adduser --system -U -m --home-dir "$SOLR_VAR_DIR" "$SOLR_USER"
+ elif [ "$distro" == "SUSE" ]; then
+ useradd --system -U -m --home-dir "$SOLR_VAR_DIR" "$SOLR_USER"
+ else
+ adduser --system --shell /bin/bash --group --disabled-password --home "$SOLR_VAR_DIR" "$SOLR_USER"
+ fi
+fi
+
+# extract
+SOLR_INSTALL_DIR="$SOLR_EXTRACT_DIR/$SOLR_DIR"
+if [ ! -d "$SOLR_INSTALL_DIR" ]; then
+
+ echo -e "\nExtracting $SOLR_ARCHIVE to $SOLR_EXTRACT_DIR\n"
+
+ if $is_tar ; then
+ tar zxf "$SOLR_ARCHIVE" -C "$SOLR_EXTRACT_DIR"
+ else
+ unzip -q "$SOLR_ARCHIVE" -d "$SOLR_EXTRACT_DIR"
+ fi
+
+ if [ ! -d "$SOLR_INSTALL_DIR" ]; then
+ echo -e "\nERROR: Expected directory $SOLR_INSTALL_DIR not found after extracting $SOLR_ARCHIVE ... script fails.\n" 1>&2
+ exit 1
+ fi
+
+ chown -R root: "$SOLR_INSTALL_DIR"
+ find "$SOLR_INSTALL_DIR" -type d -print0 | xargs -0 chmod 0755
+ find "$SOLR_INSTALL_DIR" -type f -print0 | xargs -0 chmod 0644
+ chmod -R 0755 "$SOLR_INSTALL_DIR/bin"
+else
+ echo -e "\nWARNING: $SOLR_INSTALL_DIR already exists! Skipping extract ...\n"
+fi
+
+# create a symlink for easier scripting
+if [ -h "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then
+ echo -e "\nRemoving old symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE ...\n"
+ rm "$SOLR_EXTRACT_DIR/$SOLR_SERVICE"
+fi
+if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then
+ echo -e "\nWARNING: $SOLR_EXTRACT_DIR/$SOLR_SERVICE is not symlink! Skipping symlink update ...\n"
+else
+ echo -e "\nInstalling symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE -> $SOLR_INSTALL_DIR ...\n"
+ ln -s "$SOLR_INSTALL_DIR" "$SOLR_EXTRACT_DIR/$SOLR_SERVICE"
+fi
+
+# install init.d script
+echo -e "\nInstalling /etc/init.d/$SOLR_SERVICE script ...\n"
+cp "$SOLR_INSTALL_DIR/bin/init.d/solr" "/etc/init.d/$SOLR_SERVICE"
+chmod 0744 "/etc/init.d/$SOLR_SERVICE"
+chown root: "/etc/init.d/$SOLR_SERVICE"
+# do some basic variable substitution on the init.d script
+sed_expr1="s#SOLR_INSTALL_DIR=.*#SOLR_INSTALL_DIR=\"$SOLR_EXTRACT_DIR/$SOLR_SERVICE\"#"
+sed_expr2="s#SOLR_ENV=.*#SOLR_ENV=\"/etc/default/$SOLR_SERVICE.in.sh\"#"
+sed_expr3="s#RUNAS=.*#RUNAS=\"$SOLR_USER\"#"
+sed_expr4="s#Provides:.*#Provides: $SOLR_SERVICE#"
+sed -i -e "$sed_expr1" -e "$sed_expr2" -e "$sed_expr3" -e "$sed_expr4" "/etc/init.d/$SOLR_SERVICE"
+
+# install/move configuration
+if [ ! -d /etc/default ]; then
+ mkdir /etc/default
+ chown root: /etc/default
+ chmod 0755 /etc/default
+fi
+if [ -f "$SOLR_VAR_DIR/solr.in.sh" ]; then
+ echo -e "\nMoving existing $SOLR_VAR_DIR/solr.in.sh to /etc/default/$SOLR_SERVICE.in.sh ...\n"
+ mv "$SOLR_VAR_DIR/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh"
+elif [ -f "/etc/default/$SOLR_SERVICE.in.sh" ]; then
+ echo -e "\n/etc/default/$SOLR_SERVICE.in.sh already exist. Skipping install ...\n"
+else
+ echo -e "\nInstalling /etc/default/$SOLR_SERVICE.in.sh ...\n"
+ cp "$SOLR_INSTALL_DIR/bin/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh"
+ mv "$SOLR_INSTALL_DIR/bin/solr.in.sh" "$SOLR_INSTALL_DIR/bin/solr.in.sh.orig"
+ mv "$SOLR_INSTALL_DIR/bin/solr.in.cmd" "$SOLR_INSTALL_DIR/bin/solr.in.cmd.orig"
+ echo "SOLR_PID_DIR=\"$SOLR_VAR_DIR\"
+SOLR_HOME=\"$SOLR_VAR_DIR/data\"
+LOG4J_PROPS=\"$SOLR_VAR_DIR/log4j2.xml\"
+SOLR_LOGS_DIR=\"$SOLR_VAR_DIR/logs\"
+SOLR_PORT=\"$SOLR_PORT\"
+" >> "/etc/default/$SOLR_SERVICE.in.sh"
+fi
+chown root:${SOLR_USER} "/etc/default/$SOLR_SERVICE.in.sh"
+chmod 0640 "/etc/default/$SOLR_SERVICE.in.sh"
+
+# install data directories and files
+mkdir -p "$SOLR_VAR_DIR/data"
+mkdir -p "$SOLR_VAR_DIR/logs"
+if [ -f "$SOLR_VAR_DIR/data/solr.xml" ]; then
+ echo -e "\n$SOLR_VAR_DIR/data/solr.xml already exists. Skipping install ...\n"
+else
+ cp "$SOLR_INSTALL_DIR/server/solr/"{solr.xml,zoo.cfg} "$SOLR_VAR_DIR/data/"
+fi
+if [ -f "$SOLR_VAR_DIR/log4j2.xml" ]; then
+ echo -e "\n$SOLR_VAR_DIR/log4j2.xml already exists. Skipping install ...\n"
+else
+ cp "$SOLR_INSTALL_DIR/server/resources/log4j2.xml" "$SOLR_VAR_DIR/log4j2.xml"
+fi
+chown -R "$SOLR_USER:" "$SOLR_VAR_DIR"
+find "$SOLR_VAR_DIR" -type d -print0 | xargs -0 chmod 0750
+find "$SOLR_VAR_DIR" -type f -print0 | xargs -0 chmod 0640
+
+# configure autostart of service
+if [[ "$distro" == "RedHat" || "$distro" == "CentOS" || "$distro" == "SUSE" ]]; then
+ chkconfig "$SOLR_SERVICE" on
+else
+ update-rc.d "$SOLR_SERVICE" defaults
+fi
+echo "Service $SOLR_SERVICE installed."
+echo "Customize Solr startup configuration in /etc/default/$SOLR_SERVICE.in.sh"
+
+# start service
+if [[ $SOLR_START == "true" ]] ; then
+ service "$SOLR_SERVICE" start
+ sleep 5
+ service "$SOLR_SERVICE" status
+else
+ echo "Not starting Solr service (option -n given). Start manually with 'service $SOLR_SERVICE start'"
+fi
diff --git a/solr-8.1.1/bin/oom_solr.sh b/solr-8.1.1/bin/oom_solr.sh
new file mode 100644
index 000000000..5ecba6bc3
--- /dev/null
+++ b/solr-8.1.1/bin/oom_solr.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SOLR_PORT=$1
+SOLR_LOGS_DIR=$2
+SOLR_PID=`ps auxww | grep start.jar | grep $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r`
+if [ -z "$SOLR_PID" ]; then
+ echo "Couldn't find Solr process running on port $SOLR_PORT!"
+ exit
+fi
+NOW=$(date +"%F_%H_%M_%S")
+(
+echo "Running OOM killer script for process $SOLR_PID for Solr on port $SOLR_PORT"
+kill -9 $SOLR_PID
+echo "Killed process $SOLR_PID"
+) | tee $SOLR_LOGS_DIR/solr_oom_killer-$SOLR_PORT-$NOW.log
diff --git a/solr-8.1.1/bin/post b/solr-8.1.1/bin/post
new file mode 100644
index 000000000..4c629d105
--- /dev/null
+++ b/solr-8.1.1/bin/post
@@ -0,0 +1,239 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# ====== Common code copied/adapted from bin/solr (TODO: centralize/share this kind of thing across bin/solr, etc)
+
+THIS_SCRIPT="$0"
+
+# Resolve symlinks to this script
+while [ -h "$THIS_SCRIPT" ] ; do
+ ls=`ls -ld "$THIS_SCRIPT"`
+ # Drop everything prior to ->
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ THIS_SCRIPT="$link"
+ else
+ THIS_SCRIPT=`dirname "$THIS_SCRIPT"`/"$link"
+ fi
+done
+
+SOLR_TIP=`dirname "$THIS_SCRIPT"`/..
+SOLR_TIP=`cd "$SOLR_TIP"; pwd`
+
+if [ -n "$SOLR_JAVA_HOME" ]; then
+ JAVA="$SOLR_JAVA_HOME/bin/java"
+elif [ -n "$JAVA_HOME" ]; then
+ for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
+ if [ -x "$java" ]; then
+ JAVA="$java"
+ break
+ fi
+ done
+else
+ JAVA=java
+fi
+
+# test that Java exists and is executable on this server
+"$JAVA" -version >/dev/null 2>&1 || { echo >&2 "Java is required to run this tool! Please install Java 8 or greater before running this script."; exit 1; }
+
+
+# ===== post specific code
+
+TOOL_JAR=("$SOLR_TIP/dist"/solr-core-*.jar)
+
+function print_usage() {
+ echo ""
+ echo 'Usage: post -c <collection> [OPTIONS] <files|directories|urls|-d ["...",...]>'
+ echo " or post -help"
+ echo ""
+ echo " collection name defaults to DEFAULT_SOLR_COLLECTION if not specified"
+ echo ""
+ echo "OPTIONS"
+ echo "======="
+ echo " Solr options:"
+ echo " -url <base Solr update URL> (overrides collection, host, and port)"
+ echo " -host <host> (default: localhost)"
+ echo " -p or -port <port> (default: 8983)"
+ echo " -commit yes|no (default: yes)"
+ echo " -u or -user <user:pass> (sets BasicAuth credentials)"
+ # optimize intentionally omitted, but can be used as '-optimize yes' (default: no)
+ echo ""
+ echo " Web crawl options:"
+ echo " -recursive <depth> (default: 1)"
+ echo " -delay <seconds> (default: 10)"
+ echo ""
+ echo " Directory crawl options:"
+ echo " -delay <seconds> (default: 0)"
+ echo ""
+ echo " stdin/args options:"
+ echo " -type <content/type> (default: application/xml)"
+ echo ""
+ echo " Other options:"
+ echo " -filetypes <type>[,<type>,...] (default: xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)"
+ echo " -params \"<key>=<value>[&<key>=<value>...]\" (values must be URL-encoded; these pass through to Solr update request)"
+ echo " -out yes|no (default: no; yes outputs Solr response to console)"
+ echo " -format solr (sends application/json content as Solr commands to /update instead of /update/json/docs)"
+ echo ""
+ echo ""
+ echo "Examples:"
+ echo ""
+ echo "* JSON file: $THIS_SCRIPT -c wizbang events.json"
+ echo "* XML files: $THIS_SCRIPT -c records article*.xml"
+ echo "* CSV file: $THIS_SCRIPT -c signals LATEST-signals.csv"
+ echo "* Directory of files: $THIS_SCRIPT -c myfiles ~/Documents"
+ echo "* Web crawl: $THIS_SCRIPT -c gettingstarted http://lucene.apache.org/solr -recursive 1 -delay 1"
+ echo "* Standard input (stdin): echo '{"commit": {}}' | $THIS_SCRIPT -c my_collection -type application/json -out yes -d"
+ echo "* Data as string: $THIS_SCRIPT -c signals -type text/csv -out yes -d $'id,value\n1,0.47'"
+ echo ""
+} # end print_usage
+
+if [[ $# -eq 1 && ("$1" == "-help" || "$1" == "-h" || "$1" == "-usage") ]]; then
+ print_usage
+ exit
+fi
+
+
+COLLECTION="$DEFAULT_SOLR_COLLECTION"
+PROPS=('-Dauto=yes')
+RECURSIVE=""
+FILES=()
+URLS=()
+ARGS=()
+
+while [ $# -gt 0 ]; do
+ # TODO: natively handle the optional parameters to SPT
+ # but for now they can be specified as bin/post -c collection-name delay=5 http://lucidworks.com
+
+ if [[ -d "$1" ]]; then
+ # Directory
+# echo "$1: DIRECTORY"
+ RECURSIVE=yes
+ FILES+=("$1")
+ elif [[ -f "$1" ]]; then
+ # File
+# echo "$1: FILE"
+ FILES+=("$1")
+ elif [[ "$1" == http* ]]; then
+ # URL
+# echo "$1: URL"
+ URLS+=("$1")
+ else
+ if [[ "$1" == -* ]]; then
+ if [[ "$1" == "-c" ]]; then
+ # Special case, pull out collection name
+ shift
+ COLLECTION="$1"
+ elif [[ "$1" == "-p" ]]; then
+ # -p alias for -port for convenience and compatibility with `bin/solr start`
+ shift
+ PROPS+=("-Dport=$1")
+ elif [[ ("$1" == "-d" || "$1" == "--data" || "$1" == "-") ]]; then
+ if [[ ! -t 0 ]]; then
+ MODE="stdin"
+ else
+ # when no stdin exists and -d specified, the rest of the arguments
+ # are assumed to be strings to post as-is
+ MODE="args"
+ shift
+ if [[ $# -gt 0 ]]; then
+ ARGS=("$@")
+ shift $#
+ else
+ # SPT needs a valid args string, useful for 'bin/post -c foo -d' to force a commit
+ ARGS+=("<add/>")
+ fi
+ fi
+ elif [[ ("$1" == "-u" || "$1" == "-user") ]]; then
+ shift
+ PROPS+=("-Dbasicauth=$1")
+ else
+ if [[ "$1" == -D* ]] ; then
+ PROPS+=("$1")
+ if [[ "${1:2:4}" == "url=" ]]; then
+ SOLR_URL=${1:6}
+ fi
+ else
+ key="${1:1}"
+ shift
+ # echo "$1: PROP"
+ PROPS+=("-D$key=$1")
+ if [[ "$key" == "url" ]]; then
+ SOLR_URL=$1
+ fi
+ fi
+ fi
+ else
+ echo -e "\nUnrecognized argument: $1\n"
+ echo -e "If this was intended to be a data file, it does not exist relative to $PWD\n"
+ exit 1
+ fi
+ fi
+ shift
+done
+
+# Check for errors
+if [[ $COLLECTION == "" && $SOLR_URL == "" ]]; then
+ echo -e "\nCollection or URL must be specified. Use -c <collection name> or set DEFAULT_SOLR_COLLECTION in your environment, or use -url instead.\n"
+ echo -e "See '$THIS_SCRIPT -h' for usage instructions.\n"
+ exit 1
+fi
+
+# Unsupported: bin/post -c foo
+if [[ ${#FILES[@]} == 0 && ${#URLS[@]} == 0 && $MODE != "stdin" && $MODE != "args" ]]; then
+ echo -e "\nNo files, directories, URLs, -d strings, or stdin were specified.\n"
+ echo -e "See '$THIS_SCRIPT -h' for usage instructions.\n"
+ exit 1
+fi
+
+# SPT does not support mixing different data mode types, just files, just URLs, just stdin, or just argument strings.
+# The following are unsupported constructs:
+# bin/post -c foo existing_file.csv http://example.com
+# echo '<xml.../>' | bin/post -c foo existing_file.csv
+# bin/post -c foo existing_file.csv -d 'anything'
+if [[ (${#FILES[@]} != 0 && ${#URLS[@]} != 0 && $MODE != "stdin" && $MODE != "args")
+ || ((${#FILES[@]} != 0 || ${#URLS[@]} != 0) && ($MODE == "stdin" || $MODE == "args")) ]]; then
+ echo -e "\nCombining files/directories, URLs, stdin, or args is not supported. Post them separately.\n"
+ exit 1
+fi
+
+PARAMS=""
+
+# TODO: let's simplify this
+if [[ $MODE != "stdin" && $MODE != "args" ]]; then
+ if [[ $FILES != "" ]]; then
+ MODE="files"
+ PARAMS=("${FILES[@]}")
+ fi
+
+ if [[ $URLS != "" ]]; then
+ MODE="web"
+ PARAMS=("${URLS[@]}")
+ fi
+else
+ PARAMS=("${ARGS[@]}")
+fi
+
+PROPS+=("-Dc=$COLLECTION" "-Ddata=$MODE")
+if [[ -n "$RECURSIVE" ]]; then
+ PROPS+=('-Drecursive=yes')
+fi
+
+echo "$JAVA" -classpath "${TOOL_JAR[0]}" "${PROPS[@]}" org.apache.solr.util.SimplePostTool "${PARAMS[@]}"
+"$JAVA" -classpath "${TOOL_JAR[0]}" "${PROPS[@]}" org.apache.solr.util.SimplePostTool "${PARAMS[@]}"
+
+# post smoker:
+# bin/post -c signals -out yes -type application/json -d '[{"id": 2, "val": 0.47}]'
+# bin/post -c signals -out yes -params "wt=json" -d '<add><doc><field name="id">1</field></doc></add>'
diff --git a/solr-8.1.1/bin/solr b/solr-8.1.1/bin/solr
new file mode 100644
index 000000000..81e98a526
--- /dev/null
+++ b/solr-8.1.1/bin/solr
@@ -0,0 +1,2175 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# CONTROLLING STARTUP:
+#
+# Use solr -help to see available command-line options. In addition
+# to passing command-line options, this script looks for an include
+# file named solr.in.sh to set environment variables. Specifically,
+# the following locations are searched in this order:
+#
+# ./
+# $HOME/.solr.in.sh
+# /usr/share/solr
+# /usr/local/share/solr
+# /var/solr/
+# /opt/solr
+#
+# Another option is to specify the full path to the include file in the
+# environment. For example:
+#
+# $ SOLR_INCLUDE=/path/to/solr.in.sh solr start
+#
+# Note: This is particularly handy for running multiple instances on a
+# single installation, or for quick tests.
+#
+# Finally, developers and enthusiasts who frequently run from an SVN
+# checkout, and do not want to locally modify bin/solr.in.sh, can put
+# a customized include file at ~/.solr.in.sh.
+#
+# If you would rather configure startup entirely from the environment, you
+# can disable the include by exporting an empty SOLR_INCLUDE, or by
+# ensuring that no include files exist in the aforementioned search list.
+
+SOLR_SCRIPT="$0"
+verbose=false
+THIS_OS=`uname -s`
+
+# What version of Java is required to run this version of Solr.
+JAVA_VER_REQ="8"
+
+stop_all=false
+
+# for now, we don't support running this script from cygwin due to problems
+# like not having lsof, ps auxww, curl, and awkward directory handling
+if [ "${THIS_OS:0:6}" == "CYGWIN" ]; then
+ echo -e "This script does not support cygwin due to severe limitations and lack of adherence\nto BASH standards, such as lack of lsof, curl, and ps options.\n\nPlease use the native solr.cmd script on Windows!"
+ exit 1
+fi
+
+# Resolve symlinks to this script
+while [ -h "$SOLR_SCRIPT" ] ; do
+ ls=`ls -ld "$SOLR_SCRIPT"`
+ # Drop everything prior to ->
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ SOLR_SCRIPT="$link"
+ else
+ SOLR_SCRIPT=`dirname "$SOLR_SCRIPT"`/"$link"
+ fi
+done
+
+SOLR_TIP=`dirname "$SOLR_SCRIPT"`/..
+SOLR_TIP=`cd "$SOLR_TIP"; pwd`
+DEFAULT_SERVER_DIR="$SOLR_TIP/server"
+
+# If an include wasn't specified in the environment, then search for one...
+if [ -z "$SOLR_INCLUDE" ]; then
+ # Locations (in order) to use when searching for an include file.
+ for include in "`dirname "$0"`/solr.in.sh" \
+ "$HOME/.solr.in.sh" \
+ /usr/share/solr/solr.in.sh \
+ /usr/local/share/solr/solr.in.sh \
+ /etc/default/solr.in.sh \
+ /opt/solr/solr.in.sh; do
+ if [ -r "$include" ]; then
+ SOLR_INCLUDE="$include"
+ . "$include"
+ break
+ fi
+ done
+elif [ -r "$SOLR_INCLUDE" ]; then
+ . "$SOLR_INCLUDE"
+fi
+
+if [ -z "$SOLR_PID_DIR" ]; then
+ SOLR_PID_DIR="$SOLR_TIP/bin"
+fi
+
+if [ -n "$SOLR_JAVA_HOME" ]; then
+ JAVA="$SOLR_JAVA_HOME/bin/java"
+elif [ -n "$JAVA_HOME" ]; then
+ for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
+ if [ -x "$java" ]; then
+ JAVA="$java"
+ break
+ fi
+ done
+ if [ -z "$JAVA" ]; then
+ echo >&2 "The currently defined JAVA_HOME ($JAVA_HOME) refers"
+ echo >&2 "to a location where Java could not be found. Aborting."
+ echo >&2 "Either fix the JAVA_HOME variable or remove it from the"
+ echo >&2 "environment so that the system PATH will be searched."
+ exit 1
+ fi
+else
+ JAVA=java
+fi
+
+if [ -z "$SOLR_STOP_WAIT" ]; then
+ SOLR_STOP_WAIT=180
+fi
+# test that Java exists, is executable and correct version
+JAVA_VER=$("$JAVA" -version 2>&1)
+if [[ $? -ne 0 ]] ; then
+ echo >&2 "Java not found, or an error was encountered when running java."
+ echo >&2 "A working Java $JAVA_VER_REQ JRE is required to run Solr!"
+ echo >&2 "Please install latest version of Java $JAVA_VER_REQ or set JAVA_HOME properly."
+ echo >&2 "Command that we tried: '${JAVA} -version', with response:"
+ echo >&2 "${JAVA_VER}"
+ echo >&2
+ echo >&2 "Debug information:"
+ echo >&2 "JAVA_HOME: ${JAVA_HOME:-N/A}"
+ echo >&2 "Active Path:"
+ echo >&2 "${PATH}"
+ exit 1
+else
+ JAVA_VER_NUM=$(echo $JAVA_VER | head -1 | awk -F '"' '/version/ {print $2}' | sed -e's/^1\.//' | sed -e's/[._-].*$//')
+ if [[ "$JAVA_VER_NUM" -lt "$JAVA_VER_REQ" ]] ; then
+ echo >&2 "Your current version of Java is too old to run this version of Solr."
+ echo >&2 "We found major version $JAVA_VER_NUM, using command '${JAVA} -version', with response:"
+ echo >&2 "${JAVA_VER}"
+ echo >&2
+ echo >&2 "Please install latest version of Java $JAVA_VER_REQ or set JAVA_HOME properly."
+ echo >&2
+ echo >&2 "Debug information:"
+ echo >&2 "JAVA_HOME: ${JAVA_HOME:-N/A}"
+ echo >&2 "Active Path:"
+ echo >&2 "${PATH}"
+ exit 1
+ fi
+ JAVA_VENDOR="Oracle"
+ if [ "`echo $JAVA_VER | grep -i "IBM J9"`" != "" ]; then
+ JAVA_VENDOR="IBM J9"
+ fi
+fi
+
+
+# Select HTTP OR HTTPS related configurations
+SOLR_URL_SCHEME=http
+SOLR_JETTY_CONFIG=()
+SOLR_SSL_OPTS=""
+
+if [ -n "$SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH" ]; then
+ SOLR_SSL_OPTS+=" -Dhadoop.security.credential.provider.path=$SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH"
+fi
+
+if [ -z "$SOLR_SSL_ENABLED" ]; then
+ if [ -n "$SOLR_SSL_KEY_STORE" ]; then
+ SOLR_SSL_ENABLED="true" # implicitly from earlier behaviour
+ else
+ SOLR_SSL_ENABLED="false"
+ fi
+fi
+if [ "$SOLR_SSL_ENABLED" == "true" ]; then
+ if [[ "$JAVA_VER_NUM" -lt "9" ]] ; then
+ echo >&2 "HTTP/2 + SSL is not support in Java 8. "
+ echo >&2 "Configure Solr with HTTP/1.1 + SSL"
+ SOLR_JETTY_CONFIG+=("--module=https8")
+ else
+ SOLR_JETTY_CONFIG+=("--module=https")
+ fi
+
+ SOLR_JETTY_CONFIG+=("--lib=$DEFAULT_SERVER_DIR/solr-webapp/webapp/WEB-INF/lib/*")
+ SOLR_URL_SCHEME=https
+ if [ -n "$SOLR_SSL_KEY_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.keystore=$SOLR_SSL_KEY_STORE"
+ fi
+ if [ -n "$SOLR_SSL_KEY_STORE_PASSWORD" ]; then
+ export SOLR_SSL_KEY_STORE_PASSWORD=$SOLR_SSL_KEY_STORE_PASSWORD
+ fi
+ if [ -n "$SOLR_SSL_KEY_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.keystore.type=$SOLR_SSL_KEY_STORE_TYPE"
+ fi
+
+ if [ -n "$SOLR_SSL_TRUST_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.truststore=$SOLR_SSL_TRUST_STORE"
+ fi
+ if [ -n "$SOLR_SSL_TRUST_STORE_PASSWORD" ]; then
+ export SOLR_SSL_TRUST_STORE_PASSWORD=$SOLR_SSL_TRUST_STORE_PASSWORD
+ fi
+ if [ -n "$SOLR_SSL_TRUST_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.truststore.type=$SOLR_SSL_TRUST_STORE_TYPE"
+ fi
+
+ if [ -n "$SOLR_SSL_NEED_CLIENT_AUTH" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.ssl.needClientAuth=$SOLR_SSL_NEED_CLIENT_AUTH"
+ fi
+ if [ -n "$SOLR_SSL_WANT_CLIENT_AUTH" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.jetty.ssl.wantClientAuth=$SOLR_SSL_WANT_CLIENT_AUTH"
+ fi
+
+ if [ -n "$SOLR_SSL_CLIENT_KEY_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.keyStore=$SOLR_SSL_CLIENT_KEY_STORE"
+
+ if [ -n "$SOLR_SSL_CLIENT_KEY_STORE_PASSWORD" ]; then
+ export SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=$SOLR_SSL_CLIENT_KEY_STORE_PASSWORD
+ fi
+ if [ -n "$SOLR_SSL_CLIENT_KEY_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.keyStoreType=$SOLR_SSL_CLIENT_KEY_STORE_TYPE"
+ fi
+ else
+ if [ -n "$SOLR_SSL_KEY_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.keyStore=$SOLR_SSL_KEY_STORE"
+ fi
+ if [ -n "$SOLR_SSL_KEY_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.keyStoreType=$SOLR_SSL_KEY_STORE_TYPE"
+ fi
+ fi
+
+ if [ -n "$SOLR_SSL_CHECK_PEER_NAME" ]; then
+ SOLR_SSL_OPTS+=" -Dsolr.ssl.checkPeerName=$SOLR_SSL_CHECK_PEER_NAME"
+ fi
+
+ if [ -n "$SOLR_SSL_CLIENT_TRUST_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.trustStore=$SOLR_SSL_CLIENT_TRUST_STORE"
+
+ if [ -n "$SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD" ]; then
+ export SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD=$SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD
+ fi
+ if [ -n "$SOLR_SSL_CLIENT_TRUST_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.trustStoreType=$SOLR_SSL_CLIENT_TRUST_STORE_TYPE"
+ fi
+ else
+ if [ -n "$SOLR_SSL_TRUST_STORE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.trustStore=$SOLR_SSL_TRUST_STORE"
+ fi
+
+ if [ -n "$SOLR_SSL_TRUST_STORE_TYPE" ]; then
+ SOLR_SSL_OPTS+=" -Djavax.net.ssl.trustStoreType=$SOLR_SSL_TRUST_STORE_TYPE"
+ fi
+ fi
+else
+ SOLR_JETTY_CONFIG+=("--module=http")
+fi
+
+# Authentication options
+if [ -z "$SOLR_AUTH_TYPE" ] && [ -n "$SOLR_AUTHENTICATION_OPTS" ]; then
+ echo "WARNING: SOLR_AUTHENTICATION_OPTS environment variable configured without associated SOLR_AUTH_TYPE variable"
+ echo " Please configure SOLR_AUTH_TYPE environment variable with the authentication type to be used."
+ echo " Currently supported authentication types are [kerberos, basic]"
+fi
+
+if [ -n "$SOLR_AUTH_TYPE" ] && [ -n "$SOLR_AUTHENTICATION_CLIENT_BUILDER" ]; then
+ echo "WARNING: SOLR_AUTHENTICATION_CLIENT_BUILDER and SOLR_AUTH_TYPE environment variables are configured together."
+ echo " Use SOLR_AUTH_TYPE environment variable to configure authentication type to be used. "
+ echo " Currently supported authentication types are [kerberos, basic]"
+ echo " The value of SOLR_AUTHENTICATION_CLIENT_BUILDER environment variable will be ignored"
+fi
+
+if [ -n "$SOLR_AUTH_TYPE" ]; then
+ case "$(echo $SOLR_AUTH_TYPE | awk '{print tolower($0)}')" in
+ basic)
+ SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory"
+ ;;
+ kerberos)
+ SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.impl.Krb5HttpClientBuilder"
+ ;;
+ *)
+ echo "ERROR: Value specified for SOLR_AUTH_TYPE environment variable is invalid."
+ exit 1
+ esac
+fi
+
+if [ "$SOLR_AUTHENTICATION_CLIENT_CONFIGURER" != "" ]; then
+ echo "WARNING: Found unsupported configuration variable SOLR_AUTHENTICATION_CLIENT_CONFIGURER"
+ echo " Please start using SOLR_AUTH_TYPE instead"
+fi
+if [ "$SOLR_AUTHENTICATION_CLIENT_BUILDER" != "" ]; then
+ AUTHC_CLIENT_BUILDER_ARG="-Dsolr.httpclient.builder.factory=$SOLR_AUTHENTICATION_CLIENT_BUILDER"
+fi
+AUTHC_OPTS="$AUTHC_CLIENT_BUILDER_ARG $SOLR_AUTHENTICATION_OPTS"
+
+# Set the SOLR_TOOL_HOST variable for use when connecting to a running Solr instance
+if [ "$SOLR_HOST" != "" ]; then
+ SOLR_TOOL_HOST="$SOLR_HOST"
+else
+ SOLR_TOOL_HOST="localhost"
+fi
+
+function print_usage() {
+ CMD="$1"
+ ERROR_MSG="$2"
+
+ if [ "$ERROR_MSG" != "" ]; then
+ echo -e "\nERROR: $ERROR_MSG\n"
+ fi
+
+ if [ -z "$CMD" ]; then
+ echo ""
+ echo "Usage: solr COMMAND OPTIONS"
+ echo " where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling"
+ echo ""
+ echo " Standalone server example (start Solr running in the background on port 8984):"
+ echo ""
+ echo " ./solr start -p 8984"
+ echo ""
+ echo " SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):"
+ echo ""
+ echo " ./solr start -c -m 1g -z localhost:2181 -a \"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044\""
+ echo ""
+ echo " Omit '-z localhost:2181' from the above command if you have defined ZK_HOST in solr.in.sh."
+ echo ""
+ echo "Pass -help after any COMMAND to see command-specific usage information,"
+ echo " such as: ./solr start -help or ./solr stop -help"
+ echo ""
+ elif [[ "$CMD" == "start" || "$CMD" == "restart" ]]; then
+ echo ""
+ echo "Usage: solr $CMD [-f] [-c] [-h hostname] [-p port] [-d directory] [-z zkHost] [-m memory] [-e example] [-s solr.solr.home] [-t solr.data.home] [-a \"additional-options\"] [-V]"
+ echo ""
+ echo " -f Start Solr in foreground; default starts Solr in the background"
+ echo " and sends stdout / stderr to solr-PORT-console.log"
+ echo ""
+ echo " -c or -cloud Start Solr in SolrCloud mode; if -z not supplied and ZK_HOST not defined in"
+ echo " solr.in.sh, an embedded ZooKeeper instance is started on Solr port+1000,"
+ echo " such as 9983 if Solr is bound to 8983"
+ echo ""
+ echo " -h <host> Specify the hostname for this Solr instance"
+ echo ""
+ echo " -p <port> Specify the port to start the Solr HTTP listener on; default is 8983"
+ echo " The specified port (SOLR_PORT) will also be used to determine the stop port"
+ echo " STOP_PORT=(\$SOLR_PORT-1000) and JMX RMI listen port RMI_PORT=(\$SOLR_PORT+10000). "
+ echo " For instance, if you set -p 8985, then the STOP_PORT=7985 and RMI_PORT=18985"
+ echo ""
+ echo " -d <dir> Specify the Solr server directory; defaults to server"
+ echo ""
+ echo " -z <zkHost> Zookeeper connection string; only used when running in SolrCloud mode using -c"
+ echo " If neither ZK_HOST is defined in solr.in.sh nor the -z parameter is specified,"
+ echo " an embedded ZooKeeper instance will be launched."
+ echo ""
+ echo " -m <memory> Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g"
+ echo " results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m"
+ echo ""
+ echo " -s <dir> Sets the solr.solr.home system property; Solr will create core directories under"
+ echo " this directory. This allows you to run multiple Solr instances on the same host"
+ echo " while reusing the same server directory set using the -d parameter. If set, the"
+ echo " specified directory should contain a solr.xml file, unless solr.xml exists in Zookeeper."
+ echo " This parameter is ignored when running examples (-e), as the solr.solr.home depends"
+ echo " on which example is run. The default value is server/solr. If passed relative dir,"
+ echo " validation with current dir will be done, before trying default server/<dir>"
+ echo ""
+ echo " -t <dir> Sets the solr.data.home system property, where Solr will store index data in <instance_dir>/data subdirectories."
+ echo " If not set, Solr uses solr.solr.home for config and data."
+ echo ""
+ echo " -e <example> Name of the example to run; available examples:"
+ echo " cloud: SolrCloud example"
+ echo " techproducts: Comprehensive example illustrating many of Solr's core capabilities"
+ echo " dih: Data Import Handler"
+ echo " schemaless: Schema-less example"
+ echo ""
+ echo " -a Additional parameters to pass to the JVM when starting Solr, such as to setup"
+ echo " Java debug options. For example, to enable a Java debugger to attach to the Solr JVM"
+ echo " you could pass: -a \"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18983\""
+ echo " In most cases, you should wrap the additional parameters in double quotes."
+ echo ""
+ echo " -j Additional parameters to pass to Jetty when starting Solr."
+ echo " For example, to add configuration folder that jetty should read"
+ echo " you could pass: -j \"--include-jetty-dir=/etc/jetty/custom/server/\""
+ echo " In most cases, you should wrap the additional parameters in double quotes."
+ echo ""
+ echo " -noprompt Don't prompt for input; accept all defaults when running examples that accept user input"
+ echo ""
+ echo " -v and -q Verbose (-v) or quiet (-q) logging. Sets default log level to DEBUG or WARN instead of INFO"
+ echo ""
+ echo " -V/-verbose Verbose messages from this script"
+ echo ""
+ elif [ "$CMD" == "stop" ]; then
+ echo ""
+ echo "Usage: solr stop [-k key] [-p port] [-V]"
+ echo ""
+ echo " -k <key> Stop key; default is solrrocks"
+ echo ""
+ echo " -p <port> Specify the port the Solr HTTP listener is bound to"
+ echo ""
+ echo " -all Find and stop all running Solr servers on this host"
+ echo ""
+ echo " -V/-verbose Verbose messages from this script"
+ echo ""
+ echo " NOTE: To see if any Solr servers are running, do: solr status"
+ echo ""
+ elif [ "$CMD" == "healthcheck" ]; then
+ echo ""
+ echo "Usage: solr healthcheck [-c collection] [-z zkHost] [-V]"
+ echo ""
+ echo "Can be run from remote (non-Solr) hosts, as long as a proper ZooKeeper connection is provided"
+ echo ""
+ echo " -c <collection> Collection to run healthcheck against."
+ echo ""
+ echo " -z <zkHost> Zookeeper connection string; unnecessary if ZK_HOST is defined in solr.in.sh;"
+ echo " otherwise, default is localhost:9983"
+ echo ""
+ echo " -V Enable more verbose output"
+ echo ""
+ elif [ "$CMD" == "status" ]; then
+ echo ""
+ echo "Usage: solr status"
+ echo ""
+ echo " This command will show the status of all running Solr servers."
+ echo " It can only detect those Solr servers running on the current host."
+ echo ""
+ elif [ "$CMD" == "create" ]; then
+ echo ""
+ echo "Usage: solr create [-c name] [-d confdir] [-n configName] [-shards #] [-replicationFactor #] [-p port] [-V]"
+ echo ""
+ echo " Create a core or collection depending on whether Solr is running in standalone (core) or SolrCloud"
+ echo " mode (collection). In other words, this action detects which mode Solr is running in, and then takes"
+ echo " the appropriate action (either create_core or create_collection). For detailed usage instructions, do:"
+ echo ""
+ echo " bin/solr create_core -help"
+ echo ""
+ echo " or"
+ echo ""
+ echo " bin/solr create_collection -help"
+ echo ""
+ elif [ "$CMD" == "delete" ]; then
+ echo ""
+ echo "Usage: solr delete [-c name] [-deleteConfig true|false] [-p port] [-V]"
+ echo ""
+ echo " Deletes a core or collection depending on whether Solr is running in standalone (core) or SolrCloud"
+ echo " mode (collection). If you're deleting a collection in SolrCloud mode, the default behavior is to also"
+ echo " delete the configuration directory from Zookeeper so long as it is not being used by another collection."
+ echo " You can override this behavior by passing -deleteConfig false when running this command."
+ echo ""
+ echo " Can be run on remote (non-Solr) hosts, as long as a valid SOLR_HOST is provided in solr.in.sh"
+ echo ""
+ echo " -c <name> Name of the core / collection to delete"
+ echo ""
+ echo " -deleteConfig <boolean> Delete the configuration directory from Zookeeper; default is true"
+ echo ""
+ echo " -p <port> Port of a local Solr instance where you want to delete the core/collection"
+ echo " If not specified, the script will search the local system for a running"
+ echo " Solr instance and will use the port of the first server it finds."
+ echo ""
+ echo " -V Enables more verbose output."
+ echo ""
+ elif [ "$CMD" == "create_core" ]; then
+ echo ""
+ echo "Usage: solr create_core [-c core] [-d confdir] [-p port] [-V]"
+ echo ""
+ echo "When a configSet is used, this can be run from remote (non-Solr) hosts. If pointing at a non-configSet directory, this"
+ echo "must be run from the host that you wish to create the core on"
+ echo ""
+ echo " -c <core> Name of core to create"
+ echo ""
+ echo " -d <confdir> Configuration directory to copy when creating the new core, built-in options are:"
+ echo ""
+ echo " _default: Minimal configuration, which supports enabling/disabling field-guessing support"
+ echo " sample_techproducts_configs: Example configuration with many optional features enabled to"
+ echo " demonstrate the full power of Solr"
+ echo ""
+ echo " If not specified, default is: _default"
+ echo ""
+ echo " Alternatively, you can pass the path to your own configuration directory instead of using"
+ echo " one of the built-in configurations, such as: bin/solr create_core -c mycore -d /tmp/myconfig"
+ echo ""
+ echo " -p <port> Port of a local Solr instance where you want to create the new core"
+ echo " If not specified, the script will search the local system for a running"
+ echo " Solr instance and will use the port of the first server it finds."
+ echo ""
+ echo " -V Enable more verbose output."
+ echo ""
+ elif [ "$CMD" == "create_collection" ]; then
+ echo ""
+ echo "Usage: solr create_collection [-c collection] [-d confdir] [-n configName] [-shards #] [-replicationFactor #] [-p port] [-V]"
+ echo ""
+ echo "Can be run from remote (non-Solr) hosts, as long as a valid SOLR_HOST is provided in solr.in.sh"
+ echo " -c <collection> Name of collection to create"
+ echo ""
+ echo " -d <confdir> Configuration directory to copy when creating the new collection, built-in options are:"
+ echo ""
+ echo " _default: Minimal configuration, which supports enabling/disabling field-guessing support"
+ echo " sample_techproducts_configs: Example configuration with many optional features enabled to"
+ echo " demonstrate the full power of Solr"
+ echo ""
+ echo " If not specified, default is: _default"
+ echo ""
+ echo " Alternatively, you can pass the path to your own configuration directory instead of using"
+ echo " one of the built-in configurations, such as: bin/solr create_collection -c mycoll -d /tmp/myconfig"
+ echo ""
+ echo " By default the script will upload the specified confdir directory into Zookeeper using the same"
+ echo " name as the collection (-c) option. Alternatively, if you want to reuse an existing directory"
+ echo " or create a confdir in Zookeeper that can be shared by multiple collections, use the -n option"
+ echo ""
+ echo " -n <configName> Name the configuration directory in Zookeeper; by default, the configuration"
+ echo " will be uploaded to Zookeeper using the collection name (-c), but if you want"
+ echo " to use an existing directory or override the name of the configuration in"
+ echo " Zookeeper, then use the -c option."
+ echo ""
+ echo " -shards <#> Number of shards to split the collection into; default is 1"
+ echo ""
+ echo " -replicationFactor <#> Number of copies of each document in the collection, default is 1 (no replication)"
+ echo ""
+ echo " -p <port> Port of a local Solr instance where you want to create the new collection"
+ echo " If not specified, the script will search the local system for a running"
+ echo " Solr instance and will use the port of the first server it finds."
+ echo ""
+ echo " -V Enable more verbose output."
+ echo ""
+ elif [ "$CMD" == "zk" ]; then
+ print_short_zk_usage ""
+ echo " Can be run on remote (non-Solr) hosts, as long as valid ZK_HOST information is provided"
+ echo " Be sure to check the Solr logs in case of errors."
+ echo ""
+ echo " -z zkHost Optional Zookeeper connection string for all commands. If specified it"
+ echo " overrides the 'ZK_HOST=...'' defined in solr.in.sh."
+ echo ""
+ echo " -V Enable more verbose output."
+ echo ""
+ echo " upconfig uploads a configset from the local machine to Zookeeper. (Backcompat: -upconfig)"
+ echo ""
+ echo " downconfig downloads a configset from Zookeeper to the local machine. (Backcompat: -downconfig)"
+ echo ""
+ echo " -n configName Name of the configset in Zookeeper that will be the destination of"
+ echo " 'upconfig' and the source for 'downconfig'."
+ echo ""
+ echo " -d confdir The local directory the configuration will be uploaded from for"
+ echo " 'upconfig' or downloaded to for 'downconfig'. If 'confdir' is a child of"
+ echo " ...solr/server/solr/configsets' then the configs will be copied from/to"
+ echo " that directory. Otherwise it is interpreted as a simple local path."
+ echo ""
+ echo " cp copies files or folders to/from Zookeeper or Zokeeper -> Zookeeper"
+ echo " -r Recursively copy <src> to <dst>. Command will fail if <src> has children and "
+ echo " -r is not specified. Optional"
+ echo ""
+ echo " <src>, <dest> : [file:][/]path/to/local/file or zk:/path/to/zk/node"
+ echo " NOTE: <src> and <dest> may both be Zookeeper resources prefixed by 'zk:'"
+ echo " When <src> is a zk resource, <dest> may be '.'"
+ echo " If <dest> ends with '/', then <dest> will be a local folder or parent znode and the last"
+ echo " element of the <src> path will be appended unless <src> also ends in a slash. "
+ echo " <dest> may be zk:, which may be useful when using the cp -r form to backup/restore "
+ echo " the entire zk state."
+ echo " You must enclose local paths that end in a wildcard in quotes or just"
+ echo " end the local path in a slash. That is,"
+ echo " 'bin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181' is equivalent to"
+ echo " 'bin/solr zk cp -r \"/some/dir/*\" zk:/ -z localhost:2181'"
+ echo " but 'bin/solr zk cp -r /some/dir/* zk:/ -z localhost:2181' will throw an error"
+ echo ""
+ echo " here's an example of backup/restore for a ZK configuration:"
+ echo " to copy to local: 'bin/solr zk cp -r zk:/ /some/dir -z localhost:2181'"
+ echo " to restore to ZK: 'bin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181'"
+ echo ""
+ echo " The 'file:' prefix is stripped, thus 'file:/wherever' specifies an absolute local path and"
+ echo " 'file:somewhere' specifies a relative local path. All paths on Zookeeper are absolute."
+ echo ""
+ echo " Zookeeper nodes CAN have data, so moving a single file to a parent znode"
+ echo " will overlay the data on the parent Znode so specifying the trailing slash"
+ echo " can be important."
+ echo ""
+ echo " Wildcards are supported when copying from local, trailing only and must be quoted."
+ echo ""
+ echo " rm deletes files or folders on Zookeeper"
+ echo " -r Recursively delete if <path> is a directory. Command will fail if <path>"
+ echo " has children and -r is not specified. Optional"
+ echo " <path> : [zk:]/path/to/zk/node. <path> may not be the root ('/')"
+ echo ""
+ echo " mv moves (renames) znodes on Zookeeper"
+ echo " <src>, <dest> : Zookeeper nodes, the 'zk:' prefix is optional."
+ echo " If <dest> ends with '/', then <dest> will be a parent znode"
+ echo " and the last element of the <src> path will be appended."
+ echo " Zookeeper nodes CAN have data, so moving a single file to a parent znode"
+ echo " will overlay the data on the parent Znode so specifying the trailing slash"
+ echo " is important."
+ echo ""
+ echo " ls lists the znodes on Zookeeper"
+ echo " -r recursively descends the path listing all znodes. Optional"
+ echo " <path>: The Zookeeper path to use as the root."
+ echo ""
+ echo " Only the node names are listed, not data"
+ echo ""
+ echo " mkroot makes a znode in Zookeeper with no data. Can be used to make a path of arbitrary"
+ echo " depth but primarily intended to create a 'chroot'."
+ echo ""
+ echo " <path>: The Zookeeper path to create. Leading slash is assumed if not present."
+ echo " Intermediate nodes are created as needed if not present."
+ echo ""
+ elif [ "$CMD" == "auth" ]; then
+ echo ""
+ echo "Usage: solr auth enable [-type basicAuth] -credentials user:pass [-blockUnknown <true|false>] [-updateIncludeFileOnly <true|false>] [-V]"
+ echo " solr auth enable [-type basicAuth] -prompt <true|false> [-blockUnknown <true|false>] [-updateIncludeFileOnly <true|false>] [-V]"
+ echo " solr auth enable -type kerberos -config \"<kerberos configs>\" [-updateIncludeFileOnly <true|false>] [-V]"
+ echo " solr auth disable [-updateIncludeFileOnly <true|false>] [-V]"
+ echo ""
+ echo " Updates or enables/disables authentication. Must be run on the machine hosting Solr."
+ echo ""
+ echo " -type <type> The authentication mechanism (basicAuth or kerberos) to enable. Defaults to 'basicAuth'."
+ echo ""
+ echo " -credentials <user:pass> The username and password of the initial user. Applicable for basicAuth only."
+ echo " Note: only one of -prompt or -credentials must be provided"
+ echo ""
+ echo " -config \"<configs>\" Configuration parameters (Solr startup parameters). Required and applicable only for Kerberos"
+ echo ""
+ echo " -prompt <true|false> Prompts the user to provide the credentials. Applicable for basicAuth only."
+ echo " Note: only one of -prompt or -credentials must be provided"
+ echo ""
+ echo " -blockUnknown <true|false> When true, this blocks out access to unauthenticated users. When not provided,"
+ echo " this defaults to false (i.e. unauthenticated users can access all endpoints, except the"
+ echo " operations like collection-edit, security-edit, core-admin-edit etc.). Check the reference"
+ echo " guide for Basic Authentication for more details. Applicable for basicAuth only."
+ echo ""
+ echo " -updateIncludeFileOnly <true|false> Only update the solr.in.sh or solr.in.cmd file, and skip actual enabling/disabling"
+ echo " authentication (i.e. don't update security.json)"
+ echo ""
+ echo " -z zkHost Zookeeper connection string. Unnecessary if ZK_HOST is defined in solr.in.sh."
+ echo ""
+ echo " -d <dir> Specify the Solr server directory"
+ echo ""
+ echo " -s <dir> Specify the Solr home directory. This is where any credentials or authentication"
+ echo " configuration files (e.g. basicAuth.conf) would be placed."
+ echo ""
+ echo " -V Enable more verbose output."
+ echo ""
+ fi
+} # end print_usage
+
+function print_short_zk_usage() {
+
+ if [ "$1" != "" ]; then
+ echo -e "\nERROR: $1\n"
+ fi
+
+ echo " Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost]"
+ echo " solr zk cp [-r] <src> <dest> [-z zkHost]"
+ echo " solr zk rm [-r] <path> [-z zkHost]"
+ echo " solr zk mv <src> <dest> [-z zkHost]"
+ echo " solr zk ls [-r] <path> [-z zkHost]"
+ echo " solr zk mkroot <path> [-z zkHost]"
+ echo ""
+
+ if [ "$1" == "" ]; then
+ echo "Type bin/solr zk -help for full usage help"
+ else
+ exit 1
+ fi
+}
+
+# used to show the script is still alive when waiting on work to complete
+function spinner() {
+ local pid=$1
+ local delay=0.5
+ local spinstr='|/-\'
+ while [ "$(ps aux | awk '{print $2}' | grep -w $pid)" ]; do
+ local temp=${spinstr#?}
+ printf " [%c] " "$spinstr"
+ local spinstr=$temp${spinstr%"$temp"}
+ sleep $delay
+ printf "\b\b\b\b\b\b"
+ done
+ printf " \b\b\b\b"
+}
+
+# given a port, find the pid for a Solr process
+function solr_pid_by_port() {
+ THE_PORT="$1"
+ if [ -e "$SOLR_PID_DIR/solr-$THE_PORT.pid" ]; then
+ PID=`cat "$SOLR_PID_DIR/solr-$THE_PORT.pid"`
+ CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $PID | sort -r | tr -d ' '`
+ if [ "$CHECK_PID" != "" ]; then
+ local solrPID=$PID
+ fi
+ fi
+ echo "$solrPID"
+}
+
+# extract the value of the -Djetty.port parameter from a running Solr process
+function jetty_port() {
+ SOLR_PID="$1"
+ SOLR_PROC=`ps auxww | grep -w $SOLR_PID | grep start\.jar | grep jetty\.port`
+ IFS=' ' read -a proc_args <<< "$SOLR_PROC"
+ for arg in "${proc_args[@]}"
+ do
+ IFS='=' read -a pair <<< "$arg"
+ if [ "${pair[0]}" == "-Djetty.port" ]; then
+ local jetty_port="${pair[1]}"
+ break
+ fi
+ done
+ echo "$jetty_port"
+} # end jetty_port func
+
+# run a Solr command-line tool using the SolrCLI class;
+# useful for doing cross-platform work from the command-line using Java
+function run_tool() {
+
+ "$JAVA" $SOLR_SSL_OPTS $AUTHC_OPTS $SOLR_ZK_CREDS_AND_ACLS -Dsolr.install.dir="$SOLR_TIP" \
+ -Dlog4j.configurationFile="file:$DEFAULT_SERVER_DIR/resources/log4j2-console.xml" \
+ -classpath "$DEFAULT_SERVER_DIR/solr-webapp/webapp/WEB-INF/lib/*:$DEFAULT_SERVER_DIR/lib/ext/*:$DEFAULT_SERVER_DIR/lib/*" \
+ org.apache.solr.util.SolrCLI "$@"
+
+ return $?
+} # end run_tool function
+
+# get information about any Solr nodes running on this host
+function get_info() {
+ CODE=4
+ # first, see if Solr is running
+ numSolrs=`find "$SOLR_PID_DIR" -name "solr-*.pid" -type f | wc -l | tr -d ' '`
+ if [ "$numSolrs" != "0" ]; then
+ echo -e "\nFound $numSolrs Solr nodes: "
+ while read PIDF
+ do
+ ID=`cat "$PIDF"`
+ port=`jetty_port "$ID"`
+ if [ "$port" != "" ]; then
+ echo -e "\nSolr process $ID running on port $port"
+ run_tool status -solr "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$port/solr"
+ CODE=$?
+ echo ""
+ else
+ echo -e "\nSolr process $ID from $PIDF not found."
+ CODE=1
+ fi
+ done < <(find "$SOLR_PID_DIR" -name "solr-*.pid" -type f)
+ else
+ # no pid files but check using ps just to be sure
+ numSolrs=`ps auxww | grep start\.jar | grep solr\.solr\.home | grep -v grep | wc -l | sed -e 's/^[ \t]*//'`
+ if [ "$numSolrs" != "0" ]; then
+ echo -e "\nFound $numSolrs Solr nodes: "
+ PROCESSES=$(ps auxww | grep start\.jar | grep solr\.solr\.home | grep -v grep | awk '{print $2}' | sort -r)
+ for ID in $PROCESSES
+ do
+ port=`jetty_port "$ID"`
+ if [ "$port" != "" ]; then
+ echo ""
+ echo "Solr process $ID running on port $port"
+ run_tool status -solr "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$port/solr"
+ CODE=$?
+ echo ""
+ fi
+ done
+ else
+ echo -e "\nNo Solr nodes are running.\n"
+ CODE=3
+ fi
+ fi
+
+ return $CODE
+} # end get_info
+
+# tries to gracefully stop Solr using the Jetty
+# stop command and if that fails, then uses kill -9
+function stop_solr() {
+
+ DIR="$1"
+ SOLR_PORT="$2"
+ THIS_STOP_PORT="${STOP_PORT:-$(expr $SOLR_PORT - 1000)}"
+ STOP_KEY="$3"
+ SOLR_PID="$4"
+
+ if [ "$SOLR_PID" != "" ]; then
+ echo -e "Sending stop command to Solr running on port $SOLR_PORT ... waiting up to $SOLR_STOP_WAIT seconds to allow Jetty process $SOLR_PID to stop gracefully."
+ "$JAVA" $SOLR_SSL_OPTS $AUTHC_OPTS -jar "$DIR/start.jar" "STOP.PORT=$THIS_STOP_PORT" "STOP.KEY=$STOP_KEY" --stop || true
+ (loops=0
+ while true
+ do
+ CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
+ if [ "$CHECK_PID" != "" ]; then
+ slept=$((loops * 2))
+ if [ $slept -lt $SOLR_STOP_WAIT ]; then
+ sleep 2
+ loops=$[$loops+1]
+ else
+ exit # subshell!
+ fi
+ else
+ exit # subshell!
+ fi
+ done) &
+ spinner $!
+ rm -f "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
+ else
+ echo -e "No Solr nodes found to stop."
+ exit 0
+ fi
+
+ CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
+ if [ "$CHECK_PID" != "" ]; then
+ echo -e "Solr process $SOLR_PID is still running; forcefully killing it now."
+ kill -9 $SOLR_PID
+ echo "Killed process $SOLR_PID"
+ rm -f "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
+ sleep 1
+ fi
+
+ CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
+ if [ "$CHECK_PID" != "" ]; then
+ echo "ERROR: Failed to kill previous Solr Java process $SOLR_PID ... script fails."
+ exit 1
+ fi
+} # end stop_solr
+
+if [ $# -eq 1 ]; then
+ case $1 in
+ -help|-usage|-h|--help)
+ print_usage ""
+ exit
+ ;;
+ -info|-i|status)
+ get_info
+ exit $?
+ ;;
+ -version|-v|version)
+ run_tool version
+ exit
+ ;;
+ esac
+fi
+
+if [ $# -gt 0 ]; then
+ # if first arg starts with a dash (and it's not -help or -info),
+ # then assume they are starting Solr, such as: solr -f
+ if [[ $1 == -* ]]; then
+ SCRIPT_CMD="start"
+ else
+ SCRIPT_CMD="$1"
+ shift
+ fi
+else
+ # no args - just show usage and exit
+ print_usage ""
+ exit
+fi
+
+if [ "$SCRIPT_CMD" == "status" ]; then
+ # hacky - the script hits this if the user passes additional args with the status command,
+ # which is not supported but also not worth complaining about either
+ get_info
+ exit
+fi
+
+# assert tool
+if [ "$SCRIPT_CMD" == "assert" ]; then
+ run_tool assert $*
+ exit $?
+fi
+
+# run a healthcheck and exit if requested
+if [ "$SCRIPT_CMD" == "healthcheck" ]; then
+
+ VERBOSE=""
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -c|-collection)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Collection name is required when using the $1 option!"
+ exit 1
+ fi
+ HEALTHCHECK_COLLECTION="$2"
+ shift 2
+ ;;
+ -z|-zkhost)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "ZooKeeper connection string is required when using the $1 option!"
+ exit 1
+ fi
+ ZK_HOST="$2"
+ shift 2
+ ;;
+ -help|-usage)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ -V|--verbose)
+ VERBOSE="-verbose"
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "$1" != "" ]; then
+ print_usage "$SCRIPT_CMD" "Unrecognized or misplaced argument: $1!"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$ZK_HOST" ]; then
+ ZK_HOST=localhost:9983
+ fi
+
+ if [ -z "$HEALTHCHECK_COLLECTION" ]; then
+ echo "collection parameter is required!"
+ print_usage "healthcheck"
+ exit 1
+ fi
+
+ run_tool healthcheck -zkHost "$ZK_HOST" -collection "$HEALTHCHECK_COLLECTION" $VERBOSE
+
+ exit $?
+fi
+
+if [[ "$SCRIPT_CMD" == "config" ]]; then
+ CONFIG_PARAMS=()
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -z|-zkhost|-zkHost)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "ZooKeeper connection string is required when using the $1 option!"
+ exit 1
+ fi
+ ZK_HOST="$2"
+ shift 2
+ ;;
+ -s|-scheme)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "URL scheme is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_URL_SCHEME="$2"
+ shift 2
+ ;;
+ *) # Pass through all other params
+ if [ "$1" != "" ]; then
+ CONFIG_PARAMS+=($1)
+ shift
+ else
+ break
+ fi
+ ;;
+ esac
+ done
+ fi
+ if [[ -n "$ZK_HOST" ]]; then
+ CONFIG_PARAMS+=("-z" "$ZK_HOST")
+ fi
+ if [[ -n "$SOLR_URL_SCHEME" ]]; then
+ CONFIG_PARAMS+=("-scheme" "$SOLR_URL_SCHEME")
+ fi
+ run_tool config "${CONFIG_PARAMS[@]}"
+ exit $?
+fi
+
+# create a core or collection
+if [[ "$SCRIPT_CMD" == "create" || "$SCRIPT_CMD" == "create_core" || "$SCRIPT_CMD" == "create_collection" ]]; then
+
+ CREATE_NUM_SHARDS=1
+ CREATE_REPFACT=1
+ FORCE=false
+ VERBOSE=""
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -c|-core|-collection)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "name is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_NAME="$2"
+ shift 2
+ ;;
+ -n|-confname)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Configuration name is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_CONFNAME="$2"
+ shift 2
+ ;;
+ -d|-confdir)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Configuration directory is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_CONFDIR="$2"
+ shift 2
+ ;;
+ -s|-shards)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Shard count is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_NUM_SHARDS="$2"
+ shift 2
+ ;;
+ -rf|-replicationFactor)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Replication factor is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_REPFACT="$2"
+ shift 2
+ ;;
+ -p|-port)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Solr port is required when using the $1 option!"
+ exit 1
+ fi
+ CREATE_PORT="$2"
+ shift 2
+ ;;
+ -V|--verbose)
+ VERBOSE="-verbose"
+ shift
+ ;;
+ -force)
+ FORCE=true
+ shift
+ ;;
+ -help|-usage)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "$1" != "" ]; then
+ print_usage "$SCRIPT_CMD" "Unrecognized or misplaced argument: $1!"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$CREATE_CONFDIR" ]; then
+ CREATE_CONFDIR='_default'
+ fi
+
+ # validate the confdir arg (if provided)
+ if [[ ! -d "$SOLR_TIP/server/solr/configsets/$CREATE_CONFDIR" && ! -d "$CREATE_CONFDIR" ]]; then
+ echo -e "\nSpecified configuration directory $CREATE_CONFDIR not found!\n"
+ exit 1
+ fi
+
+ if [ -z "$CREATE_NAME" ]; then
+ echo "Name (-c) argument is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ if [ -z "$CREATE_PORT" ]; then
+ for ID in `ps auxww | grep java | grep start\.jar | awk '{print $2}' | sort -r`
+ do
+ port=`jetty_port "$ID"`
+ if [ "$port" != "" ]; then
+ CREATE_PORT=$port
+ break
+ fi
+ done
+ fi
+
+ if [ -z "$CREATE_PORT" ]; then
+ echo "Failed to determine the port of a local Solr instance, cannot create $CREATE_NAME!"
+ exit 1
+ fi
+
+ if [[ "$CREATE_CONFDIR" == "_default" ]] && ([[ "$CREATE_CONFNAME" == "" ]] || [[ "$CREATE_CONFNAME" == "_default" ]]); then
+ echo "WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use."
+ echo " To turn off: bin/solr config -c $CREATE_NAME -p $CREATE_PORT -action set-user-property -property update.autoCreateFields -value false"
+ fi
+
+ if [[ "$(whoami)" == "root" ]] && [[ "$FORCE" == "false" ]] ; then
+ echo "WARNING: Creating cores as the root user can cause Solr to fail and is not advisable. Exiting."
+ echo " If you started Solr as root (not advisable either), force core creation by adding argument -force"
+ exit 1
+ fi
+ if [ "$SCRIPT_CMD" == "create_core" ]; then
+ run_tool create_core -name "$CREATE_NAME" -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$CREATE_PORT/solr" \
+ -confdir "$CREATE_CONFDIR" -configsetsDir "$SOLR_TIP/server/solr/configsets" \
+ $VERBOSE
+ exit $?
+ else
+ run_tool "$SCRIPT_CMD" -name "$CREATE_NAME" -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$CREATE_PORT/solr" \
+ -shards "$CREATE_NUM_SHARDS" -replicationFactor "$CREATE_REPFACT" \
+ -confname "$CREATE_CONFNAME" -confdir "$CREATE_CONFDIR" \
+ -configsetsDir "$SOLR_TIP/server/solr/configsets" \
+ $VERBOSE
+ exit $?
+ fi
+fi
+
+# delete a core or collection
+if [[ "$SCRIPT_CMD" == "delete" ]]; then
+
+ VERBOSE=""
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -c|-core|-collection)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "name is required when using the $1 option!"
+ exit 1
+ fi
+ DELETE_NAME="$2"
+ shift 2
+ ;;
+ -p|-port)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Solr port is required when using the $1 option!"
+ exit 1
+ fi
+ DELETE_PORT="$2"
+ shift 2
+ ;;
+ -deleteConfig)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "true|false is required when using the $1 option!"
+ exit 1
+ fi
+ DELETE_CONFIG="$2"
+ shift 2
+ ;;
+ -V|--verbose)
+ VERBOSE="-verbose"
+ shift
+ ;;
+ -help|-usage)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "$1" != "" ]; then
+ print_usage "$SCRIPT_CMD" "Unrecognized or misplaced argument: $1!"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$DELETE_NAME" ]; then
+ echo "Name (-c) argument is required!"
+ print_usage "$SCRIPT_CMD"
+ exit 1
+ fi
+
+ # If not defined, use the collection name for the name of the configuration in Zookeeper
+ if [ -z "$DELETE_CONFIG" ]; then
+ DELETE_CONFIG=true
+ fi
+
+ if [ -z "$DELETE_PORT" ]; then
+ for ID in `ps auxww | grep java | grep start\.jar | awk '{print $2}' | sort -r`
+ do
+ port=`jetty_port "$ID"`
+ if [ "$port" != "" ]; then
+ DELETE_PORT=$port
+ break
+ fi
+ done
+ fi
+
+ if [ -z "$DELETE_PORT" ]; then
+ echo "Failed to determine the port of a local Solr instance, cannot delete $DELETE_NAME!"
+ exit 1
+ fi
+
+ run_tool delete -name "$DELETE_NAME" -deleteConfig "$DELETE_CONFIG" \
+ -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$DELETE_PORT/solr" \
+ $VERBOSE
+ exit $?
+fi
+
+ZK_RECURSE=false
+# Zookeeper file maintenance (upconfig, downconfig, files up/down etc.)
+# It's a little clumsy to have the parsing go round and round for upconfig and downconfig, but that's
+# necessary for back-compat
+if [[ "$SCRIPT_CMD" == "zk" ]]; then
+
+ VERBOSE=""
+
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -upconfig|upconfig|-downconfig|downconfig|cp|rm|mv|ls|mkroot)
+ if [ "${1:0:1}" == "-" ]; then
+ ZK_OP=${1:1}
+ else
+ ZK_OP=$1
+ fi
+ shift 1
+ ;;
+ -z|-zkhost)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_short_zk_usage "$SCRIPT_CMD" "ZooKeeper connection string is required when using the $1 option!"
+ fi
+ ZK_HOST="$2"
+ shift 2
+ ;;
+ -n|-confname)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_short_zk_usage "$SCRIPT_CMD" "Configuration name is required when using the $1 option!"
+ fi
+ CONFIGSET_CONFNAME="$2"
+ shift 2
+ ;;
+ -d|-confdir)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_short_zk_usage "$SCRIPT_CMD" "Configuration directory is required when using the $1 option!"
+ fi
+ CONFIGSET_CONFDIR="$2"
+ shift 2
+ ;;
+ -r)
+ ZK_RECURSE="true"
+ shift
+ ;;
+ -V|--verbose)
+ VERBOSE="-verbose"
+ shift
+ ;;
+ -help|-usage|-h)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *) # Pick up <src> <dst> or <path> params for rm, ls, cp, mv, mkroot.
+ if [ "$1" == "" ]; then
+ break # out-of-args, stop looping
+ fi
+ if [ -z "$ZK_SRC" ]; then
+ ZK_SRC=$1
+ else
+ if [ -z "$ZK_DST" ]; then
+ ZK_DST=$1
+ else
+ print_short_zk_usage "Unrecognized or misplaced command $1. 'cp' with trailing asterisk requires quoting, see help text."
+ fi
+ fi
+ shift
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$ZK_OP" ]; then
+ print_short_zk_usage "Zookeeper operation (one of 'upconfig', 'downconfig', 'rm', 'mv', 'cp', 'ls', 'mkroot') is required!"
+ fi
+
+ if [ -z "$ZK_HOST" ]; then
+ print_short_zk_usage "Zookeeper address (-z) argument is required or ZK_HOST must be specified in the solr.in.sh file."
+ fi
+
+ if [[ "$ZK_OP" == "upconfig" || "$ZK_OP" == "downconfig" ]]; then
+ if [ -z "$CONFIGSET_CONFDIR" ]; then
+ print_short_zk_usage "Local directory of the configset (-d) argument is required!"
+ fi
+
+ if [ -z "$CONFIGSET_CONFNAME" ]; then
+ print_short_zk_usage "Configset name on Zookeeper (-n) argument is required!"
+ fi
+ fi
+
+ if [[ "$ZK_OP" == "cp" || "$ZK_OP" == "mv" ]]; then
+ if [[ -z "$ZK_SRC" || -z "$ZK_DST" ]]; then
+ print_short_zk_usage "<source> and <destination> must be specified when using either the 'mv' or 'cp' commands."
+ fi
+ if [[ "$ZK_OP" == "cp" && "${ZK_SRC:0:3}" != "zk:" && "${ZK_DST:0:3}" != "zk:" ]]; then
+ print_short_zk_usage "One of the source or desintation paths must be prefixed by 'zk:' for the 'cp' command."
+ fi
+ fi
+
+ if [[ "$ZK_OP" == "mkroot" ]]; then
+ if [[ -z "$ZK_SRC" ]]; then
+ print_short_zk_usage "<path> must be specified when using the 'mkroot' command."
+ fi
+ fi
+
+
+ case "$ZK_OP" in
+ upconfig)
+ run_tool "$ZK_OP" -confname "$CONFIGSET_CONFNAME" -confdir "$CONFIGSET_CONFDIR" -zkHost "$ZK_HOST" -configsetsDir "$SOLR_TIP/server/solr/configsets" $VERBOSE
+ ;;
+ downconfig)
+ run_tool "$ZK_OP" -confname "$CONFIGSET_CONFNAME" -confdir "$CONFIGSET_CONFDIR" -zkHost "$ZK_HOST" $VERBOSE
+ ;;
+ rm)
+ if [ -z "$ZK_SRC" ]; then
+ print_short_zk_usage "Zookeeper path to remove must be specified when using the 'rm' command"
+ fi
+ run_tool "$ZK_OP" -path "$ZK_SRC" -zkHost "$ZK_HOST" -recurse "$ZK_RECURSE" $VERBOSE
+ ;;
+ mv)
+ run_tool "$ZK_OP" -src "$ZK_SRC" -dst "$ZK_DST" -zkHost "$ZK_HOST" $VERBOSE
+ ;;
+ cp)
+ run_tool "$ZK_OP" -src "$ZK_SRC" -dst "$ZK_DST" -zkHost "$ZK_HOST" -recurse "$ZK_RECURSE" $VERBOSE
+ ;;
+ ls)
+ if [ -z "$ZK_SRC" ]; then
+ print_short_zk_usage "Zookeeper path to list must be specified when using the 'ls' command"
+ fi
+ run_tool "$ZK_OP" -path "$ZK_SRC" -recurse "$ZK_RECURSE" -zkHost "$ZK_HOST" $VERBOSE
+ ;;
+ mkroot)
+ if [ -z "$ZK_SRC" ]; then
+ print_short_zk_usage "Zookeeper path to list must be specified when using the 'mkroot' command"
+ fi
+ run_tool "$ZK_OP" -path "$ZK_SRC" -zkHost "$ZK_HOST" $VERBOSE
+ ;;
+ *)
+ print_short_zk_usage "Unrecognized Zookeeper operation $ZK_OP"
+ ;;
+ esac
+
+ exit $?
+fi
+
+
+if [[ "$SCRIPT_CMD" == "autoscaling" ]]; then
+ run_tool autoscaling $@
+ exit $?
+fi
+
+if [[ "$SCRIPT_CMD" == "auth" ]]; then
+
+ VERBOSE=""
+
+ declare -a AUTH_PARAMS
+ if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ enable|disable)
+ AUTH_OP=$1
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "$AUTH_OP")
+ shift
+ ;;
+ -z|-zkhost|zkHost)
+ ZK_HOST="$2"
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-zkHost" "$ZK_HOST")
+ shift 2
+ ;;
+ -t|-type)
+ AUTH_TYPE="$2"
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-type" "$AUTH_TYPE")
+ shift 2
+ ;;
+ -credentials)
+ AUTH_CREDENTIALS="$2"
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-credentials" "$AUTH_CREDENTIALS")
+ shift 2
+ ;;
+ -config)
+ AUTH_CONFIG="`echo $2| base64`"
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-config" "$AUTH_CONFIG")
+ shift 2
+ ;;
+ -solrIncludeFile)
+ SOLR_INCLUDE="$2"
+ shift 2
+ ;;
+ -prompt)
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-prompt" "$2")
+ shift
+ ;;
+ -blockUnknown)
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-blockUnknown" "$2")
+ shift
+ break
+ ;;
+ -updateIncludeFileOnly)
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-updateIncludeFileOnly" "$2")
+ shift
+ break
+ ;;
+ -V|--verbose)
+ VERBOSE="-verbose"
+ shift
+ ;;
+ -d|-dir)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Server directory is required when using the $1 option!"
+ exit 1
+ fi
+
+ if [[ "$2" == "." || "$2" == "./" || "$2" == ".." || "$2" == "../" ]]; then
+ SOLR_SERVER_DIR="$(pwd)/$2"
+ else
+ # see if the arg value is relative to the tip vs full path
+ if [[ "$2" != /* ]] && [[ -d "$SOLR_TIP/$2" ]]; then
+ SOLR_SERVER_DIR="$SOLR_TIP/$2"
+ else
+ SOLR_SERVER_DIR="$2"
+ fi
+ fi
+ # resolve it to an absolute path
+ SOLR_SERVER_DIR="$(cd "$SOLR_SERVER_DIR"; pwd)"
+ shift 2
+ ;;
+ -s|-solr.home)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Solr home directory is required when using the $1 option!"
+ exit 1
+ fi
+
+ SOLR_HOME="$2"
+ shift 2
+ ;;
+ -help|-usage|-h)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ shift
+ break
+ ;;
+ esac
+ done
+ fi
+
+ if [ -z "$SOLR_SERVER_DIR" ]; then
+ SOLR_SERVER_DIR="$DEFAULT_SERVER_DIR"
+ fi
+ if [ ! -e "$SOLR_SERVER_DIR" ]; then
+ echo -e "\nSolr server directory $SOLR_SERVER_DIR not found!\n"
+ exit 1
+ fi
+
+ if [ -z "$SOLR_HOME" ]; then
+ SOLR_HOME="$SOLR_SERVER_DIR/solr"
+ elif [[ $SOLR_HOME != /* ]]; then
+ if [[ -d "`pwd`/$SOLR_HOME" ]]; then
+ SOLR_HOME="$(pwd)/$SOLR_HOME"
+ elif [[ -d "$SOLR_SERVER_DIR/$SOLR_HOME" ]]; then
+ SOLR_HOME="$SOLR_SERVER_DIR/$SOLR_HOME"
+ SOLR_PID_DIR="$SOLR_HOME"
+ fi
+ fi
+
+ if [ -z "$AUTH_OP" ]; then
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ fi
+
+ AUTH_PARAMS=("${AUTH_PARAMS[@]}" "-solrIncludeFile" "$SOLR_INCLUDE")
+
+ if [ -z "$AUTH_PORT" ]; then
+ for ID in `ps auxww | grep java | grep start\.jar | awk '{print $2}' | sort -r`
+ do
+ port=`jetty_port "$ID"`
+ if [ "$port" != "" ]; then
+ AUTH_PORT=$port
+ break
+ fi
+ done
+ fi
+ run_tool auth ${AUTH_PARAMS[@]} -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$AUTH_PORT/solr" -authConfDir "$SOLR_HOME" $VERBOSE
+ exit $?
+fi
+
+
+# verify the command given is supported
+if [ "$SCRIPT_CMD" != "stop" ] && [ "$SCRIPT_CMD" != "start" ] && [ "$SCRIPT_CMD" != "restart" ] && [ "$SCRIPT_CMD" != "status" ] && [ "$SCRIPT_CMD" != "assert" ]; then
+ print_usage "" "$SCRIPT_CMD is not a valid command!"
+ exit 1
+fi
+
+#Check current Ulimits for Open Files and Max Processes. Warn if they are below the recommended values.
+
+if [ -z "$SOLR_RECOMMENDED_MAX_PROCESSES" ]; then
+ SOLR_RECOMMENDED_MAX_PROCESSES=65000
+fi
+
+if [ -z "$SOLR_RECOMMENDED_OPEN_FILES" ]; then
+ SOLR_RECOMMENDED_OPEN_FILES=65000
+fi
+
+if [ -z "$SOLR_ULIMIT_CHECKS" ] || [ "$SOLR_ULIMIT_CHECKS" != "false" ]; then
+ if [ "$SCRIPT_CMD" == "start" ] || [ "$SCRIPT_CMD" == "restart" ] || [ "$SCRIPT_CMD" == "status" ]; then
+ if hash ulimit 2>/dev/null; then
+ openFiles=$(ulimit -n)
+ maxProcs=$(ulimit -u)
+ if [ $openFiles != "unlimited" ] && [ $openFiles -lt "$SOLR_RECOMMENDED_OPEN_FILES" ]; then
+ echo "*** [WARN] *** Your open file limit is currently $openFiles. "
+ echo " It should be set to $SOLR_RECOMMENDED_OPEN_FILES to avoid operational disruption. "
+ echo " If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh"
+ fi
+
+ if [ $maxProcs != "unlimited" ] && [ $maxProcs -lt "$SOLR_RECOMMENDED_MAX_PROCESSES" ]; then
+ echo "*** [WARN] *** Your Max Processes Limit is currently $maxProcs. "
+ echo " It should be set to $SOLR_RECOMMENDED_MAX_PROCESSES to avoid operational disruption. "
+ echo " If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh"
+ fi
+ else
+ echo "Could not check ulimits for processes and open files, recommended values are"
+ echo " max processes: $SOLR_RECOMMENDED_MAX_PROCESSES "
+ echo " open files: $SOLR_RECOMMENDED_OPEN_FILES"
+ fi
+ fi
+fi
+
+# Run in foreground (default is to run in the background)
+FG="false"
+FORCE=false
+noprompt=false
+SOLR_OPTS=($SOLR_OPTS)
+PASS_TO_RUN_EXAMPLE=
+
+if [ $# -gt 0 ]; then
+ while true; do
+ case "$1" in
+ -c|-cloud)
+ SOLR_MODE="solrcloud"
+ PASS_TO_RUN_EXAMPLE+=" -c"
+ shift
+ ;;
+ -d|-dir)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Server directory is required when using the $1 option!"
+ exit 1
+ fi
+
+ if [[ "$2" == "." || "$2" == "./" || "$2" == ".." || "$2" == "../" ]]; then
+ SOLR_SERVER_DIR="$(pwd)/$2"
+ else
+ # see if the arg value is relative to the tip vs full path
+ if [[ "$2" != /* ]] && [[ -d "$SOLR_TIP/$2" ]]; then
+ SOLR_SERVER_DIR="$SOLR_TIP/$2"
+ else
+ SOLR_SERVER_DIR="$2"
+ fi
+ fi
+ # resolve it to an absolute path
+ SOLR_SERVER_DIR="$(cd "$SOLR_SERVER_DIR"; pwd)"
+ shift 2
+ ;;
+ -s|-solr.home)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Solr home directory is required when using the $1 option!"
+ exit 1
+ fi
+
+ SOLR_HOME="$2"
+ shift 2
+ ;;
+ -t|-data.home)
+ SOLR_DATA_HOME="$2"
+ shift 2
+ ;;
+ -e|-example)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Example name is required when using the $1 option!"
+ exit 1
+ fi
+ EXAMPLE="$2"
+ shift 2
+ ;;
+ -f|-foreground)
+ FG="true"
+ shift
+ ;;
+ -h|-host)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Hostname is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_HOST="$2"
+ PASS_TO_RUN_EXAMPLE+=" -h $SOLR_HOST"
+ shift 2
+ ;;
+ -m|-memory)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Memory setting is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_HEAP="$2"
+ PASS_TO_RUN_EXAMPLE+=" -m $SOLR_HEAP"
+ shift 2
+ ;;
+ -p|-port)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Port number is required when using the $1 option!"
+ exit 1
+ fi
+ SOLR_PORT="$2"
+ PASS_TO_RUN_EXAMPLE+=" -p $SOLR_PORT"
+ shift 2
+ ;;
+ -z|-zkhost)
+ if [[ -z "$2" || "${2:0:1}" == "-" ]]; then
+ print_usage "$SCRIPT_CMD" "Zookeeper connection string is required when using the $1 option!"
+ exit 1
+ fi
+ ZK_HOST="$2"
+ SOLR_MODE="solrcloud"
+ PASS_TO_RUN_EXAMPLE+=" -z $ZK_HOST"
+ shift 2
+ ;;
+ -a|-addlopts)
+ ADDITIONAL_CMD_OPTS="$2"
+ PASS_TO_RUN_EXAMPLE+=" -a \"$ADDITIONAL_CMD_OPTS\""
+ shift 2
+ ;;
+ -j|-jettyconfig)
+ ADDITIONAL_JETTY_CONFIG="$2"
+ PASS_TO_RUN_EXAMPLE+=" -j \"$ADDITIONAL_JETTY_CONFIG\""
+ shift 2
+ ;;
+ -k|-key)
+ STOP_KEY="$2"
+ shift 2
+ ;;
+ -help|-usage)
+ print_usage "$SCRIPT_CMD"
+ exit 0
+ ;;
+ -noprompt)
+ noprompt=true
+ PASS_TO_RUN_EXAMPLE+=" -noprompt"
+ shift
+ ;;
+ -V|-verbose)
+ verbose=true
+ PASS_TO_RUN_EXAMPLE+=" --verbose"
+ shift
+ ;;
+ -v)
+ SOLR_LOG_LEVEL=DEBUG
+ shift
+ ;;
+ -q)
+ SOLR_LOG_LEVEL=WARN
+ shift
+ ;;
+ -all)
+ stop_all=true
+ shift
+ ;;
+ -force)
+ FORCE=true
+ PASS_TO_RUN_EXAMPLE+=" -force"
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ if [ "${1:0:2}" == "-D" ]; then
+ # pass thru any opts that begin with -D (java system props)
+ SOLR_OPTS+=("$1")
+ PASS_TO_RUN_EXAMPLE+=" $1"
+ shift
+ else
+ if [ "$1" != "" ]; then
+ print_usage "$SCRIPT_CMD" "$1 is not supported by this script"
+ exit 1
+ else
+ break # out-of-args, stop looping
+ fi
+ fi
+ ;;
+ esac
+ done
+fi
+
+if [[ $SOLR_LOG_LEVEL ]] ; then
+ SOLR_LOG_LEVEL_OPT="-Dsolr.log.level=$SOLR_LOG_LEVEL"
+fi
+
+if [ -z "$SOLR_SERVER_DIR" ]; then
+ SOLR_SERVER_DIR="$DEFAULT_SERVER_DIR"
+fi
+
+if [ ! -e "$SOLR_SERVER_DIR" ]; then
+ echo -e "\nSolr server directory $SOLR_SERVER_DIR not found!\n"
+ exit 1
+fi
+
+if [[ "$FG" == 'true' && "$EXAMPLE" != "" ]]; then
+ FG='false'
+ echo -e "\nWARNING: Foreground mode (-f) not supported when running examples.\n"
+fi
+
+#
+# If the user specified an example to run, invoke the run_example tool (Java app) and exit
+# otherwise let this script proceed to process the user request
+#
+if [ -n "$EXAMPLE" ] && [ "$SCRIPT_CMD" == "start" ]; then
+ run_tool run_example -e $EXAMPLE -d "$SOLR_SERVER_DIR" -urlScheme $SOLR_URL_SCHEME $PASS_TO_RUN_EXAMPLE
+ exit $?
+fi
+
+############# start/stop logic below here ################
+
+if $verbose ; then
+ echo "Using Solr root directory: $SOLR_TIP"
+ echo "Using Java: $JAVA"
+ "$JAVA" -version
+fi
+
+if [ "$SOLR_HOST" != "" ]; then
+ SOLR_HOST_ARG=("-Dhost=$SOLR_HOST")
+else
+ SOLR_HOST_ARG=()
+fi
+
+if [ -z "$STOP_KEY" ]; then
+ STOP_KEY='solrrocks'
+fi
+
+# stop all if no port specified
+if [[ "$SCRIPT_CMD" == "stop" && -z "$SOLR_PORT" ]]; then
+ if $stop_all; then
+ none_stopped=true
+ find "$SOLR_PID_DIR" -name "solr-*.pid" -type f | while read PIDF
+ do
+ NEXT_PID=`cat "$PIDF"`
+ port=`jetty_port "$NEXT_PID"`
+ if [ "$port" != "" ]; then
+ stop_solr "$SOLR_SERVER_DIR" "$port" "$STOP_KEY" "$NEXT_PID"
+ none_stopped=false
+ fi
+ rm -f "$PIDF"
+ done
+ # TODO: none_stopped doesn't get reflected across the subshell
+ # This can be uncommented once we find a clean way out of it
+ # if $none_stopped; then
+ # echo -e "\nNo Solr nodes found to stop.\n"
+ # fi
+ else
+ # not stopping all and don't have a port, but if we can find the pid file for the default port 8983, then use that
+ none_stopped=true
+ numSolrs=`find "$SOLR_PID_DIR" -name "solr-*.pid" -type f | wc -l | tr -d ' '`
+ if [ $numSolrs -eq 1 ]; then
+ # only do this if there is only 1 node running, otherwise they must provide the -p or -all
+ PID="$(cat "$(find "$SOLR_PID_DIR" -name "solr-*.pid" -type f)")"
+ CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $PID | sort -r | tr -d ' '`
+ if [ "$CHECK_PID" != "" ]; then
+ port=`jetty_port "$CHECK_PID"`
+ if [ "$port" != "" ]; then
+ stop_solr "$SOLR_SERVER_DIR" "$port" "$STOP_KEY" "$CHECK_PID"
+ none_stopped=false
+ fi
+ fi
+ fi
+
+ if $none_stopped; then
+ if [ $numSolrs -gt 0 ]; then
+ echo -e "\nFound $numSolrs Solr nodes running! Must either specify a port using -p or -all to stop all Solr nodes on this host.\n"
+ else
+ echo -e "\nNo Solr nodes found to stop.\n"
+ fi
+ exit 1
+ fi
+ fi
+ exit
+fi
+
+if [ -z "$SOLR_PORT" ]; then
+ SOLR_PORT=8983
+fi
+
+if [ -z "$STOP_PORT" ]; then
+ STOP_PORT=`expr $SOLR_PORT - 1000`
+fi
+
+if [ "$SCRIPT_CMD" == "start" ] || [ "$SCRIPT_CMD" == "restart" ] ; then
+ if [[ "$(whoami)" == "root" ]] && [[ "$FORCE" == "false" ]] ; then
+ echo "WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting."
+ echo " Please consult the Reference Guide. To override this check, start with argument '-force'"
+ exit 1
+ fi
+fi
+
+if [[ "$SCRIPT_CMD" == "start" ]]; then
+ # see if Solr is already running
+ SOLR_PID=`solr_pid_by_port "$SOLR_PORT"`
+
+ if [ -z "$SOLR_PID" ]; then
+ # not found using the pid file ... but use ps to ensure not found
+ SOLR_PID=`ps auxww | grep start\.jar | grep -w "\-Djetty\.port=$SOLR_PORT" | grep -v grep | awk '{print $2}' | sort -r`
+ fi
+
+ if [ "$SOLR_PID" != "" ]; then
+ echo -e "\nPort $SOLR_PORT is already being used by another process (pid: $SOLR_PID)\nPlease choose a different port using the -p option.\n"
+ exit 1
+ fi
+else
+ # either stop or restart
+ # see if Solr is already running
+ SOLR_PID=`solr_pid_by_port "$SOLR_PORT"`
+ if [ -z "$SOLR_PID" ]; then
+ # not found using the pid file ... but use ps to ensure not found
+ SOLR_PID=`ps auxww | grep start\.jar | grep -w "\-Djetty\.port=$SOLR_PORT" | grep -v grep | awk '{print $2}' | sort -r`
+ fi
+ if [ "$SOLR_PID" != "" ]; then
+ stop_solr "$SOLR_SERVER_DIR" "$SOLR_PORT" "$STOP_KEY" "$SOLR_PID"
+ else
+ if [ "$SCRIPT_CMD" == "stop" ]; then
+ echo -e "No process found for Solr node running on port $SOLR_PORT"
+ exit 1
+ fi
+ fi
+fi
+
+if [ -z "$SOLR_HOME" ]; then
+ SOLR_HOME="$SOLR_SERVER_DIR/solr"
+elif [[ $SOLR_HOME != /* ]]; then
+ if [[ -d "`pwd`/$SOLR_HOME" ]]; then
+ SOLR_HOME="$(pwd)/$SOLR_HOME"
+ elif [[ -d "$SOLR_SERVER_DIR/$SOLR_HOME" ]]; then
+ SOLR_HOME="$SOLR_SERVER_DIR/$SOLR_HOME"
+ SOLR_PID_DIR="$SOLR_HOME"
+ fi
+fi
+
+# Set the default configset dir to be bootstrapped as _default
+if [ -z "$DEFAULT_CONFDIR" ]; then
+ DEFAULT_CONFDIR="$SOLR_SERVER_DIR/solr/configsets/_default/conf"
+fi
+
+# This is quite hacky, but examples rely on a different log4j2.xml
+# so that we can write logs for examples to $SOLR_HOME/../logs
+if [ -z "$SOLR_LOGS_DIR" ]; then
+ SOLR_LOGS_DIR="$SOLR_SERVER_DIR/logs"
+fi
+EXAMPLE_DIR="$SOLR_TIP/example"
+if [ "${SOLR_HOME:0:${#EXAMPLE_DIR}}" = "$EXAMPLE_DIR" ]; then
+ LOG4J_PROPS="$DEFAULT_SERVER_DIR/resources/log4j2.xml"
+ SOLR_LOGS_DIR="$SOLR_HOME/../logs"
+fi
+
+LOG4J_CONFIG=()
+if [ -n "$LOG4J_PROPS" ]; then
+ LOG4J_CONFIG+=("-Dlog4j.configurationFile=file:$LOG4J_PROPS")
+fi
+
+if [ "$SCRIPT_CMD" == "stop" ]; then
+ # already stopped, script is done.
+ exit 0
+fi
+
+# NOTE: If the script gets to here, then it is starting up a Solr node.
+
+if [ ! -e "$SOLR_HOME" ]; then
+ echo -e "\nSolr home directory $SOLR_HOME not found!\n"
+ exit 1
+fi
+if [[ $SOLR_DATA_HOME ]] && [ ! -e "$SOLR_DATA_HOME" ]; then
+ echo -e "\nSolr data home directory $SOLR_DATA_HOME not found!\n"
+ exit 1
+fi
+if $verbose ; then
+ q=""
+else
+ q="-q"
+fi
+# Rotate and clean on startup. Default to false since 7.4 as log4j2 handles startup rotation
+if [ "${SOLR_LOG_PRESTART_ROTATION:=false}" == "true" ]; then
+ # Enable any of these if you require old remove/archive behavior
+ #run_tool utils -s "$DEFAULT_SERVER_DIR" -l "$SOLR_LOGS_DIR" $q -remove_old_solr_logs 7 || echo "Failed removing old solr logs"
+ #run_tool utils -s "$DEFAULT_SERVER_DIR" -l "$SOLR_LOGS_DIR" $q -archive_gc_logs $q || echo "Failed archiving old GC logs"
+ #run_tool utils -s "$DEFAULT_SERVER_DIR" -l "$SOLR_LOGS_DIR" $q -archive_console_logs || echo "Failed archiving old console logs"
+ run_tool utils -s "$DEFAULT_SERVER_DIR" -l "$SOLR_LOGS_DIR" $q -rotate_solr_logs 10 || echo "Failed rotating old solr logs"
+fi
+
+# Establish default GC logging opts if no env var set (otherwise init to sensible default)
+if [ -z ${GC_LOG_OPTS+x} ]; then
+ if [[ "$JAVA_VER_NUM" -lt "9" ]] ; then
+ GC_LOG_OPTS=('-verbose:gc' '-XX:+PrintHeapAtGC' '-XX:+PrintGCDetails' \
+ '-XX:+PrintGCDateStamps' '-XX:+PrintGCTimeStamps' '-XX:+PrintTenuringDistribution' \
+ '-XX:+PrintGCApplicationStoppedTime')
+ else
+ GC_LOG_OPTS=('-Xlog:gc*')
+ fi
+else
+ GC_LOG_OPTS=($GC_LOG_OPTS)
+fi
+
+# if verbose gc logging enabled, setup the location of the log file and rotation
+if [ "$GC_LOG_OPTS" != "" ]; then
+ if [[ "$JAVA_VER_NUM" -lt "9" ]] ; then
+ gc_log_flag="-Xloggc"
+ if [ "$JAVA_VENDOR" == "IBM J9" ]; then
+ gc_log_flag="-Xverbosegclog"
+ fi
+ GC_LOG_OPTS+=("$gc_log_flag:$SOLR_LOGS_DIR/solr_gc.log" '-XX:+UseGCLogFileRotation' '-XX:NumberOfGCLogFiles=9' '-XX:GCLogFileSize=20M')
+ else
+ # http://openjdk.java.net/jeps/158
+ for i in "${!GC_LOG_OPTS[@]}";
+ do
+ # for simplicity, we only look at the prefix '-Xlog:gc'
+ # (if 'all' or multiple tags are used starting with anything other then 'gc' the user is on their own)
+ # if a single additional ':' exists in param, then there is already an explicit output specifier
+ GC_LOG_OPTS[$i]=$(echo ${GC_LOG_OPTS[$i]} | sed "s|^\(-Xlog:gc[^:]*$\)|\1:file=$SOLR_LOGS_DIR/solr_gc.log:time,uptime:filecount=9,filesize=20M|")
+ done
+ fi
+fi
+
+# If ZK_HOST is defined, the assume SolrCloud mode
+if [[ -n "$ZK_HOST" ]]; then
+ SOLR_MODE="solrcloud"
+fi
+
+if [ "$SOLR_MODE" == 'solrcloud' ]; then
+ if [ -z "$ZK_CLIENT_TIMEOUT" ]; then
+ ZK_CLIENT_TIMEOUT="15000"
+ fi
+
+ CLOUD_MODE_OPTS=("-DzkClientTimeout=$ZK_CLIENT_TIMEOUT")
+
+ if [ "$ZK_HOST" != "" ]; then
+ CLOUD_MODE_OPTS+=("-DzkHost=$ZK_HOST")
+ else
+ if $verbose ; then
+ echo "Configuring SolrCloud to launch an embedded Zookeeper using -DzkRun"
+ fi
+
+ CLOUD_MODE_OPTS+=('-DzkRun')
+ fi
+
+ # and if collection1 needs to be bootstrapped
+ if [ -e "$SOLR_HOME/collection1/core.properties" ]; then
+ CLOUD_MODE_OPTS+=('-Dbootstrap_confdir=./solr/collection1/conf' '-Dcollection.configName=myconf' '-DnumShards=1')
+ fi
+
+else
+ if [ ! -e "$SOLR_HOME/solr.xml" ]; then
+ echo -e "\nSolr home directory $SOLR_HOME must contain a solr.xml file!\n"
+ exit 1
+ fi
+fi
+
+# These are useful for attaching remote profilers like VisualVM/JConsole
+if [ "$ENABLE_REMOTE_JMX_OPTS" == "true" ]; then
+
+ if [ -z "$RMI_PORT" ]; then
+ RMI_PORT=`expr $SOLR_PORT + 10000`
+ if [ $RMI_PORT -gt 65535 ]; then
+ echo -e "\nRMI_PORT is $RMI_PORT, which is invalid!\n"
+ exit 1
+ fi
+ fi
+
+ REMOTE_JMX_OPTS=('-Dcom.sun.management.jmxremote' \
+ '-Dcom.sun.management.jmxremote.local.only=false' \
+ '-Dcom.sun.management.jmxremote.ssl=false' \
+ '-Dcom.sun.management.jmxremote.authenticate=false' \
+ "-Dcom.sun.management.jmxremote.port=$RMI_PORT" \
+ "-Dcom.sun.management.jmxremote.rmi.port=$RMI_PORT")
+
+ # if the host is set, then set that as the rmi server hostname
+ if [ "$SOLR_HOST" != "" ]; then
+ REMOTE_JMX_OPTS+=("-Djava.rmi.server.hostname=$SOLR_HOST")
+ fi
+else
+ REMOTE_JMX_OPTS=()
+fi
+
+JAVA_MEM_OPTS=()
+if [ -z "$SOLR_HEAP" ] && [ -n "$SOLR_JAVA_MEM" ]; then
+ JAVA_MEM_OPTS=($SOLR_JAVA_MEM)
+else
+ SOLR_HEAP="${SOLR_HEAP:-512m}"
+ JAVA_MEM_OPTS=("-Xms$SOLR_HEAP" "-Xmx$SOLR_HEAP")
+fi
+
+# Pick default for Java thread stack size, and then add to SOLR_OPTS
+if [ -z ${SOLR_JAVA_STACK_SIZE+x} ]; then
+ SOLR_JAVA_STACK_SIZE='-Xss256k'
+fi
+SOLR_OPTS+=($SOLR_JAVA_STACK_SIZE)
+
+if [ -z "$SOLR_TIMEZONE" ]; then
+ SOLR_TIMEZONE='UTC'
+fi
+
+# Launches Solr in foreground/background depending on parameters
+function start_solr() {
+
+ run_in_foreground="$1"
+ stop_port="$STOP_PORT"
+
+ SOLR_ADDL_ARGS="$2"
+ SOLR_JETTY_ADDL_CONFIG="$3"
+
+ # define default GC_TUNE
+ if [ -z ${GC_TUNE+x} ]; then
+ GC_TUNE=('-XX:+UseG1GC' \
+ '-XX:+PerfDisableSharedMem' \
+ '-XX:+ParallelRefProcEnabled' \
+ '-XX:MaxGCPauseMillis=250' \
+ '-XX:+UseLargePages' \
+ '-XX:+AlwaysPreTouch')
+ else
+ GC_TUNE=($GC_TUNE)
+ fi
+
+ if [ -n "$SOLR_WAIT_FOR_ZK" ]; then
+ WAIT_FOR_ZK_PROP="-DwaitForZk=$SOLR_WAIT_FOR_ZK"
+ SOLR_OPTS+=($WAIT_FOR_ZK_PROP)
+ fi
+
+ # If SSL-related system props are set, add them to SOLR_OPTS
+ if [ "$SOLR_SSL_ENABLED" ]; then
+ # If using SSL and solr.jetty.https.port not set explicitly, use the jetty.port
+ SSL_PORT_PROP="-Dsolr.jetty.https.port=$SOLR_PORT"
+ SOLR_OPTS+=($SOLR_SSL_OPTS "$SSL_PORT_PROP")
+ fi
+
+ # If authentication system props are set, add them to SOLR_OPTS
+ if [ -n "$AUTHC_OPTS" ]; then
+ SOLR_OPTS+=($AUTHC_OPTS)
+ fi
+
+ if $verbose ; then
+ echo -e "\nStarting Solr using the following settings:"
+ echo -e " JAVA = $JAVA"
+ echo -e " SOLR_SERVER_DIR = $SOLR_SERVER_DIR"
+ echo -e " SOLR_HOME = $SOLR_HOME"
+ echo -e " SOLR_HOST = $SOLR_HOST"
+ echo -e " SOLR_PORT = $SOLR_PORT"
+ echo -e " STOP_PORT = $STOP_PORT"
+ echo -e " JAVA_MEM_OPTS = ${JAVA_MEM_OPTS[@]}"
+ echo -e " GC_TUNE = ${GC_TUNE[@]}"
+ echo -e " GC_LOG_OPTS = ${GC_LOG_OPTS[@]}"
+ echo -e " SOLR_TIMEZONE = $SOLR_TIMEZONE"
+
+ if [ "$SOLR_MODE" == "solrcloud" ]; then
+ echo -e " CLOUD_MODE_OPTS = ${CLOUD_MODE_OPTS[@]}"
+ fi
+
+ if [ "$SOLR_OPTS" != "" ]; then
+ echo -e " SOLR_OPTS = ${SOLR_OPTS[@]}"
+ fi
+
+ if [ "$SOLR_ADDL_ARGS" != "" ]; then
+ echo -e " SOLR_ADDL_ARGS = $SOLR_ADDL_ARGS"
+ fi
+
+ if [ "$ENABLE_REMOTE_JMX_OPTS" == "true" ]; then
+ echo -e " RMI_PORT = $RMI_PORT"
+ echo -e " REMOTE_JMX_OPTS = ${REMOTE_JMX_OPTS[@]}"
+ fi
+
+ if [ "$SOLR_LOG_LEVEL" != "" ]; then
+ echo -e " SOLR_LOG_LEVEL = $SOLR_LOG_LEVEL"
+ fi
+
+ if [ "$SOLR_DATA_HOME" != "" ]; then
+ echo -e " SOLR_DATA_HOME = $SOLR_DATA_HOME"
+ fi
+ echo -e "\n"
+ fi
+
+ # need to launch solr from the server dir
+ cd "$SOLR_SERVER_DIR"
+
+ if [ ! -e "$SOLR_SERVER_DIR/start.jar" ]; then
+ echo -e "\nERROR: start.jar file not found in $SOLR_SERVER_DIR!\nPlease check your -d parameter to set the correct Solr server directory.\n"
+ exit 1
+ fi
+
+ SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE[@]}" "${GC_LOG_OPTS[@]}" \
+ "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" $SOLR_LOG_LEVEL_OPT -Dsolr.log.dir="$SOLR_LOGS_DIR" \
+ "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \
+ "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" \
+ "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.data.home=$SOLR_DATA_HOME" "-Dsolr.install.dir=$SOLR_TIP" \
+ "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}")
+
+ if [ "$SOLR_MODE" == "solrcloud" ]; then
+ IN_CLOUD_MODE=" in SolrCloud mode"
+ fi
+
+ mkdir -p "$SOLR_LOGS_DIR" 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo -e "\nERROR: Logs directory $SOLR_LOGS_DIR could not be created. Exiting"
+ exit 1
+ fi
+ if [ ! -w "$SOLR_LOGS_DIR" ]; then
+ echo -e "\nERROR: Logs directory $SOLR_LOGS_DIR is not writable. Exiting"
+ exit 1
+ fi
+ case "$SOLR_LOGS_DIR" in
+ contexts|etc|lib|modules|resources|scripts|solr|solr-webapp)
+ echo -e "\nERROR: Logs directory $SOLR_LOGS_DIR is invalid. Reserved for the system. Exiting"
+ exit 1
+ ;;
+ esac
+
+ if [ "$run_in_foreground" == "true" ]; then
+ exec "$JAVA" "${SOLR_START_OPTS[@]}" $SOLR_ADDL_ARGS -jar start.jar "${SOLR_JETTY_CONFIG[@]}" $SOLR_JETTY_ADDL_CONFIG
+ else
+ # run Solr in the background
+ nohup "$JAVA" "${SOLR_START_OPTS[@]}" $SOLR_ADDL_ARGS -Dsolr.log.muteconsole \
+ "-XX:OnOutOfMemoryError=$SOLR_TIP/bin/oom_solr.sh $SOLR_PORT $SOLR_LOGS_DIR" \
+ -jar start.jar "${SOLR_JETTY_CONFIG[@]}" $SOLR_JETTY_ADDL_CONFIG \
+ 1>"$SOLR_LOGS_DIR/solr-$SOLR_PORT-console.log" 2>&1 & echo $! > "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
+
+ # check if /proc/sys/kernel/random/entropy_avail exists then check output of cat /proc/sys/kernel/random/entropy_avail to see if less than 300
+ if [[ -f /proc/sys/kernel/random/entropy_avail ]] && (( `cat /proc/sys/kernel/random/entropy_avail` < 300)); then
+ echo "Warning: Available entropy is low. As a result, use of the UUIDField, SSL, or any other features that require"
+ echo "RNG might not work properly. To check for the amount of available entropy, use 'cat /proc/sys/kernel/random/entropy_avail'."
+ echo ""
+ fi
+ # no lsof on cygwin though
+ if hash lsof 2>/dev/null ; then # hash returns true if lsof is on the path
+ echo -n "Waiting up to $SOLR_STOP_WAIT seconds to see Solr running on port $SOLR_PORT"
+ # Launch in a subshell to show the spinner
+ (loops=0
+ while true
+ do
+ running=`lsof -PniTCP:$SOLR_PORT -sTCP:LISTEN`
+ if [ -z "$running" ]; then
+ slept=$((loops * 2))
+ if [ $slept -lt $SOLR_STOP_WAIT ]; then
+ sleep 2
+ loops=$[$loops+1]
+ else
+ echo -e "Still not seeing Solr listening on $SOLR_PORT after $SOLR_STOP_WAIT seconds!"
+ tail -30 "$SOLR_LOGS_DIR/solr.log"
+ exit # subshell!
+ fi
+ else
+ SOLR_PID=`ps auxww | grep start\.jar | grep -w "\-Djetty\.port=$SOLR_PORT" | grep -v grep | awk '{print $2}' | sort -r`
+ echo -e "\nStarted Solr server on port $SOLR_PORT (pid=$SOLR_PID). Happy searching!\n"
+ exit # subshell!
+ fi
+ done) &
+ spinner $!
+ else
+ echo -e "NOTE: Please install lsof as this script needs it to determine if Solr is listening on port $SOLR_PORT."
+ sleep 10
+ SOLR_PID=`ps auxww | grep start\.jar | grep -w "\-Djetty\.port=$SOLR_PORT" | grep -v grep | awk '{print $2}' | sort -r`
+ echo -e "\nStarted Solr server on port $SOLR_PORT (pid=$SOLR_PID). Happy searching!\n"
+ return;
+ fi
+ fi
+}
+
+start_solr "$FG" "$ADDITIONAL_CMD_OPTS" "$ADDITIONAL_JETTY_CONFIG"
+
+exit $?
diff --git a/solr-8.1.1/bin/solr-8983.port b/solr-8.1.1/bin/solr-8983.port
new file mode 100644
index 000000000..56d21626c
--- /dev/null
+++ b/solr-8.1.1/bin/solr-8983.port
@@ -0,0 +1 @@
+8983
diff --git a/solr-8.1.1/bin/solr.cmd b/solr-8.1.1/bin/solr.cmd
new file mode 100644
index 000000000..a4c9d4f89
--- /dev/null
+++ b/solr-8.1.1/bin/solr.cmd
@@ -0,0 +1,2026 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one or more
+@REM contributor license agreements. See the NOTICE file distributed with
+@REM this work for additional information regarding copyright ownership.
+@REM The ASF licenses this file to You under the Apache License, Version 2.0
+@REM (the "License"); you may not use this file except in compliance with
+@REM the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+@echo off
+
+IF "%OS%"=="Windows_NT" setlocal enabledelayedexpansion enableextensions
+
+set "PASS_TO_RUN_EXAMPLE="
+
+REM Determine top-level Solr directory
+set SDIR=%~dp0
+IF "%SDIR:~-1%"=="\" set SDIR=%SDIR:~0,-1%
+set SOLR_TIP=%SDIR%\..
+pushd %SOLR_TIP%
+set SOLR_TIP=%CD%
+popd
+
+REM Used to report errors before exiting the script
+set SCRIPT_ERROR=
+set NO_USER_PROMPT=0
+
+REM Allow user to import vars from an include file
+REM vars set in the include file can be overridden with
+REM command line args
+IF "%SOLR_INCLUDE%"=="" set "SOLR_INCLUDE=%SOLR_TIP%\bin\solr.in.cmd"
+IF EXIST "%SOLR_INCLUDE%" CALL "%SOLR_INCLUDE%"
+
+set "DEFAULT_SERVER_DIR=%SOLR_TIP%\server"
+
+REM Select HTTP OR HTTPS related configurations
+set SOLR_URL_SCHEME=http
+set "SOLR_JETTY_CONFIG=--module=http"
+set "SOLR_SSL_OPTS= "
+
+IF DEFINED SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dhadoop.security.credential.provider.path=%SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH%"
+)
+
+IF NOT DEFINED SOLR_SSL_ENABLED (
+ IF DEFINED SOLR_SSL_KEY_STORE (
+ set "SOLR_SSL_ENABLED=true"
+ ) ELSE (
+ set "SOLR_SSL_ENABLED=false"
+ )
+)
+
+IF "%SOLR_SSL_ENABLED%"=="true" (
+ set "SOLR_JETTY_CONFIG=--lib="%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*""
+ if !JAVA_MAJOR_VERSION! GEQ 9 (
+ set "SOLR_JETTY_CONFIG=!SOLR_JETTY_CONFIG! --module=https"
+ ) else (
+ set "SOLR_JETTY_CONFIG=!SOLR_JETTY_CONFIG! --module=https8"
+ )
+ set SOLR_URL_SCHEME=https
+ IF DEFINED SOLR_SSL_KEY_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.keystore=%SOLR_SSL_KEY_STORE%"
+ )
+
+ IF DEFINED SOLR_SSL_KEY_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.keystore.type=%SOLR_SSL_KEY_STORE_TYPE%"
+ )
+
+ IF DEFINED SOLR_SSL_TRUST_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.truststore=%SOLR_SSL_TRUST_STORE%"
+ )
+ IF DEFINED SOLR_SSL_TRUST_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.truststore.type=%SOLR_SSL_TRUST_STORE_TYPE%"
+ )
+
+ IF DEFINED SOLR_SSL_NEED_CLIENT_AUTH (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.ssl.needClientAuth=%SOLR_SSL_NEED_CLIENT_AUTH%"
+ )
+ IF DEFINED SOLR_SSL_WANT_CLIENT_AUTH (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.jetty.ssl.wantClientAuth=%SOLR_SSL_WANT_CLIENT_AUTH%"
+ )
+
+ IF DEFINED SOLR_SSL_CLIENT_KEY_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.keyStore=%SOLR_SSL_CLIENT_KEY_STORE%"
+
+ IF DEFINED SOLR_SSL_CLIENT_KEY_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.keyStoreType=%SOLR_SSL_CLIENT_KEY_STORE_TYPE%"
+ )
+ ) ELSE (
+ IF DEFINED SOLR_SSL_KEY_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.keyStore=%SOLR_SSL_KEY_STORE%"
+ )
+ IF DEFINED SOLR_SSL_KEY_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.keyStoreType=%SOLR_SSL_KEY_STORE_TYPE%"
+ )
+ )
+
+ IF DEFINED SOLR_SSL_CLIENT_TRUST_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.trustStore=%SOLR_SSL_CLIENT_TRUST_STORE%"
+
+ IF DEFINED SOLR_SSL_CLIENT_TRUST_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.trustStoreType=%SOLR_SSL_CLIENT_TRUST_STORE_TYPE%"
+ )
+ ) ELSE (
+ IF DEFINED SOLR_SSL_TRUST_STORE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.trustStore=%SOLR_SSL_TRUST_STORE%"
+ )
+ IF DEFINED SOLR_SSL_TRUST_STORE_TYPE (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Djavax.net.ssl.trustStoreType=%SOLR_SSL_TRUST_STORE_TYPE%"
+ )
+ )
+ IF DEFINED SOLR_SSL_CHECK_PEER_NAME (
+ set "SOLR_SSL_OPTS=!SOLR_SSL_OPTS! -Dsolr.ssl.checkPeerName=%SOLR_SSL_CHECK_PEER_NAME%"
+ )
+) ELSE (
+ set SOLR_SSL_OPTS=
+)
+
+REM Authentication options
+
+IF NOT DEFINED SOLR_AUTH_TYPE (
+ IF DEFINED SOLR_AUTHENTICATION_OPTS (
+ echo WARNING: SOLR_AUTHENTICATION_OPTS variable configured without associated SOLR_AUTH_TYPE variable
+ echo Please configure SOLR_AUTH_TYPE variable with the authentication type to be used.
+ echo Currently supported authentication types are [kerberos, basic]
+ )
+)
+
+IF DEFINED SOLR_AUTH_TYPE (
+ IF DEFINED SOLR_AUTHENTICATION_CLIENT_BUILDER (
+ echo WARNING: SOLR_AUTHENTICATION_CLIENT_BUILDER and SOLR_AUTH_TYPE variables are configured together
+ echo Use SOLR_AUTH_TYPE variable to configure authentication type to be used
+ echo Currently supported authentication types are [kerberos, basic]
+ echo The value of SOLR_AUTHENTICATION_CLIENT_BUILDER configuration variable will be ignored
+ )
+)
+
+IF DEFINED SOLR_AUTH_TYPE (
+ IF /I "%SOLR_AUTH_TYPE%" == "basic" (
+ set SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory"
+ ) ELSE (
+ IF /I "%SOLR_AUTH_TYPE%" == "kerberos" (
+ set SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory"
+ ) ELSE (
+ echo ERROR: Value specified for SOLR_AUTH_TYPE configuration variable is invalid.
+ goto err
+ )
+ )
+)
+
+IF DEFINED SOLR_AUTHENTICATION_CLIENT_CONFIGURER (
+ echo WARNING: Found unsupported configuration variable SOLR_AUTHENTICATION_CLIENT_CONFIGURER
+ echo Please start using SOLR_AUTH_TYPE instead
+)
+IF DEFINED SOLR_AUTHENTICATION_CLIENT_BUILDER (
+ set AUTHC_CLIENT_BUILDER_ARG="-Dsolr.httpclient.builder.factory=%SOLR_AUTHENTICATION_CLIENT_BUILDER%"
+)
+set "AUTHC_OPTS=%AUTHC_CLIENT_BUILDER_ARG% %SOLR_AUTHENTICATION_OPTS%"
+
+REM Set the SOLR_TOOL_HOST variable for use when connecting to a running Solr instance
+IF NOT "%SOLR_HOST%"=="" (
+ set "SOLR_TOOL_HOST=%SOLR_HOST%"
+) ELSE (
+ set "SOLR_TOOL_HOST=localhost"
+)
+IF "%SOLR_JETTY_HOST%"=="" (
+ set SOLR_JETTY_HOST=0.0.0.0
+)
+
+REM Verify Java is available
+IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME=%SOLR_JAVA_HOME%"
+REM Try to detect JAVA_HOME from the registry
+IF NOT DEFINED JAVA_HOME (
+ FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B
+ FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\!CurVer!" /v JavaHome') DO (
+ set "JAVA_HOME=%%B"
+ )
+)
+IF NOT DEFINED JAVA_HOME goto need_java_home
+set JAVA_HOME=%JAVA_HOME:"=%
+IF %JAVA_HOME:~-1%==\ SET JAVA_HOME=%JAVA_HOME:~0,-1%
+IF NOT EXIST "%JAVA_HOME%\bin\java.exe" (
+ set "SCRIPT_ERROR=java.exe not found in %JAVA_HOME%\bin. Please set JAVA_HOME to a valid JRE / JDK directory."
+ goto err
+)
+set "JAVA=%JAVA_HOME%\bin\java"
+CALL :resolve_java_info
+IF !JAVA_MAJOR_VERSION! LSS 8 (
+ set "SCRIPT_ERROR=Java 1.8 or later is required to run Solr. Current Java version is: !JAVA_VERSION_INFO! (detected major: !JAVA_MAJOR_VERSION!)"
+ goto err
+)
+
+set FIRST_ARG=%1
+
+IF [%1]==[] goto usage
+
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+IF "%1"=="-h" goto usage
+IF "%1"=="--help" goto usage
+IF "%1"=="/?" goto usage
+IF "%1"=="-i" goto get_info
+IF "%1"=="-info" goto get_info
+IF "%1"=="status" goto get_info
+IF "%1"=="version" goto get_version
+IF "%1"=="-v" goto get_version
+IF "%1"=="-version" goto get_version
+IF "%1"=="assert" goto run_assert
+IF "%1"=="autoscaling" goto run_autoscaling
+
+REM Only allow the command to be the first argument, assume start if not supplied
+IF "%1"=="start" goto set_script_cmd
+IF "%1"=="stop" goto set_script_cmd
+IF "%1"=="restart" goto set_script_cmd
+IF "%1"=="healthcheck" (
+ REM healthcheck uses different arg parsing strategy
+ set SCRIPT_CMD=healthcheck
+ SHIFT
+ goto parse_healthcheck_args
+)
+IF "%1"=="create" (
+ set SCRIPT_CMD=create
+ SHIFT
+ goto parse_create_args
+)
+IF "%1"=="create_core" (
+ set SCRIPT_CMD=create_core
+ SHIFT
+ goto parse_create_args
+)
+IF "%1"=="create_collection" (
+ set SCRIPT_CMD=create_collection
+ SHIFT
+ goto parse_create_args
+)
+IF "%1"=="delete" (
+ set SCRIPT_CMD=delete
+ SHIFT
+ goto parse_delete_args
+)
+IF "%1"=="zk" (
+ set SCRIPT_CMD=zk
+ SHIFT
+ set ZK_RECURSE=false
+ goto parse_zk_args
+)
+IF "%1"=="auth" (
+ set SCRIPT_CMD=auth
+ SHIFT
+ goto run_auth
+)
+IF "%1"=="config" (
+ REM config uses different arg parsing strategy
+ set SCRIPT_CMD=config
+ SHIFT
+ set CONFIG_ARGS=
+ goto parse_config_args
+)
+
+goto parse_args
+
+:usage
+IF NOT "%SCRIPT_ERROR%"=="" ECHO %SCRIPT_ERROR%
+IF [%FIRST_ARG%]==[] goto script_usage
+IF "%FIRST_ARG%"=="-help" goto script_usage
+IF "%FIRST_ARG%"=="-usage" goto script_usage
+IF "%FIRST_ARG%"=="-h" goto script_usage
+IF "%FIRST_ARG%"=="--help" goto script_usage
+IF "%FIRST_ARG%"=="/?" goto script_usage
+IF "%SCRIPT_CMD%"=="start" goto start_usage
+IF "%SCRIPT_CMD%"=="restart" goto start_usage
+IF "%SCRIPT_CMD%"=="stop" goto stop_usage
+IF "%SCRIPT_CMD%"=="healthcheck" goto healthcheck_usage
+IF "%SCRIPT_CMD%"=="create" goto create_usage
+IF "%SCRIPT_CMD%"=="create_core" goto create_core_usage
+IF "%SCRIPT_CMD%"=="create_collection" goto create_collection_usage
+IF "%SCRIPT_CMD%"=="delete" goto delete_usage
+IF "%SCRIPT_CMD%"=="zk" goto zk_usage
+IF "%SCRIPT_CMD%"=="auth" goto auth_usage
+IF "%SCRIPT_CMD%"=="status" goto status_usage
+goto done
+
+:script_usage
+@echo.
+@echo Usage: solr COMMAND OPTIONS
+@echo where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling
+@echo.
+@echo Standalone server example (start Solr running in the background on port 8984):
+@echo.
+@echo solr start -p 8984
+@echo.
+@echo SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):
+@echo.
+@echo solr start -c -m 1g -z localhost:2181 -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044"
+@echo.
+@echo Omit '-z localhost:2181' from the above command if you have defined ZK_HOST in solr.in.cmd.
+@echo.
+@echo Pass -help after any COMMAND to see command-specific usage information,
+@echo such as: solr start -help or solr stop -help
+@echo.
+goto done
+
+:start_usage
+@echo.
+@echo Usage: solr %SCRIPT_CMD% [-f] [-c] [-h hostname] [-p port] [-d directory] [-z zkHost] [-m memory] [-e example] [-s solr.solr.home] [-t solr.data.home] [-a "additional-options"] [-V]
+@echo.
+@echo -f Start Solr in foreground; default starts Solr in the background
+@echo and sends stdout / stderr to solr-PORT-console.log
+@echo.
+@echo -c or -cloud Start Solr in SolrCloud mode; if -z not supplied and ZK_HOST not defined in
+@echo solr.in.cmd, an embedded ZooKeeper instance is started on Solr port+1000,
+@echo such as 9983 if Solr is bound to 8983
+@echo.
+@echo -h host Specify the hostname for this Solr instance
+@echo.
+@echo -p port Specify the port to start the Solr HTTP listener on; default is 8983
+@echo " The specified port (SOLR_PORT) will also be used to determine the stop port"
+@echo " STOP_PORT=(\$SOLR_PORT-1000) and JMX RMI listen port RMI_PORT=(\$SOLR_PORT+10000). "
+@echo " For instance, if you set -p 8985, then the STOP_PORT=7985 and RMI_PORT=18985"
+@echo.
+@echo -d dir Specify the Solr server directory; defaults to server
+@echo.
+@echo -z zkHost Zookeeper connection string; only used when running in SolrCloud mode using -c
+@echo If neither ZK_HOST is defined in solr.in.cmd nor the -z parameter is specified,
+@echo an embedded ZooKeeper instance will be launched.
+@echo.
+@echo -m memory Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g
+@echo results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m
+@echo.
+@echo -s dir Sets the solr.solr.home system property; Solr will create core directories under
+@echo this directory. This allows you to run multiple Solr instances on the same host
+@echo while reusing the same server directory set using the -d parameter. If set, the
+@echo specified directory should contain a solr.xml file, unless solr.xml exists in Zookeeper.
+@echo This parameter is ignored when running examples (-e), as the solr.solr.home depends
+@echo on which example is run. The default value is server/solr. If passed a relative dir
+@echo validation with the current dir will be done before trying the default server/^<dir^>
+@echo.
+@echo -t dir Sets the solr.data.home system property, where Solr will store index data in ^<instance_dir^>/data subdirectories.
+@echo If not set, Solr uses solr.solr.home for both config and data.
+@echo.
+@echo -e example Name of the example to run; available examples:
+@echo cloud: SolrCloud example
+@echo techproducts: Comprehensive example illustrating many of Solr's core capabilities
+@echo dih: Data Import Handler
+@echo schemaless: Schema-less example
+@echo.
+@echo -a opts Additional parameters to pass to the JVM when starting Solr, such as to setup
+@echo Java debug options. For example, to enable a Java debugger to attach to the Solr JVM
+@echo you could pass: -a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18983"
+@echo In most cases, you should wrap the additional parameters in double quotes.
+@echo.
+@echo -j opts Additional parameters to pass to Jetty when starting Solr.
+@echo For example, to add configuration folder that jetty should read
+@echo you could pass: -j "--include-jetty-dir=/etc/jetty/custom/server/"
+@echo In most cases, you should wrap the additional parameters in double quotes.
+@echo.
+@echo -noprompt Don't prompt for input; accept all defaults when running examples that accept user input
+@echo.
+@echo -v and -q Verbose (-v) or quiet (-q) logging. Sets default log level to DEBUG or WARN instead of INFO
+@echo.
+@echo -V/-verbose Verbose messages from this script
+@echo.
+goto done
+
+:status_usage
+@echo.
+@echo Usage: solr status
+@echo.
+@echo NOTE: This command will show the status of all running Solr servers
+@echo.
+goto done
+
+:stop_usage
+@echo.
+@echo Usage: solr stop [-k key] [-p port] [-V]
+@echo.
+@echo -k key Stop key; default is solrrocks
+@echo.
+@echo -p port Specify the port the Solr HTTP listener is bound to
+@echo.
+@echo -all Find and stop all running Solr servers on this host
+@echo.
+@echo -V/-verbose Verbose messages from this script
+@echo.
+@echo NOTE: To see if any Solr servers are running, do: solr status
+@echo.
+goto done
+
+:healthcheck_usage
+@echo.
+@echo Usage: solr healthcheck [-c collection] [-z zkHost] [-V]
+@echo.
+@echo Can be run from remote (non-Solr^) hosts, as long as a proper ZooKeeper connection is provided
+@echo.
+@echo -c collection Collection to run healthcheck against.
+@echo.
+@echo -z zkHost Zookeeper connection string; unnecessary if ZK_HOST is defined in solr.in.cmd;
+@echo otherwise, default is localhost:9983
+@echo.
+@echo -V Enable more verbose output
+@echo.
+goto done
+
+:create_usage
+echo.
+echo Usage: solr create [-c name] [-d confdir] [-n confname] [-shards #] [-replicationFactor #] [-p port] [-V]
+echo.
+echo Create a core or collection depending on whether Solr is running in standalone (core) or SolrCloud
+echo mode (collection). In other words, this action detects which mode Solr is running in, and then takes
+echo the appropriate action (either create_core or create_collection). For detailed usage instructions, do:
+echo.
+echo bin\solr create_core -help
+echo.
+echo or
+echo.
+echo bin\solr create_collection -help
+echo.
+goto done
+
+:delete_usage
+echo.
+echo Usage: solr delete [-c name] [-deleteConfig true^|false] [-p port] [-V]
+echo.
+echo Deletes a core or collection depending on whether Solr is running in standalone (core) or SolrCloud
+echo mode (collection). If you're deleting a collection in SolrCloud mode, the default behavior is to also
+echo delete the configuration directory from Zookeeper so long as it is not being used by another collection.
+echo You can override this behavior by passing -deleteConfig false when running this command.
+echo.
+echo Can be run on remote (non-Solr^) hosts, as long as a valid SOLR_HOST is provided in solr.in.cmd
+echo.
+echo -c name Name of core to delete
+echo.
+echo -deleteConfig boolean Delete the configuration directory from Zookeeper; default is true
+echo.
+echo -p port Port of a local Solr instance where you want to delete the core/collection
+echo If not specified, the script will search the local system for a running
+echo Solr instance and will use the port of the first server it finds.
+echo.
+echo -V Enables more verbose output.
+echo.
+goto done
+
+:create_core_usage
+echo.
+echo Usage: solr create_core [-c ^<core^>] [-d confdir] [-p port] [-V]
+echo.
+echo When a configSet is used, this can be run from any host. If pointing at a non-configSet directory, this
+echo must be run from the host that you wish to create the core on.
+echo.
+echo -c ^<core^> Name of core to create
+echo.
+echo -d confdir Configuration directory to copy when creating the new core, built-in options are:
+echo.
+echo _default: Minimal configuration, which supports enabling/disabling field-guessing support
+echo sample_techproducts_configs: Example configuration with many optional features enabled to
+echo demonstrate the full power of Solr
+echo.
+echo If not specified, default is: _default
+echo.
+echo Alternatively, you can pass the path to your own configuration directory instead of using
+echo one of the built-in configurations, such as: bin\solr create_core -c mycore -d c:/tmp/myconfig
+echo.
+echo -p port Port of a local Solr instance where you want to create the new core
+echo If not specified, the script will search the local system for a running
+echo Solr instance and will use the port of the first server it finds.
+echo.
+echo -V Enable more verbose output.
+echo.
+goto done
+
+:create_collection_usage
+echo.
+echo Usage: solr create_collection [-c collection] [-d confdir] [-n confname] [-shards #] [-replicationFactor #] [-p port] [-V]
+echo.
+echo Can be run from remote (non-Solr^) hosts, as long as a valid SOLR_HOST is provided in solr.in.cmd.
+echo.
+echo -c ^<collection^> Name of collection to create
+echo.
+echo -d ^<confdir^> Configuration directory to copy when creating the new collection, built-in options are:
+echo.
+echo _default: Minimal configuration, which supports enabling/disabling field-guessing support
+echo sample_techproducts_configs: Example configuration with many optional features enabled to
+echo demonstrate the full power of Solr
+echo.
+echo If not specified, default is: _default
+echo.
+echo Alternatively, you can pass the path to your own configuration directory instead of using
+echo one of the built-in configurations, such as: bin\solr create_collection -c mycoll -d c:/tmp/myconfig
+echo.
+echo By default the script will upload the specified confdir directory into Zookeeper using the same
+echo name as the collection (-c) option. Alternatively, if you want to reuse an existing directory
+echo or create a confdir in Zookeeper that can be shared by multiple collections, use the -n option
+echo.
+echo -n configName Name the configuration directory in Zookeeper; by default, the configuration
+echo will be uploaded to Zookeeper using the collection name (-c), but if you want
+echo to use an existing directory or override the name of the configuration in
+echo Zookeeper, then use the -c option.
+echo.
+echo -shards # Number of shards to split the collection into; default is 1
+echo.
+echo -replicationFactor # Number of copies of each document in the collection, default is 1 (no replication)
+echo.
+echo -p port Port of a local Solr instance where you want to create the new collection
+echo If not specified, the script will search the local system for a running
+echo Solr instance and will use the port of the first server it finds.
+echo.
+echo -V Enable more verbose output.
+echo.
+goto done
+
+:zk_usage
+set ZK_FULL=true
+goto zk_short_usage
+:zk_full_usage
+echo Can be run on remote (non-Solr^) hosts, as long as valid ZK_HOST information is provided.
+echo Be sure to check the Solr logs in case of errors.
+echo.
+echo -z zkHost Optional Zookeeper connection string for all commands. If specified it
+echo overrides the 'ZK_HOST=...'' defined in solr.in.cmd.
+echo.
+echo -V Enable more verbose output.
+echo.
+echo upconfig uploads a configset from the local machine to Zookeeper. (Backcompat: -upconfig)
+echo.
+echo downconfig downloads a configset from Zookeeper to the local machine. (Backcompat: -downconfig)
+echo.
+echo -n configName Name of the configset in Zookeeper that will be the destination of
+echo 'upconfig' and the source for 'downconfig'.
+echo.
+echo -d confdir The local directory the configuration will be uploaded from for
+echo 'upconfig' or downloaded to for 'downconfig'. If 'confdir' is a child of
+echo ...solr/server/solr/configsets' then the configs will be copied from/to
+echo that directory. Otherwise it is interpreted as a simple local path.
+echo.
+echo cp copies files or folders to/from Zookeeper or Zokeeper -^> Zookeeper
+echo -r Recursively copy ^<src^> to ^<dst^>. Command will fail if ^<src^> has children and
+echo -r is not specified. Optional
+echo.
+echo. ^<src^>, ^<dest^> : [file:][/]path/to/local/file or zk:/path/to/zk/node
+echo NOTE: ^<src^> and ^<dest^> may both be Zookeeper resources prefixed by 'zk:'
+echo When ^<src^> is a zk resource, ^<dest^> may be '.'
+echo If ^<dest^> ends with '/', then ^<dest^> will be a local folder or parent znode and the last
+echo element of the ^<src^> path will be appended unless ^<src^> also ends in a slash.
+echo ^<dest^> may be zk:, which may be useful when using the cp -r form to backup/restore
+echo the entire zk state.
+echo You must enclose local paths that end in a wildcard in quotes or just
+echo end the local path in a slash. That is,
+echo 'bin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181' is equivalent to
+echo 'bin/solr zk cp -r ^"/some/dir/*^" zk:/ -z localhost:2181'
+echo but 'bin/solr zk cp -r /some/dir/* zk:/ -z localhost:2181' will throw an error.
+echo.
+echo Here's an example of backup/restore for a ZK configuration:
+echo to copy to local: 'bin/solr zk cp -r zk:/ /some/dir -z localhost:2181'
+echo to restore to ZK: 'bin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181'
+echo.
+echo The 'file:' prefix is stripped, thus 'file:/wherever' specifies an absolute local path and
+echo 'file:somewhere' specifies a relative local path. All paths on Zookeeper are absolute.
+echo.
+echo Zookeeper nodes CAN have data, so moving a single file to a parent znode
+echo will overlay the data on the parent Znode so specifying the trailing slash
+echo can be important.
+echo.
+echo Wildcards are supported when copying from local, trailing only and must be quoted.
+echo.
+echo rm deletes files or folders on Zookeeper
+echo -r Recursively delete if ^<path^> is a directory. Command will fail if ^<path^>
+echo has children and -r is not specified. Optional
+echo ^<path^> : [zk:]/path/to/zk/node. ^<path^> may not be the root ('/')
+echo.
+echo mv moves (renames) znodes on Zookeeper
+echo ^<src^>, ^<dest^> : Zookeeper nodes, the 'zk:' prefix is optional.
+echo If ^<dest^> ends with '/', then ^<dest^> will be a parent znode
+echo and the last element of the ^<src^> path will be appended.
+echo Zookeeper nodes CAN have data, so moving a single file to a parent znode
+echo will overlay the data on the parent Znode so specifying the trailing slash
+echo is important.
+echo.
+echo ls lists the znodes on Zookeeper
+echo -r recursively descends the path listing all znodes. Optional
+echo ^<path^>: The Zookeeper path to use as the root.
+echo.
+echo Only the node names are listed, not data
+echo.
+echo mkroot makes a znode in Zookeeper with no data. Can be used to make a path of arbitrary
+echo depth but primarily intended to create a 'chroot'.
+echo.
+echo ^<path^>: The Zookeeper path to create. Leading slash is assumed if not present.
+echo Intermediate nodes are created as needed if not present.
+echo.
+
+goto done
+
+:zk_short_usage
+IF NOT "!ERROR_MSG!"=="" (
+ echo ERROR: !ERROR_MSG!
+ echo.
+)
+echo Usage: solr zk upconfig^|downconfig -d ^<confdir^> -n ^<configName^> [-z zkHost]
+echo solr zk cp [-r] ^<src^> ^<dest^> [-z zkHost]
+echo solr zk rm [-r] ^<path^> [-z zkHost]
+echo solr zk mv ^<src^> ^<dest^> [-z zkHost]
+echo solr zk ls [-r] ^<path^> [-z zkHost]
+echo solr zk mkroot ^<path^> [-z zkHost]
+echo.
+IF "%ZK_FULL%"=="true" (
+ goto zk_full_usage
+) ELSE (
+ echo Type bin/solr zk -help for full usage help
+)
+goto done
+
+:auth_usage
+echo Usage: solr auth enable [-type basicAuth] -credentials user:pass [-blockUnknown ^<true^|false^>] [-updateIncludeFileOnly ^<true^|false^>] [-V]
+echo solr auth enable [-type basicAuth] -prompt ^<true^|false^> [-blockUnknown ^<true^|false^>] [-updateIncludeFileOnly ^<true^|false^>] [-V]
+echo solr auth disable [-updateIncludeFileOnly ^<true^|false^>] [-V]
+echo.
+echo Updates or enables/disables authentication. Must be run on the machine hosting Solr.
+echo.
+echo -type ^<type^> The authentication mechanism to enable. Defaults to 'basicAuth'.
+echo.
+echo -credentials ^<user:pass^> The username and password of the initial user
+echo Note: only one of -prompt or -credentials must be provided
+echo.
+echo -prompt ^<true^|false^> Prompts the user to provide the credentials
+echo Note: only one of -prompt or -credentials must be provided
+echo.
+echo -blockUnknown ^<true^|false^> When true, this blocks out access to unauthenticated users. When not provided,
+echo this defaults to false (i.e. unauthenticated users can access all endpoints, except the
+echo operations like collection-edit, security-edit, core-admin-edit etc.^). Check the reference
+echo guide for Basic Authentication for more details.
+echo.
+echo -updateIncludeFileOnly ^<true^|false^> Only update the solr.in.sh or solr.in.cmd file, and skip actual enabling/disabling"
+echo authentication (i.e. don't update security.json^)"
+echo.
+echo -z zkHost Zookeeper connection string. Unnecessary if ZK_HOST is defined in solr.in.cmd.
+echo.
+echo -d ^<dir^> Specify the Solr server directory"
+echo.
+echo -s ^<dir^> Specify the Solr home directory. This is where any credentials or authentication"
+echo configuration files (e.g. basicAuth.conf^) would be placed."
+echo.
+echo -V Enable more verbose output
+echo.
+goto done
+
+REM Really basic command-line arg parsing
+:parse_args
+
+set "arg=%~1"
+set "firstTwo=%arg:~0,2%"
+IF "%SCRIPT_CMD%"=="" set SCRIPT_CMD=start
+IF [%1]==[] goto process_script_cmd
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+IF "%1"=="/?" goto usage
+IF "%1"=="-f" goto set_foreground_mode
+IF "%1"=="-foreground" goto set_foreground_mode
+IF "%1"=="-V" goto set_verbose
+IF "%1"=="-verbose" goto set_verbose
+IF "%1"=="-v" goto set_debug
+IF "%1"=="-q" goto set_warn
+IF "%1"=="-c" goto set_cloud_mode
+IF "%1"=="-cloud" goto set_cloud_mode
+IF "%1"=="-d" goto set_server_dir
+IF "%1"=="-dir" goto set_server_dir
+IF "%1"=="-s" goto set_solr_home_dir
+IF "%1"=="-t" goto set_solr_data_dir
+IF "%1"=="-solr.home" goto set_solr_home_dir
+IF "%1"=="-e" goto set_example
+IF "%1"=="-example" goto set_example
+IF "%1"=="-h" goto set_host
+IF "%1"=="-host" goto set_host
+IF "%1"=="-m" goto set_memory
+IF "%1"=="-memory" goto set_memory
+IF "%1"=="-p" goto set_port
+IF "%1"=="-port" goto set_port
+IF "%1"=="-z" goto set_zookeeper
+IF "%1"=="-zkhost" goto set_zookeeper
+IF "%1"=="-zkHost" goto set_zookeeper
+IF "%1"=="-a" goto set_addl_opts
+IF "%1"=="-addlopts" goto set_addl_opts
+IF "%1"=="-j" goto set_addl_jetty_config
+IF "%1"=="-jettyconfig" goto set_addl_jetty_config
+IF "%1"=="-noprompt" goto set_noprompt
+IF "%1"=="-k" goto set_stop_key
+IF "%1"=="-key" goto set_stop_key
+IF "%1"=="-all" goto set_stop_all
+IF "%firstTwo%"=="-D" goto set_passthru
+IF NOT "%1"=="" goto invalid_cmd_line
+goto invalid_cmd_line
+
+:set_script_cmd
+set SCRIPT_CMD=%1
+SHIFT
+goto parse_args
+
+:set_foreground_mode
+set FG=1
+SHIFT
+goto parse_args
+
+:set_verbose
+set verbose=1
+set "PASS_TO_RUN_EXAMPLE=--verbose !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+goto parse_args
+
+:set_debug
+set SOLR_LOG_LEVEL=DEBUG
+SHIFT
+goto parse_args
+
+:set_warn
+set SOLR_LOG_LEVEL=WARN
+SHIFT
+goto parse_args
+
+:set_cloud_mode
+set SOLR_MODE=solrcloud
+SHIFT
+goto parse_args
+
+:set_server_dir
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Directory name is required!
+ goto invalid_cmd_line
+)
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected directory but found %2 instead!
+ goto invalid_cmd_line
+)
+
+REM See if they are using a short-hand name relative from the Solr tip directory
+IF EXIST "%SOLR_TIP%\%~2" (
+ set "SOLR_SERVER_DIR=%SOLR_TIP%\%~2"
+) ELSE (
+ set "SOLR_SERVER_DIR=%~2"
+)
+SHIFT
+SHIFT
+goto parse_args
+
+:set_solr_home_dir
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Directory name is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected directory but found %2 instead!
+ goto invalid_cmd_line
+)
+set "SOLR_HOME=%~2"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_solr_data_dir
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Directory name is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected directory but found %2 instead!
+ goto invalid_cmd_line
+)
+set "SOLR_DATA_HOME=%~2"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_example
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Example name is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected example name but found %2 instead!
+ goto invalid_cmd_line
+)
+
+set EXAMPLE=%~2
+SHIFT
+SHIFT
+goto parse_args
+
+:set_memory
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Memory setting is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected memory setting but found %2 instead!
+ goto invalid_cmd_line
+)
+
+set SOLR_HEAP=%~2
+set "PASS_TO_RUN_EXAMPLE=-m %~2 !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_host
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Hostname is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected hostname but found %2 instead!
+ goto invalid_cmd_line
+)
+
+set SOLR_HOST=%~2
+set "PASS_TO_RUN_EXAMPLE=-h %~2 !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_port
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Port is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected port but found %2 instead!
+ goto invalid_cmd_line
+)
+
+set SOLR_PORT=%~2
+set "PASS_TO_RUN_EXAMPLE=-p %~2 !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_stop_key
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Stop key is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected stop key but found %2 instead!
+ goto invalid_cmd_line
+)
+set STOP_KEY=%~2
+SHIFT
+SHIFT
+goto parse_args
+
+:set_stop_all
+set STOP_ALL=1
+SHIFT
+goto parse_args
+
+:set_zookeeper
+
+set "arg=%~2"
+IF "%arg%"=="" (
+ set SCRIPT_ERROR=Zookeeper connection string is required!
+ goto invalid_cmd_line
+)
+
+set firstChar=%arg:~0,1%
+IF "%firstChar%"=="-" (
+ set SCRIPT_ERROR=Expected Zookeeper connection string but found %2 instead!
+ goto invalid_cmd_line
+)
+
+set "ZK_HOST=%~2"
+set "PASS_TO_RUN_EXAMPLE=-z %~2 !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_addl_opts
+set "arg=%~2"
+set "SOLR_ADDL_ARGS=%~2"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_addl_jetty_config
+set "arg=%~2"
+set "SOLR_JETTY_ADDL_CONFIG=%~2"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_passthru
+set "PASSTHRU=%~1=%~2"
+IF NOT "%SOLR_OPTS%"=="" (
+ set "SOLR_OPTS=%SOLR_OPTS% %PASSTHRU%"
+) ELSE (
+ set "SOLR_OPTS=%PASSTHRU%"
+)
+set "PASS_TO_RUN_EXAMPLE=%PASSTHRU% !PASS_TO_RUN_EXAMPLE!"
+SHIFT
+SHIFT
+goto parse_args
+
+:set_noprompt
+set NO_USER_PROMPT=1
+set "PASS_TO_RUN_EXAMPLE=-noprompt !PASS_TO_RUN_EXAMPLE!"
+
+SHIFT
+goto parse_args
+
+REM Perform the requested command after processing args
+:process_script_cmd
+
+IF "%verbose%"=="1" (
+ CALL :safe_echo "Using Solr root directory: %SOLR_TIP%"
+ CALL :safe_echo "Using Java: %JAVA%"
+ "%JAVA%" -version
+ @echo.
+)
+
+IF NOT "%SOLR_HOST%"=="" (
+ set SOLR_HOST_ARG=-Dhost=%SOLR_HOST%
+) ELSE (
+ set SOLR_HOST_ARG=
+)
+
+IF "%SOLR_SERVER_DIR%"=="" set "SOLR_SERVER_DIR=%DEFAULT_SERVER_DIR%"
+
+IF NOT EXIST "%SOLR_SERVER_DIR%" (
+ set "SCRIPT_ERROR=Solr server directory %SOLR_SERVER_DIR% not found!"
+ goto err
+)
+
+IF NOT "%EXAMPLE%"=="" goto run_example
+
+:start_solr
+IF "%SOLR_HOME%"=="" set "SOLR_HOME=%SOLR_SERVER_DIR%\solr"
+IF EXIST "%cd%\%SOLR_HOME%" set "SOLR_HOME=%cd%\%SOLR_HOME%"
+
+IF NOT EXIST "%SOLR_HOME%\" (
+ IF EXIST "%SOLR_SERVER_DIR%\%SOLR_HOME%" (
+ set "SOLR_HOME=%SOLR_SERVER_DIR%\%SOLR_HOME%"
+ ) ELSE (
+ set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% not found!"
+ goto err
+ )
+)
+
+IF "%STOP_KEY%"=="" set STOP_KEY=solrrocks
+
+@REM This is quite hacky, but examples rely on a different log4j2.xml
+@REM so that we can write logs for examples to %SOLR_HOME%\..\logs
+IF [%SOLR_LOGS_DIR%] == [] (
+ set "SOLR_LOGS_DIR=%SOLR_SERVER_DIR%\logs"
+) ELSE (
+ set SOLR_LOGS_DIR=%SOLR_LOGS_DIR:"=%
+)
+
+set "EXAMPLE_DIR=%SOLR_TIP%\example"
+set TMP_SOLR_HOME=!SOLR_HOME:%EXAMPLE_DIR%=!
+IF NOT "%TMP_SOLR_HOME%"=="%SOLR_HOME%" (
+ set "SOLR_LOGS_DIR=%SOLR_HOME%\..\logs"
+ set "LOG4J_CONFIG=file:///%SOLR_SERVER_DIR%\resources\log4j2.xml"
+)
+
+set IS_RESTART=0
+IF "%SCRIPT_CMD%"=="restart" (
+ IF "%SOLR_PORT%"=="" (
+ set "SCRIPT_ERROR=Must specify the port when trying to restart Solr."
+ goto err
+ )
+ set SCRIPT_CMD=stop
+ set IS_RESTART=1
+)
+
+@REM stop logic here
+IF "%SCRIPT_CMD%"=="stop" (
+ IF "%SOLR_PORT%"=="" (
+ IF "%STOP_ALL%"=="1" (
+ set found_it=0
+ for /f "usebackq" %%i in (`dir /b "%SOLR_TIP%\bin" ^| findstr /i "^solr-.*\.port$"`) do (
+ set SOME_SOLR_PORT=
+ For /F "delims=" %%J In ('type "%SOLR_TIP%\bin\%%i"') do set SOME_SOLR_PORT=%%~J
+ if NOT "!SOME_SOLR_PORT!"=="" (
+ for /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ @REM j is the ip:port and k is the pid
+ IF NOT "%%k"=="0" (
+ IF "%%j"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
+ set found_it=1
+ @echo Stopping Solr process %%k running on port !SOME_SOLR_PORT!
+ IF "%STOP_PORT%"=="" set /A STOP_PORT=!SOME_SOLR_PORT! - 1000
+ "%JAVA%" %SOLR_SSL_OPTS% -Djetty.home="%SOLR_SERVER_DIR%" -jar "%SOLR_SERVER_DIR%\start.jar" STOP.PORT=!STOP_PORT! STOP.KEY=%STOP_KEY% --stop
+ del "%SOLR_TIP%"\bin\solr-!SOME_SOLR_PORT!.port
+ timeout /T 5
+ REM Kill it if it is still running after the graceful shutdown
+ For /f "tokens=2,5" %%M in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ IF "%%N"=="%%k" (
+ IF "%%M"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
+ @echo Forcefully killing process %%N
+ taskkill /f /PID %%N
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ if "!found_it!"=="0" echo No Solr nodes found to stop.
+ ) ELSE (
+ set "SCRIPT_ERROR=Must specify the port when trying to stop Solr, or use -all to stop all running nodes on this host."
+ goto err
+ )
+ ) ELSE (
+ set found_it=0
+ For /f "tokens=2,5" %%M in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
+ IF NOT "%%N"=="0" (
+ IF "%%M"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
+ set found_it=1
+ @echo Stopping Solr process %%N running on port %SOLR_PORT%
+ IF "%STOP_PORT%"=="" set /A STOP_PORT=%SOLR_PORT% - 1000
+ "%JAVA%" %SOLR_SSL_OPTS% -Djetty.home="%SOLR_SERVER_DIR%" -jar "%SOLR_SERVER_DIR%\start.jar" %SOLR_JETTY_CONFIG% STOP.PORT=!STOP_PORT! STOP.KEY=%STOP_KEY% --stop
+ del "%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
+ timeout /T 5
+ REM Kill it if it is still running after the graceful shutdown
+ For /f "tokens=2,5" %%j in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
+ IF "%%N"=="%%k" (
+ IF "%%j"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
+ @echo Forcefully killing process %%N
+ taskkill /f /PID %%N
+ )
+ )
+ )
+ )
+ )
+ )
+ if "!found_it!"=="0" echo No Solr found running on port %SOLR_PORT%
+ )
+
+ IF "!IS_RESTART!"=="0" goto done
+)
+
+IF "!IS_RESTART!"=="1" set SCRIPT_CMD=start
+
+IF "%SOLR_PORT%"=="" set SOLR_PORT=8983
+IF "%STOP_PORT%"=="" set /A STOP_PORT=%SOLR_PORT% - 1000
+
+IF "%SCRIPT_CMD%"=="start" (
+ REM see if Solr is already running using netstat
+ For /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
+ IF NOT "%%k"=="0" (
+ IF "%%j"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
+ set "SCRIPT_ERROR=Process %%k is already listening on port %SOLR_PORT%. If this is Solr, please stop it first before starting (or use restart). If this is not Solr, then please choose a different port using -p PORT"
+ goto err
+ )
+ )
+ )
+)
+
+@REM determine if -server flag is supported by current JVM
+"%JAVA%" -server -version > nul 2>&1
+IF ERRORLEVEL 1 (
+ set IS_JDK=false
+ set "SERVEROPT="
+ @echo WARNING: You are using a JRE without support for -server option. Please upgrade to latest JDK for best performance
+ @echo.
+) ELSE (
+ set IS_JDK=true
+ set "SERVEROPT=-server"
+)
+if !JAVA_MAJOR_VERSION! LSS 9 (
+ "%JAVA%" -d64 -version > nul 2>&1
+ IF ERRORLEVEL 1 (
+ set "IS_64BIT=false"
+ @echo WARNING: 32-bit Java detected. Not recommended for production. Point your JAVA_HOME to a 64-bit JDK
+ @echo.
+ ) ELSE (
+ set IS_64bit=true
+ )
+) ELSE (
+ set IS_64bit=true
+)
+
+REM Clean up and rotate logs. Default to false since 7.4 as log4j2 handles startup rotation
+IF [%SOLR_LOG_PRESTART_ROTATION%] == [] (
+ set SOLR_LOG_PRESTART_ROTATION=false
+)
+IF [%SOLR_LOG_PRESTART_ROTATION%] == [true] (
+ REM Enable any of these if you require old remove/archive behavior
+ REM call :run_utils "-remove_old_solr_logs 7" || echo "Failed removing old solr logs"
+ REM call :run_utils "-archive_gc_logs" || echo "Failed archiving old GC logs"
+ REM call :run_utils "-archive_console_logs" || echo "Failed archiving old console logs"
+ call :run_utils "-rotate_solr_logs 9" || echo "Failed rotating old solr logs"
+)
+
+IF NOT "%ZK_HOST%"=="" set SOLR_MODE=solrcloud
+
+IF "%SOLR_MODE%"=="solrcloud" (
+ IF "%ZK_CLIENT_TIMEOUT%"=="" set "ZK_CLIENT_TIMEOUT=15000"
+
+ set "CLOUD_MODE_OPTS=-DzkClientTimeout=!ZK_CLIENT_TIMEOUT!"
+
+ IF NOT "%ZK_HOST%"=="" (
+ set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkHost=%ZK_HOST%"
+ ) ELSE (
+ IF "%verbose%"=="1" echo Configuring SolrCloud to launch an embedded Zookeeper using -DzkRun
+ set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkRun"
+ )
+ IF EXIST "%SOLR_HOME%\collection1\core.properties" set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1"
+) ELSE (
+ set CLOUD_MODE_OPTS=
+ IF NOT EXIST "%SOLR_HOME%\solr.xml" (
+ set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% must contain solr.xml!"
+ goto err
+ )
+)
+
+REM These are useful for attaching remove profilers like VisualVM/JConsole
+IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
+ IF "!RMI_PORT!"=="" set RMI_PORT=1%SOLR_PORT%
+ set REMOTE_JMX_OPTS=-Dcom.sun.management.jmxremote ^
+-Dcom.sun.management.jmxremote.local.only=false ^
+-Dcom.sun.management.jmxremote.ssl=false ^
+-Dcom.sun.management.jmxremote.authenticate=false ^
+-Dcom.sun.management.jmxremote.port=!RMI_PORT! ^
+-Dcom.sun.management.jmxremote.rmi.port=!RMI_PORT!
+
+ IF NOT "%SOLR_HOST%"=="" set REMOTE_JMX_OPTS=%REMOTE_JMX_OPTS% -Djava.rmi.server.hostname=%SOLR_HOST%
+) ELSE (
+ set REMOTE_JMX_OPTS=
+)
+
+IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_MEM=-Xms%SOLR_HEAP% -Xmx%SOLR_HEAP%
+IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m
+IF "%SOLR_JAVA_STACK_SIZE%"=="" set SOLR_JAVA_STACK_SIZE=-Xss256k
+set SOLR_OPTS=%SOLR_JAVA_STACK_SIZE% %SOLR_OPTS%
+IF "%SOLR_TIMEZONE%"=="" set SOLR_TIMEZONE=UTC
+
+IF "%GC_TUNE%"=="" (
+ set GC_TUNE=-XX:+UseG1GC ^
+ -XX:+PerfDisableSharedMem ^
+ -XX:+ParallelRefProcEnabled ^
+ -XX:MaxGCPauseMillis=250 ^
+ -XX:+UseLargePages ^
+ -XX:+AlwaysPreTouch
+)
+
+if !JAVA_MAJOR_VERSION! GEQ 9 (
+ IF NOT "%GC_LOG_OPTS%"=="" (
+ echo ERROR: On Java 9 you cannot set GC_LOG_OPTS, only default GC logging is available. Exiting
+ GOTO :eof
+ )
+ set GC_LOG_OPTS="-Xlog:gc*:file=\"!SOLR_LOGS_DIR!\solr_gc.log\":time,uptime:filecount=9,filesize=20M"
+) else (
+ IF "%GC_LOG_OPTS%"=="" (
+ rem Set defaults for Java 8
+ set GC_LOG_OPTS=-verbose:gc ^
+ -XX:+PrintHeapAtGC ^
+ -XX:+PrintGCDetails ^
+ -XX:+PrintGCDateStamps ^
+ -XX:+PrintGCTimeStamps ^
+ -XX:+PrintTenuringDistribution ^
+ -XX:+PrintGCApplicationStoppedTime
+ )
+ if "%JAVA_VENDOR%" == "IBM J9" (
+ set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xverbosegclog:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
+ ) else (
+ set GC_LOG_OPTS=!GC_LOG_OPTS! "-Xloggc:!SOLR_LOGS_DIR!\solr_gc.log" -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M
+ )
+)
+
+IF "%verbose%"=="1" (
+ @echo Starting Solr using the following settings:
+ CALL :safe_echo " JAVA = %JAVA%"
+ CALL :safe_echo " SOLR_SERVER_DIR = %SOLR_SERVER_DIR%"
+ CALL :safe_echo " SOLR_HOME = %SOLR_HOME%"
+ @echo SOLR_HOST = %SOLR_HOST%
+ @echo SOLR_PORT = %SOLR_PORT%
+ @echo STOP_PORT = %STOP_PORT%
+ @echo SOLR_JAVA_MEM = %SOLR_JAVA_MEM%
+ @echo GC_TUNE = !GC_TUNE!
+ @echo GC_LOG_OPTS = %GC_LOG_OPTS%
+ @echo SOLR_TIMEZONE = %SOLR_TIMEZONE%
+
+ IF "%SOLR_MODE%"=="solrcloud" (
+ @echo CLOUD_MODE_OPTS = %CLOUD_MODE_OPTS%
+ )
+
+ IF NOT "%SOLR_OPTS%"=="" (
+ @echo SOLR_OPTS = %SOLR_OPTS%
+ )
+
+ IF NOT "%SOLR_ADDL_ARGS%"=="" (
+ CALL :safe_echo " SOLR_ADDL_ARGS = %SOLR_ADDL_ARGS%"
+ )
+
+ IF NOT "%SOLR_JETTY_ADDL_CONFIG%"=="" (
+ CALL :safe_echo " SOLR_JETTY_ADDL_CONFIG = %SOLR_JETTY_ADDL_CONFIG%"
+ )
+
+ IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
+ @echo RMI_PORT = !RMI_PORT!
+ @echo REMOTE_JMX_OPTS = %REMOTE_JMX_OPTS%
+ )
+
+ IF NOT "%SOLR_LOG_LEVEL%"=="" (
+ @echo SOLR_LOG_LEVEL = !SOLR_LOG_LEVEL!
+ )
+
+ IF NOT "%SOLR_DATA_HOME%"=="" (
+ @echo SOLR_DATA_HOME = !SOLR_DATA_HOME!
+ )
+
+ @echo.
+)
+
+set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE%
+set START_OPTS=%START_OPTS% !GC_TUNE! %GC_LOG_OPTS%
+IF NOT "!CLOUD_MODE_OPTS!"=="" set "START_OPTS=%START_OPTS% !CLOUD_MODE_OPTS!"
+IF NOT "%REMOTE_JMX_OPTS%"=="" set "START_OPTS=%START_OPTS% %REMOTE_JMX_OPTS%"
+IF NOT "%SOLR_ADDL_ARGS%"=="" set "START_OPTS=%START_OPTS% %SOLR_ADDL_ARGS%"
+IF NOT "%SOLR_HOST_ARG%"=="" set "START_OPTS=%START_OPTS% %SOLR_HOST_ARG%"
+IF NOT "%SOLR_OPTS%"=="" set "START_OPTS=%START_OPTS% %SOLR_OPTS%"
+IF "%SOLR_SSL_ENABLED%"=="true" (
+ set "SSL_PORT_PROP=-Dsolr.jetty.https.port=%SOLR_PORT%"
+ set "START_OPTS=%START_OPTS% %SOLR_SSL_OPTS% !SSL_PORT_PROP!"
+)
+IF NOT "%SOLR_LOG_LEVEL%"=="" set "START_OPTS=%START_OPTS% -Dsolr.log.level=%SOLR_LOG_LEVEL%"
+
+set SOLR_LOGS_DIR_QUOTED="%SOLR_LOGS_DIR%"
+set SOLR_DATA_HOME_QUOTED="%SOLR_DATA_HOME%"
+
+set "START_OPTS=%START_OPTS% -Dsolr.log.dir=%SOLR_LOGS_DIR_QUOTED%"
+IF NOT "%SOLR_DATA_HOME%"=="" set "START_OPTS=%START_OPTS% -Dsolr.data.home=%SOLR_DATA_HOME_QUOTED%"
+IF NOT DEFINED LOG4J_CONFIG set "LOG4J_CONFIG=file:///%SOLR_SERVER_DIR%\resources\log4j2.xml"
+
+cd /d "%SOLR_SERVER_DIR%"
+
+IF NOT EXIST "%SOLR_LOGS_DIR%" (
+ mkdir "%SOLR_LOGS_DIR%"
+)
+copy /Y NUL "%SOLR_LOGS_DIR%\.writable" > NUL 2>&1 && set WRITEOK=1
+IF DEFINED WRITEOK (
+ del "%SOLR_LOGS_DIR%\.writable"
+) else (
+ echo "ERROR: Logs directory %SOLR_LOGS_DIR% is not writable or could not be created. Exiting"
+ GOTO :eof
+)
+echo " contexts etc lib modules resources scripts solr solr-webapp " > "%TEMP%\solr-pattern.txt"
+findstr /i /C:" %SOLR_LOGS_DIR% " "%TEMP%\solr-pattern.txt" 1>nul
+if %ERRORLEVEL% == 0 (
+ echo "ERROR: Logs directory %SOLR_LOGS_DIR% is invalid. Reserved for the system. Exiting"
+ GOTO :eof
+)
+
+IF NOT EXIST "%SOLR_SERVER_DIR%\tmp" (
+ mkdir "%SOLR_SERVER_DIR%\tmp"
+)
+
+IF "%DEFAULT_CONFDIR%"=="" set "DEFAULT_CONFDIR=%SOLR_SERVER_DIR%\solr\configsets\_default\conf"
+
+IF "%FG%"=="1" (
+ REM run solr in the foreground
+ title "Solr-%SOLR_PORT%"
+ echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
+ "%JAVA%" %SERVEROPT% %SOLR_JAVA_MEM% %START_OPTS% ^
+ -Dlog4j.configurationFile="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
+ -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%" ^
+ -Djetty.host=%SOLR_JETTY_HOST% -Djetty.port=%SOLR_PORT% -Djetty.home="%SOLR_SERVER_DIR%" ^
+ -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar %SOLR_JETTY_CONFIG% "%SOLR_JETTY_ADDL_CONFIG%"
+) ELSE (
+ START /B "Solr-%SOLR_PORT%" /D "%SOLR_SERVER_DIR%" ^
+ "%JAVA%" %SERVEROPT% %SOLR_JAVA_MEM% %START_OPTS% ^
+ -Dlog4j.configurationFile="%LOG4J_CONFIG%" -DSTOP.PORT=!STOP_PORT! -DSTOP.KEY=%STOP_KEY% ^
+ -Dsolr.log.muteconsole ^
+ -Dsolr.solr.home="%SOLR_HOME%" -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%" ^
+ -Djetty.host=%SOLR_JETTY_HOST% -Djetty.port=%SOLR_PORT% -Djetty.home="%SOLR_SERVER_DIR%" ^
+ -Djava.io.tmpdir="%SOLR_SERVER_DIR%\tmp" -jar start.jar %SOLR_JETTY_CONFIG% "%SOLR_JETTY_ADDL_CONFIG%" > "!SOLR_LOGS_DIR!\solr-%SOLR_PORT%-console.log"
+ echo %SOLR_PORT%>"%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
+
+ REM now wait to see Solr come online ...
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%"^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI status -maxWaitSecs 30 -solr !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:%SOLR_PORT%/solr
+)
+
+goto done
+
+:run_example
+REM Run the requested example
+
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI run_example -script "%SDIR%\solr.cmd" -e %EXAMPLE% -d "%SOLR_SERVER_DIR%" ^
+ -urlScheme !SOLR_URL_SCHEME! !PASS_TO_RUN_EXAMPLE!
+
+REM End of run_example
+goto done
+
+:get_info
+REM Find all Java processes, correlate with those listening on a port
+REM and then try to contact via that port using the status tool
+for /f "usebackq" %%i in (`dir /b "%SOLR_TIP%\bin" ^| findstr /i "^solr-.*\.port$"`) do (
+ set SOME_SOLR_PORT=
+ For /F "Delims=" %%J In ('type "%SOLR_TIP%\bin\%%i"') do set SOME_SOLR_PORT=%%~J
+ if NOT "!SOME_SOLR_PORT!"=="" (
+ for /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ IF NOT "%%k"=="0" (
+ if "%%j"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
+ @echo.
+ set has_info=1
+ echo Found Solr process %%k running on port !SOME_SOLR_PORT!
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI status -solr !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:!SOME_SOLR_PORT!/solr
+ @echo.
+ )
+ )
+ )
+ )
+)
+if NOT "!has_info!"=="1" echo No running Solr nodes found.
+set has_info=
+goto done
+
+:parse_healthcheck_args
+IF [%1]==[] goto run_healthcheck
+IF "%1"=="-V" goto set_healthcheck_verbose
+IF "%1"=="-c" goto set_healthcheck_collection
+IF "%1"=="-collection" goto set_healthcheck_collection
+IF "%1"=="-z" goto set_healthcheck_zk
+IF "%1"=="-zkhost" goto set_healthcheck_zk
+IF "%1"=="-zkHost" goto set_healthcheck_zk
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+IF "%1"=="/?" goto usage
+goto run_healthcheck
+
+:set_healthcheck_verbose
+set HEALTHCHECK_VERBOSE="-verbose"
+SHIFT
+goto parse_healthcheck_args
+
+:set_healthcheck_collection
+set HEALTHCHECK_COLLECTION=%~2
+SHIFT
+SHIFT
+goto parse_healthcheck_args
+
+:set_healthcheck_zk
+set ZK_HOST=%~2
+SHIFT
+SHIFT
+goto parse_healthcheck_args
+
+:run_healthcheck
+IF NOT DEFINED HEALTHCHECK_COLLECTION goto healthcheck_usage
+IF NOT DEFINED HEALTHCHECK_VERBOSE set "HEALTHCHECK_VERBOSE="
+IF NOT DEFINED HEALTHCHECK_ZK_HOST set "HEALTHCHECK_ZK_HOST=localhost:9983"
+echo ZK_HOST: !ZK_HOST!
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI healthcheck -collection !HEALTHCHECK_COLLECTION! -zkHost !ZK_HOST! %HEALTHCHECK_VERBOSE%
+goto done
+
+:run_assert
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI %*
+if errorlevel 1 (
+ exit /b 1
+)
+goto done
+
+:run_autoscaling
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI %*
+goto done
+
+:parse_config_args
+IF [%1]==[] goto run_config
+IF "%1"=="-z" goto set_config_zk
+IF "%1"=="-zkhost" goto set_config_zk
+IF "%1"=="-zkHost" goto set_config_zk
+IF "%1"=="-s" goto set_config_url_scheme
+IF "%1"=="-scheme" goto set_config_url_scheme
+set "CONFIG_ARGS=!CONFIG_ARGS! %1"
+SHIFT
+goto parse_config_args
+
+:set_config_zk
+set ZK_HOST=%~2
+SHIFT
+SHIFT
+goto parse_config_args
+
+:set_config_url_scheme
+set SOLR_URL_SCHEME=%~2
+SHIFT
+SHIFT
+goto parse_config_args
+
+:run_config
+IF NOT "!ZK_HOST!"=="" SET "CONFIG_ARGS=!CONFIG_ARGS! -z !ZK_HOST!"
+IF NOT "!SOLR_URL_SCHEME!"=="" SET "CONFIG_ARGS=!CONFIG_ARGS! -scheme !SOLR_URL_SCHEME!"
+
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI config !CONFIG_ARGS!
+if errorlevel 1 (
+ exit /b 1
+)
+goto done
+
+:get_version
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI version
+goto done
+
+:run_utils
+set "TOOL_CMD=%~1"
+set q="-q"
+IF "%verbose%"=="1" set q=""
+"%JAVA%" %SOLR_SSL_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI utils -s "%DEFAULT_SERVER_DIR%" -l "%SOLR_LOGS_DIR%" %q:"=% %TOOL_CMD%
+if errorlevel 1 (
+ exit /b 1
+)
+goto done
+
+:parse_create_args
+IF [%1]==[] goto run_create
+IF "%1"=="-V" goto set_create_verbose
+IF "%1"=="-c" goto set_create_name
+IF "%1"=="-core" goto set_create_name
+IF "%1"=="-collection" goto set_create_name
+IF "%1"=="-d" goto set_create_confdir
+IF "%1"=="-confdir" goto set_create_confdir
+IF "%1"=="-n" goto set_create_confname
+IF "%1"=="-confname" goto set_create_confname
+IF "%1"=="-s" goto set_create_shards
+IF "%1"=="-shards" goto set_create_shards
+IF "%1"=="-rf" goto set_create_rf
+IF "%1"=="-replicationFactor" goto set_create_rf
+IF "%1"=="-p" goto set_create_port
+IF "%1"=="-port" goto set_create_port
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+IF "%1"=="/?" goto usage
+goto run_create
+
+
+:set_create_verbose
+set CREATE_VERBOSE="-verbose"
+SHIFT
+goto parse_create_args
+
+:set_create_name
+set CREATE_NAME=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:set_create_confdir
+set CREATE_CONFDIR=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:set_create_confname
+set CREATE_CONFNAME=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:set_create_port
+set CREATE_PORT=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:set_create_shards
+set CREATE_NUM_SHARDS=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:set_create_rf
+set CREATE_REPFACT=%~2
+SHIFT
+SHIFT
+goto parse_create_args
+
+:run_create
+IF "!CREATE_NAME!"=="" (
+ set "SCRIPT_ERROR=Name (-c) is a required parameter for %SCRIPT_CMD%"
+ goto invalid_cmd_line
+)
+IF NOT DEFINED CREATE_VERBOSE set "CREATE_VERBOSE="
+IF "!CREATE_CONFDIR!"=="" set CREATE_CONFDIR=_default
+IF "!CREATE_NUM_SHARDS!"=="" set CREATE_NUM_SHARDS=1
+IF "!CREATE_REPFACT!"=="" set CREATE_REPFACT=1
+IF "!CREATE_CONFNAME!"=="" set CREATE_CONFNAME=!CREATE_NAME!
+
+REM Find a port that Solr is running on
+if "!CREATE_PORT!"=="" (
+ for /f "usebackq" %%i in (`dir /b "%SOLR_TIP%\bin" ^| findstr /i "^solr-.*\.port$"`) do (
+ set SOME_SOLR_PORT=
+ For /F "Delims=" %%J In ('type "%SOLR_TIP%\bin\%%i"') do set SOME_SOLR_PORT=%%~J
+ if NOT "!SOME_SOLR_PORT!"=="" (
+ for /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ IF NOT "%%k"=="0" set CREATE_PORT=!SOME_SOLR_PORT!
+ )
+ )
+ )
+)
+if "!CREATE_PORT!"=="" (
+ set "SCRIPT_ERROR=Could not find a running Solr instance on this host! Please use the -p option to specify the port."
+ goto err
+)
+
+if "!CREATE_CONFDIR!"=="_default" (
+ echo WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.
+ echo To turn off: bin\solr config -c !CREATE_NAME! -p !CREATE_PORT! -action set-user-property -property update.autoCreateFields -value false
+)
+
+if "%SCRIPT_CMD%"=="create_core" (
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI create_core -name !CREATE_NAME! -solrUrl !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:!CREATE_PORT!/solr ^
+ -confdir !CREATE_CONFDIR! -configsetsDir "%SOLR_TIP%\server\solr\configsets" %CREATE_VERBOSE%
+) else (
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" -Dsolr.default.confdir="%DEFAULT_CONFDIR%"^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI create -name !CREATE_NAME! -shards !CREATE_NUM_SHARDS! -replicationFactor !CREATE_REPFACT! ^
+ -confname !CREATE_CONFNAME! -confdir !CREATE_CONFDIR! -configsetsDir "%SOLR_TIP%\server\solr\configsets" ^
+ -solrUrl !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:!CREATE_PORT!/solr %CREATE_VERBOSE%
+)
+
+goto done
+
+:parse_delete_args
+IF [%1]==[] goto run_delete
+IF "%1"=="-V" goto set_delete_verbose
+IF "%1"=="-c" goto set_delete_name
+IF "%1"=="-core" goto set_delete_name
+IF "%1"=="-collection" goto set_delete_name
+IF "%1"=="-p" goto set_delete_port
+IF "%1"=="-port" goto set_delete_port
+IF "%1"=="-deleteConfig" goto set_delete_config
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+IF "%1"=="/?" goto usage
+goto run_delete
+
+:set_delete_verbose
+set DELETE_VERBOSE="-verbose"
+SHIFT
+goto parse_delete_args
+
+:set_delete_name
+set DELETE_NAME=%~2
+SHIFT
+SHIFT
+goto parse_delete_args
+
+:set_delete_port
+set DELETE_PORT=%~2
+SHIFT
+SHIFT
+goto parse_delete_args
+
+:set_delete_config
+set DELETE_CONFIG=%~2
+SHIFT
+SHIFT
+goto parse_delete_args
+
+:run_delete
+IF NOT DEFINED DELETE_VERBOSE set "DELETE_VERBOSE="
+IF "!DELETE_NAME!"=="" (
+ set "SCRIPT_ERROR=Name (-c) is a required parameter for %SCRIPT_CMD%"
+ goto invalid_cmd_line
+)
+
+REM Find a port that Solr is running on
+if "!DELETE_PORT!"=="" (
+ for /f "usebackq" %%i in (`dir /b "%SOLR_TIP%\bin" ^| findstr /i "^solr-.*\.port$"`) do (
+ set SOME_SOLR_PORT=
+ For /F "Delims=" %%J In ('type "%SOLR_TIP%\bin\%%i"') do set SOME_SOLR_PORT=%%~J
+ if NOT "!SOME_SOLR_PORT!"=="" (
+ for /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ IF NOT "%%k"=="0" set DELETE_PORT=!SOME_SOLR_PORT!
+ )
+ )
+ )
+)
+if "!DELETE_PORT!"=="" (
+ set "SCRIPT_ERROR=Could not find a running Solr instance on this host! Please use the -p option to specify the port."
+ goto err
+)
+
+if "!DELETE_CONFIG!"=="" (
+ set DELETE_CONFIG=true
+)
+
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+-Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+-classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+org.apache.solr.util.SolrCLI delete -name !DELETE_NAME! -deleteConfig !DELETE_CONFIG! ^
+-solrUrl !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:!DELETE_PORT!/solr %DELETE_VERBOSE%
+
+goto done
+
+REM Clumsy to do the state machine thing for -d and -n, but that's required for back-compat
+:parse_zk_args
+IF "%1"=="-upconfig" (
+ goto set_zk_op
+) ELSE IF "%1"=="-V" (
+ goto set_zk_verbose
+) ELSE IF "%1"=="upconfig" (
+ goto set_zk_op
+) ELSE IF "%1"=="-downconfig" (
+ goto set_zk_op
+) ELSE IF "%1"=="downconfig" (
+ goto set_zk_op
+) ELSE IF "%1"=="cp" (
+ goto set_zk_op
+) ELSE IF "%1"=="mv" (
+ goto set_zk_op
+) ELSE IF "%1"=="rm" (
+ goto set_zk_op
+) ELSE IF "%1"=="ls" (
+ goto set_zk_op
+) ELSE IF "%1"=="mkroot" (
+ goto set_zk_op
+) ELSE IF "%1"=="-n" (
+ goto set_config_name
+) ELSE IF "%1"=="-r" (
+ goto set_zk_recurse
+) ELSE IF "%1"=="-configname" (
+ goto set_config_name
+) ELSE IF "%1"=="-d" (
+ goto set_configdir
+) ELSE IF "%1"=="-confdir" (
+ goto set_configdir
+) ELSE IF "%1"=="-z" (
+ goto set_config_zk
+) ELSE IF "%1"=="/?" (
+ goto zk_usage
+) ELSE IF "%1"=="-h" (
+ goto zk_usage
+) ELSE IF "%1"=="-help" (
+ goto zk_usage
+) ELSE IF "!ZK_SRC!"=="" (
+ if not "%~1"=="" (
+ goto set_zk_src
+ )
+) ELSE IF "!ZK_DST!"=="" (
+ IF "%ZK_OP%"=="cp" (
+ goto set_zk_dst
+ )
+ IF "%ZK_OP%"=="mv" (
+ goto set_zk_dst
+ )
+ set ZK_DST="_"
+) ELSE IF NOT "%1"=="" (
+ set ERROR_MSG="Unrecognized or misplaced zk argument %1%"
+ goto zk_short_usage
+)
+goto run_zk
+
+:set_zk_op
+set ZK_OP=%~1
+SHIFT
+goto parse_zk_args
+
+:set_zk_verbose
+set ZK_VERBOSE="-verbose"
+SHIFT
+goto parse_zk_args
+
+:set_config_name
+set CONFIGSET_NAME=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+:set_configdir
+set CONFIGSET_DIR=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+:set_config_zk
+set ZK_HOST=%~2
+SHIFT
+SHIFT
+goto parse_zk_args
+
+:set_zk_src
+set ZK_SRC=%~1
+SHIFT
+goto parse_zk_args
+
+:set_zk_dst
+set ZK_DST=%~1
+SHIFT
+goto parse_zk_args
+
+:set_zk_recurse
+set ZK_RECURSE="true"
+SHIFT
+goto parse_zk_args
+
+:run_zk
+IF "!ZK_OP!"=="" (
+ set "ERROR_MSG=Invalid command specified for zk sub-command"
+ goto zk_short_usage
+)
+
+IF "!ZK_HOST!"=="" (
+ set "ERROR_MSG=Must specify -z zkHost"
+ goto zk_short_usage
+)
+
+IF "!ZK_OP!"=="-upconfig" (
+ set ZK_OP="upconfig"
+)
+IF "!ZK_OP!"=="-downconfig" (
+ set ZK_OP="downconfig"
+)
+
+IF "!ZK_OP!"=="upconfig" (
+ IF "!CONFIGSET_NAME!"=="" (
+ set ERROR_MSG="-n option must be set for upconfig"
+ goto zk_short_usage
+ )
+ IF "!CONFIGSET_DIR!"=="" (
+ set ERROR_MSG="The -d option must be set for upconfig."
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -confname !CONFIGSET_NAME! -confdir !CONFIGSET_DIR! -zkHost !ZK_HOST! %ZK_VERBOSE%^
+ -configsetsDir "%SOLR_TIP%/server/solr/configsets"
+) ELSE IF "!ZK_OP!"=="downconfig" (
+ IF "!CONFIGSET_NAME!"=="" (
+ set ERROR_MSG="-n option must be set for downconfig"
+ goto zk_short_usage
+ )
+ IF "!CONFIGSET_DIR!"=="" (
+ set ERROR_MSG="The -d option must be set for downconfig."
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -confname !CONFIGSET_NAME! -confdir !CONFIGSET_DIR! -zkHost !ZK_HOST! %ZK_VERBOSE%
+) ELSE IF "!ZK_OP!"=="cp" (
+ IF "%ZK_SRC%"=="" (
+ set ERROR_MSG="<src> must be specified for 'cp' command"
+ goto zk_short_usage
+ )
+ IF "%ZK_DST%"=="" (
+ set ERROR_MSG=<dest> must be specified for 'cp' command"
+ goto zk_short_usage
+ )
+ IF NOT "!ZK_SRC:~0,3!"=="zk:" (
+ IF NOT "!%ZK_DST:~0,3!"=="zk:" (
+ set ERROR_MSG="At least one of src or dst must be prefixed by 'zk:'"
+ goto zk_short_usage
+ )
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -zkHost !ZK_HOST! -src !ZK_SRC! -dst !ZK_DST! -recurse !ZK_RECURSE! %ZK_VERBOSE%
+) ELSE IF "!ZK_OP!"=="mv" (
+ IF "%ZK_SRC%"=="" (
+ set ERROR_MSG="<src> must be specified for 'mv' command"
+ goto zk_short_usage
+ )
+ IF "%ZK_DST%"=="" (
+ set ERROR_MSG="<dest> must be specified for 'mv' command"
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -zkHost !ZK_HOST! -src !ZK_SRC! -dst !ZK_DST! %ZK_VERBOSE%
+) ELSE IF "!ZK_OP!"=="rm" (
+ IF "%ZK_SRC"=="" (
+ set ERROR_MSG="Zookeeper path to remove must be specified when using the 'rm' command"
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -zkHost !ZK_HOST! -path !ZK_SRC! -recurse !ZK_RECURSE! %ZK_VERBOSE%
+) ELSE IF "!ZK_OP!"=="ls" (
+ IF "%ZK_SRC"=="" (
+ set ERROR_MSG="Zookeeper path to remove must be specified when using the 'ls' command"
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -zkHost !ZK_HOST! -path !ZK_SRC! -recurse !ZK_RECURSE! %ZK_VERBOSE%
+) ELSE IF "!ZK_OP!"=="mkroot" (
+ IF "%ZK_SRC"=="" (
+ set ERROR_MSG="Zookeeper path to create must be specified when using the 'mkroot' command"
+ goto zk_short_usage
+ )
+ "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%SOLR_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI !ZK_OP! -zkHost !ZK_HOST! -path !ZK_SRC! %ZK_VERBOSE%
+) ELSE (
+ set ERROR_MSG="Unknown zk option !ZK_OP!"
+ goto zk_short_usage
+)
+goto done
+
+
+:run_auth
+IF "%1"=="-help" goto usage
+IF "%1"=="-usage" goto usage
+
+REM Options parsing.
+REM Note: With the following technique of parsing, it is not possible
+REM to have an option without a value.
+set "AUTH_PARAMS=%1"
+set "option="
+for %%a in (%*) do (
+ if not defined option (
+ set arg=%%a
+ if "!arg:~0,1!" equ "-" set "option=!arg!"
+ ) else (
+ set "option!option!=%%a"
+ if "!option!" equ "-d" set "SOLR_SERVER_DIR=%%a"
+ if "!option!" equ "-s" set "SOLR_HOME=%%a"
+ if not "!option!" equ "-s" if not "!option!" equ "-d" (
+ set "AUTH_PARAMS=!AUTH_PARAMS! !option! %%a"
+ )
+ set "option="
+ )
+)
+IF "%SOLR_SERVER_DIR%"=="" set "SOLR_SERVER_DIR=%DEFAULT_SERVER_DIR%"
+IF NOT EXIST "%SOLR_SERVER_DIR%" (
+ set "SCRIPT_ERROR=Solr server directory %SOLR_SERVER_DIR% not found!"
+ goto err
+)
+IF "%SOLR_HOME%"=="" set "SOLR_HOME=%SOLR_SERVER_DIR%\solr"
+IF EXIST "%cd%\%SOLR_HOME%" set "SOLR_HOME=%cd%\%SOLR_HOME%"
+IF NOT EXIST "%SOLR_HOME%\" (
+ IF EXIST "%SOLR_SERVER_DIR%\%SOLR_HOME%" (
+ set "SOLR_HOME=%SOLR_SERVER_DIR%\%SOLR_HOME%"
+ ) ELSE (
+ set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% not found!"
+ goto err
+ )
+)
+
+if "!AUTH_PORT!"=="" (
+ for /f "usebackq" %%i in (`dir /b "%SOLR_TIP%\bin" ^| findstr /i "^solr-.*\.port$"`) do (
+ set SOME_SOLR_PORT=
+ For /F "Delims=" %%J In ('type "%SOLR_TIP%\bin\%%i"') do set SOME_SOLR_PORT=%%~J
+ if NOT "!SOME_SOLR_PORT!"=="" (
+ for /f "tokens=2,5" %%j in ('netstat -aon ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+ IF NOT "%%k"=="0" set AUTH_PORT=!SOME_SOLR_PORT!
+ )
+ )
+ )
+)
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+ -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+ -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+ org.apache.solr.util.SolrCLI auth %AUTH_PARAMS% -solrIncludeFile "%SOLR_INCLUDE%" -authConfDir "%SOLR_HOME%" ^
+ -solrUrl !SOLR_URL_SCHEME!://%SOLR_TOOL_HOST%:!AUTH_PORT!/solr
+goto done
+
+
+:invalid_cmd_line
+@echo.
+IF "!SCRIPT_ERROR!"=="" (
+ @echo Invalid command-line option: %1
+) ELSE (
+ @echo ERROR: !SCRIPT_ERROR!
+)
+@echo.
+IF "%FIRST_ARG%"=="start" (
+ goto start_usage
+) ELSE IF "%FIRST_ARG:~0,1%" == "-" (
+ goto start_usage
+) ELSE IF "%FIRST_ARG%"=="restart" (
+ goto start_usage
+) ELSE IF "%FIRST_ARG%"=="stop" (
+ goto stop_usage
+) ELSE IF "%FIRST_ARG%"=="healthcheck" (
+ goto healthcheck_usage
+) ELSE IF "%FIRST_ARG%"=="create" (
+ goto create_usage
+) ELSE IF "%FIRST_ARG%"=="create_core" (
+ goto create_core_usage
+) ELSE IF "%FIRST_ARG%"=="create_collection" (
+ goto create_collection_usage
+) ELSE IF "%FIRST_ARG%"=="zk" (
+ goto zk_short_usage
+) ELSE IF "%FIRST_ARG%"=="auth" (
+ goto auth_usage
+) ELSE IF "%FIRST_ARG%"=="status" (
+ goto status_usage
+) ELSE (
+ goto script_usage
+)
+
+:need_java_home
+@echo Please set the JAVA_HOME environment variable to the path where you installed Java 1.8+
+goto done
+
+:need_java_vers
+@echo Java 1.8 or later is required to run Solr.
+goto done
+
+:err
+@echo.
+@echo ERROR: !SCRIPT_ERROR!
+@echo.
+exit /b 1
+
+:done
+ENDLOCAL
+exit /b 0
+
+REM Tests what Java we have and sets some global variables
+:resolve_java_info
+
+CALL :resolve_java_vendor
+
+set JAVA_MAJOR_VERSION=0
+set JAVA_VERSION_INFO=
+set JAVA_BUILD=0
+
+FOR /f "usebackq tokens=3" %%a IN (`^""%JAVA%" -version 2^>^&1 ^| findstr "version"^"`) do (
+ set JAVA_VERSION_INFO=%%a
+ REM Remove surrounding quotes
+ set JAVA_VERSION_INFO=!JAVA_VERSION_INFO:"=!
+
+ REM Extract the major Java version, e.g. 7, 8, 9, 10 ...
+ for /f "tokens=1,2 delims=._-" %%a in ("!JAVA_VERSION_INFO!") do (
+ if %%a GEQ 9 (
+ set JAVA_MAJOR_VERSION=%%a
+ ) else (
+ set JAVA_MAJOR_VERSION=%%b
+ )
+ )
+
+ REM Don't look for "_{build}" if we're on IBM J9.
+ if NOT "%JAVA_VENDOR%" == "IBM J9" (
+ for /f "delims=_ tokens=2" %%a in ("!JAVA_VERSION_INFO!") do (
+ set /a JAVA_BUILD=%%a
+ )
+ )
+)
+GOTO :eof
+
+REM Set which JVM vendor we have
+:resolve_java_vendor
+"%JAVA%" -version 2>&1 | findstr /i "IBM J9" > nul
+if %ERRORLEVEL% == 1 ( set "JAVA_VENDOR=Oracle" ) else ( set "JAVA_VENDOR=IBM J9" )
+
+set JAVA_VENDOR_OUT=
+GOTO :eof
+
+REM Safe echo which does not mess with () in strings
+:safe_echo
+set "eout=%1"
+set eout=%eout:"=%
+echo !eout!
+GOTO :eof
diff --git a/solr-8.1.1/bin/solr.in.cmd b/solr-8.1.1/bin/solr.in.cmd
new file mode 100644
index 000000000..8f6c2bd34
--- /dev/null
+++ b/solr-8.1.1/bin/solr.in.cmd
@@ -0,0 +1,170 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one or more
+@REM contributor license agreements. See the NOTICE file distributed with
+@REM this work for additional information regarding copyright ownership.
+@REM The ASF licenses this file to You under the Apache License, Version 2.0
+@REM (the "License"); you may not use this file except in compliance with
+@REM the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+@echo off
+
+REM Settings here will override settings in existing env vars or in bin/solr. The default shipped state
+REM of this file is completely commented.
+
+REM By default the script will use JAVA_HOME to determine which java
+REM to use, but you can set a specific path for Solr to use without
+REM affecting other Java applications on your server/workstation.
+REM set SOLR_JAVA_HOME=
+
+REM Increase Java Min/Max Heap as needed to support your indexing / query needs
+REM set SOLR_JAVA_MEM=-Xms512m -Xmx512m
+
+REM Configure verbose GC logging:
+REM For Java 8: if this is set, additional params will be added to specify the log file & rotation
+REM For Java 9 or higher: GC_LOG_OPTS is currently not supported. If you set it, the startup script will exit with failure.
+REM set GC_LOG_OPTS=-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime
+
+REM Various GC settings have shown to work well for a number of common Solr workloads.
+REM See solr.cmd GC_TUNE for the default list.
+REM set GC_TUNE=-XX:SurvivorRatio=4
+REM set GC_TUNE=%GC_TUNE% -XX:TargetSurvivorRatio=90
+REM set GC_TUNE=%GC_TUNE% -XX:MaxTenuringThreshold=8
+REM set GC_TUNE=%GC_TUNE% -XX:+UseConcMarkSweepGC
+REM set GC_TUNE=%GC_TUNE% -XX:ConcGCThreads=4
+REM set GC_TUNE=%GC_TUNE% -XX:ParallelGCThreads=4
+REM set GC_TUNE=%GC_TUNE% -XX:+CMSScavengeBeforeRemark
+REM set GC_TUNE=%GC_TUNE% -XX:PretenureSizeThreshold=64m
+REM set GC_TUNE=%GC_TUNE% -XX:+UseCMSInitiatingOccupancyOnly
+REM set GC_TUNE=%GC_TUNE% -XX:CMSInitiatingOccupancyFraction=50
+REM set GC_TUNE=%GC_TUNE% -XX:CMSMaxAbortablePrecleanTime=6000
+REM set GC_TUNE=%GC_TUNE% -XX:+CMSParallelRemarkEnabled
+REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled
+REM set GC_TUNE=%GC_TUNE% -XX:-OmitStackTraceInFastThrow etc.
+
+REM Set the ZooKeeper connection string if using an external ZooKeeper ensemble
+REM e.g. host1:2181,host2:2181/chroot
+REM Leave empty if not using SolrCloud
+REM set ZK_HOST=
+
+REM Set the ZooKeeper client timeout (for SolrCloud mode)
+REM set ZK_CLIENT_TIMEOUT=15000
+
+REM By default the start script uses "localhost"; override the hostname here
+REM for production SolrCloud environments to control the hostname exposed to cluster state
+REM set SOLR_HOST=192.168.1.1
+
+REM By default Solr will try to connect to Zookeeper with 30 seconds in timeout; override the timeout if needed
+REM set SOLR_WAIT_FOR_ZK=30
+
+REM By default the start script uses UTC; override the timezone if needed
+REM set SOLR_TIMEZONE=UTC
+
+REM Set to true to activate the JMX RMI connector to allow remote JMX client applications
+REM to monitor the JVM hosting Solr; set to "false" to disable that behavior
+REM (false is recommended in production environments)
+REM set ENABLE_REMOTE_JMX_OPTS=false
+
+REM The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
+REM set RMI_PORT=18983
+
+REM Anything you add to the SOLR_OPTS variable will be included in the java
+REM start command line as-is, in ADDITION to other options. If you specify the
+REM -a option on start script, those options will be appended as well. Examples:
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.autoSoftCommit.maxTime=3000
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.autoCommit.maxTime=60000
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.clustering.enabled=true
+
+REM Path to a directory for Solr to store cores and their data. By default, Solr will use server\solr
+REM If solr.xml is not stored in ZooKeeper, this directory needs to contain solr.xml
+REM set SOLR_HOME=
+
+REM Path to a directory that Solr will use as root for data folders for each core.
+REM If not set, defaults to <instance_dir>/data. Overridable per core through 'dataDir' core property
+REM set SOLR_DATA_HOME=
+
+REM Changes the logging level. Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Default is INFO
+REM This is an alternative to changing the rootLogger in log4j2.xml
+REM set SOLR_LOG_LEVEL=INFO
+
+REM Location where Solr should write logs to. Absolute or relative to solr start dir
+REM set SOLR_LOGS_DIR=logs
+
+REM Enables log rotation before starting Solr. Setting SOLR_LOG_PRESTART_ROTATION=true will let Solr take care of pre
+REM start rotation of logs. This is false by default as log4j2 handles this for us. If you choose to use another log
+REM framework that cannot do startup rotation, you may want to enable this to let Solr rotate logs on startup.
+REM set SOLR_LOG_PRESTART_ROTATION=false
+
+REM Set the host interface to listen on. Jetty will listen on all interfaces (0.0.0.0) by default.
+REM This must be an IPv4 ("a.b.c.d") or bracketed IPv6 ("[x::y]") address, not a hostname!
+REM set SOLR_JETTY_HOST=0.0.0.0
+
+REM Sets the port Solr binds to, default is 8983
+REM set SOLR_PORT=8983
+
+REM Enables HTTPS. It is implictly true if you set SOLR_SSL_KEY_STORE. Use this config
+REM to enable https module with custom jetty configuration.
+REM set SOLR_SSL_ENABLED=true
+REM Uncomment to set SSL-related system properties
+REM Be sure to update the paths to the correct keystore for your environment
+REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
+REM set SOLR_SSL_KEY_STORE_PASSWORD=secret
+REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
+REM set SOLR_SSL_TRUST_STORE_PASSWORD=secret
+REM Require clients to authenticate
+REM set SOLR_SSL_NEED_CLIENT_AUTH=false
+REM Enable clients to authenticate (but not require)
+REM set SOLR_SSL_WANT_CLIENT_AUTH=false
+REM SSL Certificates contain host/ip "peer name" information that is validated by default. Setting
+REM this to false can be useful to disable these checks when re-using a certificate on many hosts
+REM set SOLR_SSL_CHECK_PEER_NAME=true
+REM Override Key/Trust Store types if necessary
+REM set SOLR_SSL_KEY_STORE_TYPE=JKS
+REM set SOLR_SSL_TRUST_STORE_TYPE=JKS
+
+REM Uncomment if you want to override previously defined SSL values for HTTP client
+REM otherwise keep them commented and the above values will automatically be set for HTTP clients
+REM set SOLR_SSL_CLIENT_KEY_STORE=
+REM set SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=
+REM set SOLR_SSL_CLIENT_TRUST_STORE=
+REM set SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD=
+REM set SOLR_SSL_CLIENT_KEY_STORE_TYPE=
+REM set SOLR_SSL_CLIENT_TRUST_STORE_TYPE=
+
+REM Sets path of Hadoop credential provider (hadoop.security.credential.provider.path property) and
+REM enables usage of credential store.
+REM Credential provider should store the following keys:
+REM * solr.jetty.keystore.password
+REM * solr.jetty.truststore.password
+REM Set the two below if you want to set specific store passwords for HTTP client
+REM * javax.net.ssl.keyStorePassword
+REM * javax.net.ssl.trustStorePassword
+REM More info: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html
+REM set SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH=localjceks://file/home/solr/hadoop-credential-provider.jceks
+REM set SOLR_OPTS=" -Dsolr.ssl.credential.provider.chain=hadoop"
+
+REM Settings for authentication
+REM Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or SOLR_AUTH_TYPE parameters
+REM set SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory
+REM set SOLR_AUTH_TYPE=basic
+REM set SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
+
+REM Settings for ZK ACL
+REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
+REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
+REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
+REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
+REM set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
+
+REM When running Solr in non-cloud mode and if planning to do distributed search (using the "shards" parameter), the
+REM list of hosts needs to be whitelisted or Solr will forbid the request. The whitelist can be configured in solr.xml,
+REM or if you are using the OOTB solr.xml, can be specified using the system property "solr.shardsWhitelist". Alternatively
+REM host checking can be disabled by using the system property "solr.disable.shardsWhitelist"
+REM set SOLR_OPTS="%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984"
diff --git a/solr-8.1.1/bin/solr.in.sh b/solr-8.1.1/bin/solr.in.sh
new file mode 100644
index 000000000..832e3cbf5
--- /dev/null
+++ b/solr-8.1.1/bin/solr.in.sh
@@ -0,0 +1,198 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Settings here will override settings in existing env vars or in bin/solr. The default shipped state
+# of this file is completely commented.
+
+# By default the script will use JAVA_HOME to determine which java
+# to use, but you can set a specific path for Solr to use without
+# affecting other Java applications on your server/workstation.
+#SOLR_JAVA_HOME=""
+
+# This controls the number of seconds that the solr script will wait for
+# Solr to stop gracefully or Solr to start. If the graceful stop fails,
+# the script will forcibly stop Solr. If the start fails, the script will
+# give up waiting and display the last few lines of the logfile.
+#SOLR_STOP_WAIT="180"
+
+# Increase Java Heap as needed to support your indexing / query needs
+#SOLR_HEAP="512m"
+
+# Expert: If you want finer control over memory options, specify them directly
+# Comment out SOLR_HEAP if you are using this though, that takes precedence
+#SOLR_JAVA_MEM="-Xms512m -Xmx512m"
+
+# Enable verbose GC logging...
+# * If this is unset, various default options will be selected depending on which JVM version is in use
+# * For Java 8: if this is set, additional params will be added to specify the log file & rotation
+# * For Java 9 or higher: each included opt param that starts with '-Xlog:gc', but does not include an
+# output specifier, will have a 'file' output specifier (as well as formatting & rollover options)
+# appended, using the effective value of the SOLR_LOGS_DIR.
+#
+#GC_LOG_OPTS='-Xlog:gc*' # (Java 9+)
+#GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \
+# -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime"
+
+# These GC settings have shown to work well for a number of common Solr workloads
+#GC_TUNE=" \
+#-XX:SurvivorRatio=4 \
+#-XX:TargetSurvivorRatio=90 \
+#-XX:MaxTenuringThreshold=8 \
+#-XX:+UseConcMarkSweepGC \
+#-XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 \
+#-XX:+CMSScavengeBeforeRemark \
+#-XX:PretenureSizeThreshold=64m \
+#-XX:+UseCMSInitiatingOccupancyOnly \
+#-XX:CMSInitiatingOccupancyFraction=50 \
+#-XX:CMSMaxAbortablePrecleanTime=6000 \
+#-XX:+CMSParallelRemarkEnabled \
+#-XX:+ParallelRefProcEnabled \
+#-XX:-OmitStackTraceInFastThrow etc.
+
+# Set the ZooKeeper connection string if using an external ZooKeeper ensemble
+# e.g. host1:2181,host2:2181/chroot
+# Leave empty if not using SolrCloud
+#ZK_HOST=""
+
+# Set the ZooKeeper client timeout (for SolrCloud mode)
+#ZK_CLIENT_TIMEOUT="15000"
+
+# By default the start script uses "localhost"; override the hostname here
+# for production SolrCloud environments to control the hostname exposed to cluster state
+#SOLR_HOST="192.168.1.1"
+
+# By default Solr will try to connect to Zookeeper with 30 seconds in timeout; override the timeout if needed
+#SOLR_WAIT_FOR_ZK="30"
+
+# By default the start script uses UTC; override the timezone if needed
+#SOLR_TIMEZONE="UTC"
+
+# Set to true to activate the JMX RMI connector to allow remote JMX client applications
+# to monitor the JVM hosting Solr; set to "false" to disable that behavior
+# (false is recommended in production environments)
+ENABLE_REMOTE_JMX_OPTS="true"
+
+# The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
+# RMI_PORT=18983
+
+# Anything you add to the SOLR_OPTS variable will be included in the java
+# start command line as-is, in ADDITION to other options. If you specify the
+# -a option on start script, those options will be appended as well. Examples:
+#SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000"
+#SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000"
+#SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true"
+
+# Location where the bin/solr script will save PID files for running instances
+# If not set, the script will create PID files in $SOLR_TIP/bin
+#SOLR_PID_DIR=
+
+# Path to a directory for Solr to store cores and their data. By default, Solr will use server/solr
+# If solr.xml is not stored in ZooKeeper, this directory needs to contain solr.xml
+#SOLR_HOME=
+
+# Path to a directory that Solr will use as root for data folders for each core.
+# If not set, defaults to <instance_dir>/data. Overridable per core through 'dataDir' core property
+#SOLR_DATA_HOME=
+
+# Solr provides a default Log4J configuration xml file in server/resources
+# however, you may want to customize the log settings and file appender location
+# so you can point the script to use a different log4j2.xml file
+#LOG4J_PROPS=/var/solr/log4j2.xml
+
+# Changes the logging level. Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Default is INFO
+# This is an alternative to changing the rootLogger in log4j2.xml
+#SOLR_LOG_LEVEL=INFO
+
+# Location where Solr should write logs to. Absolute or relative to solr start dir
+#SOLR_LOGS_DIR=logs
+
+# Enables log rotation before starting Solr. Setting SOLR_LOG_PRESTART_ROTATION=true will let Solr take care of pre
+# start rotation of logs. This is false by default as log4j2 handles this for us. If you choose to use another log
+# framework that cannot do startup rotation, you may want to enable this to let Solr rotate logs on startup.
+#SOLR_LOG_PRESTART_ROTATION=false
+
+# Sets the port Solr binds to, default is 8983
+#SOLR_PORT=8983
+
+# Enables HTTPS. It is implictly true if you set SOLR_SSL_KEY_STORE. Use this config
+# to enable https module with custom jetty configuration.
+#SOLR_SSL_ENABLED=true
+# Uncomment to set SSL-related system properties
+# Be sure to update the paths to the correct keystore for your environment
+#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
+#SOLR_SSL_KEY_STORE_PASSWORD=secret
+#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
+#SOLR_SSL_TRUST_STORE_PASSWORD=secret
+# Require clients to authenticate
+#SOLR_SSL_NEED_CLIENT_AUTH=false
+# Enable clients to authenticate (but not require)
+#SOLR_SSL_WANT_CLIENT_AUTH=false
+# SSL Certificates contain host/ip "peer name" information that is validated by default. Setting
+# this to false can be useful to disable these checks when re-using a certificate on many hosts
+#SOLR_SSL_CHECK_PEER_NAME=true
+# Override Key/Trust Store types if necessary
+#SOLR_SSL_KEY_STORE_TYPE=JKS
+#SOLR_SSL_TRUST_STORE_TYPE=JKS
+
+# Uncomment if you want to override previously defined SSL values for HTTP client
+# otherwise keep them commented and the above values will automatically be set for HTTP clients
+#SOLR_SSL_CLIENT_KEY_STORE=
+#SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=
+#SOLR_SSL_CLIENT_TRUST_STORE=
+#SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD=
+#SOLR_SSL_CLIENT_KEY_STORE_TYPE=
+#SOLR_SSL_CLIENT_TRUST_STORE_TYPE=
+
+# Sets path of Hadoop credential provider (hadoop.security.credential.provider.path property) and
+# enables usage of credential store.
+# Credential provider should store the following keys:
+# * solr.jetty.keystore.password
+# * solr.jetty.truststore.password
+# Set the two below if you want to set specific store passwords for HTTP client
+# * javax.net.ssl.keyStorePassword
+# * javax.net.ssl.trustStorePassword
+# More info: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html
+#SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH=localjceks://file/home/solr/hadoop-credential-provider.jceks
+#SOLR_OPTS=" -Dsolr.ssl.credential.provider.chain=hadoop"
+
+# Settings for authentication
+# Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or SOLR_AUTH_TYPE parameters
+#SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory"
+#SOLR_AUTH_TYPE="basic"
+#SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
+
+# Settings for ZK ACL
+#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
+# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
+# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
+# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
+#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
+
+
+# Settings for common system values that may cause operational imparement when system defaults are used.
+# Solr can use many processes and many file handles. On modern operating systems the savings by leaving
+# these settings low is minuscule, while the consequence can be Solr instability. To turn these checks off, set
+# SOLR_ULIMIT_CHECKS=false either here or as part of your profile.
+
+# Different limits can be set in solr.in.sh or your profile if you prefer as well.
+#SOLR_RECOMMENDED_OPEN_FILES=
+#SOLR_RECOMMENDED_MAX_PROCESSES=
+#SOLR_ULIMIT_CHECKS=
+
+# When running Solr in non-cloud mode and if planning to do distributed search (using the "shards" parameter), the
+# list of hosts needs to be whitelisted or Solr will forbid the request. The whitelist can be configured in solr.xml,
+# or if you are using the OOTB solr.xml, can be specified using the system property "solr.shardsWhitelist". Alternatively
+# host checking can be disabled by using the system property "solr.disable.shardsWhitelist"
+#SOLR_OPTS="$SOLR_OPTS -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984"
diff --git a/solr-8.1.1/contrib/analysis-extras/README.txt b/solr-8.1.1/contrib/analysis-extras/README.txt
new file mode 100644
index 000000000..fb8381a7a
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/README.txt
@@ -0,0 +1,20 @@
+The analysis-extras plugin provides additional analyzers that rely
+upon large dependencies/dictionaries.
+
+It includes integration with ICU for multilingual support,
+analyzers for Chinese and Polish, and integration with
+OpenNLP for multilingual tokenization, part-of-speech tagging
+lemmatization, phrase chunking, and named-entity recognition.
+
+ICU relies upon lucene-libs/lucene-analyzers-icu-X.Y.jar
+and lib/icu4j-X.Y.jar
+
+Smartcn relies upon lucene-libs/lucene-analyzers-smartcn-X.Y.jar
+
+Stempel relies on lucene-libs/lucene-analyzers-stempel-X.Y.jar
+
+Morfologik relies on lucene-libs/lucene-analyzers-morfologik-X.Y.jar
+and lib/morfologik-*.jar
+
+OpenNLP relies on lucene-libs/lucene-analyzers-opennlp-X.Y.jar
+and lib/opennlp-*.jar
diff --git a/solr-8.1.1/contrib/analysis-extras/lib/icu4j-62.1.jar b/solr-8.1.1/contrib/analysis-extras/lib/icu4j-62.1.jar
new file mode 100644
index 000000000..c9f8fa227
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lib/icu4j-62.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lib/morfologik-fsa-2.1.5.jar b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-fsa-2.1.5.jar
new file mode 100644
index 000000000..f172e1cfa
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-fsa-2.1.5.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lib/morfologik-polish-2.1.5.jar b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-polish-2.1.5.jar
new file mode 100644
index 000000000..35dfd42d1
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-polish-2.1.5.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lib/morfologik-stemming-2.1.5.jar b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-stemming-2.1.5.jar
new file mode 100644
index 000000000..417a93813
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lib/morfologik-stemming-2.1.5.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lib/opennlp-tools-1.9.1.jar b/solr-8.1.1/contrib/analysis-extras/lib/opennlp-tools-1.9.1.jar
new file mode 100644
index 000000000..cb7b031c8
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lib/opennlp-tools-1.9.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-icu-8.1.1.jar b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-icu-8.1.1.jar
new file mode 100644
index 000000000..8ac689d59
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-icu-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-morfologik-8.1.1.jar b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-morfologik-8.1.1.jar
new file mode 100644
index 000000000..05f89634f
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-morfologik-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-opennlp-8.1.1.jar b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-opennlp-8.1.1.jar
new file mode 100644
index 000000000..0cfc77050
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-opennlp-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.1.1.jar b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.1.1.jar
new file mode 100644
index 000000000..ba837b6a7
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-stempel-8.1.1.jar b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-stempel-8.1.1.jar
new file mode 100644
index 000000000..929b2b3e2
--- /dev/null
+++ b/solr-8.1.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-stempel-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/README.txt b/solr-8.1.1/contrib/clustering/README.txt
new file mode 100644
index 000000000..5e9dcb55f
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/README.txt
@@ -0,0 +1,4 @@
+The Clustering contrib plugin for Solr provides a generic mechanism for plugging in third party clustering implementations.
+It currently provides clustering support for search results using the Carrot2 project.
+
+See https://lucene.apache.org/solr/guide/result-clustering for how to get started.
diff --git a/solr-8.1.1/contrib/clustering/lib/attributes-binder-1.3.3.jar b/solr-8.1.1/contrib/clustering/lib/attributes-binder-1.3.3.jar
new file mode 100644
index 000000000..4a7c23619
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/attributes-binder-1.3.3.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/lib/carrot2-guava-18.0.jar b/solr-8.1.1/contrib/clustering/lib/carrot2-guava-18.0.jar
new file mode 100644
index 000000000..9c916299c
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/carrot2-guava-18.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/lib/carrot2-mini-3.16.0.jar b/solr-8.1.1/contrib/clustering/lib/carrot2-mini-3.16.0.jar
new file mode 100644
index 000000000..d0a188444
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/carrot2-mini-3.16.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/lib/jackson-annotations-2.9.8.jar b/solr-8.1.1/contrib/clustering/lib/jackson-annotations-2.9.8.jar
new file mode 100644
index 000000000..4d9f42153
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/jackson-annotations-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/lib/jackson-databind-2.9.8.jar b/solr-8.1.1/contrib/clustering/lib/jackson-databind-2.9.8.jar
new file mode 100644
index 000000000..2d8687b5d
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/jackson-databind-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/clustering/lib/simple-xml-2.7.1.jar b/solr-8.1.1/contrib/clustering/lib/simple-xml-2.7.1.jar
new file mode 100644
index 000000000..ede93e644
--- /dev/null
+++ b/solr-8.1.1/contrib/clustering/lib/simple-xml-2.7.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/dataimporthandler-extras/lib/activation-1.1.1.jar b/solr-8.1.1/contrib/dataimporthandler-extras/lib/activation-1.1.1.jar
new file mode 100644
index 000000000..1b703ab28
--- /dev/null
+++ b/solr-8.1.1/contrib/dataimporthandler-extras/lib/activation-1.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/dataimporthandler-extras/lib/gimap-1.5.1.jar b/solr-8.1.1/contrib/dataimporthandler-extras/lib/gimap-1.5.1.jar
new file mode 100644
index 000000000..6f1932471
--- /dev/null
+++ b/solr-8.1.1/contrib/dataimporthandler-extras/lib/gimap-1.5.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/dataimporthandler-extras/lib/javax.mail-1.5.1.jar b/solr-8.1.1/contrib/dataimporthandler-extras/lib/javax.mail-1.5.1.jar
new file mode 100644
index 000000000..0c5ac3967
--- /dev/null
+++ b/solr-8.1.1/contrib/dataimporthandler-extras/lib/javax.mail-1.5.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/dataimporthandler/README.txt b/solr-8.1.1/contrib/dataimporthandler/README.txt
new file mode 100644
index 000000000..c9698725a
--- /dev/null
+++ b/solr-8.1.1/contrib/dataimporthandler/README.txt
@@ -0,0 +1,16 @@
+ Apache Solr - DataImportHandler
+
+Introduction
+------------
+DataImportHandler is a data import tool for Solr which makes importing data from Databases, XML files and
+HTTP data sources quick and easy.
+
+Important Note
+--------------
+Although Solr strives to be agnostic of the Locale where the server is
+running, some code paths in DataImportHandler are known to depend on the
+System default Locale, Timezone, or Charset. It is recommended that when
+running Solr you set the following system properties:
+ -Duser.language=xx -Duser.country=YY -Duser.timezone=ZZZ
+
+where xx, YY, and ZZZ are consistent with any database server's configuration.
diff --git a/solr-8.1.1/contrib/extraction/README.txt b/solr-8.1.1/contrib/extraction/README.txt
new file mode 100644
index 000000000..b2ba66d50
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/README.txt
@@ -0,0 +1,16 @@
+Apache Solr Content Extraction Library (Solr Cell)
+
+Introduction
+------------
+
+Apache Solr Extraction provides a means for extracting and indexing content contained in "rich" documents, such
+as Microsoft Word, Adobe PDF, etc. (Each name is a trademark of their respective owners) This contrib module
+uses Apache Tika to extract content and metadata from the files, which can then be indexed. For more information,
+see http://wiki.apache.org/solr/ExtractingRequestHandler
+
+Getting Started
+---------------
+You will need Solr up and running. Then, simply add the extraction JAR file, plus the Tika dependencies (in the ./lib folder)
+to your Solr Home lib directory. See http://wiki.apache.org/solr/ExtractingRequestHandler for more details on hooking it in
+ and configuring.
+
diff --git a/solr-8.1.1/contrib/extraction/lib/apache-mime4j-core-0.8.2.jar b/solr-8.1.1/contrib/extraction/lib/apache-mime4j-core-0.8.2.jar
new file mode 100644
index 000000000..c60c3a43a
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/apache-mime4j-core-0.8.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/apache-mime4j-dom-0.8.2.jar b/solr-8.1.1/contrib/extraction/lib/apache-mime4j-dom-0.8.2.jar
new file mode 100644
index 000000000..5913c4a9b
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/apache-mime4j-dom-0.8.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/aspectjrt-1.8.0.jar b/solr-8.1.1/contrib/extraction/lib/aspectjrt-1.8.0.jar
new file mode 100644
index 000000000..776f99885
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/aspectjrt-1.8.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/bcmail-jdk15on-1.60.jar b/solr-8.1.1/contrib/extraction/lib/bcmail-jdk15on-1.60.jar
new file mode 100644
index 000000000..215641b74
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/bcmail-jdk15on-1.60.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/bcpkix-jdk15on-1.60.jar b/solr-8.1.1/contrib/extraction/lib/bcpkix-jdk15on-1.60.jar
new file mode 100644
index 000000000..87ce8b473
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/bcpkix-jdk15on-1.60.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/bcprov-jdk15on-1.60.jar b/solr-8.1.1/contrib/extraction/lib/bcprov-jdk15on-1.60.jar
new file mode 100644
index 000000000..5be567cbb
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/bcprov-jdk15on-1.60.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/boilerpipe-1.1.0.jar b/solr-8.1.1/contrib/extraction/lib/boilerpipe-1.1.0.jar
new file mode 100644
index 000000000..b64b033af
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/boilerpipe-1.1.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/commons-collections4-4.2.jar b/solr-8.1.1/contrib/extraction/lib/commons-collections4-4.2.jar
new file mode 100644
index 000000000..73a4f3f2e
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/commons-collections4-4.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/commons-compress-1.18.jar b/solr-8.1.1/contrib/extraction/lib/commons-compress-1.18.jar
new file mode 100644
index 000000000..e401046b5
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/commons-compress-1.18.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/curvesapi-1.04.jar b/solr-8.1.1/contrib/extraction/lib/curvesapi-1.04.jar
new file mode 100644
index 000000000..f097d0b3a
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/curvesapi-1.04.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/dec-0.1.2.jar b/solr-8.1.1/contrib/extraction/lib/dec-0.1.2.jar
new file mode 100644
index 000000000..7f1c1be5a
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/dec-0.1.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/fontbox-2.0.12.jar b/solr-8.1.1/contrib/extraction/lib/fontbox-2.0.12.jar
new file mode 100644
index 000000000..a201a6c23
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/fontbox-2.0.12.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/icu4j-62.1.jar b/solr-8.1.1/contrib/extraction/lib/icu4j-62.1.jar
new file mode 100644
index 000000000..c9f8fa227
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/icu4j-62.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/isoparser-1.1.22.jar b/solr-8.1.1/contrib/extraction/lib/isoparser-1.1.22.jar
new file mode 100644
index 000000000..c48e77673
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/isoparser-1.1.22.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/jackcess-2.1.12.jar b/solr-8.1.1/contrib/extraction/lib/jackcess-2.1.12.jar
new file mode 100644
index 000000000..eac0450c4
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/jackcess-2.1.12.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/jackcess-encrypt-2.1.4.jar b/solr-8.1.1/contrib/extraction/lib/jackcess-encrypt-2.1.4.jar
new file mode 100644
index 000000000..8b4c75aad
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/jackcess-encrypt-2.1.4.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/java-libpst-0.8.1.jar b/solr-8.1.1/contrib/extraction/lib/java-libpst-0.8.1.jar
new file mode 100644
index 000000000..61e834d19
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/java-libpst-0.8.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/jdom2-2.0.6.jar b/solr-8.1.1/contrib/extraction/lib/jdom2-2.0.6.jar
new file mode 100644
index 000000000..2850ca10c
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/jdom2-2.0.6.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/jempbox-1.8.16.jar b/solr-8.1.1/contrib/extraction/lib/jempbox-1.8.16.jar
new file mode 100644
index 000000000..edd06c59f
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/jempbox-1.8.16.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/jmatio-1.5.jar b/solr-8.1.1/contrib/extraction/lib/jmatio-1.5.jar
new file mode 100644
index 000000000..ce7df6cbe
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/jmatio-1.5.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/juniversalchardet-1.0.3.jar b/solr-8.1.1/contrib/extraction/lib/juniversalchardet-1.0.3.jar
new file mode 100644
index 000000000..ef4d7af57
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/juniversalchardet-1.0.3.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/metadata-extractor-2.11.0.jar b/solr-8.1.1/contrib/extraction/lib/metadata-extractor-2.11.0.jar
new file mode 100644
index 000000000..49da45e15
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/metadata-extractor-2.11.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/parso-2.0.9.jar b/solr-8.1.1/contrib/extraction/lib/parso-2.0.9.jar
new file mode 100644
index 000000000..25de5e162
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/parso-2.0.9.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/pdfbox-2.0.12.jar b/solr-8.1.1/contrib/extraction/lib/pdfbox-2.0.12.jar
new file mode 100644
index 000000000..3f630596d
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/pdfbox-2.0.12.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/pdfbox-tools-2.0.12.jar b/solr-8.1.1/contrib/extraction/lib/pdfbox-tools-2.0.12.jar
new file mode 100644
index 000000000..e0cc0c4e7
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/pdfbox-tools-2.0.12.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/poi-4.0.0.jar b/solr-8.1.1/contrib/extraction/lib/poi-4.0.0.jar
new file mode 100644
index 000000000..a910407be
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/poi-4.0.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/poi-ooxml-4.0.0.jar b/solr-8.1.1/contrib/extraction/lib/poi-ooxml-4.0.0.jar
new file mode 100644
index 000000000..29a2fd2b3
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/poi-ooxml-4.0.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/poi-ooxml-schemas-4.0.0.jar b/solr-8.1.1/contrib/extraction/lib/poi-ooxml-schemas-4.0.0.jar
new file mode 100644
index 000000000..0386d6ed3
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/poi-ooxml-schemas-4.0.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/poi-scratchpad-4.0.0.jar b/solr-8.1.1/contrib/extraction/lib/poi-scratchpad-4.0.0.jar
new file mode 100644
index 000000000..20eb0bc89
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/poi-scratchpad-4.0.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/rome-1.5.1.jar b/solr-8.1.1/contrib/extraction/lib/rome-1.5.1.jar
new file mode 100644
index 000000000..8befaa005
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/rome-1.5.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/rome-utils-1.5.1.jar b/solr-8.1.1/contrib/extraction/lib/rome-utils-1.5.1.jar
new file mode 100644
index 000000000..0fb83ebb8
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/rome-utils-1.5.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/tagsoup-1.2.1.jar b/solr-8.1.1/contrib/extraction/lib/tagsoup-1.2.1.jar
new file mode 100644
index 000000000..275160191
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/tagsoup-1.2.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/tika-core-1.19.1.jar b/solr-8.1.1/contrib/extraction/lib/tika-core-1.19.1.jar
new file mode 100644
index 000000000..21393f8b0
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/tika-core-1.19.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/tika-java7-1.19.1.jar b/solr-8.1.1/contrib/extraction/lib/tika-java7-1.19.1.jar
new file mode 100644
index 000000000..a49db3974
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/tika-java7-1.19.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/tika-parsers-1.19.1.jar b/solr-8.1.1/contrib/extraction/lib/tika-parsers-1.19.1.jar
new file mode 100644
index 000000000..1230e1b77
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/tika-parsers-1.19.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/tika-xmp-1.19.1.jar b/solr-8.1.1/contrib/extraction/lib/tika-xmp-1.19.1.jar
new file mode 100644
index 000000000..8dec5ac6c
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/tika-xmp-1.19.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/vorbis-java-core-0.8.jar b/solr-8.1.1/contrib/extraction/lib/vorbis-java-core-0.8.jar
new file mode 100644
index 000000000..ff2b3f158
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/vorbis-java-core-0.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/vorbis-java-tika-0.8.jar b/solr-8.1.1/contrib/extraction/lib/vorbis-java-tika-0.8.jar
new file mode 100644
index 000000000..7b2ca9846
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/vorbis-java-tika-0.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/xercesImpl-2.9.1.jar b/solr-8.1.1/contrib/extraction/lib/xercesImpl-2.9.1.jar
new file mode 100644
index 000000000..547f56300
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/xercesImpl-2.9.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/xmlbeans-3.0.1.jar b/solr-8.1.1/contrib/extraction/lib/xmlbeans-3.0.1.jar
new file mode 100644
index 000000000..1e61b5f98
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/xmlbeans-3.0.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/xmpcore-5.1.3.jar b/solr-8.1.1/contrib/extraction/lib/xmpcore-5.1.3.jar
new file mode 100644
index 000000000..dfd0f37cd
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/xmpcore-5.1.3.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/extraction/lib/xz-1.8.jar b/solr-8.1.1/contrib/extraction/lib/xz-1.8.jar
new file mode 100644
index 000000000..9931efa3e
--- /dev/null
+++ b/solr-8.1.1/contrib/extraction/lib/xz-1.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/langid/README.txt b/solr-8.1.1/contrib/langid/README.txt
new file mode 100644
index 000000000..68a2ea58c
--- /dev/null
+++ b/solr-8.1.1/contrib/langid/README.txt
@@ -0,0 +1,22 @@
+Apache Solr Language Identifier
+
+
+Introduction
+------------
+This module is intended to be used while indexing documents.
+It is implemented as an UpdateProcessor to be placed in an UpdateChain.
+Its purpose is to identify language from documents and tag the document with language code.
+The module can optionally map field names to their language specific counterpart,
+e.g. if the input is "title" and language is detected as "en", map to "title_en".
+Language may be detected globally for the document, and/or individually per field.
+Language detector implementations are pluggable.
+
+Getting Started
+---------------
+Please refer to the module documentation at http://wiki.apache.org/solr/LanguageDetection
+
+Dependencies
+------------
+The Tika detector depends on Tika Core (which is part of extraction contrib)
+The Langdetect detector depends on LangDetect library
+The OpenNLP detector depends on OpenNLP tools and requires a previously trained user-supplied model
diff --git a/solr-8.1.1/contrib/langid/lib/jsonic-1.2.7.jar b/solr-8.1.1/contrib/langid/lib/jsonic-1.2.7.jar
new file mode 100644
index 000000000..11fcfd4ba
--- /dev/null
+++ b/solr-8.1.1/contrib/langid/lib/jsonic-1.2.7.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/langid/lib/langdetect-1.1-20120112.jar b/solr-8.1.1/contrib/langid/lib/langdetect-1.1-20120112.jar
new file mode 100644
index 000000000..2e7a9cf36
--- /dev/null
+++ b/solr-8.1.1/contrib/langid/lib/langdetect-1.1-20120112.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/langid/lib/opennlp-tools-1.9.1.jar b/solr-8.1.1/contrib/langid/lib/opennlp-tools-1.9.1.jar
new file mode 100644
index 000000000..cb7b031c8
--- /dev/null
+++ b/solr-8.1.1/contrib/langid/lib/opennlp-tools-1.9.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/ltr/README.txt b/solr-8.1.1/contrib/ltr/README.txt
new file mode 100644
index 000000000..6324ecfb3
--- /dev/null
+++ b/solr-8.1.1/contrib/ltr/README.txt
@@ -0,0 +1,23 @@
+Welcome to Apache Solr Learning to Rank!
+========
+
+Apache Solr Learning to Rank (LTR) provides a way for you to extract features
+directly inside Solr for use in training a machine learned model. You can then
+deploy that model to Solr and use it to rerank your top X search results.
+
+# Getting Started With Solr Learning To Rank
+
+For information on how to get started with solr ltr please see:
+ * [Solr Reference Guide's section on Learning To Rank](https://lucene.apache.org/solr/guide/learning-to-rank.html)
+
+# Getting Started With Solr
+
+For information on how to get started with solr please see:
+ * [solr/README.txt](../../README.txt)
+ * [Solr Tutorial](https://lucene.apache.org/solr/guide/solr-tutorial.html)
+
+# How To Contribute
+
+For information on how to contribute see:
+ * http://wiki.apache.org/lucene-java/HowToContribute
+ * http://wiki.apache.org/solr/HowToContribute
diff --git a/solr-8.1.1/contrib/prometheus-exporter/README.txt b/solr-8.1.1/contrib/prometheus-exporter/README.txt
new file mode 100644
index 000000000..888f237b8
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/README.txt
@@ -0,0 +1,21 @@
+Welcome to Apache Solr Prometheus Exporter
+========
+
+Apache Solr Prometheus Exporter (solr-exporter) provides a way for you to expose metrics for Solr to Prometheus.
+
+# Getting Started With Solr Prometheus Exporter
+
+For information on how to get started with solr-exporter please see:
+ * [Solr Reference Guide's section on Monitoring Solr with Prometheus and Grafana](https://lucene.apache.org/solr/guide/monitoring-solr-with-prometheus-and-grafana.html)
+
+# Getting Started With Solr
+
+For information on how to get started with solr please see:
+ * [solr/README.txt](../../README.txt)
+ * [Solr Tutorial](https://lucene.apache.org/solr/guide/solr-tutorial.html)
+
+# How To Contribute
+
+For information on how to contribute see:
+ * http://wiki.apache.org/lucene-java/HowToContribute
+ * http://wiki.apache.org/solr/HowToContribute
diff --git a/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter b/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter
new file mode 100644
index 000000000..ea349609e
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+BASEDIR=`dirname $0`/..
+BASEDIR=`(cd "$BASEDIR"; pwd)`
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_VERSION" ] ; then
+ JAVA_VERSION="CurrentJDK"
+ else
+ echo "Using Java version: $JAVA_VERSION"
+ fi
+ if [ -z "$JAVA_HOME" ] ; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# If a specific java binary isn't specified search for the standard 'java' binary
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=`which java`
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly."
+ echo " We cannot execute $JAVACMD"
+ exit 1
+fi
+
+if [ -z "$REPO" ]
+then
+ REPO="$BASEDIR"/lib
+fi
+
+CLASSPATH=$CLASSPATH_PREFIX
+for JAR in $(find "$REPO" -name '*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/../../dist/solrj-lib -name '*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/../../dist -name 'solr-core-*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/../../dist -name 'solr-solrj-*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/../../dist -name 'solr-prometheus-exporter-*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/lucene-libs -name '*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+for JAR in $(find "$BASEDIR"/../../server/solr-webapp/webapp/WEB-INF/lib -name '*.jar')
+do
+ CLASSPATH="$CLASSPATH":"$JAR"
+done
+
+EXTRA_JVM_ARGUMENTS="-Xmx512m -Dlog4j.configurationFile=file:"$BASEDIR"/../../server/resources/log4j2-console.xml"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$HOME" ] && HOME=`cygpath --path --windows "$HOME"`
+ [ -n "$BASEDIR" ] && BASEDIR=`cygpath --path --windows "$BASEDIR"`
+ [ -n "$REPO" ] && REPO=`cygpath --path --windows "$REPO"`
+fi
+
+exec "$JAVACMD" $JAVA_OPTS \
+ $EXTRA_JVM_ARGUMENTS \
+ -classpath "$CLASSPATH" \
+ -Dapp.name="solr-exporter" \
+ -Dapp.pid="$$" \
+ -Dapp.repo="$REPO" \
+ -Dbasedir="$BASEDIR" \
+ org.apache.solr.prometheus.exporter.SolrExporter \
+ "$@"
diff --git a/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter.cmd b/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter.cmd
new file mode 100644
index 000000000..4ff47cf6d
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/bin/solr-exporter.cmd
@@ -0,0 +1,104 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one or more
+@REM contributor license agreements. See the NOTICE file distributed with
+@REM this work for additional information regarding copyright ownership.
+@REM The ASF licenses this file to You under the Apache License, Version 2.0
+@REM (the "License"); you may not use this file except in compliance with
+@REM the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+@echo off
+
+set ERROR_CODE=0
+
+:init
+@REM Decide how to startup depending on the version of windows
+
+@REM -- Win98ME
+if NOT "%OS%"=="Windows_NT" goto Win9xArg
+
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" @setlocal
+
+@REM -- 4NT shell
+if "%eval[2+2]" == "4" goto 4NTArgs
+
+@REM -- Regular WinNT shell
+set CMD_LINE_ARGS=%*
+goto WinNTGetScriptDir
+
+@REM The 4NT Shell from jp software
+:4NTArgs
+set CMD_LINE_ARGS=%$
+goto WinNTGetScriptDir
+
+:Win9xArg
+@REM Slurp the command line arguments. This loop allows for an unlimited number
+@REM of agruments (up to the command line limit, anyway).
+set CMD_LINE_ARGS=
+:Win9xApp
+if %1a==a goto Win9xGetScriptDir
+set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
+shift
+goto Win9xApp
+
+:Win9xGetScriptDir
+set SAVEDIR=%CD%
+%0\
+cd %0\..\..
+set BASEDIR=%CD%
+cd %SAVEDIR%
+set SAVE_DIR=
+goto repoSetup
+
+:WinNTGetScriptDir
+set BASEDIR=%~dp0..
+
+:repoSetup
+
+
+if "%JAVACMD%"=="" set JAVACMD=java
+
+if "%REPO%"=="" set REPO=%BASEDIR%\lib
+
+set CLASSPATH=%REPO%\*;%BASEDIR%\..\..\dist\solrj-lib\*;%BASEDIR%\..\..\dist\*;%BASEDIR%\lucene-libs\*;%BASEDIR%\..\..\server\solr-webapp\webapp\WEB-INF\lib\*
+set EXTRA_JVM_ARGUMENTS=-Xmx512m -Dlog4j.configurationFile=file:///%BASEDIR%\..\..\server\resources\log4j2-console.xml
+goto endInit
+
+@REM Reaching here means variables are defined and arguments have been captured
+:endInit
+
+%JAVACMD% %JAVA_OPTS% %EXTRA_JVM_ARGUMENTS% -classpath "%CLASSPATH_PREFIX%;%CLASSPATH%" -Dapp.name="solr-exporter" -Dapp.repo="%REPO%" -Dbasedir="%BASEDIR%" org.apache.solr.prometheus.exporter.SolrExporter %CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+if "%OS%"=="Windows_NT" @endlocal
+set ERROR_CODE=1
+
+:end
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" goto endNT
+
+@REM For old DOS remove the set variables from ENV - we assume they were not set
+@REM before we started - at least we don't leave any baggage around
+set CMD_LINE_ARGS=
+goto postExec
+
+:endNT
+@endlocal
+
+:postExec
+
+if "%FORCE_EXIT_ON_ERROR%" == "on" (
+ if %ERROR_CODE% NEQ 0 exit %ERROR_CODE%
+)
+
+exit /B %ERROR_CODE%
diff --git a/solr-8.1.1/contrib/prometheus-exporter/conf/grafana-solr-dashboard.json b/solr-8.1.1/contrib/prometheus-exporter/conf/grafana-solr-dashboard.json
new file mode 100644
index 000000000..ddc5b4410
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/conf/grafana-solr-dashboard.json
@@ -0,0 +1,4465 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "4.6.3"
+ },
+ {
+ "type": "panel",
+ "id": "graph",
+ "name": "Graph",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "Solr Dashboard",
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "hideControls": false,
+ "id": null,
+ "links": [],
+ "refresh": "1m",
+ "rows": [
+ {
+ "collapse": false,
+ "height": "250px",
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 2,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jetty_requests_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{method}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Requests",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "description": "",
+ "fill": 1,
+ "id": 1,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jetty_response_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{status}}",
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Response",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 55,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jetty_dispatches_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Dispatches",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Jetty Metrics",
+ "titleSize": "h3"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 3,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_buffers{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{pool}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Buffers",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 4,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_buffers_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{pool}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Buffer Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 5,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jvm_gc_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "GC Count",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 6,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jvm_gc_seconds_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "GC Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": null,
+ "format": "s",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 7,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_memory_heap_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Heap Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 8,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_memory_non_heap_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Non-Heap Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 9,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_memory_pools_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{space}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Pool Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 10,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_memory_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 16,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_threads{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Threads",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "JVM Metrics",
+ "titleSize": "h3"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 11,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_os_memory_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 12,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_os_file_descriptors{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "File Descriptors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 13,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_os_cpu_load{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU Load",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percentunit",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 14,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_jvm_os_cpu_time_seconds{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 15,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_jvm_os_load_average{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Load Average",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OS Metrics",
+ "titleSize": "h3"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 19,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_requests_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Requests",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 22,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_time_seconds_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Request Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 17,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_client_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Client Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 20,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_server_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Server Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 18,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 21,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_timeouts_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Timeouts",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 23,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_node_cores{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Cores",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 24,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_node_core_root_fs_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Core Root File System",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 25,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_thread_pool_completed_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{handler}} {{executor}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Thread Pool Completed",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 26,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_node_thread_pool_submitted_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{handler}} {{executor}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Thread Pool Submitted",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 27,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_node_thread_pool_running{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{handler}} {{executor}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Thread Pool Running",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 28,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_node_connections{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}} {{handler}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Connections",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Node Metrics",
+ "titleSize": "h3"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 31,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_requests_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Requests",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 34,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_time_seconds_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Request Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 29,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_client_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Client Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 32,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_server_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Server Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 30,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 33,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_timeouts_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}{{handler}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Timeouts",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 35,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_field_cache_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Field Cache",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 36,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_searcher_cache{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}} {{type}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Searcher Cache",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 37,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_searcher_warmup_time_seconds{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}} {{type}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Searcher Warm Up Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 38,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_searcher_cumulative_cache_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}} {{type}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Searcher Cumulative Cache",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 39,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_fs_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "File System",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 40,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_index_size_bytes{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Index Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 41,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_searcher_documents{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}} {{item}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Searcher Documents",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 42,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_adds_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Adds",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 46,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "solr_metrics_core_update_handler_pending_docs{base_url=~\"$base_url\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Pending Docs",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 43,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_deletes_by_id_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Deletes By ID",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 44,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_deletes_by_query_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Deletes By Query",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 47,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_expunge_deletes_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Expunge Deletes",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 48,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_merges_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Merges",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 52,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_splits_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Splits",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 49,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_optimizes_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Optimizes",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 50,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_rollbacks_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Rollbacks",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 51,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_soft_auto_commits_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Soft Auto Commits",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 53,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_auto_commits_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Auto Commits",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 54,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_commits_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Commits",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PROMETHEUS}",
+ "fill": 1,
+ "id": 45,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "increase(solr_metrics_core_update_handler_errors_total{base_url=~\"$base_url\"}[1m])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{base_url}}/{{core}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Update Handler Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Core Metrics",
+ "titleSize": "h3"
+ }
+ ],
+ "schemaVersion": 14,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "zk_host",
+ "options": [],
+ "query": "label_values(solr_ping{zk_host=~\".+\"},zk_host)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "collection",
+ "options": [],
+ "query": "label_values(solr_ping{zk_host=\"$zk_host\",collection=~\".+\"},collection)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "shard",
+ "options": [],
+ "query": "label_values(solr_collections_shard_state{zk_host=\"$zk_host\",collection=\"$collection\",shard=~\".+\"},shard)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "replica",
+ "options": [],
+ "query": "label_values(solr_collections_replica_state{zk_host=\"$zk_host\",collection=\"$collection\",shard=\"$shard\",replica=\".+\"},replica)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "base_url",
+ "options": [],
+ "query": "label_values(solr_ping{base_url=~\".+\"},base_url)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {},
+ "datasource": "${DS_PROMETHEUS}",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "core",
+ "options": [],
+ "query": "label_values(solr_ping{base_url=~\"$base_url\"},core)",
+ "refresh": 1,
+ "regex": "/(.+)/",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ }
+ ]
+ },
+ "time": {
+ "from": "now-30m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "browser",
+ "title": "Solr Dashboard",
+ "version": 3
+}
diff --git a/solr-8.1.1/contrib/prometheus-exporter/conf/solr-exporter-config.xml b/solr-8.1.1/contrib/prometheus-exporter/conf/solr-exporter-config.xml
new file mode 100644
index 000000000..b043835ec
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/conf/solr-exporter-config.xml
@@ -0,0 +1,1806 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<config>
+
+ <rules>
+
+ <ping>
+ <lst name="request">
+ <lst name="query">
+ <str name="path">/admin/ping</str>
+ </lst>
+ <arr name="jsonQueries">
+ <str>
+ . as $object | $object |
+ (if $object.status == "OK" then 1.0 else 0.0 end) as $value |
+ {
+ name : "solr_ping",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/ping.html",
+ label_names : [],
+ label_values : [],
+ value : $value
+ }
+ </str>
+ </arr>
+ </lst>
+ </ping>
+
+ <metrics>
+ <lst name="request">
+ <lst name="query">
+ <str name="path">/admin/metrics</str>
+ <lst name="params">
+ <str name="group">all</str>
+ <str name="type">all</str>
+ <str name="prefix"></str>
+ <str name="property"></str>
+ </lst>
+ </lst>
+ <arr name="jsonQueries">
+ <!--
+ jetty metrics
+ -->
+ <str>
+ .metrics["solr.jetty"] | to_entries | .[] | select(.key | startswith("org.eclipse.jetty.server.handler.DefaultHandler")) | select(.key | endswith("xx-responses")) as $object |
+ $object.key | split(".") | last | split("-") | first as $status |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_jetty_response_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["status"],
+ label_values : [$status],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jetty"] | to_entries | .[] | select(.key | startswith("org.eclipse.jetty.server.handler.DefaultHandler.")) | select(.key | endswith("-requests")) | select (.value | type == "object") as $object |
+ $object.key | split(".") | last | split("-") | first as $method |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_jetty_requests_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["method"],
+ label_values : [$method],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jetty"] | to_entries | .[] | select(.key == "org.eclipse.jetty.server.handler.DefaultHandler.dispatches") as $object |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_jetty_dispatches_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : [],
+ label_values : [],
+ value : $value
+ }
+ </str>
+ <!--
+ jvm metrics
+ -->
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("buffers.")) | select(.key | endswith(".Count")) as $object |
+ $object.key | split(".")[1] as $pool |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_buffers",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["pool"],
+ label_values : [$pool],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("buffers.")) | select(.key | (endswith(".MemoryUsed") or endswith(".TotalCapacity"))) as $object |
+ $object.key | split(".")[1] as $pool |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_buffers_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["pool", "item"],
+ label_values : [$pool, $item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("gc.")) | select(.key | endswith(".count")) as $object |
+ $object.key | split(".")[1] as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_gc_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("gc.")) | select(.key | endswith(".time")) as $object |
+ $object.key | split(".")[1] as $item |
+ ($object.value / 1000) as $value |
+ {
+ name : "solr_metrics_jvm_gc_seconds_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("memory.heap.")) | select(.key | endswith(".usage") | not) as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_memory_heap_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("memory.non-heap.")) | select(.key | endswith(".usage") | not) as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_memory_non_heap_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("memory.pools.")) | select(.key | endswith(".usage") | not) as $object |
+ $object.key | split(".")[2] as $space |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_memory_pools_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["space", "item"],
+ label_values : [$space, $item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("memory.total.")) as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_memory_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key == "os.committedVirtualMemorySize" or .key == "os.freePhysicalMemorySize" or .key == "os.freeSwapSpaceSize" or .key =="os.totalPhysicalMemorySize" or .key == "os.totalSwapSpaceSize") as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_os_memory_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key == "os.maxFileDescriptorCount" or .key == "os.openFileDescriptorCount") as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_os_file_descriptors",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key == "os.processCpuLoad" or .key == "os.systemCpuLoad") as $object |
+ $object.key | split(".") | last as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_os_cpu_load",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key == "os.processCpuTime") as $object |
+ ($object.value / 1000.0) as $value |
+ {
+ name : "solr_metrics_jvm_os_cpu_time_seconds",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : ["processCpuTime"],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key == "os.systemLoadAverage") as $object |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_os_load_average",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : ["systemLoadAverage"],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.jvm"] | to_entries | .[] | select(.key | startswith("threads.")) | select(.key | endswith(".count")) as $object |
+ $object.key | split(".")[1] as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_jvm_threads",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["item"],
+ label_values : [$item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".clientErrors")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_client_errors_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".clientErrors")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_errors_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".requestTimes")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_requests_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".serverErrors")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_server_errors_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".timeouts")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_timeouts_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith(".totalTime")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ ($object.value / 1000) as $value |
+ {
+ name : "solr_metrics_node_time_seconds_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler"],
+ label_values : [$category, $handler],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | startswith("CONTAINER.cores.")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_node_cores",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "item"],
+ label_values : [$category, $item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | startswith("CONTAINER.fs.coreRoot.")) | select(.key | endswith(".totalSpace") or endswith(".usableSpace")) as $object |
+ $object.key | split(".") as $key_items |
+ $key_items | length as $label_len |
+ $key_items[0] as $category |
+ $key_items[3] as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_node_core_root_fs_bytes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "item"],
+ label_values : [$category, $item],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | contains(".threadPool.")) | select(.key | endswith(".completed")) as $object |
+ $object.key | split(".") as $key_items |
+ $key_items | length as $label_len |
+ $key_items[0] as $category |
+ (if $label_len >= 5 then $key_items[1] else "" end) as $handler |
+ (if $label_len >= 5 then $key_items[3] else $key_items[2] end) as $executor |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_thread_pool_completed_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler", "executor"],
+ label_values : [$category, $handler, $executor],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | contains(".threadPool.")) | select(.key | endswith(".running")) as $object |
+ $object.key | split(".") as $key_items |
+ $key_items | length as $label_len |
+ $key_items[0] as $category |
+ (if $label_len >= 5 then $key_items[1] else "" end) as $handler |
+ (if $label_len >= 5 then $key_items[3] else $key_items[2] end) as $executor |
+ $object.value as $value |
+ {
+ name : "solr_metrics_node_thread_pool_running",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler", "executor"],
+ label_values : [$category, $handler, $executor],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | contains(".threadPool.")) | select(.key | endswith(".submitted")) as $object |
+ $object.key | split(".") as $key_items |
+ $key_items | length as $label_len |
+ $key_items[0] as $category |
+ (if $label_len >= 5 then $key_items[1] else "" end) as $handler |
+ (if $label_len >= 5 then $key_items[3] else $key_items[2] end) as $executor |
+ $object.value.count as $value |
+ {
+ name : "solr_metrics_node_thread_pool_submitted_total",
+ type : "COUNTER",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler", "executor"],
+ label_values : [$category, $handler, $executor],
+ value : $value
+ }
+ </str>
+ <str>
+ .metrics["solr.node"] | to_entries | .[] | select(.key | endswith("Connections")) as $object |
+ $object.key | split(".") as $key_items |
+ $key_items | length as $label_len |
+ $key_items[0] as $category |
+ $key_items[1] as $handler |
+ $key_items[2] as $item |
+ $object.value as $value |
+ {
+ name : "solr_metrics_node_connections",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names : ["category", "handler", "item"],
+ label_values : [$category, $handler, $item],
+ value : $value
+ }
+ </str>
+
+ <!--
+ core metrics
+ -->
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".clientErrors")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_client_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_client_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".errors")) | select (.value | type == "object") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".requestTimes")) | select (.value | type == "object") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_requests_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_requests_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".serverErrors")) | select (.value | type == "object") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_server_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_server_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".timeouts")) | select (.value | type == "object") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_timeouts_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_timeouts_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | endswith(".totalTime")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ select($handler | startswith("/")) |
+ ($object.value / 1000) as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_time_seconds_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_time_seconds_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select (.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "CACHE.core.fieldCache") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.value.entries_count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_field_cache_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core"],
+ label_values: [$category, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_field_cache_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica"],
+ label_values: [$category, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CACHE.searcher.")) | select (.key | endswith("documentCache") or endswith("fieldValueCache") or endswith("filterCache") or endswith("perSegFilter") or endswith("queryResultCache")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $type |
+ $object.value | to_entries | .[] | select(.key == "lookups" or .key == "hits" or .key == "size" or .key == "evictions" or .key == "inserts") as $target |
+ $target.key as $item |
+ $target.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_cache",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "type", "item"],
+ label_values: [$category, $core, $type, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_cache",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "type", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $type, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CACHE.searcher.")) | select (.key | endswith("documentCache") or endswith("fieldValueCache") or endswith("filterCache") or endswith("perSegFilter") or endswith("queryResultCache")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $type |
+ $object.value | to_entries | .[] | select(.key == "hitratio") as $target |
+ $target.key as $item |
+ $target.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_cache_ratio",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "type", "item"],
+ label_values: [$category, $core, $type, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_cache_ratio",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "type", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $type, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CACHE.searcher.")) | select (.key | endswith("documentCache") or endswith("fieldValueCache") or endswith("filterCache") or endswith("perSegFilter") or endswith("queryResultCache")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $type |
+ $object.value | to_entries | .[] | select(.key == "warmupTime") as $target |
+ $target.key as $item |
+ ($target.value / 1000) as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_warmup_time_seconds",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "type", "item"],
+ label_values: [$category, $core, $type, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_warmup_time_seconds",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "type", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $type, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CACHE.searcher.")) | select (.key | endswith("documentCache") or endswith("fieldValueCache") or endswith("filterCache") or endswith("perSegFilter") or endswith("queryResultCache")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $type |
+ $object.value | to_entries | .[] | select(.key == "cumulative_lookups" or .key == "cumulative_hits" or .key == "cumulative_evictions" or .key == "cumulative_inserts") as $target |
+ $target.key as $item |
+ $target.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_cumulative_cache_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "type", "item"],
+ label_values: [$category, $core, $type, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_cumulative_cache_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "type", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $type, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CACHE.searcher.")) | select (.key | endswith("documentCache") or endswith("fieldValueCache") or endswith("filterCache") or endswith("perSegFilter") or endswith("queryResultCache")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $type |
+ $object.value | to_entries | .[] | select(.key == "cumulative_hitratio") as $target |
+ $target.key as $item |
+ $target.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_cumulative_cache_ratio",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "type", "item"],
+ label_values: [$category, $core, $type, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_cumulative_cache_ratio",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "type", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $type, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("CORE.fs.")) | select (.key | endswith(".totalSpace") or endswith(".usableSpace")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $item |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_fs_bytes",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "item"],
+ label_values: [$category, $core, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_fs_bytes",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key | startswith("HIGHLIGHTER.")) | select (.key | endswith(".requests")) as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $name |
+ $object.key | split(".")[2] as $item |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_highlighter_request_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "name", "item"],
+ label_values: [$category, $core, $name, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_highlighter_request_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "name", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $name, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "INDEX.sizeInBytes") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_index_size_bytes",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core"],
+ label_values: [$category, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_index_size_bytes",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica"],
+ label_values: [$category, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "REPLICATION./replication.isMaster") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ (if $object.value == true then 1.0 else 0.0 end) as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_replication_master",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_replication_master",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "REPLICATION./replication.isSlave") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ (if $object.value == true then 1.0 else 0.0 end) as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_replication_slave",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_replication_slave",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "SEARCHER.searcher.deletedDocs" or .key == "SEARCHER.searcher.maxDoc" or .key == "SEARCHER.searcher.numDocs") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[2] as $item |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_searcher_documents",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "item"],
+ label_values: [$category, $core, $item],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_searcher_documents",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "core", "collection", "shard", "replica", "item"],
+ label_values: [$category, $core, $collection, $shard, $replica, $item],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.adds") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_adds",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_adds",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.autoCommits") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_auto_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_auto_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.commits") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.cumulativeAdds") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_adds_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_adds_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.cumulativeDeletesById") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_id_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_id_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.cumulativeDeletesByQuery") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_query_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_query_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.cumulativeErrors") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_errors_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.deletesById") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_id",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_id",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.deletesByQuery") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_query",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_deletes_by_query",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.docsPending") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_pending_docs",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_pending_docs",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.errors") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_errors",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_errors",
+ type: "GAUGE",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.expungeDeletes") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_expunge_deletes_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_expunge_deletes_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.merges") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_merges_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_merges_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.optimizes") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_optimizes_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_optimizes_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.rollbacks") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_rollbacks_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_rollbacks_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.softAutoCommits") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_soft_auto_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_soft_auto_commits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ <str>
+ .metrics | to_entries | .[] | select(.key | startswith("solr.core.")) as $parent |
+ $parent.key | split(".") as $parent_key_items |
+ $parent_key_items | length as $parent_key_item_len |
+ (if $parent_key_item_len == 3 then $parent_key_items[2] else "" end) as $core |
+ (if $parent_key_item_len == 5 then $parent_key_items[2] else "" end) as $collection |
+ (if $parent_key_item_len == 5 then $parent_key_items[3] else "" end) as $shard |
+ (if $parent_key_item_len == 5 then $parent_key_items[4] else "" end) as $replica |
+ (if $parent_key_item_len == 5 then ($collection + "_" + $shard + "_" + $replica) else $core end) as $core |
+ $parent.value | to_entries | .[] | select(.key == "UPDATE.updateHandler.splits") as $object |
+ $object.key | split(".")[0] as $category |
+ $object.key | split(".")[1] as $handler |
+ $object.value.count as $value |
+ if $parent_key_item_len == 3 then
+ {
+ name: "solr_metrics_core_update_handler_splits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core"],
+ label_values: [$category, $handler, $core],
+ value: $value
+ }
+ else
+ {
+ name: "solr_metrics_core_update_handler_splits_total",
+ type: "COUNTER",
+ help: "See following URL: https://lucene.apache.org/solr/guide/metrics-reporting.html",
+ label_names: ["category", "handler", "core", "collection", "shard", "replica"],
+ label_values: [$category, $handler, $core, $collection, $shard, $replica],
+ value: $value
+ }
+ end
+ </str>
+ </arr>
+ </lst>
+ </metrics>
+
+ <collections>
+ <lst name="request">
+ <lst name="query">
+ <str name="path">/admin/collections</str>
+ <lst name="params">
+ <str name="action">CLUSTERSTATUS</str>
+ </lst>
+ </lst>
+ <arr name="jsonQueries">
+ <str>
+ .cluster.live_nodes | length as $value|
+ {
+ name : "solr_collections_live_nodes",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : [],
+ label_values : [],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.pullReplicas | tonumber as $value |
+ {
+ name : "solr_collections_pull_replicas",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection"],
+ label_values : [$collection],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.nrtReplicas | tonumber as $value |
+ {
+ name : "solr_collections_nrt_replicas",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection"],
+ label_values : [$collection],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.tlogReplicas | tonumber as $value |
+ {
+ name : "solr_collections_tlog_replicas",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection"],
+ label_values : [$collection],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.shards | to_entries | .[] | . as $shard_obj |
+ $shard_obj.key as $shard |
+ (if $shard_obj.value.state == "active" then 1.0 else 0.0 end) as $value |
+ {
+ name : "solr_collections_shard_state",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection","shard"],
+ label_values : [$collection,$shard],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.shards | to_entries | .[] | . as $shard_obj |
+ $shard_obj.key as $shard |
+ $shard_obj.value.replicas | to_entries | .[] | . as $replica_obj |
+ $replica_obj.key as $replica_name |
+ $replica_obj.value.core as $core |
+ $core[$collection + "_" + $shard + "_" | length:] as $replica |
+ $replica_obj.value.base_url as $base_url |
+ $replica_obj.value.node_name as $node_name |
+ $replica_obj.value.type as $type |
+ (if $replica_obj.value.state == "active" then 1.0 else 0.0 end) as $value |
+ {
+ name : "solr_collections_replica_state",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection", "shard", "replica", "replica_name", "core", "base_url", "node_name", "type"],
+ label_values : [$collection, $shard, $replica, $replica_name, $core, $base_url, $node_name, $type],
+ value : $value
+ }
+ </str>
+ <str>
+ .cluster.collections | to_entries | .[] | . as $object |
+ $object.key as $collection |
+ $object.value.shards | to_entries | .[] | . as $shard_obj |
+ $shard_obj.key as $shard |
+ $shard_obj.value.replicas | to_entries | .[] | . as $replica_obj |
+ $replica_obj.key as $replica_name |
+ $replica_obj.value.core as $core |
+ $core[$collection + "_" + $shard + "_" | length:] as $replica |
+ $replica_obj.value.base_url as $base_url |
+ $replica_obj.value.node_name as $node_name |
+ $replica_obj.value.type as $type |
+ (if $replica_obj.value.leader == "true" then 1.0 else 0.0 end) as $value |
+ {
+ name : "solr_collections_shard_leader",
+ type : "GAUGE",
+ help : "See following URL: https://lucene.apache.org/solr/guide/collections-api.html#clusterstatus",
+ label_names : ["collection", "shard", "replica", "replica_name", "core", "base_url", "node_name", "type"],
+ label_values : [$collection, $shard, $replica, $replica_name, $core, $base_url, $node_name, $type],
+ value : $value
+ }
+ </str>
+ </arr>
+ </lst>
+ </collections>
+
+ <!--
+ <search>
+ <lst name="request">
+ <lst name="query">
+ <str name="collection">collection1</str>
+ <str name="path">/select</str>
+ <lst name="params">
+ <str name="q">*:*</str>
+ <str name="start">0</str>
+ <str name="rows">0</str>
+ <str name="json.facet">
+ {
+ category: {
+ type: terms,
+ field: cat
+ }
+ }
+ </str>
+ </lst>
+ </lst>
+ <arr name="jsonQueries">
+ <str>
+ .facets.category.buckets[] as $object |
+ $object.val as $term |
+ $object.count as $value |
+ {
+ name : "solr_facets_category",
+ type : "GAUGE",
+ help : "Category facets",
+ label_names : ["term"],
+ label_values : [$term],
+ value : $value
+ }
+ </str>
+ </arr>
+ </lst>
+ </search>
+ -->
+
+ </rules>
+
+</config>
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/argparse4j-0.8.1.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/argparse4j-0.8.1.jar
new file mode 100644
index 000000000..b3039f4a3
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/argparse4j-0.8.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-annotations-2.9.8.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-annotations-2.9.8.jar
new file mode 100644
index 000000000..4d9f42153
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-annotations-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-core-2.9.8.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-core-2.9.8.jar
new file mode 100644
index 000000000..362f1f393
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-core-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-databind-2.9.8.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-databind-2.9.8.jar
new file mode 100644
index 000000000..2d8687b5d
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-databind-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-jq-0.0.8.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-jq-0.0.8.jar
new file mode 100644
index 000000000..ddaa28236
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/jackson-jq-0.0.8.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-api-2.11.2.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-api-2.11.2.jar
new file mode 100644
index 000000000..809773c0b
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-api-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-core-2.11.2.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-core-2.11.2.jar
new file mode 100644
index 000000000..dcb652cb7
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-core-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.11.2.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.11.2.jar
new file mode 100644
index 000000000..ce8acdaae
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient-0.2.0.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient-0.2.0.jar
new file mode 100644
index 000000000..7637da86d
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient-0.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_common-0.2.0.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_common-0.2.0.jar
new file mode 100644
index 000000000..cb0a6ec46
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_common-0.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_httpserver-0.2.0.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_httpserver-0.2.0.jar
new file mode 100644
index 000000000..8edddf173
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/simpleclient_httpserver-0.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lib/slf4j-api-1.7.24.jar b/solr-8.1.1/contrib/prometheus-exporter/lib/slf4j-api-1.7.24.jar
new file mode 100644
index 000000000..05941a12f
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lib/slf4j-api-1.7.24.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/prometheus-exporter/lucene-libs/lucene-analyzers-common-8.1.1.jar b/solr-8.1.1/contrib/prometheus-exporter/lucene-libs/lucene-analyzers-common-8.1.1.jar
new file mode 100644
index 000000000..fb4388552
--- /dev/null
+++ b/solr-8.1.1/contrib/prometheus-exporter/lucene-libs/lucene-analyzers-common-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/velocity/lib/commons-lang3-3.8.1.jar b/solr-8.1.1/contrib/velocity/lib/commons-lang3-3.8.1.jar
new file mode 100644
index 000000000..2c65ce67d
--- /dev/null
+++ b/solr-8.1.1/contrib/velocity/lib/commons-lang3-3.8.1.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/velocity/lib/velocity-engine-core-2.0.jar b/solr-8.1.1/contrib/velocity/lib/velocity-engine-core-2.0.jar
new file mode 100644
index 000000000..c48d6606e
--- /dev/null
+++ b/solr-8.1.1/contrib/velocity/lib/velocity-engine-core-2.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/velocity/lib/velocity-tools-generic-3.0.jar b/solr-8.1.1/contrib/velocity/lib/velocity-tools-generic-3.0.jar
new file mode 100644
index 000000000..c69681fb2
--- /dev/null
+++ b/solr-8.1.1/contrib/velocity/lib/velocity-tools-generic-3.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-3.0.jar b/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-3.0.jar
new file mode 100644
index 000000000..562a9d29c
--- /dev/null
+++ b/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-3.0.jar
Binary files differ
diff --git a/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-jsp-3.0.jar b/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-jsp-3.0.jar
new file mode 100644
index 000000000..88e46ba31
--- /dev/null
+++ b/solr-8.1.1/contrib/velocity/lib/velocity-tools-view-jsp-3.0.jar
Binary files differ
diff --git a/solr-8.1.1/docs/images/solr.svg b/solr-8.1.1/docs/images/solr.svg
new file mode 100644
index 000000000..cb4ae64f8
--- /dev/null
+++ b/solr-8.1.1/docs/images/solr.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="203.005pt" height="102.654pt" viewBox="0 0 203.005 102.654" version="1.1">
+<defs>
+<clipPath id="clip1">
+ <path d="M 0 36 L 49 36 L 49 102.652344 L 0 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip2">
+ <path d="M 53 53 L 100 53 L 100 102.652344 L 53 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip3">
+ <path d="M 106 35 L 123 35 L 123 102.652344 L 106 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip4">
+ <path d="M 163 29 L 203.003906 29 L 203.003906 52 L 163 52 Z "/>
+</clipPath>
+</defs>
+<g id="surface1">
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 40.761719 70.890625 C 38.414062 69.644531 35.765625 68.765625 32.886719 68.277344 C 30.054688 67.800781 27.179688 67.5625 24.332031 67.5625 C 22.003906 67.5625 19.652344 67.359375 17.332031 66.964844 C 15.078125 66.578125 13.035156 65.871094 11.257812 64.859375 C 9.527344 63.875 8.097656 62.5 7.003906 60.765625 C 5.925781 59.058594 5.382812 56.796875 5.382812 54.066406 C 5.433594 51.65625 5.992188 49.597656 7.046875 47.9375 C 8.117188 46.253906 9.511719 44.886719 11.195312 43.871094 C 12.921875 42.832031 14.914062 42.066406 17.117188 41.597656 C 20.867188 40.800781 24.828125 40.652344 28.863281 41.214844 C 30.441406 41.4375 31.996094 41.832031 33.496094 42.382812 C 34.964844 42.929688 36.347656 43.675781 37.601562 44.601562 C 38.835938 45.515625 39.929688 46.664062 40.847656 48.011719 L 41.359375 48.765625 L 45.148438 47.171875 L 44.34375 46.039062 C 43.3125 44.582031 42.171875 43.269531 40.949219 42.140625 C 39.703125 40.988281 38.238281 40.007812 36.59375 39.234375 C 34.96875 38.46875 33.113281 37.878906 31.070312 37.480469 C 29.050781 37.089844 26.695312 36.890625 24.070312 36.890625 C 21.550781 36.890625 18.949219 37.179688 16.339844 37.75 C 13.691406 38.328125 11.234375 39.289062 9.039062 40.597656 C 6.796875 41.9375 4.949219 43.722656 3.542969 45.90625 C 2.121094 48.125 1.394531 50.863281 1.394531 54.042969 C 1.394531 57.382812 2.066406 60.226562 3.386719 62.492188 C 4.703125 64.746094 6.464844 66.570312 8.625 67.914062 C 10.742188 69.234375 13.210938 70.183594 15.964844 70.734375 C 18.652344 71.273438 21.46875 71.546875 24.332031 71.546875 C 26.609375 71.546875 29.019531 71.71875 31.496094 72.0625 C 33.90625 72.394531 36.152344 73.066406 38.164062 74.058594 C 40.125 75.027344 41.761719 76.375 43.023438 78.0625 C 44.242188 79.699219 44.859375 81.90625 44.859375 84.625 C 44.859375 87.066406 44.261719 89.148438 43.089844 90.820312 C 41.878906 92.542969 40.304688 93.964844 38.410156 95.046875 C 36.476562 96.152344 34.289062 96.96875 31.902344 97.464844 C 29.476562 97.972656 27.078125 98.230469 24.769531 98.230469 C 20.898438 98.230469 17.070312 97.492188 13.394531 96.03125 C 9.738281 94.578125 6.492188 92.398438 3.753906 89.550781 L 3.019531 88.785156 L 0 91.402344 L 0.847656 92.25 C 3.550781 94.953125 6.90625 97.308594 10.824219 99.25 C 14.785156 101.21875 19.480469 102.214844 24.769531 102.214844 C 27.285156 102.214844 29.957031 101.929688 32.707031 101.359375 C 35.496094 100.785156 38.117188 99.800781 40.488281 98.429688 C 42.898438 97.039062 44.902344 95.222656 46.449219 93.023438 C 48.039062 90.765625 48.84375 87.941406 48.84375 84.625 C 48.84375 81.265625 48.089844 78.417969 46.597656 76.167969 C 45.128906 73.945312 43.164062 72.171875 40.761719 70.890625 "/>
+</g>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 76.390625 98.667969 C 73.65625 98.667969 71.160156 98.105469 68.964844 96.992188 C 66.738281 95.867188 64.773438 94.335938 63.125 92.4375 C 61.464844 90.53125 60.148438 88.300781 59.207031 85.808594 C 58.261719 83.304688 57.722656 80.679688 57.613281 78.054688 C 57.613281 75.625 58.066406 73.144531 58.949219 70.675781 C 59.835938 68.214844 61.125 65.972656 62.785156 64.007812 C 64.4375 62.050781 66.449219 60.433594 68.769531 59.191406 C 71.046875 57.96875 73.609375 57.351562 76.390625 57.351562 C 79.003906 57.351562 81.472656 57.929688 83.726562 59.070312 C 86.015625 60.226562 88.023438 61.777344 89.707031 63.675781 C 91.390625 65.585938 92.738281 67.816406 93.707031 70.308594 C 94.675781 72.796875 95.164062 75.40625 95.164062 78.054688 C 95.164062 80.480469 94.714844 82.960938 93.828125 85.429688 C 92.941406 87.894531 91.652344 90.136719 89.996094 92.097656 C 88.34375 94.050781 86.335938 95.65625 84.019531 96.867188 C 81.742188 98.0625 79.175781 98.667969 76.390625 98.667969 M 92.96875 61.292969 C 90.984375 58.976562 88.574219 57.058594 85.804688 55.597656 C 82.996094 54.117188 79.828125 53.367188 76.390625 53.367188 C 73.257812 53.367188 70.265625 54.035156 67.496094 55.359375 C 64.746094 56.671875 62.316406 58.484375 60.273438 60.742188 C 58.234375 62.992188 56.601562 65.640625 55.417969 68.617188 C 54.230469 71.59375 53.628906 74.769531 53.628906 78.054688 C 53.628906 81.15625 54.183594 84.195312 55.28125 87.082031 C 56.371094 89.964844 57.929688 92.582031 59.90625 94.863281 C 61.890625 97.15625 64.304688 99.027344 67.078125 100.429688 C 69.875 101.84375 73.003906 102.59375 76.371094 102.652344 L 76.410156 102.652344 C 79.597656 102.59375 82.613281 101.875 85.378906 100.527344 C 88.121094 99.1875 90.550781 97.359375 92.597656 95.101562 C 94.632812 92.851562 96.25 90.230469 97.40625 87.316406 C 98.5625 84.390625 99.148438 81.273438 99.148438 78.054688 C 99.148438 75.136719 98.609375 72.164062 97.550781 69.21875 C 96.488281 66.273438 94.945312 63.605469 92.96875 61.292969 "/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 119.78125 97.5625 C 119.113281 97.730469 118.523438 97.855469 118.03125 97.9375 C 117.511719 98.027344 116.953125 98.113281 116.347656 98.199219 C 115.789062 98.277344 115.238281 98.320312 114.707031 98.320312 C 113.371094 98.320312 112.386719 97.875 111.699219 96.964844 C 110.9375 95.960938 110.566406 94.960938 110.566406 93.914062 L 110.566406 35.578125 L 106.582031 35.578125 L 106.582031 93.914062 C 106.582031 96.101562 107.273438 98.039062 108.636719 99.667969 C 110.050781 101.359375 112.0625 102.214844 114.621094 102.214844 C 115.421875 102.214844 116.21875 102.167969 116.988281 102.078125 C 117.730469 101.988281 118.394531 101.898438 118.992188 101.808594 C 119.601562 101.71875 120.308594 101.578125 121.09375 101.398438 L 122.445312 101.085938 L 120.671875 97.339844 Z "/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 136.976562 57.378906 C 134.90625 58.835938 133.074219 60.6875 131.507812 62.902344 L 131.507812 54.066406 L 127.523438 54.066406 L 127.523438 101.777344 L 131.507812 101.777344 L 131.507812 72.074219 C 132.058594 70.128906 132.820312 68.300781 133.769531 66.648438 C 134.726562 64.980469 135.914062 63.511719 137.304688 62.285156 C 138.695312 61.058594 140.3125 60.066406 142.117188 59.328125 C 143.914062 58.589844 145.945312 58.160156 148.148438 58.050781 L 149.207031 57.996094 L 149.207031 54.066406 L 148.09375 54.066406 C 143.84375 54.066406 140.105469 55.179688 136.976562 57.378906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 193.910156 10.613281 L 160.910156 46.289062 L 202.382812 27.15625 C 201.15625 20.824219 198.152344 15.132812 193.910156 10.613281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 169.425781 0 C 164.855469 0 160.5 0.917969 156.527344 2.574219 L 152.097656 39.886719 L 174.226562 0.347656 C 172.65625 0.121094 171.058594 0 169.425781 0 "/>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 202.714844 29.210938 L 163.414062 51.203125 L 200.285156 46.828125 C 202.035156 42.761719 203.003906 38.285156 203.003906 33.578125 C 203.003906 32.097656 202.898438 30.640625 202.714844 29.210938 "/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 188.226562 61.40625 C 192.617188 58.433594 196.261719 54.449219 198.835938 49.789062 L 164.277344 56.648438 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 176.25 0.695312 L 157.011719 42.390625 L 192.695312 9.382812 C 188.222656 5.078125 182.5625 2 176.25 0.695312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 172.234375 67.03125 C 175.953125 66.722656 179.496094 65.816406 182.773438 64.394531 L 163.414062 62.097656 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 138.820312 19.773438 C 137.308594 23.117188 136.328125 26.75 135.988281 30.566406 L 141.203125 39.886719 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 153.617188 3.953125 C 148.878906 6.488281 144.824219 10.121094 141.785156 14.519531 L 146.652344 39.023438 Z "/>
+</g>
+</svg>
diff --git a/solr-8.1.1/docs/index.html b/solr-8.1.1/docs/index.html
new file mode 100644
index 000000000..07ccead0a
--- /dev/null
+++ b/solr-8.1.1/docs/index.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Apache Solr 8.1.1 Documentation</title>
+<link rel="icon" type="image/x-icon" href="images/favicon.ico">
+<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico">
+</head>
+<body>
+<div>
+<a href="http://lucene.apache.org/solr/"><img src="images/solr.svg" style="width:210px; margin:22px 0px 7px 20px; border:none;" title="Apache Solr Logo" alt="Solr"></a>
+<div style="z-index:100;position:absolute;top:25px;left:226px">
+<span style="font-size: x-small">TM</span>
+</div>
+</div>
+<h1>Apache Solr<span style="vertical-align: top; font-size: x-small">TM</span> 8.1.1 Documentation</h1>
+<p>
+<a href="https://lucene.apache.org/solr/8_1_1/">Follow this link to view online documentation for Solr 8.1.1.</a>
+</p>
+</body>
+</html>
diff --git a/solr-8.1.1/example/README.txt b/solr-8.1.1/example/README.txt
new file mode 100644
index 000000000..1bfb59890
--- /dev/null
+++ b/solr-8.1.1/example/README.txt
@@ -0,0 +1,78 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+Solr example
+------------
+
+This directory contains Solr examples. Each example is contained in a
+separate directory. To run a specific example, do:
+
+ bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
+
+ cloud : SolrCloud example
+ dih : Data Import Handler (rdbms, mail, atom, tika)
+ schemaless : Schema-less example (schema is inferred from data during indexing)
+ techproducts : Kitchen sink example providing comprehensive examples of Solr features
+
+For instance, if you want to run the Solr Data Import Handler example, do:
+
+ bin/solr -e dih
+
+To see all the options available when starting Solr:
+
+ bin/solr start -help
+
+After starting a Solr example, direct your Web browser to:
+
+ http://localhost:8983/solr/
+
+To add documents to the index, use bin/post, for example:
+
+ bin/post -c techproducts example/exampledocs/*.xml
+
+(where "techproducts" is the Solr core name)
+
+For more information about this example please read...
+
+ * example/solr/README.txt
+ For more information about the "Solr Home" and Solr specific configuration
+ * https://lucene.apache.org/solr/guide/solr-tutorial.html
+ For a Solr tutorial
+ * http://wiki.apache.org/solr/SolrResources
+ For a list of other tutorials and introductory articles.
+
+Notes About These Examples
+--------------------------
+
+* References to Jar Files Outside This Directory *
+
+Various example SolrHome dirs contained in this directory may use "<lib>"
+statements in the solrconfig.xml file to reference plugin jars outside of
+this directory for loading "contrib" plugins via relative paths.
+
+If you make a copy of this example server and wish to use the
+ExtractingRequestHandler (SolrCell), DataImportHandler (DIH), the
+clustering component, or any other modules in "contrib", you will need to
+copy the required jars or update the paths to those jars in your
+solrconfig.xml.
+
+* Logging *
+
+By default, Jetty & Solr will log to the console and logs/solr.log. This can
+be convenient when first getting started, but eventually you will want to
+log just to a file. To configure logging, edit the log4j2.xml file in
+".../server/resources".
+It is also possible to setup log4j or other popular logging frameworks.
+
diff --git a/solr-8.1.1/example/example-DIH/README.txt b/solr-8.1.1/example/example-DIH/README.txt
new file mode 100644
index 000000000..30c37ebf1
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/README.txt
@@ -0,0 +1,49 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+Solr DataImportHandler example configuration
+--------------------------------------------
+
+To run this multi-core example, use the "-e" option of the bin/solr script:
+
+> bin/solr -e dih
+
+When Solr is started connect to:
+
+ http://localhost:8983/solr/
+
+* To import data from the hsqldb database, connect to:
+
+ http://localhost:8983/solr/db/dataimport?command=full-import
+
+* To import data from an ATOM feed, connect to:
+
+ http://localhost:8983/solr/atom/dataimport?command=full-import
+
+* To import data from your IMAP server:
+
+ 1. Edit the example-DIH/solr/mail/conf/mail-data-config.xml and add details about username, password, IMAP server
+ 2. Connect to http://localhost:8983/solr/mail/dataimport?command=full-import
+
+* To copy data from db Solr core, connect to:
+
+ http://localhost:8983/solr/solr/dataimport?command=full-import
+
+* To index a full text document using Tika integration:
+
+ http://localhost:8983/solr/tika/dataimport?command=full-import
+
+Check also the Solr Reference Guide for detailed usage guide:
+https://lucene.apache.org/solr/guide/uploading-structured-data-store-data-with-the-data-import-handler.html
diff --git a/solr-8.1.1/example/example-DIH/hsqldb/ex.script b/solr-8.1.1/example/example-DIH/hsqldb/ex.script
new file mode 100644
index 000000000..b78f6cfb2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/hsqldb/ex.script
@@ -0,0 +1,165 @@
+SET DATABASE UNIQUE NAME HSQLDB5E727295B6
+SET DATABASE GC 0
+SET DATABASE DEFAULT RESULT MEMORY ROWS 0
+SET DATABASE EVENT LOG LEVEL 0
+SET DATABASE TRANSACTION CONTROL LOCKS
+SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED
+SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE
+SET DATABASE TEXT TABLE DEFAULTS ''
+SET DATABASE SQL NAMES FALSE
+SET DATABASE SQL REFERENCES FALSE
+SET DATABASE SQL SIZE TRUE
+SET DATABASE SQL TYPES FALSE
+SET DATABASE SQL TDC DELETE TRUE
+SET DATABASE SQL TDC UPDATE TRUE
+SET DATABASE SQL CONCAT NULLS TRUE
+SET DATABASE SQL UNIQUE NULLS TRUE
+SET DATABASE SQL CONVERT TRUNCATE TRUE
+SET DATABASE SQL AVG SCALE 0
+SET DATABASE SQL DOUBLE NAN TRUE
+SET FILES WRITE DELAY 500 MILLIS
+SET FILES BACKUP INCREMENT TRUE
+SET FILES CACHE SIZE 10000
+SET FILES CACHE ROWS 50000
+SET FILES SCALE 32
+SET FILES LOB SCALE 32
+SET FILES DEFRAG 0
+SET FILES NIO TRUE
+SET FILES NIO SIZE 256
+SET FILES LOG TRUE
+SET FILES LOG SIZE 50
+CREATE USER SA PASSWORD DIGEST 'd41d8cd98f00b204e9800998ecf8427e'
+ALTER USER SA SET LOCAL TRUE
+CREATE SCHEMA PUBLIC AUTHORIZATION DBA
+SET SCHEMA PUBLIC
+CREATE MEMORY TABLE PUBLIC.ITEM(ID VARCHAR(100),NAME VARCHAR(1024),MANU VARCHAR(50),WEIGHT DOUBLE,PRICE DOUBLE,POPULARITY INTEGER,INCLUDES VARCHAR(200),LAST_MODIFIED TIMESTAMP)
+CREATE MEMORY TABLE PUBLIC.FEATURE(ITEM_ID VARCHAR(100),DESCRIPTION VARCHAR(1024),LAST_MODIFIED TIMESTAMP)
+CREATE MEMORY TABLE PUBLIC.CATEGORY(ID INTEGER,DESCRIPTION VARCHAR(30),LAST_MODIFIED TIMESTAMP)
+CREATE MEMORY TABLE PUBLIC.ITEM_CATEGORY(ITEM_ID VARCHAR(100),CATEGORY_ID INTEGER,LAST_MODIFIED TIMESTAMP)
+ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1
+SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC
+GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC
+GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC
+GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC
+GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC
+GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC
+GRANT DBA TO SA
+SET SCHEMA SYSTEM_LOBS
+INSERT INTO BLOCKS VALUES(0,2147483647,0)
+SET SCHEMA PUBLIC
+INSERT INTO ITEM VALUES('6H500F0','Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300','Maxtor Corp.',0.0E0,350.0E0,6,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('F8V7067-APL-KIT','Belkin Mobile Power Cord for iPod w/ Dock','Belkin',4.0E0,19.95E0,1,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('IW-02','iPod & iPod Mini USB 2.0 Cable','Belkin',2.0E0,11.5E0,1,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('MA147LL/A','Apple 60 GB iPod with Video Playback Black','Apple Computer Inc.',5.5E0,399.0E0,10,'earbud headphones, USB cable','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('TWINX2048-3200PRO','CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail','Corsair Microsystems Inc.',0.0E0,185.0E0,5,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('VS1GB400C3','CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail','Corsair Microsystems Inc.',0.0E0,74.99E0,7,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('VDBDB1A16','A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM','A-DATA Technology Inc.',0.0E0,0.0E0,5,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('3007WFP','Dell Widescreen UltraSharp 3007WFP','Dell, Inc.',401.6E0,2199.0E0,6,'USB cable','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('VA902B','ViewSonic VA902B - flat panel display - TFT - 19"','ViewSonic Corp.',190.4E0,279.95E0,6,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('0579B002','Canon PIXMA MP500 All-In-One Photo Printer','Canon Inc.',352.0E0,179.99E0,6,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('9885A004','Canon PowerShot SD500','Canon Inc.',6.4E0,329.95E0,7,'32MB SD card, USB cable, AV cable, battery','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('SOLR1000','Solr, the Enterprise Search Server','Apache Software Foundation',0.0E0,0.0E0,10,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('UTF8TEST','Test with some UTF-8 encoded characters','Apache Software Foundation',0.0E0,0.0E0,0,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('EN7800GTX/2DHTV/256M','ASUS Extreme N7800GTX/2DHTV (256 MB)','ASUS Computer Inc.',16.0E0,479.95E0,7,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('100-435805','ATI Radeon X1900 XTX 512 MB PCIE Video Card','ATI Technologies',48.0E0,649.99E0,7,'null','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM VALUES('SP2514N','Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133','Samsung Electronics Co. Ltd.',0.0E0,92.0E0,6,'null','2008-03-12 13:30:00.000000')
+INSERT INTO FEATURE VALUES('SP2514N','7200RPM, 8MB cache, IDE Ultra ATA-133','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SP2514N','NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('6H500F0','SATA 3.0Gb/s, NCQ','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('6H500F0','8.5ms seek','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('6H500F0','16MB cache','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('F8V7067-APL-KIT','car power adapter, white','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('IW-02','car power adapter for iPod, white','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','iTunes, Podcasts, Audiobooks','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','Stores up to 15,000 songs, 25,000 photos, or 150 hours of video','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','2.5-inch, 320x240 color TFT LCD display with LED backlight','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','Up to 20 hours of battery life','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('MA147LL/A','Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('TWINX2048-3200PRO','CAS latency 2,\u00092-3-3-6 timing, 2.75v, unbuffered, heat-spreader','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('VDBDB1A16','CAS latency 3,\u0009 2.7v','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('3007WFP','30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('VA902B','19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','Multifunction ink-jet color photo printer','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','2.5" color LCD preview screen','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','Duplex Copying','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','Printing speed up to 29ppm black, 19ppm color','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','Hi-Speed USB','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('0579B002','memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('9885A004','3x zoop, 7.1 megapixel Digital ELPH','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('9885A004','movie clips up to 640x480 @30 fps','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('9885A004','2.0" TFT LCD, 118,000 pixels','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('9885A004','built in flash, red-eye reduction','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Advanced Full-Text Search Capabilities using Lucene','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Optimizied for High Volume Web Traffic','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Standards Based Open Interfaces - XML and HTTP','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Comprehensive HTML Administration Interfaces','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Scalability - Efficient Replication to other Solr Search Servers','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Flexible and Adaptable with XML configuration and Schema','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('SOLR1000','Good unicode support: h\u00e9llo (hello with an accent over the e)','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','No accents here','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','This is an e acute: \u00e9','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','eaiou with circumflexes: \u00ea\u00e2\u00ee\u00f4\u00fb','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','This is in Turkish: bu T\u00fcrk\u00e7e','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','This is in Korean: \uc774\uac83\uc740 \ud55c\uad6d\uc5b4\uc774\ub2e4.','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('UTF8TEST','This is in Greek: \u0391\u03c5\u03c4\u03cc \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('EN7800GTX/2DHTV/256M','NVIDIA GeForce 7800 GTX GPU/VPU clocked at 486MHz','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('EN7800GTX/2DHTV/256M','256MB GDDR3 Memory clocked at 1.35GHz','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('EN7800GTX/2DHTV/256M','PCI Express x16','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('EN7800GTX/2DHTV/256M','Dual DVI connectors, HDTV out, video input','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('EN7800GTX/2DHTV/256M','OpenGL 2.0, DirectX 9.0','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('100-435805','ATI RADEON X1900 GPU/VPU clocked at 650MHz','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('100-435805','512MB GDDR3 SDRAM clocked at 1.55GHz','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('100-435805','PCI Express x16','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('100-435805','dual DVI, HDTV, svideo, composite out','2017-09-01 12:34:56.000000')
+INSERT INTO FEATURE VALUES('100-435805','OpenGL 2.0, DirectX 9.0','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(1,'electronics','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(2,'hard drive','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(3,'connector','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(4,'music','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(5,'memory','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(6,'monitor','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(7,'multifunction printer','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(8,'printer','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(9,'scanner','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(10,'copier','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(11,'camera','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(12,'software','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(13,'search','2017-09-01 12:34:56.000000')
+INSERT INTO CATEGORY VALUES(14,'graphics card','2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('SP2514N',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('SP2514N',2,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('6H500F0',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('6H500F0',2,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('F8V7067-APL-KIT',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('F8V7067-APL-KIT',3,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('IW-02',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('IW-02',3,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('MA147LL/A',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('MA147LL/A',4,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('TWINX2048-3200PRO',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('TWINX2048-3200PRO',5,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VS1GB400C3',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VS1GB400C3',5,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VDBDB1A16',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VDBDB1A16',5,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('3007WFP',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('3007WFP',6,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VA902B',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('VA902B',6,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('0579B002',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('0579B002',7,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('0579B002',8,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('0579B002',9,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('0579B002',10,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('9885A004',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('9885A004',11,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('SOLR1000',12,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('SOLR1000',13,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('UTF8TEST',12,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('UTF8TEST',13,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('EN7800GTX/2DHTV/256M',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('EN7800GTX/2DHTV/256M',14,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('100-435805',1,'2017-09-01 12:34:56.000000')
+INSERT INTO ITEM_CATEGORY VALUES('100-435805',14,'2017-09-01 12:34:56.000000')
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/atom-data-config.xml b/solr-8.1.1/example/example-DIH/solr/atom/conf/atom-data-config.xml
new file mode 100644
index 000000000..b7de812d0
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/atom-data-config.xml
@@ -0,0 +1,35 @@
+<dataConfig>
+ <dataSource type="URLDataSource"/>
+ <document>
+
+ <entity name="stackoverflow"
+ url="https://stackoverflow.com/feeds/tag/solr"
+ processor="XPathEntityProcessor"
+ forEach="/feed|/feed/entry"
+ transformer="HTMLStripTransformer,RegexTransformer">
+
+ <!-- Pick this value up from the feed level and apply to all documents -->
+ <field column="lastchecked_dt" xpath="/feed/updated" commonField="true"/>
+
+ <!-- Keep only the final numeric part of the URL -->
+ <field column="id" xpath="/feed/entry/id" regex=".*/" replaceWith=""/>
+
+ <field column="title" xpath="/feed/entry/title"/>
+ <field column="author" xpath="/feed/entry/author/name"/>
+ <field column="category" xpath="/feed/entry/category/@term"/>
+ <field column="link" xpath="/feed/entry/link[@rel='alternate']/@href"/>
+
+ <!-- Use transformers to convert HTML into plain text.
+ There is also an UpdateRequestProcess to trim remaining spaces.
+ -->
+ <field column="summary" xpath="/feed/entry/summary" stripHTML="true" regex="( |\n)+" replaceWith=" "/>
+
+ <!-- Ignore namespaces when matching XPath -->
+ <field column="rank" xpath="/feed/entry/rank"/>
+
+ <field column="published_dt" xpath="/feed/entry/published"/>
+ <field column="updated_dt" xpath="/feed/entry/updated"/>
+ </entity>
+
+ </document>
+</dataConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/lang/stopwords_en.txt b/solr-8.1.1/example/example-DIH/solr/atom/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/managed-schema b/solr-8.1.1/example/example-DIH/solr/atom/conf/managed-schema
new file mode 100644
index 000000000..58751520d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/managed-schema
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<schema name="example-DIH-atom" version="1.6">
+ <uniqueKey>id</uniqueKey>
+
+ <field name="id" type="string" indexed="true" stored="true" required="true"/>
+ <field name="title" type="text_en_splitting" indexed="true" stored="true"/>
+ <field name="author" type="string" indexed="true" stored="true"/>
+ <field name="category" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="link" type="string" indexed="true" stored="true"/>
+ <field name="summary" type="text_en_splitting" indexed="true" stored="true"/>
+ <field name="rank" type="pint" indexed="true" stored="true"/>
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+
+ <!-- Catch-all field, aggregating all "useful to search as text" fields via the copyField instructions -->
+ <field name="text" type="text_en_splitting" indexed="true" stored="false" multiValued="true"/>
+
+ <field name="urls" type="url_only" indexed="true" stored="false"/>
+
+
+ <copyField source="id" dest="text"/>
+ <copyField source="title" dest="text"/>
+ <copyField source="author" dest="text"/>
+ <copyField source="category" dest="text"/>
+ <copyField source="summary" dest="text"/>
+
+ <!-- extract URLs from summary for faceting -->
+ <copyField source="summary" dest="urls"/>
+
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true"/>
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <fieldType name="text_en_splitting" class="solr.TextField"
+ positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal. -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1"
+ catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1"
+ catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Field type that extracts URLs from the text.
+ As the stored representation is not changed, it is only useful for faceting.
+ It is not terribly useful for searching URLs either, as there are too many special symbols.
+ -->
+ <fieldType name="url_only" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.UAX29URLEmailTokenizerFactory" maxTokenLength="255"/>
+ <filter class="solr.TypeTokenFilterFactory" types="url_types.txt" useWhitelist="true"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+</schema>
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/protwords.txt b/solr-8.1.1/example/example-DIH/solr/atom/conf/protwords.txt
new file mode 100644
index 000000000..1303e42a0
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/protwords.txt
@@ -0,0 +1,17 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+lucene
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/solrconfig.xml b/solr-8.1.1/example/example-DIH/solr/atom/conf/solrconfig.xml
new file mode 100644
index 000000000..f78511354
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/solrconfig.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is a DEMO configuration, highlighting elements
+ specifically needed to get this example running
+ such as libraries and request handler specifics.
+
+ It uses defaults or does not define most of production-level settings
+ such as various caches or auto-commit policies.
+
+ See Solr Reference Guide and other examples for
+ more details on a well configured solrconfig.xml
+ https://lucene.apache.org/solr/guide/the-well-configured-solr-instance.html
+-->
+<config>
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar"/>
+
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="df">text</str>
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ </requestHandler>
+
+ <requestHandler name="/dataimport" class="solr.DataImportHandler">
+ <lst name="defaults">
+ <str name="config">atom-data-config.xml</str>
+ <str name="processor">trim_text</str>
+ </lst>
+ </requestHandler>
+
+ <updateProcessor class="solr.processor.TrimFieldUpdateProcessorFactory" name="trim_text">
+ <str name="typeName">text_en_splitting</str>
+ </updateProcessor>
+
+</config>
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/synonyms.txt b/solr-8.1.1/example/example-DIH/solr/atom/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/conf/url_types.txt b/solr-8.1.1/example/example-DIH/solr/atom/conf/url_types.txt
new file mode 100644
index 000000000..808f31384
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/conf/url_types.txt
@@ -0,0 +1 @@
+<URL>
diff --git a/solr-8.1.1/example/example-DIH/solr/atom/core.properties b/solr-8.1.1/example/example-DIH/solr/atom/core.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/atom/core.properties
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/kmeans-attributes.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/kmeans-attributes.xml
new file mode 100644
index 000000000..d802465f6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/kmeans-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the bisecting k-means clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/lingo-attributes.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/lingo-attributes.xml
new file mode 100644
index 000000000..5febfc320
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/lingo-attributes.xml
@@ -0,0 +1,24 @@
+<!--
+ Default configuration for the Lingo clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <!--
+ The language to assume for clustered documents.
+ For a list of allowed values, see:
+ http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
+ -->
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="LingoClusteringAlgorithm.desiredClusterCountBase">
+ <value type="java.lang.Integer" value="20"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/stc-attributes.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/stc-attributes.xml
new file mode 100644
index 000000000..c1bf110c8
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/clustering/carrot2/stc-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the STC clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/currency.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/currency.xml
new file mode 100644
index 000000000..3a9c58afe
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/currency.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example exchange rates file for CurrencyField type named "currency" in example schema -->
+
+<currencyConfig version="1.0">
+ <rates>
+ <!-- Updated from http://www.exchangerate.com/ at 2011-09-27 -->
+ <rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" />
+ <rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" />
+ <rate from="USD" to="EUR" rate="0.743676" comment="European Euro" />
+ <rate from="USD" to="BRL" rate="1.881093" comment="BRAZIL Real" />
+ <rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" />
+ <rate from="USD" to="CLP" rate="519.0996" comment="CHILE Peso" />
+ <rate from="USD" to="CNY" rate="6.387310" comment="CHINA Yuan" />
+ <rate from="USD" to="CZK" rate="18.47134" comment="CZECH REP. Koruna" />
+ <rate from="USD" to="DKK" rate="5.515436" comment="DENMARK Krone" />
+ <rate from="USD" to="HKD" rate="7.801922" comment="HONG KONG Dollar" />
+ <rate from="USD" to="HUF" rate="215.6169" comment="HUNGARY Forint" />
+ <rate from="USD" to="ISK" rate="118.1280" comment="ICELAND Krona" />
+ <rate from="USD" to="INR" rate="49.49088" comment="INDIA Rupee" />
+ <rate from="USD" to="XDR" rate="0.641358" comment="INTNL MON. FUND SDR" />
+ <rate from="USD" to="ILS" rate="3.709739" comment="ISRAEL Sheqel" />
+ <rate from="USD" to="JPY" rate="76.32419" comment="JAPAN Yen" />
+ <rate from="USD" to="KRW" rate="1169.173" comment="KOREA (SOUTH) Won" />
+ <rate from="USD" to="KWD" rate="0.275142" comment="KUWAIT Dinar" />
+ <rate from="USD" to="MXN" rate="13.85895" comment="MEXICO Peso" />
+ <rate from="USD" to="NZD" rate="1.285159" comment="NEW ZEALAND Dollar" />
+ <rate from="USD" to="NOK" rate="5.859035" comment="NORWAY Krone" />
+ <rate from="USD" to="PKR" rate="87.57007" comment="PAKISTAN Rupee" />
+ <rate from="USD" to="PEN" rate="2.730683" comment="PERU Sol" />
+ <rate from="USD" to="PHP" rate="43.62039" comment="PHILIPPINES Peso" />
+ <rate from="USD" to="PLN" rate="3.310139" comment="POLAND Zloty" />
+ <rate from="USD" to="RON" rate="3.100932" comment="ROMANIA Leu" />
+ <rate from="USD" to="RUB" rate="32.14663" comment="RUSSIA Ruble" />
+ <rate from="USD" to="SAR" rate="3.750465" comment="SAUDI ARABIA Riyal" />
+ <rate from="USD" to="SGD" rate="1.299352" comment="SINGAPORE Dollar" />
+ <rate from="USD" to="ZAR" rate="8.329761" comment="SOUTH AFRICA Rand" />
+ <rate from="USD" to="SEK" rate="6.883442" comment="SWEDEN Krona" />
+ <rate from="USD" to="CHF" rate="0.906035" comment="SWITZERLAND Franc" />
+ <rate from="USD" to="TWD" rate="30.40283" comment="TAIWAN Dollar" />
+ <rate from="USD" to="THB" rate="30.89487" comment="THAILAND Baht" />
+ <rate from="USD" to="AED" rate="3.672955" comment="U.A.E. Dirham" />
+ <rate from="USD" to="UAH" rate="7.988582" comment="UKRAINE Hryvnia" />
+ <rate from="USD" to="GBP" rate="0.647910" comment="UNITED KINGDOM Pound" />
+
+ <!-- Cross-rates for some common currencies -->
+ <rate from="EUR" to="GBP" rate="0.869914" />
+ <rate from="EUR" to="NOK" rate="7.800095" />
+ <rate from="GBP" to="NOK" rate="8.966508" />
+ </rates>
+</currencyConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/dataimport.properties b/solr-8.1.1/example/example-DIH/solr/db/conf/dataimport.properties
new file mode 100644
index 000000000..adecffcad
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/dataimport.properties
@@ -0,0 +1,3 @@
+#Mon Feb 06 07:58:28 UTC 2017
+item.last_index_time=2017-02-06 07\:58\:28
+last_index_time=2017-02-06 07\:58\:28
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/db-data-config.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/db-data-config.xml
new file mode 100644
index 000000000..4a7dba955
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/db-data-config.xml
@@ -0,0 +1,29 @@
+<dataConfig>
+ <dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:${solr.install.dir}/example/example-DIH/hsqldb/ex" user="sa" />
+ <document>
+ <entity name="item" query="select * from item"
+ deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
+ <field column="NAME" name="name" />
+
+ <entity name="feature"
+ query="select DESCRIPTION from FEATURE where ITEM_ID='${item.ID}'"
+ deltaQuery="select ITEM_ID from FEATURE where last_modified > '${dataimporter.last_index_time}'"
+ parentDeltaQuery="select ID from item where ID=${feature.ITEM_ID}">
+ <field name="features" column="DESCRIPTION" />
+ </entity>
+
+ <entity name="item_category"
+ query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'"
+ deltaQuery="select ITEM_ID, CATEGORY_ID from item_category where last_modified > '${dataimporter.last_index_time}'"
+ parentDeltaQuery="select ID from item where ID=${item_category.ITEM_ID}">
+ <entity name="category"
+ query="select DESCRIPTION from category where ID = '${item_category.CATEGORY_ID}'"
+ deltaQuery="select ID from category where last_modified > '${dataimporter.last_index_time}'"
+ parentDeltaQuery="select ITEM_ID, CATEGORY_ID from item_category where CATEGORY_ID=${category.ID}">
+ <field column="DESCRIPTION" name="cat" />
+ </entity>
+ </entity>
+ </entity>
+ </document>
+</dataConfig>
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/elevate.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/elevate.xml
new file mode 100644
index 000000000..2c09ebed6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/elevate.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+ loaded once at startup. If it is found in Solr's data
+ directory, it will be re-loaded every commit.
+
+ See http://wiki.apache.org/solr/QueryElevationComponent for more info
+
+-->
+<elevate>
+ <!-- Query elevation examples
+ <query text="foo bar">
+ <doc id="1" />
+ <doc id="2" />
+ <doc id="3" />
+ </query>
+
+for use with techproducts example
+
+ <query text="ipod">
+ <doc id="MA147LL/A" /> put the actual ipod at the top
+ <doc id="IW-02" exclude="true" /> exclude this cable
+ </query>
+-->
+
+</elevate>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ca.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_fr.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ga.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_it.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/hyphenations_ga.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stemdict_nl.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stoptags_ja.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ar.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_bg.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ca.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ckb.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ckb.txt
new file mode 100644
index 000000000..87abf118f
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ckb.txt
@@ -0,0 +1,136 @@
+# set of kurdish stopwords
+# note these have been normalized with our scheme (e represented with U+06D5, etc)
+# constructed from:
+# * Fig 5 of "Building A Test Collection For Sorani Kurdish" (Esmaili et al)
+# * "Sorani Kurdish: A Reference Grammar with selected readings" (Thackston)
+# * Corpus-based analysis of 77M word Sorani collection: wikipedia, news, blogs, etc
+
+# and
+Ùˆ
+# which
+Ú©Û•
+# of
+ی
+# made/did
+کرد
+# that/which
+ئەوەی
+# on/head
+سەر
+# two
+دوو
+# also
+هەروەها
+# from/that
+Ù„Û•Ùˆ
+# makes/does
+دەکات
+# some
+چەند
+# every
+هەر
+
+# demonstratives
+# that
+ئەو
+# this
+ئەم
+
+# personal pronouns
+# I
+من
+# we
+ئێمە
+# you
+تۆ
+# you
+ئێوە
+# he/she/it
+ئەو
+# they
+ئەوان
+
+# prepositions
+# to/with/by
+بە
+Ù¾ÛŽ
+# without
+بەبێ
+# along with/while/during
+بەدەم
+# in the opinion of
+بەلای
+# according to
+بەپێی
+# before
+بەرلە
+# in the direction of
+بەرەوی
+# in front of/toward
+بەرەوە
+# before/in the face of
+بەردەم
+# without
+بێ
+# except for
+بێجگە
+# for
+بۆ
+# on/in
+دە
+تێ
+# with
+دەگەڵ
+# after
+دوای
+# except for/aside from
+جگە
+# in/from
+Ù„Û•
+Ù„ÛŽ
+# in front of/before/because of
+لەبەر
+# between/among
+لەبەینی
+# concerning/about
+لەبابەت
+# concerning
+لەبارەی
+# instead of
+لەباتی
+# beside
+لەبن
+# instead of
+لەبرێتی
+# behind
+لەدەم
+# with/together with
+Ù„Û•Ú¯Û•Úµ
+# by
+لەلایەن
+# within
+لەناو
+# between/among
+Ù„Û•Ù†ÛŽÙˆ
+# for the sake of
+لەپێناوی
+# with respect to
+لەرەوی
+# by means of/for
+لەرێ
+# for the sake of
+لەرێگا
+# on/on top of/according to
+لەسەر
+# under
+لەژێر
+# between/among
+ناو
+# between/among
+نێوان
+# after
+پاش
+# before
+Ù¾ÛŽØ´
+# like
+ÙˆÛ•Ú©
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_cz.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_da.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_de.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_el.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_en.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_es.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_eu.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fa.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fi.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fr.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ga.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_gl.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hi.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hu.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hy.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_id.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_it.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ja.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_lv.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_nl.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_no.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_pt.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ro.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ru.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_sv.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_th.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_tr.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/lang/userdict_ja.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/managed-schema b/solr-8.1.1/example/example-DIH/solr/db/conf/managed-schema
new file mode 100644
index 000000000..7da41de2e
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/managed-schema
@@ -0,0 +1,1143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking. To improve performance one could
+ - set stored="false" for all fields possible (esp large fields) when you
+ only need to search on the field but don't need to return the original
+ value.
+ - set indexed="false" if you don't need to search on the field, but only
+ return the field as a result of searching on other indexed fields.
+ - remove all unneeded copyField statements
+ - for best index size and searching performance, set "index" to false
+ for all general text fields, use copyField to copy them to the
+ catchall "text" field, and use that for searching.
+ - For maximum indexing performance, use the ConcurrentUpdateSolrServer
+ java client.
+ - Remember to run the JVM in server mode, and use a higher logging level
+ that avoids logging every request
+-->
+
+<schema name="example-DIH-db" version="1.6">
+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
+ version="x.y" is Solr's version number for the schema syntax and
+ semantics. It should not normally be changed by applications.
+
+ 1.0: multiValued attribute did not exist, all fields are multiValued
+ by nature
+ 1.1: multiValued attribute introduced, false by default
+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
+ except for text fields.
+ 1.3: removed optional field compress feature
+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
+ behavior when a single string produces multiple tokens. Defaults
+ to off for version >= 1.4
+ 1.5: omitNorms defaults to true for primitive field types
+ (int, float, boolean, string...)
+ 1.6: useDocValuesAsStored defaults to true.
+ -->
+
+
+ <!-- Valid attributes for fields:
+ name: mandatory - the name for the field
+ type: mandatory - the name of a field type from the
+ fieldTypes section
+ indexed: true if this field should be indexed (searchable or sortable)
+ stored: true if this field should be retrievable
+ docValues: true if this field should have doc values. Doc values are
+ useful (required, if you are using *Point fields) for faceting,
+ grouping, sorting and function queries. Doc values will make the index
+ faster to load, more NRT-friendly and more memory-efficient.
+ They however come with some limitations: they are currently only
+ supported by StrField, UUIDField, all *PointFields, and depending
+ on the field type, they might require the field to be single-valued,
+ be required or have a default value (check the documentation
+ of the field type you're interested in for more information)
+ multiValued: true if this field may contain multiple values per document
+ omitNorms: (expert) set to true to omit the norms associated with
+ this field (this disables length normalization and index-time
+ boosting for the field, and saves some memory). Only full-text
+ fields or fields that need an index-time boost need norms.
+ Norms are omitted for primitive (non-analyzed) types by default.
+ termVectors: [false] set to true to store the term vector for a
+ given field.
+ When using MoreLikeThis, fields used for similarity should be
+ stored for best performance.
+ termPositions: Store position information with the term vector.
+ This will increase storage costs.
+ termOffsets: Store offset information with the term vector. This
+ will increase storage costs.
+ required: The field is required. It will throw an error if the
+ value does not exist
+ default: a value that should be used if no value is specified
+ when adding a document.
+ -->
+
+ <!-- field names should consist of alphanumeric or underscore characters only and
+ not start with a digit. This is not currently strictly enforced,
+ but other field names will not have first class support from all components
+ and back compatibility is not guaranteed. Names with both leading and
+ trailing underscores (e.g. _version_) are reserved.
+ -->
+
+ <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
+ or Solr won't start. _version_ and update log are required for SolrCloud
+ -->
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
+
+ <!-- points to the root document of a block of nested documents. Required for nested
+ document support, may be removed otherwise
+ -->
+ <field name="_root_" type="string" indexed="true" stored="false"/>
+
+ <!-- Only remove the "id" field if you have a very good reason to. While not strictly
+ required, it is highly recommended. A <uniqueKey> is present in almost all Solr
+ installations. See the <uniqueKey> declaration below where <uniqueKey> is set to "id".
+ -->
+ <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
+
+ <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
+ <field name="name" type="text_general" indexed="true" stored="true"/>
+ <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/>
+ <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
+
+ <field name="weight" type="pfloat" indexed="true" stored="true"/>
+ <field name="price" type="pfloat" indexed="true" stored="true"/>
+ <field name="popularity" type="pint" indexed="true" stored="true" />
+ <field name="inStock" type="boolean" indexed="true" stored="true" />
+
+ <field name="store" type="location" indexed="true" stored="true"/>
+
+ <!-- Common metadata fields, named specifically to match up with
+ SolrCell metadata when parsing rich documents such as Word, PDF.
+ Some fields are multiValued only because Tika currently may return
+ multiple values for them. Some metadata is parsed from the documents,
+ but there are some which come from the client context:
+ "content_type": From the HTTP headers of incoming stream
+ "resourcename": From SolrCell request param resource.name
+ -->
+ <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="subject" type="text_general" indexed="true" stored="true"/>
+ <field name="description" type="text_general" indexed="true" stored="true"/>
+ <field name="comments" type="text_general" indexed="true" stored="true"/>
+ <field name="author" type="text_general" indexed="true" stored="true"/>
+ <field name="keywords" type="text_general" indexed="true" stored="true"/>
+ <field name="category" type="text_general" indexed="true" stored="true"/>
+ <field name="resourcename" type="text_general" indexed="true" stored="true"/>
+ <field name="url" type="text_general" indexed="true" stored="true"/>
+ <field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="last_modified" type="pdate" indexed="true" stored="true"/>
+ <field name="links" type="string" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Main body of document extracted by SolrCell.
+ NOTE: This field is not indexed by default, since it is also copied to "text"
+ using copyField below. This is to save space. Use this field for returning and
+ highlighting document content. Use the "text" field to search the content. -->
+ <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
+
+
+ <!-- catchall field, containing all other searchable text fields (implemented
+ via copyField further on in this schema -->
+ <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- catchall text field that indexes tokens both normally and in reverse for efficient
+ leading wildcard queries. -->
+ <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- non-tokenized version of manufacturer to make it easier to sort or group
+ results by manufacturer. copied from "manu" via copyField -->
+ <field name="manu_exact" type="string" indexed="true" stored="false"/>
+
+ <field name="payloads" type="payloads" indexed="true" stored="true"/>
+
+
+ <!--
+ Some fields such as popularity and manu_exact could be modified to
+ leverage doc values:
+ <field name="popularity" type="pint" indexed="true" stored="true" docValues="true" />
+ <field name="manu_exact" type="string" indexed="false" stored="false" docValues="true" />
+ <field name="cat" type="string" indexed="true" stored="true" docValues="true" multiValued="true"/>
+
+
+ Although it would make indexing slightly slower and the index bigger, it
+ would also make the index faster to load, more memory-efficient and more
+ NRT-friendly.
+ -->
+
+ <!-- Dynamic field definitions allow using convention over configuration
+ for fields via the specification of patterns to match field names.
+ EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
+ RESTRICTION: the glob-like pattern in the name attribute must have
+ a "*" only at the start or the end. -->
+
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pint" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" />
+ <dynamicField name="*_s_ns" type="string" indexed="true" stored="false" />
+ <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
+ <dynamicField name="*_ls" type="plong" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloat" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdouble" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
+ <dynamicField name="*_coordinate" type="pdouble" indexed="true" stored="false" />
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+
+ <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
+
+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+ <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <dynamicField name="random_*" type="random" />
+
+ <!-- uncomment the following to ignore any fields that don't already match an existing
+ field name or dynamic field, rather than reporting them as an error.
+ alternately, change the type="ignored" to some other type e.g. "text" if you want
+ unknown fields indexed and/or stored by default -->
+ <!--dynamicField name="*" type="ignored" multiValued="true" /-->
+
+
+
+
+ <!-- Field to use to determine and enforce document uniqueness.
+ Unless this field is marked with required="false", it will be a required field
+ -->
+ <uniqueKey>id</uniqueKey>
+
+ <!-- copyField commands copy one field to another at the time a document
+ is added to the index. It's used either to index the same field differently,
+ or to add multiple fields to the same field for easier/faster searching. -->
+
+ <copyField source="cat" dest="text"/>
+ <copyField source="name" dest="text"/>
+ <copyField source="manu" dest="text"/>
+ <copyField source="features" dest="text"/>
+ <copyField source="includes" dest="text"/>
+ <copyField source="manu" dest="manu_exact"/>
+
+ <!-- Copy the price into a currency enabled field (default USD) -->
+ <copyField source="price" dest="price_c"/>
+
+ <!-- Text fields from SolrCell to search by default in our catch-all field -->
+ <copyField source="title" dest="text"/>
+ <copyField source="author" dest="text"/>
+ <copyField source="description" dest="text"/>
+ <copyField source="keywords" dest="text"/>
+ <copyField source="content" dest="text"/>
+ <copyField source="content_type" dest="text"/>
+ <copyField source="resourcename" dest="text"/>
+ <copyField source="url" dest="text"/>
+
+ <!-- Create a string version of author for faceting -->
+ <copyField source="author" dest="author_s"/>
+
+ <!-- Above, multiple source fields are copied to the [text] field.
+ Another way to map multiple source fields to the same
+ destination field is to use the dynamic field syntax.
+ copyField also supports a maxChars to copy setting. -->
+
+ <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
+
+ <!-- copy name to alphaNameSort, a field designed for sorting by name -->
+ <!-- <copyField source="name" dest="alphaNameSort"/> -->
+
+
+ <!-- field type definitions. The "name" attribute is
+ just a label to be used by field definitions. The "class"
+ attribute and any other attributes determine the real
+ behavior of the fieldType.
+ Class names starting with "solr" refer to java classes in a
+ standard package such as org.apache.solr.analysis
+ -->
+
+ <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
+
+ <!-- boolean type: "true" or "false" -->
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+
+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
+ currently supported on types that are sorted internally as strings
+ and on numeric types.
+ This includes "string", "boolean", "pint", "pfloat", "plong", "pdate", "pdouble".
+ - If sortMissingLast="true", then a sort on this field will cause documents
+ without the field to come after documents with the field,
+ regardless of the requested sort order (asc or desc).
+ - If sortMissingFirst="true", then a sort on this field will cause documents
+ without the field to come before documents with the field,
+ regardless of the requested sort order.
+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
+ then default lucene sorting will be used which places docs without the
+ field first in an ascending sort and last in a descending sort.
+ -->
+
+ <!--
+ Numeric field types that index values using KD-trees.
+ Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
+ -->
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+ is a more restricted form of the canonical representation of dateTime
+ http://www.w3.org/TR/xmlschema-2/#dateTime
+ The trailing "Z" designates UTC time and is mandatory.
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+ All other components are mandatory.
+
+ Expressions can also be used to denote calculations that should be
+ performed relative to "NOW" to determine the value, ie...
+
+ NOW/HOUR
+ ... Round to the start of the current hour
+ NOW-1DAY
+ ... Exactly 1 day prior to now
+ NOW/DAY+6MONTHS+3DAYS
+ ... 6 months and 3 days in the future from the start of
+ the current day
+
+ Consult the DatePointField javadocs for more information.
+ -->
+ <!-- KD-tree versions of date fields -->
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+
+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
+ <fieldType name="binary" class="solr.BinaryField"/>
+
+ <!-- The "RandomSortField" is not used to store or search any
+ data. You can declare fields of this type it in your schema
+ to generate pseudo-random orderings of your docs for sorting
+ or function purposes. The ordering is generated based on the field
+ name and the version of the index. As long as the index version
+ remains unchanged, and the same field name is reused,
+ the ordering of the docs will be consistent.
+ If you want different psuedo-random orderings of documents,
+ for the same version of the index, use a dynamicField and
+ change the field name in the request.
+ -->
+ <fieldType name="random" class="solr.RandomSortField" indexed="true" />
+
+ <!-- solr.TextField allows the specification of custom text analyzers
+ specified as a tokenizer and a list of token filters. Different
+ analyzers may be specified for indexing and querying.
+
+ The optional positionIncrementGap puts space between multiple fields of
+ this type on the same document, with the purpose of preventing false phrase
+ matching across fields.
+
+ For more info on customizing your analyzer chain, please see
+ http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+ -->
+
+ <!-- One can also specify an existing Analyzer class that has a
+ default constructor via the class attribute on the analyzer element.
+ Example:
+ <fieldType name="text_greek" class="solr.TextField">
+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+ </fieldType>
+ -->
+
+ <!-- A text field that only splits on whitespace for exact matching of words -->
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A general text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ removes stop words from case-insensitive "stopwords.txt"
+ (empty by default), and down cases. At query time only, it
+ also applies synonyms. -->
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English: it
+ tokenizes with StandardTokenizer, removes English stop words
+ (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
+ finally applies Porter's stemming. The query time analyzer
+ also applies synonyms from synonyms.txt. -->
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterGraphFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Just like text_general except it reverses the characters of
+ each token, to enable more efficient leading wildcard queries. -->
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- charFilter + WhitespaceTokenizer -->
+ <!--
+ <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
+ <analyzer>
+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+ -->
+
+ <!-- This is an example of using the KeywordTokenizer along
+ With various TokenFilterFactories to produce a sortable field
+ that does not include some properties of the source text
+ -->
+ <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+ <analyzer>
+ <!-- KeywordTokenizer does no actual tokenizing, so the entire
+ input string is preserved as a single token
+ -->
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <!-- The LowerCase TokenFilter does what you expect, which can be
+ when you want your sorting to be case insensitive
+ -->
+ <filter class="solr.LowerCaseFilterFactory" />
+ <!-- The TrimFilter removes any leading or trailing whitespace -->
+ <filter class="solr.TrimFilterFactory" />
+ <!-- The PatternReplaceFilter gives you the flexibility to use
+ Java Regular expression to replace any sequence of characters
+ matching a pattern with an arbitrary replacement string,
+ which may include back references to portions of the original
+ string matched by the pattern.
+
+ See the Java Regular Expression documentation for more
+ information on pattern and replacement string syntax.
+
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
+ -->
+ <filter class="solr.PatternReplaceFilterFactory"
+ pattern="([^a-z])" replacement="" replace="all"
+ />
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="phonetic" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="payloads" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!--
+ The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
+ a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f
+ Attributes of the DelimitedPayloadTokenFilterFactory :
+ "delimiter" - a one character delimiter. Default is | (pipe)
+ "encoder" - how to encode the following value into a playload
+ float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+ integer -> o.a.l.a.p.IntegerEncoder
+ identity -> o.a.l.a.p.IdentityEncoder
+ Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
+ -->
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- lowercases the entire field value, keeping it as a single token. -->
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at index time, so
+ queries for paths match documents at that path, or in descendent paths
+ -->
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ </fieldType>
+ <!--
+ Example of using PathHierarchyTokenizerFactory at query time, so
+ queries for paths match documents at that path, or in ancestor paths
+ -->
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ </fieldType>
+
+ <!-- since fields of this type are by default not stored or indexed,
+ any data added to them will be ignored outright. -->
+ <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+
+ <!-- This point type indexes the coordinates as separate fields (subFields)
+ If subFieldType is defined, it references a type, and a dynamic field
+ definition is created matching *___<typename>. Alternately, if
+ subFieldSuffix is defined, that is used to create the subFields.
+ Example: if subFieldType="double", then the coordinates would be
+ indexed in fields myloc_0___double,myloc_1___double.
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
+ in fields myloc_0_d,myloc_1_d
+ The subFields are an implementation detail of the fieldType, and end
+ users normally should not need to know about them.
+ -->
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
+
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
+ For more information about this and other Spatial fields new to Solr 4, see:
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
+ -->
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+ geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
+
+ <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
+ Parameters:
+ amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field.
+ The dynamic field must have a field type that extends LongValueFieldType.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ codeStrSuffix: Required. Refers to a dynamic field for the currency code sub-field.
+ The dynamic field must have a field type that extends StrField.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
+ providerClass: Lets you plug in other exchange provider backend:
+ solr.FileExchangeRateProvider is the default and takes one parameter:
+ currencyConfig: name of an xml file holding exchange rates
+ solr.OpenExchangeRatesOrgProvider uses rates from openexchangerates.org:
+ ratesFileLocation: URL or path to rates JSON file (default latest.json on the web)
+ refreshInterval: Number of minutes between each rates fetch (default: 1440, min: 60)
+ -->
+ <fieldType name="currency" class="solr.CurrencyFieldType" amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
+ defaultCurrency="USD" currencyConfig="currency.xml" />
+
+
+ <!-- some examples for different languages (generally ordered by ISO code) -->
+
+ <!-- Arabic -->
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- for any non-arabic -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
+ <!-- normalizes ﻯ to ﻱ, etc -->
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Bulgarian -->
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Catalan -->
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- for any non-CJK -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Kurdish -->
+ <fieldType name="text_ckb" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SoraniNormalizationFilterFactory"/>
+ <!-- for any latin text -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ckb.txt"/>
+ <filter class="solr.SoraniStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Czech -->
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Danish -->
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- German -->
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Greek -->
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- greek specific lowercase for sigma -->
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Spanish -->
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Basque -->
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Persian -->
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- for ZWNJ -->
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Finnish -->
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- French -->
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Irish -->
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes d', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
+ <!-- removes n-, etc. position increments is intentionally false! -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Galician -->
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
+ <filter class="solr.GalicianStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Hindi -->
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <!-- normalizes unicode representation -->
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <!-- normalizes variation in spelling -->
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Hungarian -->
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Armenian -->
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Indonesian -->
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Italian -->
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
+
+ NOTE: If you want to optimize search for precision, use default operator AND in your request
+ handler config (q.op) Use OR if you would like to optimize for recall (default).
+ -->
+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
+ <analyzer>
+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
+
+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
+ is used to segment compounds into its parts and the compound itself is kept as synonym.
+
+ Valid values for attribute mode are:
+ normal: regular segmentation
+ search: segmentation useful for search with synonyms compounds (default)
+ extended: same as search mode, but unigrams unknown words (experimental)
+
+ For some applications it might be good to use search mode for indexing and normal mode for
+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
+
+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ User dictionary attributes are:
+ userDictionary: user dictionary filename
+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
+
+ See lang/userdict_ja.txt for a sample user dictionary file.
+
+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
+
+ See http://wiki.apache.org/solr/JapaneseLanguageSupport for more on Japanese language support.
+ -->
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <!-- Removes tokens with certain part-of-speech tags -->
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <!-- Lower-cases romaji characters -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Korean morphological analysis -->
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- Nori Korean morphological analyzer/tokenizer (KoreanTokenizer)
+ The Korean (nori) analyzer integrates Lucene nori analysis module into Solr.
+ It uses the mecab-ko-dic dictionary to perform morphological analysis of Korean texts.
+
+ This dictionary was built with MeCab, it defines a format for the features adapted
+ for the Korean language.
+
+ Nori also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ The tokenizer supports multiple schema attributes:
+ * userDictionary: User dictionary path.
+ * userDictionaryEncoding: User dictionary encoding.
+ * decompoundMode: Decompound mode. Either 'none', 'discard', 'mixed'. Default is 'discard'.
+ * outputUnknownUnigrams: If true outputs unigrams for unknown words.
+ -->
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <!-- Removes some part of speech stuff like EOMI (Pos.E), you can add a parameter 'tags',
+ listing the tags to remove. By default it removes:
+ E, IC, J, MAG, MAJ, MM, SP, SSC, SSO, SC, SE, XPN, XSA, XSN, XSV, UNA, NA, VSV
+ This is basically an equivalent to stemming.
+ -->
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <!-- Replaces term text with the Hangul transcription of Hanja characters, if applicable: -->
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Latvian -->
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Dutch -->
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Norwegian -->
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory" variant="nb"/> -->
+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory" variant="nb"/> -->
+ <!-- The "light" and "minimal" stemmers support variants: nb=Bokmål, nn=Nynorsk, no=Both -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Portuguese -->
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Romanian -->
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Russian -->
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Swedish -->
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Thai -->
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Turkish -->
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ApostropheFilterFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+ A custom Similarity or SimilarityFactory may be specified here, but
+ the default is fine for most applications.
+ For more info: http://wiki.apache.org/solr/SchemaXml#Similarity
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+ <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-FoldToASCII.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-FoldToASCII.txt
new file mode 100644
index 000000000..9a84b6eac
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-FoldToASCII.txt
@@ -0,0 +1,3813 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# This map converts alphabetic, numeric, and symbolic Unicode characters
+# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode
+# block) into their ASCII equivalents, if one exists.
+#
+# Characters from the following Unicode blocks are converted; however, only
+# those characters with reasonable ASCII alternatives are converted:
+#
+# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf
+# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf
+# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf
+# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf
+# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf
+# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf
+# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf
+# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf
+# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf
+# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf
+# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf
+# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf
+# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf
+# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf
+# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf
+# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf
+#
+# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode
+#
+# The set of character conversions supported by this map is a superset of
+# those supported by the map represented by mapping-ISOLatin1Accent.txt.
+#
+# See the bottom of this file for the Perl script used to generate the contents
+# of this file (without this header) from ASCIIFoldingFilter.java.
+
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+
+# À [LATIN CAPITAL LETTER A WITH GRAVE]
+"\u00C0" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH ACUTE]
+"\u00C1" => "A"
+
+# Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+"\u00C2" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH TILDE]
+"\u00C3" => "A"
+
+# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
+"\u00C4" => "A"
+
+# Ã… [LATIN CAPITAL LETTER A WITH RING ABOVE]
+"\u00C5" => "A"
+
+# Ā [LATIN CAPITAL LETTER A WITH MACRON]
+"\u0100" => "A"
+
+# Ä‚ [LATIN CAPITAL LETTER A WITH BREVE]
+"\u0102" => "A"
+
+# Ä„ [LATIN CAPITAL LETTER A WITH OGONEK]
+"\u0104" => "A"
+
+# Æ http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
+"\u018F" => "A"
+
+# Ç [LATIN CAPITAL LETTER A WITH CARON]
+"\u01CD" => "A"
+
+# Çž [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DE" => "A"
+
+# Ç  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E0" => "A"
+
+# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FA" => "A"
+
+# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+"\u0200" => "A"
+
+# È‚ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+"\u0202" => "A"
+
+# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
+"\u0226" => "A"
+
+# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
+"\u023A" => "A"
+
+# á´€ [LATIN LETTER SMALL CAPITAL A]
+"\u1D00" => "A"
+
+# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
+"\u1E00" => "A"
+
+# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
+"\u1EA0" => "A"
+
+# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+"\u1EA2" => "A"
+
+# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA4" => "A"
+
+# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA6" => "A"
+
+# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA8" => "A"
+
+# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAA" => "A"
+
+# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAC" => "A"
+
+# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+"\u1EAE" => "A"
+
+# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+"\u1EB0" => "A"
+
+# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB2" => "A"
+
+# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+"\u1EB4" => "A"
+
+# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB6" => "A"
+
+# â’¶ [CIRCLED LATIN CAPITAL LETTER A]
+"\u24B6" => "A"
+
+# A [FULLWIDTH LATIN CAPITAL LETTER A]
+"\uFF21" => "A"
+
+# à [LATIN SMALL LETTER A WITH GRAVE]
+"\u00E0" => "a"
+
+# á [LATIN SMALL LETTER A WITH ACUTE]
+"\u00E1" => "a"
+
+# â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
+"\u00E2" => "a"
+
+# ã [LATIN SMALL LETTER A WITH TILDE]
+"\u00E3" => "a"
+
+# ä [LATIN SMALL LETTER A WITH DIAERESIS]
+"\u00E4" => "a"
+
+# å [LATIN SMALL LETTER A WITH RING ABOVE]
+"\u00E5" => "a"
+
+# Ä [LATIN SMALL LETTER A WITH MACRON]
+"\u0101" => "a"
+
+# ă [LATIN SMALL LETTER A WITH BREVE]
+"\u0103" => "a"
+
+# Ä… [LATIN SMALL LETTER A WITH OGONEK]
+"\u0105" => "a"
+
+# ÇŽ [LATIN SMALL LETTER A WITH CARON]
+"\u01CE" => "a"
+
+# ÇŸ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DF" => "a"
+
+# Ç¡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E1" => "a"
+
+# Ç» [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FB" => "a"
+
+# È [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+"\u0201" => "a"
+
+# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
+"\u0203" => "a"
+
+# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
+"\u0227" => "a"
+
+# É [LATIN SMALL LETTER TURNED A]
+"\u0250" => "a"
+
+# É™ [LATIN SMALL LETTER SCHWA]
+"\u0259" => "a"
+
+# Éš [LATIN SMALL LETTER SCHWA WITH HOOK]
+"\u025A" => "a"
+
+# á¶ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
+"\u1D8F" => "a"
+
+# á¶• [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
+"\u1D95" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH RING BELOW]
+"\u1E01" => "a"
+
+# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
+"\u1E9A" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH DOT BELOW]
+"\u1EA1" => "a"
+
+# ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
+"\u1EA3" => "a"
+
+# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA5" => "a"
+
+# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA7" => "a"
+
+# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA9" => "a"
+
+# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAB" => "a"
+
+# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAD" => "a"
+
+# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+"\u1EAF" => "a"
+
+# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+"\u1EB1" => "a"
+
+# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB3" => "a"
+
+# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
+"\u1EB5" => "a"
+
+# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB7" => "a"
+
+# â‚ [LATIN SUBSCRIPT SMALL LETTER A]
+"\u2090" => "a"
+
+# â‚” [LATIN SUBSCRIPT SMALL LETTER SCHWA]
+"\u2094" => "a"
+
+# â“ [CIRCLED LATIN SMALL LETTER A]
+"\u24D0" => "a"
+
+# â±¥ [LATIN SMALL LETTER A WITH STROKE]
+"\u2C65" => "a"
+
+# Ɐ [LATIN CAPITAL LETTER TURNED A]
+"\u2C6F" => "a"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER A]
+"\uFF41" => "a"
+
+# Ꜳ [LATIN CAPITAL LETTER AA]
+"\uA732" => "AA"
+
+# Æ [LATIN CAPITAL LETTER AE]
+"\u00C6" => "AE"
+
+# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
+"\u01E2" => "AE"
+
+# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
+"\u01FC" => "AE"
+
+# á´ [LATIN LETTER SMALL CAPITAL AE]
+"\u1D01" => "AE"
+
+# Ꜵ [LATIN CAPITAL LETTER AO]
+"\uA734" => "AO"
+
+# Ꜷ [LATIN CAPITAL LETTER AU]
+"\uA736" => "AU"
+
+# Ꜹ [LATIN CAPITAL LETTER AV]
+"\uA738" => "AV"
+
+# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
+"\uA73A" => "AV"
+
+# Ꜽ [LATIN CAPITAL LETTER AY]
+"\uA73C" => "AY"
+
+# ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
+"\u249C" => "(a)"
+
+# ꜳ [LATIN SMALL LETTER AA]
+"\uA733" => "aa"
+
+# æ [LATIN SMALL LETTER AE]
+"\u00E6" => "ae"
+
+# ǣ [LATIN SMALL LETTER AE WITH MACRON]
+"\u01E3" => "ae"
+
+# ǽ [LATIN SMALL LETTER AE WITH ACUTE]
+"\u01FD" => "ae"
+
+# á´‚ [LATIN SMALL LETTER TURNED AE]
+"\u1D02" => "ae"
+
+# ꜵ [LATIN SMALL LETTER AO]
+"\uA735" => "ao"
+
+# ꜷ [LATIN SMALL LETTER AU]
+"\uA737" => "au"
+
+# ꜹ [LATIN SMALL LETTER AV]
+"\uA739" => "av"
+
+# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
+"\uA73B" => "av"
+
+# ꜽ [LATIN SMALL LETTER AY]
+"\uA73D" => "ay"
+
+# Æ [LATIN CAPITAL LETTER B WITH HOOK]
+"\u0181" => "B"
+
+# Æ‚ [LATIN CAPITAL LETTER B WITH TOPBAR]
+"\u0182" => "B"
+
+# Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
+"\u0243" => "B"
+
+# Ê™ [LATIN LETTER SMALL CAPITAL B]
+"\u0299" => "B"
+
+# á´ƒ [LATIN LETTER SMALL CAPITAL BARRED B]
+"\u1D03" => "B"
+
+# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
+"\u1E02" => "B"
+
+# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
+"\u1E04" => "B"
+
+# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
+"\u1E06" => "B"
+
+# â’· [CIRCLED LATIN CAPITAL LETTER B]
+"\u24B7" => "B"
+
+# ï¼¢ [FULLWIDTH LATIN CAPITAL LETTER B]
+"\uFF22" => "B"
+
+# ƀ [LATIN SMALL LETTER B WITH STROKE]
+"\u0180" => "b"
+
+# ƃ [LATIN SMALL LETTER B WITH TOPBAR]
+"\u0183" => "b"
+
+# É“ [LATIN SMALL LETTER B WITH HOOK]
+"\u0253" => "b"
+
+# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
+"\u1D6C" => "b"
+
+# á¶€ [LATIN SMALL LETTER B WITH PALATAL HOOK]
+"\u1D80" => "b"
+
+# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
+"\u1E03" => "b"
+
+# ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
+"\u1E05" => "b"
+
+# ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
+"\u1E07" => "b"
+
+# â“‘ [CIRCLED LATIN SMALL LETTER B]
+"\u24D1" => "b"
+
+# b [FULLWIDTH LATIN SMALL LETTER B]
+"\uFF42" => "b"
+
+# â’ [PARENTHESIZED LATIN SMALL LETTER B]
+"\u249D" => "(b)"
+
+# Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
+"\u00C7" => "C"
+
+# Ć [LATIN CAPITAL LETTER C WITH ACUTE]
+"\u0106" => "C"
+
+# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+"\u0108" => "C"
+
+# ÄŠ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
+"\u010A" => "C"
+
+# Č [LATIN CAPITAL LETTER C WITH CARON]
+"\u010C" => "C"
+
+# Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
+"\u0187" => "C"
+
+# È» [LATIN CAPITAL LETTER C WITH STROKE]
+"\u023B" => "C"
+
+# Ê— [LATIN LETTER STRETCHED C]
+"\u0297" => "C"
+
+# á´„ [LATIN LETTER SMALL CAPITAL C]
+"\u1D04" => "C"
+
+# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E08" => "C"
+
+# â’¸ [CIRCLED LATIN CAPITAL LETTER C]
+"\u24B8" => "C"
+
+# ï¼£ [FULLWIDTH LATIN CAPITAL LETTER C]
+"\uFF23" => "C"
+
+# ç [LATIN SMALL LETTER C WITH CEDILLA]
+"\u00E7" => "c"
+
+# ć [LATIN SMALL LETTER C WITH ACUTE]
+"\u0107" => "c"
+
+# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
+"\u0109" => "c"
+
+# Ä‹ [LATIN SMALL LETTER C WITH DOT ABOVE]
+"\u010B" => "c"
+
+# Ä [LATIN SMALL LETTER C WITH CARON]
+"\u010D" => "c"
+
+# ƈ [LATIN SMALL LETTER C WITH HOOK]
+"\u0188" => "c"
+
+# ȼ [LATIN SMALL LETTER C WITH STROKE]
+"\u023C" => "c"
+
+# É• [LATIN SMALL LETTER C WITH CURL]
+"\u0255" => "c"
+
+# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E09" => "c"
+
+# ↄ [LATIN SMALL LETTER REVERSED C]
+"\u2184" => "c"
+
+# â“’ [CIRCLED LATIN SMALL LETTER C]
+"\u24D2" => "c"
+
+# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
+"\uA73E" => "c"
+
+# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
+"\uA73F" => "c"
+
+# c [FULLWIDTH LATIN SMALL LETTER C]
+"\uFF43" => "c"
+
+# â’ž [PARENTHESIZED LATIN SMALL LETTER C]
+"\u249E" => "(c)"
+
+# Ã [LATIN CAPITAL LETTER ETH]
+"\u00D0" => "D"
+
+# ÄŽ [LATIN CAPITAL LETTER D WITH CARON]
+"\u010E" => "D"
+
+# Ä [LATIN CAPITAL LETTER D WITH STROKE]
+"\u0110" => "D"
+
+# Ɖ [LATIN CAPITAL LETTER AFRICAN D]
+"\u0189" => "D"
+
+# ÆŠ [LATIN CAPITAL LETTER D WITH HOOK]
+"\u018A" => "D"
+
+# Æ‹ [LATIN CAPITAL LETTER D WITH TOPBAR]
+"\u018B" => "D"
+
+# á´… [LATIN LETTER SMALL CAPITAL D]
+"\u1D05" => "D"
+
+# á´† [LATIN LETTER SMALL CAPITAL ETH]
+"\u1D06" => "D"
+
+# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
+"\u1E0A" => "D"
+
+# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
+"\u1E0C" => "D"
+
+# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
+"\u1E0E" => "D"
+
+# Ḡ[LATIN CAPITAL LETTER D WITH CEDILLA]
+"\u1E10" => "D"
+
+# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E12" => "D"
+
+# â’¹ [CIRCLED LATIN CAPITAL LETTER D]
+"\u24B9" => "D"
+
+# ê¹ [LATIN CAPITAL LETTER INSULAR D]
+"\uA779" => "D"
+
+# D [FULLWIDTH LATIN CAPITAL LETTER D]
+"\uFF24" => "D"
+
+# ð [LATIN SMALL LETTER ETH]
+"\u00F0" => "d"
+
+# Ä [LATIN SMALL LETTER D WITH CARON]
+"\u010F" => "d"
+
+# Ä‘ [LATIN SMALL LETTER D WITH STROKE]
+"\u0111" => "d"
+
+# ƌ [LATIN SMALL LETTER D WITH TOPBAR]
+"\u018C" => "d"
+
+# È¡ [LATIN SMALL LETTER D WITH CURL]
+"\u0221" => "d"
+
+# É– [LATIN SMALL LETTER D WITH TAIL]
+"\u0256" => "d"
+
+# É— [LATIN SMALL LETTER D WITH HOOK]
+"\u0257" => "d"
+
+# áµ­ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
+"\u1D6D" => "d"
+
+# á¶ [LATIN SMALL LETTER D WITH PALATAL HOOK]
+"\u1D81" => "d"
+
+# á¶‘ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
+"\u1D91" => "d"
+
+# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
+"\u1E0B" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH DOT BELOW]
+"\u1E0D" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH LINE BELOW]
+"\u1E0F" => "d"
+
+# ḑ [LATIN SMALL LETTER D WITH CEDILLA]
+"\u1E11" => "d"
+
+# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E13" => "d"
+
+# â““ [CIRCLED LATIN SMALL LETTER D]
+"\u24D3" => "d"
+
+# êº [LATIN SMALL LETTER INSULAR D]
+"\uA77A" => "d"
+
+# d [FULLWIDTH LATIN SMALL LETTER D]
+"\uFF44" => "d"
+
+# Ç„ [LATIN CAPITAL LETTER DZ WITH CARON]
+"\u01C4" => "DZ"
+
+# DZ [LATIN CAPITAL LETTER DZ]
+"\u01F1" => "DZ"
+
+# Ç… [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
+"\u01C5" => "Dz"
+
+# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
+"\u01F2" => "Dz"
+
+# â’Ÿ [PARENTHESIZED LATIN SMALL LETTER D]
+"\u249F" => "(d)"
+
+# ȸ [LATIN SMALL LETTER DB DIGRAPH]
+"\u0238" => "db"
+
+# dž [LATIN SMALL LETTER DZ WITH CARON]
+"\u01C6" => "dz"
+
+# dz [LATIN SMALL LETTER DZ]
+"\u01F3" => "dz"
+
+# ʣ [LATIN SMALL LETTER DZ DIGRAPH]
+"\u02A3" => "dz"
+
+# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
+"\u02A5" => "dz"
+
+# È [LATIN CAPITAL LETTER E WITH GRAVE]
+"\u00C8" => "E"
+
+# É [LATIN CAPITAL LETTER E WITH ACUTE]
+"\u00C9" => "E"
+
+# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+"\u00CA" => "E"
+
+# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
+"\u00CB" => "E"
+
+# Ä’ [LATIN CAPITAL LETTER E WITH MACRON]
+"\u0112" => "E"
+
+# Ä” [LATIN CAPITAL LETTER E WITH BREVE]
+"\u0114" => "E"
+
+# Ä– [LATIN CAPITAL LETTER E WITH DOT ABOVE]
+"\u0116" => "E"
+
+# Ę [LATIN CAPITAL LETTER E WITH OGONEK]
+"\u0118" => "E"
+
+# Äš [LATIN CAPITAL LETTER E WITH CARON]
+"\u011A" => "E"
+
+# ÆŽ [LATIN CAPITAL LETTER REVERSED E]
+"\u018E" => "E"
+
+# Æ [LATIN CAPITAL LETTER OPEN E]
+"\u0190" => "E"
+
+# È„ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+"\u0204" => "E"
+
+# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+"\u0206" => "E"
+
+# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
+"\u0228" => "E"
+
+# Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
+"\u0246" => "E"
+
+# á´‡ [LATIN LETTER SMALL CAPITAL E]
+"\u1D07" => "E"
+
+# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+"\u1E14" => "E"
+
+# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+"\u1E16" => "E"
+
+# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E18" => "E"
+
+# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
+"\u1E1A" => "E"
+
+# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1C" => "E"
+
+# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
+"\u1EB8" => "E"
+
+# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+"\u1EBA" => "E"
+
+# Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
+"\u1EBC" => "E"
+
+# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBE" => "E"
+
+# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC0" => "E"
+
+# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC2" => "E"
+
+# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC4" => "E"
+
+# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC6" => "E"
+
+# â’º [CIRCLED LATIN CAPITAL LETTER E]
+"\u24BA" => "E"
+
+# â±» [LATIN LETTER SMALL CAPITAL TURNED E]
+"\u2C7B" => "E"
+
+# ï¼¥ [FULLWIDTH LATIN CAPITAL LETTER E]
+"\uFF25" => "E"
+
+# è [LATIN SMALL LETTER E WITH GRAVE]
+"\u00E8" => "e"
+
+# é [LATIN SMALL LETTER E WITH ACUTE]
+"\u00E9" => "e"
+
+# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
+"\u00EA" => "e"
+
+# ë [LATIN SMALL LETTER E WITH DIAERESIS]
+"\u00EB" => "e"
+
+# Ä“ [LATIN SMALL LETTER E WITH MACRON]
+"\u0113" => "e"
+
+# Ä• [LATIN SMALL LETTER E WITH BREVE]
+"\u0115" => "e"
+
+# Ä— [LATIN SMALL LETTER E WITH DOT ABOVE]
+"\u0117" => "e"
+
+# Ä™ [LATIN SMALL LETTER E WITH OGONEK]
+"\u0119" => "e"
+
+# Ä› [LATIN SMALL LETTER E WITH CARON]
+"\u011B" => "e"
+
+# Ç [LATIN SMALL LETTER TURNED E]
+"\u01DD" => "e"
+
+# È… [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+"\u0205" => "e"
+
+# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
+"\u0207" => "e"
+
+# È© [LATIN SMALL LETTER E WITH CEDILLA]
+"\u0229" => "e"
+
+# ɇ [LATIN SMALL LETTER E WITH STROKE]
+"\u0247" => "e"
+
+# ɘ [LATIN SMALL LETTER REVERSED E]
+"\u0258" => "e"
+
+# É› [LATIN SMALL LETTER OPEN E]
+"\u025B" => "e"
+
+# ɜ [LATIN SMALL LETTER REVERSED OPEN E]
+"\u025C" => "e"
+
+# É [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
+"\u025D" => "e"
+
+# Éž [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
+"\u025E" => "e"
+
+# Êš [LATIN SMALL LETTER CLOSED OPEN E]
+"\u029A" => "e"
+
+# á´ˆ [LATIN SMALL LETTER TURNED OPEN E]
+"\u1D08" => "e"
+
+# á¶’ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
+"\u1D92" => "e"
+
+# á¶“ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
+"\u1D93" => "e"
+
+# á¶” [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
+"\u1D94" => "e"
+
+# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+"\u1E15" => "e"
+
+# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+"\u1E17" => "e"
+
+# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E19" => "e"
+
+# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
+"\u1E1B" => "e"
+
+# Ḡ[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1D" => "e"
+
+# ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
+"\u1EB9" => "e"
+
+# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
+"\u1EBB" => "e"
+
+# ẽ [LATIN SMALL LETTER E WITH TILDE]
+"\u1EBD" => "e"
+
+# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBF" => "e"
+
+# á» [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC1" => "e"
+
+# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC3" => "e"
+
+# á»… [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC5" => "e"
+
+# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC7" => "e"
+
+# â‚‘ [LATIN SUBSCRIPT SMALL LETTER E]
+"\u2091" => "e"
+
+# â“” [CIRCLED LATIN SMALL LETTER E]
+"\u24D4" => "e"
+
+# ⱸ [LATIN SMALL LETTER E WITH NOTCH]
+"\u2C78" => "e"
+
+# ï½… [FULLWIDTH LATIN SMALL LETTER E]
+"\uFF45" => "e"
+
+# â’  [PARENTHESIZED LATIN SMALL LETTER E]
+"\u24A0" => "(e)"
+
+# Æ‘ [LATIN CAPITAL LETTER F WITH HOOK]
+"\u0191" => "F"
+
+# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
+"\u1E1E" => "F"
+
+# â’» [CIRCLED LATIN CAPITAL LETTER F]
+"\u24BB" => "F"
+
+# ꜰ [LATIN LETTER SMALL CAPITAL F]
+"\uA730" => "F"
+
+# ê» [LATIN CAPITAL LETTER INSULAR F]
+"\uA77B" => "F"
+
+# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
+"\uA7FB" => "F"
+
+# F [FULLWIDTH LATIN CAPITAL LETTER F]
+"\uFF26" => "F"
+
+# Æ’ [LATIN SMALL LETTER F WITH HOOK]
+"\u0192" => "f"
+
+# áµ® [LATIN SMALL LETTER F WITH MIDDLE TILDE]
+"\u1D6E" => "f"
+
+# á¶‚ [LATIN SMALL LETTER F WITH PALATAL HOOK]
+"\u1D82" => "f"
+
+# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
+"\u1E1F" => "f"
+
+# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+"\u1E9B" => "f"
+
+# â“• [CIRCLED LATIN SMALL LETTER F]
+"\u24D5" => "f"
+
+# ê¼ [LATIN SMALL LETTER INSULAR F]
+"\uA77C" => "f"
+
+# f [FULLWIDTH LATIN SMALL LETTER F]
+"\uFF46" => "f"
+
+# â’¡ [PARENTHESIZED LATIN SMALL LETTER F]
+"\u24A1" => "(f)"
+
+# ff [LATIN SMALL LIGATURE FF]
+"\uFB00" => "ff"
+
+# ffi [LATIN SMALL LIGATURE FFI]
+"\uFB03" => "ffi"
+
+# ffl [LATIN SMALL LIGATURE FFL]
+"\uFB04" => "ffl"
+
+# ï¬ [LATIN SMALL LIGATURE FI]
+"\uFB01" => "fi"
+
+# fl [LATIN SMALL LIGATURE FL]
+"\uFB02" => "fl"
+
+# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+"\u011C" => "G"
+
+# Äž [LATIN CAPITAL LETTER G WITH BREVE]
+"\u011E" => "G"
+
+# Ä  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
+"\u0120" => "G"
+
+# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
+"\u0122" => "G"
+
+# Æ“ [LATIN CAPITAL LETTER G WITH HOOK]
+"\u0193" => "G"
+
+# Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
+"\u01E4" => "G"
+
+# ǥ [LATIN SMALL LETTER G WITH STROKE]
+"\u01E5" => "G"
+
+# Ǧ [LATIN CAPITAL LETTER G WITH CARON]
+"\u01E6" => "G"
+
+# ǧ [LATIN SMALL LETTER G WITH CARON]
+"\u01E7" => "G"
+
+# Ç´ [LATIN CAPITAL LETTER G WITH ACUTE]
+"\u01F4" => "G"
+
+# ɢ [LATIN LETTER SMALL CAPITAL G]
+"\u0262" => "G"
+
+# Ê› [LATIN LETTER SMALL CAPITAL G WITH HOOK]
+"\u029B" => "G"
+
+# Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
+"\u1E20" => "G"
+
+# â’¼ [CIRCLED LATIN CAPITAL LETTER G]
+"\u24BC" => "G"
+
+# ê½ [LATIN CAPITAL LETTER INSULAR G]
+"\uA77D" => "G"
+
+# ê¾ [LATIN CAPITAL LETTER TURNED INSULAR G]
+"\uA77E" => "G"
+
+# ï¼§ [FULLWIDTH LATIN CAPITAL LETTER G]
+"\uFF27" => "G"
+
+# Ä [LATIN SMALL LETTER G WITH CIRCUMFLEX]
+"\u011D" => "g"
+
+# ÄŸ [LATIN SMALL LETTER G WITH BREVE]
+"\u011F" => "g"
+
+# Ä¡ [LATIN SMALL LETTER G WITH DOT ABOVE]
+"\u0121" => "g"
+
+# ģ [LATIN SMALL LETTER G WITH CEDILLA]
+"\u0123" => "g"
+
+# ǵ [LATIN SMALL LETTER G WITH ACUTE]
+"\u01F5" => "g"
+
+# É  [LATIN SMALL LETTER G WITH HOOK]
+"\u0260" => "g"
+
+# É¡ [LATIN SMALL LETTER SCRIPT G]
+"\u0261" => "g"
+
+# áµ· [LATIN SMALL LETTER TURNED G]
+"\u1D77" => "g"
+
+# áµ¹ [LATIN SMALL LETTER INSULAR G]
+"\u1D79" => "g"
+
+# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
+"\u1D83" => "g"
+
+# ḡ [LATIN SMALL LETTER G WITH MACRON]
+"\u1E21" => "g"
+
+# â“– [CIRCLED LATIN SMALL LETTER G]
+"\u24D6" => "g"
+
+# ê¿ [LATIN SMALL LETTER TURNED INSULAR G]
+"\uA77F" => "g"
+
+# g [FULLWIDTH LATIN SMALL LETTER G]
+"\uFF47" => "g"
+
+# â’¢ [PARENTHESIZED LATIN SMALL LETTER G]
+"\u24A2" => "(g)"
+
+# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+"\u0124" => "H"
+
+# Ħ [LATIN CAPITAL LETTER H WITH STROKE]
+"\u0126" => "H"
+
+# Èž [LATIN CAPITAL LETTER H WITH CARON]
+"\u021E" => "H"
+
+# ʜ [LATIN LETTER SMALL CAPITAL H]
+"\u029C" => "H"
+
+# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
+"\u1E22" => "H"
+
+# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
+"\u1E24" => "H"
+
+# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
+"\u1E26" => "H"
+
+# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
+"\u1E28" => "H"
+
+# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
+"\u1E2A" => "H"
+
+# â’½ [CIRCLED LATIN CAPITAL LETTER H]
+"\u24BD" => "H"
+
+# â±§ [LATIN CAPITAL LETTER H WITH DESCENDER]
+"\u2C67" => "H"
+
+# â±µ [LATIN CAPITAL LETTER HALF H]
+"\u2C75" => "H"
+
+# H [FULLWIDTH LATIN CAPITAL LETTER H]
+"\uFF28" => "H"
+
+# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
+"\u0125" => "h"
+
+# ħ [LATIN SMALL LETTER H WITH STROKE]
+"\u0127" => "h"
+
+# ÈŸ [LATIN SMALL LETTER H WITH CARON]
+"\u021F" => "h"
+
+# ɥ [LATIN SMALL LETTER TURNED H]
+"\u0265" => "h"
+
+# ɦ [LATIN SMALL LETTER H WITH HOOK]
+"\u0266" => "h"
+
+# Ê® [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
+"\u02AE" => "h"
+
+# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
+"\u02AF" => "h"
+
+# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
+"\u1E23" => "h"
+
+# ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
+"\u1E25" => "h"
+
+# ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
+"\u1E27" => "h"
+
+# ḩ [LATIN SMALL LETTER H WITH CEDILLA]
+"\u1E29" => "h"
+
+# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
+"\u1E2B" => "h"
+
+# ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
+"\u1E96" => "h"
+
+# â“— [CIRCLED LATIN SMALL LETTER H]
+"\u24D7" => "h"
+
+# ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
+"\u2C68" => "h"
+
+# â±¶ [LATIN SMALL LETTER HALF H]
+"\u2C76" => "h"
+
+# h [FULLWIDTH LATIN SMALL LETTER H]
+"\uFF48" => "h"
+
+# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
+"\u01F6" => "HV"
+
+# â’£ [PARENTHESIZED LATIN SMALL LETTER H]
+"\u24A3" => "(h)"
+
+# Æ• [LATIN SMALL LETTER HV]
+"\u0195" => "hv"
+
+# Ì [LATIN CAPITAL LETTER I WITH GRAVE]
+"\u00CC" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH ACUTE]
+"\u00CD" => "I"
+
+# ÃŽ [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+"\u00CE" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH DIAERESIS]
+"\u00CF" => "I"
+
+# Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
+"\u0128" => "I"
+
+# Ī [LATIN CAPITAL LETTER I WITH MACRON]
+"\u012A" => "I"
+
+# Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
+"\u012C" => "I"
+
+# Ä® [LATIN CAPITAL LETTER I WITH OGONEK]
+"\u012E" => "I"
+
+# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
+"\u0130" => "I"
+
+# Æ– [LATIN CAPITAL LETTER IOTA]
+"\u0196" => "I"
+
+# Æ— [LATIN CAPITAL LETTER I WITH STROKE]
+"\u0197" => "I"
+
+# Ç [LATIN CAPITAL LETTER I WITH CARON]
+"\u01CF" => "I"
+
+# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+"\u0208" => "I"
+
+# ÈŠ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+"\u020A" => "I"
+
+# ɪ [LATIN LETTER SMALL CAPITAL I]
+"\u026A" => "I"
+
+# áµ» [LATIN SMALL CAPITAL LETTER I WITH STROKE]
+"\u1D7B" => "I"
+
+# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
+"\u1E2C" => "I"
+
+# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2E" => "I"
+
+# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+"\u1EC8" => "I"
+
+# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
+"\u1ECA" => "I"
+
+# â’¾ [CIRCLED LATIN CAPITAL LETTER I]
+"\u24BE" => "I"
+
+# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
+"\uA7FE" => "I"
+
+# I [FULLWIDTH LATIN CAPITAL LETTER I]
+"\uFF29" => "I"
+
+# ì [LATIN SMALL LETTER I WITH GRAVE]
+"\u00EC" => "i"
+
+# í [LATIN SMALL LETTER I WITH ACUTE]
+"\u00ED" => "i"
+
+# î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
+"\u00EE" => "i"
+
+# ï [LATIN SMALL LETTER I WITH DIAERESIS]
+"\u00EF" => "i"
+
+# Ä© [LATIN SMALL LETTER I WITH TILDE]
+"\u0129" => "i"
+
+# Ä« [LATIN SMALL LETTER I WITH MACRON]
+"\u012B" => "i"
+
+# Ä­ [LATIN SMALL LETTER I WITH BREVE]
+"\u012D" => "i"
+
+# į [LATIN SMALL LETTER I WITH OGONEK]
+"\u012F" => "i"
+
+# ı [LATIN SMALL LETTER DOTLESS I]
+"\u0131" => "i"
+
+# Ç [LATIN SMALL LETTER I WITH CARON]
+"\u01D0" => "i"
+
+# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+"\u0209" => "i"
+
+# È‹ [LATIN SMALL LETTER I WITH INVERTED BREVE]
+"\u020B" => "i"
+
+# ɨ [LATIN SMALL LETTER I WITH STROKE]
+"\u0268" => "i"
+
+# á´‰ [LATIN SMALL LETTER TURNED I]
+"\u1D09" => "i"
+
+# áµ¢ [LATIN SUBSCRIPT SMALL LETTER I]
+"\u1D62" => "i"
+
+# áµ¼ [LATIN SMALL LETTER IOTA WITH STROKE]
+"\u1D7C" => "i"
+
+# á¶– [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
+"\u1D96" => "i"
+
+# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
+"\u1E2D" => "i"
+
+# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2F" => "i"
+
+# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
+"\u1EC9" => "i"
+
+# ị [LATIN SMALL LETTER I WITH DOT BELOW]
+"\u1ECB" => "i"
+
+# â± [SUPERSCRIPT LATIN SMALL LETTER I]
+"\u2071" => "i"
+
+# ⓘ [CIRCLED LATIN SMALL LETTER I]
+"\u24D8" => "i"
+
+# i [FULLWIDTH LATIN SMALL LETTER I]
+"\uFF49" => "i"
+
+# IJ [LATIN CAPITAL LIGATURE IJ]
+"\u0132" => "IJ"
+
+# â’¤ [PARENTHESIZED LATIN SMALL LETTER I]
+"\u24A4" => "(i)"
+
+# ij [LATIN SMALL LIGATURE IJ]
+"\u0133" => "ij"
+
+# Ä´ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+"\u0134" => "J"
+
+# Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
+"\u0248" => "J"
+
+# á´Š [LATIN LETTER SMALL CAPITAL J]
+"\u1D0A" => "J"
+
+# â’¿ [CIRCLED LATIN CAPITAL LETTER J]
+"\u24BF" => "J"
+
+# J [FULLWIDTH LATIN CAPITAL LETTER J]
+"\uFF2A" => "J"
+
+# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
+"\u0135" => "j"
+
+# ǰ [LATIN SMALL LETTER J WITH CARON]
+"\u01F0" => "j"
+
+# È· [LATIN SMALL LETTER DOTLESS J]
+"\u0237" => "j"
+
+# ɉ [LATIN SMALL LETTER J WITH STROKE]
+"\u0249" => "j"
+
+# ÉŸ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
+"\u025F" => "j"
+
+# Ê„ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
+"\u0284" => "j"
+
+# Ê [LATIN SMALL LETTER J WITH CROSSED-TAIL]
+"\u029D" => "j"
+
+# â“™ [CIRCLED LATIN SMALL LETTER J]
+"\u24D9" => "j"
+
+# â±¼ [LATIN SUBSCRIPT SMALL LETTER J]
+"\u2C7C" => "j"
+
+# j [FULLWIDTH LATIN SMALL LETTER J]
+"\uFF4A" => "j"
+
+# â’¥ [PARENTHESIZED LATIN SMALL LETTER J]
+"\u24A5" => "(j)"
+
+# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
+"\u0136" => "K"
+
+# Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
+"\u0198" => "K"
+
+# Ǩ [LATIN CAPITAL LETTER K WITH CARON]
+"\u01E8" => "K"
+
+# á´‹ [LATIN LETTER SMALL CAPITAL K]
+"\u1D0B" => "K"
+
+# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
+"\u1E30" => "K"
+
+# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
+"\u1E32" => "K"
+
+# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
+"\u1E34" => "K"
+
+# â“€ [CIRCLED LATIN CAPITAL LETTER K]
+"\u24C0" => "K"
+
+# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
+"\u2C69" => "K"
+
+# ê€ [LATIN CAPITAL LETTER K WITH STROKE]
+"\uA740" => "K"
+
+# ê‚ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
+"\uA742" => "K"
+
+# ê„ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA744" => "K"
+
+# K [FULLWIDTH LATIN CAPITAL LETTER K]
+"\uFF2B" => "K"
+
+# Ä· [LATIN SMALL LETTER K WITH CEDILLA]
+"\u0137" => "k"
+
+# Æ™ [LATIN SMALL LETTER K WITH HOOK]
+"\u0199" => "k"
+
+# Ç© [LATIN SMALL LETTER K WITH CARON]
+"\u01E9" => "k"
+
+# Êž [LATIN SMALL LETTER TURNED K]
+"\u029E" => "k"
+
+# á¶„ [LATIN SMALL LETTER K WITH PALATAL HOOK]
+"\u1D84" => "k"
+
+# ḱ [LATIN SMALL LETTER K WITH ACUTE]
+"\u1E31" => "k"
+
+# ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
+"\u1E33" => "k"
+
+# ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
+"\u1E35" => "k"
+
+# ⓚ [CIRCLED LATIN SMALL LETTER K]
+"\u24DA" => "k"
+
+# ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
+"\u2C6A" => "k"
+
+# ê [LATIN SMALL LETTER K WITH STROKE]
+"\uA741" => "k"
+
+# êƒ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
+"\uA743" => "k"
+
+# ê… [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA745" => "k"
+
+# k [FULLWIDTH LATIN SMALL LETTER K]
+"\uFF4B" => "k"
+
+# â’¦ [PARENTHESIZED LATIN SMALL LETTER K]
+"\u24A6" => "(k)"
+
+# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
+"\u0139" => "L"
+
+# Ä» [LATIN CAPITAL LETTER L WITH CEDILLA]
+"\u013B" => "L"
+
+# Ľ [LATIN CAPITAL LETTER L WITH CARON]
+"\u013D" => "L"
+
+# Ä¿ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
+"\u013F" => "L"
+
+# Å [LATIN CAPITAL LETTER L WITH STROKE]
+"\u0141" => "L"
+
+# Ƚ [LATIN CAPITAL LETTER L WITH BAR]
+"\u023D" => "L"
+
+# ÊŸ [LATIN LETTER SMALL CAPITAL L]
+"\u029F" => "L"
+
+# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
+"\u1D0C" => "L"
+
+# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
+"\u1E36" => "L"
+
+# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E38" => "L"
+
+# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
+"\u1E3A" => "L"
+
+# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3C" => "L"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER L]
+"\u24C1" => "L"
+
+# â±  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
+"\u2C60" => "L"
+
+# â±¢ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
+"\u2C62" => "L"
+
+# ê† [LATIN CAPITAL LETTER BROKEN L]
+"\uA746" => "L"
+
+# êˆ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
+"\uA748" => "L"
+
+# Ꞁ [LATIN CAPITAL LETTER TURNED L]
+"\uA780" => "L"
+
+# L [FULLWIDTH LATIN CAPITAL LETTER L]
+"\uFF2C" => "L"
+
+# ĺ [LATIN SMALL LETTER L WITH ACUTE]
+"\u013A" => "l"
+
+# ļ [LATIN SMALL LETTER L WITH CEDILLA]
+"\u013C" => "l"
+
+# ľ [LATIN SMALL LETTER L WITH CARON]
+"\u013E" => "l"
+
+# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
+"\u0140" => "l"
+
+# Å‚ [LATIN SMALL LETTER L WITH STROKE]
+"\u0142" => "l"
+
+# Æš [LATIN SMALL LETTER L WITH BAR]
+"\u019A" => "l"
+
+# È´ [LATIN SMALL LETTER L WITH CURL]
+"\u0234" => "l"
+
+# É« [LATIN SMALL LETTER L WITH MIDDLE TILDE]
+"\u026B" => "l"
+
+# ɬ [LATIN SMALL LETTER L WITH BELT]
+"\u026C" => "l"
+
+# É­ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
+"\u026D" => "l"
+
+# á¶… [LATIN SMALL LETTER L WITH PALATAL HOOK]
+"\u1D85" => "l"
+
+# ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
+"\u1E37" => "l"
+
+# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E39" => "l"
+
+# ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
+"\u1E3B" => "l"
+
+# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3D" => "l"
+
+# â“› [CIRCLED LATIN SMALL LETTER L]
+"\u24DB" => "l"
+
+# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
+"\u2C61" => "l"
+
+# ê‡ [LATIN SMALL LETTER BROKEN L]
+"\uA747" => "l"
+
+# ê‰ [LATIN SMALL LETTER L WITH HIGH STROKE]
+"\uA749" => "l"
+
+# êž [LATIN SMALL LETTER TURNED L]
+"\uA781" => "l"
+
+# l [FULLWIDTH LATIN SMALL LETTER L]
+"\uFF4C" => "l"
+
+# LJ [LATIN CAPITAL LETTER LJ]
+"\u01C7" => "LJ"
+
+# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
+"\u1EFA" => "LL"
+
+# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
+"\u01C8" => "Lj"
+
+# â’§ [PARENTHESIZED LATIN SMALL LETTER L]
+"\u24A7" => "(l)"
+
+# lj [LATIN SMALL LETTER LJ]
+"\u01C9" => "lj"
+
+# á»» [LATIN SMALL LETTER MIDDLE-WELSH LL]
+"\u1EFB" => "ll"
+
+# ʪ [LATIN SMALL LETTER LS DIGRAPH]
+"\u02AA" => "ls"
+
+# Ê« [LATIN SMALL LETTER LZ DIGRAPH]
+"\u02AB" => "lz"
+
+# Ɯ [LATIN CAPITAL LETTER TURNED M]
+"\u019C" => "M"
+
+# á´ [LATIN LETTER SMALL CAPITAL M]
+"\u1D0D" => "M"
+
+# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
+"\u1E3E" => "M"
+
+# á¹€ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
+"\u1E40" => "M"
+
+# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
+"\u1E42" => "M"
+
+# â“‚ [CIRCLED LATIN CAPITAL LETTER M]
+"\u24C2" => "M"
+
+# â±® [LATIN CAPITAL LETTER M WITH HOOK]
+"\u2C6E" => "M"
+
+# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
+"\uA7FD" => "M"
+
+# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
+"\uA7FF" => "M"
+
+# ï¼­ [FULLWIDTH LATIN CAPITAL LETTER M]
+"\uFF2D" => "M"
+
+# ɯ [LATIN SMALL LETTER TURNED M]
+"\u026F" => "m"
+
+# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
+"\u0270" => "m"
+
+# ɱ [LATIN SMALL LETTER M WITH HOOK]
+"\u0271" => "m"
+
+# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
+"\u1D6F" => "m"
+
+# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
+"\u1D86" => "m"
+
+# ḿ [LATIN SMALL LETTER M WITH ACUTE]
+"\u1E3F" => "m"
+
+# á¹ [LATIN SMALL LETTER M WITH DOT ABOVE]
+"\u1E41" => "m"
+
+# ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
+"\u1E43" => "m"
+
+# ⓜ [CIRCLED LATIN SMALL LETTER M]
+"\u24DC" => "m"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER M]
+"\uFF4D" => "m"
+
+# â’¨ [PARENTHESIZED LATIN SMALL LETTER M]
+"\u24A8" => "(m)"
+
+# Ñ [LATIN CAPITAL LETTER N WITH TILDE]
+"\u00D1" => "N"
+
+# Ń [LATIN CAPITAL LETTER N WITH ACUTE]
+"\u0143" => "N"
+
+# Å… [LATIN CAPITAL LETTER N WITH CEDILLA]
+"\u0145" => "N"
+
+# Ň [LATIN CAPITAL LETTER N WITH CARON]
+"\u0147" => "N"
+
+# ÅŠ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
+"\u014A" => "N"
+
+# Æ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
+"\u019D" => "N"
+
+# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
+"\u01F8" => "N"
+
+# È  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
+"\u0220" => "N"
+
+# É´ [LATIN LETTER SMALL CAPITAL N]
+"\u0274" => "N"
+
+# á´Ž [LATIN LETTER SMALL CAPITAL REVERSED N]
+"\u1D0E" => "N"
+
+# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
+"\u1E44" => "N"
+
+# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
+"\u1E46" => "N"
+
+# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
+"\u1E48" => "N"
+
+# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4A" => "N"
+
+# Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
+"\u24C3" => "N"
+
+# ï¼® [FULLWIDTH LATIN CAPITAL LETTER N]
+"\uFF2E" => "N"
+
+# ñ [LATIN SMALL LETTER N WITH TILDE]
+"\u00F1" => "n"
+
+# Å„ [LATIN SMALL LETTER N WITH ACUTE]
+"\u0144" => "n"
+
+# ņ [LATIN SMALL LETTER N WITH CEDILLA]
+"\u0146" => "n"
+
+# ň [LATIN SMALL LETTER N WITH CARON]
+"\u0148" => "n"
+
+# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
+"\u0149" => "n"
+
+# Å‹ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
+"\u014B" => "n"
+
+# Æž [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
+"\u019E" => "n"
+
+# ǹ [LATIN SMALL LETTER N WITH GRAVE]
+"\u01F9" => "n"
+
+# ȵ [LATIN SMALL LETTER N WITH CURL]
+"\u0235" => "n"
+
+# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
+"\u0272" => "n"
+
+# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
+"\u0273" => "n"
+
+# áµ° [LATIN SMALL LETTER N WITH MIDDLE TILDE]
+"\u1D70" => "n"
+
+# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
+"\u1D87" => "n"
+
+# á¹… [LATIN SMALL LETTER N WITH DOT ABOVE]
+"\u1E45" => "n"
+
+# ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
+"\u1E47" => "n"
+
+# ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
+"\u1E49" => "n"
+
+# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4B" => "n"
+
+# â¿ [SUPERSCRIPT LATIN SMALL LETTER N]
+"\u207F" => "n"
+
+# â“ [CIRCLED LATIN SMALL LETTER N]
+"\u24DD" => "n"
+
+# n [FULLWIDTH LATIN SMALL LETTER N]
+"\uFF4E" => "n"
+
+# ÇŠ [LATIN CAPITAL LETTER NJ]
+"\u01CA" => "NJ"
+
+# Ç‹ [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
+"\u01CB" => "Nj"
+
+# â’© [PARENTHESIZED LATIN SMALL LETTER N]
+"\u24A9" => "(n)"
+
+# nj [LATIN SMALL LETTER NJ]
+"\u01CC" => "nj"
+
+# Ã’ [LATIN CAPITAL LETTER O WITH GRAVE]
+"\u00D2" => "O"
+
+# Ó [LATIN CAPITAL LETTER O WITH ACUTE]
+"\u00D3" => "O"
+
+# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+"\u00D4" => "O"
+
+# Õ [LATIN CAPITAL LETTER O WITH TILDE]
+"\u00D5" => "O"
+
+# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
+"\u00D6" => "O"
+
+# Ø [LATIN CAPITAL LETTER O WITH STROKE]
+"\u00D8" => "O"
+
+# Ō [LATIN CAPITAL LETTER O WITH MACRON]
+"\u014C" => "O"
+
+# ÅŽ [LATIN CAPITAL LETTER O WITH BREVE]
+"\u014E" => "O"
+
+# Å [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+"\u0150" => "O"
+
+# Ɔ [LATIN CAPITAL LETTER OPEN O]
+"\u0186" => "O"
+
+# ÆŸ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
+"\u019F" => "O"
+
+# Æ  [LATIN CAPITAL LETTER O WITH HORN]
+"\u01A0" => "O"
+
+# Ç‘ [LATIN CAPITAL LETTER O WITH CARON]
+"\u01D1" => "O"
+
+# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
+"\u01EA" => "O"
+
+# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+"\u01EC" => "O"
+
+# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+"\u01FE" => "O"
+
+# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+"\u020C" => "O"
+
+# ÈŽ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+"\u020E" => "O"
+
+# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+"\u022A" => "O"
+
+# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+"\u022C" => "O"
+
+# È® [LATIN CAPITAL LETTER O WITH DOT ABOVE]
+"\u022E" => "O"
+
+# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0230" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL O]
+"\u1D0F" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL OPEN O]
+"\u1D10" => "O"
+
+# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+"\u1E4C" => "O"
+
+# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4E" => "O"
+
+# á¹ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+"\u1E50" => "O"
+
+# á¹’ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+"\u1E52" => "O"
+
+# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
+"\u1ECC" => "O"
+
+# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+"\u1ECE" => "O"
+
+# á» [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED0" => "O"
+
+# á»’ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED2" => "O"
+
+# á»” [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED4" => "O"
+
+# á»– [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED6" => "O"
+
+# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED8" => "O"
+
+# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+"\u1EDA" => "O"
+
+# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+"\u1EDC" => "O"
+
+# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDE" => "O"
+
+# á»  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+"\u1EE0" => "O"
+
+# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE2" => "O"
+
+# â“„ [CIRCLED LATIN CAPITAL LETTER O]
+"\u24C4" => "O"
+
+# êŠ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74A" => "O"
+
+# êŒ [LATIN CAPITAL LETTER O WITH LOOP]
+"\uA74C" => "O"
+
+# O [FULLWIDTH LATIN CAPITAL LETTER O]
+"\uFF2F" => "O"
+
+# ò [LATIN SMALL LETTER O WITH GRAVE]
+"\u00F2" => "o"
+
+# ó [LATIN SMALL LETTER O WITH ACUTE]
+"\u00F3" => "o"
+
+# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
+"\u00F4" => "o"
+
+# õ [LATIN SMALL LETTER O WITH TILDE]
+"\u00F5" => "o"
+
+# ö [LATIN SMALL LETTER O WITH DIAERESIS]
+"\u00F6" => "o"
+
+# ø [LATIN SMALL LETTER O WITH STROKE]
+"\u00F8" => "o"
+
+# Å [LATIN SMALL LETTER O WITH MACRON]
+"\u014D" => "o"
+
+# Å [LATIN SMALL LETTER O WITH BREVE]
+"\u014F" => "o"
+
+# Å‘ [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+"\u0151" => "o"
+
+# Æ¡ [LATIN SMALL LETTER O WITH HORN]
+"\u01A1" => "o"
+
+# Ç’ [LATIN SMALL LETTER O WITH CARON]
+"\u01D2" => "o"
+
+# Ç« [LATIN SMALL LETTER O WITH OGONEK]
+"\u01EB" => "o"
+
+# Ç­ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+"\u01ED" => "o"
+
+# Ç¿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+"\u01FF" => "o"
+
+# È [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+"\u020D" => "o"
+
+# È [LATIN SMALL LETTER O WITH INVERTED BREVE]
+"\u020F" => "o"
+
+# È« [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+"\u022B" => "o"
+
+# È­ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
+"\u022D" => "o"
+
+# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
+"\u022F" => "o"
+
+# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0231" => "o"
+
+# É” [LATIN SMALL LETTER OPEN O]
+"\u0254" => "o"
+
+# ɵ [LATIN SMALL LETTER BARRED O]
+"\u0275" => "o"
+
+# á´– [LATIN SMALL LETTER TOP HALF O]
+"\u1D16" => "o"
+
+# á´— [LATIN SMALL LETTER BOTTOM HALF O]
+"\u1D17" => "o"
+
+# á¶— [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
+"\u1D97" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+"\u1E4D" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4F" => "o"
+
+# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+"\u1E51" => "o"
+
+# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+"\u1E53" => "o"
+
+# á» [LATIN SMALL LETTER O WITH DOT BELOW]
+"\u1ECD" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HOOK ABOVE]
+"\u1ECF" => "o"
+
+# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED1" => "o"
+
+# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED3" => "o"
+
+# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED5" => "o"
+
+# á»— [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED7" => "o"
+
+# á»™ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED9" => "o"
+
+# á»› [LATIN SMALL LETTER O WITH HORN AND ACUTE]
+"\u1EDB" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HORN AND GRAVE]
+"\u1EDD" => "o"
+
+# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDF" => "o"
+
+# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
+"\u1EE1" => "o"
+
+# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE3" => "o"
+
+# â‚’ [LATIN SUBSCRIPT SMALL LETTER O]
+"\u2092" => "o"
+
+# ⓞ [CIRCLED LATIN SMALL LETTER O]
+"\u24DE" => "o"
+
+# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
+"\u2C7A" => "o"
+
+# ê‹ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74B" => "o"
+
+# ê [LATIN SMALL LETTER O WITH LOOP]
+"\uA74D" => "o"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER O]
+"\uFF4F" => "o"
+
+# Å’ [LATIN CAPITAL LIGATURE OE]
+"\u0152" => "OE"
+
+# ɶ [LATIN LETTER SMALL CAPITAL OE]
+"\u0276" => "OE"
+
+# êŽ [LATIN CAPITAL LETTER OO]
+"\uA74E" => "OO"
+
+# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
+"\u0222" => "OU"
+
+# á´• [LATIN LETTER SMALL CAPITAL OU]
+"\u1D15" => "OU"
+
+# â’ª [PARENTHESIZED LATIN SMALL LETTER O]
+"\u24AA" => "(o)"
+
+# Å“ [LATIN SMALL LIGATURE OE]
+"\u0153" => "oe"
+
+# á´” [LATIN SMALL LETTER TURNED OE]
+"\u1D14" => "oe"
+
+# ê [LATIN SMALL LETTER OO]
+"\uA74F" => "oo"
+
+# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
+"\u0223" => "ou"
+
+# Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
+"\u01A4" => "P"
+
+# á´˜ [LATIN LETTER SMALL CAPITAL P]
+"\u1D18" => "P"
+
+# á¹” [LATIN CAPITAL LETTER P WITH ACUTE]
+"\u1E54" => "P"
+
+# á¹– [LATIN CAPITAL LETTER P WITH DOT ABOVE]
+"\u1E56" => "P"
+
+# â“… [CIRCLED LATIN CAPITAL LETTER P]
+"\u24C5" => "P"
+
+# â±£ [LATIN CAPITAL LETTER P WITH STROKE]
+"\u2C63" => "P"
+
+# ê [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA750" => "P"
+
+# ê’ [LATIN CAPITAL LETTER P WITH FLOURISH]
+"\uA752" => "P"
+
+# ê” [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
+"\uA754" => "P"
+
+# ï¼° [FULLWIDTH LATIN CAPITAL LETTER P]
+"\uFF30" => "P"
+
+# ƥ [LATIN SMALL LETTER P WITH HOOK]
+"\u01A5" => "p"
+
+# áµ± [LATIN SMALL LETTER P WITH MIDDLE TILDE]
+"\u1D71" => "p"
+
+# áµ½ [LATIN SMALL LETTER P WITH STROKE]
+"\u1D7D" => "p"
+
+# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
+"\u1D88" => "p"
+
+# ṕ [LATIN SMALL LETTER P WITH ACUTE]
+"\u1E55" => "p"
+
+# á¹— [LATIN SMALL LETTER P WITH DOT ABOVE]
+"\u1E57" => "p"
+
+# ⓟ [CIRCLED LATIN SMALL LETTER P]
+"\u24DF" => "p"
+
+# ê‘ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA751" => "p"
+
+# ê“ [LATIN SMALL LETTER P WITH FLOURISH]
+"\uA753" => "p"
+
+# ê• [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
+"\uA755" => "p"
+
+# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
+"\uA7FC" => "p"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER P]
+"\uFF50" => "p"
+
+# â’« [PARENTHESIZED LATIN SMALL LETTER P]
+"\u24AB" => "(p)"
+
+# ÉŠ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
+"\u024A" => "Q"
+
+# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
+"\u24C6" => "Q"
+
+# ê– [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA756" => "Q"
+
+# ê˜ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
+"\uA758" => "Q"
+
+# ï¼± [FULLWIDTH LATIN CAPITAL LETTER Q]
+"\uFF31" => "Q"
+
+# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
+"\u0138" => "q"
+
+# É‹ [LATIN SMALL LETTER Q WITH HOOK TAIL]
+"\u024B" => "q"
+
+# Ê  [LATIN SMALL LETTER Q WITH HOOK]
+"\u02A0" => "q"
+
+# â“  [CIRCLED LATIN SMALL LETTER Q]
+"\u24E0" => "q"
+
+# ê— [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA757" => "q"
+
+# ê™ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
+"\uA759" => "q"
+
+# q [FULLWIDTH LATIN SMALL LETTER Q]
+"\uFF51" => "q"
+
+# â’¬ [PARENTHESIZED LATIN SMALL LETTER Q]
+"\u24AC" => "(q)"
+
+# ȹ [LATIN SMALL LETTER QP DIGRAPH]
+"\u0239" => "qp"
+
+# Å” [LATIN CAPITAL LETTER R WITH ACUTE]
+"\u0154" => "R"
+
+# Å– [LATIN CAPITAL LETTER R WITH CEDILLA]
+"\u0156" => "R"
+
+# Ř [LATIN CAPITAL LETTER R WITH CARON]
+"\u0158" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+"\u0210" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+"\u0212" => "R"
+
+# Ɍ [LATIN CAPITAL LETTER R WITH STROKE]
+"\u024C" => "R"
+
+# ʀ [LATIN LETTER SMALL CAPITAL R]
+"\u0280" => "R"
+
+# Ê [LATIN LETTER SMALL CAPITAL INVERTED R]
+"\u0281" => "R"
+
+# á´™ [LATIN LETTER SMALL CAPITAL REVERSED R]
+"\u1D19" => "R"
+
+# á´š [LATIN LETTER SMALL CAPITAL TURNED R]
+"\u1D1A" => "R"
+
+# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
+"\u1E58" => "R"
+
+# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
+"\u1E5A" => "R"
+
+# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5C" => "R"
+
+# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
+"\u1E5E" => "R"
+
+# Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
+"\u24C7" => "R"
+
+# Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
+"\u2C64" => "R"
+
+# êš [LATIN CAPITAL LETTER R ROTUNDA]
+"\uA75A" => "R"
+
+# êž‚ [LATIN CAPITAL LETTER INSULAR R]
+"\uA782" => "R"
+
+# ï¼² [FULLWIDTH LATIN CAPITAL LETTER R]
+"\uFF32" => "R"
+
+# Å• [LATIN SMALL LETTER R WITH ACUTE]
+"\u0155" => "r"
+
+# Å— [LATIN SMALL LETTER R WITH CEDILLA]
+"\u0157" => "r"
+
+# Å™ [LATIN SMALL LETTER R WITH CARON]
+"\u0159" => "r"
+
+# È‘ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+"\u0211" => "r"
+
+# È“ [LATIN SMALL LETTER R WITH INVERTED BREVE]
+"\u0213" => "r"
+
+# É [LATIN SMALL LETTER R WITH STROKE]
+"\u024D" => "r"
+
+# ɼ [LATIN SMALL LETTER R WITH LONG LEG]
+"\u027C" => "r"
+
+# ɽ [LATIN SMALL LETTER R WITH TAIL]
+"\u027D" => "r"
+
+# ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
+"\u027E" => "r"
+
+# É¿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
+"\u027F" => "r"
+
+# áµ£ [LATIN SUBSCRIPT SMALL LETTER R]
+"\u1D63" => "r"
+
+# áµ² [LATIN SMALL LETTER R WITH MIDDLE TILDE]
+"\u1D72" => "r"
+
+# áµ³ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
+"\u1D73" => "r"
+
+# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
+"\u1D89" => "r"
+
+# á¹™ [LATIN SMALL LETTER R WITH DOT ABOVE]
+"\u1E59" => "r"
+
+# á¹› [LATIN SMALL LETTER R WITH DOT BELOW]
+"\u1E5B" => "r"
+
+# á¹ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5D" => "r"
+
+# ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
+"\u1E5F" => "r"
+
+# â“¡ [CIRCLED LATIN SMALL LETTER R]
+"\u24E1" => "r"
+
+# ê› [LATIN SMALL LETTER R ROTUNDA]
+"\uA75B" => "r"
+
+# ꞃ [LATIN SMALL LETTER INSULAR R]
+"\uA783" => "r"
+
+# ï½’ [FULLWIDTH LATIN SMALL LETTER R]
+"\uFF52" => "r"
+
+# â’­ [PARENTHESIZED LATIN SMALL LETTER R]
+"\u24AD" => "(r)"
+
+# Åš [LATIN CAPITAL LETTER S WITH ACUTE]
+"\u015A" => "S"
+
+# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+"\u015C" => "S"
+
+# Åž [LATIN CAPITAL LETTER S WITH CEDILLA]
+"\u015E" => "S"
+
+# Å  [LATIN CAPITAL LETTER S WITH CARON]
+"\u0160" => "S"
+
+# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
+"\u0218" => "S"
+
+# á¹  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
+"\u1E60" => "S"
+
+# á¹¢ [LATIN CAPITAL LETTER S WITH DOT BELOW]
+"\u1E62" => "S"
+
+# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E64" => "S"
+
+# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E66" => "S"
+
+# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E68" => "S"
+
+# Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
+"\u24C8" => "S"
+
+# ꜱ [LATIN LETTER SMALL CAPITAL S]
+"\uA731" => "S"
+
+# êž… [LATIN SMALL LETTER INSULAR S]
+"\uA785" => "S"
+
+# ï¼³ [FULLWIDTH LATIN CAPITAL LETTER S]
+"\uFF33" => "S"
+
+# Å› [LATIN SMALL LETTER S WITH ACUTE]
+"\u015B" => "s"
+
+# Å [LATIN SMALL LETTER S WITH CIRCUMFLEX]
+"\u015D" => "s"
+
+# ÅŸ [LATIN SMALL LETTER S WITH CEDILLA]
+"\u015F" => "s"
+
+# Å¡ [LATIN SMALL LETTER S WITH CARON]
+"\u0161" => "s"
+
+# Å¿ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
+"\u017F" => "s"
+
+# È™ [LATIN SMALL LETTER S WITH COMMA BELOW]
+"\u0219" => "s"
+
+# È¿ [LATIN SMALL LETTER S WITH SWASH TAIL]
+"\u023F" => "s"
+
+# Ê‚ [LATIN SMALL LETTER S WITH HOOK]
+"\u0282" => "s"
+
+# áµ´ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
+"\u1D74" => "s"
+
+# á¶Š [LATIN SMALL LETTER S WITH PALATAL HOOK]
+"\u1D8A" => "s"
+
+# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
+"\u1E61" => "s"
+
+# á¹£ [LATIN SMALL LETTER S WITH DOT BELOW]
+"\u1E63" => "s"
+
+# á¹¥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E65" => "s"
+
+# á¹§ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E67" => "s"
+
+# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E69" => "s"
+
+# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
+"\u1E9C" => "s"
+
+# Ạ[LATIN SMALL LETTER LONG S WITH HIGH STROKE]
+"\u1E9D" => "s"
+
+# â“¢ [CIRCLED LATIN SMALL LETTER S]
+"\u24E2" => "s"
+
+# êž„ [LATIN CAPITAL LETTER INSULAR S]
+"\uA784" => "s"
+
+# s [FULLWIDTH LATIN SMALL LETTER S]
+"\uFF53" => "s"
+
+# ẞ [LATIN CAPITAL LETTER SHARP S]
+"\u1E9E" => "SS"
+
+# â’® [PARENTHESIZED LATIN SMALL LETTER S]
+"\u24AE" => "(s)"
+
+# ß [LATIN SMALL LETTER SHARP S]
+"\u00DF" => "ss"
+
+# st [LATIN SMALL LIGATURE ST]
+"\uFB06" => "st"
+
+# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA]
+"\u0162" => "T"
+
+# Ť [LATIN CAPITAL LETTER T WITH CARON]
+"\u0164" => "T"
+
+# Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
+"\u0166" => "T"
+
+# Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
+"\u01AC" => "T"
+
+# Æ® [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
+"\u01AE" => "T"
+
+# Èš [LATIN CAPITAL LETTER T WITH COMMA BELOW]
+"\u021A" => "T"
+
+# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
+"\u023E" => "T"
+
+# á´› [LATIN LETTER SMALL CAPITAL T]
+"\u1D1B" => "T"
+
+# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
+"\u1E6A" => "T"
+
+# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
+"\u1E6C" => "T"
+
+# á¹® [LATIN CAPITAL LETTER T WITH LINE BELOW]
+"\u1E6E" => "T"
+
+# á¹° [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E70" => "T"
+
+# Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
+"\u24C9" => "T"
+
+# Ꞇ [LATIN CAPITAL LETTER INSULAR T]
+"\uA786" => "T"
+
+# ï¼´ [FULLWIDTH LATIN CAPITAL LETTER T]
+"\uFF34" => "T"
+
+# ţ [LATIN SMALL LETTER T WITH CEDILLA]
+"\u0163" => "t"
+
+# ť [LATIN SMALL LETTER T WITH CARON]
+"\u0165" => "t"
+
+# ŧ [LATIN SMALL LETTER T WITH STROKE]
+"\u0167" => "t"
+
+# Æ« [LATIN SMALL LETTER T WITH PALATAL HOOK]
+"\u01AB" => "t"
+
+# Æ­ [LATIN SMALL LETTER T WITH HOOK]
+"\u01AD" => "t"
+
+# È› [LATIN SMALL LETTER T WITH COMMA BELOW]
+"\u021B" => "t"
+
+# ȶ [LATIN SMALL LETTER T WITH CURL]
+"\u0236" => "t"
+
+# ʇ [LATIN SMALL LETTER TURNED T]
+"\u0287" => "t"
+
+# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
+"\u0288" => "t"
+
+# áµµ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
+"\u1D75" => "t"
+
+# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
+"\u1E6B" => "t"
+
+# á¹­ [LATIN SMALL LETTER T WITH DOT BELOW]
+"\u1E6D" => "t"
+
+# ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
+"\u1E6F" => "t"
+
+# á¹± [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E71" => "t"
+
+# ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
+"\u1E97" => "t"
+
+# â“£ [CIRCLED LATIN SMALL LETTER T]
+"\u24E3" => "t"
+
+# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
+"\u2C66" => "t"
+
+# ï½” [FULLWIDTH LATIN SMALL LETTER T]
+"\uFF54" => "t"
+
+# Þ [LATIN CAPITAL LETTER THORN]
+"\u00DE" => "TH"
+
+# ê¦ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA766" => "TH"
+
+# Ꜩ [LATIN CAPITAL LETTER TZ]
+"\uA728" => "TZ"
+
+# â’¯ [PARENTHESIZED LATIN SMALL LETTER T]
+"\u24AF" => "(t)"
+
+# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
+"\u02A8" => "tc"
+
+# þ [LATIN SMALL LETTER THORN]
+"\u00FE" => "th"
+
+# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
+"\u1D7A" => "th"
+
+# ê§ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA767" => "th"
+
+# ʦ [LATIN SMALL LETTER TS DIGRAPH]
+"\u02A6" => "ts"
+
+# ꜩ [LATIN SMALL LETTER TZ]
+"\uA729" => "tz"
+
+# Ù [LATIN CAPITAL LETTER U WITH GRAVE]
+"\u00D9" => "U"
+
+# Ú [LATIN CAPITAL LETTER U WITH ACUTE]
+"\u00DA" => "U"
+
+# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+"\u00DB" => "U"
+
+# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]
+"\u00DC" => "U"
+
+# Ũ [LATIN CAPITAL LETTER U WITH TILDE]
+"\u0168" => "U"
+
+# Ū [LATIN CAPITAL LETTER U WITH MACRON]
+"\u016A" => "U"
+
+# Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
+"\u016C" => "U"
+
+# Å® [LATIN CAPITAL LETTER U WITH RING ABOVE]
+"\u016E" => "U"
+
+# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+"\u0170" => "U"
+
+# Ų [LATIN CAPITAL LETTER U WITH OGONEK]
+"\u0172" => "U"
+
+# Ư [LATIN CAPITAL LETTER U WITH HORN]
+"\u01AF" => "U"
+
+# Ç“ [LATIN CAPITAL LETTER U WITH CARON]
+"\u01D3" => "U"
+
+# Ç• [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D5" => "U"
+
+# Ç— [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D7" => "U"
+
+# Ç™ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+"\u01D9" => "U"
+
+# Ç› [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DB" => "U"
+
+# È” [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+"\u0214" => "U"
+
+# È– [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+"\u0216" => "U"
+
+# É„ [LATIN CAPITAL LETTER U BAR]
+"\u0244" => "U"
+
+# ᴜ [LATIN LETTER SMALL CAPITAL U]
+"\u1D1C" => "U"
+
+# áµ¾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
+"\u1D7E" => "U"
+
+# á¹² [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+"\u1E72" => "U"
+
+# á¹´ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
+"\u1E74" => "U"
+
+# á¹¶ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E76" => "U"
+
+# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+"\u1E78" => "U"
+
+# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7A" => "U"
+
+# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
+"\u1EE4" => "U"
+
+# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+"\u1EE6" => "U"
+
+# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+"\u1EE8" => "U"
+
+# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+"\u1EEA" => "U"
+
+# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EEC" => "U"
+
+# á»® [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+"\u1EEE" => "U"
+
+# á»° [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF0" => "U"
+
+# Ⓤ [CIRCLED LATIN CAPITAL LETTER U]
+"\u24CA" => "U"
+
+# ï¼µ [FULLWIDTH LATIN CAPITAL LETTER U]
+"\uFF35" => "U"
+
+# ù [LATIN SMALL LETTER U WITH GRAVE]
+"\u00F9" => "u"
+
+# ú [LATIN SMALL LETTER U WITH ACUTE]
+"\u00FA" => "u"
+
+# û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
+"\u00FB" => "u"
+
+# ü [LATIN SMALL LETTER U WITH DIAERESIS]
+"\u00FC" => "u"
+
+# Å© [LATIN SMALL LETTER U WITH TILDE]
+"\u0169" => "u"
+
+# Å« [LATIN SMALL LETTER U WITH MACRON]
+"\u016B" => "u"
+
+# Å­ [LATIN SMALL LETTER U WITH BREVE]
+"\u016D" => "u"
+
+# ů [LATIN SMALL LETTER U WITH RING ABOVE]
+"\u016F" => "u"
+
+# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+"\u0171" => "u"
+
+# ų [LATIN SMALL LETTER U WITH OGONEK]
+"\u0173" => "u"
+
+# ư [LATIN SMALL LETTER U WITH HORN]
+"\u01B0" => "u"
+
+# Ç” [LATIN SMALL LETTER U WITH CARON]
+"\u01D4" => "u"
+
+# Ç– [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D6" => "u"
+
+# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D8" => "u"
+
+# Çš [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+"\u01DA" => "u"
+
+# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DC" => "u"
+
+# È• [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+"\u0215" => "u"
+
+# È— [LATIN SMALL LETTER U WITH INVERTED BREVE]
+"\u0217" => "u"
+
+# ʉ [LATIN SMALL LETTER U BAR]
+"\u0289" => "u"
+
+# ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
+"\u1D64" => "u"
+
+# á¶™ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
+"\u1D99" => "u"
+
+# á¹³ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+"\u1E73" => "u"
+
+# á¹µ [LATIN SMALL LETTER U WITH TILDE BELOW]
+"\u1E75" => "u"
+
+# á¹· [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E77" => "u"
+
+# á¹¹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+"\u1E79" => "u"
+
+# á¹» [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7B" => "u"
+
+# ụ [LATIN SMALL LETTER U WITH DOT BELOW]
+"\u1EE5" => "u"
+
+# á»§ [LATIN SMALL LETTER U WITH HOOK ABOVE]
+"\u1EE7" => "u"
+
+# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
+"\u1EE9" => "u"
+
+# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
+"\u1EEB" => "u"
+
+# á»­ [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EED" => "u"
+
+# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
+"\u1EEF" => "u"
+
+# á»± [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF1" => "u"
+
+# ⓤ [CIRCLED LATIN SMALL LETTER U]
+"\u24E4" => "u"
+
+# u [FULLWIDTH LATIN SMALL LETTER U]
+"\uFF55" => "u"
+
+# â’° [PARENTHESIZED LATIN SMALL LETTER U]
+"\u24B0" => "(u)"
+
+# ᵫ [LATIN SMALL LETTER UE]
+"\u1D6B" => "ue"
+
+# Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
+"\u01B2" => "V"
+
+# É… [LATIN CAPITAL LETTER TURNED V]
+"\u0245" => "V"
+
+# á´  [LATIN LETTER SMALL CAPITAL V]
+"\u1D20" => "V"
+
+# á¹¼ [LATIN CAPITAL LETTER V WITH TILDE]
+"\u1E7C" => "V"
+
+# á¹¾ [LATIN CAPITAL LETTER V WITH DOT BELOW]
+"\u1E7E" => "V"
+
+# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
+"\u1EFC" => "V"
+
+# â“‹ [CIRCLED LATIN CAPITAL LETTER V]
+"\u24CB" => "V"
+
+# êž [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
+"\uA75E" => "V"
+
+# ê¨ [LATIN CAPITAL LETTER VEND]
+"\uA768" => "V"
+
+# ï¼¶ [FULLWIDTH LATIN CAPITAL LETTER V]
+"\uFF36" => "V"
+
+# Ê‹ [LATIN SMALL LETTER V WITH HOOK]
+"\u028B" => "v"
+
+# ʌ [LATIN SMALL LETTER TURNED V]
+"\u028C" => "v"
+
+# áµ¥ [LATIN SUBSCRIPT SMALL LETTER V]
+"\u1D65" => "v"
+
+# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
+"\u1D8C" => "v"
+
+# á¹½ [LATIN SMALL LETTER V WITH TILDE]
+"\u1E7D" => "v"
+
+# ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
+"\u1E7F" => "v"
+
+# â“¥ [CIRCLED LATIN SMALL LETTER V]
+"\u24E5" => "v"
+
+# â±± [LATIN SMALL LETTER V WITH RIGHT HOOK]
+"\u2C71" => "v"
+
+# â±´ [LATIN SMALL LETTER V WITH CURL]
+"\u2C74" => "v"
+
+# êŸ [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
+"\uA75F" => "v"
+
+# ï½– [FULLWIDTH LATIN SMALL LETTER V]
+"\uFF56" => "v"
+
+# ê  [LATIN CAPITAL LETTER VY]
+"\uA760" => "VY"
+
+# â’± [PARENTHESIZED LATIN SMALL LETTER V]
+"\u24B1" => "(v)"
+
+# ê¡ [LATIN SMALL LETTER VY]
+"\uA761" => "vy"
+
+# Å´ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+"\u0174" => "W"
+
+# Ç· http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
+"\u01F7" => "W"
+
+# á´¡ [LATIN LETTER SMALL CAPITAL W]
+"\u1D21" => "W"
+
+# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
+"\u1E80" => "W"
+
+# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
+"\u1E82" => "W"
+
+# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
+"\u1E84" => "W"
+
+# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
+"\u1E86" => "W"
+
+# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
+"\u1E88" => "W"
+
+# Ⓦ [CIRCLED LATIN CAPITAL LETTER W]
+"\u24CC" => "W"
+
+# â±² [LATIN CAPITAL LETTER W WITH HOOK]
+"\u2C72" => "W"
+
+# ï¼· [FULLWIDTH LATIN CAPITAL LETTER W]
+"\uFF37" => "W"
+
+# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
+"\u0175" => "w"
+
+# Æ¿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
+"\u01BF" => "w"
+
+# Ê [LATIN SMALL LETTER TURNED W]
+"\u028D" => "w"
+
+# Ạ[LATIN SMALL LETTER W WITH GRAVE]
+"\u1E81" => "w"
+
+# ẃ [LATIN SMALL LETTER W WITH ACUTE]
+"\u1E83" => "w"
+
+# ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
+"\u1E85" => "w"
+
+# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
+"\u1E87" => "w"
+
+# ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
+"\u1E89" => "w"
+
+# ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
+"\u1E98" => "w"
+
+# ⓦ [CIRCLED LATIN SMALL LETTER W]
+"\u24E6" => "w"
+
+# â±³ [LATIN SMALL LETTER W WITH HOOK]
+"\u2C73" => "w"
+
+# ï½— [FULLWIDTH LATIN SMALL LETTER W]
+"\uFF57" => "w"
+
+# â’² [PARENTHESIZED LATIN SMALL LETTER W]
+"\u24B2" => "(w)"
+
+# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
+"\u1E8A" => "X"
+
+# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
+"\u1E8C" => "X"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER X]
+"\u24CD" => "X"
+
+# X [FULLWIDTH LATIN CAPITAL LETTER X]
+"\uFF38" => "X"
+
+# á¶ [LATIN SMALL LETTER X WITH PALATAL HOOK]
+"\u1D8D" => "x"
+
+# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
+"\u1E8B" => "x"
+
+# Ạ[LATIN SMALL LETTER X WITH DIAERESIS]
+"\u1E8D" => "x"
+
+# â‚“ [LATIN SUBSCRIPT SMALL LETTER X]
+"\u2093" => "x"
+
+# â“§ [CIRCLED LATIN SMALL LETTER X]
+"\u24E7" => "x"
+
+# x [FULLWIDTH LATIN SMALL LETTER X]
+"\uFF58" => "x"
+
+# â’³ [PARENTHESIZED LATIN SMALL LETTER X]
+"\u24B3" => "(x)"
+
+# Ã [LATIN CAPITAL LETTER Y WITH ACUTE]
+"\u00DD" => "Y"
+
+# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+"\u0176" => "Y"
+
+# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
+"\u0178" => "Y"
+
+# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
+"\u01B3" => "Y"
+
+# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
+"\u0232" => "Y"
+
+# ÉŽ [LATIN CAPITAL LETTER Y WITH STROKE]
+"\u024E" => "Y"
+
+# Ê [LATIN LETTER SMALL CAPITAL Y]
+"\u028F" => "Y"
+
+# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+"\u1E8E" => "Y"
+
+# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
+"\u1EF2" => "Y"
+
+# á»´ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
+"\u1EF4" => "Y"
+
+# á»¶ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+"\u1EF6" => "Y"
+
+# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
+"\u1EF8" => "Y"
+
+# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
+"\u1EFE" => "Y"
+
+# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y]
+"\u24CE" => "Y"
+
+# ï¼¹ [FULLWIDTH LATIN CAPITAL LETTER Y]
+"\uFF39" => "Y"
+
+# ý [LATIN SMALL LETTER Y WITH ACUTE]
+"\u00FD" => "y"
+
+# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
+"\u00FF" => "y"
+
+# Å· [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+"\u0177" => "y"
+
+# Æ´ [LATIN SMALL LETTER Y WITH HOOK]
+"\u01B4" => "y"
+
+# ȳ [LATIN SMALL LETTER Y WITH MACRON]
+"\u0233" => "y"
+
+# É [LATIN SMALL LETTER Y WITH STROKE]
+"\u024F" => "y"
+
+# ÊŽ [LATIN SMALL LETTER TURNED Y]
+"\u028E" => "y"
+
+# Ạ[LATIN SMALL LETTER Y WITH DOT ABOVE]
+"\u1E8F" => "y"
+
+# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
+"\u1E99" => "y"
+
+# ỳ [LATIN SMALL LETTER Y WITH GRAVE]
+"\u1EF3" => "y"
+
+# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
+"\u1EF5" => "y"
+
+# á»· [LATIN SMALL LETTER Y WITH HOOK ABOVE]
+"\u1EF7" => "y"
+
+# ỹ [LATIN SMALL LETTER Y WITH TILDE]
+"\u1EF9" => "y"
+
+# ỿ [LATIN SMALL LETTER Y WITH LOOP]
+"\u1EFF" => "y"
+
+# ⓨ [CIRCLED LATIN SMALL LETTER Y]
+"\u24E8" => "y"
+
+# ï½™ [FULLWIDTH LATIN SMALL LETTER Y]
+"\uFF59" => "y"
+
+# â’´ [PARENTHESIZED LATIN SMALL LETTER Y]
+"\u24B4" => "(y)"
+
+# Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
+"\u0179" => "Z"
+
+# Å» [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+"\u017B" => "Z"
+
+# Ž [LATIN CAPITAL LETTER Z WITH CARON]
+"\u017D" => "Z"
+
+# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
+"\u01B5" => "Z"
+
+# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
+"\u021C" => "Z"
+
+# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
+"\u0224" => "Z"
+
+# á´¢ [LATIN LETTER SMALL CAPITAL Z]
+"\u1D22" => "Z"
+
+# Ạ[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+"\u1E90" => "Z"
+
+# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
+"\u1E92" => "Z"
+
+# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW]
+"\u1E94" => "Z"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER Z]
+"\u24CF" => "Z"
+
+# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
+"\u2C6B" => "Z"
+
+# ê¢ [LATIN CAPITAL LETTER VISIGOTHIC Z]
+"\uA762" => "Z"
+
+# Z [FULLWIDTH LATIN CAPITAL LETTER Z]
+"\uFF3A" => "Z"
+
+# ź [LATIN SMALL LETTER Z WITH ACUTE]
+"\u017A" => "z"
+
+# ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
+"\u017C" => "z"
+
+# ž [LATIN SMALL LETTER Z WITH CARON]
+"\u017E" => "z"
+
+# ƶ [LATIN SMALL LETTER Z WITH STROKE]
+"\u01B6" => "z"
+
+# È http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
+"\u021D" => "z"
+
+# ȥ [LATIN SMALL LETTER Z WITH HOOK]
+"\u0225" => "z"
+
+# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL]
+"\u0240" => "z"
+
+# Ê [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
+"\u0290" => "z"
+
+# Ê‘ [LATIN SMALL LETTER Z WITH CURL]
+"\u0291" => "z"
+
+# áµ¶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
+"\u1D76" => "z"
+
+# á¶Ž [LATIN SMALL LETTER Z WITH PALATAL HOOK]
+"\u1D8E" => "z"
+
+# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+"\u1E91" => "z"
+
+# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
+"\u1E93" => "z"
+
+# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
+"\u1E95" => "z"
+
+# â“© [CIRCLED LATIN SMALL LETTER Z]
+"\u24E9" => "z"
+
+# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
+"\u2C6C" => "z"
+
+# ê£ [LATIN SMALL LETTER VISIGOTHIC Z]
+"\uA763" => "z"
+
+# z [FULLWIDTH LATIN SMALL LETTER Z]
+"\uFF5A" => "z"
+
+# â’µ [PARENTHESIZED LATIN SMALL LETTER Z]
+"\u24B5" => "(z)"
+
+# â° [SUPERSCRIPT ZERO]
+"\u2070" => "0"
+
+# â‚€ [SUBSCRIPT ZERO]
+"\u2080" => "0"
+
+# ⓪ [CIRCLED DIGIT ZERO]
+"\u24EA" => "0"
+
+# â“¿ [NEGATIVE CIRCLED DIGIT ZERO]
+"\u24FF" => "0"
+
+# ï¼ [FULLWIDTH DIGIT ZERO]
+"\uFF10" => "0"
+
+# ¹ [SUPERSCRIPT ONE]
+"\u00B9" => "1"
+
+# â‚ [SUBSCRIPT ONE]
+"\u2081" => "1"
+
+# â‘  [CIRCLED DIGIT ONE]
+"\u2460" => "1"
+
+# ⓵ [DOUBLE CIRCLED DIGIT ONE]
+"\u24F5" => "1"
+
+# â¶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
+"\u2776" => "1"
+
+# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
+"\u2780" => "1"
+
+# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
+"\u278A" => "1"
+
+# 1 [FULLWIDTH DIGIT ONE]
+"\uFF11" => "1"
+
+# â’ˆ [DIGIT ONE FULL STOP]
+"\u2488" => "1."
+
+# â‘´ [PARENTHESIZED DIGIT ONE]
+"\u2474" => "(1)"
+
+# ² [SUPERSCRIPT TWO]
+"\u00B2" => "2"
+
+# â‚‚ [SUBSCRIPT TWO]
+"\u2082" => "2"
+
+# â‘¡ [CIRCLED DIGIT TWO]
+"\u2461" => "2"
+
+# â“¶ [DOUBLE CIRCLED DIGIT TWO]
+"\u24F6" => "2"
+
+# â· [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
+"\u2777" => "2"
+
+# âž [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
+"\u2781" => "2"
+
+# âž‹ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
+"\u278B" => "2"
+
+# ï¼’ [FULLWIDTH DIGIT TWO]
+"\uFF12" => "2"
+
+# â’‰ [DIGIT TWO FULL STOP]
+"\u2489" => "2."
+
+# ⑵ [PARENTHESIZED DIGIT TWO]
+"\u2475" => "(2)"
+
+# ³ [SUPERSCRIPT THREE]
+"\u00B3" => "3"
+
+# ₃ [SUBSCRIPT THREE]
+"\u2083" => "3"
+
+# â‘¢ [CIRCLED DIGIT THREE]
+"\u2462" => "3"
+
+# â“· [DOUBLE CIRCLED DIGIT THREE]
+"\u24F7" => "3"
+
+# ⸠[DINGBAT NEGATIVE CIRCLED DIGIT THREE]
+"\u2778" => "3"
+
+# âž‚ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
+"\u2782" => "3"
+
+# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
+"\u278C" => "3"
+
+# 3 [FULLWIDTH DIGIT THREE]
+"\uFF13" => "3"
+
+# â’Š [DIGIT THREE FULL STOP]
+"\u248A" => "3."
+
+# â‘¶ [PARENTHESIZED DIGIT THREE]
+"\u2476" => "(3)"
+
+# â´ [SUPERSCRIPT FOUR]
+"\u2074" => "4"
+
+# â‚„ [SUBSCRIPT FOUR]
+"\u2084" => "4"
+
+# â‘£ [CIRCLED DIGIT FOUR]
+"\u2463" => "4"
+
+# ⓸ [DOUBLE CIRCLED DIGIT FOUR]
+"\u24F8" => "4"
+
+# â¹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
+"\u2779" => "4"
+
+# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
+"\u2783" => "4"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
+"\u278D" => "4"
+
+# ï¼” [FULLWIDTH DIGIT FOUR]
+"\uFF14" => "4"
+
+# â’‹ [DIGIT FOUR FULL STOP]
+"\u248B" => "4."
+
+# â‘· [PARENTHESIZED DIGIT FOUR]
+"\u2477" => "(4)"
+
+# âµ [SUPERSCRIPT FIVE]
+"\u2075" => "5"
+
+# â‚… [SUBSCRIPT FIVE]
+"\u2085" => "5"
+
+# ⑤ [CIRCLED DIGIT FIVE]
+"\u2464" => "5"
+
+# ⓹ [DOUBLE CIRCLED DIGIT FIVE]
+"\u24F9" => "5"
+
+# ⺠[DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
+"\u277A" => "5"
+
+# âž„ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
+"\u2784" => "5"
+
+# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
+"\u278E" => "5"
+
+# 5 [FULLWIDTH DIGIT FIVE]
+"\uFF15" => "5"
+
+# ⒌ [DIGIT FIVE FULL STOP]
+"\u248C" => "5."
+
+# ⑸ [PARENTHESIZED DIGIT FIVE]
+"\u2478" => "(5)"
+
+# â¶ [SUPERSCRIPT SIX]
+"\u2076" => "6"
+
+# ₆ [SUBSCRIPT SIX]
+"\u2086" => "6"
+
+# â‘¥ [CIRCLED DIGIT SIX]
+"\u2465" => "6"
+
+# ⓺ [DOUBLE CIRCLED DIGIT SIX]
+"\u24FA" => "6"
+
+# â» [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
+"\u277B" => "6"
+
+# âž… [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
+"\u2785" => "6"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
+"\u278F" => "6"
+
+# ï¼– [FULLWIDTH DIGIT SIX]
+"\uFF16" => "6"
+
+# â’ [DIGIT SIX FULL STOP]
+"\u248D" => "6."
+
+# ⑹ [PARENTHESIZED DIGIT SIX]
+"\u2479" => "(6)"
+
+# â· [SUPERSCRIPT SEVEN]
+"\u2077" => "7"
+
+# ₇ [SUBSCRIPT SEVEN]
+"\u2087" => "7"
+
+# ⑦ [CIRCLED DIGIT SEVEN]
+"\u2466" => "7"
+
+# â“» [DOUBLE CIRCLED DIGIT SEVEN]
+"\u24FB" => "7"
+
+# â¼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
+"\u277C" => "7"
+
+# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2786" => "7"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2790" => "7"
+
+# ï¼— [FULLWIDTH DIGIT SEVEN]
+"\uFF17" => "7"
+
+# â’Ž [DIGIT SEVEN FULL STOP]
+"\u248E" => "7."
+
+# ⑺ [PARENTHESIZED DIGIT SEVEN]
+"\u247A" => "(7)"
+
+# ⸠[SUPERSCRIPT EIGHT]
+"\u2078" => "8"
+
+# ₈ [SUBSCRIPT EIGHT]
+"\u2088" => "8"
+
+# â‘§ [CIRCLED DIGIT EIGHT]
+"\u2467" => "8"
+
+# ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
+"\u24FC" => "8"
+
+# â½ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
+"\u277D" => "8"
+
+# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2787" => "8"
+
+# âž‘ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2791" => "8"
+
+# 8 [FULLWIDTH DIGIT EIGHT]
+"\uFF18" => "8"
+
+# â’ [DIGIT EIGHT FULL STOP]
+"\u248F" => "8."
+
+# â‘» [PARENTHESIZED DIGIT EIGHT]
+"\u247B" => "(8)"
+
+# â¹ [SUPERSCRIPT NINE]
+"\u2079" => "9"
+
+# ₉ [SUBSCRIPT NINE]
+"\u2089" => "9"
+
+# ⑨ [CIRCLED DIGIT NINE]
+"\u2468" => "9"
+
+# ⓽ [DOUBLE CIRCLED DIGIT NINE]
+"\u24FD" => "9"
+
+# â¾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
+"\u277E" => "9"
+
+# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
+"\u2788" => "9"
+
+# âž’ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
+"\u2792" => "9"
+
+# ï¼™ [FULLWIDTH DIGIT NINE]
+"\uFF19" => "9"
+
+# â’ [DIGIT NINE FULL STOP]
+"\u2490" => "9."
+
+# ⑼ [PARENTHESIZED DIGIT NINE]
+"\u247C" => "(9)"
+
+# â‘© [CIRCLED NUMBER TEN]
+"\u2469" => "10"
+
+# ⓾ [DOUBLE CIRCLED NUMBER TEN]
+"\u24FE" => "10"
+
+# â¿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
+"\u277F" => "10"
+
+# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
+"\u2789" => "10"
+
+# âž“ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
+"\u2793" => "10"
+
+# â’‘ [NUMBER TEN FULL STOP]
+"\u2491" => "10."
+
+# ⑽ [PARENTHESIZED NUMBER TEN]
+"\u247D" => "(10)"
+
+# ⑪ [CIRCLED NUMBER ELEVEN]
+"\u246A" => "11"
+
+# â“« [NEGATIVE CIRCLED NUMBER ELEVEN]
+"\u24EB" => "11"
+
+# â’’ [NUMBER ELEVEN FULL STOP]
+"\u2492" => "11."
+
+# ⑾ [PARENTHESIZED NUMBER ELEVEN]
+"\u247E" => "(11)"
+
+# â‘« [CIRCLED NUMBER TWELVE]
+"\u246B" => "12"
+
+# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
+"\u24EC" => "12"
+
+# â’“ [NUMBER TWELVE FULL STOP]
+"\u2493" => "12."
+
+# â‘¿ [PARENTHESIZED NUMBER TWELVE]
+"\u247F" => "(12)"
+
+# ⑬ [CIRCLED NUMBER THIRTEEN]
+"\u246C" => "13"
+
+# â“­ [NEGATIVE CIRCLED NUMBER THIRTEEN]
+"\u24ED" => "13"
+
+# â’” [NUMBER THIRTEEN FULL STOP]
+"\u2494" => "13."
+
+# â’€ [PARENTHESIZED NUMBER THIRTEEN]
+"\u2480" => "(13)"
+
+# â‘­ [CIRCLED NUMBER FOURTEEN]
+"\u246D" => "14"
+
+# â“® [NEGATIVE CIRCLED NUMBER FOURTEEN]
+"\u24EE" => "14"
+
+# â’• [NUMBER FOURTEEN FULL STOP]
+"\u2495" => "14."
+
+# â’ [PARENTHESIZED NUMBER FOURTEEN]
+"\u2481" => "(14)"
+
+# â‘® [CIRCLED NUMBER FIFTEEN]
+"\u246E" => "15"
+
+# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
+"\u24EF" => "15"
+
+# â’– [NUMBER FIFTEEN FULL STOP]
+"\u2496" => "15."
+
+# â’‚ [PARENTHESIZED NUMBER FIFTEEN]
+"\u2482" => "(15)"
+
+# ⑯ [CIRCLED NUMBER SIXTEEN]
+"\u246F" => "16"
+
+# â“° [NEGATIVE CIRCLED NUMBER SIXTEEN]
+"\u24F0" => "16"
+
+# â’— [NUMBER SIXTEEN FULL STOP]
+"\u2497" => "16."
+
+# â’ƒ [PARENTHESIZED NUMBER SIXTEEN]
+"\u2483" => "(16)"
+
+# â‘° [CIRCLED NUMBER SEVENTEEN]
+"\u2470" => "17"
+
+# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
+"\u24F1" => "17"
+
+# â’˜ [NUMBER SEVENTEEN FULL STOP]
+"\u2498" => "17."
+
+# â’„ [PARENTHESIZED NUMBER SEVENTEEN]
+"\u2484" => "(17)"
+
+# ⑱ [CIRCLED NUMBER EIGHTEEN]
+"\u2471" => "18"
+
+# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
+"\u24F2" => "18"
+
+# â’™ [NUMBER EIGHTEEN FULL STOP]
+"\u2499" => "18."
+
+# â’… [PARENTHESIZED NUMBER EIGHTEEN]
+"\u2485" => "(18)"
+
+# ⑲ [CIRCLED NUMBER NINETEEN]
+"\u2472" => "19"
+
+# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
+"\u24F3" => "19"
+
+# â’š [NUMBER NINETEEN FULL STOP]
+"\u249A" => "19."
+
+# â’† [PARENTHESIZED NUMBER NINETEEN]
+"\u2486" => "(19)"
+
+# ⑳ [CIRCLED NUMBER TWENTY]
+"\u2473" => "20"
+
+# â“´ [NEGATIVE CIRCLED NUMBER TWENTY]
+"\u24F4" => "20"
+
+# â’› [NUMBER TWENTY FULL STOP]
+"\u249B" => "20."
+
+# â’‡ [PARENTHESIZED NUMBER TWENTY]
+"\u2487" => "(20)"
+
+# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00AB" => "\""
+
+# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00BB" => "\""
+
+# “ [LEFT DOUBLE QUOTATION MARK]
+"\u201C" => "\""
+
+# †[RIGHT DOUBLE QUOTATION MARK]
+"\u201D" => "\""
+
+# „ [DOUBLE LOW-9 QUOTATION MARK]
+"\u201E" => "\""
+
+# ″ [DOUBLE PRIME]
+"\u2033" => "\""
+
+# ‶ [REVERSED DOUBLE PRIME]
+"\u2036" => "\""
+
+# â [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275D" => "\""
+
+# âž [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
+"\u275E" => "\""
+
+# â® [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276E" => "\""
+
+# ⯠[HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276F" => "\""
+
+# " [FULLWIDTH QUOTATION MARK]
+"\uFF02" => "\""
+
+# ‘ [LEFT SINGLE QUOTATION MARK]
+"\u2018" => "\'"
+
+# ’ [RIGHT SINGLE QUOTATION MARK]
+"\u2019" => "\'"
+
+# ‚ [SINGLE LOW-9 QUOTATION MARK]
+"\u201A" => "\'"
+
+# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
+"\u201B" => "\'"
+
+# ′ [PRIME]
+"\u2032" => "\'"
+
+# ‵ [REVERSED PRIME]
+"\u2035" => "\'"
+
+# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
+"\u2039" => "\'"
+
+# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
+"\u203A" => "\'"
+
+# â› [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275B" => "\'"
+
+# ✠[HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
+"\u275C" => "\'"
+
+# ' [FULLWIDTH APOSTROPHE]
+"\uFF07" => "\'"
+
+# †[HYPHEN]
+"\u2010" => "-"
+
+# ‑ [NON-BREAKING HYPHEN]
+"\u2011" => "-"
+
+# ‒ [FIGURE DASH]
+"\u2012" => "-"
+
+# – [EN DASH]
+"\u2013" => "-"
+
+# — [EM DASH]
+"\u2014" => "-"
+
+# â» [SUPERSCRIPT MINUS]
+"\u207B" => "-"
+
+# â‚‹ [SUBSCRIPT MINUS]
+"\u208B" => "-"
+
+# ï¼ [FULLWIDTH HYPHEN-MINUS]
+"\uFF0D" => "-"
+
+# â… [LEFT SQUARE BRACKET WITH QUILL]
+"\u2045" => "["
+
+# â² [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2772" => "["
+
+# ï¼» [FULLWIDTH LEFT SQUARE BRACKET]
+"\uFF3B" => "["
+
+# ↠[RIGHT SQUARE BRACKET WITH QUILL]
+"\u2046" => "]"
+
+# â³ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2773" => "]"
+
+# ï¼½ [FULLWIDTH RIGHT SQUARE BRACKET]
+"\uFF3D" => "]"
+
+# â½ [SUPERSCRIPT LEFT PARENTHESIS]
+"\u207D" => "("
+
+# â‚ [SUBSCRIPT LEFT PARENTHESIS]
+"\u208D" => "("
+
+# ⨠[MEDIUM LEFT PARENTHESIS ORNAMENT]
+"\u2768" => "("
+
+# ⪠[MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
+"\u276A" => "("
+
+# ( [FULLWIDTH LEFT PARENTHESIS]
+"\uFF08" => "("
+
+# ⸨ [LEFT DOUBLE PARENTHESIS]
+"\u2E28" => "(("
+
+# â¾ [SUPERSCRIPT RIGHT PARENTHESIS]
+"\u207E" => ")"
+
+# ₎ [SUBSCRIPT RIGHT PARENTHESIS]
+"\u208E" => ")"
+
+# â© [MEDIUM RIGHT PARENTHESIS ORNAMENT]
+"\u2769" => ")"
+
+# â« [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
+"\u276B" => ")"
+
+# ) [FULLWIDTH RIGHT PARENTHESIS]
+"\uFF09" => ")"
+
+# ⸩ [RIGHT DOUBLE PARENTHESIS]
+"\u2E29" => "))"
+
+# ⬠[MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276C" => "<"
+
+# â° [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2770" => "<"
+
+# < [FULLWIDTH LESS-THAN SIGN]
+"\uFF1C" => "<"
+
+# â­ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276D" => ">"
+
+# â± [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2771" => ">"
+
+# > [FULLWIDTH GREATER-THAN SIGN]
+"\uFF1E" => ">"
+
+# â´ [MEDIUM LEFT CURLY BRACKET ORNAMENT]
+"\u2774" => "{"
+
+# ï½› [FULLWIDTH LEFT CURLY BRACKET]
+"\uFF5B" => "{"
+
+# âµ [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
+"\u2775" => "}"
+
+# ï½ [FULLWIDTH RIGHT CURLY BRACKET]
+"\uFF5D" => "}"
+
+# ⺠[SUPERSCRIPT PLUS SIGN]
+"\u207A" => "+"
+
+# ₊ [SUBSCRIPT PLUS SIGN]
+"\u208A" => "+"
+
+# + [FULLWIDTH PLUS SIGN]
+"\uFF0B" => "+"
+
+# â¼ [SUPERSCRIPT EQUALS SIGN]
+"\u207C" => "="
+
+# ₌ [SUBSCRIPT EQUALS SIGN]
+"\u208C" => "="
+
+# ï¼ [FULLWIDTH EQUALS SIGN]
+"\uFF1D" => "="
+
+# ï¼ [FULLWIDTH EXCLAMATION MARK]
+"\uFF01" => "!"
+
+# ‼ [DOUBLE EXCLAMATION MARK]
+"\u203C" => "!!"
+
+# ≠[EXCLAMATION QUESTION MARK]
+"\u2049" => "!?"
+
+# # [FULLWIDTH NUMBER SIGN]
+"\uFF03" => "#"
+
+# $ [FULLWIDTH DOLLAR SIGN]
+"\uFF04" => "$"
+
+# â’ [COMMERCIAL MINUS SIGN]
+"\u2052" => "%"
+
+# ï¼… [FULLWIDTH PERCENT SIGN]
+"\uFF05" => "%"
+
+# & [FULLWIDTH AMPERSAND]
+"\uFF06" => "&"
+
+# ⎠[LOW ASTERISK]
+"\u204E" => "*"
+
+# * [FULLWIDTH ASTERISK]
+"\uFF0A" => "*"
+
+# , [FULLWIDTH COMMA]
+"\uFF0C" => ","
+
+# . [FULLWIDTH FULL STOP]
+"\uFF0E" => "."
+
+# â„ [FRACTION SLASH]
+"\u2044" => "/"
+
+# ï¼ [FULLWIDTH SOLIDUS]
+"\uFF0F" => "/"
+
+# : [FULLWIDTH COLON]
+"\uFF1A" => ":"
+
+# â [REVERSED SEMICOLON]
+"\u204F" => ";"
+
+# ï¼› [FULLWIDTH SEMICOLON]
+"\uFF1B" => ";"
+
+# ? [FULLWIDTH QUESTION MARK]
+"\uFF1F" => "?"
+
+# ⇠[DOUBLE QUESTION MARK]
+"\u2047" => "??"
+
+# ∠[QUESTION EXCLAMATION MARK]
+"\u2048" => "?!"
+
+# ï¼  [FULLWIDTH COMMERCIAL AT]
+"\uFF20" => "@"
+
+# ï¼¼ [FULLWIDTH REVERSE SOLIDUS]
+"\uFF3C" => "\\"
+
+# ‸ [CARET]
+"\u2038" => "^"
+
+# ï¼¾ [FULLWIDTH CIRCUMFLEX ACCENT]
+"\uFF3E" => "^"
+
+# _ [FULLWIDTH LOW LINE]
+"\uFF3F" => "_"
+
+# â“ [SWUNG DASH]
+"\u2053" => "~"
+
+# ~ [FULLWIDTH TILDE]
+"\uFF5E" => "~"
+
+################################################################
+# Below is the Perl script used to generate the above mappings #
+# from ASCIIFoldingFilter.java: #
+################################################################
+#
+# #!/usr/bin/perl
+#
+# use warnings;
+# use strict;
+#
+# my @source_chars = ();
+# my @source_char_descriptions = ();
+# my $target = '';
+#
+# while (<>) {
+# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) {
+# push @source_chars, $1;
+# push @source_char_descriptions, $2;
+# next;
+# }
+# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) {
+# $target .= $1;
+# next;
+# }
+# if (/break;/) {
+# $target = "\\\"" if ($target eq '"');
+# for my $source_char_num (0..$#source_chars) {
+# print "# $source_char_descriptions[$source_char_num]\n";
+# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n";
+# }
+# @source_chars = ();
+# @source_char_descriptions = ();
+# $target = '';
+# }
+# }
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-ISOLatin1Accent.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 000000000..ede774258
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,246 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+# example:
+# "À" => "A"
+# "\u00C0" => "A"
+# "\u00C0" => "\u0041"
+# "ß" => "ss"
+# "\t" => " "
+# "\n" => ""
+
+# À => A
+"\u00C0" => "A"
+
+# Ã => A
+"\u00C1" => "A"
+
+# Â => A
+"\u00C2" => "A"
+
+# Ã => A
+"\u00C3" => "A"
+
+# Ä => A
+"\u00C4" => "A"
+
+# Ã… => A
+"\u00C5" => "A"
+
+# Æ => AE
+"\u00C6" => "AE"
+
+# Ç => C
+"\u00C7" => "C"
+
+# È => E
+"\u00C8" => "E"
+
+# É => E
+"\u00C9" => "E"
+
+# Ê => E
+"\u00CA" => "E"
+
+# Ë => E
+"\u00CB" => "E"
+
+# Ì => I
+"\u00CC" => "I"
+
+# Ã => I
+"\u00CD" => "I"
+
+# ÃŽ => I
+"\u00CE" => "I"
+
+# Ã => I
+"\u00CF" => "I"
+
+# IJ => IJ
+"\u0132" => "IJ"
+
+# Ã => D
+"\u00D0" => "D"
+
+# Ñ => N
+"\u00D1" => "N"
+
+# Ã’ => O
+"\u00D2" => "O"
+
+# Ó => O
+"\u00D3" => "O"
+
+# Ô => O
+"\u00D4" => "O"
+
+# Õ => O
+"\u00D5" => "O"
+
+# Ö => O
+"\u00D6" => "O"
+
+# Ø => O
+"\u00D8" => "O"
+
+# Å’ => OE
+"\u0152" => "OE"
+
+# Þ
+"\u00DE" => "TH"
+
+# Ù => U
+"\u00D9" => "U"
+
+# Ú => U
+"\u00DA" => "U"
+
+# Û => U
+"\u00DB" => "U"
+
+# Ü => U
+"\u00DC" => "U"
+
+# Ã => Y
+"\u00DD" => "Y"
+
+# Ÿ => Y
+"\u0178" => "Y"
+
+# à => a
+"\u00E0" => "a"
+
+# á => a
+"\u00E1" => "a"
+
+# â => a
+"\u00E2" => "a"
+
+# ã => a
+"\u00E3" => "a"
+
+# ä => a
+"\u00E4" => "a"
+
+# å => a
+"\u00E5" => "a"
+
+# æ => ae
+"\u00E6" => "ae"
+
+# ç => c
+"\u00E7" => "c"
+
+# è => e
+"\u00E8" => "e"
+
+# é => e
+"\u00E9" => "e"
+
+# ê => e
+"\u00EA" => "e"
+
+# ë => e
+"\u00EB" => "e"
+
+# ì => i
+"\u00EC" => "i"
+
+# í => i
+"\u00ED" => "i"
+
+# î => i
+"\u00EE" => "i"
+
+# ï => i
+"\u00EF" => "i"
+
+# ij => ij
+"\u0133" => "ij"
+
+# ð => d
+"\u00F0" => "d"
+
+# ñ => n
+"\u00F1" => "n"
+
+# ò => o
+"\u00F2" => "o"
+
+# ó => o
+"\u00F3" => "o"
+
+# ô => o
+"\u00F4" => "o"
+
+# õ => o
+"\u00F5" => "o"
+
+# ö => o
+"\u00F6" => "o"
+
+# ø => o
+"\u00F8" => "o"
+
+# Å“ => oe
+"\u0153" => "oe"
+
+# ß => ss
+"\u00DF" => "ss"
+
+# þ => th
+"\u00FE" => "th"
+
+# ù => u
+"\u00F9" => "u"
+
+# ú => u
+"\u00FA" => "u"
+
+# û => u
+"\u00FB" => "u"
+
+# ü => u
+"\u00FC" => "u"
+
+# ý => y
+"\u00FD" => "y"
+
+# ÿ => y
+"\u00FF" => "y"
+
+# ff => ff
+"\uFB00" => "ff"
+
+# ï¬ => fi
+"\uFB01" => "fi"
+
+# fl => fl
+"\uFB02" => "fl"
+
+# ffi => ffi
+"\uFB03" => "ffi"
+
+# ffl => ffl
+"\uFB04" => "ffl"
+
+# ſt => ft
+"\uFB05" => "ft"
+
+# st => st
+"\uFB06" => "st"
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/protwords.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/solrconfig.xml b/solr-8.1.1/example/example-DIH/solr/db/conf/solrconfig.xml
new file mode 100644
index 000000000..b0e9ac128
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/solrconfig.xml
@@ -0,0 +1,1353 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first.
+ The default is 100 MB. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="solr.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting the value to true will instruct the underlying Lucene
+ IndexWriter to write its info stream to solr's log. By default,
+ this is enabled here, and controlled through log4j2.xml
+ -->
+ <infoStream>true</infoStream>
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory. -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+ <!-- Max Boolean Clauses
+
+ Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded.
+
+ ** WARNING **
+
+ This option actually modifies a global Lucene property that
+ will affect all SolrCores. If multiple solrconfig.xml files
+ disagree on this property, the value at any given moment will
+ be based on the last SolrCore to be initialized.
+
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+
+ <requestHandler name="/dataimport" class="solr.DataImportHandler">
+ <lst name="defaults">
+ <str name="config">db-data-config.xml</str>
+ </lst>
+ </requestHandler>
+
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <str name="df">text</str>
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ <str name="df">text</str>
+ </lst>
+ </requestHandler>
+
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+
+ <!-- VelocityResponseWriter settings -->
+ <str name="wt">velocity</str>
+ <str name="v.template">browse</str>
+ <str name="v.layout">layout</str>
+
+ <!-- Query settings -->
+ <str name="defType">edismax</str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">10</str>
+ <str name="fl">*,score</str>
+
+ <!-- Faceting defaults -->
+ <str name="facet">on</str>
+ <str name="facet.mincount">1</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">text</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="uprefix">ignored_</str>
+
+ <!-- capture link hrefs but ignore div attributes -->
+ <str name="captureAttr">true</str>
+ <str name="fmap.a">links</str>
+ <str name="fmap.div">ignored_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">text</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+
+ <!-- a spellchecker that uses a different distance measure -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">jarowinkler</str>
+ <str name="field">spell</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="distanceMeasure">
+ org.apache.lucene.search.spell.JaroWinklerDistance
+ </str>
+ </lst>
+ -->
+
+ <!-- a spellchecker that use an alternate comparator
+
+ comparatorClass be one of:
+ 1. score (default)
+ 2. freq (Frequency first, then score)
+ 3. A fully qualified class name
+ -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">freq</str>
+ <str name="field">lowerfilt</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="comparatorClass">freq</str>
+ -->
+
+ <!-- A spellchecker that reads the list of words from a file -->
+ <!--
+ <lst name="spellchecker">
+ <str name="classname">solr.FileBasedSpellChecker</str>
+ <str name="name">file</str>
+ <str name="sourceLocation">spellings.txt</str>
+ <str name="characterEncoding">UTF-8</str>
+ <str name="spellcheckIndexDir">spellcheckerFile</str>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck.dictionary">wordbreak</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <searchComponent name="suggest" class="solr.SuggestComponent">
+ <lst name="suggester">
+ <str name="name">mySuggester</str>
+ <str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
+ <str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
+ <str name="field">cat</str>
+ <str name="weightField">price</str>
+ <str name="suggestAnalyzerFieldType">string</str>
+ </lst>
+ </searchComponent>
+
+ <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="suggest">true</str>
+ <str name="suggest.count">10</str>
+ </lst>
+ <arr name="components">
+ <str>suggest</str>
+ </arr>
+ </requestHandler>
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ <str name="config-file">elevate.xml</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="df">text</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+
+</config>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/spellings.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/spellings.txt
new file mode 100644
index 000000000..162a044d5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/spellings.txt
@@ -0,0 +1,2 @@
+pizza
+history
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/stopwords.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/synonyms.txt b/solr-8.1.1/example/example-DIH/solr/db/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/update-script.js b/solr-8.1.1/example/example-DIH/solr/db/conf/update-script.js
new file mode 100644
index 000000000..49b07f9b7
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/update-script.js
@@ -0,0 +1,53 @@
+/*
+ This is a basic skeleton JavaScript update processor.
+
+ In order for this to be executed, it must be properly wired into solrconfig.xml; by default it is commented out in
+ the example solrconfig.xml and must be uncommented to be enabled.
+
+ See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details.
+*/
+
+function processAdd(cmd) {
+
+ doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
+ id = doc.getFieldValue("id");
+ logger.info("update-script#processAdd: id=" + id);
+
+// Set a field value:
+// doc.setField("foo_s", "whatever");
+
+// Get a configuration parameter:
+// config_param = params.get('config_param'); // "params" only exists if processor configured with <lst name="params">
+
+// Get a request parameter:
+// some_param = req.getParams().get("some_param")
+
+// Add a field of field names that match a pattern:
+// - Potentially useful to determine the fields/attributes represented in a result set, via faceting on field_name_ss
+// field_names = doc.getFieldNames().toArray();
+// for(i=0; i < field_names.length; i++) {
+// field_name = field_names[i];
+// if (/attr_.*/.test(field_name)) { doc.addField("attribute_ss", field_names[i]); }
+// }
+
+}
+
+function processDelete(cmd) {
+ // no-op
+}
+
+function processMergeIndexes(cmd) {
+ // no-op
+}
+
+function processCommit(cmd) {
+ // no-op
+}
+
+function processRollback(cmd) {
+ // no-op
+}
+
+function finish() {
+ // no-op
+}
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl
new file mode 100644
index 000000000..b89927008
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+ <xsl:output media-type="text/html" encoding="UTF-8"/>
+
+ <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+
+ <xsl:template match='/'>
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <xsl:call-template name="css"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$title"/></h1>
+ <div class="note">
+ This has been formatted by the sample "example.xsl" transform -
+ use your own XSLT to get a nicer page
+ </div>
+ <xsl:apply-templates select="response/result/doc"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <div class="doc">
+ <table width="100%">
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ <xsl:param name="pos"></xsl:param>
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+
+ <xsl:if test="boolean(//lst[@name='explain'])">
+ <xsl:element name="a">
+ <!-- can't allow whitespace here -->
+ <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+ <br/>
+ <xsl:element name="div">
+ <xsl:attribute name="class">exp</xsl:attribute>
+ <xsl:attribute name="id">
+ <xsl:value-of select="concat('exp-',$pos)" />
+ </xsl:attribute>
+ <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+ </xsl:element>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="doc/arr" priority="100">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="*">
+ <li><xsl:value-of select="."/></li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+
+ <xsl:template name="css">
+ <script>
+ function toggle(id) {
+ var obj = document.getElementById(id);
+ obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+ }
+ </script>
+ <style type="text/css">
+ body { font-family: "Lucida Grande", sans-serif }
+ td.name { font-style: italic; font-size:80%; }
+ td { vertical-align: top; }
+ ul { margin: 0px; margin-left: 1em; padding: 0px; }
+ .note { font-size:80%; }
+ .doc { margin-top: 1em; border-top: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ </style>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl
new file mode 100644
index 000000000..b6c23151d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl
@@ -0,0 +1,67 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+
+ <xsl:template match='/'>
+ <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Example Solr Atom 1.0 Feed</title>
+ <subtitle>
+ This has been formatted by the sample "example_atom.xsl" transform -
+ use your own XSLT to get a nicer Atom feed.
+ </subtitle>
+ <author>
+ <name>Apache Solr</name>
+ <email>solr-user@lucene.apache.org</email>
+ </author>
+ <link rel="self" type="application/atom+xml"
+ href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+ <updated>
+ <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+ </updated>
+ <id>tag:localhost,2007:example</id>
+ <xsl:apply-templates select="response/result/doc"/>
+ </feed>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <entry>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link href="http://localhost:8983/solr/select?q={$id}"/>
+ <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+ <summary><xsl:value-of select="arr[@name='features']"/></summary>
+ <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+ </entry>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl
new file mode 100644
index 000000000..c8ab5bfb1
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+ <xsl:template match='/'>
+ <rss version="2.0">
+ <channel>
+ <title>Example Solr RSS 2.0 Feed</title>
+ <link>http://localhost:8983/solr</link>
+ <description>
+ This has been formatted by the sample "example_rss.xsl" transform -
+ use your own XSLT to get a nicer RSS feed.
+ </description>
+ <language>en-us</language>
+ <docs>http://localhost:8983/solr</docs>
+ <xsl:apply-templates select="response/result/doc"/>
+ </channel>
+ </rss>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+ <item>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </link>
+ <description>
+ <xsl:value-of select="arr[@name='features']"/>
+ </description>
+ <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+ <guid>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </guid>
+ </item>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl
new file mode 100644
index 000000000..05fb5bfee
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<!--
+ Display the luke request handler with graphs
+ -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ version="1.0"
+ >
+ <xsl:output
+ method="html"
+ encoding="UTF-8"
+ media-type="text/html"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ />
+
+ <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <link rel="stylesheet" type="text/css" href="solr-admin.css"/>
+ <link rel="icon" href="favicon.ico" type="image/x-icon"/>
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
+ <title>
+ <xsl:value-of select="$title"/>
+ </title>
+ <xsl:call-template name="css"/>
+
+ </head>
+ <body>
+ <h1>
+ <xsl:value-of select="$title"/>
+ </h1>
+ <div class="doc">
+ <ul>
+ <xsl:if test="response/lst[@name='index']">
+ <li>
+ <a href="#index">Index Statistics</a>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <li>
+ <a href="#fields">Field Statistics</a>
+ <ul>
+ <xsl:for-each select="response/lst[@name='fields']/lst">
+ <li>
+ <a href="#{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <li>
+ <a href="#doc">Document statistics</a>
+ </li>
+ </xsl:if>
+ </ul>
+ </div>
+ <xsl:if test="response/lst[@name='index']">
+ <h2><a name="index"/>Index Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='index']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <h2><a name="fields"/>Field Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='fields']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <h2><a name="doc"/>Document statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='doc']"/>
+ </xsl:if>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="lst">
+ <xsl:if test="parent::lst">
+ <tr>
+ <td colspan="2">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </td>
+ </tr>
+ </xsl:if>
+ <xsl:if test="not(parent::lst)">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="list">
+ <xsl:if test="count(child::*)>0">
+ <table>
+ <thead>
+ <tr>
+ <th colspan="2">
+ <p>
+ <a name="{@name}"/>
+ </p>
+ <xsl:value-of select="@name"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:choose>
+ <xsl:when
+ test="@name='histogram'">
+ <tr>
+ <td colspan="2">
+ <xsl:call-template name="histogram"/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tbody>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="histogram">
+ <div class="doc">
+ <xsl:call-template name="barchart">
+ <xsl:with-param name="max_bar_width">50</xsl:with-param>
+ <xsl:with-param name="iwidth">800</xsl:with-param>
+ <xsl:with-param name="iheight">160</xsl:with-param>
+ <xsl:with-param name="fill">blue</xsl:with-param>
+ </xsl:call-template>
+ </div>
+ </xsl:template>
+
+ <xsl:template name="barchart">
+ <xsl:param name="max_bar_width"/>
+ <xsl:param name="iwidth"/>
+ <xsl:param name="iheight"/>
+ <xsl:param name="fill"/>
+ <xsl:variable name="max">
+ <xsl:for-each select="int">
+ <xsl:sort data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="bars">
+ <xsl:value-of select="count(int)"/>
+ </xsl:variable>
+ <xsl:variable name="bar_width">
+ <xsl:choose>
+ <xsl:when test="$max_bar_width &lt; ($iwidth div $bars)">
+ <xsl:value-of select="$max_bar_width"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$iwidth div $bars"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <table class="histogram">
+ <tbody>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="."/>
+ <div class="histogram">
+ <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
+ </div>
+ </td>
+ </xsl:for-each>
+ </tr>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:for-each>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="keyvalue">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="int|bool|long|float|double|uuid|date">
+ <xsl:call-template name="keyvalue"/>
+ </xsl:template>
+
+ <xsl:template match="arr">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="child::*">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="str">
+ <xsl:choose>
+ <xsl:when test="@name='schema' or @name='index' or @name='flags'">
+ <xsl:call-template name="schema"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="keyvalue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="schema">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:if test="contains(.,'unstored')">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <xsl:if test="not(contains(.,'unstored'))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="charList">
+ <xsl:value-of select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template name="infochar2string">
+ <xsl:param name="i">1</xsl:param>
+ <xsl:param name="charList"/>
+
+ <xsl:variable name="char">
+ <xsl:value-of select="substring($charList,$i,1)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$char='I'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
+ <xsl:when test="$char='T'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
+ <xsl:when test="$char='S'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
+ <xsl:when test="$char='M'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
+ <xsl:when test="$char='V'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
+ <xsl:when test="$char='o'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
+ <xsl:when test="$char='p'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
+ <xsl:when test="$char='O'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
+ <xsl:when test="$char='L'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
+ <xsl:when test="$char='B'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
+ <xsl:when test="$char='C'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
+ <xsl:when test="$char='f'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
+ <xsl:when test="$char='l'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="not($i>=string-length($charList))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="i">
+ <xsl:value-of select="$i+1"/>
+ </xsl:with-param>
+ <xsl:with-param name="charList">
+ <xsl:value-of select="$charList"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="css">
+ <style type="text/css">
+ <![CDATA[
+ td.name {font-style: italic; font-size:80%; }
+ .doc { margin: 0.5em; border: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
+ table.histogram { width: auto; vertical-align: bottom; }
+ table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
+ ]]>
+ </style>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl
new file mode 100644
index 000000000..7c4a48e73
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl
@@ -0,0 +1,70 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query response into Solr Update XML compliant XML.
+ When used in the xslt response writer you will get UpdaateXML as output.
+ But you can also store a query response XML to disk and feed this XML to
+ the XSLTUpdateRequestHandler to index the content. Provided as example only.
+ See http://wiki.apache.org/solr/XsltUpdateRequestHandler for more info
+ -->
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+ <xsl:output media-type="text/xml" method="xml" indent="yes"/>
+
+ <xsl:template match='/'>
+ <add>
+ <xsl:apply-templates select="response/result/doc"/>
+ </add>
+ </xsl:template>
+
+ <!-- Ignore score (makes no sense to index) -->
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <doc>
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </doc>
+ </xsl:template>
+
+ <!-- Flatten arrays to duplicate field lines -->
+ <xsl:template match="doc/arr" priority="100">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:for-each select="*">
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/db/core.properties b/solr-8.1.1/example/example-DIH/solr/db/core.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/core.properties
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/example-DIH/solr/db/lib/derby-10.9.1.0.jar b/solr-8.1.1/example/example-DIH/solr/db/lib/derby-10.9.1.0.jar
new file mode 100644
index 000000000..26feece9e
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/lib/derby-10.9.1.0.jar
Binary files differ
diff --git a/solr-8.1.1/example/example-DIH/solr/db/lib/hsqldb-2.4.0.jar b/solr-8.1.1/example/example-DIH/solr/db/lib/hsqldb-2.4.0.jar
new file mode 100644
index 000000000..d05807dad
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/db/lib/hsqldb-2.4.0.jar
Binary files differ
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/kmeans-attributes.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/kmeans-attributes.xml
new file mode 100644
index 000000000..d802465f6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/kmeans-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the bisecting k-means clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/lingo-attributes.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/lingo-attributes.xml
new file mode 100644
index 000000000..5febfc320
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/lingo-attributes.xml
@@ -0,0 +1,24 @@
+<!--
+ Default configuration for the Lingo clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <!--
+ The language to assume for clustered documents.
+ For a list of allowed values, see:
+ http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
+ -->
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="LingoClusteringAlgorithm.desiredClusterCountBase">
+ <value type="java.lang.Integer" value="20"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/stc-attributes.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/stc-attributes.xml
new file mode 100644
index 000000000..c1bf110c8
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/clustering/carrot2/stc-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the STC clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/currency.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/currency.xml
new file mode 100644
index 000000000..3a9c58afe
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/currency.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example exchange rates file for CurrencyField type named "currency" in example schema -->
+
+<currencyConfig version="1.0">
+ <rates>
+ <!-- Updated from http://www.exchangerate.com/ at 2011-09-27 -->
+ <rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" />
+ <rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" />
+ <rate from="USD" to="EUR" rate="0.743676" comment="European Euro" />
+ <rate from="USD" to="BRL" rate="1.881093" comment="BRAZIL Real" />
+ <rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" />
+ <rate from="USD" to="CLP" rate="519.0996" comment="CHILE Peso" />
+ <rate from="USD" to="CNY" rate="6.387310" comment="CHINA Yuan" />
+ <rate from="USD" to="CZK" rate="18.47134" comment="CZECH REP. Koruna" />
+ <rate from="USD" to="DKK" rate="5.515436" comment="DENMARK Krone" />
+ <rate from="USD" to="HKD" rate="7.801922" comment="HONG KONG Dollar" />
+ <rate from="USD" to="HUF" rate="215.6169" comment="HUNGARY Forint" />
+ <rate from="USD" to="ISK" rate="118.1280" comment="ICELAND Krona" />
+ <rate from="USD" to="INR" rate="49.49088" comment="INDIA Rupee" />
+ <rate from="USD" to="XDR" rate="0.641358" comment="INTNL MON. FUND SDR" />
+ <rate from="USD" to="ILS" rate="3.709739" comment="ISRAEL Sheqel" />
+ <rate from="USD" to="JPY" rate="76.32419" comment="JAPAN Yen" />
+ <rate from="USD" to="KRW" rate="1169.173" comment="KOREA (SOUTH) Won" />
+ <rate from="USD" to="KWD" rate="0.275142" comment="KUWAIT Dinar" />
+ <rate from="USD" to="MXN" rate="13.85895" comment="MEXICO Peso" />
+ <rate from="USD" to="NZD" rate="1.285159" comment="NEW ZEALAND Dollar" />
+ <rate from="USD" to="NOK" rate="5.859035" comment="NORWAY Krone" />
+ <rate from="USD" to="PKR" rate="87.57007" comment="PAKISTAN Rupee" />
+ <rate from="USD" to="PEN" rate="2.730683" comment="PERU Sol" />
+ <rate from="USD" to="PHP" rate="43.62039" comment="PHILIPPINES Peso" />
+ <rate from="USD" to="PLN" rate="3.310139" comment="POLAND Zloty" />
+ <rate from="USD" to="RON" rate="3.100932" comment="ROMANIA Leu" />
+ <rate from="USD" to="RUB" rate="32.14663" comment="RUSSIA Ruble" />
+ <rate from="USD" to="SAR" rate="3.750465" comment="SAUDI ARABIA Riyal" />
+ <rate from="USD" to="SGD" rate="1.299352" comment="SINGAPORE Dollar" />
+ <rate from="USD" to="ZAR" rate="8.329761" comment="SOUTH AFRICA Rand" />
+ <rate from="USD" to="SEK" rate="6.883442" comment="SWEDEN Krona" />
+ <rate from="USD" to="CHF" rate="0.906035" comment="SWITZERLAND Franc" />
+ <rate from="USD" to="TWD" rate="30.40283" comment="TAIWAN Dollar" />
+ <rate from="USD" to="THB" rate="30.89487" comment="THAILAND Baht" />
+ <rate from="USD" to="AED" rate="3.672955" comment="U.A.E. Dirham" />
+ <rate from="USD" to="UAH" rate="7.988582" comment="UKRAINE Hryvnia" />
+ <rate from="USD" to="GBP" rate="0.647910" comment="UNITED KINGDOM Pound" />
+
+ <!-- Cross-rates for some common currencies -->
+ <rate from="EUR" to="GBP" rate="0.869914" />
+ <rate from="EUR" to="NOK" rate="7.800095" />
+ <rate from="GBP" to="NOK" rate="8.966508" />
+ </rates>
+</currencyConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/elevate.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/elevate.xml
new file mode 100644
index 000000000..2c09ebed6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/elevate.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+ loaded once at startup. If it is found in Solr's data
+ directory, it will be re-loaded every commit.
+
+ See http://wiki.apache.org/solr/QueryElevationComponent for more info
+
+-->
+<elevate>
+ <!-- Query elevation examples
+ <query text="foo bar">
+ <doc id="1" />
+ <doc id="2" />
+ <doc id="3" />
+ </query>
+
+for use with techproducts example
+
+ <query text="ipod">
+ <doc id="MA147LL/A" /> put the actual ipod at the top
+ <doc id="IW-02" exclude="true" /> exclude this cable
+ </query>
+-->
+
+</elevate>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ca.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_fr.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ga.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_it.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/hyphenations_ga.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stemdict_nl.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stoptags_ja.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ar.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_bg.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ca.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ckb.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ckb.txt
new file mode 100644
index 000000000..87abf118f
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ckb.txt
@@ -0,0 +1,136 @@
+# set of kurdish stopwords
+# note these have been normalized with our scheme (e represented with U+06D5, etc)
+# constructed from:
+# * Fig 5 of "Building A Test Collection For Sorani Kurdish" (Esmaili et al)
+# * "Sorani Kurdish: A Reference Grammar with selected readings" (Thackston)
+# * Corpus-based analysis of 77M word Sorani collection: wikipedia, news, blogs, etc
+
+# and
+Ùˆ
+# which
+Ú©Û•
+# of
+ی
+# made/did
+کرد
+# that/which
+ئەوەی
+# on/head
+سەر
+# two
+دوو
+# also
+هەروەها
+# from/that
+Ù„Û•Ùˆ
+# makes/does
+دەکات
+# some
+چەند
+# every
+هەر
+
+# demonstratives
+# that
+ئەو
+# this
+ئەم
+
+# personal pronouns
+# I
+من
+# we
+ئێمە
+# you
+تۆ
+# you
+ئێوە
+# he/she/it
+ئەو
+# they
+ئەوان
+
+# prepositions
+# to/with/by
+بە
+Ù¾ÛŽ
+# without
+بەبێ
+# along with/while/during
+بەدەم
+# in the opinion of
+بەلای
+# according to
+بەپێی
+# before
+بەرلە
+# in the direction of
+بەرەوی
+# in front of/toward
+بەرەوە
+# before/in the face of
+بەردەم
+# without
+بێ
+# except for
+بێجگە
+# for
+بۆ
+# on/in
+دە
+تێ
+# with
+دەگەڵ
+# after
+دوای
+# except for/aside from
+جگە
+# in/from
+Ù„Û•
+Ù„ÛŽ
+# in front of/before/because of
+لەبەر
+# between/among
+لەبەینی
+# concerning/about
+لەبابەت
+# concerning
+لەبارەی
+# instead of
+لەباتی
+# beside
+لەبن
+# instead of
+لەبرێتی
+# behind
+لەدەم
+# with/together with
+Ù„Û•Ú¯Û•Úµ
+# by
+لەلایەن
+# within
+لەناو
+# between/among
+Ù„Û•Ù†ÛŽÙˆ
+# for the sake of
+لەپێناوی
+# with respect to
+لەرەوی
+# by means of/for
+لەرێ
+# for the sake of
+لەرێگا
+# on/on top of/according to
+لەسەر
+# under
+لەژێر
+# between/among
+ناو
+# between/among
+نێوان
+# after
+پاش
+# before
+Ù¾ÛŽØ´
+# like
+ÙˆÛ•Ú©
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_cz.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_da.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_de.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_el.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_en.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_es.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_eu.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fa.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fi.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fr.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ga.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_gl.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hi.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hu.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hy.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_id.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_it.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ja.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_lv.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_nl.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_no.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_pt.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ro.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ru.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_sv.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_th.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_tr.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/userdict_ja.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/mail-data-config.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/mail-data-config.xml
new file mode 100644
index 000000000..736aea7cc
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/mail-data-config.xml
@@ -0,0 +1,12 @@
+<dataConfig>
+ <document>
+ <!--
+ Note - In order to index attachments, set processAttachement="true" and drop
+ Tika and its dependencies to example-DIH/solr/mail/lib directory
+ -->
+ <entity processor="MailEntityProcessor" user="email@gmail.com"
+ password="password" host="imap.gmail.com" protocol="gimaps"
+ fetchMailsSince="2014-06-30 00:00:00" batchSize="20" folders="inbox" processAttachement="false"
+ name="mail_entity"/>
+ </document>
+</dataConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/managed-schema b/solr-8.1.1/example/example-DIH/solr/mail/conf/managed-schema
new file mode 100644
index 000000000..1a371d446
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/managed-schema
@@ -0,0 +1,1062 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking. To improve performance one could
+ - set stored="false" for all fields possible (esp large fields) when you
+ only need to search on the field but don't need to return the original
+ value.
+ - set indexed="false" if you don't need to search on the field, but only
+ return the field as a result of searching on other indexed fields.
+ - remove all unneeded copyField statements
+ - for best index size and searching performance, set "index" to false
+ for all general text fields, use copyField to copy them to the
+ catchall "text" field, and use that for searching.
+ - For maximum indexing performance, use the ConcurrentUpdateSolrServer
+ java client.
+ - Remember to run the JVM in server mode, and use a higher logging level
+ that avoids logging every request
+-->
+
+<schema name="example-DIH-mail" version="1.6">
+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
+ version="x.y" is Solr's version number for the schema syntax and
+ semantics. It should not normally be changed by applications.
+
+ 1.0: multiValued attribute did not exist, all fields are multiValued
+ by nature
+ 1.1: multiValued attribute introduced, false by default
+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
+ except for text fields.
+ 1.3: removed optional field compress feature
+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
+ behavior when a single string produces multiple tokens. Defaults
+ to off for version >= 1.4
+ 1.5: omitNorms defaults to true for primitive field types
+ (int, float, boolean, string...)
+ 1.6: useDocValuesAsStored defaults to true.
+ -->
+
+
+ <!-- Valid attributes for fields:
+ name: mandatory - the name for the field
+ type: mandatory - the name of a field type from the
+ fieldTypes section
+ indexed: true if this field should be indexed (searchable or sortable)
+ stored: true if this field should be retrievable
+ docValues: true if this field should have doc values. Doc values are
+ useful (required, if you are using *Point fields) for faceting,
+ grouping, sorting and function queries. Doc values will make the index
+ faster to load, more NRT-friendly and more memory-efficient.
+ They however come with some limitations: they are currently only
+ supported by StrField, UUIDField, all *PointFields, and depending
+ on the field type, they might require the field to be single-valued,
+ be required or have a default value (check the documentation
+ of the field type you're interested in for more information)
+ multiValued: true if this field may contain multiple values per document
+ omitNorms: (expert) set to true to omit the norms associated with
+ this field (this disables length normalization and index-time
+ boosting for the field, and saves some memory). Only full-text
+ fields or fields that need an index-time boost need norms.
+ Norms are omitted for primitive (non-analyzed) types by default.
+ termVectors: [false] set to true to store the term vector for a
+ given field.
+ When using MoreLikeThis, fields used for similarity should be
+ stored for best performance.
+ termPositions: Store position information with the term vector.
+ This will increase storage costs.
+ termOffsets: Store offset information with the term vector. This
+ will increase storage costs.
+ required: The field is required. It will throw an error if the
+ value does not exist
+ default: a value that should be used if no value is specified
+ when adding a document.
+ -->
+
+ <!-- field names should consist of alphanumeric or underscore characters only and
+ not start with a digit. This is not currently strictly enforced,
+ but other field names will not have first class support from all components
+ and back compatibility is not guaranteed. Names with both leading and
+ trailing underscores (e.g. _version_) are reserved.
+ -->
+
+ <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
+ or Solr won't start. _version_ and update log are required for SolrCloud
+ -->
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
+
+ <field name="content" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- catchall field, containing all other searchable text fields (implemented
+ via copyField further on in this schema -->
+ <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
+
+ <field name="messageId" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
+ <field name="subject" type="text_general" indexed="true" stored="true"/>
+ <field name="from" type="string" indexed="true" stored="true" omitNorms="true"/>
+ <field name="sentDate" type="pdate" indexed="true" stored="true"/>
+ <field name="xMailer" type="string" indexed="true" stored="true" omitNorms="true"/>
+
+ <field name="allTo" type="string" indexed="true" stored="true" omitNorms="true" multiValued="true"/>
+ <field name="flags" type="string" indexed="true" stored="true" omitNorms="true" multiValued="true"/>
+ <field name="attachment" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="attachmentNames" type="string" indexed="true" stored="true" omitNorms="true" multiValued="true"/>
+
+ <!-- Dynamic field definitions allow using convention over configuration
+ for fields via the specification of patterns to match field names.
+ EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
+ RESTRICTION: the glob-like pattern in the name attribute must have
+ a "*" only at the start or the end. -->
+
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pint" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" />
+ <dynamicField name="*_s_ns" type="string" indexed="true" stored="false" />
+ <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
+ <dynamicField name="*_ls" type="plong" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloat" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdouble" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
+ <dynamicField name="*_coordinate" type="pdouble" indexed="true" stored="false" />
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+
+ <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
+
+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+ <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <dynamicField name="random_*" type="random" />
+
+ <!-- uncomment the following to ignore any fields that don't already match an existing
+ field name or dynamic field, rather than reporting them as an error.
+ alternately, change the type="ignored" to some other type e.g. "text" if you want
+ unknown fields indexed and/or stored by default -->
+ <!--dynamicField name="*" type="ignored" multiValued="true" /-->
+
+
+
+
+ <!-- Field to use to determine and enforce document uniqueness.
+ Unless this field is marked with required="false", it will be a required field
+ -->
+ <uniqueKey>messageId</uniqueKey>
+
+ <!-- copyField commands copy one field to another at the time a document
+ is added to the index. It's used either to index the same field differently,
+ or to add multiple fields to the same field for easier/faster searching. -->
+
+ <copyField source="content" dest="text"/>
+ <copyField source="attachmentNames" dest="text"/>
+ <copyField source="attachment" dest="text"/>
+ <copyField source="subject" dest="text"/>
+ <copyField source="allTo" dest="text"/>
+
+ <!-- Above, multiple source fields are copied to the [text] field.
+ Another way to map multiple source fields to the same
+ destination field is to use the dynamic field syntax.
+ copyField also supports a maxChars to copy setting. -->
+
+ <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
+
+ <!-- copy name to alphaNameSort, a field designed for sorting by name -->
+ <!-- <copyField source="name" dest="alphaNameSort"/> -->
+
+
+ <!-- field type definitions. The "name" attribute is
+ just a label to be used by field definitions. The "class"
+ attribute and any other attributes determine the real
+ behavior of the fieldType.
+ Class names starting with "solr" refer to java classes in a
+ standard package such as org.apache.solr.analysis
+ -->
+
+ <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
+
+ <!-- boolean type: "true" or "false" -->
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+
+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
+ currently supported on types that are sorted internally as strings
+ and on numeric types.
+ This includes "string", "boolean", "pint", "pfloat", "plong", "pdate", "pdouble".
+ - If sortMissingLast="true", then a sort on this field will cause documents
+ without the field to come after documents with the field,
+ regardless of the requested sort order (asc or desc).
+ - If sortMissingFirst="true", then a sort on this field will cause documents
+ without the field to come before documents with the field,
+ regardless of the requested sort order.
+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
+ then default lucene sorting will be used which places docs without the
+ field first in an ascending sort and last in a descending sort.
+ -->
+
+ <!--
+ Numeric field types that index values using KD-trees.
+ Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
+ -->
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+ is a more restricted form of the canonical representation of dateTime
+ http://www.w3.org/TR/xmlschema-2/#dateTime
+ The trailing "Z" designates UTC time and is mandatory.
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+ All other components are mandatory.
+
+ Expressions can also be used to denote calculations that should be
+ performed relative to "NOW" to determine the value, ie...
+
+ NOW/HOUR
+ ... Round to the start of the current hour
+ NOW-1DAY
+ ... Exactly 1 day prior to now
+ NOW/DAY+6MONTHS+3DAYS
+ ... 6 months and 3 days in the future from the start of
+ the current day
+
+ Consult the DatePointField javadocs for more information.
+ -->
+ <!-- KD-tree versions of date fields -->
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+
+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
+ <fieldType name="binary" class="solr.BinaryField"/>
+
+ <!-- The "RandomSortField" is not used to store or search any
+ data. You can declare fields of this type it in your schema
+ to generate pseudo-random orderings of your docs for sorting
+ or function purposes. The ordering is generated based on the field
+ name and the version of the index. As long as the index version
+ remains unchanged, and the same field name is reused,
+ the ordering of the docs will be consistent.
+ If you want different psuedo-random orderings of documents,
+ for the same version of the index, use a dynamicField and
+ change the field name in the request.
+ -->
+ <fieldType name="random" class="solr.RandomSortField" indexed="true" />
+
+ <!-- solr.TextField allows the specification of custom text analyzers
+ specified as a tokenizer and a list of token filters. Different
+ analyzers may be specified for indexing and querying.
+
+ The optional positionIncrementGap puts space between multiple fields of
+ this type on the same document, with the purpose of preventing false phrase
+ matching across fields.
+
+ For more info on customizing your analyzer chain, please see
+ http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+ -->
+
+ <!-- One can also specify an existing Analyzer class that has a
+ default constructor via the class attribute on the analyzer element.
+ Example:
+ <fieldType name="text_greek" class="solr.TextField">
+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+ </fieldType>
+ -->
+
+ <!-- A text field that only splits on whitespace for exact matching of words -->
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A general text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ removes stop words from case-insensitive "stopwords.txt"
+ (empty by default), and down cases. At query time only, it
+ also applies synonyms. -->
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English: it
+ tokenizes with StandardTokenizer, removes English stop words
+ (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
+ finally applies Porter's stemming. The query time analyzer
+ also applies synonyms from synonyms.txt. -->
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterGraphFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Just like text_general except it reverses the characters of
+ each token, to enable more efficient leading wildcard queries. -->
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- charFilter + WhitespaceTokenizer -->
+ <!--
+ <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
+ <analyzer>
+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+ -->
+
+ <!-- This is an example of using the KeywordTokenizer along
+ With various TokenFilterFactories to produce a sortable field
+ that does not include some properties of the source text
+ -->
+ <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+ <analyzer>
+ <!-- KeywordTokenizer does no actual tokenizing, so the entire
+ input string is preserved as a single token
+ -->
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <!-- The LowerCase TokenFilter does what you expect, which can be
+ when you want your sorting to be case insensitive
+ -->
+ <filter class="solr.LowerCaseFilterFactory" />
+ <!-- The TrimFilter removes any leading or trailing whitespace -->
+ <filter class="solr.TrimFilterFactory" />
+ <!-- The PatternReplaceFilter gives you the flexibility to use
+ Java Regular expression to replace any sequence of characters
+ matching a pattern with an arbitrary replacement string,
+ which may include back references to portions of the original
+ string matched by the pattern.
+
+ See the Java Regular Expression documentation for more
+ information on pattern and replacement string syntax.
+
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
+ -->
+ <filter class="solr.PatternReplaceFilterFactory"
+ pattern="([^a-z])" replacement="" replace="all"
+ />
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="phonetic" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="payloads" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!--
+ The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
+ a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f
+ Attributes of the DelimitedPayloadTokenFilterFactory :
+ "delimiter" - a one character delimiter. Default is | (pipe)
+ "encoder" - how to encode the following value into a playload
+ float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+ integer -> o.a.l.a.p.IntegerEncoder
+ identity -> o.a.l.a.p.IdentityEncoder
+ Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
+ -->
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- lowercases the entire field value, keeping it as a single token. -->
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at index time, so
+ queries for paths match documents at that path, or in descendent paths
+ -->
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ </fieldType>
+ <!--
+ Example of using PathHierarchyTokenizerFactory at query time, so
+ queries for paths match documents at that path, or in ancestor paths
+ -->
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ </fieldType>
+
+ <!-- since fields of this type are by default not stored or indexed,
+ any data added to them will be ignored outright. -->
+ <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+
+ <!-- This point type indexes the coordinates as separate fields (subFields)
+ If subFieldType is defined, it references a type, and a dynamic field
+ definition is created matching *___<typename>. Alternately, if
+ subFieldSuffix is defined, that is used to create the subFields.
+ Example: if subFieldType="double", then the coordinates would be
+ indexed in fields myloc_0___double,myloc_1___double.
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
+ in fields myloc_0_d,myloc_1_d
+ The subFields are an implementation detail of the fieldType, and end
+ users normally should not need to know about them.
+ -->
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
+
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
+ For more information about this and other Spatial fields new to Solr 4, see:
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
+ -->
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+ geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
+
+ <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
+ Parameters:
+ amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field.
+ The dynamic field must have a field type that extends LongValueFieldType.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ codeStrSuffix: Required. Refers to a dynamic field for the currency code sub-field.
+ The dynamic field must have a field type that extends StrField.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
+ providerClass: Lets you plug in other exchange provider backend:
+ solr.FileExchangeRateProvider is the default and takes one parameter:
+ currencyConfig: name of an xml file holding exchange rates
+ solr.OpenExchangeRatesOrgProvider uses rates from openexchangerates.org:
+ ratesFileLocation: URL or path to rates JSON file (default latest.json on the web)
+ refreshInterval: Number of minutes between each rates fetch (default: 1440, min: 60)
+ -->
+ <fieldType name="currency" class="solr.CurrencyFieldType" amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
+ defaultCurrency="USD" currencyConfig="currency.xml" />
+
+
+ <!-- some examples for different languages (generally ordered by ISO code) -->
+
+ <!-- Arabic -->
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- for any non-arabic -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
+ <!-- normalizes ﻯ to ﻱ, etc -->
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Bulgarian -->
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Catalan -->
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- for any non-CJK -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Kurdish -->
+ <fieldType name="text_ckb" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SoraniNormalizationFilterFactory"/>
+ <!-- for any latin text -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ckb.txt"/>
+ <filter class="solr.SoraniStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Czech -->
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Danish -->
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- German -->
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Greek -->
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- greek specific lowercase for sigma -->
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Spanish -->
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Basque -->
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Persian -->
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- for ZWNJ -->
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Finnish -->
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- French -->
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Irish -->
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes d', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
+ <!-- removes n-, etc. position increments is intentionally false! -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Galician -->
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
+ <filter class="solr.GalicianStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Hindi -->
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <!-- normalizes unicode representation -->
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <!-- normalizes variation in spelling -->
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Hungarian -->
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Armenian -->
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Indonesian -->
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Italian -->
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
+
+ NOTE: If you want to optimize search for precision, use default operator AND in your request
+ handler config (q.op) Use OR if you would like to optimize for recall (default).
+ -->
+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
+ <analyzer>
+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
+
+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
+ is used to segment compounds into its parts and the compound itself is kept as synonym.
+
+ Valid values for attribute mode are:
+ normal: regular segmentation
+ search: segmentation useful for search with synonyms compounds (default)
+ extended: same as search mode, but unigrams unknown words (experimental)
+
+ For some applications it might be good to use search mode for indexing and normal mode for
+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
+
+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ User dictionary attributes are:
+ userDictionary: user dictionary filename
+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
+
+ See lang/userdict_ja.txt for a sample user dictionary file.
+
+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
+
+ See http://wiki.apache.org/solr/JapaneseLanguageSupport for more on Japanese language support.
+ -->
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <!-- Removes tokens with certain part-of-speech tags -->
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <!-- Lower-cases romaji characters -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Korean morphological analysis -->
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- Nori Korean morphological analyzer/tokenizer (KoreanTokenizer)
+ The Korean (nori) analyzer integrates Lucene nori analysis module into Solr.
+ It uses the mecab-ko-dic dictionary to perform morphological analysis of Korean texts.
+
+ This dictionary was built with MeCab, it defines a format for the features adapted
+ for the Korean language.
+
+ Nori also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ The tokenizer supports multiple schema attributes:
+ * userDictionary: User dictionary path.
+ * userDictionaryEncoding: User dictionary encoding.
+ * decompoundMode: Decompound mode. Either 'none', 'discard', 'mixed'. Default is 'discard'.
+ * outputUnknownUnigrams: If true outputs unigrams for unknown words.
+ -->
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <!-- Removes some part of speech stuff like EOMI (Pos.E), you can add a parameter 'tags',
+ listing the tags to remove. By default it removes:
+ E, IC, J, MAG, MAJ, MM, SP, SSC, SSO, SC, SE, XPN, XSA, XSN, XSV, UNA, NA, VSV
+ This is basically an equivalent to stemming.
+ -->
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <!-- Replaces term text with the Hangul transcription of Hanja characters, if applicable: -->
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Latvian -->
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Dutch -->
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Norwegian -->
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory" variant="nb"/> -->
+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory" variant="nb"/> -->
+ <!-- The "light" and "minimal" stemmers support variants: nb=Bokmål, nn=Nynorsk, no=Both -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Portuguese -->
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Romanian -->
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Russian -->
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Swedish -->
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Thai -->
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Turkish -->
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ApostropheFilterFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+ A custom Similarity or SimilarityFactory may be specified here, but
+ the default is fine for most applications.
+ For more info: http://wiki.apache.org/solr/SchemaXml#Similarity
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+ <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-FoldToASCII.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-FoldToASCII.txt
new file mode 100644
index 000000000..9a84b6eac
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-FoldToASCII.txt
@@ -0,0 +1,3813 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# This map converts alphabetic, numeric, and symbolic Unicode characters
+# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode
+# block) into their ASCII equivalents, if one exists.
+#
+# Characters from the following Unicode blocks are converted; however, only
+# those characters with reasonable ASCII alternatives are converted:
+#
+# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf
+# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf
+# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf
+# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf
+# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf
+# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf
+# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf
+# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf
+# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf
+# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf
+# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf
+# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf
+# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf
+# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf
+# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf
+# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf
+#
+# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode
+#
+# The set of character conversions supported by this map is a superset of
+# those supported by the map represented by mapping-ISOLatin1Accent.txt.
+#
+# See the bottom of this file for the Perl script used to generate the contents
+# of this file (without this header) from ASCIIFoldingFilter.java.
+
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+
+# À [LATIN CAPITAL LETTER A WITH GRAVE]
+"\u00C0" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH ACUTE]
+"\u00C1" => "A"
+
+# Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+"\u00C2" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH TILDE]
+"\u00C3" => "A"
+
+# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
+"\u00C4" => "A"
+
+# Ã… [LATIN CAPITAL LETTER A WITH RING ABOVE]
+"\u00C5" => "A"
+
+# Ā [LATIN CAPITAL LETTER A WITH MACRON]
+"\u0100" => "A"
+
+# Ä‚ [LATIN CAPITAL LETTER A WITH BREVE]
+"\u0102" => "A"
+
+# Ä„ [LATIN CAPITAL LETTER A WITH OGONEK]
+"\u0104" => "A"
+
+# Æ http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
+"\u018F" => "A"
+
+# Ç [LATIN CAPITAL LETTER A WITH CARON]
+"\u01CD" => "A"
+
+# Çž [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DE" => "A"
+
+# Ç  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E0" => "A"
+
+# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FA" => "A"
+
+# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+"\u0200" => "A"
+
+# È‚ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+"\u0202" => "A"
+
+# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
+"\u0226" => "A"
+
+# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
+"\u023A" => "A"
+
+# á´€ [LATIN LETTER SMALL CAPITAL A]
+"\u1D00" => "A"
+
+# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
+"\u1E00" => "A"
+
+# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
+"\u1EA0" => "A"
+
+# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+"\u1EA2" => "A"
+
+# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA4" => "A"
+
+# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA6" => "A"
+
+# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA8" => "A"
+
+# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAA" => "A"
+
+# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAC" => "A"
+
+# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+"\u1EAE" => "A"
+
+# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+"\u1EB0" => "A"
+
+# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB2" => "A"
+
+# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+"\u1EB4" => "A"
+
+# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB6" => "A"
+
+# â’¶ [CIRCLED LATIN CAPITAL LETTER A]
+"\u24B6" => "A"
+
+# A [FULLWIDTH LATIN CAPITAL LETTER A]
+"\uFF21" => "A"
+
+# à [LATIN SMALL LETTER A WITH GRAVE]
+"\u00E0" => "a"
+
+# á [LATIN SMALL LETTER A WITH ACUTE]
+"\u00E1" => "a"
+
+# â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
+"\u00E2" => "a"
+
+# ã [LATIN SMALL LETTER A WITH TILDE]
+"\u00E3" => "a"
+
+# ä [LATIN SMALL LETTER A WITH DIAERESIS]
+"\u00E4" => "a"
+
+# å [LATIN SMALL LETTER A WITH RING ABOVE]
+"\u00E5" => "a"
+
+# Ä [LATIN SMALL LETTER A WITH MACRON]
+"\u0101" => "a"
+
+# ă [LATIN SMALL LETTER A WITH BREVE]
+"\u0103" => "a"
+
+# Ä… [LATIN SMALL LETTER A WITH OGONEK]
+"\u0105" => "a"
+
+# ÇŽ [LATIN SMALL LETTER A WITH CARON]
+"\u01CE" => "a"
+
+# ÇŸ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DF" => "a"
+
+# Ç¡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E1" => "a"
+
+# Ç» [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FB" => "a"
+
+# È [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+"\u0201" => "a"
+
+# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
+"\u0203" => "a"
+
+# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
+"\u0227" => "a"
+
+# É [LATIN SMALL LETTER TURNED A]
+"\u0250" => "a"
+
+# É™ [LATIN SMALL LETTER SCHWA]
+"\u0259" => "a"
+
+# Éš [LATIN SMALL LETTER SCHWA WITH HOOK]
+"\u025A" => "a"
+
+# á¶ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
+"\u1D8F" => "a"
+
+# á¶• [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
+"\u1D95" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH RING BELOW]
+"\u1E01" => "a"
+
+# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
+"\u1E9A" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH DOT BELOW]
+"\u1EA1" => "a"
+
+# ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
+"\u1EA3" => "a"
+
+# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA5" => "a"
+
+# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA7" => "a"
+
+# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA9" => "a"
+
+# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAB" => "a"
+
+# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAD" => "a"
+
+# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+"\u1EAF" => "a"
+
+# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+"\u1EB1" => "a"
+
+# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB3" => "a"
+
+# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
+"\u1EB5" => "a"
+
+# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB7" => "a"
+
+# â‚ [LATIN SUBSCRIPT SMALL LETTER A]
+"\u2090" => "a"
+
+# â‚” [LATIN SUBSCRIPT SMALL LETTER SCHWA]
+"\u2094" => "a"
+
+# â“ [CIRCLED LATIN SMALL LETTER A]
+"\u24D0" => "a"
+
+# â±¥ [LATIN SMALL LETTER A WITH STROKE]
+"\u2C65" => "a"
+
+# Ɐ [LATIN CAPITAL LETTER TURNED A]
+"\u2C6F" => "a"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER A]
+"\uFF41" => "a"
+
+# Ꜳ [LATIN CAPITAL LETTER AA]
+"\uA732" => "AA"
+
+# Æ [LATIN CAPITAL LETTER AE]
+"\u00C6" => "AE"
+
+# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
+"\u01E2" => "AE"
+
+# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
+"\u01FC" => "AE"
+
+# á´ [LATIN LETTER SMALL CAPITAL AE]
+"\u1D01" => "AE"
+
+# Ꜵ [LATIN CAPITAL LETTER AO]
+"\uA734" => "AO"
+
+# Ꜷ [LATIN CAPITAL LETTER AU]
+"\uA736" => "AU"
+
+# Ꜹ [LATIN CAPITAL LETTER AV]
+"\uA738" => "AV"
+
+# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
+"\uA73A" => "AV"
+
+# Ꜽ [LATIN CAPITAL LETTER AY]
+"\uA73C" => "AY"
+
+# ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
+"\u249C" => "(a)"
+
+# ꜳ [LATIN SMALL LETTER AA]
+"\uA733" => "aa"
+
+# æ [LATIN SMALL LETTER AE]
+"\u00E6" => "ae"
+
+# ǣ [LATIN SMALL LETTER AE WITH MACRON]
+"\u01E3" => "ae"
+
+# ǽ [LATIN SMALL LETTER AE WITH ACUTE]
+"\u01FD" => "ae"
+
+# á´‚ [LATIN SMALL LETTER TURNED AE]
+"\u1D02" => "ae"
+
+# ꜵ [LATIN SMALL LETTER AO]
+"\uA735" => "ao"
+
+# ꜷ [LATIN SMALL LETTER AU]
+"\uA737" => "au"
+
+# ꜹ [LATIN SMALL LETTER AV]
+"\uA739" => "av"
+
+# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
+"\uA73B" => "av"
+
+# ꜽ [LATIN SMALL LETTER AY]
+"\uA73D" => "ay"
+
+# Æ [LATIN CAPITAL LETTER B WITH HOOK]
+"\u0181" => "B"
+
+# Æ‚ [LATIN CAPITAL LETTER B WITH TOPBAR]
+"\u0182" => "B"
+
+# Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
+"\u0243" => "B"
+
+# Ê™ [LATIN LETTER SMALL CAPITAL B]
+"\u0299" => "B"
+
+# á´ƒ [LATIN LETTER SMALL CAPITAL BARRED B]
+"\u1D03" => "B"
+
+# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
+"\u1E02" => "B"
+
+# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
+"\u1E04" => "B"
+
+# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
+"\u1E06" => "B"
+
+# â’· [CIRCLED LATIN CAPITAL LETTER B]
+"\u24B7" => "B"
+
+# ï¼¢ [FULLWIDTH LATIN CAPITAL LETTER B]
+"\uFF22" => "B"
+
+# ƀ [LATIN SMALL LETTER B WITH STROKE]
+"\u0180" => "b"
+
+# ƃ [LATIN SMALL LETTER B WITH TOPBAR]
+"\u0183" => "b"
+
+# É“ [LATIN SMALL LETTER B WITH HOOK]
+"\u0253" => "b"
+
+# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
+"\u1D6C" => "b"
+
+# á¶€ [LATIN SMALL LETTER B WITH PALATAL HOOK]
+"\u1D80" => "b"
+
+# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
+"\u1E03" => "b"
+
+# ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
+"\u1E05" => "b"
+
+# ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
+"\u1E07" => "b"
+
+# â“‘ [CIRCLED LATIN SMALL LETTER B]
+"\u24D1" => "b"
+
+# b [FULLWIDTH LATIN SMALL LETTER B]
+"\uFF42" => "b"
+
+# â’ [PARENTHESIZED LATIN SMALL LETTER B]
+"\u249D" => "(b)"
+
+# Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
+"\u00C7" => "C"
+
+# Ć [LATIN CAPITAL LETTER C WITH ACUTE]
+"\u0106" => "C"
+
+# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+"\u0108" => "C"
+
+# ÄŠ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
+"\u010A" => "C"
+
+# Č [LATIN CAPITAL LETTER C WITH CARON]
+"\u010C" => "C"
+
+# Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
+"\u0187" => "C"
+
+# È» [LATIN CAPITAL LETTER C WITH STROKE]
+"\u023B" => "C"
+
+# Ê— [LATIN LETTER STRETCHED C]
+"\u0297" => "C"
+
+# á´„ [LATIN LETTER SMALL CAPITAL C]
+"\u1D04" => "C"
+
+# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E08" => "C"
+
+# â’¸ [CIRCLED LATIN CAPITAL LETTER C]
+"\u24B8" => "C"
+
+# ï¼£ [FULLWIDTH LATIN CAPITAL LETTER C]
+"\uFF23" => "C"
+
+# ç [LATIN SMALL LETTER C WITH CEDILLA]
+"\u00E7" => "c"
+
+# ć [LATIN SMALL LETTER C WITH ACUTE]
+"\u0107" => "c"
+
+# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
+"\u0109" => "c"
+
+# Ä‹ [LATIN SMALL LETTER C WITH DOT ABOVE]
+"\u010B" => "c"
+
+# Ä [LATIN SMALL LETTER C WITH CARON]
+"\u010D" => "c"
+
+# ƈ [LATIN SMALL LETTER C WITH HOOK]
+"\u0188" => "c"
+
+# ȼ [LATIN SMALL LETTER C WITH STROKE]
+"\u023C" => "c"
+
+# É• [LATIN SMALL LETTER C WITH CURL]
+"\u0255" => "c"
+
+# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E09" => "c"
+
+# ↄ [LATIN SMALL LETTER REVERSED C]
+"\u2184" => "c"
+
+# â“’ [CIRCLED LATIN SMALL LETTER C]
+"\u24D2" => "c"
+
+# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
+"\uA73E" => "c"
+
+# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
+"\uA73F" => "c"
+
+# c [FULLWIDTH LATIN SMALL LETTER C]
+"\uFF43" => "c"
+
+# â’ž [PARENTHESIZED LATIN SMALL LETTER C]
+"\u249E" => "(c)"
+
+# Ã [LATIN CAPITAL LETTER ETH]
+"\u00D0" => "D"
+
+# ÄŽ [LATIN CAPITAL LETTER D WITH CARON]
+"\u010E" => "D"
+
+# Ä [LATIN CAPITAL LETTER D WITH STROKE]
+"\u0110" => "D"
+
+# Ɖ [LATIN CAPITAL LETTER AFRICAN D]
+"\u0189" => "D"
+
+# ÆŠ [LATIN CAPITAL LETTER D WITH HOOK]
+"\u018A" => "D"
+
+# Æ‹ [LATIN CAPITAL LETTER D WITH TOPBAR]
+"\u018B" => "D"
+
+# á´… [LATIN LETTER SMALL CAPITAL D]
+"\u1D05" => "D"
+
+# á´† [LATIN LETTER SMALL CAPITAL ETH]
+"\u1D06" => "D"
+
+# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
+"\u1E0A" => "D"
+
+# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
+"\u1E0C" => "D"
+
+# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
+"\u1E0E" => "D"
+
+# Ḡ[LATIN CAPITAL LETTER D WITH CEDILLA]
+"\u1E10" => "D"
+
+# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E12" => "D"
+
+# â’¹ [CIRCLED LATIN CAPITAL LETTER D]
+"\u24B9" => "D"
+
+# ê¹ [LATIN CAPITAL LETTER INSULAR D]
+"\uA779" => "D"
+
+# D [FULLWIDTH LATIN CAPITAL LETTER D]
+"\uFF24" => "D"
+
+# ð [LATIN SMALL LETTER ETH]
+"\u00F0" => "d"
+
+# Ä [LATIN SMALL LETTER D WITH CARON]
+"\u010F" => "d"
+
+# Ä‘ [LATIN SMALL LETTER D WITH STROKE]
+"\u0111" => "d"
+
+# ƌ [LATIN SMALL LETTER D WITH TOPBAR]
+"\u018C" => "d"
+
+# È¡ [LATIN SMALL LETTER D WITH CURL]
+"\u0221" => "d"
+
+# É– [LATIN SMALL LETTER D WITH TAIL]
+"\u0256" => "d"
+
+# É— [LATIN SMALL LETTER D WITH HOOK]
+"\u0257" => "d"
+
+# áµ­ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
+"\u1D6D" => "d"
+
+# á¶ [LATIN SMALL LETTER D WITH PALATAL HOOK]
+"\u1D81" => "d"
+
+# á¶‘ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
+"\u1D91" => "d"
+
+# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
+"\u1E0B" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH DOT BELOW]
+"\u1E0D" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH LINE BELOW]
+"\u1E0F" => "d"
+
+# ḑ [LATIN SMALL LETTER D WITH CEDILLA]
+"\u1E11" => "d"
+
+# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E13" => "d"
+
+# â““ [CIRCLED LATIN SMALL LETTER D]
+"\u24D3" => "d"
+
+# êº [LATIN SMALL LETTER INSULAR D]
+"\uA77A" => "d"
+
+# d [FULLWIDTH LATIN SMALL LETTER D]
+"\uFF44" => "d"
+
+# Ç„ [LATIN CAPITAL LETTER DZ WITH CARON]
+"\u01C4" => "DZ"
+
+# DZ [LATIN CAPITAL LETTER DZ]
+"\u01F1" => "DZ"
+
+# Ç… [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
+"\u01C5" => "Dz"
+
+# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
+"\u01F2" => "Dz"
+
+# â’Ÿ [PARENTHESIZED LATIN SMALL LETTER D]
+"\u249F" => "(d)"
+
+# ȸ [LATIN SMALL LETTER DB DIGRAPH]
+"\u0238" => "db"
+
+# dž [LATIN SMALL LETTER DZ WITH CARON]
+"\u01C6" => "dz"
+
+# dz [LATIN SMALL LETTER DZ]
+"\u01F3" => "dz"
+
+# ʣ [LATIN SMALL LETTER DZ DIGRAPH]
+"\u02A3" => "dz"
+
+# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
+"\u02A5" => "dz"
+
+# È [LATIN CAPITAL LETTER E WITH GRAVE]
+"\u00C8" => "E"
+
+# É [LATIN CAPITAL LETTER E WITH ACUTE]
+"\u00C9" => "E"
+
+# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+"\u00CA" => "E"
+
+# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
+"\u00CB" => "E"
+
+# Ä’ [LATIN CAPITAL LETTER E WITH MACRON]
+"\u0112" => "E"
+
+# Ä” [LATIN CAPITAL LETTER E WITH BREVE]
+"\u0114" => "E"
+
+# Ä– [LATIN CAPITAL LETTER E WITH DOT ABOVE]
+"\u0116" => "E"
+
+# Ę [LATIN CAPITAL LETTER E WITH OGONEK]
+"\u0118" => "E"
+
+# Äš [LATIN CAPITAL LETTER E WITH CARON]
+"\u011A" => "E"
+
+# ÆŽ [LATIN CAPITAL LETTER REVERSED E]
+"\u018E" => "E"
+
+# Æ [LATIN CAPITAL LETTER OPEN E]
+"\u0190" => "E"
+
+# È„ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+"\u0204" => "E"
+
+# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+"\u0206" => "E"
+
+# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
+"\u0228" => "E"
+
+# Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
+"\u0246" => "E"
+
+# á´‡ [LATIN LETTER SMALL CAPITAL E]
+"\u1D07" => "E"
+
+# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+"\u1E14" => "E"
+
+# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+"\u1E16" => "E"
+
+# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E18" => "E"
+
+# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
+"\u1E1A" => "E"
+
+# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1C" => "E"
+
+# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
+"\u1EB8" => "E"
+
+# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+"\u1EBA" => "E"
+
+# Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
+"\u1EBC" => "E"
+
+# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBE" => "E"
+
+# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC0" => "E"
+
+# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC2" => "E"
+
+# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC4" => "E"
+
+# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC6" => "E"
+
+# â’º [CIRCLED LATIN CAPITAL LETTER E]
+"\u24BA" => "E"
+
+# â±» [LATIN LETTER SMALL CAPITAL TURNED E]
+"\u2C7B" => "E"
+
+# ï¼¥ [FULLWIDTH LATIN CAPITAL LETTER E]
+"\uFF25" => "E"
+
+# è [LATIN SMALL LETTER E WITH GRAVE]
+"\u00E8" => "e"
+
+# é [LATIN SMALL LETTER E WITH ACUTE]
+"\u00E9" => "e"
+
+# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
+"\u00EA" => "e"
+
+# ë [LATIN SMALL LETTER E WITH DIAERESIS]
+"\u00EB" => "e"
+
+# Ä“ [LATIN SMALL LETTER E WITH MACRON]
+"\u0113" => "e"
+
+# Ä• [LATIN SMALL LETTER E WITH BREVE]
+"\u0115" => "e"
+
+# Ä— [LATIN SMALL LETTER E WITH DOT ABOVE]
+"\u0117" => "e"
+
+# Ä™ [LATIN SMALL LETTER E WITH OGONEK]
+"\u0119" => "e"
+
+# Ä› [LATIN SMALL LETTER E WITH CARON]
+"\u011B" => "e"
+
+# Ç [LATIN SMALL LETTER TURNED E]
+"\u01DD" => "e"
+
+# È… [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+"\u0205" => "e"
+
+# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
+"\u0207" => "e"
+
+# È© [LATIN SMALL LETTER E WITH CEDILLA]
+"\u0229" => "e"
+
+# ɇ [LATIN SMALL LETTER E WITH STROKE]
+"\u0247" => "e"
+
+# ɘ [LATIN SMALL LETTER REVERSED E]
+"\u0258" => "e"
+
+# É› [LATIN SMALL LETTER OPEN E]
+"\u025B" => "e"
+
+# ɜ [LATIN SMALL LETTER REVERSED OPEN E]
+"\u025C" => "e"
+
+# É [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
+"\u025D" => "e"
+
+# Éž [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
+"\u025E" => "e"
+
+# Êš [LATIN SMALL LETTER CLOSED OPEN E]
+"\u029A" => "e"
+
+# á´ˆ [LATIN SMALL LETTER TURNED OPEN E]
+"\u1D08" => "e"
+
+# á¶’ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
+"\u1D92" => "e"
+
+# á¶“ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
+"\u1D93" => "e"
+
+# á¶” [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
+"\u1D94" => "e"
+
+# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+"\u1E15" => "e"
+
+# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+"\u1E17" => "e"
+
+# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E19" => "e"
+
+# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
+"\u1E1B" => "e"
+
+# Ḡ[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1D" => "e"
+
+# ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
+"\u1EB9" => "e"
+
+# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
+"\u1EBB" => "e"
+
+# ẽ [LATIN SMALL LETTER E WITH TILDE]
+"\u1EBD" => "e"
+
+# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBF" => "e"
+
+# á» [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC1" => "e"
+
+# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC3" => "e"
+
+# á»… [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC5" => "e"
+
+# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC7" => "e"
+
+# â‚‘ [LATIN SUBSCRIPT SMALL LETTER E]
+"\u2091" => "e"
+
+# â“” [CIRCLED LATIN SMALL LETTER E]
+"\u24D4" => "e"
+
+# ⱸ [LATIN SMALL LETTER E WITH NOTCH]
+"\u2C78" => "e"
+
+# ï½… [FULLWIDTH LATIN SMALL LETTER E]
+"\uFF45" => "e"
+
+# â’  [PARENTHESIZED LATIN SMALL LETTER E]
+"\u24A0" => "(e)"
+
+# Æ‘ [LATIN CAPITAL LETTER F WITH HOOK]
+"\u0191" => "F"
+
+# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
+"\u1E1E" => "F"
+
+# â’» [CIRCLED LATIN CAPITAL LETTER F]
+"\u24BB" => "F"
+
+# ꜰ [LATIN LETTER SMALL CAPITAL F]
+"\uA730" => "F"
+
+# ê» [LATIN CAPITAL LETTER INSULAR F]
+"\uA77B" => "F"
+
+# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
+"\uA7FB" => "F"
+
+# F [FULLWIDTH LATIN CAPITAL LETTER F]
+"\uFF26" => "F"
+
+# Æ’ [LATIN SMALL LETTER F WITH HOOK]
+"\u0192" => "f"
+
+# áµ® [LATIN SMALL LETTER F WITH MIDDLE TILDE]
+"\u1D6E" => "f"
+
+# á¶‚ [LATIN SMALL LETTER F WITH PALATAL HOOK]
+"\u1D82" => "f"
+
+# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
+"\u1E1F" => "f"
+
+# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+"\u1E9B" => "f"
+
+# â“• [CIRCLED LATIN SMALL LETTER F]
+"\u24D5" => "f"
+
+# ê¼ [LATIN SMALL LETTER INSULAR F]
+"\uA77C" => "f"
+
+# f [FULLWIDTH LATIN SMALL LETTER F]
+"\uFF46" => "f"
+
+# â’¡ [PARENTHESIZED LATIN SMALL LETTER F]
+"\u24A1" => "(f)"
+
+# ff [LATIN SMALL LIGATURE FF]
+"\uFB00" => "ff"
+
+# ffi [LATIN SMALL LIGATURE FFI]
+"\uFB03" => "ffi"
+
+# ffl [LATIN SMALL LIGATURE FFL]
+"\uFB04" => "ffl"
+
+# ï¬ [LATIN SMALL LIGATURE FI]
+"\uFB01" => "fi"
+
+# fl [LATIN SMALL LIGATURE FL]
+"\uFB02" => "fl"
+
+# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+"\u011C" => "G"
+
+# Äž [LATIN CAPITAL LETTER G WITH BREVE]
+"\u011E" => "G"
+
+# Ä  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
+"\u0120" => "G"
+
+# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
+"\u0122" => "G"
+
+# Æ“ [LATIN CAPITAL LETTER G WITH HOOK]
+"\u0193" => "G"
+
+# Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
+"\u01E4" => "G"
+
+# ǥ [LATIN SMALL LETTER G WITH STROKE]
+"\u01E5" => "G"
+
+# Ǧ [LATIN CAPITAL LETTER G WITH CARON]
+"\u01E6" => "G"
+
+# ǧ [LATIN SMALL LETTER G WITH CARON]
+"\u01E7" => "G"
+
+# Ç´ [LATIN CAPITAL LETTER G WITH ACUTE]
+"\u01F4" => "G"
+
+# ɢ [LATIN LETTER SMALL CAPITAL G]
+"\u0262" => "G"
+
+# Ê› [LATIN LETTER SMALL CAPITAL G WITH HOOK]
+"\u029B" => "G"
+
+# Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
+"\u1E20" => "G"
+
+# â’¼ [CIRCLED LATIN CAPITAL LETTER G]
+"\u24BC" => "G"
+
+# ê½ [LATIN CAPITAL LETTER INSULAR G]
+"\uA77D" => "G"
+
+# ê¾ [LATIN CAPITAL LETTER TURNED INSULAR G]
+"\uA77E" => "G"
+
+# ï¼§ [FULLWIDTH LATIN CAPITAL LETTER G]
+"\uFF27" => "G"
+
+# Ä [LATIN SMALL LETTER G WITH CIRCUMFLEX]
+"\u011D" => "g"
+
+# ÄŸ [LATIN SMALL LETTER G WITH BREVE]
+"\u011F" => "g"
+
+# Ä¡ [LATIN SMALL LETTER G WITH DOT ABOVE]
+"\u0121" => "g"
+
+# ģ [LATIN SMALL LETTER G WITH CEDILLA]
+"\u0123" => "g"
+
+# ǵ [LATIN SMALL LETTER G WITH ACUTE]
+"\u01F5" => "g"
+
+# É  [LATIN SMALL LETTER G WITH HOOK]
+"\u0260" => "g"
+
+# É¡ [LATIN SMALL LETTER SCRIPT G]
+"\u0261" => "g"
+
+# áµ· [LATIN SMALL LETTER TURNED G]
+"\u1D77" => "g"
+
+# áµ¹ [LATIN SMALL LETTER INSULAR G]
+"\u1D79" => "g"
+
+# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
+"\u1D83" => "g"
+
+# ḡ [LATIN SMALL LETTER G WITH MACRON]
+"\u1E21" => "g"
+
+# â“– [CIRCLED LATIN SMALL LETTER G]
+"\u24D6" => "g"
+
+# ê¿ [LATIN SMALL LETTER TURNED INSULAR G]
+"\uA77F" => "g"
+
+# g [FULLWIDTH LATIN SMALL LETTER G]
+"\uFF47" => "g"
+
+# â’¢ [PARENTHESIZED LATIN SMALL LETTER G]
+"\u24A2" => "(g)"
+
+# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+"\u0124" => "H"
+
+# Ħ [LATIN CAPITAL LETTER H WITH STROKE]
+"\u0126" => "H"
+
+# Èž [LATIN CAPITAL LETTER H WITH CARON]
+"\u021E" => "H"
+
+# ʜ [LATIN LETTER SMALL CAPITAL H]
+"\u029C" => "H"
+
+# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
+"\u1E22" => "H"
+
+# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
+"\u1E24" => "H"
+
+# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
+"\u1E26" => "H"
+
+# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
+"\u1E28" => "H"
+
+# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
+"\u1E2A" => "H"
+
+# â’½ [CIRCLED LATIN CAPITAL LETTER H]
+"\u24BD" => "H"
+
+# â±§ [LATIN CAPITAL LETTER H WITH DESCENDER]
+"\u2C67" => "H"
+
+# â±µ [LATIN CAPITAL LETTER HALF H]
+"\u2C75" => "H"
+
+# H [FULLWIDTH LATIN CAPITAL LETTER H]
+"\uFF28" => "H"
+
+# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
+"\u0125" => "h"
+
+# ħ [LATIN SMALL LETTER H WITH STROKE]
+"\u0127" => "h"
+
+# ÈŸ [LATIN SMALL LETTER H WITH CARON]
+"\u021F" => "h"
+
+# ɥ [LATIN SMALL LETTER TURNED H]
+"\u0265" => "h"
+
+# ɦ [LATIN SMALL LETTER H WITH HOOK]
+"\u0266" => "h"
+
+# Ê® [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
+"\u02AE" => "h"
+
+# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
+"\u02AF" => "h"
+
+# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
+"\u1E23" => "h"
+
+# ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
+"\u1E25" => "h"
+
+# ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
+"\u1E27" => "h"
+
+# ḩ [LATIN SMALL LETTER H WITH CEDILLA]
+"\u1E29" => "h"
+
+# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
+"\u1E2B" => "h"
+
+# ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
+"\u1E96" => "h"
+
+# â“— [CIRCLED LATIN SMALL LETTER H]
+"\u24D7" => "h"
+
+# ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
+"\u2C68" => "h"
+
+# â±¶ [LATIN SMALL LETTER HALF H]
+"\u2C76" => "h"
+
+# h [FULLWIDTH LATIN SMALL LETTER H]
+"\uFF48" => "h"
+
+# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
+"\u01F6" => "HV"
+
+# â’£ [PARENTHESIZED LATIN SMALL LETTER H]
+"\u24A3" => "(h)"
+
+# Æ• [LATIN SMALL LETTER HV]
+"\u0195" => "hv"
+
+# Ì [LATIN CAPITAL LETTER I WITH GRAVE]
+"\u00CC" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH ACUTE]
+"\u00CD" => "I"
+
+# ÃŽ [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+"\u00CE" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH DIAERESIS]
+"\u00CF" => "I"
+
+# Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
+"\u0128" => "I"
+
+# Ī [LATIN CAPITAL LETTER I WITH MACRON]
+"\u012A" => "I"
+
+# Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
+"\u012C" => "I"
+
+# Ä® [LATIN CAPITAL LETTER I WITH OGONEK]
+"\u012E" => "I"
+
+# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
+"\u0130" => "I"
+
+# Æ– [LATIN CAPITAL LETTER IOTA]
+"\u0196" => "I"
+
+# Æ— [LATIN CAPITAL LETTER I WITH STROKE]
+"\u0197" => "I"
+
+# Ç [LATIN CAPITAL LETTER I WITH CARON]
+"\u01CF" => "I"
+
+# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+"\u0208" => "I"
+
+# ÈŠ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+"\u020A" => "I"
+
+# ɪ [LATIN LETTER SMALL CAPITAL I]
+"\u026A" => "I"
+
+# áµ» [LATIN SMALL CAPITAL LETTER I WITH STROKE]
+"\u1D7B" => "I"
+
+# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
+"\u1E2C" => "I"
+
+# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2E" => "I"
+
+# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+"\u1EC8" => "I"
+
+# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
+"\u1ECA" => "I"
+
+# â’¾ [CIRCLED LATIN CAPITAL LETTER I]
+"\u24BE" => "I"
+
+# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
+"\uA7FE" => "I"
+
+# I [FULLWIDTH LATIN CAPITAL LETTER I]
+"\uFF29" => "I"
+
+# ì [LATIN SMALL LETTER I WITH GRAVE]
+"\u00EC" => "i"
+
+# í [LATIN SMALL LETTER I WITH ACUTE]
+"\u00ED" => "i"
+
+# î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
+"\u00EE" => "i"
+
+# ï [LATIN SMALL LETTER I WITH DIAERESIS]
+"\u00EF" => "i"
+
+# Ä© [LATIN SMALL LETTER I WITH TILDE]
+"\u0129" => "i"
+
+# Ä« [LATIN SMALL LETTER I WITH MACRON]
+"\u012B" => "i"
+
+# Ä­ [LATIN SMALL LETTER I WITH BREVE]
+"\u012D" => "i"
+
+# į [LATIN SMALL LETTER I WITH OGONEK]
+"\u012F" => "i"
+
+# ı [LATIN SMALL LETTER DOTLESS I]
+"\u0131" => "i"
+
+# Ç [LATIN SMALL LETTER I WITH CARON]
+"\u01D0" => "i"
+
+# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+"\u0209" => "i"
+
+# È‹ [LATIN SMALL LETTER I WITH INVERTED BREVE]
+"\u020B" => "i"
+
+# ɨ [LATIN SMALL LETTER I WITH STROKE]
+"\u0268" => "i"
+
+# á´‰ [LATIN SMALL LETTER TURNED I]
+"\u1D09" => "i"
+
+# áµ¢ [LATIN SUBSCRIPT SMALL LETTER I]
+"\u1D62" => "i"
+
+# áµ¼ [LATIN SMALL LETTER IOTA WITH STROKE]
+"\u1D7C" => "i"
+
+# á¶– [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
+"\u1D96" => "i"
+
+# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
+"\u1E2D" => "i"
+
+# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2F" => "i"
+
+# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
+"\u1EC9" => "i"
+
+# ị [LATIN SMALL LETTER I WITH DOT BELOW]
+"\u1ECB" => "i"
+
+# â± [SUPERSCRIPT LATIN SMALL LETTER I]
+"\u2071" => "i"
+
+# ⓘ [CIRCLED LATIN SMALL LETTER I]
+"\u24D8" => "i"
+
+# i [FULLWIDTH LATIN SMALL LETTER I]
+"\uFF49" => "i"
+
+# IJ [LATIN CAPITAL LIGATURE IJ]
+"\u0132" => "IJ"
+
+# â’¤ [PARENTHESIZED LATIN SMALL LETTER I]
+"\u24A4" => "(i)"
+
+# ij [LATIN SMALL LIGATURE IJ]
+"\u0133" => "ij"
+
+# Ä´ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+"\u0134" => "J"
+
+# Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
+"\u0248" => "J"
+
+# á´Š [LATIN LETTER SMALL CAPITAL J]
+"\u1D0A" => "J"
+
+# â’¿ [CIRCLED LATIN CAPITAL LETTER J]
+"\u24BF" => "J"
+
+# J [FULLWIDTH LATIN CAPITAL LETTER J]
+"\uFF2A" => "J"
+
+# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
+"\u0135" => "j"
+
+# ǰ [LATIN SMALL LETTER J WITH CARON]
+"\u01F0" => "j"
+
+# È· [LATIN SMALL LETTER DOTLESS J]
+"\u0237" => "j"
+
+# ɉ [LATIN SMALL LETTER J WITH STROKE]
+"\u0249" => "j"
+
+# ÉŸ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
+"\u025F" => "j"
+
+# Ê„ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
+"\u0284" => "j"
+
+# Ê [LATIN SMALL LETTER J WITH CROSSED-TAIL]
+"\u029D" => "j"
+
+# â“™ [CIRCLED LATIN SMALL LETTER J]
+"\u24D9" => "j"
+
+# â±¼ [LATIN SUBSCRIPT SMALL LETTER J]
+"\u2C7C" => "j"
+
+# j [FULLWIDTH LATIN SMALL LETTER J]
+"\uFF4A" => "j"
+
+# â’¥ [PARENTHESIZED LATIN SMALL LETTER J]
+"\u24A5" => "(j)"
+
+# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
+"\u0136" => "K"
+
+# Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
+"\u0198" => "K"
+
+# Ǩ [LATIN CAPITAL LETTER K WITH CARON]
+"\u01E8" => "K"
+
+# á´‹ [LATIN LETTER SMALL CAPITAL K]
+"\u1D0B" => "K"
+
+# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
+"\u1E30" => "K"
+
+# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
+"\u1E32" => "K"
+
+# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
+"\u1E34" => "K"
+
+# â“€ [CIRCLED LATIN CAPITAL LETTER K]
+"\u24C0" => "K"
+
+# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
+"\u2C69" => "K"
+
+# ê€ [LATIN CAPITAL LETTER K WITH STROKE]
+"\uA740" => "K"
+
+# ê‚ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
+"\uA742" => "K"
+
+# ê„ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA744" => "K"
+
+# K [FULLWIDTH LATIN CAPITAL LETTER K]
+"\uFF2B" => "K"
+
+# Ä· [LATIN SMALL LETTER K WITH CEDILLA]
+"\u0137" => "k"
+
+# Æ™ [LATIN SMALL LETTER K WITH HOOK]
+"\u0199" => "k"
+
+# Ç© [LATIN SMALL LETTER K WITH CARON]
+"\u01E9" => "k"
+
+# Êž [LATIN SMALL LETTER TURNED K]
+"\u029E" => "k"
+
+# á¶„ [LATIN SMALL LETTER K WITH PALATAL HOOK]
+"\u1D84" => "k"
+
+# ḱ [LATIN SMALL LETTER K WITH ACUTE]
+"\u1E31" => "k"
+
+# ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
+"\u1E33" => "k"
+
+# ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
+"\u1E35" => "k"
+
+# ⓚ [CIRCLED LATIN SMALL LETTER K]
+"\u24DA" => "k"
+
+# ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
+"\u2C6A" => "k"
+
+# ê [LATIN SMALL LETTER K WITH STROKE]
+"\uA741" => "k"
+
+# êƒ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
+"\uA743" => "k"
+
+# ê… [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA745" => "k"
+
+# k [FULLWIDTH LATIN SMALL LETTER K]
+"\uFF4B" => "k"
+
+# â’¦ [PARENTHESIZED LATIN SMALL LETTER K]
+"\u24A6" => "(k)"
+
+# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
+"\u0139" => "L"
+
+# Ä» [LATIN CAPITAL LETTER L WITH CEDILLA]
+"\u013B" => "L"
+
+# Ľ [LATIN CAPITAL LETTER L WITH CARON]
+"\u013D" => "L"
+
+# Ä¿ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
+"\u013F" => "L"
+
+# Å [LATIN CAPITAL LETTER L WITH STROKE]
+"\u0141" => "L"
+
+# Ƚ [LATIN CAPITAL LETTER L WITH BAR]
+"\u023D" => "L"
+
+# ÊŸ [LATIN LETTER SMALL CAPITAL L]
+"\u029F" => "L"
+
+# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
+"\u1D0C" => "L"
+
+# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
+"\u1E36" => "L"
+
+# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E38" => "L"
+
+# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
+"\u1E3A" => "L"
+
+# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3C" => "L"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER L]
+"\u24C1" => "L"
+
+# â±  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
+"\u2C60" => "L"
+
+# â±¢ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
+"\u2C62" => "L"
+
+# ê† [LATIN CAPITAL LETTER BROKEN L]
+"\uA746" => "L"
+
+# êˆ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
+"\uA748" => "L"
+
+# Ꞁ [LATIN CAPITAL LETTER TURNED L]
+"\uA780" => "L"
+
+# L [FULLWIDTH LATIN CAPITAL LETTER L]
+"\uFF2C" => "L"
+
+# ĺ [LATIN SMALL LETTER L WITH ACUTE]
+"\u013A" => "l"
+
+# ļ [LATIN SMALL LETTER L WITH CEDILLA]
+"\u013C" => "l"
+
+# ľ [LATIN SMALL LETTER L WITH CARON]
+"\u013E" => "l"
+
+# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
+"\u0140" => "l"
+
+# Å‚ [LATIN SMALL LETTER L WITH STROKE]
+"\u0142" => "l"
+
+# Æš [LATIN SMALL LETTER L WITH BAR]
+"\u019A" => "l"
+
+# È´ [LATIN SMALL LETTER L WITH CURL]
+"\u0234" => "l"
+
+# É« [LATIN SMALL LETTER L WITH MIDDLE TILDE]
+"\u026B" => "l"
+
+# ɬ [LATIN SMALL LETTER L WITH BELT]
+"\u026C" => "l"
+
+# É­ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
+"\u026D" => "l"
+
+# á¶… [LATIN SMALL LETTER L WITH PALATAL HOOK]
+"\u1D85" => "l"
+
+# ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
+"\u1E37" => "l"
+
+# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E39" => "l"
+
+# ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
+"\u1E3B" => "l"
+
+# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3D" => "l"
+
+# â“› [CIRCLED LATIN SMALL LETTER L]
+"\u24DB" => "l"
+
+# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
+"\u2C61" => "l"
+
+# ê‡ [LATIN SMALL LETTER BROKEN L]
+"\uA747" => "l"
+
+# ê‰ [LATIN SMALL LETTER L WITH HIGH STROKE]
+"\uA749" => "l"
+
+# êž [LATIN SMALL LETTER TURNED L]
+"\uA781" => "l"
+
+# l [FULLWIDTH LATIN SMALL LETTER L]
+"\uFF4C" => "l"
+
+# LJ [LATIN CAPITAL LETTER LJ]
+"\u01C7" => "LJ"
+
+# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
+"\u1EFA" => "LL"
+
+# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
+"\u01C8" => "Lj"
+
+# â’§ [PARENTHESIZED LATIN SMALL LETTER L]
+"\u24A7" => "(l)"
+
+# lj [LATIN SMALL LETTER LJ]
+"\u01C9" => "lj"
+
+# á»» [LATIN SMALL LETTER MIDDLE-WELSH LL]
+"\u1EFB" => "ll"
+
+# ʪ [LATIN SMALL LETTER LS DIGRAPH]
+"\u02AA" => "ls"
+
+# Ê« [LATIN SMALL LETTER LZ DIGRAPH]
+"\u02AB" => "lz"
+
+# Ɯ [LATIN CAPITAL LETTER TURNED M]
+"\u019C" => "M"
+
+# á´ [LATIN LETTER SMALL CAPITAL M]
+"\u1D0D" => "M"
+
+# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
+"\u1E3E" => "M"
+
+# á¹€ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
+"\u1E40" => "M"
+
+# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
+"\u1E42" => "M"
+
+# â“‚ [CIRCLED LATIN CAPITAL LETTER M]
+"\u24C2" => "M"
+
+# â±® [LATIN CAPITAL LETTER M WITH HOOK]
+"\u2C6E" => "M"
+
+# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
+"\uA7FD" => "M"
+
+# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
+"\uA7FF" => "M"
+
+# ï¼­ [FULLWIDTH LATIN CAPITAL LETTER M]
+"\uFF2D" => "M"
+
+# ɯ [LATIN SMALL LETTER TURNED M]
+"\u026F" => "m"
+
+# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
+"\u0270" => "m"
+
+# ɱ [LATIN SMALL LETTER M WITH HOOK]
+"\u0271" => "m"
+
+# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
+"\u1D6F" => "m"
+
+# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
+"\u1D86" => "m"
+
+# ḿ [LATIN SMALL LETTER M WITH ACUTE]
+"\u1E3F" => "m"
+
+# á¹ [LATIN SMALL LETTER M WITH DOT ABOVE]
+"\u1E41" => "m"
+
+# ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
+"\u1E43" => "m"
+
+# ⓜ [CIRCLED LATIN SMALL LETTER M]
+"\u24DC" => "m"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER M]
+"\uFF4D" => "m"
+
+# â’¨ [PARENTHESIZED LATIN SMALL LETTER M]
+"\u24A8" => "(m)"
+
+# Ñ [LATIN CAPITAL LETTER N WITH TILDE]
+"\u00D1" => "N"
+
+# Ń [LATIN CAPITAL LETTER N WITH ACUTE]
+"\u0143" => "N"
+
+# Å… [LATIN CAPITAL LETTER N WITH CEDILLA]
+"\u0145" => "N"
+
+# Ň [LATIN CAPITAL LETTER N WITH CARON]
+"\u0147" => "N"
+
+# ÅŠ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
+"\u014A" => "N"
+
+# Æ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
+"\u019D" => "N"
+
+# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
+"\u01F8" => "N"
+
+# È  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
+"\u0220" => "N"
+
+# É´ [LATIN LETTER SMALL CAPITAL N]
+"\u0274" => "N"
+
+# á´Ž [LATIN LETTER SMALL CAPITAL REVERSED N]
+"\u1D0E" => "N"
+
+# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
+"\u1E44" => "N"
+
+# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
+"\u1E46" => "N"
+
+# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
+"\u1E48" => "N"
+
+# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4A" => "N"
+
+# Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
+"\u24C3" => "N"
+
+# ï¼® [FULLWIDTH LATIN CAPITAL LETTER N]
+"\uFF2E" => "N"
+
+# ñ [LATIN SMALL LETTER N WITH TILDE]
+"\u00F1" => "n"
+
+# Å„ [LATIN SMALL LETTER N WITH ACUTE]
+"\u0144" => "n"
+
+# ņ [LATIN SMALL LETTER N WITH CEDILLA]
+"\u0146" => "n"
+
+# ň [LATIN SMALL LETTER N WITH CARON]
+"\u0148" => "n"
+
+# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
+"\u0149" => "n"
+
+# Å‹ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
+"\u014B" => "n"
+
+# Æž [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
+"\u019E" => "n"
+
+# ǹ [LATIN SMALL LETTER N WITH GRAVE]
+"\u01F9" => "n"
+
+# ȵ [LATIN SMALL LETTER N WITH CURL]
+"\u0235" => "n"
+
+# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
+"\u0272" => "n"
+
+# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
+"\u0273" => "n"
+
+# áµ° [LATIN SMALL LETTER N WITH MIDDLE TILDE]
+"\u1D70" => "n"
+
+# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
+"\u1D87" => "n"
+
+# á¹… [LATIN SMALL LETTER N WITH DOT ABOVE]
+"\u1E45" => "n"
+
+# ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
+"\u1E47" => "n"
+
+# ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
+"\u1E49" => "n"
+
+# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4B" => "n"
+
+# â¿ [SUPERSCRIPT LATIN SMALL LETTER N]
+"\u207F" => "n"
+
+# â“ [CIRCLED LATIN SMALL LETTER N]
+"\u24DD" => "n"
+
+# n [FULLWIDTH LATIN SMALL LETTER N]
+"\uFF4E" => "n"
+
+# ÇŠ [LATIN CAPITAL LETTER NJ]
+"\u01CA" => "NJ"
+
+# Ç‹ [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
+"\u01CB" => "Nj"
+
+# â’© [PARENTHESIZED LATIN SMALL LETTER N]
+"\u24A9" => "(n)"
+
+# nj [LATIN SMALL LETTER NJ]
+"\u01CC" => "nj"
+
+# Ã’ [LATIN CAPITAL LETTER O WITH GRAVE]
+"\u00D2" => "O"
+
+# Ó [LATIN CAPITAL LETTER O WITH ACUTE]
+"\u00D3" => "O"
+
+# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+"\u00D4" => "O"
+
+# Õ [LATIN CAPITAL LETTER O WITH TILDE]
+"\u00D5" => "O"
+
+# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
+"\u00D6" => "O"
+
+# Ø [LATIN CAPITAL LETTER O WITH STROKE]
+"\u00D8" => "O"
+
+# Ō [LATIN CAPITAL LETTER O WITH MACRON]
+"\u014C" => "O"
+
+# ÅŽ [LATIN CAPITAL LETTER O WITH BREVE]
+"\u014E" => "O"
+
+# Å [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+"\u0150" => "O"
+
+# Ɔ [LATIN CAPITAL LETTER OPEN O]
+"\u0186" => "O"
+
+# ÆŸ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
+"\u019F" => "O"
+
+# Æ  [LATIN CAPITAL LETTER O WITH HORN]
+"\u01A0" => "O"
+
+# Ç‘ [LATIN CAPITAL LETTER O WITH CARON]
+"\u01D1" => "O"
+
+# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
+"\u01EA" => "O"
+
+# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+"\u01EC" => "O"
+
+# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+"\u01FE" => "O"
+
+# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+"\u020C" => "O"
+
+# ÈŽ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+"\u020E" => "O"
+
+# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+"\u022A" => "O"
+
+# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+"\u022C" => "O"
+
+# È® [LATIN CAPITAL LETTER O WITH DOT ABOVE]
+"\u022E" => "O"
+
+# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0230" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL O]
+"\u1D0F" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL OPEN O]
+"\u1D10" => "O"
+
+# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+"\u1E4C" => "O"
+
+# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4E" => "O"
+
+# á¹ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+"\u1E50" => "O"
+
+# á¹’ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+"\u1E52" => "O"
+
+# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
+"\u1ECC" => "O"
+
+# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+"\u1ECE" => "O"
+
+# á» [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED0" => "O"
+
+# á»’ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED2" => "O"
+
+# á»” [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED4" => "O"
+
+# á»– [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED6" => "O"
+
+# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED8" => "O"
+
+# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+"\u1EDA" => "O"
+
+# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+"\u1EDC" => "O"
+
+# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDE" => "O"
+
+# á»  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+"\u1EE0" => "O"
+
+# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE2" => "O"
+
+# â“„ [CIRCLED LATIN CAPITAL LETTER O]
+"\u24C4" => "O"
+
+# êŠ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74A" => "O"
+
+# êŒ [LATIN CAPITAL LETTER O WITH LOOP]
+"\uA74C" => "O"
+
+# O [FULLWIDTH LATIN CAPITAL LETTER O]
+"\uFF2F" => "O"
+
+# ò [LATIN SMALL LETTER O WITH GRAVE]
+"\u00F2" => "o"
+
+# ó [LATIN SMALL LETTER O WITH ACUTE]
+"\u00F3" => "o"
+
+# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
+"\u00F4" => "o"
+
+# õ [LATIN SMALL LETTER O WITH TILDE]
+"\u00F5" => "o"
+
+# ö [LATIN SMALL LETTER O WITH DIAERESIS]
+"\u00F6" => "o"
+
+# ø [LATIN SMALL LETTER O WITH STROKE]
+"\u00F8" => "o"
+
+# Å [LATIN SMALL LETTER O WITH MACRON]
+"\u014D" => "o"
+
+# Å [LATIN SMALL LETTER O WITH BREVE]
+"\u014F" => "o"
+
+# Å‘ [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+"\u0151" => "o"
+
+# Æ¡ [LATIN SMALL LETTER O WITH HORN]
+"\u01A1" => "o"
+
+# Ç’ [LATIN SMALL LETTER O WITH CARON]
+"\u01D2" => "o"
+
+# Ç« [LATIN SMALL LETTER O WITH OGONEK]
+"\u01EB" => "o"
+
+# Ç­ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+"\u01ED" => "o"
+
+# Ç¿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+"\u01FF" => "o"
+
+# È [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+"\u020D" => "o"
+
+# È [LATIN SMALL LETTER O WITH INVERTED BREVE]
+"\u020F" => "o"
+
+# È« [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+"\u022B" => "o"
+
+# È­ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
+"\u022D" => "o"
+
+# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
+"\u022F" => "o"
+
+# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0231" => "o"
+
+# É” [LATIN SMALL LETTER OPEN O]
+"\u0254" => "o"
+
+# ɵ [LATIN SMALL LETTER BARRED O]
+"\u0275" => "o"
+
+# á´– [LATIN SMALL LETTER TOP HALF O]
+"\u1D16" => "o"
+
+# á´— [LATIN SMALL LETTER BOTTOM HALF O]
+"\u1D17" => "o"
+
+# á¶— [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
+"\u1D97" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+"\u1E4D" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4F" => "o"
+
+# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+"\u1E51" => "o"
+
+# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+"\u1E53" => "o"
+
+# á» [LATIN SMALL LETTER O WITH DOT BELOW]
+"\u1ECD" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HOOK ABOVE]
+"\u1ECF" => "o"
+
+# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED1" => "o"
+
+# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED3" => "o"
+
+# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED5" => "o"
+
+# á»— [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED7" => "o"
+
+# á»™ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED9" => "o"
+
+# á»› [LATIN SMALL LETTER O WITH HORN AND ACUTE]
+"\u1EDB" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HORN AND GRAVE]
+"\u1EDD" => "o"
+
+# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDF" => "o"
+
+# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
+"\u1EE1" => "o"
+
+# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE3" => "o"
+
+# â‚’ [LATIN SUBSCRIPT SMALL LETTER O]
+"\u2092" => "o"
+
+# ⓞ [CIRCLED LATIN SMALL LETTER O]
+"\u24DE" => "o"
+
+# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
+"\u2C7A" => "o"
+
+# ê‹ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74B" => "o"
+
+# ê [LATIN SMALL LETTER O WITH LOOP]
+"\uA74D" => "o"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER O]
+"\uFF4F" => "o"
+
+# Å’ [LATIN CAPITAL LIGATURE OE]
+"\u0152" => "OE"
+
+# ɶ [LATIN LETTER SMALL CAPITAL OE]
+"\u0276" => "OE"
+
+# êŽ [LATIN CAPITAL LETTER OO]
+"\uA74E" => "OO"
+
+# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
+"\u0222" => "OU"
+
+# á´• [LATIN LETTER SMALL CAPITAL OU]
+"\u1D15" => "OU"
+
+# â’ª [PARENTHESIZED LATIN SMALL LETTER O]
+"\u24AA" => "(o)"
+
+# Å“ [LATIN SMALL LIGATURE OE]
+"\u0153" => "oe"
+
+# á´” [LATIN SMALL LETTER TURNED OE]
+"\u1D14" => "oe"
+
+# ê [LATIN SMALL LETTER OO]
+"\uA74F" => "oo"
+
+# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
+"\u0223" => "ou"
+
+# Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
+"\u01A4" => "P"
+
+# á´˜ [LATIN LETTER SMALL CAPITAL P]
+"\u1D18" => "P"
+
+# á¹” [LATIN CAPITAL LETTER P WITH ACUTE]
+"\u1E54" => "P"
+
+# á¹– [LATIN CAPITAL LETTER P WITH DOT ABOVE]
+"\u1E56" => "P"
+
+# â“… [CIRCLED LATIN CAPITAL LETTER P]
+"\u24C5" => "P"
+
+# â±£ [LATIN CAPITAL LETTER P WITH STROKE]
+"\u2C63" => "P"
+
+# ê [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA750" => "P"
+
+# ê’ [LATIN CAPITAL LETTER P WITH FLOURISH]
+"\uA752" => "P"
+
+# ê” [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
+"\uA754" => "P"
+
+# ï¼° [FULLWIDTH LATIN CAPITAL LETTER P]
+"\uFF30" => "P"
+
+# ƥ [LATIN SMALL LETTER P WITH HOOK]
+"\u01A5" => "p"
+
+# áµ± [LATIN SMALL LETTER P WITH MIDDLE TILDE]
+"\u1D71" => "p"
+
+# áµ½ [LATIN SMALL LETTER P WITH STROKE]
+"\u1D7D" => "p"
+
+# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
+"\u1D88" => "p"
+
+# ṕ [LATIN SMALL LETTER P WITH ACUTE]
+"\u1E55" => "p"
+
+# á¹— [LATIN SMALL LETTER P WITH DOT ABOVE]
+"\u1E57" => "p"
+
+# ⓟ [CIRCLED LATIN SMALL LETTER P]
+"\u24DF" => "p"
+
+# ê‘ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA751" => "p"
+
+# ê“ [LATIN SMALL LETTER P WITH FLOURISH]
+"\uA753" => "p"
+
+# ê• [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
+"\uA755" => "p"
+
+# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
+"\uA7FC" => "p"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER P]
+"\uFF50" => "p"
+
+# â’« [PARENTHESIZED LATIN SMALL LETTER P]
+"\u24AB" => "(p)"
+
+# ÉŠ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
+"\u024A" => "Q"
+
+# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
+"\u24C6" => "Q"
+
+# ê– [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA756" => "Q"
+
+# ê˜ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
+"\uA758" => "Q"
+
+# ï¼± [FULLWIDTH LATIN CAPITAL LETTER Q]
+"\uFF31" => "Q"
+
+# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
+"\u0138" => "q"
+
+# É‹ [LATIN SMALL LETTER Q WITH HOOK TAIL]
+"\u024B" => "q"
+
+# Ê  [LATIN SMALL LETTER Q WITH HOOK]
+"\u02A0" => "q"
+
+# â“  [CIRCLED LATIN SMALL LETTER Q]
+"\u24E0" => "q"
+
+# ê— [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA757" => "q"
+
+# ê™ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
+"\uA759" => "q"
+
+# q [FULLWIDTH LATIN SMALL LETTER Q]
+"\uFF51" => "q"
+
+# â’¬ [PARENTHESIZED LATIN SMALL LETTER Q]
+"\u24AC" => "(q)"
+
+# ȹ [LATIN SMALL LETTER QP DIGRAPH]
+"\u0239" => "qp"
+
+# Å” [LATIN CAPITAL LETTER R WITH ACUTE]
+"\u0154" => "R"
+
+# Å– [LATIN CAPITAL LETTER R WITH CEDILLA]
+"\u0156" => "R"
+
+# Ř [LATIN CAPITAL LETTER R WITH CARON]
+"\u0158" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+"\u0210" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+"\u0212" => "R"
+
+# Ɍ [LATIN CAPITAL LETTER R WITH STROKE]
+"\u024C" => "R"
+
+# ʀ [LATIN LETTER SMALL CAPITAL R]
+"\u0280" => "R"
+
+# Ê [LATIN LETTER SMALL CAPITAL INVERTED R]
+"\u0281" => "R"
+
+# á´™ [LATIN LETTER SMALL CAPITAL REVERSED R]
+"\u1D19" => "R"
+
+# á´š [LATIN LETTER SMALL CAPITAL TURNED R]
+"\u1D1A" => "R"
+
+# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
+"\u1E58" => "R"
+
+# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
+"\u1E5A" => "R"
+
+# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5C" => "R"
+
+# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
+"\u1E5E" => "R"
+
+# Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
+"\u24C7" => "R"
+
+# Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
+"\u2C64" => "R"
+
+# êš [LATIN CAPITAL LETTER R ROTUNDA]
+"\uA75A" => "R"
+
+# êž‚ [LATIN CAPITAL LETTER INSULAR R]
+"\uA782" => "R"
+
+# ï¼² [FULLWIDTH LATIN CAPITAL LETTER R]
+"\uFF32" => "R"
+
+# Å• [LATIN SMALL LETTER R WITH ACUTE]
+"\u0155" => "r"
+
+# Å— [LATIN SMALL LETTER R WITH CEDILLA]
+"\u0157" => "r"
+
+# Å™ [LATIN SMALL LETTER R WITH CARON]
+"\u0159" => "r"
+
+# È‘ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+"\u0211" => "r"
+
+# È“ [LATIN SMALL LETTER R WITH INVERTED BREVE]
+"\u0213" => "r"
+
+# É [LATIN SMALL LETTER R WITH STROKE]
+"\u024D" => "r"
+
+# ɼ [LATIN SMALL LETTER R WITH LONG LEG]
+"\u027C" => "r"
+
+# ɽ [LATIN SMALL LETTER R WITH TAIL]
+"\u027D" => "r"
+
+# ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
+"\u027E" => "r"
+
+# É¿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
+"\u027F" => "r"
+
+# áµ£ [LATIN SUBSCRIPT SMALL LETTER R]
+"\u1D63" => "r"
+
+# áµ² [LATIN SMALL LETTER R WITH MIDDLE TILDE]
+"\u1D72" => "r"
+
+# áµ³ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
+"\u1D73" => "r"
+
+# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
+"\u1D89" => "r"
+
+# á¹™ [LATIN SMALL LETTER R WITH DOT ABOVE]
+"\u1E59" => "r"
+
+# á¹› [LATIN SMALL LETTER R WITH DOT BELOW]
+"\u1E5B" => "r"
+
+# á¹ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5D" => "r"
+
+# ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
+"\u1E5F" => "r"
+
+# â“¡ [CIRCLED LATIN SMALL LETTER R]
+"\u24E1" => "r"
+
+# ê› [LATIN SMALL LETTER R ROTUNDA]
+"\uA75B" => "r"
+
+# ꞃ [LATIN SMALL LETTER INSULAR R]
+"\uA783" => "r"
+
+# ï½’ [FULLWIDTH LATIN SMALL LETTER R]
+"\uFF52" => "r"
+
+# â’­ [PARENTHESIZED LATIN SMALL LETTER R]
+"\u24AD" => "(r)"
+
+# Åš [LATIN CAPITAL LETTER S WITH ACUTE]
+"\u015A" => "S"
+
+# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+"\u015C" => "S"
+
+# Åž [LATIN CAPITAL LETTER S WITH CEDILLA]
+"\u015E" => "S"
+
+# Å  [LATIN CAPITAL LETTER S WITH CARON]
+"\u0160" => "S"
+
+# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
+"\u0218" => "S"
+
+# á¹  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
+"\u1E60" => "S"
+
+# á¹¢ [LATIN CAPITAL LETTER S WITH DOT BELOW]
+"\u1E62" => "S"
+
+# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E64" => "S"
+
+# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E66" => "S"
+
+# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E68" => "S"
+
+# Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
+"\u24C8" => "S"
+
+# ꜱ [LATIN LETTER SMALL CAPITAL S]
+"\uA731" => "S"
+
+# êž… [LATIN SMALL LETTER INSULAR S]
+"\uA785" => "S"
+
+# ï¼³ [FULLWIDTH LATIN CAPITAL LETTER S]
+"\uFF33" => "S"
+
+# Å› [LATIN SMALL LETTER S WITH ACUTE]
+"\u015B" => "s"
+
+# Å [LATIN SMALL LETTER S WITH CIRCUMFLEX]
+"\u015D" => "s"
+
+# ÅŸ [LATIN SMALL LETTER S WITH CEDILLA]
+"\u015F" => "s"
+
+# Å¡ [LATIN SMALL LETTER S WITH CARON]
+"\u0161" => "s"
+
+# Å¿ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
+"\u017F" => "s"
+
+# È™ [LATIN SMALL LETTER S WITH COMMA BELOW]
+"\u0219" => "s"
+
+# È¿ [LATIN SMALL LETTER S WITH SWASH TAIL]
+"\u023F" => "s"
+
+# Ê‚ [LATIN SMALL LETTER S WITH HOOK]
+"\u0282" => "s"
+
+# áµ´ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
+"\u1D74" => "s"
+
+# á¶Š [LATIN SMALL LETTER S WITH PALATAL HOOK]
+"\u1D8A" => "s"
+
+# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
+"\u1E61" => "s"
+
+# á¹£ [LATIN SMALL LETTER S WITH DOT BELOW]
+"\u1E63" => "s"
+
+# á¹¥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E65" => "s"
+
+# á¹§ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E67" => "s"
+
+# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E69" => "s"
+
+# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
+"\u1E9C" => "s"
+
+# Ạ[LATIN SMALL LETTER LONG S WITH HIGH STROKE]
+"\u1E9D" => "s"
+
+# â“¢ [CIRCLED LATIN SMALL LETTER S]
+"\u24E2" => "s"
+
+# êž„ [LATIN CAPITAL LETTER INSULAR S]
+"\uA784" => "s"
+
+# s [FULLWIDTH LATIN SMALL LETTER S]
+"\uFF53" => "s"
+
+# ẞ [LATIN CAPITAL LETTER SHARP S]
+"\u1E9E" => "SS"
+
+# â’® [PARENTHESIZED LATIN SMALL LETTER S]
+"\u24AE" => "(s)"
+
+# ß [LATIN SMALL LETTER SHARP S]
+"\u00DF" => "ss"
+
+# st [LATIN SMALL LIGATURE ST]
+"\uFB06" => "st"
+
+# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA]
+"\u0162" => "T"
+
+# Ť [LATIN CAPITAL LETTER T WITH CARON]
+"\u0164" => "T"
+
+# Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
+"\u0166" => "T"
+
+# Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
+"\u01AC" => "T"
+
+# Æ® [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
+"\u01AE" => "T"
+
+# Èš [LATIN CAPITAL LETTER T WITH COMMA BELOW]
+"\u021A" => "T"
+
+# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
+"\u023E" => "T"
+
+# á´› [LATIN LETTER SMALL CAPITAL T]
+"\u1D1B" => "T"
+
+# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
+"\u1E6A" => "T"
+
+# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
+"\u1E6C" => "T"
+
+# á¹® [LATIN CAPITAL LETTER T WITH LINE BELOW]
+"\u1E6E" => "T"
+
+# á¹° [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E70" => "T"
+
+# Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
+"\u24C9" => "T"
+
+# Ꞇ [LATIN CAPITAL LETTER INSULAR T]
+"\uA786" => "T"
+
+# ï¼´ [FULLWIDTH LATIN CAPITAL LETTER T]
+"\uFF34" => "T"
+
+# ţ [LATIN SMALL LETTER T WITH CEDILLA]
+"\u0163" => "t"
+
+# ť [LATIN SMALL LETTER T WITH CARON]
+"\u0165" => "t"
+
+# ŧ [LATIN SMALL LETTER T WITH STROKE]
+"\u0167" => "t"
+
+# Æ« [LATIN SMALL LETTER T WITH PALATAL HOOK]
+"\u01AB" => "t"
+
+# Æ­ [LATIN SMALL LETTER T WITH HOOK]
+"\u01AD" => "t"
+
+# È› [LATIN SMALL LETTER T WITH COMMA BELOW]
+"\u021B" => "t"
+
+# ȶ [LATIN SMALL LETTER T WITH CURL]
+"\u0236" => "t"
+
+# ʇ [LATIN SMALL LETTER TURNED T]
+"\u0287" => "t"
+
+# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
+"\u0288" => "t"
+
+# áµµ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
+"\u1D75" => "t"
+
+# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
+"\u1E6B" => "t"
+
+# á¹­ [LATIN SMALL LETTER T WITH DOT BELOW]
+"\u1E6D" => "t"
+
+# ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
+"\u1E6F" => "t"
+
+# á¹± [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E71" => "t"
+
+# ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
+"\u1E97" => "t"
+
+# â“£ [CIRCLED LATIN SMALL LETTER T]
+"\u24E3" => "t"
+
+# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
+"\u2C66" => "t"
+
+# ï½” [FULLWIDTH LATIN SMALL LETTER T]
+"\uFF54" => "t"
+
+# Þ [LATIN CAPITAL LETTER THORN]
+"\u00DE" => "TH"
+
+# ê¦ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA766" => "TH"
+
+# Ꜩ [LATIN CAPITAL LETTER TZ]
+"\uA728" => "TZ"
+
+# â’¯ [PARENTHESIZED LATIN SMALL LETTER T]
+"\u24AF" => "(t)"
+
+# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
+"\u02A8" => "tc"
+
+# þ [LATIN SMALL LETTER THORN]
+"\u00FE" => "th"
+
+# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
+"\u1D7A" => "th"
+
+# ê§ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA767" => "th"
+
+# ʦ [LATIN SMALL LETTER TS DIGRAPH]
+"\u02A6" => "ts"
+
+# ꜩ [LATIN SMALL LETTER TZ]
+"\uA729" => "tz"
+
+# Ù [LATIN CAPITAL LETTER U WITH GRAVE]
+"\u00D9" => "U"
+
+# Ú [LATIN CAPITAL LETTER U WITH ACUTE]
+"\u00DA" => "U"
+
+# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+"\u00DB" => "U"
+
+# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]
+"\u00DC" => "U"
+
+# Ũ [LATIN CAPITAL LETTER U WITH TILDE]
+"\u0168" => "U"
+
+# Ū [LATIN CAPITAL LETTER U WITH MACRON]
+"\u016A" => "U"
+
+# Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
+"\u016C" => "U"
+
+# Å® [LATIN CAPITAL LETTER U WITH RING ABOVE]
+"\u016E" => "U"
+
+# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+"\u0170" => "U"
+
+# Ų [LATIN CAPITAL LETTER U WITH OGONEK]
+"\u0172" => "U"
+
+# Ư [LATIN CAPITAL LETTER U WITH HORN]
+"\u01AF" => "U"
+
+# Ç“ [LATIN CAPITAL LETTER U WITH CARON]
+"\u01D3" => "U"
+
+# Ç• [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D5" => "U"
+
+# Ç— [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D7" => "U"
+
+# Ç™ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+"\u01D9" => "U"
+
+# Ç› [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DB" => "U"
+
+# È” [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+"\u0214" => "U"
+
+# È– [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+"\u0216" => "U"
+
+# É„ [LATIN CAPITAL LETTER U BAR]
+"\u0244" => "U"
+
+# ᴜ [LATIN LETTER SMALL CAPITAL U]
+"\u1D1C" => "U"
+
+# áµ¾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
+"\u1D7E" => "U"
+
+# á¹² [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+"\u1E72" => "U"
+
+# á¹´ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
+"\u1E74" => "U"
+
+# á¹¶ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E76" => "U"
+
+# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+"\u1E78" => "U"
+
+# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7A" => "U"
+
+# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
+"\u1EE4" => "U"
+
+# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+"\u1EE6" => "U"
+
+# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+"\u1EE8" => "U"
+
+# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+"\u1EEA" => "U"
+
+# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EEC" => "U"
+
+# á»® [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+"\u1EEE" => "U"
+
+# á»° [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF0" => "U"
+
+# Ⓤ [CIRCLED LATIN CAPITAL LETTER U]
+"\u24CA" => "U"
+
+# ï¼µ [FULLWIDTH LATIN CAPITAL LETTER U]
+"\uFF35" => "U"
+
+# ù [LATIN SMALL LETTER U WITH GRAVE]
+"\u00F9" => "u"
+
+# ú [LATIN SMALL LETTER U WITH ACUTE]
+"\u00FA" => "u"
+
+# û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
+"\u00FB" => "u"
+
+# ü [LATIN SMALL LETTER U WITH DIAERESIS]
+"\u00FC" => "u"
+
+# Å© [LATIN SMALL LETTER U WITH TILDE]
+"\u0169" => "u"
+
+# Å« [LATIN SMALL LETTER U WITH MACRON]
+"\u016B" => "u"
+
+# Å­ [LATIN SMALL LETTER U WITH BREVE]
+"\u016D" => "u"
+
+# ů [LATIN SMALL LETTER U WITH RING ABOVE]
+"\u016F" => "u"
+
+# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+"\u0171" => "u"
+
+# ų [LATIN SMALL LETTER U WITH OGONEK]
+"\u0173" => "u"
+
+# ư [LATIN SMALL LETTER U WITH HORN]
+"\u01B0" => "u"
+
+# Ç” [LATIN SMALL LETTER U WITH CARON]
+"\u01D4" => "u"
+
+# Ç– [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D6" => "u"
+
+# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D8" => "u"
+
+# Çš [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+"\u01DA" => "u"
+
+# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DC" => "u"
+
+# È• [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+"\u0215" => "u"
+
+# È— [LATIN SMALL LETTER U WITH INVERTED BREVE]
+"\u0217" => "u"
+
+# ʉ [LATIN SMALL LETTER U BAR]
+"\u0289" => "u"
+
+# ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
+"\u1D64" => "u"
+
+# á¶™ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
+"\u1D99" => "u"
+
+# á¹³ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+"\u1E73" => "u"
+
+# á¹µ [LATIN SMALL LETTER U WITH TILDE BELOW]
+"\u1E75" => "u"
+
+# á¹· [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E77" => "u"
+
+# á¹¹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+"\u1E79" => "u"
+
+# á¹» [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7B" => "u"
+
+# ụ [LATIN SMALL LETTER U WITH DOT BELOW]
+"\u1EE5" => "u"
+
+# á»§ [LATIN SMALL LETTER U WITH HOOK ABOVE]
+"\u1EE7" => "u"
+
+# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
+"\u1EE9" => "u"
+
+# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
+"\u1EEB" => "u"
+
+# á»­ [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EED" => "u"
+
+# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
+"\u1EEF" => "u"
+
+# á»± [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF1" => "u"
+
+# ⓤ [CIRCLED LATIN SMALL LETTER U]
+"\u24E4" => "u"
+
+# u [FULLWIDTH LATIN SMALL LETTER U]
+"\uFF55" => "u"
+
+# â’° [PARENTHESIZED LATIN SMALL LETTER U]
+"\u24B0" => "(u)"
+
+# ᵫ [LATIN SMALL LETTER UE]
+"\u1D6B" => "ue"
+
+# Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
+"\u01B2" => "V"
+
+# É… [LATIN CAPITAL LETTER TURNED V]
+"\u0245" => "V"
+
+# á´  [LATIN LETTER SMALL CAPITAL V]
+"\u1D20" => "V"
+
+# á¹¼ [LATIN CAPITAL LETTER V WITH TILDE]
+"\u1E7C" => "V"
+
+# á¹¾ [LATIN CAPITAL LETTER V WITH DOT BELOW]
+"\u1E7E" => "V"
+
+# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
+"\u1EFC" => "V"
+
+# â“‹ [CIRCLED LATIN CAPITAL LETTER V]
+"\u24CB" => "V"
+
+# êž [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
+"\uA75E" => "V"
+
+# ê¨ [LATIN CAPITAL LETTER VEND]
+"\uA768" => "V"
+
+# ï¼¶ [FULLWIDTH LATIN CAPITAL LETTER V]
+"\uFF36" => "V"
+
+# Ê‹ [LATIN SMALL LETTER V WITH HOOK]
+"\u028B" => "v"
+
+# ʌ [LATIN SMALL LETTER TURNED V]
+"\u028C" => "v"
+
+# áµ¥ [LATIN SUBSCRIPT SMALL LETTER V]
+"\u1D65" => "v"
+
+# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
+"\u1D8C" => "v"
+
+# á¹½ [LATIN SMALL LETTER V WITH TILDE]
+"\u1E7D" => "v"
+
+# ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
+"\u1E7F" => "v"
+
+# â“¥ [CIRCLED LATIN SMALL LETTER V]
+"\u24E5" => "v"
+
+# â±± [LATIN SMALL LETTER V WITH RIGHT HOOK]
+"\u2C71" => "v"
+
+# â±´ [LATIN SMALL LETTER V WITH CURL]
+"\u2C74" => "v"
+
+# êŸ [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
+"\uA75F" => "v"
+
+# ï½– [FULLWIDTH LATIN SMALL LETTER V]
+"\uFF56" => "v"
+
+# ê  [LATIN CAPITAL LETTER VY]
+"\uA760" => "VY"
+
+# â’± [PARENTHESIZED LATIN SMALL LETTER V]
+"\u24B1" => "(v)"
+
+# ê¡ [LATIN SMALL LETTER VY]
+"\uA761" => "vy"
+
+# Å´ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+"\u0174" => "W"
+
+# Ç· http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
+"\u01F7" => "W"
+
+# á´¡ [LATIN LETTER SMALL CAPITAL W]
+"\u1D21" => "W"
+
+# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
+"\u1E80" => "W"
+
+# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
+"\u1E82" => "W"
+
+# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
+"\u1E84" => "W"
+
+# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
+"\u1E86" => "W"
+
+# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
+"\u1E88" => "W"
+
+# Ⓦ [CIRCLED LATIN CAPITAL LETTER W]
+"\u24CC" => "W"
+
+# â±² [LATIN CAPITAL LETTER W WITH HOOK]
+"\u2C72" => "W"
+
+# ï¼· [FULLWIDTH LATIN CAPITAL LETTER W]
+"\uFF37" => "W"
+
+# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
+"\u0175" => "w"
+
+# Æ¿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
+"\u01BF" => "w"
+
+# Ê [LATIN SMALL LETTER TURNED W]
+"\u028D" => "w"
+
+# Ạ[LATIN SMALL LETTER W WITH GRAVE]
+"\u1E81" => "w"
+
+# ẃ [LATIN SMALL LETTER W WITH ACUTE]
+"\u1E83" => "w"
+
+# ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
+"\u1E85" => "w"
+
+# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
+"\u1E87" => "w"
+
+# ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
+"\u1E89" => "w"
+
+# ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
+"\u1E98" => "w"
+
+# ⓦ [CIRCLED LATIN SMALL LETTER W]
+"\u24E6" => "w"
+
+# â±³ [LATIN SMALL LETTER W WITH HOOK]
+"\u2C73" => "w"
+
+# ï½— [FULLWIDTH LATIN SMALL LETTER W]
+"\uFF57" => "w"
+
+# â’² [PARENTHESIZED LATIN SMALL LETTER W]
+"\u24B2" => "(w)"
+
+# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
+"\u1E8A" => "X"
+
+# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
+"\u1E8C" => "X"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER X]
+"\u24CD" => "X"
+
+# X [FULLWIDTH LATIN CAPITAL LETTER X]
+"\uFF38" => "X"
+
+# á¶ [LATIN SMALL LETTER X WITH PALATAL HOOK]
+"\u1D8D" => "x"
+
+# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
+"\u1E8B" => "x"
+
+# Ạ[LATIN SMALL LETTER X WITH DIAERESIS]
+"\u1E8D" => "x"
+
+# â‚“ [LATIN SUBSCRIPT SMALL LETTER X]
+"\u2093" => "x"
+
+# â“§ [CIRCLED LATIN SMALL LETTER X]
+"\u24E7" => "x"
+
+# x [FULLWIDTH LATIN SMALL LETTER X]
+"\uFF58" => "x"
+
+# â’³ [PARENTHESIZED LATIN SMALL LETTER X]
+"\u24B3" => "(x)"
+
+# Ã [LATIN CAPITAL LETTER Y WITH ACUTE]
+"\u00DD" => "Y"
+
+# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+"\u0176" => "Y"
+
+# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
+"\u0178" => "Y"
+
+# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
+"\u01B3" => "Y"
+
+# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
+"\u0232" => "Y"
+
+# ÉŽ [LATIN CAPITAL LETTER Y WITH STROKE]
+"\u024E" => "Y"
+
+# Ê [LATIN LETTER SMALL CAPITAL Y]
+"\u028F" => "Y"
+
+# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+"\u1E8E" => "Y"
+
+# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
+"\u1EF2" => "Y"
+
+# á»´ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
+"\u1EF4" => "Y"
+
+# á»¶ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+"\u1EF6" => "Y"
+
+# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
+"\u1EF8" => "Y"
+
+# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
+"\u1EFE" => "Y"
+
+# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y]
+"\u24CE" => "Y"
+
+# ï¼¹ [FULLWIDTH LATIN CAPITAL LETTER Y]
+"\uFF39" => "Y"
+
+# ý [LATIN SMALL LETTER Y WITH ACUTE]
+"\u00FD" => "y"
+
+# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
+"\u00FF" => "y"
+
+# Å· [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+"\u0177" => "y"
+
+# Æ´ [LATIN SMALL LETTER Y WITH HOOK]
+"\u01B4" => "y"
+
+# ȳ [LATIN SMALL LETTER Y WITH MACRON]
+"\u0233" => "y"
+
+# É [LATIN SMALL LETTER Y WITH STROKE]
+"\u024F" => "y"
+
+# ÊŽ [LATIN SMALL LETTER TURNED Y]
+"\u028E" => "y"
+
+# Ạ[LATIN SMALL LETTER Y WITH DOT ABOVE]
+"\u1E8F" => "y"
+
+# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
+"\u1E99" => "y"
+
+# ỳ [LATIN SMALL LETTER Y WITH GRAVE]
+"\u1EF3" => "y"
+
+# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
+"\u1EF5" => "y"
+
+# á»· [LATIN SMALL LETTER Y WITH HOOK ABOVE]
+"\u1EF7" => "y"
+
+# ỹ [LATIN SMALL LETTER Y WITH TILDE]
+"\u1EF9" => "y"
+
+# ỿ [LATIN SMALL LETTER Y WITH LOOP]
+"\u1EFF" => "y"
+
+# ⓨ [CIRCLED LATIN SMALL LETTER Y]
+"\u24E8" => "y"
+
+# ï½™ [FULLWIDTH LATIN SMALL LETTER Y]
+"\uFF59" => "y"
+
+# â’´ [PARENTHESIZED LATIN SMALL LETTER Y]
+"\u24B4" => "(y)"
+
+# Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
+"\u0179" => "Z"
+
+# Å» [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+"\u017B" => "Z"
+
+# Ž [LATIN CAPITAL LETTER Z WITH CARON]
+"\u017D" => "Z"
+
+# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
+"\u01B5" => "Z"
+
+# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
+"\u021C" => "Z"
+
+# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
+"\u0224" => "Z"
+
+# á´¢ [LATIN LETTER SMALL CAPITAL Z]
+"\u1D22" => "Z"
+
+# Ạ[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+"\u1E90" => "Z"
+
+# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
+"\u1E92" => "Z"
+
+# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW]
+"\u1E94" => "Z"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER Z]
+"\u24CF" => "Z"
+
+# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
+"\u2C6B" => "Z"
+
+# ê¢ [LATIN CAPITAL LETTER VISIGOTHIC Z]
+"\uA762" => "Z"
+
+# Z [FULLWIDTH LATIN CAPITAL LETTER Z]
+"\uFF3A" => "Z"
+
+# ź [LATIN SMALL LETTER Z WITH ACUTE]
+"\u017A" => "z"
+
+# ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
+"\u017C" => "z"
+
+# ž [LATIN SMALL LETTER Z WITH CARON]
+"\u017E" => "z"
+
+# ƶ [LATIN SMALL LETTER Z WITH STROKE]
+"\u01B6" => "z"
+
+# È http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
+"\u021D" => "z"
+
+# ȥ [LATIN SMALL LETTER Z WITH HOOK]
+"\u0225" => "z"
+
+# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL]
+"\u0240" => "z"
+
+# Ê [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
+"\u0290" => "z"
+
+# Ê‘ [LATIN SMALL LETTER Z WITH CURL]
+"\u0291" => "z"
+
+# áµ¶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
+"\u1D76" => "z"
+
+# á¶Ž [LATIN SMALL LETTER Z WITH PALATAL HOOK]
+"\u1D8E" => "z"
+
+# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+"\u1E91" => "z"
+
+# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
+"\u1E93" => "z"
+
+# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
+"\u1E95" => "z"
+
+# â“© [CIRCLED LATIN SMALL LETTER Z]
+"\u24E9" => "z"
+
+# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
+"\u2C6C" => "z"
+
+# ê£ [LATIN SMALL LETTER VISIGOTHIC Z]
+"\uA763" => "z"
+
+# z [FULLWIDTH LATIN SMALL LETTER Z]
+"\uFF5A" => "z"
+
+# â’µ [PARENTHESIZED LATIN SMALL LETTER Z]
+"\u24B5" => "(z)"
+
+# â° [SUPERSCRIPT ZERO]
+"\u2070" => "0"
+
+# â‚€ [SUBSCRIPT ZERO]
+"\u2080" => "0"
+
+# ⓪ [CIRCLED DIGIT ZERO]
+"\u24EA" => "0"
+
+# â“¿ [NEGATIVE CIRCLED DIGIT ZERO]
+"\u24FF" => "0"
+
+# ï¼ [FULLWIDTH DIGIT ZERO]
+"\uFF10" => "0"
+
+# ¹ [SUPERSCRIPT ONE]
+"\u00B9" => "1"
+
+# â‚ [SUBSCRIPT ONE]
+"\u2081" => "1"
+
+# â‘  [CIRCLED DIGIT ONE]
+"\u2460" => "1"
+
+# ⓵ [DOUBLE CIRCLED DIGIT ONE]
+"\u24F5" => "1"
+
+# â¶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
+"\u2776" => "1"
+
+# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
+"\u2780" => "1"
+
+# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
+"\u278A" => "1"
+
+# 1 [FULLWIDTH DIGIT ONE]
+"\uFF11" => "1"
+
+# â’ˆ [DIGIT ONE FULL STOP]
+"\u2488" => "1."
+
+# â‘´ [PARENTHESIZED DIGIT ONE]
+"\u2474" => "(1)"
+
+# ² [SUPERSCRIPT TWO]
+"\u00B2" => "2"
+
+# â‚‚ [SUBSCRIPT TWO]
+"\u2082" => "2"
+
+# â‘¡ [CIRCLED DIGIT TWO]
+"\u2461" => "2"
+
+# â“¶ [DOUBLE CIRCLED DIGIT TWO]
+"\u24F6" => "2"
+
+# â· [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
+"\u2777" => "2"
+
+# âž [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
+"\u2781" => "2"
+
+# âž‹ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
+"\u278B" => "2"
+
+# ï¼’ [FULLWIDTH DIGIT TWO]
+"\uFF12" => "2"
+
+# â’‰ [DIGIT TWO FULL STOP]
+"\u2489" => "2."
+
+# ⑵ [PARENTHESIZED DIGIT TWO]
+"\u2475" => "(2)"
+
+# ³ [SUPERSCRIPT THREE]
+"\u00B3" => "3"
+
+# ₃ [SUBSCRIPT THREE]
+"\u2083" => "3"
+
+# â‘¢ [CIRCLED DIGIT THREE]
+"\u2462" => "3"
+
+# â“· [DOUBLE CIRCLED DIGIT THREE]
+"\u24F7" => "3"
+
+# ⸠[DINGBAT NEGATIVE CIRCLED DIGIT THREE]
+"\u2778" => "3"
+
+# âž‚ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
+"\u2782" => "3"
+
+# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
+"\u278C" => "3"
+
+# 3 [FULLWIDTH DIGIT THREE]
+"\uFF13" => "3"
+
+# â’Š [DIGIT THREE FULL STOP]
+"\u248A" => "3."
+
+# â‘¶ [PARENTHESIZED DIGIT THREE]
+"\u2476" => "(3)"
+
+# â´ [SUPERSCRIPT FOUR]
+"\u2074" => "4"
+
+# â‚„ [SUBSCRIPT FOUR]
+"\u2084" => "4"
+
+# â‘£ [CIRCLED DIGIT FOUR]
+"\u2463" => "4"
+
+# ⓸ [DOUBLE CIRCLED DIGIT FOUR]
+"\u24F8" => "4"
+
+# â¹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
+"\u2779" => "4"
+
+# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
+"\u2783" => "4"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
+"\u278D" => "4"
+
+# ï¼” [FULLWIDTH DIGIT FOUR]
+"\uFF14" => "4"
+
+# â’‹ [DIGIT FOUR FULL STOP]
+"\u248B" => "4."
+
+# â‘· [PARENTHESIZED DIGIT FOUR]
+"\u2477" => "(4)"
+
+# âµ [SUPERSCRIPT FIVE]
+"\u2075" => "5"
+
+# â‚… [SUBSCRIPT FIVE]
+"\u2085" => "5"
+
+# ⑤ [CIRCLED DIGIT FIVE]
+"\u2464" => "5"
+
+# ⓹ [DOUBLE CIRCLED DIGIT FIVE]
+"\u24F9" => "5"
+
+# ⺠[DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
+"\u277A" => "5"
+
+# âž„ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
+"\u2784" => "5"
+
+# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
+"\u278E" => "5"
+
+# 5 [FULLWIDTH DIGIT FIVE]
+"\uFF15" => "5"
+
+# ⒌ [DIGIT FIVE FULL STOP]
+"\u248C" => "5."
+
+# ⑸ [PARENTHESIZED DIGIT FIVE]
+"\u2478" => "(5)"
+
+# â¶ [SUPERSCRIPT SIX]
+"\u2076" => "6"
+
+# ₆ [SUBSCRIPT SIX]
+"\u2086" => "6"
+
+# â‘¥ [CIRCLED DIGIT SIX]
+"\u2465" => "6"
+
+# ⓺ [DOUBLE CIRCLED DIGIT SIX]
+"\u24FA" => "6"
+
+# â» [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
+"\u277B" => "6"
+
+# âž… [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
+"\u2785" => "6"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
+"\u278F" => "6"
+
+# ï¼– [FULLWIDTH DIGIT SIX]
+"\uFF16" => "6"
+
+# â’ [DIGIT SIX FULL STOP]
+"\u248D" => "6."
+
+# ⑹ [PARENTHESIZED DIGIT SIX]
+"\u2479" => "(6)"
+
+# â· [SUPERSCRIPT SEVEN]
+"\u2077" => "7"
+
+# ₇ [SUBSCRIPT SEVEN]
+"\u2087" => "7"
+
+# ⑦ [CIRCLED DIGIT SEVEN]
+"\u2466" => "7"
+
+# â“» [DOUBLE CIRCLED DIGIT SEVEN]
+"\u24FB" => "7"
+
+# â¼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
+"\u277C" => "7"
+
+# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2786" => "7"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2790" => "7"
+
+# ï¼— [FULLWIDTH DIGIT SEVEN]
+"\uFF17" => "7"
+
+# â’Ž [DIGIT SEVEN FULL STOP]
+"\u248E" => "7."
+
+# ⑺ [PARENTHESIZED DIGIT SEVEN]
+"\u247A" => "(7)"
+
+# ⸠[SUPERSCRIPT EIGHT]
+"\u2078" => "8"
+
+# ₈ [SUBSCRIPT EIGHT]
+"\u2088" => "8"
+
+# â‘§ [CIRCLED DIGIT EIGHT]
+"\u2467" => "8"
+
+# ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
+"\u24FC" => "8"
+
+# â½ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
+"\u277D" => "8"
+
+# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2787" => "8"
+
+# âž‘ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2791" => "8"
+
+# 8 [FULLWIDTH DIGIT EIGHT]
+"\uFF18" => "8"
+
+# â’ [DIGIT EIGHT FULL STOP]
+"\u248F" => "8."
+
+# â‘» [PARENTHESIZED DIGIT EIGHT]
+"\u247B" => "(8)"
+
+# â¹ [SUPERSCRIPT NINE]
+"\u2079" => "9"
+
+# ₉ [SUBSCRIPT NINE]
+"\u2089" => "9"
+
+# ⑨ [CIRCLED DIGIT NINE]
+"\u2468" => "9"
+
+# ⓽ [DOUBLE CIRCLED DIGIT NINE]
+"\u24FD" => "9"
+
+# â¾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
+"\u277E" => "9"
+
+# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
+"\u2788" => "9"
+
+# âž’ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
+"\u2792" => "9"
+
+# ï¼™ [FULLWIDTH DIGIT NINE]
+"\uFF19" => "9"
+
+# â’ [DIGIT NINE FULL STOP]
+"\u2490" => "9."
+
+# ⑼ [PARENTHESIZED DIGIT NINE]
+"\u247C" => "(9)"
+
+# â‘© [CIRCLED NUMBER TEN]
+"\u2469" => "10"
+
+# ⓾ [DOUBLE CIRCLED NUMBER TEN]
+"\u24FE" => "10"
+
+# â¿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
+"\u277F" => "10"
+
+# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
+"\u2789" => "10"
+
+# âž“ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
+"\u2793" => "10"
+
+# â’‘ [NUMBER TEN FULL STOP]
+"\u2491" => "10."
+
+# ⑽ [PARENTHESIZED NUMBER TEN]
+"\u247D" => "(10)"
+
+# ⑪ [CIRCLED NUMBER ELEVEN]
+"\u246A" => "11"
+
+# â“« [NEGATIVE CIRCLED NUMBER ELEVEN]
+"\u24EB" => "11"
+
+# â’’ [NUMBER ELEVEN FULL STOP]
+"\u2492" => "11."
+
+# ⑾ [PARENTHESIZED NUMBER ELEVEN]
+"\u247E" => "(11)"
+
+# â‘« [CIRCLED NUMBER TWELVE]
+"\u246B" => "12"
+
+# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
+"\u24EC" => "12"
+
+# â’“ [NUMBER TWELVE FULL STOP]
+"\u2493" => "12."
+
+# â‘¿ [PARENTHESIZED NUMBER TWELVE]
+"\u247F" => "(12)"
+
+# ⑬ [CIRCLED NUMBER THIRTEEN]
+"\u246C" => "13"
+
+# â“­ [NEGATIVE CIRCLED NUMBER THIRTEEN]
+"\u24ED" => "13"
+
+# â’” [NUMBER THIRTEEN FULL STOP]
+"\u2494" => "13."
+
+# â’€ [PARENTHESIZED NUMBER THIRTEEN]
+"\u2480" => "(13)"
+
+# â‘­ [CIRCLED NUMBER FOURTEEN]
+"\u246D" => "14"
+
+# â“® [NEGATIVE CIRCLED NUMBER FOURTEEN]
+"\u24EE" => "14"
+
+# â’• [NUMBER FOURTEEN FULL STOP]
+"\u2495" => "14."
+
+# â’ [PARENTHESIZED NUMBER FOURTEEN]
+"\u2481" => "(14)"
+
+# â‘® [CIRCLED NUMBER FIFTEEN]
+"\u246E" => "15"
+
+# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
+"\u24EF" => "15"
+
+# â’– [NUMBER FIFTEEN FULL STOP]
+"\u2496" => "15."
+
+# â’‚ [PARENTHESIZED NUMBER FIFTEEN]
+"\u2482" => "(15)"
+
+# ⑯ [CIRCLED NUMBER SIXTEEN]
+"\u246F" => "16"
+
+# â“° [NEGATIVE CIRCLED NUMBER SIXTEEN]
+"\u24F0" => "16"
+
+# â’— [NUMBER SIXTEEN FULL STOP]
+"\u2497" => "16."
+
+# â’ƒ [PARENTHESIZED NUMBER SIXTEEN]
+"\u2483" => "(16)"
+
+# â‘° [CIRCLED NUMBER SEVENTEEN]
+"\u2470" => "17"
+
+# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
+"\u24F1" => "17"
+
+# â’˜ [NUMBER SEVENTEEN FULL STOP]
+"\u2498" => "17."
+
+# â’„ [PARENTHESIZED NUMBER SEVENTEEN]
+"\u2484" => "(17)"
+
+# ⑱ [CIRCLED NUMBER EIGHTEEN]
+"\u2471" => "18"
+
+# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
+"\u24F2" => "18"
+
+# â’™ [NUMBER EIGHTEEN FULL STOP]
+"\u2499" => "18."
+
+# â’… [PARENTHESIZED NUMBER EIGHTEEN]
+"\u2485" => "(18)"
+
+# ⑲ [CIRCLED NUMBER NINETEEN]
+"\u2472" => "19"
+
+# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
+"\u24F3" => "19"
+
+# â’š [NUMBER NINETEEN FULL STOP]
+"\u249A" => "19."
+
+# â’† [PARENTHESIZED NUMBER NINETEEN]
+"\u2486" => "(19)"
+
+# ⑳ [CIRCLED NUMBER TWENTY]
+"\u2473" => "20"
+
+# â“´ [NEGATIVE CIRCLED NUMBER TWENTY]
+"\u24F4" => "20"
+
+# â’› [NUMBER TWENTY FULL STOP]
+"\u249B" => "20."
+
+# â’‡ [PARENTHESIZED NUMBER TWENTY]
+"\u2487" => "(20)"
+
+# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00AB" => "\""
+
+# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00BB" => "\""
+
+# “ [LEFT DOUBLE QUOTATION MARK]
+"\u201C" => "\""
+
+# †[RIGHT DOUBLE QUOTATION MARK]
+"\u201D" => "\""
+
+# „ [DOUBLE LOW-9 QUOTATION MARK]
+"\u201E" => "\""
+
+# ″ [DOUBLE PRIME]
+"\u2033" => "\""
+
+# ‶ [REVERSED DOUBLE PRIME]
+"\u2036" => "\""
+
+# â [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275D" => "\""
+
+# âž [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
+"\u275E" => "\""
+
+# â® [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276E" => "\""
+
+# ⯠[HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276F" => "\""
+
+# " [FULLWIDTH QUOTATION MARK]
+"\uFF02" => "\""
+
+# ‘ [LEFT SINGLE QUOTATION MARK]
+"\u2018" => "\'"
+
+# ’ [RIGHT SINGLE QUOTATION MARK]
+"\u2019" => "\'"
+
+# ‚ [SINGLE LOW-9 QUOTATION MARK]
+"\u201A" => "\'"
+
+# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
+"\u201B" => "\'"
+
+# ′ [PRIME]
+"\u2032" => "\'"
+
+# ‵ [REVERSED PRIME]
+"\u2035" => "\'"
+
+# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
+"\u2039" => "\'"
+
+# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
+"\u203A" => "\'"
+
+# â› [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275B" => "\'"
+
+# ✠[HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
+"\u275C" => "\'"
+
+# ' [FULLWIDTH APOSTROPHE]
+"\uFF07" => "\'"
+
+# †[HYPHEN]
+"\u2010" => "-"
+
+# ‑ [NON-BREAKING HYPHEN]
+"\u2011" => "-"
+
+# ‒ [FIGURE DASH]
+"\u2012" => "-"
+
+# – [EN DASH]
+"\u2013" => "-"
+
+# — [EM DASH]
+"\u2014" => "-"
+
+# â» [SUPERSCRIPT MINUS]
+"\u207B" => "-"
+
+# â‚‹ [SUBSCRIPT MINUS]
+"\u208B" => "-"
+
+# ï¼ [FULLWIDTH HYPHEN-MINUS]
+"\uFF0D" => "-"
+
+# â… [LEFT SQUARE BRACKET WITH QUILL]
+"\u2045" => "["
+
+# â² [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2772" => "["
+
+# ï¼» [FULLWIDTH LEFT SQUARE BRACKET]
+"\uFF3B" => "["
+
+# ↠[RIGHT SQUARE BRACKET WITH QUILL]
+"\u2046" => "]"
+
+# â³ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2773" => "]"
+
+# ï¼½ [FULLWIDTH RIGHT SQUARE BRACKET]
+"\uFF3D" => "]"
+
+# â½ [SUPERSCRIPT LEFT PARENTHESIS]
+"\u207D" => "("
+
+# â‚ [SUBSCRIPT LEFT PARENTHESIS]
+"\u208D" => "("
+
+# ⨠[MEDIUM LEFT PARENTHESIS ORNAMENT]
+"\u2768" => "("
+
+# ⪠[MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
+"\u276A" => "("
+
+# ( [FULLWIDTH LEFT PARENTHESIS]
+"\uFF08" => "("
+
+# ⸨ [LEFT DOUBLE PARENTHESIS]
+"\u2E28" => "(("
+
+# â¾ [SUPERSCRIPT RIGHT PARENTHESIS]
+"\u207E" => ")"
+
+# ₎ [SUBSCRIPT RIGHT PARENTHESIS]
+"\u208E" => ")"
+
+# â© [MEDIUM RIGHT PARENTHESIS ORNAMENT]
+"\u2769" => ")"
+
+# â« [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
+"\u276B" => ")"
+
+# ) [FULLWIDTH RIGHT PARENTHESIS]
+"\uFF09" => ")"
+
+# ⸩ [RIGHT DOUBLE PARENTHESIS]
+"\u2E29" => "))"
+
+# ⬠[MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276C" => "<"
+
+# â° [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2770" => "<"
+
+# < [FULLWIDTH LESS-THAN SIGN]
+"\uFF1C" => "<"
+
+# â­ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276D" => ">"
+
+# â± [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2771" => ">"
+
+# > [FULLWIDTH GREATER-THAN SIGN]
+"\uFF1E" => ">"
+
+# â´ [MEDIUM LEFT CURLY BRACKET ORNAMENT]
+"\u2774" => "{"
+
+# ï½› [FULLWIDTH LEFT CURLY BRACKET]
+"\uFF5B" => "{"
+
+# âµ [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
+"\u2775" => "}"
+
+# ï½ [FULLWIDTH RIGHT CURLY BRACKET]
+"\uFF5D" => "}"
+
+# ⺠[SUPERSCRIPT PLUS SIGN]
+"\u207A" => "+"
+
+# ₊ [SUBSCRIPT PLUS SIGN]
+"\u208A" => "+"
+
+# + [FULLWIDTH PLUS SIGN]
+"\uFF0B" => "+"
+
+# â¼ [SUPERSCRIPT EQUALS SIGN]
+"\u207C" => "="
+
+# ₌ [SUBSCRIPT EQUALS SIGN]
+"\u208C" => "="
+
+# ï¼ [FULLWIDTH EQUALS SIGN]
+"\uFF1D" => "="
+
+# ï¼ [FULLWIDTH EXCLAMATION MARK]
+"\uFF01" => "!"
+
+# ‼ [DOUBLE EXCLAMATION MARK]
+"\u203C" => "!!"
+
+# ≠[EXCLAMATION QUESTION MARK]
+"\u2049" => "!?"
+
+# # [FULLWIDTH NUMBER SIGN]
+"\uFF03" => "#"
+
+# $ [FULLWIDTH DOLLAR SIGN]
+"\uFF04" => "$"
+
+# â’ [COMMERCIAL MINUS SIGN]
+"\u2052" => "%"
+
+# ï¼… [FULLWIDTH PERCENT SIGN]
+"\uFF05" => "%"
+
+# & [FULLWIDTH AMPERSAND]
+"\uFF06" => "&"
+
+# ⎠[LOW ASTERISK]
+"\u204E" => "*"
+
+# * [FULLWIDTH ASTERISK]
+"\uFF0A" => "*"
+
+# , [FULLWIDTH COMMA]
+"\uFF0C" => ","
+
+# . [FULLWIDTH FULL STOP]
+"\uFF0E" => "."
+
+# â„ [FRACTION SLASH]
+"\u2044" => "/"
+
+# ï¼ [FULLWIDTH SOLIDUS]
+"\uFF0F" => "/"
+
+# : [FULLWIDTH COLON]
+"\uFF1A" => ":"
+
+# â [REVERSED SEMICOLON]
+"\u204F" => ";"
+
+# ï¼› [FULLWIDTH SEMICOLON]
+"\uFF1B" => ";"
+
+# ? [FULLWIDTH QUESTION MARK]
+"\uFF1F" => "?"
+
+# ⇠[DOUBLE QUESTION MARK]
+"\u2047" => "??"
+
+# ∠[QUESTION EXCLAMATION MARK]
+"\u2048" => "?!"
+
+# ï¼  [FULLWIDTH COMMERCIAL AT]
+"\uFF20" => "@"
+
+# ï¼¼ [FULLWIDTH REVERSE SOLIDUS]
+"\uFF3C" => "\\"
+
+# ‸ [CARET]
+"\u2038" => "^"
+
+# ï¼¾ [FULLWIDTH CIRCUMFLEX ACCENT]
+"\uFF3E" => "^"
+
+# _ [FULLWIDTH LOW LINE]
+"\uFF3F" => "_"
+
+# â“ [SWUNG DASH]
+"\u2053" => "~"
+
+# ~ [FULLWIDTH TILDE]
+"\uFF5E" => "~"
+
+################################################################
+# Below is the Perl script used to generate the above mappings #
+# from ASCIIFoldingFilter.java: #
+################################################################
+#
+# #!/usr/bin/perl
+#
+# use warnings;
+# use strict;
+#
+# my @source_chars = ();
+# my @source_char_descriptions = ();
+# my $target = '';
+#
+# while (<>) {
+# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) {
+# push @source_chars, $1;
+# push @source_char_descriptions, $2;
+# next;
+# }
+# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) {
+# $target .= $1;
+# next;
+# }
+# if (/break;/) {
+# $target = "\\\"" if ($target eq '"');
+# for my $source_char_num (0..$#source_chars) {
+# print "# $source_char_descriptions[$source_char_num]\n";
+# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n";
+# }
+# @source_chars = ();
+# @source_char_descriptions = ();
+# $target = '';
+# }
+# }
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-ISOLatin1Accent.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 000000000..ede774258
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,246 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+# example:
+# "À" => "A"
+# "\u00C0" => "A"
+# "\u00C0" => "\u0041"
+# "ß" => "ss"
+# "\t" => " "
+# "\n" => ""
+
+# À => A
+"\u00C0" => "A"
+
+# Ã => A
+"\u00C1" => "A"
+
+# Â => A
+"\u00C2" => "A"
+
+# Ã => A
+"\u00C3" => "A"
+
+# Ä => A
+"\u00C4" => "A"
+
+# Ã… => A
+"\u00C5" => "A"
+
+# Æ => AE
+"\u00C6" => "AE"
+
+# Ç => C
+"\u00C7" => "C"
+
+# È => E
+"\u00C8" => "E"
+
+# É => E
+"\u00C9" => "E"
+
+# Ê => E
+"\u00CA" => "E"
+
+# Ë => E
+"\u00CB" => "E"
+
+# Ì => I
+"\u00CC" => "I"
+
+# Ã => I
+"\u00CD" => "I"
+
+# ÃŽ => I
+"\u00CE" => "I"
+
+# Ã => I
+"\u00CF" => "I"
+
+# IJ => IJ
+"\u0132" => "IJ"
+
+# Ã => D
+"\u00D0" => "D"
+
+# Ñ => N
+"\u00D1" => "N"
+
+# Ã’ => O
+"\u00D2" => "O"
+
+# Ó => O
+"\u00D3" => "O"
+
+# Ô => O
+"\u00D4" => "O"
+
+# Õ => O
+"\u00D5" => "O"
+
+# Ö => O
+"\u00D6" => "O"
+
+# Ø => O
+"\u00D8" => "O"
+
+# Å’ => OE
+"\u0152" => "OE"
+
+# Þ
+"\u00DE" => "TH"
+
+# Ù => U
+"\u00D9" => "U"
+
+# Ú => U
+"\u00DA" => "U"
+
+# Û => U
+"\u00DB" => "U"
+
+# Ü => U
+"\u00DC" => "U"
+
+# Ã => Y
+"\u00DD" => "Y"
+
+# Ÿ => Y
+"\u0178" => "Y"
+
+# à => a
+"\u00E0" => "a"
+
+# á => a
+"\u00E1" => "a"
+
+# â => a
+"\u00E2" => "a"
+
+# ã => a
+"\u00E3" => "a"
+
+# ä => a
+"\u00E4" => "a"
+
+# å => a
+"\u00E5" => "a"
+
+# æ => ae
+"\u00E6" => "ae"
+
+# ç => c
+"\u00E7" => "c"
+
+# è => e
+"\u00E8" => "e"
+
+# é => e
+"\u00E9" => "e"
+
+# ê => e
+"\u00EA" => "e"
+
+# ë => e
+"\u00EB" => "e"
+
+# ì => i
+"\u00EC" => "i"
+
+# í => i
+"\u00ED" => "i"
+
+# î => i
+"\u00EE" => "i"
+
+# ï => i
+"\u00EF" => "i"
+
+# ij => ij
+"\u0133" => "ij"
+
+# ð => d
+"\u00F0" => "d"
+
+# ñ => n
+"\u00F1" => "n"
+
+# ò => o
+"\u00F2" => "o"
+
+# ó => o
+"\u00F3" => "o"
+
+# ô => o
+"\u00F4" => "o"
+
+# õ => o
+"\u00F5" => "o"
+
+# ö => o
+"\u00F6" => "o"
+
+# ø => o
+"\u00F8" => "o"
+
+# Å“ => oe
+"\u0153" => "oe"
+
+# ß => ss
+"\u00DF" => "ss"
+
+# þ => th
+"\u00FE" => "th"
+
+# ù => u
+"\u00F9" => "u"
+
+# ú => u
+"\u00FA" => "u"
+
+# û => u
+"\u00FB" => "u"
+
+# ü => u
+"\u00FC" => "u"
+
+# ý => y
+"\u00FD" => "y"
+
+# ÿ => y
+"\u00FF" => "y"
+
+# ff => ff
+"\uFB00" => "ff"
+
+# ï¬ => fi
+"\uFB01" => "fi"
+
+# fl => fl
+"\uFB02" => "fl"
+
+# ffi => ffi
+"\uFB03" => "ffi"
+
+# ffl => ffl
+"\uFB04" => "ffl"
+
+# ſt => ft
+"\uFB05" => "ft"
+
+# st => st
+"\uFB06" => "st"
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/protwords.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/solrconfig.xml b/solr-8.1.1/example/example-DIH/solr/mail/conf/solrconfig.xml
new file mode 100644
index 000000000..531cdd7f9
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/solrconfig.xml
@@ -0,0 +1,1356 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler-extras/lib/" regex=".*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first.
+ The default is 100 MB. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="solr.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting the value to true will instruct the underlying Lucene
+ IndexWriter to write its info stream to solr's log. By default,
+ this is enabled here, and controlled through log4j2.xml
+ -->
+ <infoStream>true</infoStream>
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory. -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+ <!-- Max Boolean Clauses
+
+ Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded.
+
+ ** WARNING **
+
+ This option actually modifies a global Lucene property that
+ will affect all SolrCores. If multiple solrconfig.xml files
+ disagree on this property, the value at any given moment will
+ be based on the last SolrCore to be initialized.
+
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+
+ <requestHandler name="/dataimport" class="solr.DataImportHandler">
+ <lst name="defaults">
+ <str name="config">mail-data-config.xml</str>
+ </lst>
+ </requestHandler>
+
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <str name="df">text</str>
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ <str name="df">text</str>
+ </lst>
+ </requestHandler>
+
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+
+ <!-- VelocityResponseWriter settings -->
+ <str name="wt">velocity</str>
+ <str name="v.template">browse</str>
+ <str name="v.layout">layout</str>
+
+ <!-- Query settings -->
+ <str name="defType">edismax</str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">10</str>
+ <str name="fl">*,score</str>
+
+ <!-- Faceting defaults -->
+ <str name="facet">on</str>
+ <str name="facet.mincount">1</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">content</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="uprefix">ignored_</str>
+
+ <!-- capture link hrefs but ignore div attributes -->
+ <str name="captureAttr">true</str>
+ <str name="fmap.a">links</str>
+ <str name="fmap.div">ignored_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">text</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+
+ <!-- a spellchecker that uses a different distance measure -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">jarowinkler</str>
+ <str name="field">spell</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="distanceMeasure">
+ org.apache.lucene.search.spell.JaroWinklerDistance
+ </str>
+ </lst>
+ -->
+
+ <!-- a spellchecker that use an alternate comparator
+
+ comparatorClass be one of:
+ 1. score (default)
+ 2. freq (Frequency first, then score)
+ 3. A fully qualified class name
+ -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">freq</str>
+ <str name="field">lowerfilt</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="comparatorClass">freq</str>
+ -->
+
+ <!-- A spellchecker that reads the list of words from a file -->
+ <!--
+ <lst name="spellchecker">
+ <str name="classname">solr.FileBasedSpellChecker</str>
+ <str name="name">file</str>
+ <str name="sourceLocation">spellings.txt</str>
+ <str name="characterEncoding">UTF-8</str>
+ <str name="spellcheckIndexDir">spellcheckerFile</str>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck.dictionary">wordbreak</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <searchComponent name="suggest" class="solr.SuggestComponent">
+ <lst name="suggester">
+ <str name="name">mySuggester</str>
+ <str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
+ <str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
+ <str name="field">cat</str>
+ <str name="weightField">price</str>
+ <str name="suggestAnalyzerFieldType">string</str>
+ </lst>
+ </searchComponent>
+
+ <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="suggest">true</str>
+ <str name="suggest.count">10</str>
+ </lst>
+ <arr name="components">
+ <str>suggest</str>
+ </arr>
+ </requestHandler>
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ <str name="config-file">elevate.xml</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="df">text</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+
+</config>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/spellings.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/spellings.txt
new file mode 100644
index 000000000..162a044d5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/spellings.txt
@@ -0,0 +1,2 @@
+pizza
+history
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/stopwords.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/synonyms.txt b/solr-8.1.1/example/example-DIH/solr/mail/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/update-script.js b/solr-8.1.1/example/example-DIH/solr/mail/conf/update-script.js
new file mode 100644
index 000000000..49b07f9b7
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/update-script.js
@@ -0,0 +1,53 @@
+/*
+ This is a basic skeleton JavaScript update processor.
+
+ In order for this to be executed, it must be properly wired into solrconfig.xml; by default it is commented out in
+ the example solrconfig.xml and must be uncommented to be enabled.
+
+ See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details.
+*/
+
+function processAdd(cmd) {
+
+ doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
+ id = doc.getFieldValue("id");
+ logger.info("update-script#processAdd: id=" + id);
+
+// Set a field value:
+// doc.setField("foo_s", "whatever");
+
+// Get a configuration parameter:
+// config_param = params.get('config_param'); // "params" only exists if processor configured with <lst name="params">
+
+// Get a request parameter:
+// some_param = req.getParams().get("some_param")
+
+// Add a field of field names that match a pattern:
+// - Potentially useful to determine the fields/attributes represented in a result set, via faceting on field_name_ss
+// field_names = doc.getFieldNames().toArray();
+// for(i=0; i < field_names.length; i++) {
+// field_name = field_names[i];
+// if (/attr_.*/.test(field_name)) { doc.addField("attribute_ss", field_names[i]); }
+// }
+
+}
+
+function processDelete(cmd) {
+ // no-op
+}
+
+function processMergeIndexes(cmd) {
+ // no-op
+}
+
+function processCommit(cmd) {
+ // no-op
+}
+
+function processRollback(cmd) {
+ // no-op
+}
+
+function finish() {
+ // no-op
+}
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example.xsl b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example.xsl
new file mode 100644
index 000000000..b89927008
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+ <xsl:output media-type="text/html" encoding="UTF-8"/>
+
+ <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+
+ <xsl:template match='/'>
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <xsl:call-template name="css"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$title"/></h1>
+ <div class="note">
+ This has been formatted by the sample "example.xsl" transform -
+ use your own XSLT to get a nicer page
+ </div>
+ <xsl:apply-templates select="response/result/doc"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <div class="doc">
+ <table width="100%">
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ <xsl:param name="pos"></xsl:param>
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+
+ <xsl:if test="boolean(//lst[@name='explain'])">
+ <xsl:element name="a">
+ <!-- can't allow whitespace here -->
+ <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+ <br/>
+ <xsl:element name="div">
+ <xsl:attribute name="class">exp</xsl:attribute>
+ <xsl:attribute name="id">
+ <xsl:value-of select="concat('exp-',$pos)" />
+ </xsl:attribute>
+ <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+ </xsl:element>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="doc/arr" priority="100">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="*">
+ <li><xsl:value-of select="."/></li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+
+ <xsl:template name="css">
+ <script>
+ function toggle(id) {
+ var obj = document.getElementById(id);
+ obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+ }
+ </script>
+ <style type="text/css">
+ body { font-family: "Lucida Grande", sans-serif }
+ td.name { font-style: italic; font-size:80%; }
+ td { vertical-align: top; }
+ ul { margin: 0px; margin-left: 1em; padding: 0px; }
+ .note { font-size:80%; }
+ .doc { margin-top: 1em; border-top: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ </style>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_atom.xsl b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_atom.xsl
new file mode 100644
index 000000000..b6c23151d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_atom.xsl
@@ -0,0 +1,67 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+
+ <xsl:template match='/'>
+ <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Example Solr Atom 1.0 Feed</title>
+ <subtitle>
+ This has been formatted by the sample "example_atom.xsl" transform -
+ use your own XSLT to get a nicer Atom feed.
+ </subtitle>
+ <author>
+ <name>Apache Solr</name>
+ <email>solr-user@lucene.apache.org</email>
+ </author>
+ <link rel="self" type="application/atom+xml"
+ href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+ <updated>
+ <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+ </updated>
+ <id>tag:localhost,2007:example</id>
+ <xsl:apply-templates select="response/result/doc"/>
+ </feed>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <entry>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link href="http://localhost:8983/solr/select?q={$id}"/>
+ <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+ <summary><xsl:value-of select="arr[@name='features']"/></summary>
+ <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+ </entry>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl
new file mode 100644
index 000000000..c8ab5bfb1
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+ <xsl:template match='/'>
+ <rss version="2.0">
+ <channel>
+ <title>Example Solr RSS 2.0 Feed</title>
+ <link>http://localhost:8983/solr</link>
+ <description>
+ This has been formatted by the sample "example_rss.xsl" transform -
+ use your own XSLT to get a nicer RSS feed.
+ </description>
+ <language>en-us</language>
+ <docs>http://localhost:8983/solr</docs>
+ <xsl:apply-templates select="response/result/doc"/>
+ </channel>
+ </rss>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+ <item>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </link>
+ <description>
+ <xsl:value-of select="arr[@name='features']"/>
+ </description>
+ <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+ <guid>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </guid>
+ </item>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/luke.xsl b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/luke.xsl
new file mode 100644
index 000000000..05fb5bfee
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/luke.xsl
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<!--
+ Display the luke request handler with graphs
+ -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ version="1.0"
+ >
+ <xsl:output
+ method="html"
+ encoding="UTF-8"
+ media-type="text/html"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ />
+
+ <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <link rel="stylesheet" type="text/css" href="solr-admin.css"/>
+ <link rel="icon" href="favicon.ico" type="image/x-icon"/>
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
+ <title>
+ <xsl:value-of select="$title"/>
+ </title>
+ <xsl:call-template name="css"/>
+
+ </head>
+ <body>
+ <h1>
+ <xsl:value-of select="$title"/>
+ </h1>
+ <div class="doc">
+ <ul>
+ <xsl:if test="response/lst[@name='index']">
+ <li>
+ <a href="#index">Index Statistics</a>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <li>
+ <a href="#fields">Field Statistics</a>
+ <ul>
+ <xsl:for-each select="response/lst[@name='fields']/lst">
+ <li>
+ <a href="#{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <li>
+ <a href="#doc">Document statistics</a>
+ </li>
+ </xsl:if>
+ </ul>
+ </div>
+ <xsl:if test="response/lst[@name='index']">
+ <h2><a name="index"/>Index Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='index']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <h2><a name="fields"/>Field Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='fields']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <h2><a name="doc"/>Document statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='doc']"/>
+ </xsl:if>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="lst">
+ <xsl:if test="parent::lst">
+ <tr>
+ <td colspan="2">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </td>
+ </tr>
+ </xsl:if>
+ <xsl:if test="not(parent::lst)">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="list">
+ <xsl:if test="count(child::*)>0">
+ <table>
+ <thead>
+ <tr>
+ <th colspan="2">
+ <p>
+ <a name="{@name}"/>
+ </p>
+ <xsl:value-of select="@name"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:choose>
+ <xsl:when
+ test="@name='histogram'">
+ <tr>
+ <td colspan="2">
+ <xsl:call-template name="histogram"/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tbody>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="histogram">
+ <div class="doc">
+ <xsl:call-template name="barchart">
+ <xsl:with-param name="max_bar_width">50</xsl:with-param>
+ <xsl:with-param name="iwidth">800</xsl:with-param>
+ <xsl:with-param name="iheight">160</xsl:with-param>
+ <xsl:with-param name="fill">blue</xsl:with-param>
+ </xsl:call-template>
+ </div>
+ </xsl:template>
+
+ <xsl:template name="barchart">
+ <xsl:param name="max_bar_width"/>
+ <xsl:param name="iwidth"/>
+ <xsl:param name="iheight"/>
+ <xsl:param name="fill"/>
+ <xsl:variable name="max">
+ <xsl:for-each select="int">
+ <xsl:sort data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="bars">
+ <xsl:value-of select="count(int)"/>
+ </xsl:variable>
+ <xsl:variable name="bar_width">
+ <xsl:choose>
+ <xsl:when test="$max_bar_width &lt; ($iwidth div $bars)">
+ <xsl:value-of select="$max_bar_width"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$iwidth div $bars"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <table class="histogram">
+ <tbody>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="."/>
+ <div class="histogram">
+ <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
+ </div>
+ </td>
+ </xsl:for-each>
+ </tr>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:for-each>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="keyvalue">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="int|bool|long|float|double|uuid|date">
+ <xsl:call-template name="keyvalue"/>
+ </xsl:template>
+
+ <xsl:template match="arr">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="child::*">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="str">
+ <xsl:choose>
+ <xsl:when test="@name='schema' or @name='index' or @name='flags'">
+ <xsl:call-template name="schema"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="keyvalue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="schema">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:if test="contains(.,'unstored')">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <xsl:if test="not(contains(.,'unstored'))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="charList">
+ <xsl:value-of select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template name="infochar2string">
+ <xsl:param name="i">1</xsl:param>
+ <xsl:param name="charList"/>
+
+ <xsl:variable name="char">
+ <xsl:value-of select="substring($charList,$i,1)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$char='I'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
+ <xsl:when test="$char='T'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
+ <xsl:when test="$char='S'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
+ <xsl:when test="$char='M'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
+ <xsl:when test="$char='V'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
+ <xsl:when test="$char='o'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
+ <xsl:when test="$char='p'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
+ <xsl:when test="$char='O'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
+ <xsl:when test="$char='L'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
+ <xsl:when test="$char='B'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
+ <xsl:when test="$char='C'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
+ <xsl:when test="$char='f'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
+ <xsl:when test="$char='l'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="not($i>=string-length($charList))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="i">
+ <xsl:value-of select="$i+1"/>
+ </xsl:with-param>
+ <xsl:with-param name="charList">
+ <xsl:value-of select="$charList"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="css">
+ <style type="text/css">
+ <![CDATA[
+ td.name {font-style: italic; font-size:80%; }
+ .doc { margin: 0.5em; border: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
+ table.histogram { width: auto; vertical-align: bottom; }
+ table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
+ ]]>
+ </style>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl
new file mode 100644
index 000000000..a96e1d024
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl
@@ -0,0 +1,70 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query response into Solr Update XML compliant XML.
+ When used in the xslt response writer you will get UpdaateXML as output.
+ But you can also store a query response XML to disk and feed this XML to
+ the XSLTUpdateRequestHandler to index the content. Provided as example only.
+ See http://wiki.apache.org/solr/XsltUpdateRequestHandler for more info
+ -->
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+ <xsl:output media-type="text/xml" method="xml" indent="yes"/>
+
+ <xsl:template match='/'>
+ <add>
+ <xsl:apply-templates select="response/result/doc"/>
+ </add>
+ </xsl:template>
+
+ <!-- Ignore score (makes no sense to index) -->
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <doc>
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </doc>
+ </xsl:template>
+
+ <!-- Flatten arrays to duplicate field lines -->
+ <xsl:template match="doc/arr" priority="100">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:for-each select="*">
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/mail/core.properties b/solr-8.1.1/example/example-DIH/solr/mail/core.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/mail/core.properties
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr.xml b/solr-8.1.1/example/example-DIH/solr/solr.xml
new file mode 100644
index 000000000..191e51f59
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<solr></solr>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/kmeans-attributes.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/kmeans-attributes.xml
new file mode 100644
index 000000000..d802465f6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/kmeans-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the bisecting k-means clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/lingo-attributes.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/lingo-attributes.xml
new file mode 100644
index 000000000..5febfc320
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/lingo-attributes.xml
@@ -0,0 +1,24 @@
+<!--
+ Default configuration for the Lingo clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <!--
+ The language to assume for clustered documents.
+ For a list of allowed values, see:
+ http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
+ -->
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="LingoClusteringAlgorithm.desiredClusterCountBase">
+ <value type="java.lang.Integer" value="20"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/stc-attributes.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/stc-attributes.xml
new file mode 100644
index 000000000..c1bf110c8
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/clustering/carrot2/stc-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the STC clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/currency.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/currency.xml
new file mode 100644
index 000000000..532221a90
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/currency.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example exchange rates file for CurrencyFieldType named "currency" in example schema -->
+
+<currencyConfig version="1.0">
+ <rates>
+ <!-- Updated from http://www.exchangerate.com/ at 2011-09-27 -->
+ <rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" />
+ <rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" />
+ <rate from="USD" to="EUR" rate="0.743676" comment="European Euro" />
+ <rate from="USD" to="BRL" rate="1.881093" comment="BRAZIL Real" />
+ <rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" />
+ <rate from="USD" to="CLP" rate="519.0996" comment="CHILE Peso" />
+ <rate from="USD" to="CNY" rate="6.387310" comment="CHINA Yuan" />
+ <rate from="USD" to="CZK" rate="18.47134" comment="CZECH REP. Koruna" />
+ <rate from="USD" to="DKK" rate="5.515436" comment="DENMARK Krone" />
+ <rate from="USD" to="HKD" rate="7.801922" comment="HONG KONG Dollar" />
+ <rate from="USD" to="HUF" rate="215.6169" comment="HUNGARY Forint" />
+ <rate from="USD" to="ISK" rate="118.1280" comment="ICELAND Krona" />
+ <rate from="USD" to="INR" rate="49.49088" comment="INDIA Rupee" />
+ <rate from="USD" to="XDR" rate="0.641358" comment="INTNL MON. FUND SDR" />
+ <rate from="USD" to="ILS" rate="3.709739" comment="ISRAEL Sheqel" />
+ <rate from="USD" to="JPY" rate="76.32419" comment="JAPAN Yen" />
+ <rate from="USD" to="KRW" rate="1169.173" comment="KOREA (SOUTH) Won" />
+ <rate from="USD" to="KWD" rate="0.275142" comment="KUWAIT Dinar" />
+ <rate from="USD" to="MXN" rate="13.85895" comment="MEXICO Peso" />
+ <rate from="USD" to="NZD" rate="1.285159" comment="NEW ZEALAND Dollar" />
+ <rate from="USD" to="NOK" rate="5.859035" comment="NORWAY Krone" />
+ <rate from="USD" to="PKR" rate="87.57007" comment="PAKISTAN Rupee" />
+ <rate from="USD" to="PEN" rate="2.730683" comment="PERU Sol" />
+ <rate from="USD" to="PHP" rate="43.62039" comment="PHILIPPINES Peso" />
+ <rate from="USD" to="PLN" rate="3.310139" comment="POLAND Zloty" />
+ <rate from="USD" to="RON" rate="3.100932" comment="ROMANIA Leu" />
+ <rate from="USD" to="RUB" rate="32.14663" comment="RUSSIA Ruble" />
+ <rate from="USD" to="SAR" rate="3.750465" comment="SAUDI ARABIA Riyal" />
+ <rate from="USD" to="SGD" rate="1.299352" comment="SINGAPORE Dollar" />
+ <rate from="USD" to="ZAR" rate="8.329761" comment="SOUTH AFRICA Rand" />
+ <rate from="USD" to="SEK" rate="6.883442" comment="SWEDEN Krona" />
+ <rate from="USD" to="CHF" rate="0.906035" comment="SWITZERLAND Franc" />
+ <rate from="USD" to="TWD" rate="30.40283" comment="TAIWAN Dollar" />
+ <rate from="USD" to="THB" rate="30.89487" comment="THAILAND Baht" />
+ <rate from="USD" to="AED" rate="3.672955" comment="U.A.E. Dirham" />
+ <rate from="USD" to="UAH" rate="7.988582" comment="UKRAINE Hryvnia" />
+ <rate from="USD" to="GBP" rate="0.647910" comment="UNITED KINGDOM Pound" />
+
+ <!-- Cross-rates for some common currencies -->
+ <rate from="EUR" to="GBP" rate="0.869914" />
+ <rate from="EUR" to="NOK" rate="7.800095" />
+ <rate from="GBP" to="NOK" rate="8.966508" />
+ </rates>
+</currencyConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/dataimport.properties b/solr-8.1.1/example/example-DIH/solr/solr/conf/dataimport.properties
new file mode 100644
index 000000000..80b390f1c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/dataimport.properties
@@ -0,0 +1,3 @@
+#Tue Jan 31 09:48:27 UTC 2017
+last_index_time=2017-01-31 09\:48\:26
+sep.last_index_time=2017-01-31 09\:48\:26
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/elevate.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/elevate.xml
new file mode 100644
index 000000000..2c09ebed6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/elevate.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+ loaded once at startup. If it is found in Solr's data
+ directory, it will be re-loaded every commit.
+
+ See http://wiki.apache.org/solr/QueryElevationComponent for more info
+
+-->
+<elevate>
+ <!-- Query elevation examples
+ <query text="foo bar">
+ <doc id="1" />
+ <doc id="2" />
+ <doc id="3" />
+ </query>
+
+for use with techproducts example
+
+ <query text="ipod">
+ <doc id="MA147LL/A" /> put the actual ipod at the top
+ <doc id="IW-02" exclude="true" /> exclude this cable
+ </query>
+-->
+
+</elevate>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ca.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_fr.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ga.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_it.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/hyphenations_ga.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stemdict_nl.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stoptags_ja.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ar.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_bg.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ca.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ckb.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ckb.txt
new file mode 100644
index 000000000..87abf118f
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ckb.txt
@@ -0,0 +1,136 @@
+# set of kurdish stopwords
+# note these have been normalized with our scheme (e represented with U+06D5, etc)
+# constructed from:
+# * Fig 5 of "Building A Test Collection For Sorani Kurdish" (Esmaili et al)
+# * "Sorani Kurdish: A Reference Grammar with selected readings" (Thackston)
+# * Corpus-based analysis of 77M word Sorani collection: wikipedia, news, blogs, etc
+
+# and
+Ùˆ
+# which
+Ú©Û•
+# of
+ی
+# made/did
+کرد
+# that/which
+ئەوەی
+# on/head
+سەر
+# two
+دوو
+# also
+هەروەها
+# from/that
+Ù„Û•Ùˆ
+# makes/does
+دەکات
+# some
+چەند
+# every
+هەر
+
+# demonstratives
+# that
+ئەو
+# this
+ئەم
+
+# personal pronouns
+# I
+من
+# we
+ئێمە
+# you
+تۆ
+# you
+ئێوە
+# he/she/it
+ئەو
+# they
+ئەوان
+
+# prepositions
+# to/with/by
+بە
+Ù¾ÛŽ
+# without
+بەبێ
+# along with/while/during
+بەدەم
+# in the opinion of
+بەلای
+# according to
+بەپێی
+# before
+بەرلە
+# in the direction of
+بەرەوی
+# in front of/toward
+بەرەوە
+# before/in the face of
+بەردەم
+# without
+بێ
+# except for
+بێجگە
+# for
+بۆ
+# on/in
+دە
+تێ
+# with
+دەگەڵ
+# after
+دوای
+# except for/aside from
+جگە
+# in/from
+Ù„Û•
+Ù„ÛŽ
+# in front of/before/because of
+لەبەر
+# between/among
+لەبەینی
+# concerning/about
+لەبابەت
+# concerning
+لەبارەی
+# instead of
+لەباتی
+# beside
+لەبن
+# instead of
+لەبرێتی
+# behind
+لەدەم
+# with/together with
+Ù„Û•Ú¯Û•Úµ
+# by
+لەلایەن
+# within
+لەناو
+# between/among
+Ù„Û•Ù†ÛŽÙˆ
+# for the sake of
+لەپێناوی
+# with respect to
+لەرەوی
+# by means of/for
+لەرێ
+# for the sake of
+لەرێگا
+# on/on top of/according to
+لەسەر
+# under
+لەژێر
+# between/among
+ناو
+# between/among
+نێوان
+# after
+پاش
+# before
+Ù¾ÛŽØ´
+# like
+ÙˆÛ•Ú©
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_cz.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_da.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_de.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_el.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_en.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_es.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_eu.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fa.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fi.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fr.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ga.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_gl.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hi.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hu.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hy.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_id.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_it.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ja.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_lv.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_nl.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_no.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_pt.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ro.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ru.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_sv.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_th.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_tr.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/userdict_ja.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/managed-schema b/solr-8.1.1/example/example-DIH/solr/solr/conf/managed-schema
new file mode 100644
index 000000000..5c360b9b4
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/managed-schema
@@ -0,0 +1,1143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking. To improve performance one could
+ - set stored="false" for all fields possible (esp large fields) when you
+ only need to search on the field but don't need to return the original
+ value.
+ - set indexed="false" if you don't need to search on the field, but only
+ return the field as a result of searching on other indexed fields.
+ - remove all unneeded copyField statements
+ - for best index size and searching performance, set "index" to false
+ for all general text fields, use copyField to copy them to the
+ catchall "text" field, and use that for searching.
+ - For maximum indexing performance, use the ConcurrentUpdateSolrServer
+ java client.
+ - Remember to run the JVM in server mode, and use a higher logging level
+ that avoids logging every request
+-->
+
+<schema name="example-DIH-solr" version="1.6">
+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
+ version="x.y" is Solr's version number for the schema syntax and
+ semantics. It should not normally be changed by applications.
+
+ 1.0: multiValued attribute did not exist, all fields are multiValued
+ by nature
+ 1.1: multiValued attribute introduced, false by default
+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
+ except for text fields.
+ 1.3: removed optional field compress feature
+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
+ behavior when a single string produces multiple tokens. Defaults
+ to off for version >= 1.4
+ 1.5: omitNorms defaults to true for primitive field types
+ (int, float, boolean, string...)
+ 1.6: useDocValuesAsStored defaults to true.
+ -->
+
+
+ <!-- Valid attributes for fields:
+ name: mandatory - the name for the field
+ type: mandatory - the name of a field type from the
+ fieldTypes section
+ indexed: true if this field should be indexed (searchable or sortable)
+ stored: true if this field should be retrievable
+ docValues: true if this field should have doc values. Doc values are
+ useful (required, if you are using *Point fields) for faceting,
+ grouping, sorting and function queries. Doc values will make the index
+ faster to load, more NRT-friendly and more memory-efficient.
+ They however come with some limitations: they are currently only
+ supported by StrField, UUIDField, all *PointFields, and depending
+ on the field type, they might require the field to be single-valued,
+ be required or have a default value (check the documentation
+ of the field type you're interested in for more information)
+ multiValued: true if this field may contain multiple values per document
+ omitNorms: (expert) set to true to omit the norms associated with
+ this field (this disables length normalization and index-time
+ boosting for the field, and saves some memory). Only full-text
+ fields or fields that need an index-time boost need norms.
+ Norms are omitted for primitive (non-analyzed) types by default.
+ termVectors: [false] set to true to store the term vector for a
+ given field.
+ When using MoreLikeThis, fields used for similarity should be
+ stored for best performance.
+ termPositions: Store position information with the term vector.
+ This will increase storage costs.
+ termOffsets: Store offset information with the term vector. This
+ will increase storage costs.
+ required: The field is required. It will throw an error if the
+ value does not exist
+ default: a value that should be used if no value is specified
+ when adding a document.
+ -->
+
+ <!-- field names should consist of alphanumeric or underscore characters only and
+ not start with a digit. This is not currently strictly enforced,
+ but other field names will not have first class support from all components
+ and back compatibility is not guaranteed. Names with both leading and
+ trailing underscores (e.g. _version_) are reserved.
+ -->
+
+ <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
+ or Solr won't start. _version_ and update log are required for SolrCloud
+ -->
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
+
+ <!-- points to the root document of a block of nested documents. Required for nested
+ document support, may be removed otherwise
+ -->
+ <field name="_root_" type="string" indexed="true" stored="false"/>
+
+ <!-- Only remove the "id" field if you have a very good reason to. While not strictly
+ required, it is highly recommended. A <uniqueKey> is present in almost all Solr
+ installations. See the <uniqueKey> declaration below where <uniqueKey> is set to "id".
+ -->
+ <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
+
+ <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
+ <field name="name" type="text_general" indexed="true" stored="true"/>
+ <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/>
+ <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
+
+ <field name="weight" type="pfloat" indexed="true" stored="true"/>
+ <field name="price" type="pfloat" indexed="true" stored="true"/>
+ <field name="popularity" type="pint" indexed="true" stored="true" />
+ <field name="inStock" type="boolean" indexed="true" stored="true" />
+
+ <field name="store" type="location" indexed="true" stored="true"/>
+
+ <!-- Common metadata fields, named specifically to match up with
+ SolrCell metadata when parsing rich documents such as Word, PDF.
+ Some fields are multiValued only because Tika currently may return
+ multiple values for them. Some metadata is parsed from the documents,
+ but there are some which come from the client context:
+ "content_type": From the HTTP headers of incoming stream
+ "resourcename": From SolrCell request param resource.name
+ -->
+ <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="subject" type="text_general" indexed="true" stored="true"/>
+ <field name="description" type="text_general" indexed="true" stored="true"/>
+ <field name="comments" type="text_general" indexed="true" stored="true"/>
+ <field name="author" type="text_general" indexed="true" stored="true"/>
+ <field name="keywords" type="text_general" indexed="true" stored="true"/>
+ <field name="category" type="text_general" indexed="true" stored="true"/>
+ <field name="resourcename" type="text_general" indexed="true" stored="true"/>
+ <field name="url" type="text_general" indexed="true" stored="true"/>
+ <field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="last_modified" type="pdate" indexed="true" stored="true"/>
+ <field name="links" type="string" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Main body of document extracted by SolrCell.
+ NOTE: This field is not indexed by default, since it is also copied to "text"
+ using copyField below. This is to save space. Use this field for returning and
+ highlighting document content. Use the "text" field to search the content. -->
+ <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
+
+
+ <!-- catchall field, containing all other searchable text fields (implemented
+ via copyField further on in this schema -->
+ <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- catchall text field that indexes tokens both normally and in reverse for efficient
+ leading wildcard queries. -->
+ <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- non-tokenized version of manufacturer to make it easier to sort or group
+ results by manufacturer. copied from "manu" via copyField -->
+ <field name="manu_exact" type="string" indexed="true" stored="false"/>
+
+ <field name="payloads" type="payloads" indexed="true" stored="true"/>
+
+
+ <!--
+ Some fields such as popularity and manu_exact could be modified to
+ leverage doc values:
+ <field name="popularity" type="pint" indexed="true" stored="true" docValues="true" />
+ <field name="manu_exact" type="string" indexed="false" stored="false" docValues="true" />
+ <field name="cat" type="string" indexed="true" stored="true" docValues="true" multiValued="true"/>
+
+
+ Although it would make indexing slightly slower and the index bigger, it
+ would also make the index faster to load, more memory-efficient and more
+ NRT-friendly.
+ -->
+
+ <!-- Dynamic field definitions allow using convention over configuration
+ for fields via the specification of patterns to match field names.
+ EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
+ RESTRICTION: the glob-like pattern in the name attribute must have
+ a "*" only at the start or the end. -->
+
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pint" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" />
+ <dynamicField name="*_s_ns" type="string" indexed="true" stored="false" />
+ <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
+ <dynamicField name="*_ls" type="plong" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloat" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdouble" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
+ <dynamicField name="*_coordinate" type="pdouble" indexed="true" stored="false" />
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+
+ <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
+
+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+ <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <dynamicField name="random_*" type="random" />
+
+ <!-- uncomment the following to ignore any fields that don't already match an existing
+ field name or dynamic field, rather than reporting them as an error.
+ alternately, change the type="ignored" to some other type e.g. "text" if you want
+ unknown fields indexed and/or stored by default -->
+ <!--dynamicField name="*" type="ignored" multiValued="true" /-->
+
+
+
+
+ <!-- Field to use to determine and enforce document uniqueness.
+ Unless this field is marked with required="false", it will be a required field
+ -->
+ <uniqueKey>id</uniqueKey>
+
+ <!-- copyField commands copy one field to another at the time a document
+ is added to the index. It's used either to index the same field differently,
+ or to add multiple fields to the same field for easier/faster searching. -->
+
+ <copyField source="cat" dest="text"/>
+ <copyField source="name" dest="text"/>
+ <copyField source="manu" dest="text"/>
+ <copyField source="features" dest="text"/>
+ <copyField source="includes" dest="text"/>
+ <copyField source="manu" dest="manu_exact"/>
+
+ <!-- Copy the price into a currency enabled field (default USD) -->
+ <copyField source="price" dest="price_c"/>
+
+ <!-- Text fields from SolrCell to search by default in our catch-all field -->
+ <copyField source="title" dest="text"/>
+ <copyField source="author" dest="text"/>
+ <copyField source="description" dest="text"/>
+ <copyField source="keywords" dest="text"/>
+ <copyField source="content" dest="text"/>
+ <copyField source="content_type" dest="text"/>
+ <copyField source="resourcename" dest="text"/>
+ <copyField source="url" dest="text"/>
+
+ <!-- Create a string version of author for faceting -->
+ <copyField source="author" dest="author_s"/>
+
+ <!-- Above, multiple source fields are copied to the [text] field.
+ Another way to map multiple source fields to the same
+ destination field is to use the dynamic field syntax.
+ copyField also supports a maxChars to copy setting. -->
+
+ <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
+
+ <!-- copy name to alphaNameSort, a field designed for sorting by name -->
+ <!-- <copyField source="name" dest="alphaNameSort"/> -->
+
+
+ <!-- field type definitions. The "name" attribute is
+ just a label to be used by field definitions. The "class"
+ attribute and any other attributes determine the real
+ behavior of the fieldType.
+ Class names starting with "solr" refer to java classes in a
+ standard package such as org.apache.solr.analysis
+ -->
+
+ <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
+
+ <!-- boolean type: "true" or "false" -->
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+
+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
+ currently supported on types that are sorted internally as strings
+ and on numeric types.
+ This includes "string", "boolean", "pint", "pfloat", "plong", "pdate", "pdouble".
+ - If sortMissingLast="true", then a sort on this field will cause documents
+ without the field to come after documents with the field,
+ regardless of the requested sort order (asc or desc).
+ - If sortMissingFirst="true", then a sort on this field will cause documents
+ without the field to come before documents with the field,
+ regardless of the requested sort order.
+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
+ then default lucene sorting will be used which places docs without the
+ field first in an ascending sort and last in a descending sort.
+ -->
+
+ <!--
+ Numeric field types that index values using KD-trees.
+ Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
+ -->
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+ is a more restricted form of the canonical representation of dateTime
+ http://www.w3.org/TR/xmlschema-2/#dateTime
+ The trailing "Z" designates UTC time and is mandatory.
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+ All other components are mandatory.
+
+ Expressions can also be used to denote calculations that should be
+ performed relative to "NOW" to determine the value, ie...
+
+ NOW/HOUR
+ ... Round to the start of the current hour
+ NOW-1DAY
+ ... Exactly 1 day prior to now
+ NOW/DAY+6MONTHS+3DAYS
+ ... 6 months and 3 days in the future from the start of
+ the current day
+
+ Consult the DatePointField javadocs for more information.
+ -->
+ <!-- KD-tree versions of date fields -->
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+
+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
+ <fieldType name="binary" class="solr.BinaryField"/>
+
+ <!-- The "RandomSortField" is not used to store or search any
+ data. You can declare fields of this type it in your schema
+ to generate pseudo-random orderings of your docs for sorting
+ or function purposes. The ordering is generated based on the field
+ name and the version of the index. As long as the index version
+ remains unchanged, and the same field name is reused,
+ the ordering of the docs will be consistent.
+ If you want different psuedo-random orderings of documents,
+ for the same version of the index, use a dynamicField and
+ change the field name in the request.
+ -->
+ <fieldType name="random" class="solr.RandomSortField" indexed="true" />
+
+ <!-- solr.TextField allows the specification of custom text analyzers
+ specified as a tokenizer and a list of token filters. Different
+ analyzers may be specified for indexing and querying.
+
+ The optional positionIncrementGap puts space between multiple fields of
+ this type on the same document, with the purpose of preventing false phrase
+ matching across fields.
+
+ For more info on customizing your analyzer chain, please see
+ http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+ -->
+
+ <!-- One can also specify an existing Analyzer class that has a
+ default constructor via the class attribute on the analyzer element.
+ Example:
+ <fieldType name="text_greek" class="solr.TextField">
+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+ </fieldType>
+ -->
+
+ <!-- A text field that only splits on whitespace for exact matching of words -->
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A general text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ removes stop words from case-insensitive "stopwords.txt"
+ (empty by default), and down cases. At query time only, it
+ also applies synonyms. -->
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English: it
+ tokenizes with StandardTokenizer, removes English stop words
+ (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
+ finally applies Porter's stemming. The query time analyzer
+ also applies synonyms from synonyms.txt. -->
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterGraphFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Just like text_general except it reverses the characters of
+ each token, to enable more efficient leading wildcard queries. -->
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- charFilter + WhitespaceTokenizer -->
+ <!--
+ <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
+ <analyzer>
+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+ -->
+
+ <!-- This is an example of using the KeywordTokenizer along
+ With various TokenFilterFactories to produce a sortable field
+ that does not include some properties of the source text
+ -->
+ <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+ <analyzer>
+ <!-- KeywordTokenizer does no actual tokenizing, so the entire
+ input string is preserved as a single token
+ -->
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <!-- The LowerCase TokenFilter does what you expect, which can be
+ when you want your sorting to be case insensitive
+ -->
+ <filter class="solr.LowerCaseFilterFactory" />
+ <!-- The TrimFilter removes any leading or trailing whitespace -->
+ <filter class="solr.TrimFilterFactory" />
+ <!-- The PatternReplaceFilter gives you the flexibility to use
+ Java Regular expression to replace any sequence of characters
+ matching a pattern with an arbitrary replacement string,
+ which may include back references to portions of the original
+ string matched by the pattern.
+
+ See the Java Regular Expression documentation for more
+ information on pattern and replacement string syntax.
+
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
+ -->
+ <filter class="solr.PatternReplaceFilterFactory"
+ pattern="([^a-z])" replacement="" replace="all"
+ />
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="phonetic" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="payloads" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!--
+ The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
+ a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f
+ Attributes of the DelimitedPayloadTokenFilterFactory :
+ "delimiter" - a one character delimiter. Default is | (pipe)
+ "encoder" - how to encode the following value into a playload
+ float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+ integer -> o.a.l.a.p.IntegerEncoder
+ identity -> o.a.l.a.p.IdentityEncoder
+ Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
+ -->
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- lowercases the entire field value, keeping it as a single token. -->
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at index time, so
+ queries for paths match documents at that path, or in descendent paths
+ -->
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ </fieldType>
+ <!--
+ Example of using PathHierarchyTokenizerFactory at query time, so
+ queries for paths match documents at that path, or in ancestor paths
+ -->
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ </fieldType>
+
+ <!-- since fields of this type are by default not stored or indexed,
+ any data added to them will be ignored outright. -->
+ <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+
+ <!-- This point type indexes the coordinates as separate fields (subFields)
+ If subFieldType is defined, it references a type, and a dynamic field
+ definition is created matching *___<typename>. Alternately, if
+ subFieldSuffix is defined, that is used to create the subFields.
+ Example: if subFieldType="double", then the coordinates would be
+ indexed in fields myloc_0___double,myloc_1___double.
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
+ in fields myloc_0_d,myloc_1_d
+ The subFields are an implementation detail of the fieldType, and end
+ users normally should not need to know about them.
+ -->
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
+
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
+ For more information about this and other Spatial fields new to Solr 4, see:
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
+ -->
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+ geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
+
+ <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
+ Parameters:
+ amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field.
+ The dynamic field must have a field type that extends LongValueFieldType.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ codeStrSuffix: Required. Refers to a dynamic field for the currency code sub-field.
+ The dynamic field must have a field type that extends StrField.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
+ providerClass: Lets you plug in other exchange provider backend:
+ solr.FileExchangeRateProvider is the default and takes one parameter:
+ currencyConfig: name of an xml file holding exchange rates
+ solr.OpenExchangeRatesOrgProvider uses rates from openexchangerates.org:
+ ratesFileLocation: URL or path to rates JSON file (default latest.json on the web)
+ refreshInterval: Number of minutes between each rates fetch (default: 1440, min: 60)
+ -->
+ <fieldType name="currency" class="solr.CurrencyFieldType" amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
+ defaultCurrency="USD" currencyConfig="currency.xml" />
+
+
+ <!-- some examples for different languages (generally ordered by ISO code) -->
+
+ <!-- Arabic -->
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- for any non-arabic -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
+ <!-- normalizes ﻯ to ﻱ, etc -->
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Bulgarian -->
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Catalan -->
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- for any non-CJK -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Kurdish -->
+ <fieldType name="text_ckb" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SoraniNormalizationFilterFactory"/>
+ <!-- for any latin text -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ckb.txt"/>
+ <filter class="solr.SoraniStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Czech -->
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Danish -->
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- German -->
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Greek -->
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- greek specific lowercase for sigma -->
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Spanish -->
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Basque -->
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Persian -->
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- for ZWNJ -->
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Finnish -->
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- French -->
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Irish -->
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes d', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
+ <!-- removes n-, etc. position increments is intentionally false! -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Galician -->
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
+ <filter class="solr.GalicianStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Hindi -->
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <!-- normalizes unicode representation -->
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <!-- normalizes variation in spelling -->
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Hungarian -->
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Armenian -->
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Indonesian -->
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Italian -->
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
+
+ NOTE: If you want to optimize search for precision, use default operator AND in your request
+ handler config (q.op) Use OR if you would like to optimize for recall (default).
+ -->
+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
+ <analyzer>
+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
+
+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
+ is used to segment compounds into its parts and the compound itself is kept as synonym.
+
+ Valid values for attribute mode are:
+ normal: regular segmentation
+ search: segmentation useful for search with synonyms compounds (default)
+ extended: same as search mode, but unigrams unknown words (experimental)
+
+ For some applications it might be good to use search mode for indexing and normal mode for
+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
+
+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ User dictionary attributes are:
+ userDictionary: user dictionary filename
+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
+
+ See lang/userdict_ja.txt for a sample user dictionary file.
+
+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
+
+ See http://wiki.apache.org/solr/JapaneseLanguageSupport for more on Japanese language support.
+ -->
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <!-- Removes tokens with certain part-of-speech tags -->
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <!-- Lower-cases romaji characters -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Korean morphological analysis -->
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- Nori Korean morphological analyzer/tokenizer (KoreanTokenizer)
+ The Korean (nori) analyzer integrates Lucene nori analysis module into Solr.
+ It uses the mecab-ko-dic dictionary to perform morphological analysis of Korean texts.
+
+ This dictionary was built with MeCab, it defines a format for the features adapted
+ for the Korean language.
+
+ Nori also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ The tokenizer supports multiple schema attributes:
+ * userDictionary: User dictionary path.
+ * userDictionaryEncoding: User dictionary encoding.
+ * decompoundMode: Decompound mode. Either 'none', 'discard', 'mixed'. Default is 'discard'.
+ * outputUnknownUnigrams: If true outputs unigrams for unknown words.
+ -->
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <!-- Removes some part of speech stuff like EOMI (Pos.E), you can add a parameter 'tags',
+ listing the tags to remove. By default it removes:
+ E, IC, J, MAG, MAJ, MM, SP, SSC, SSO, SC, SE, XPN, XSA, XSN, XSV, UNA, NA, VSV
+ This is basically an equivalent to stemming.
+ -->
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <!-- Replaces term text with the Hangul transcription of Hanja characters, if applicable: -->
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Latvian -->
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Dutch -->
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Norwegian -->
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory" variant="nb"/> -->
+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory" variant="nb"/> -->
+ <!-- The "light" and "minimal" stemmers support variants: nb=Bokmål, nn=Nynorsk, no=Both -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Portuguese -->
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Romanian -->
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Russian -->
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Swedish -->
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Thai -->
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Turkish -->
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ApostropheFilterFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+ A custom Similarity or SimilarityFactory may be specified here, but
+ the default is fine for most applications.
+ For more info: http://wiki.apache.org/solr/SchemaXml#Similarity
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+ <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-FoldToASCII.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-FoldToASCII.txt
new file mode 100644
index 000000000..9a84b6eac
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-FoldToASCII.txt
@@ -0,0 +1,3813 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# This map converts alphabetic, numeric, and symbolic Unicode characters
+# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode
+# block) into their ASCII equivalents, if one exists.
+#
+# Characters from the following Unicode blocks are converted; however, only
+# those characters with reasonable ASCII alternatives are converted:
+#
+# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf
+# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf
+# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf
+# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf
+# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf
+# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf
+# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf
+# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf
+# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf
+# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf
+# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf
+# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf
+# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf
+# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf
+# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf
+# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf
+#
+# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode
+#
+# The set of character conversions supported by this map is a superset of
+# those supported by the map represented by mapping-ISOLatin1Accent.txt.
+#
+# See the bottom of this file for the Perl script used to generate the contents
+# of this file (without this header) from ASCIIFoldingFilter.java.
+
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+
+# À [LATIN CAPITAL LETTER A WITH GRAVE]
+"\u00C0" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH ACUTE]
+"\u00C1" => "A"
+
+# Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+"\u00C2" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH TILDE]
+"\u00C3" => "A"
+
+# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
+"\u00C4" => "A"
+
+# Ã… [LATIN CAPITAL LETTER A WITH RING ABOVE]
+"\u00C5" => "A"
+
+# Ā [LATIN CAPITAL LETTER A WITH MACRON]
+"\u0100" => "A"
+
+# Ä‚ [LATIN CAPITAL LETTER A WITH BREVE]
+"\u0102" => "A"
+
+# Ä„ [LATIN CAPITAL LETTER A WITH OGONEK]
+"\u0104" => "A"
+
+# Æ http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
+"\u018F" => "A"
+
+# Ç [LATIN CAPITAL LETTER A WITH CARON]
+"\u01CD" => "A"
+
+# Çž [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DE" => "A"
+
+# Ç  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E0" => "A"
+
+# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FA" => "A"
+
+# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+"\u0200" => "A"
+
+# È‚ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+"\u0202" => "A"
+
+# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
+"\u0226" => "A"
+
+# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
+"\u023A" => "A"
+
+# á´€ [LATIN LETTER SMALL CAPITAL A]
+"\u1D00" => "A"
+
+# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
+"\u1E00" => "A"
+
+# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
+"\u1EA0" => "A"
+
+# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+"\u1EA2" => "A"
+
+# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA4" => "A"
+
+# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA6" => "A"
+
+# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA8" => "A"
+
+# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAA" => "A"
+
+# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAC" => "A"
+
+# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+"\u1EAE" => "A"
+
+# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+"\u1EB0" => "A"
+
+# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB2" => "A"
+
+# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+"\u1EB4" => "A"
+
+# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB6" => "A"
+
+# â’¶ [CIRCLED LATIN CAPITAL LETTER A]
+"\u24B6" => "A"
+
+# A [FULLWIDTH LATIN CAPITAL LETTER A]
+"\uFF21" => "A"
+
+# à [LATIN SMALL LETTER A WITH GRAVE]
+"\u00E0" => "a"
+
+# á [LATIN SMALL LETTER A WITH ACUTE]
+"\u00E1" => "a"
+
+# â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
+"\u00E2" => "a"
+
+# ã [LATIN SMALL LETTER A WITH TILDE]
+"\u00E3" => "a"
+
+# ä [LATIN SMALL LETTER A WITH DIAERESIS]
+"\u00E4" => "a"
+
+# å [LATIN SMALL LETTER A WITH RING ABOVE]
+"\u00E5" => "a"
+
+# Ä [LATIN SMALL LETTER A WITH MACRON]
+"\u0101" => "a"
+
+# ă [LATIN SMALL LETTER A WITH BREVE]
+"\u0103" => "a"
+
+# Ä… [LATIN SMALL LETTER A WITH OGONEK]
+"\u0105" => "a"
+
+# ÇŽ [LATIN SMALL LETTER A WITH CARON]
+"\u01CE" => "a"
+
+# ÇŸ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DF" => "a"
+
+# Ç¡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E1" => "a"
+
+# Ç» [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FB" => "a"
+
+# È [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+"\u0201" => "a"
+
+# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
+"\u0203" => "a"
+
+# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
+"\u0227" => "a"
+
+# É [LATIN SMALL LETTER TURNED A]
+"\u0250" => "a"
+
+# É™ [LATIN SMALL LETTER SCHWA]
+"\u0259" => "a"
+
+# Éš [LATIN SMALL LETTER SCHWA WITH HOOK]
+"\u025A" => "a"
+
+# á¶ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
+"\u1D8F" => "a"
+
+# á¶• [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
+"\u1D95" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH RING BELOW]
+"\u1E01" => "a"
+
+# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
+"\u1E9A" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH DOT BELOW]
+"\u1EA1" => "a"
+
+# ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
+"\u1EA3" => "a"
+
+# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA5" => "a"
+
+# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA7" => "a"
+
+# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA9" => "a"
+
+# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAB" => "a"
+
+# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAD" => "a"
+
+# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+"\u1EAF" => "a"
+
+# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+"\u1EB1" => "a"
+
+# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB3" => "a"
+
+# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
+"\u1EB5" => "a"
+
+# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB7" => "a"
+
+# â‚ [LATIN SUBSCRIPT SMALL LETTER A]
+"\u2090" => "a"
+
+# â‚” [LATIN SUBSCRIPT SMALL LETTER SCHWA]
+"\u2094" => "a"
+
+# â“ [CIRCLED LATIN SMALL LETTER A]
+"\u24D0" => "a"
+
+# â±¥ [LATIN SMALL LETTER A WITH STROKE]
+"\u2C65" => "a"
+
+# Ɐ [LATIN CAPITAL LETTER TURNED A]
+"\u2C6F" => "a"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER A]
+"\uFF41" => "a"
+
+# Ꜳ [LATIN CAPITAL LETTER AA]
+"\uA732" => "AA"
+
+# Æ [LATIN CAPITAL LETTER AE]
+"\u00C6" => "AE"
+
+# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
+"\u01E2" => "AE"
+
+# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
+"\u01FC" => "AE"
+
+# á´ [LATIN LETTER SMALL CAPITAL AE]
+"\u1D01" => "AE"
+
+# Ꜵ [LATIN CAPITAL LETTER AO]
+"\uA734" => "AO"
+
+# Ꜷ [LATIN CAPITAL LETTER AU]
+"\uA736" => "AU"
+
+# Ꜹ [LATIN CAPITAL LETTER AV]
+"\uA738" => "AV"
+
+# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
+"\uA73A" => "AV"
+
+# Ꜽ [LATIN CAPITAL LETTER AY]
+"\uA73C" => "AY"
+
+# ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
+"\u249C" => "(a)"
+
+# ꜳ [LATIN SMALL LETTER AA]
+"\uA733" => "aa"
+
+# æ [LATIN SMALL LETTER AE]
+"\u00E6" => "ae"
+
+# ǣ [LATIN SMALL LETTER AE WITH MACRON]
+"\u01E3" => "ae"
+
+# ǽ [LATIN SMALL LETTER AE WITH ACUTE]
+"\u01FD" => "ae"
+
+# á´‚ [LATIN SMALL LETTER TURNED AE]
+"\u1D02" => "ae"
+
+# ꜵ [LATIN SMALL LETTER AO]
+"\uA735" => "ao"
+
+# ꜷ [LATIN SMALL LETTER AU]
+"\uA737" => "au"
+
+# ꜹ [LATIN SMALL LETTER AV]
+"\uA739" => "av"
+
+# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
+"\uA73B" => "av"
+
+# ꜽ [LATIN SMALL LETTER AY]
+"\uA73D" => "ay"
+
+# Æ [LATIN CAPITAL LETTER B WITH HOOK]
+"\u0181" => "B"
+
+# Æ‚ [LATIN CAPITAL LETTER B WITH TOPBAR]
+"\u0182" => "B"
+
+# Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
+"\u0243" => "B"
+
+# Ê™ [LATIN LETTER SMALL CAPITAL B]
+"\u0299" => "B"
+
+# á´ƒ [LATIN LETTER SMALL CAPITAL BARRED B]
+"\u1D03" => "B"
+
+# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
+"\u1E02" => "B"
+
+# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
+"\u1E04" => "B"
+
+# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
+"\u1E06" => "B"
+
+# â’· [CIRCLED LATIN CAPITAL LETTER B]
+"\u24B7" => "B"
+
+# ï¼¢ [FULLWIDTH LATIN CAPITAL LETTER B]
+"\uFF22" => "B"
+
+# ƀ [LATIN SMALL LETTER B WITH STROKE]
+"\u0180" => "b"
+
+# ƃ [LATIN SMALL LETTER B WITH TOPBAR]
+"\u0183" => "b"
+
+# É“ [LATIN SMALL LETTER B WITH HOOK]
+"\u0253" => "b"
+
+# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
+"\u1D6C" => "b"
+
+# á¶€ [LATIN SMALL LETTER B WITH PALATAL HOOK]
+"\u1D80" => "b"
+
+# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
+"\u1E03" => "b"
+
+# ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
+"\u1E05" => "b"
+
+# ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
+"\u1E07" => "b"
+
+# â“‘ [CIRCLED LATIN SMALL LETTER B]
+"\u24D1" => "b"
+
+# b [FULLWIDTH LATIN SMALL LETTER B]
+"\uFF42" => "b"
+
+# â’ [PARENTHESIZED LATIN SMALL LETTER B]
+"\u249D" => "(b)"
+
+# Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
+"\u00C7" => "C"
+
+# Ć [LATIN CAPITAL LETTER C WITH ACUTE]
+"\u0106" => "C"
+
+# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+"\u0108" => "C"
+
+# ÄŠ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
+"\u010A" => "C"
+
+# Č [LATIN CAPITAL LETTER C WITH CARON]
+"\u010C" => "C"
+
+# Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
+"\u0187" => "C"
+
+# È» [LATIN CAPITAL LETTER C WITH STROKE]
+"\u023B" => "C"
+
+# Ê— [LATIN LETTER STRETCHED C]
+"\u0297" => "C"
+
+# á´„ [LATIN LETTER SMALL CAPITAL C]
+"\u1D04" => "C"
+
+# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E08" => "C"
+
+# â’¸ [CIRCLED LATIN CAPITAL LETTER C]
+"\u24B8" => "C"
+
+# ï¼£ [FULLWIDTH LATIN CAPITAL LETTER C]
+"\uFF23" => "C"
+
+# ç [LATIN SMALL LETTER C WITH CEDILLA]
+"\u00E7" => "c"
+
+# ć [LATIN SMALL LETTER C WITH ACUTE]
+"\u0107" => "c"
+
+# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
+"\u0109" => "c"
+
+# Ä‹ [LATIN SMALL LETTER C WITH DOT ABOVE]
+"\u010B" => "c"
+
+# Ä [LATIN SMALL LETTER C WITH CARON]
+"\u010D" => "c"
+
+# ƈ [LATIN SMALL LETTER C WITH HOOK]
+"\u0188" => "c"
+
+# ȼ [LATIN SMALL LETTER C WITH STROKE]
+"\u023C" => "c"
+
+# É• [LATIN SMALL LETTER C WITH CURL]
+"\u0255" => "c"
+
+# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E09" => "c"
+
+# ↄ [LATIN SMALL LETTER REVERSED C]
+"\u2184" => "c"
+
+# â“’ [CIRCLED LATIN SMALL LETTER C]
+"\u24D2" => "c"
+
+# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
+"\uA73E" => "c"
+
+# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
+"\uA73F" => "c"
+
+# c [FULLWIDTH LATIN SMALL LETTER C]
+"\uFF43" => "c"
+
+# â’ž [PARENTHESIZED LATIN SMALL LETTER C]
+"\u249E" => "(c)"
+
+# Ã [LATIN CAPITAL LETTER ETH]
+"\u00D0" => "D"
+
+# ÄŽ [LATIN CAPITAL LETTER D WITH CARON]
+"\u010E" => "D"
+
+# Ä [LATIN CAPITAL LETTER D WITH STROKE]
+"\u0110" => "D"
+
+# Ɖ [LATIN CAPITAL LETTER AFRICAN D]
+"\u0189" => "D"
+
+# ÆŠ [LATIN CAPITAL LETTER D WITH HOOK]
+"\u018A" => "D"
+
+# Æ‹ [LATIN CAPITAL LETTER D WITH TOPBAR]
+"\u018B" => "D"
+
+# á´… [LATIN LETTER SMALL CAPITAL D]
+"\u1D05" => "D"
+
+# á´† [LATIN LETTER SMALL CAPITAL ETH]
+"\u1D06" => "D"
+
+# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
+"\u1E0A" => "D"
+
+# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
+"\u1E0C" => "D"
+
+# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
+"\u1E0E" => "D"
+
+# Ḡ[LATIN CAPITAL LETTER D WITH CEDILLA]
+"\u1E10" => "D"
+
+# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E12" => "D"
+
+# â’¹ [CIRCLED LATIN CAPITAL LETTER D]
+"\u24B9" => "D"
+
+# ê¹ [LATIN CAPITAL LETTER INSULAR D]
+"\uA779" => "D"
+
+# D [FULLWIDTH LATIN CAPITAL LETTER D]
+"\uFF24" => "D"
+
+# ð [LATIN SMALL LETTER ETH]
+"\u00F0" => "d"
+
+# Ä [LATIN SMALL LETTER D WITH CARON]
+"\u010F" => "d"
+
+# Ä‘ [LATIN SMALL LETTER D WITH STROKE]
+"\u0111" => "d"
+
+# ƌ [LATIN SMALL LETTER D WITH TOPBAR]
+"\u018C" => "d"
+
+# È¡ [LATIN SMALL LETTER D WITH CURL]
+"\u0221" => "d"
+
+# É– [LATIN SMALL LETTER D WITH TAIL]
+"\u0256" => "d"
+
+# É— [LATIN SMALL LETTER D WITH HOOK]
+"\u0257" => "d"
+
+# áµ­ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
+"\u1D6D" => "d"
+
+# á¶ [LATIN SMALL LETTER D WITH PALATAL HOOK]
+"\u1D81" => "d"
+
+# á¶‘ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
+"\u1D91" => "d"
+
+# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
+"\u1E0B" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH DOT BELOW]
+"\u1E0D" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH LINE BELOW]
+"\u1E0F" => "d"
+
+# ḑ [LATIN SMALL LETTER D WITH CEDILLA]
+"\u1E11" => "d"
+
+# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E13" => "d"
+
+# â““ [CIRCLED LATIN SMALL LETTER D]
+"\u24D3" => "d"
+
+# êº [LATIN SMALL LETTER INSULAR D]
+"\uA77A" => "d"
+
+# d [FULLWIDTH LATIN SMALL LETTER D]
+"\uFF44" => "d"
+
+# Ç„ [LATIN CAPITAL LETTER DZ WITH CARON]
+"\u01C4" => "DZ"
+
+# DZ [LATIN CAPITAL LETTER DZ]
+"\u01F1" => "DZ"
+
+# Ç… [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
+"\u01C5" => "Dz"
+
+# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
+"\u01F2" => "Dz"
+
+# â’Ÿ [PARENTHESIZED LATIN SMALL LETTER D]
+"\u249F" => "(d)"
+
+# ȸ [LATIN SMALL LETTER DB DIGRAPH]
+"\u0238" => "db"
+
+# dž [LATIN SMALL LETTER DZ WITH CARON]
+"\u01C6" => "dz"
+
+# dz [LATIN SMALL LETTER DZ]
+"\u01F3" => "dz"
+
+# ʣ [LATIN SMALL LETTER DZ DIGRAPH]
+"\u02A3" => "dz"
+
+# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
+"\u02A5" => "dz"
+
+# È [LATIN CAPITAL LETTER E WITH GRAVE]
+"\u00C8" => "E"
+
+# É [LATIN CAPITAL LETTER E WITH ACUTE]
+"\u00C9" => "E"
+
+# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+"\u00CA" => "E"
+
+# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
+"\u00CB" => "E"
+
+# Ä’ [LATIN CAPITAL LETTER E WITH MACRON]
+"\u0112" => "E"
+
+# Ä” [LATIN CAPITAL LETTER E WITH BREVE]
+"\u0114" => "E"
+
+# Ä– [LATIN CAPITAL LETTER E WITH DOT ABOVE]
+"\u0116" => "E"
+
+# Ę [LATIN CAPITAL LETTER E WITH OGONEK]
+"\u0118" => "E"
+
+# Äš [LATIN CAPITAL LETTER E WITH CARON]
+"\u011A" => "E"
+
+# ÆŽ [LATIN CAPITAL LETTER REVERSED E]
+"\u018E" => "E"
+
+# Æ [LATIN CAPITAL LETTER OPEN E]
+"\u0190" => "E"
+
+# È„ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+"\u0204" => "E"
+
+# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+"\u0206" => "E"
+
+# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
+"\u0228" => "E"
+
+# Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
+"\u0246" => "E"
+
+# á´‡ [LATIN LETTER SMALL CAPITAL E]
+"\u1D07" => "E"
+
+# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+"\u1E14" => "E"
+
+# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+"\u1E16" => "E"
+
+# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E18" => "E"
+
+# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
+"\u1E1A" => "E"
+
+# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1C" => "E"
+
+# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
+"\u1EB8" => "E"
+
+# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+"\u1EBA" => "E"
+
+# Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
+"\u1EBC" => "E"
+
+# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBE" => "E"
+
+# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC0" => "E"
+
+# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC2" => "E"
+
+# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC4" => "E"
+
+# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC6" => "E"
+
+# â’º [CIRCLED LATIN CAPITAL LETTER E]
+"\u24BA" => "E"
+
+# â±» [LATIN LETTER SMALL CAPITAL TURNED E]
+"\u2C7B" => "E"
+
+# ï¼¥ [FULLWIDTH LATIN CAPITAL LETTER E]
+"\uFF25" => "E"
+
+# è [LATIN SMALL LETTER E WITH GRAVE]
+"\u00E8" => "e"
+
+# é [LATIN SMALL LETTER E WITH ACUTE]
+"\u00E9" => "e"
+
+# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
+"\u00EA" => "e"
+
+# ë [LATIN SMALL LETTER E WITH DIAERESIS]
+"\u00EB" => "e"
+
+# Ä“ [LATIN SMALL LETTER E WITH MACRON]
+"\u0113" => "e"
+
+# Ä• [LATIN SMALL LETTER E WITH BREVE]
+"\u0115" => "e"
+
+# Ä— [LATIN SMALL LETTER E WITH DOT ABOVE]
+"\u0117" => "e"
+
+# Ä™ [LATIN SMALL LETTER E WITH OGONEK]
+"\u0119" => "e"
+
+# Ä› [LATIN SMALL LETTER E WITH CARON]
+"\u011B" => "e"
+
+# Ç [LATIN SMALL LETTER TURNED E]
+"\u01DD" => "e"
+
+# È… [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+"\u0205" => "e"
+
+# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
+"\u0207" => "e"
+
+# È© [LATIN SMALL LETTER E WITH CEDILLA]
+"\u0229" => "e"
+
+# ɇ [LATIN SMALL LETTER E WITH STROKE]
+"\u0247" => "e"
+
+# ɘ [LATIN SMALL LETTER REVERSED E]
+"\u0258" => "e"
+
+# É› [LATIN SMALL LETTER OPEN E]
+"\u025B" => "e"
+
+# ɜ [LATIN SMALL LETTER REVERSED OPEN E]
+"\u025C" => "e"
+
+# É [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
+"\u025D" => "e"
+
+# Éž [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
+"\u025E" => "e"
+
+# Êš [LATIN SMALL LETTER CLOSED OPEN E]
+"\u029A" => "e"
+
+# á´ˆ [LATIN SMALL LETTER TURNED OPEN E]
+"\u1D08" => "e"
+
+# á¶’ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
+"\u1D92" => "e"
+
+# á¶“ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
+"\u1D93" => "e"
+
+# á¶” [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
+"\u1D94" => "e"
+
+# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+"\u1E15" => "e"
+
+# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+"\u1E17" => "e"
+
+# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E19" => "e"
+
+# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
+"\u1E1B" => "e"
+
+# Ḡ[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1D" => "e"
+
+# ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
+"\u1EB9" => "e"
+
+# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
+"\u1EBB" => "e"
+
+# ẽ [LATIN SMALL LETTER E WITH TILDE]
+"\u1EBD" => "e"
+
+# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBF" => "e"
+
+# á» [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC1" => "e"
+
+# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC3" => "e"
+
+# á»… [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC5" => "e"
+
+# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC7" => "e"
+
+# â‚‘ [LATIN SUBSCRIPT SMALL LETTER E]
+"\u2091" => "e"
+
+# â“” [CIRCLED LATIN SMALL LETTER E]
+"\u24D4" => "e"
+
+# ⱸ [LATIN SMALL LETTER E WITH NOTCH]
+"\u2C78" => "e"
+
+# ï½… [FULLWIDTH LATIN SMALL LETTER E]
+"\uFF45" => "e"
+
+# â’  [PARENTHESIZED LATIN SMALL LETTER E]
+"\u24A0" => "(e)"
+
+# Æ‘ [LATIN CAPITAL LETTER F WITH HOOK]
+"\u0191" => "F"
+
+# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
+"\u1E1E" => "F"
+
+# â’» [CIRCLED LATIN CAPITAL LETTER F]
+"\u24BB" => "F"
+
+# ꜰ [LATIN LETTER SMALL CAPITAL F]
+"\uA730" => "F"
+
+# ê» [LATIN CAPITAL LETTER INSULAR F]
+"\uA77B" => "F"
+
+# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
+"\uA7FB" => "F"
+
+# F [FULLWIDTH LATIN CAPITAL LETTER F]
+"\uFF26" => "F"
+
+# Æ’ [LATIN SMALL LETTER F WITH HOOK]
+"\u0192" => "f"
+
+# áµ® [LATIN SMALL LETTER F WITH MIDDLE TILDE]
+"\u1D6E" => "f"
+
+# á¶‚ [LATIN SMALL LETTER F WITH PALATAL HOOK]
+"\u1D82" => "f"
+
+# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
+"\u1E1F" => "f"
+
+# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+"\u1E9B" => "f"
+
+# â“• [CIRCLED LATIN SMALL LETTER F]
+"\u24D5" => "f"
+
+# ê¼ [LATIN SMALL LETTER INSULAR F]
+"\uA77C" => "f"
+
+# f [FULLWIDTH LATIN SMALL LETTER F]
+"\uFF46" => "f"
+
+# â’¡ [PARENTHESIZED LATIN SMALL LETTER F]
+"\u24A1" => "(f)"
+
+# ff [LATIN SMALL LIGATURE FF]
+"\uFB00" => "ff"
+
+# ffi [LATIN SMALL LIGATURE FFI]
+"\uFB03" => "ffi"
+
+# ffl [LATIN SMALL LIGATURE FFL]
+"\uFB04" => "ffl"
+
+# ï¬ [LATIN SMALL LIGATURE FI]
+"\uFB01" => "fi"
+
+# fl [LATIN SMALL LIGATURE FL]
+"\uFB02" => "fl"
+
+# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+"\u011C" => "G"
+
+# Äž [LATIN CAPITAL LETTER G WITH BREVE]
+"\u011E" => "G"
+
+# Ä  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
+"\u0120" => "G"
+
+# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
+"\u0122" => "G"
+
+# Æ“ [LATIN CAPITAL LETTER G WITH HOOK]
+"\u0193" => "G"
+
+# Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
+"\u01E4" => "G"
+
+# ǥ [LATIN SMALL LETTER G WITH STROKE]
+"\u01E5" => "G"
+
+# Ǧ [LATIN CAPITAL LETTER G WITH CARON]
+"\u01E6" => "G"
+
+# ǧ [LATIN SMALL LETTER G WITH CARON]
+"\u01E7" => "G"
+
+# Ç´ [LATIN CAPITAL LETTER G WITH ACUTE]
+"\u01F4" => "G"
+
+# ɢ [LATIN LETTER SMALL CAPITAL G]
+"\u0262" => "G"
+
+# Ê› [LATIN LETTER SMALL CAPITAL G WITH HOOK]
+"\u029B" => "G"
+
+# Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
+"\u1E20" => "G"
+
+# â’¼ [CIRCLED LATIN CAPITAL LETTER G]
+"\u24BC" => "G"
+
+# ê½ [LATIN CAPITAL LETTER INSULAR G]
+"\uA77D" => "G"
+
+# ê¾ [LATIN CAPITAL LETTER TURNED INSULAR G]
+"\uA77E" => "G"
+
+# ï¼§ [FULLWIDTH LATIN CAPITAL LETTER G]
+"\uFF27" => "G"
+
+# Ä [LATIN SMALL LETTER G WITH CIRCUMFLEX]
+"\u011D" => "g"
+
+# ÄŸ [LATIN SMALL LETTER G WITH BREVE]
+"\u011F" => "g"
+
+# Ä¡ [LATIN SMALL LETTER G WITH DOT ABOVE]
+"\u0121" => "g"
+
+# ģ [LATIN SMALL LETTER G WITH CEDILLA]
+"\u0123" => "g"
+
+# ǵ [LATIN SMALL LETTER G WITH ACUTE]
+"\u01F5" => "g"
+
+# É  [LATIN SMALL LETTER G WITH HOOK]
+"\u0260" => "g"
+
+# É¡ [LATIN SMALL LETTER SCRIPT G]
+"\u0261" => "g"
+
+# áµ· [LATIN SMALL LETTER TURNED G]
+"\u1D77" => "g"
+
+# áµ¹ [LATIN SMALL LETTER INSULAR G]
+"\u1D79" => "g"
+
+# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
+"\u1D83" => "g"
+
+# ḡ [LATIN SMALL LETTER G WITH MACRON]
+"\u1E21" => "g"
+
+# â“– [CIRCLED LATIN SMALL LETTER G]
+"\u24D6" => "g"
+
+# ê¿ [LATIN SMALL LETTER TURNED INSULAR G]
+"\uA77F" => "g"
+
+# g [FULLWIDTH LATIN SMALL LETTER G]
+"\uFF47" => "g"
+
+# â’¢ [PARENTHESIZED LATIN SMALL LETTER G]
+"\u24A2" => "(g)"
+
+# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+"\u0124" => "H"
+
+# Ħ [LATIN CAPITAL LETTER H WITH STROKE]
+"\u0126" => "H"
+
+# Èž [LATIN CAPITAL LETTER H WITH CARON]
+"\u021E" => "H"
+
+# ʜ [LATIN LETTER SMALL CAPITAL H]
+"\u029C" => "H"
+
+# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
+"\u1E22" => "H"
+
+# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
+"\u1E24" => "H"
+
+# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
+"\u1E26" => "H"
+
+# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
+"\u1E28" => "H"
+
+# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
+"\u1E2A" => "H"
+
+# â’½ [CIRCLED LATIN CAPITAL LETTER H]
+"\u24BD" => "H"
+
+# â±§ [LATIN CAPITAL LETTER H WITH DESCENDER]
+"\u2C67" => "H"
+
+# â±µ [LATIN CAPITAL LETTER HALF H]
+"\u2C75" => "H"
+
+# H [FULLWIDTH LATIN CAPITAL LETTER H]
+"\uFF28" => "H"
+
+# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
+"\u0125" => "h"
+
+# ħ [LATIN SMALL LETTER H WITH STROKE]
+"\u0127" => "h"
+
+# ÈŸ [LATIN SMALL LETTER H WITH CARON]
+"\u021F" => "h"
+
+# ɥ [LATIN SMALL LETTER TURNED H]
+"\u0265" => "h"
+
+# ɦ [LATIN SMALL LETTER H WITH HOOK]
+"\u0266" => "h"
+
+# Ê® [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
+"\u02AE" => "h"
+
+# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
+"\u02AF" => "h"
+
+# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
+"\u1E23" => "h"
+
+# ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
+"\u1E25" => "h"
+
+# ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
+"\u1E27" => "h"
+
+# ḩ [LATIN SMALL LETTER H WITH CEDILLA]
+"\u1E29" => "h"
+
+# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
+"\u1E2B" => "h"
+
+# ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
+"\u1E96" => "h"
+
+# â“— [CIRCLED LATIN SMALL LETTER H]
+"\u24D7" => "h"
+
+# ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
+"\u2C68" => "h"
+
+# â±¶ [LATIN SMALL LETTER HALF H]
+"\u2C76" => "h"
+
+# h [FULLWIDTH LATIN SMALL LETTER H]
+"\uFF48" => "h"
+
+# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
+"\u01F6" => "HV"
+
+# â’£ [PARENTHESIZED LATIN SMALL LETTER H]
+"\u24A3" => "(h)"
+
+# Æ• [LATIN SMALL LETTER HV]
+"\u0195" => "hv"
+
+# Ì [LATIN CAPITAL LETTER I WITH GRAVE]
+"\u00CC" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH ACUTE]
+"\u00CD" => "I"
+
+# ÃŽ [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+"\u00CE" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH DIAERESIS]
+"\u00CF" => "I"
+
+# Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
+"\u0128" => "I"
+
+# Ī [LATIN CAPITAL LETTER I WITH MACRON]
+"\u012A" => "I"
+
+# Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
+"\u012C" => "I"
+
+# Ä® [LATIN CAPITAL LETTER I WITH OGONEK]
+"\u012E" => "I"
+
+# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
+"\u0130" => "I"
+
+# Æ– [LATIN CAPITAL LETTER IOTA]
+"\u0196" => "I"
+
+# Æ— [LATIN CAPITAL LETTER I WITH STROKE]
+"\u0197" => "I"
+
+# Ç [LATIN CAPITAL LETTER I WITH CARON]
+"\u01CF" => "I"
+
+# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+"\u0208" => "I"
+
+# ÈŠ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+"\u020A" => "I"
+
+# ɪ [LATIN LETTER SMALL CAPITAL I]
+"\u026A" => "I"
+
+# áµ» [LATIN SMALL CAPITAL LETTER I WITH STROKE]
+"\u1D7B" => "I"
+
+# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
+"\u1E2C" => "I"
+
+# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2E" => "I"
+
+# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+"\u1EC8" => "I"
+
+# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
+"\u1ECA" => "I"
+
+# â’¾ [CIRCLED LATIN CAPITAL LETTER I]
+"\u24BE" => "I"
+
+# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
+"\uA7FE" => "I"
+
+# I [FULLWIDTH LATIN CAPITAL LETTER I]
+"\uFF29" => "I"
+
+# ì [LATIN SMALL LETTER I WITH GRAVE]
+"\u00EC" => "i"
+
+# í [LATIN SMALL LETTER I WITH ACUTE]
+"\u00ED" => "i"
+
+# î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
+"\u00EE" => "i"
+
+# ï [LATIN SMALL LETTER I WITH DIAERESIS]
+"\u00EF" => "i"
+
+# Ä© [LATIN SMALL LETTER I WITH TILDE]
+"\u0129" => "i"
+
+# Ä« [LATIN SMALL LETTER I WITH MACRON]
+"\u012B" => "i"
+
+# Ä­ [LATIN SMALL LETTER I WITH BREVE]
+"\u012D" => "i"
+
+# į [LATIN SMALL LETTER I WITH OGONEK]
+"\u012F" => "i"
+
+# ı [LATIN SMALL LETTER DOTLESS I]
+"\u0131" => "i"
+
+# Ç [LATIN SMALL LETTER I WITH CARON]
+"\u01D0" => "i"
+
+# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+"\u0209" => "i"
+
+# È‹ [LATIN SMALL LETTER I WITH INVERTED BREVE]
+"\u020B" => "i"
+
+# ɨ [LATIN SMALL LETTER I WITH STROKE]
+"\u0268" => "i"
+
+# á´‰ [LATIN SMALL LETTER TURNED I]
+"\u1D09" => "i"
+
+# áµ¢ [LATIN SUBSCRIPT SMALL LETTER I]
+"\u1D62" => "i"
+
+# áµ¼ [LATIN SMALL LETTER IOTA WITH STROKE]
+"\u1D7C" => "i"
+
+# á¶– [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
+"\u1D96" => "i"
+
+# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
+"\u1E2D" => "i"
+
+# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2F" => "i"
+
+# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
+"\u1EC9" => "i"
+
+# ị [LATIN SMALL LETTER I WITH DOT BELOW]
+"\u1ECB" => "i"
+
+# â± [SUPERSCRIPT LATIN SMALL LETTER I]
+"\u2071" => "i"
+
+# ⓘ [CIRCLED LATIN SMALL LETTER I]
+"\u24D8" => "i"
+
+# i [FULLWIDTH LATIN SMALL LETTER I]
+"\uFF49" => "i"
+
+# IJ [LATIN CAPITAL LIGATURE IJ]
+"\u0132" => "IJ"
+
+# â’¤ [PARENTHESIZED LATIN SMALL LETTER I]
+"\u24A4" => "(i)"
+
+# ij [LATIN SMALL LIGATURE IJ]
+"\u0133" => "ij"
+
+# Ä´ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+"\u0134" => "J"
+
+# Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
+"\u0248" => "J"
+
+# á´Š [LATIN LETTER SMALL CAPITAL J]
+"\u1D0A" => "J"
+
+# â’¿ [CIRCLED LATIN CAPITAL LETTER J]
+"\u24BF" => "J"
+
+# J [FULLWIDTH LATIN CAPITAL LETTER J]
+"\uFF2A" => "J"
+
+# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
+"\u0135" => "j"
+
+# ǰ [LATIN SMALL LETTER J WITH CARON]
+"\u01F0" => "j"
+
+# È· [LATIN SMALL LETTER DOTLESS J]
+"\u0237" => "j"
+
+# ɉ [LATIN SMALL LETTER J WITH STROKE]
+"\u0249" => "j"
+
+# ÉŸ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
+"\u025F" => "j"
+
+# Ê„ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
+"\u0284" => "j"
+
+# Ê [LATIN SMALL LETTER J WITH CROSSED-TAIL]
+"\u029D" => "j"
+
+# â“™ [CIRCLED LATIN SMALL LETTER J]
+"\u24D9" => "j"
+
+# â±¼ [LATIN SUBSCRIPT SMALL LETTER J]
+"\u2C7C" => "j"
+
+# j [FULLWIDTH LATIN SMALL LETTER J]
+"\uFF4A" => "j"
+
+# â’¥ [PARENTHESIZED LATIN SMALL LETTER J]
+"\u24A5" => "(j)"
+
+# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
+"\u0136" => "K"
+
+# Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
+"\u0198" => "K"
+
+# Ǩ [LATIN CAPITAL LETTER K WITH CARON]
+"\u01E8" => "K"
+
+# á´‹ [LATIN LETTER SMALL CAPITAL K]
+"\u1D0B" => "K"
+
+# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
+"\u1E30" => "K"
+
+# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
+"\u1E32" => "K"
+
+# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
+"\u1E34" => "K"
+
+# â“€ [CIRCLED LATIN CAPITAL LETTER K]
+"\u24C0" => "K"
+
+# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
+"\u2C69" => "K"
+
+# ê€ [LATIN CAPITAL LETTER K WITH STROKE]
+"\uA740" => "K"
+
+# ê‚ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
+"\uA742" => "K"
+
+# ê„ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA744" => "K"
+
+# K [FULLWIDTH LATIN CAPITAL LETTER K]
+"\uFF2B" => "K"
+
+# Ä· [LATIN SMALL LETTER K WITH CEDILLA]
+"\u0137" => "k"
+
+# Æ™ [LATIN SMALL LETTER K WITH HOOK]
+"\u0199" => "k"
+
+# Ç© [LATIN SMALL LETTER K WITH CARON]
+"\u01E9" => "k"
+
+# Êž [LATIN SMALL LETTER TURNED K]
+"\u029E" => "k"
+
+# á¶„ [LATIN SMALL LETTER K WITH PALATAL HOOK]
+"\u1D84" => "k"
+
+# ḱ [LATIN SMALL LETTER K WITH ACUTE]
+"\u1E31" => "k"
+
+# ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
+"\u1E33" => "k"
+
+# ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
+"\u1E35" => "k"
+
+# ⓚ [CIRCLED LATIN SMALL LETTER K]
+"\u24DA" => "k"
+
+# ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
+"\u2C6A" => "k"
+
+# ê [LATIN SMALL LETTER K WITH STROKE]
+"\uA741" => "k"
+
+# êƒ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
+"\uA743" => "k"
+
+# ê… [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA745" => "k"
+
+# k [FULLWIDTH LATIN SMALL LETTER K]
+"\uFF4B" => "k"
+
+# â’¦ [PARENTHESIZED LATIN SMALL LETTER K]
+"\u24A6" => "(k)"
+
+# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
+"\u0139" => "L"
+
+# Ä» [LATIN CAPITAL LETTER L WITH CEDILLA]
+"\u013B" => "L"
+
+# Ľ [LATIN CAPITAL LETTER L WITH CARON]
+"\u013D" => "L"
+
+# Ä¿ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
+"\u013F" => "L"
+
+# Å [LATIN CAPITAL LETTER L WITH STROKE]
+"\u0141" => "L"
+
+# Ƚ [LATIN CAPITAL LETTER L WITH BAR]
+"\u023D" => "L"
+
+# ÊŸ [LATIN LETTER SMALL CAPITAL L]
+"\u029F" => "L"
+
+# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
+"\u1D0C" => "L"
+
+# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
+"\u1E36" => "L"
+
+# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E38" => "L"
+
+# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
+"\u1E3A" => "L"
+
+# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3C" => "L"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER L]
+"\u24C1" => "L"
+
+# â±  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
+"\u2C60" => "L"
+
+# â±¢ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
+"\u2C62" => "L"
+
+# ê† [LATIN CAPITAL LETTER BROKEN L]
+"\uA746" => "L"
+
+# êˆ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
+"\uA748" => "L"
+
+# Ꞁ [LATIN CAPITAL LETTER TURNED L]
+"\uA780" => "L"
+
+# L [FULLWIDTH LATIN CAPITAL LETTER L]
+"\uFF2C" => "L"
+
+# ĺ [LATIN SMALL LETTER L WITH ACUTE]
+"\u013A" => "l"
+
+# ļ [LATIN SMALL LETTER L WITH CEDILLA]
+"\u013C" => "l"
+
+# ľ [LATIN SMALL LETTER L WITH CARON]
+"\u013E" => "l"
+
+# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
+"\u0140" => "l"
+
+# Å‚ [LATIN SMALL LETTER L WITH STROKE]
+"\u0142" => "l"
+
+# Æš [LATIN SMALL LETTER L WITH BAR]
+"\u019A" => "l"
+
+# È´ [LATIN SMALL LETTER L WITH CURL]
+"\u0234" => "l"
+
+# É« [LATIN SMALL LETTER L WITH MIDDLE TILDE]
+"\u026B" => "l"
+
+# ɬ [LATIN SMALL LETTER L WITH BELT]
+"\u026C" => "l"
+
+# É­ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
+"\u026D" => "l"
+
+# á¶… [LATIN SMALL LETTER L WITH PALATAL HOOK]
+"\u1D85" => "l"
+
+# ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
+"\u1E37" => "l"
+
+# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E39" => "l"
+
+# ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
+"\u1E3B" => "l"
+
+# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3D" => "l"
+
+# â“› [CIRCLED LATIN SMALL LETTER L]
+"\u24DB" => "l"
+
+# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
+"\u2C61" => "l"
+
+# ê‡ [LATIN SMALL LETTER BROKEN L]
+"\uA747" => "l"
+
+# ê‰ [LATIN SMALL LETTER L WITH HIGH STROKE]
+"\uA749" => "l"
+
+# êž [LATIN SMALL LETTER TURNED L]
+"\uA781" => "l"
+
+# l [FULLWIDTH LATIN SMALL LETTER L]
+"\uFF4C" => "l"
+
+# LJ [LATIN CAPITAL LETTER LJ]
+"\u01C7" => "LJ"
+
+# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
+"\u1EFA" => "LL"
+
+# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
+"\u01C8" => "Lj"
+
+# â’§ [PARENTHESIZED LATIN SMALL LETTER L]
+"\u24A7" => "(l)"
+
+# lj [LATIN SMALL LETTER LJ]
+"\u01C9" => "lj"
+
+# á»» [LATIN SMALL LETTER MIDDLE-WELSH LL]
+"\u1EFB" => "ll"
+
+# ʪ [LATIN SMALL LETTER LS DIGRAPH]
+"\u02AA" => "ls"
+
+# Ê« [LATIN SMALL LETTER LZ DIGRAPH]
+"\u02AB" => "lz"
+
+# Ɯ [LATIN CAPITAL LETTER TURNED M]
+"\u019C" => "M"
+
+# á´ [LATIN LETTER SMALL CAPITAL M]
+"\u1D0D" => "M"
+
+# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
+"\u1E3E" => "M"
+
+# á¹€ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
+"\u1E40" => "M"
+
+# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
+"\u1E42" => "M"
+
+# â“‚ [CIRCLED LATIN CAPITAL LETTER M]
+"\u24C2" => "M"
+
+# â±® [LATIN CAPITAL LETTER M WITH HOOK]
+"\u2C6E" => "M"
+
+# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
+"\uA7FD" => "M"
+
+# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
+"\uA7FF" => "M"
+
+# ï¼­ [FULLWIDTH LATIN CAPITAL LETTER M]
+"\uFF2D" => "M"
+
+# ɯ [LATIN SMALL LETTER TURNED M]
+"\u026F" => "m"
+
+# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
+"\u0270" => "m"
+
+# ɱ [LATIN SMALL LETTER M WITH HOOK]
+"\u0271" => "m"
+
+# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
+"\u1D6F" => "m"
+
+# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
+"\u1D86" => "m"
+
+# ḿ [LATIN SMALL LETTER M WITH ACUTE]
+"\u1E3F" => "m"
+
+# á¹ [LATIN SMALL LETTER M WITH DOT ABOVE]
+"\u1E41" => "m"
+
+# ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
+"\u1E43" => "m"
+
+# ⓜ [CIRCLED LATIN SMALL LETTER M]
+"\u24DC" => "m"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER M]
+"\uFF4D" => "m"
+
+# â’¨ [PARENTHESIZED LATIN SMALL LETTER M]
+"\u24A8" => "(m)"
+
+# Ñ [LATIN CAPITAL LETTER N WITH TILDE]
+"\u00D1" => "N"
+
+# Ń [LATIN CAPITAL LETTER N WITH ACUTE]
+"\u0143" => "N"
+
+# Å… [LATIN CAPITAL LETTER N WITH CEDILLA]
+"\u0145" => "N"
+
+# Ň [LATIN CAPITAL LETTER N WITH CARON]
+"\u0147" => "N"
+
+# ÅŠ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
+"\u014A" => "N"
+
+# Æ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
+"\u019D" => "N"
+
+# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
+"\u01F8" => "N"
+
+# È  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
+"\u0220" => "N"
+
+# É´ [LATIN LETTER SMALL CAPITAL N]
+"\u0274" => "N"
+
+# á´Ž [LATIN LETTER SMALL CAPITAL REVERSED N]
+"\u1D0E" => "N"
+
+# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
+"\u1E44" => "N"
+
+# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
+"\u1E46" => "N"
+
+# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
+"\u1E48" => "N"
+
+# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4A" => "N"
+
+# Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
+"\u24C3" => "N"
+
+# ï¼® [FULLWIDTH LATIN CAPITAL LETTER N]
+"\uFF2E" => "N"
+
+# ñ [LATIN SMALL LETTER N WITH TILDE]
+"\u00F1" => "n"
+
+# Å„ [LATIN SMALL LETTER N WITH ACUTE]
+"\u0144" => "n"
+
+# ņ [LATIN SMALL LETTER N WITH CEDILLA]
+"\u0146" => "n"
+
+# ň [LATIN SMALL LETTER N WITH CARON]
+"\u0148" => "n"
+
+# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
+"\u0149" => "n"
+
+# Å‹ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
+"\u014B" => "n"
+
+# Æž [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
+"\u019E" => "n"
+
+# ǹ [LATIN SMALL LETTER N WITH GRAVE]
+"\u01F9" => "n"
+
+# ȵ [LATIN SMALL LETTER N WITH CURL]
+"\u0235" => "n"
+
+# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
+"\u0272" => "n"
+
+# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
+"\u0273" => "n"
+
+# áµ° [LATIN SMALL LETTER N WITH MIDDLE TILDE]
+"\u1D70" => "n"
+
+# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
+"\u1D87" => "n"
+
+# á¹… [LATIN SMALL LETTER N WITH DOT ABOVE]
+"\u1E45" => "n"
+
+# ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
+"\u1E47" => "n"
+
+# ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
+"\u1E49" => "n"
+
+# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4B" => "n"
+
+# â¿ [SUPERSCRIPT LATIN SMALL LETTER N]
+"\u207F" => "n"
+
+# â“ [CIRCLED LATIN SMALL LETTER N]
+"\u24DD" => "n"
+
+# n [FULLWIDTH LATIN SMALL LETTER N]
+"\uFF4E" => "n"
+
+# ÇŠ [LATIN CAPITAL LETTER NJ]
+"\u01CA" => "NJ"
+
+# Ç‹ [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
+"\u01CB" => "Nj"
+
+# â’© [PARENTHESIZED LATIN SMALL LETTER N]
+"\u24A9" => "(n)"
+
+# nj [LATIN SMALL LETTER NJ]
+"\u01CC" => "nj"
+
+# Ã’ [LATIN CAPITAL LETTER O WITH GRAVE]
+"\u00D2" => "O"
+
+# Ó [LATIN CAPITAL LETTER O WITH ACUTE]
+"\u00D3" => "O"
+
+# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+"\u00D4" => "O"
+
+# Õ [LATIN CAPITAL LETTER O WITH TILDE]
+"\u00D5" => "O"
+
+# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
+"\u00D6" => "O"
+
+# Ø [LATIN CAPITAL LETTER O WITH STROKE]
+"\u00D8" => "O"
+
+# Ō [LATIN CAPITAL LETTER O WITH MACRON]
+"\u014C" => "O"
+
+# ÅŽ [LATIN CAPITAL LETTER O WITH BREVE]
+"\u014E" => "O"
+
+# Å [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+"\u0150" => "O"
+
+# Ɔ [LATIN CAPITAL LETTER OPEN O]
+"\u0186" => "O"
+
+# ÆŸ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
+"\u019F" => "O"
+
+# Æ  [LATIN CAPITAL LETTER O WITH HORN]
+"\u01A0" => "O"
+
+# Ç‘ [LATIN CAPITAL LETTER O WITH CARON]
+"\u01D1" => "O"
+
+# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
+"\u01EA" => "O"
+
+# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+"\u01EC" => "O"
+
+# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+"\u01FE" => "O"
+
+# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+"\u020C" => "O"
+
+# ÈŽ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+"\u020E" => "O"
+
+# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+"\u022A" => "O"
+
+# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+"\u022C" => "O"
+
+# È® [LATIN CAPITAL LETTER O WITH DOT ABOVE]
+"\u022E" => "O"
+
+# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0230" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL O]
+"\u1D0F" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL OPEN O]
+"\u1D10" => "O"
+
+# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+"\u1E4C" => "O"
+
+# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4E" => "O"
+
+# á¹ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+"\u1E50" => "O"
+
+# á¹’ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+"\u1E52" => "O"
+
+# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
+"\u1ECC" => "O"
+
+# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+"\u1ECE" => "O"
+
+# á» [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED0" => "O"
+
+# á»’ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED2" => "O"
+
+# á»” [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED4" => "O"
+
+# á»– [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED6" => "O"
+
+# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED8" => "O"
+
+# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+"\u1EDA" => "O"
+
+# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+"\u1EDC" => "O"
+
+# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDE" => "O"
+
+# á»  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+"\u1EE0" => "O"
+
+# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE2" => "O"
+
+# â“„ [CIRCLED LATIN CAPITAL LETTER O]
+"\u24C4" => "O"
+
+# êŠ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74A" => "O"
+
+# êŒ [LATIN CAPITAL LETTER O WITH LOOP]
+"\uA74C" => "O"
+
+# O [FULLWIDTH LATIN CAPITAL LETTER O]
+"\uFF2F" => "O"
+
+# ò [LATIN SMALL LETTER O WITH GRAVE]
+"\u00F2" => "o"
+
+# ó [LATIN SMALL LETTER O WITH ACUTE]
+"\u00F3" => "o"
+
+# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
+"\u00F4" => "o"
+
+# õ [LATIN SMALL LETTER O WITH TILDE]
+"\u00F5" => "o"
+
+# ö [LATIN SMALL LETTER O WITH DIAERESIS]
+"\u00F6" => "o"
+
+# ø [LATIN SMALL LETTER O WITH STROKE]
+"\u00F8" => "o"
+
+# Å [LATIN SMALL LETTER O WITH MACRON]
+"\u014D" => "o"
+
+# Å [LATIN SMALL LETTER O WITH BREVE]
+"\u014F" => "o"
+
+# Å‘ [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+"\u0151" => "o"
+
+# Æ¡ [LATIN SMALL LETTER O WITH HORN]
+"\u01A1" => "o"
+
+# Ç’ [LATIN SMALL LETTER O WITH CARON]
+"\u01D2" => "o"
+
+# Ç« [LATIN SMALL LETTER O WITH OGONEK]
+"\u01EB" => "o"
+
+# Ç­ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+"\u01ED" => "o"
+
+# Ç¿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+"\u01FF" => "o"
+
+# È [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+"\u020D" => "o"
+
+# È [LATIN SMALL LETTER O WITH INVERTED BREVE]
+"\u020F" => "o"
+
+# È« [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+"\u022B" => "o"
+
+# È­ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
+"\u022D" => "o"
+
+# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
+"\u022F" => "o"
+
+# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0231" => "o"
+
+# É” [LATIN SMALL LETTER OPEN O]
+"\u0254" => "o"
+
+# ɵ [LATIN SMALL LETTER BARRED O]
+"\u0275" => "o"
+
+# á´– [LATIN SMALL LETTER TOP HALF O]
+"\u1D16" => "o"
+
+# á´— [LATIN SMALL LETTER BOTTOM HALF O]
+"\u1D17" => "o"
+
+# á¶— [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
+"\u1D97" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+"\u1E4D" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4F" => "o"
+
+# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+"\u1E51" => "o"
+
+# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+"\u1E53" => "o"
+
+# á» [LATIN SMALL LETTER O WITH DOT BELOW]
+"\u1ECD" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HOOK ABOVE]
+"\u1ECF" => "o"
+
+# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED1" => "o"
+
+# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED3" => "o"
+
+# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED5" => "o"
+
+# á»— [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED7" => "o"
+
+# á»™ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED9" => "o"
+
+# á»› [LATIN SMALL LETTER O WITH HORN AND ACUTE]
+"\u1EDB" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HORN AND GRAVE]
+"\u1EDD" => "o"
+
+# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDF" => "o"
+
+# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
+"\u1EE1" => "o"
+
+# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE3" => "o"
+
+# â‚’ [LATIN SUBSCRIPT SMALL LETTER O]
+"\u2092" => "o"
+
+# ⓞ [CIRCLED LATIN SMALL LETTER O]
+"\u24DE" => "o"
+
+# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
+"\u2C7A" => "o"
+
+# ê‹ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74B" => "o"
+
+# ê [LATIN SMALL LETTER O WITH LOOP]
+"\uA74D" => "o"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER O]
+"\uFF4F" => "o"
+
+# Å’ [LATIN CAPITAL LIGATURE OE]
+"\u0152" => "OE"
+
+# ɶ [LATIN LETTER SMALL CAPITAL OE]
+"\u0276" => "OE"
+
+# êŽ [LATIN CAPITAL LETTER OO]
+"\uA74E" => "OO"
+
+# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
+"\u0222" => "OU"
+
+# á´• [LATIN LETTER SMALL CAPITAL OU]
+"\u1D15" => "OU"
+
+# â’ª [PARENTHESIZED LATIN SMALL LETTER O]
+"\u24AA" => "(o)"
+
+# Å“ [LATIN SMALL LIGATURE OE]
+"\u0153" => "oe"
+
+# á´” [LATIN SMALL LETTER TURNED OE]
+"\u1D14" => "oe"
+
+# ê [LATIN SMALL LETTER OO]
+"\uA74F" => "oo"
+
+# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
+"\u0223" => "ou"
+
+# Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
+"\u01A4" => "P"
+
+# á´˜ [LATIN LETTER SMALL CAPITAL P]
+"\u1D18" => "P"
+
+# á¹” [LATIN CAPITAL LETTER P WITH ACUTE]
+"\u1E54" => "P"
+
+# á¹– [LATIN CAPITAL LETTER P WITH DOT ABOVE]
+"\u1E56" => "P"
+
+# â“… [CIRCLED LATIN CAPITAL LETTER P]
+"\u24C5" => "P"
+
+# â±£ [LATIN CAPITAL LETTER P WITH STROKE]
+"\u2C63" => "P"
+
+# ê [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA750" => "P"
+
+# ê’ [LATIN CAPITAL LETTER P WITH FLOURISH]
+"\uA752" => "P"
+
+# ê” [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
+"\uA754" => "P"
+
+# ï¼° [FULLWIDTH LATIN CAPITAL LETTER P]
+"\uFF30" => "P"
+
+# ƥ [LATIN SMALL LETTER P WITH HOOK]
+"\u01A5" => "p"
+
+# áµ± [LATIN SMALL LETTER P WITH MIDDLE TILDE]
+"\u1D71" => "p"
+
+# áµ½ [LATIN SMALL LETTER P WITH STROKE]
+"\u1D7D" => "p"
+
+# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
+"\u1D88" => "p"
+
+# ṕ [LATIN SMALL LETTER P WITH ACUTE]
+"\u1E55" => "p"
+
+# á¹— [LATIN SMALL LETTER P WITH DOT ABOVE]
+"\u1E57" => "p"
+
+# ⓟ [CIRCLED LATIN SMALL LETTER P]
+"\u24DF" => "p"
+
+# ê‘ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA751" => "p"
+
+# ê“ [LATIN SMALL LETTER P WITH FLOURISH]
+"\uA753" => "p"
+
+# ê• [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
+"\uA755" => "p"
+
+# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
+"\uA7FC" => "p"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER P]
+"\uFF50" => "p"
+
+# â’« [PARENTHESIZED LATIN SMALL LETTER P]
+"\u24AB" => "(p)"
+
+# ÉŠ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
+"\u024A" => "Q"
+
+# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
+"\u24C6" => "Q"
+
+# ê– [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA756" => "Q"
+
+# ê˜ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
+"\uA758" => "Q"
+
+# ï¼± [FULLWIDTH LATIN CAPITAL LETTER Q]
+"\uFF31" => "Q"
+
+# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
+"\u0138" => "q"
+
+# É‹ [LATIN SMALL LETTER Q WITH HOOK TAIL]
+"\u024B" => "q"
+
+# Ê  [LATIN SMALL LETTER Q WITH HOOK]
+"\u02A0" => "q"
+
+# â“  [CIRCLED LATIN SMALL LETTER Q]
+"\u24E0" => "q"
+
+# ê— [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA757" => "q"
+
+# ê™ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
+"\uA759" => "q"
+
+# q [FULLWIDTH LATIN SMALL LETTER Q]
+"\uFF51" => "q"
+
+# â’¬ [PARENTHESIZED LATIN SMALL LETTER Q]
+"\u24AC" => "(q)"
+
+# ȹ [LATIN SMALL LETTER QP DIGRAPH]
+"\u0239" => "qp"
+
+# Å” [LATIN CAPITAL LETTER R WITH ACUTE]
+"\u0154" => "R"
+
+# Å– [LATIN CAPITAL LETTER R WITH CEDILLA]
+"\u0156" => "R"
+
+# Ř [LATIN CAPITAL LETTER R WITH CARON]
+"\u0158" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+"\u0210" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+"\u0212" => "R"
+
+# Ɍ [LATIN CAPITAL LETTER R WITH STROKE]
+"\u024C" => "R"
+
+# ʀ [LATIN LETTER SMALL CAPITAL R]
+"\u0280" => "R"
+
+# Ê [LATIN LETTER SMALL CAPITAL INVERTED R]
+"\u0281" => "R"
+
+# á´™ [LATIN LETTER SMALL CAPITAL REVERSED R]
+"\u1D19" => "R"
+
+# á´š [LATIN LETTER SMALL CAPITAL TURNED R]
+"\u1D1A" => "R"
+
+# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
+"\u1E58" => "R"
+
+# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
+"\u1E5A" => "R"
+
+# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5C" => "R"
+
+# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
+"\u1E5E" => "R"
+
+# Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
+"\u24C7" => "R"
+
+# Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
+"\u2C64" => "R"
+
+# êš [LATIN CAPITAL LETTER R ROTUNDA]
+"\uA75A" => "R"
+
+# êž‚ [LATIN CAPITAL LETTER INSULAR R]
+"\uA782" => "R"
+
+# ï¼² [FULLWIDTH LATIN CAPITAL LETTER R]
+"\uFF32" => "R"
+
+# Å• [LATIN SMALL LETTER R WITH ACUTE]
+"\u0155" => "r"
+
+# Å— [LATIN SMALL LETTER R WITH CEDILLA]
+"\u0157" => "r"
+
+# Å™ [LATIN SMALL LETTER R WITH CARON]
+"\u0159" => "r"
+
+# È‘ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+"\u0211" => "r"
+
+# È“ [LATIN SMALL LETTER R WITH INVERTED BREVE]
+"\u0213" => "r"
+
+# É [LATIN SMALL LETTER R WITH STROKE]
+"\u024D" => "r"
+
+# ɼ [LATIN SMALL LETTER R WITH LONG LEG]
+"\u027C" => "r"
+
+# ɽ [LATIN SMALL LETTER R WITH TAIL]
+"\u027D" => "r"
+
+# ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
+"\u027E" => "r"
+
+# É¿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
+"\u027F" => "r"
+
+# áµ£ [LATIN SUBSCRIPT SMALL LETTER R]
+"\u1D63" => "r"
+
+# áµ² [LATIN SMALL LETTER R WITH MIDDLE TILDE]
+"\u1D72" => "r"
+
+# áµ³ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
+"\u1D73" => "r"
+
+# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
+"\u1D89" => "r"
+
+# á¹™ [LATIN SMALL LETTER R WITH DOT ABOVE]
+"\u1E59" => "r"
+
+# á¹› [LATIN SMALL LETTER R WITH DOT BELOW]
+"\u1E5B" => "r"
+
+# á¹ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5D" => "r"
+
+# ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
+"\u1E5F" => "r"
+
+# â“¡ [CIRCLED LATIN SMALL LETTER R]
+"\u24E1" => "r"
+
+# ê› [LATIN SMALL LETTER R ROTUNDA]
+"\uA75B" => "r"
+
+# ꞃ [LATIN SMALL LETTER INSULAR R]
+"\uA783" => "r"
+
+# ï½’ [FULLWIDTH LATIN SMALL LETTER R]
+"\uFF52" => "r"
+
+# â’­ [PARENTHESIZED LATIN SMALL LETTER R]
+"\u24AD" => "(r)"
+
+# Åš [LATIN CAPITAL LETTER S WITH ACUTE]
+"\u015A" => "S"
+
+# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+"\u015C" => "S"
+
+# Åž [LATIN CAPITAL LETTER S WITH CEDILLA]
+"\u015E" => "S"
+
+# Å  [LATIN CAPITAL LETTER S WITH CARON]
+"\u0160" => "S"
+
+# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
+"\u0218" => "S"
+
+# á¹  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
+"\u1E60" => "S"
+
+# á¹¢ [LATIN CAPITAL LETTER S WITH DOT BELOW]
+"\u1E62" => "S"
+
+# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E64" => "S"
+
+# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E66" => "S"
+
+# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E68" => "S"
+
+# Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
+"\u24C8" => "S"
+
+# ꜱ [LATIN LETTER SMALL CAPITAL S]
+"\uA731" => "S"
+
+# êž… [LATIN SMALL LETTER INSULAR S]
+"\uA785" => "S"
+
+# ï¼³ [FULLWIDTH LATIN CAPITAL LETTER S]
+"\uFF33" => "S"
+
+# Å› [LATIN SMALL LETTER S WITH ACUTE]
+"\u015B" => "s"
+
+# Å [LATIN SMALL LETTER S WITH CIRCUMFLEX]
+"\u015D" => "s"
+
+# ÅŸ [LATIN SMALL LETTER S WITH CEDILLA]
+"\u015F" => "s"
+
+# Å¡ [LATIN SMALL LETTER S WITH CARON]
+"\u0161" => "s"
+
+# Å¿ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
+"\u017F" => "s"
+
+# È™ [LATIN SMALL LETTER S WITH COMMA BELOW]
+"\u0219" => "s"
+
+# È¿ [LATIN SMALL LETTER S WITH SWASH TAIL]
+"\u023F" => "s"
+
+# Ê‚ [LATIN SMALL LETTER S WITH HOOK]
+"\u0282" => "s"
+
+# áµ´ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
+"\u1D74" => "s"
+
+# á¶Š [LATIN SMALL LETTER S WITH PALATAL HOOK]
+"\u1D8A" => "s"
+
+# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
+"\u1E61" => "s"
+
+# á¹£ [LATIN SMALL LETTER S WITH DOT BELOW]
+"\u1E63" => "s"
+
+# á¹¥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E65" => "s"
+
+# á¹§ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E67" => "s"
+
+# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E69" => "s"
+
+# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
+"\u1E9C" => "s"
+
+# Ạ[LATIN SMALL LETTER LONG S WITH HIGH STROKE]
+"\u1E9D" => "s"
+
+# â“¢ [CIRCLED LATIN SMALL LETTER S]
+"\u24E2" => "s"
+
+# êž„ [LATIN CAPITAL LETTER INSULAR S]
+"\uA784" => "s"
+
+# s [FULLWIDTH LATIN SMALL LETTER S]
+"\uFF53" => "s"
+
+# ẞ [LATIN CAPITAL LETTER SHARP S]
+"\u1E9E" => "SS"
+
+# â’® [PARENTHESIZED LATIN SMALL LETTER S]
+"\u24AE" => "(s)"
+
+# ß [LATIN SMALL LETTER SHARP S]
+"\u00DF" => "ss"
+
+# st [LATIN SMALL LIGATURE ST]
+"\uFB06" => "st"
+
+# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA]
+"\u0162" => "T"
+
+# Ť [LATIN CAPITAL LETTER T WITH CARON]
+"\u0164" => "T"
+
+# Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
+"\u0166" => "T"
+
+# Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
+"\u01AC" => "T"
+
+# Æ® [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
+"\u01AE" => "T"
+
+# Èš [LATIN CAPITAL LETTER T WITH COMMA BELOW]
+"\u021A" => "T"
+
+# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
+"\u023E" => "T"
+
+# á´› [LATIN LETTER SMALL CAPITAL T]
+"\u1D1B" => "T"
+
+# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
+"\u1E6A" => "T"
+
+# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
+"\u1E6C" => "T"
+
+# á¹® [LATIN CAPITAL LETTER T WITH LINE BELOW]
+"\u1E6E" => "T"
+
+# á¹° [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E70" => "T"
+
+# Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
+"\u24C9" => "T"
+
+# Ꞇ [LATIN CAPITAL LETTER INSULAR T]
+"\uA786" => "T"
+
+# ï¼´ [FULLWIDTH LATIN CAPITAL LETTER T]
+"\uFF34" => "T"
+
+# ţ [LATIN SMALL LETTER T WITH CEDILLA]
+"\u0163" => "t"
+
+# ť [LATIN SMALL LETTER T WITH CARON]
+"\u0165" => "t"
+
+# ŧ [LATIN SMALL LETTER T WITH STROKE]
+"\u0167" => "t"
+
+# Æ« [LATIN SMALL LETTER T WITH PALATAL HOOK]
+"\u01AB" => "t"
+
+# Æ­ [LATIN SMALL LETTER T WITH HOOK]
+"\u01AD" => "t"
+
+# È› [LATIN SMALL LETTER T WITH COMMA BELOW]
+"\u021B" => "t"
+
+# ȶ [LATIN SMALL LETTER T WITH CURL]
+"\u0236" => "t"
+
+# ʇ [LATIN SMALL LETTER TURNED T]
+"\u0287" => "t"
+
+# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
+"\u0288" => "t"
+
+# áµµ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
+"\u1D75" => "t"
+
+# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
+"\u1E6B" => "t"
+
+# á¹­ [LATIN SMALL LETTER T WITH DOT BELOW]
+"\u1E6D" => "t"
+
+# ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
+"\u1E6F" => "t"
+
+# á¹± [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E71" => "t"
+
+# ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
+"\u1E97" => "t"
+
+# â“£ [CIRCLED LATIN SMALL LETTER T]
+"\u24E3" => "t"
+
+# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
+"\u2C66" => "t"
+
+# ï½” [FULLWIDTH LATIN SMALL LETTER T]
+"\uFF54" => "t"
+
+# Þ [LATIN CAPITAL LETTER THORN]
+"\u00DE" => "TH"
+
+# ê¦ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA766" => "TH"
+
+# Ꜩ [LATIN CAPITAL LETTER TZ]
+"\uA728" => "TZ"
+
+# â’¯ [PARENTHESIZED LATIN SMALL LETTER T]
+"\u24AF" => "(t)"
+
+# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
+"\u02A8" => "tc"
+
+# þ [LATIN SMALL LETTER THORN]
+"\u00FE" => "th"
+
+# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
+"\u1D7A" => "th"
+
+# ê§ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA767" => "th"
+
+# ʦ [LATIN SMALL LETTER TS DIGRAPH]
+"\u02A6" => "ts"
+
+# ꜩ [LATIN SMALL LETTER TZ]
+"\uA729" => "tz"
+
+# Ù [LATIN CAPITAL LETTER U WITH GRAVE]
+"\u00D9" => "U"
+
+# Ú [LATIN CAPITAL LETTER U WITH ACUTE]
+"\u00DA" => "U"
+
+# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+"\u00DB" => "U"
+
+# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]
+"\u00DC" => "U"
+
+# Ũ [LATIN CAPITAL LETTER U WITH TILDE]
+"\u0168" => "U"
+
+# Ū [LATIN CAPITAL LETTER U WITH MACRON]
+"\u016A" => "U"
+
+# Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
+"\u016C" => "U"
+
+# Å® [LATIN CAPITAL LETTER U WITH RING ABOVE]
+"\u016E" => "U"
+
+# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+"\u0170" => "U"
+
+# Ų [LATIN CAPITAL LETTER U WITH OGONEK]
+"\u0172" => "U"
+
+# Ư [LATIN CAPITAL LETTER U WITH HORN]
+"\u01AF" => "U"
+
+# Ç“ [LATIN CAPITAL LETTER U WITH CARON]
+"\u01D3" => "U"
+
+# Ç• [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D5" => "U"
+
+# Ç— [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D7" => "U"
+
+# Ç™ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+"\u01D9" => "U"
+
+# Ç› [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DB" => "U"
+
+# È” [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+"\u0214" => "U"
+
+# È– [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+"\u0216" => "U"
+
+# É„ [LATIN CAPITAL LETTER U BAR]
+"\u0244" => "U"
+
+# ᴜ [LATIN LETTER SMALL CAPITAL U]
+"\u1D1C" => "U"
+
+# áµ¾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
+"\u1D7E" => "U"
+
+# á¹² [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+"\u1E72" => "U"
+
+# á¹´ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
+"\u1E74" => "U"
+
+# á¹¶ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E76" => "U"
+
+# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+"\u1E78" => "U"
+
+# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7A" => "U"
+
+# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
+"\u1EE4" => "U"
+
+# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+"\u1EE6" => "U"
+
+# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+"\u1EE8" => "U"
+
+# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+"\u1EEA" => "U"
+
+# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EEC" => "U"
+
+# á»® [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+"\u1EEE" => "U"
+
+# á»° [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF0" => "U"
+
+# Ⓤ [CIRCLED LATIN CAPITAL LETTER U]
+"\u24CA" => "U"
+
+# ï¼µ [FULLWIDTH LATIN CAPITAL LETTER U]
+"\uFF35" => "U"
+
+# ù [LATIN SMALL LETTER U WITH GRAVE]
+"\u00F9" => "u"
+
+# ú [LATIN SMALL LETTER U WITH ACUTE]
+"\u00FA" => "u"
+
+# û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
+"\u00FB" => "u"
+
+# ü [LATIN SMALL LETTER U WITH DIAERESIS]
+"\u00FC" => "u"
+
+# Å© [LATIN SMALL LETTER U WITH TILDE]
+"\u0169" => "u"
+
+# Å« [LATIN SMALL LETTER U WITH MACRON]
+"\u016B" => "u"
+
+# Å­ [LATIN SMALL LETTER U WITH BREVE]
+"\u016D" => "u"
+
+# ů [LATIN SMALL LETTER U WITH RING ABOVE]
+"\u016F" => "u"
+
+# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+"\u0171" => "u"
+
+# ų [LATIN SMALL LETTER U WITH OGONEK]
+"\u0173" => "u"
+
+# ư [LATIN SMALL LETTER U WITH HORN]
+"\u01B0" => "u"
+
+# Ç” [LATIN SMALL LETTER U WITH CARON]
+"\u01D4" => "u"
+
+# Ç– [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D6" => "u"
+
+# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D8" => "u"
+
+# Çš [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+"\u01DA" => "u"
+
+# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DC" => "u"
+
+# È• [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+"\u0215" => "u"
+
+# È— [LATIN SMALL LETTER U WITH INVERTED BREVE]
+"\u0217" => "u"
+
+# ʉ [LATIN SMALL LETTER U BAR]
+"\u0289" => "u"
+
+# ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
+"\u1D64" => "u"
+
+# á¶™ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
+"\u1D99" => "u"
+
+# á¹³ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+"\u1E73" => "u"
+
+# á¹µ [LATIN SMALL LETTER U WITH TILDE BELOW]
+"\u1E75" => "u"
+
+# á¹· [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E77" => "u"
+
+# á¹¹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+"\u1E79" => "u"
+
+# á¹» [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7B" => "u"
+
+# ụ [LATIN SMALL LETTER U WITH DOT BELOW]
+"\u1EE5" => "u"
+
+# á»§ [LATIN SMALL LETTER U WITH HOOK ABOVE]
+"\u1EE7" => "u"
+
+# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
+"\u1EE9" => "u"
+
+# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
+"\u1EEB" => "u"
+
+# á»­ [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EED" => "u"
+
+# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
+"\u1EEF" => "u"
+
+# á»± [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF1" => "u"
+
+# ⓤ [CIRCLED LATIN SMALL LETTER U]
+"\u24E4" => "u"
+
+# u [FULLWIDTH LATIN SMALL LETTER U]
+"\uFF55" => "u"
+
+# â’° [PARENTHESIZED LATIN SMALL LETTER U]
+"\u24B0" => "(u)"
+
+# ᵫ [LATIN SMALL LETTER UE]
+"\u1D6B" => "ue"
+
+# Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
+"\u01B2" => "V"
+
+# É… [LATIN CAPITAL LETTER TURNED V]
+"\u0245" => "V"
+
+# á´  [LATIN LETTER SMALL CAPITAL V]
+"\u1D20" => "V"
+
+# á¹¼ [LATIN CAPITAL LETTER V WITH TILDE]
+"\u1E7C" => "V"
+
+# á¹¾ [LATIN CAPITAL LETTER V WITH DOT BELOW]
+"\u1E7E" => "V"
+
+# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
+"\u1EFC" => "V"
+
+# â“‹ [CIRCLED LATIN CAPITAL LETTER V]
+"\u24CB" => "V"
+
+# êž [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
+"\uA75E" => "V"
+
+# ê¨ [LATIN CAPITAL LETTER VEND]
+"\uA768" => "V"
+
+# ï¼¶ [FULLWIDTH LATIN CAPITAL LETTER V]
+"\uFF36" => "V"
+
+# Ê‹ [LATIN SMALL LETTER V WITH HOOK]
+"\u028B" => "v"
+
+# ʌ [LATIN SMALL LETTER TURNED V]
+"\u028C" => "v"
+
+# áµ¥ [LATIN SUBSCRIPT SMALL LETTER V]
+"\u1D65" => "v"
+
+# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
+"\u1D8C" => "v"
+
+# á¹½ [LATIN SMALL LETTER V WITH TILDE]
+"\u1E7D" => "v"
+
+# ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
+"\u1E7F" => "v"
+
+# â“¥ [CIRCLED LATIN SMALL LETTER V]
+"\u24E5" => "v"
+
+# â±± [LATIN SMALL LETTER V WITH RIGHT HOOK]
+"\u2C71" => "v"
+
+# â±´ [LATIN SMALL LETTER V WITH CURL]
+"\u2C74" => "v"
+
+# êŸ [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
+"\uA75F" => "v"
+
+# ï½– [FULLWIDTH LATIN SMALL LETTER V]
+"\uFF56" => "v"
+
+# ê  [LATIN CAPITAL LETTER VY]
+"\uA760" => "VY"
+
+# â’± [PARENTHESIZED LATIN SMALL LETTER V]
+"\u24B1" => "(v)"
+
+# ê¡ [LATIN SMALL LETTER VY]
+"\uA761" => "vy"
+
+# Å´ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+"\u0174" => "W"
+
+# Ç· http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
+"\u01F7" => "W"
+
+# á´¡ [LATIN LETTER SMALL CAPITAL W]
+"\u1D21" => "W"
+
+# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
+"\u1E80" => "W"
+
+# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
+"\u1E82" => "W"
+
+# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
+"\u1E84" => "W"
+
+# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
+"\u1E86" => "W"
+
+# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
+"\u1E88" => "W"
+
+# Ⓦ [CIRCLED LATIN CAPITAL LETTER W]
+"\u24CC" => "W"
+
+# â±² [LATIN CAPITAL LETTER W WITH HOOK]
+"\u2C72" => "W"
+
+# ï¼· [FULLWIDTH LATIN CAPITAL LETTER W]
+"\uFF37" => "W"
+
+# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
+"\u0175" => "w"
+
+# Æ¿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
+"\u01BF" => "w"
+
+# Ê [LATIN SMALL LETTER TURNED W]
+"\u028D" => "w"
+
+# Ạ[LATIN SMALL LETTER W WITH GRAVE]
+"\u1E81" => "w"
+
+# ẃ [LATIN SMALL LETTER W WITH ACUTE]
+"\u1E83" => "w"
+
+# ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
+"\u1E85" => "w"
+
+# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
+"\u1E87" => "w"
+
+# ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
+"\u1E89" => "w"
+
+# ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
+"\u1E98" => "w"
+
+# ⓦ [CIRCLED LATIN SMALL LETTER W]
+"\u24E6" => "w"
+
+# â±³ [LATIN SMALL LETTER W WITH HOOK]
+"\u2C73" => "w"
+
+# ï½— [FULLWIDTH LATIN SMALL LETTER W]
+"\uFF57" => "w"
+
+# â’² [PARENTHESIZED LATIN SMALL LETTER W]
+"\u24B2" => "(w)"
+
+# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
+"\u1E8A" => "X"
+
+# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
+"\u1E8C" => "X"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER X]
+"\u24CD" => "X"
+
+# X [FULLWIDTH LATIN CAPITAL LETTER X]
+"\uFF38" => "X"
+
+# á¶ [LATIN SMALL LETTER X WITH PALATAL HOOK]
+"\u1D8D" => "x"
+
+# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
+"\u1E8B" => "x"
+
+# Ạ[LATIN SMALL LETTER X WITH DIAERESIS]
+"\u1E8D" => "x"
+
+# â‚“ [LATIN SUBSCRIPT SMALL LETTER X]
+"\u2093" => "x"
+
+# â“§ [CIRCLED LATIN SMALL LETTER X]
+"\u24E7" => "x"
+
+# x [FULLWIDTH LATIN SMALL LETTER X]
+"\uFF58" => "x"
+
+# â’³ [PARENTHESIZED LATIN SMALL LETTER X]
+"\u24B3" => "(x)"
+
+# Ã [LATIN CAPITAL LETTER Y WITH ACUTE]
+"\u00DD" => "Y"
+
+# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+"\u0176" => "Y"
+
+# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
+"\u0178" => "Y"
+
+# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
+"\u01B3" => "Y"
+
+# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
+"\u0232" => "Y"
+
+# ÉŽ [LATIN CAPITAL LETTER Y WITH STROKE]
+"\u024E" => "Y"
+
+# Ê [LATIN LETTER SMALL CAPITAL Y]
+"\u028F" => "Y"
+
+# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+"\u1E8E" => "Y"
+
+# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
+"\u1EF2" => "Y"
+
+# á»´ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
+"\u1EF4" => "Y"
+
+# á»¶ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+"\u1EF6" => "Y"
+
+# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
+"\u1EF8" => "Y"
+
+# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
+"\u1EFE" => "Y"
+
+# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y]
+"\u24CE" => "Y"
+
+# ï¼¹ [FULLWIDTH LATIN CAPITAL LETTER Y]
+"\uFF39" => "Y"
+
+# ý [LATIN SMALL LETTER Y WITH ACUTE]
+"\u00FD" => "y"
+
+# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
+"\u00FF" => "y"
+
+# Å· [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+"\u0177" => "y"
+
+# Æ´ [LATIN SMALL LETTER Y WITH HOOK]
+"\u01B4" => "y"
+
+# ȳ [LATIN SMALL LETTER Y WITH MACRON]
+"\u0233" => "y"
+
+# É [LATIN SMALL LETTER Y WITH STROKE]
+"\u024F" => "y"
+
+# ÊŽ [LATIN SMALL LETTER TURNED Y]
+"\u028E" => "y"
+
+# Ạ[LATIN SMALL LETTER Y WITH DOT ABOVE]
+"\u1E8F" => "y"
+
+# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
+"\u1E99" => "y"
+
+# ỳ [LATIN SMALL LETTER Y WITH GRAVE]
+"\u1EF3" => "y"
+
+# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
+"\u1EF5" => "y"
+
+# á»· [LATIN SMALL LETTER Y WITH HOOK ABOVE]
+"\u1EF7" => "y"
+
+# ỹ [LATIN SMALL LETTER Y WITH TILDE]
+"\u1EF9" => "y"
+
+# ỿ [LATIN SMALL LETTER Y WITH LOOP]
+"\u1EFF" => "y"
+
+# ⓨ [CIRCLED LATIN SMALL LETTER Y]
+"\u24E8" => "y"
+
+# ï½™ [FULLWIDTH LATIN SMALL LETTER Y]
+"\uFF59" => "y"
+
+# â’´ [PARENTHESIZED LATIN SMALL LETTER Y]
+"\u24B4" => "(y)"
+
+# Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
+"\u0179" => "Z"
+
+# Å» [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+"\u017B" => "Z"
+
+# Ž [LATIN CAPITAL LETTER Z WITH CARON]
+"\u017D" => "Z"
+
+# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
+"\u01B5" => "Z"
+
+# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
+"\u021C" => "Z"
+
+# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
+"\u0224" => "Z"
+
+# á´¢ [LATIN LETTER SMALL CAPITAL Z]
+"\u1D22" => "Z"
+
+# Ạ[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+"\u1E90" => "Z"
+
+# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
+"\u1E92" => "Z"
+
+# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW]
+"\u1E94" => "Z"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER Z]
+"\u24CF" => "Z"
+
+# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
+"\u2C6B" => "Z"
+
+# ê¢ [LATIN CAPITAL LETTER VISIGOTHIC Z]
+"\uA762" => "Z"
+
+# Z [FULLWIDTH LATIN CAPITAL LETTER Z]
+"\uFF3A" => "Z"
+
+# ź [LATIN SMALL LETTER Z WITH ACUTE]
+"\u017A" => "z"
+
+# ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
+"\u017C" => "z"
+
+# ž [LATIN SMALL LETTER Z WITH CARON]
+"\u017E" => "z"
+
+# ƶ [LATIN SMALL LETTER Z WITH STROKE]
+"\u01B6" => "z"
+
+# È http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
+"\u021D" => "z"
+
+# ȥ [LATIN SMALL LETTER Z WITH HOOK]
+"\u0225" => "z"
+
+# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL]
+"\u0240" => "z"
+
+# Ê [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
+"\u0290" => "z"
+
+# Ê‘ [LATIN SMALL LETTER Z WITH CURL]
+"\u0291" => "z"
+
+# áµ¶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
+"\u1D76" => "z"
+
+# á¶Ž [LATIN SMALL LETTER Z WITH PALATAL HOOK]
+"\u1D8E" => "z"
+
+# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+"\u1E91" => "z"
+
+# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
+"\u1E93" => "z"
+
+# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
+"\u1E95" => "z"
+
+# â“© [CIRCLED LATIN SMALL LETTER Z]
+"\u24E9" => "z"
+
+# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
+"\u2C6C" => "z"
+
+# ê£ [LATIN SMALL LETTER VISIGOTHIC Z]
+"\uA763" => "z"
+
+# z [FULLWIDTH LATIN SMALL LETTER Z]
+"\uFF5A" => "z"
+
+# â’µ [PARENTHESIZED LATIN SMALL LETTER Z]
+"\u24B5" => "(z)"
+
+# â° [SUPERSCRIPT ZERO]
+"\u2070" => "0"
+
+# â‚€ [SUBSCRIPT ZERO]
+"\u2080" => "0"
+
+# ⓪ [CIRCLED DIGIT ZERO]
+"\u24EA" => "0"
+
+# â“¿ [NEGATIVE CIRCLED DIGIT ZERO]
+"\u24FF" => "0"
+
+# ï¼ [FULLWIDTH DIGIT ZERO]
+"\uFF10" => "0"
+
+# ¹ [SUPERSCRIPT ONE]
+"\u00B9" => "1"
+
+# â‚ [SUBSCRIPT ONE]
+"\u2081" => "1"
+
+# â‘  [CIRCLED DIGIT ONE]
+"\u2460" => "1"
+
+# ⓵ [DOUBLE CIRCLED DIGIT ONE]
+"\u24F5" => "1"
+
+# â¶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
+"\u2776" => "1"
+
+# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
+"\u2780" => "1"
+
+# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
+"\u278A" => "1"
+
+# 1 [FULLWIDTH DIGIT ONE]
+"\uFF11" => "1"
+
+# â’ˆ [DIGIT ONE FULL STOP]
+"\u2488" => "1."
+
+# â‘´ [PARENTHESIZED DIGIT ONE]
+"\u2474" => "(1)"
+
+# ² [SUPERSCRIPT TWO]
+"\u00B2" => "2"
+
+# â‚‚ [SUBSCRIPT TWO]
+"\u2082" => "2"
+
+# â‘¡ [CIRCLED DIGIT TWO]
+"\u2461" => "2"
+
+# â“¶ [DOUBLE CIRCLED DIGIT TWO]
+"\u24F6" => "2"
+
+# â· [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
+"\u2777" => "2"
+
+# âž [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
+"\u2781" => "2"
+
+# âž‹ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
+"\u278B" => "2"
+
+# ï¼’ [FULLWIDTH DIGIT TWO]
+"\uFF12" => "2"
+
+# â’‰ [DIGIT TWO FULL STOP]
+"\u2489" => "2."
+
+# ⑵ [PARENTHESIZED DIGIT TWO]
+"\u2475" => "(2)"
+
+# ³ [SUPERSCRIPT THREE]
+"\u00B3" => "3"
+
+# ₃ [SUBSCRIPT THREE]
+"\u2083" => "3"
+
+# â‘¢ [CIRCLED DIGIT THREE]
+"\u2462" => "3"
+
+# â“· [DOUBLE CIRCLED DIGIT THREE]
+"\u24F7" => "3"
+
+# ⸠[DINGBAT NEGATIVE CIRCLED DIGIT THREE]
+"\u2778" => "3"
+
+# âž‚ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
+"\u2782" => "3"
+
+# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
+"\u278C" => "3"
+
+# 3 [FULLWIDTH DIGIT THREE]
+"\uFF13" => "3"
+
+# â’Š [DIGIT THREE FULL STOP]
+"\u248A" => "3."
+
+# â‘¶ [PARENTHESIZED DIGIT THREE]
+"\u2476" => "(3)"
+
+# â´ [SUPERSCRIPT FOUR]
+"\u2074" => "4"
+
+# â‚„ [SUBSCRIPT FOUR]
+"\u2084" => "4"
+
+# â‘£ [CIRCLED DIGIT FOUR]
+"\u2463" => "4"
+
+# ⓸ [DOUBLE CIRCLED DIGIT FOUR]
+"\u24F8" => "4"
+
+# â¹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
+"\u2779" => "4"
+
+# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
+"\u2783" => "4"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
+"\u278D" => "4"
+
+# ï¼” [FULLWIDTH DIGIT FOUR]
+"\uFF14" => "4"
+
+# â’‹ [DIGIT FOUR FULL STOP]
+"\u248B" => "4."
+
+# â‘· [PARENTHESIZED DIGIT FOUR]
+"\u2477" => "(4)"
+
+# âµ [SUPERSCRIPT FIVE]
+"\u2075" => "5"
+
+# â‚… [SUBSCRIPT FIVE]
+"\u2085" => "5"
+
+# ⑤ [CIRCLED DIGIT FIVE]
+"\u2464" => "5"
+
+# ⓹ [DOUBLE CIRCLED DIGIT FIVE]
+"\u24F9" => "5"
+
+# ⺠[DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
+"\u277A" => "5"
+
+# âž„ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
+"\u2784" => "5"
+
+# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
+"\u278E" => "5"
+
+# 5 [FULLWIDTH DIGIT FIVE]
+"\uFF15" => "5"
+
+# ⒌ [DIGIT FIVE FULL STOP]
+"\u248C" => "5."
+
+# ⑸ [PARENTHESIZED DIGIT FIVE]
+"\u2478" => "(5)"
+
+# â¶ [SUPERSCRIPT SIX]
+"\u2076" => "6"
+
+# ₆ [SUBSCRIPT SIX]
+"\u2086" => "6"
+
+# â‘¥ [CIRCLED DIGIT SIX]
+"\u2465" => "6"
+
+# ⓺ [DOUBLE CIRCLED DIGIT SIX]
+"\u24FA" => "6"
+
+# â» [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
+"\u277B" => "6"
+
+# âž… [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
+"\u2785" => "6"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
+"\u278F" => "6"
+
+# ï¼– [FULLWIDTH DIGIT SIX]
+"\uFF16" => "6"
+
+# â’ [DIGIT SIX FULL STOP]
+"\u248D" => "6."
+
+# ⑹ [PARENTHESIZED DIGIT SIX]
+"\u2479" => "(6)"
+
+# â· [SUPERSCRIPT SEVEN]
+"\u2077" => "7"
+
+# ₇ [SUBSCRIPT SEVEN]
+"\u2087" => "7"
+
+# ⑦ [CIRCLED DIGIT SEVEN]
+"\u2466" => "7"
+
+# â“» [DOUBLE CIRCLED DIGIT SEVEN]
+"\u24FB" => "7"
+
+# â¼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
+"\u277C" => "7"
+
+# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2786" => "7"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2790" => "7"
+
+# ï¼— [FULLWIDTH DIGIT SEVEN]
+"\uFF17" => "7"
+
+# â’Ž [DIGIT SEVEN FULL STOP]
+"\u248E" => "7."
+
+# ⑺ [PARENTHESIZED DIGIT SEVEN]
+"\u247A" => "(7)"
+
+# ⸠[SUPERSCRIPT EIGHT]
+"\u2078" => "8"
+
+# ₈ [SUBSCRIPT EIGHT]
+"\u2088" => "8"
+
+# â‘§ [CIRCLED DIGIT EIGHT]
+"\u2467" => "8"
+
+# ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
+"\u24FC" => "8"
+
+# â½ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
+"\u277D" => "8"
+
+# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2787" => "8"
+
+# âž‘ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2791" => "8"
+
+# 8 [FULLWIDTH DIGIT EIGHT]
+"\uFF18" => "8"
+
+# â’ [DIGIT EIGHT FULL STOP]
+"\u248F" => "8."
+
+# â‘» [PARENTHESIZED DIGIT EIGHT]
+"\u247B" => "(8)"
+
+# â¹ [SUPERSCRIPT NINE]
+"\u2079" => "9"
+
+# ₉ [SUBSCRIPT NINE]
+"\u2089" => "9"
+
+# ⑨ [CIRCLED DIGIT NINE]
+"\u2468" => "9"
+
+# ⓽ [DOUBLE CIRCLED DIGIT NINE]
+"\u24FD" => "9"
+
+# â¾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
+"\u277E" => "9"
+
+# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
+"\u2788" => "9"
+
+# âž’ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
+"\u2792" => "9"
+
+# ï¼™ [FULLWIDTH DIGIT NINE]
+"\uFF19" => "9"
+
+# â’ [DIGIT NINE FULL STOP]
+"\u2490" => "9."
+
+# ⑼ [PARENTHESIZED DIGIT NINE]
+"\u247C" => "(9)"
+
+# â‘© [CIRCLED NUMBER TEN]
+"\u2469" => "10"
+
+# ⓾ [DOUBLE CIRCLED NUMBER TEN]
+"\u24FE" => "10"
+
+# â¿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
+"\u277F" => "10"
+
+# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
+"\u2789" => "10"
+
+# âž“ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
+"\u2793" => "10"
+
+# â’‘ [NUMBER TEN FULL STOP]
+"\u2491" => "10."
+
+# ⑽ [PARENTHESIZED NUMBER TEN]
+"\u247D" => "(10)"
+
+# ⑪ [CIRCLED NUMBER ELEVEN]
+"\u246A" => "11"
+
+# â“« [NEGATIVE CIRCLED NUMBER ELEVEN]
+"\u24EB" => "11"
+
+# â’’ [NUMBER ELEVEN FULL STOP]
+"\u2492" => "11."
+
+# ⑾ [PARENTHESIZED NUMBER ELEVEN]
+"\u247E" => "(11)"
+
+# â‘« [CIRCLED NUMBER TWELVE]
+"\u246B" => "12"
+
+# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
+"\u24EC" => "12"
+
+# â’“ [NUMBER TWELVE FULL STOP]
+"\u2493" => "12."
+
+# â‘¿ [PARENTHESIZED NUMBER TWELVE]
+"\u247F" => "(12)"
+
+# ⑬ [CIRCLED NUMBER THIRTEEN]
+"\u246C" => "13"
+
+# â“­ [NEGATIVE CIRCLED NUMBER THIRTEEN]
+"\u24ED" => "13"
+
+# â’” [NUMBER THIRTEEN FULL STOP]
+"\u2494" => "13."
+
+# â’€ [PARENTHESIZED NUMBER THIRTEEN]
+"\u2480" => "(13)"
+
+# â‘­ [CIRCLED NUMBER FOURTEEN]
+"\u246D" => "14"
+
+# â“® [NEGATIVE CIRCLED NUMBER FOURTEEN]
+"\u24EE" => "14"
+
+# â’• [NUMBER FOURTEEN FULL STOP]
+"\u2495" => "14."
+
+# â’ [PARENTHESIZED NUMBER FOURTEEN]
+"\u2481" => "(14)"
+
+# â‘® [CIRCLED NUMBER FIFTEEN]
+"\u246E" => "15"
+
+# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
+"\u24EF" => "15"
+
+# â’– [NUMBER FIFTEEN FULL STOP]
+"\u2496" => "15."
+
+# â’‚ [PARENTHESIZED NUMBER FIFTEEN]
+"\u2482" => "(15)"
+
+# ⑯ [CIRCLED NUMBER SIXTEEN]
+"\u246F" => "16"
+
+# â“° [NEGATIVE CIRCLED NUMBER SIXTEEN]
+"\u24F0" => "16"
+
+# â’— [NUMBER SIXTEEN FULL STOP]
+"\u2497" => "16."
+
+# â’ƒ [PARENTHESIZED NUMBER SIXTEEN]
+"\u2483" => "(16)"
+
+# â‘° [CIRCLED NUMBER SEVENTEEN]
+"\u2470" => "17"
+
+# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
+"\u24F1" => "17"
+
+# â’˜ [NUMBER SEVENTEEN FULL STOP]
+"\u2498" => "17."
+
+# â’„ [PARENTHESIZED NUMBER SEVENTEEN]
+"\u2484" => "(17)"
+
+# ⑱ [CIRCLED NUMBER EIGHTEEN]
+"\u2471" => "18"
+
+# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
+"\u24F2" => "18"
+
+# â’™ [NUMBER EIGHTEEN FULL STOP]
+"\u2499" => "18."
+
+# â’… [PARENTHESIZED NUMBER EIGHTEEN]
+"\u2485" => "(18)"
+
+# ⑲ [CIRCLED NUMBER NINETEEN]
+"\u2472" => "19"
+
+# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
+"\u24F3" => "19"
+
+# â’š [NUMBER NINETEEN FULL STOP]
+"\u249A" => "19."
+
+# â’† [PARENTHESIZED NUMBER NINETEEN]
+"\u2486" => "(19)"
+
+# ⑳ [CIRCLED NUMBER TWENTY]
+"\u2473" => "20"
+
+# â“´ [NEGATIVE CIRCLED NUMBER TWENTY]
+"\u24F4" => "20"
+
+# â’› [NUMBER TWENTY FULL STOP]
+"\u249B" => "20."
+
+# â’‡ [PARENTHESIZED NUMBER TWENTY]
+"\u2487" => "(20)"
+
+# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00AB" => "\""
+
+# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00BB" => "\""
+
+# “ [LEFT DOUBLE QUOTATION MARK]
+"\u201C" => "\""
+
+# †[RIGHT DOUBLE QUOTATION MARK]
+"\u201D" => "\""
+
+# „ [DOUBLE LOW-9 QUOTATION MARK]
+"\u201E" => "\""
+
+# ″ [DOUBLE PRIME]
+"\u2033" => "\""
+
+# ‶ [REVERSED DOUBLE PRIME]
+"\u2036" => "\""
+
+# â [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275D" => "\""
+
+# âž [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
+"\u275E" => "\""
+
+# â® [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276E" => "\""
+
+# ⯠[HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276F" => "\""
+
+# " [FULLWIDTH QUOTATION MARK]
+"\uFF02" => "\""
+
+# ‘ [LEFT SINGLE QUOTATION MARK]
+"\u2018" => "\'"
+
+# ’ [RIGHT SINGLE QUOTATION MARK]
+"\u2019" => "\'"
+
+# ‚ [SINGLE LOW-9 QUOTATION MARK]
+"\u201A" => "\'"
+
+# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
+"\u201B" => "\'"
+
+# ′ [PRIME]
+"\u2032" => "\'"
+
+# ‵ [REVERSED PRIME]
+"\u2035" => "\'"
+
+# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
+"\u2039" => "\'"
+
+# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
+"\u203A" => "\'"
+
+# â› [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275B" => "\'"
+
+# ✠[HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
+"\u275C" => "\'"
+
+# ' [FULLWIDTH APOSTROPHE]
+"\uFF07" => "\'"
+
+# †[HYPHEN]
+"\u2010" => "-"
+
+# ‑ [NON-BREAKING HYPHEN]
+"\u2011" => "-"
+
+# ‒ [FIGURE DASH]
+"\u2012" => "-"
+
+# – [EN DASH]
+"\u2013" => "-"
+
+# — [EM DASH]
+"\u2014" => "-"
+
+# â» [SUPERSCRIPT MINUS]
+"\u207B" => "-"
+
+# â‚‹ [SUBSCRIPT MINUS]
+"\u208B" => "-"
+
+# ï¼ [FULLWIDTH HYPHEN-MINUS]
+"\uFF0D" => "-"
+
+# â… [LEFT SQUARE BRACKET WITH QUILL]
+"\u2045" => "["
+
+# â² [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2772" => "["
+
+# ï¼» [FULLWIDTH LEFT SQUARE BRACKET]
+"\uFF3B" => "["
+
+# ↠[RIGHT SQUARE BRACKET WITH QUILL]
+"\u2046" => "]"
+
+# â³ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2773" => "]"
+
+# ï¼½ [FULLWIDTH RIGHT SQUARE BRACKET]
+"\uFF3D" => "]"
+
+# â½ [SUPERSCRIPT LEFT PARENTHESIS]
+"\u207D" => "("
+
+# â‚ [SUBSCRIPT LEFT PARENTHESIS]
+"\u208D" => "("
+
+# ⨠[MEDIUM LEFT PARENTHESIS ORNAMENT]
+"\u2768" => "("
+
+# ⪠[MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
+"\u276A" => "("
+
+# ( [FULLWIDTH LEFT PARENTHESIS]
+"\uFF08" => "("
+
+# ⸨ [LEFT DOUBLE PARENTHESIS]
+"\u2E28" => "(("
+
+# â¾ [SUPERSCRIPT RIGHT PARENTHESIS]
+"\u207E" => ")"
+
+# ₎ [SUBSCRIPT RIGHT PARENTHESIS]
+"\u208E" => ")"
+
+# â© [MEDIUM RIGHT PARENTHESIS ORNAMENT]
+"\u2769" => ")"
+
+# â« [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
+"\u276B" => ")"
+
+# ) [FULLWIDTH RIGHT PARENTHESIS]
+"\uFF09" => ")"
+
+# ⸩ [RIGHT DOUBLE PARENTHESIS]
+"\u2E29" => "))"
+
+# ⬠[MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276C" => "<"
+
+# â° [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2770" => "<"
+
+# < [FULLWIDTH LESS-THAN SIGN]
+"\uFF1C" => "<"
+
+# â­ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276D" => ">"
+
+# â± [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2771" => ">"
+
+# > [FULLWIDTH GREATER-THAN SIGN]
+"\uFF1E" => ">"
+
+# â´ [MEDIUM LEFT CURLY BRACKET ORNAMENT]
+"\u2774" => "{"
+
+# ï½› [FULLWIDTH LEFT CURLY BRACKET]
+"\uFF5B" => "{"
+
+# âµ [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
+"\u2775" => "}"
+
+# ï½ [FULLWIDTH RIGHT CURLY BRACKET]
+"\uFF5D" => "}"
+
+# ⺠[SUPERSCRIPT PLUS SIGN]
+"\u207A" => "+"
+
+# ₊ [SUBSCRIPT PLUS SIGN]
+"\u208A" => "+"
+
+# + [FULLWIDTH PLUS SIGN]
+"\uFF0B" => "+"
+
+# â¼ [SUPERSCRIPT EQUALS SIGN]
+"\u207C" => "="
+
+# ₌ [SUBSCRIPT EQUALS SIGN]
+"\u208C" => "="
+
+# ï¼ [FULLWIDTH EQUALS SIGN]
+"\uFF1D" => "="
+
+# ï¼ [FULLWIDTH EXCLAMATION MARK]
+"\uFF01" => "!"
+
+# ‼ [DOUBLE EXCLAMATION MARK]
+"\u203C" => "!!"
+
+# ≠[EXCLAMATION QUESTION MARK]
+"\u2049" => "!?"
+
+# # [FULLWIDTH NUMBER SIGN]
+"\uFF03" => "#"
+
+# $ [FULLWIDTH DOLLAR SIGN]
+"\uFF04" => "$"
+
+# â’ [COMMERCIAL MINUS SIGN]
+"\u2052" => "%"
+
+# ï¼… [FULLWIDTH PERCENT SIGN]
+"\uFF05" => "%"
+
+# & [FULLWIDTH AMPERSAND]
+"\uFF06" => "&"
+
+# ⎠[LOW ASTERISK]
+"\u204E" => "*"
+
+# * [FULLWIDTH ASTERISK]
+"\uFF0A" => "*"
+
+# , [FULLWIDTH COMMA]
+"\uFF0C" => ","
+
+# . [FULLWIDTH FULL STOP]
+"\uFF0E" => "."
+
+# â„ [FRACTION SLASH]
+"\u2044" => "/"
+
+# ï¼ [FULLWIDTH SOLIDUS]
+"\uFF0F" => "/"
+
+# : [FULLWIDTH COLON]
+"\uFF1A" => ":"
+
+# â [REVERSED SEMICOLON]
+"\u204F" => ";"
+
+# ï¼› [FULLWIDTH SEMICOLON]
+"\uFF1B" => ";"
+
+# ? [FULLWIDTH QUESTION MARK]
+"\uFF1F" => "?"
+
+# ⇠[DOUBLE QUESTION MARK]
+"\u2047" => "??"
+
+# ∠[QUESTION EXCLAMATION MARK]
+"\u2048" => "?!"
+
+# ï¼  [FULLWIDTH COMMERCIAL AT]
+"\uFF20" => "@"
+
+# ï¼¼ [FULLWIDTH REVERSE SOLIDUS]
+"\uFF3C" => "\\"
+
+# ‸ [CARET]
+"\u2038" => "^"
+
+# ï¼¾ [FULLWIDTH CIRCUMFLEX ACCENT]
+"\uFF3E" => "^"
+
+# _ [FULLWIDTH LOW LINE]
+"\uFF3F" => "_"
+
+# â“ [SWUNG DASH]
+"\u2053" => "~"
+
+# ~ [FULLWIDTH TILDE]
+"\uFF5E" => "~"
+
+################################################################
+# Below is the Perl script used to generate the above mappings #
+# from ASCIIFoldingFilter.java: #
+################################################################
+#
+# #!/usr/bin/perl
+#
+# use warnings;
+# use strict;
+#
+# my @source_chars = ();
+# my @source_char_descriptions = ();
+# my $target = '';
+#
+# while (<>) {
+# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) {
+# push @source_chars, $1;
+# push @source_char_descriptions, $2;
+# next;
+# }
+# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) {
+# $target .= $1;
+# next;
+# }
+# if (/break;/) {
+# $target = "\\\"" if ($target eq '"');
+# for my $source_char_num (0..$#source_chars) {
+# print "# $source_char_descriptions[$source_char_num]\n";
+# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n";
+# }
+# @source_chars = ();
+# @source_char_descriptions = ();
+# $target = '';
+# }
+# }
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-ISOLatin1Accent.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 000000000..ede774258
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,246 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+# example:
+# "À" => "A"
+# "\u00C0" => "A"
+# "\u00C0" => "\u0041"
+# "ß" => "ss"
+# "\t" => " "
+# "\n" => ""
+
+# À => A
+"\u00C0" => "A"
+
+# Ã => A
+"\u00C1" => "A"
+
+# Â => A
+"\u00C2" => "A"
+
+# Ã => A
+"\u00C3" => "A"
+
+# Ä => A
+"\u00C4" => "A"
+
+# Ã… => A
+"\u00C5" => "A"
+
+# Æ => AE
+"\u00C6" => "AE"
+
+# Ç => C
+"\u00C7" => "C"
+
+# È => E
+"\u00C8" => "E"
+
+# É => E
+"\u00C9" => "E"
+
+# Ê => E
+"\u00CA" => "E"
+
+# Ë => E
+"\u00CB" => "E"
+
+# Ì => I
+"\u00CC" => "I"
+
+# Ã => I
+"\u00CD" => "I"
+
+# ÃŽ => I
+"\u00CE" => "I"
+
+# Ã => I
+"\u00CF" => "I"
+
+# IJ => IJ
+"\u0132" => "IJ"
+
+# Ã => D
+"\u00D0" => "D"
+
+# Ñ => N
+"\u00D1" => "N"
+
+# Ã’ => O
+"\u00D2" => "O"
+
+# Ó => O
+"\u00D3" => "O"
+
+# Ô => O
+"\u00D4" => "O"
+
+# Õ => O
+"\u00D5" => "O"
+
+# Ö => O
+"\u00D6" => "O"
+
+# Ø => O
+"\u00D8" => "O"
+
+# Å’ => OE
+"\u0152" => "OE"
+
+# Þ
+"\u00DE" => "TH"
+
+# Ù => U
+"\u00D9" => "U"
+
+# Ú => U
+"\u00DA" => "U"
+
+# Û => U
+"\u00DB" => "U"
+
+# Ü => U
+"\u00DC" => "U"
+
+# Ã => Y
+"\u00DD" => "Y"
+
+# Ÿ => Y
+"\u0178" => "Y"
+
+# à => a
+"\u00E0" => "a"
+
+# á => a
+"\u00E1" => "a"
+
+# â => a
+"\u00E2" => "a"
+
+# ã => a
+"\u00E3" => "a"
+
+# ä => a
+"\u00E4" => "a"
+
+# å => a
+"\u00E5" => "a"
+
+# æ => ae
+"\u00E6" => "ae"
+
+# ç => c
+"\u00E7" => "c"
+
+# è => e
+"\u00E8" => "e"
+
+# é => e
+"\u00E9" => "e"
+
+# ê => e
+"\u00EA" => "e"
+
+# ë => e
+"\u00EB" => "e"
+
+# ì => i
+"\u00EC" => "i"
+
+# í => i
+"\u00ED" => "i"
+
+# î => i
+"\u00EE" => "i"
+
+# ï => i
+"\u00EF" => "i"
+
+# ij => ij
+"\u0133" => "ij"
+
+# ð => d
+"\u00F0" => "d"
+
+# ñ => n
+"\u00F1" => "n"
+
+# ò => o
+"\u00F2" => "o"
+
+# ó => o
+"\u00F3" => "o"
+
+# ô => o
+"\u00F4" => "o"
+
+# õ => o
+"\u00F5" => "o"
+
+# ö => o
+"\u00F6" => "o"
+
+# ø => o
+"\u00F8" => "o"
+
+# Å“ => oe
+"\u0153" => "oe"
+
+# ß => ss
+"\u00DF" => "ss"
+
+# þ => th
+"\u00FE" => "th"
+
+# ù => u
+"\u00F9" => "u"
+
+# ú => u
+"\u00FA" => "u"
+
+# û => u
+"\u00FB" => "u"
+
+# ü => u
+"\u00FC" => "u"
+
+# ý => y
+"\u00FD" => "y"
+
+# ÿ => y
+"\u00FF" => "y"
+
+# ff => ff
+"\uFB00" => "ff"
+
+# ï¬ => fi
+"\uFB01" => "fi"
+
+# fl => fl
+"\uFB02" => "fl"
+
+# ffi => ffi
+"\uFB03" => "ffi"
+
+# ffl => ffl
+"\uFB04" => "ffl"
+
+# ſt => ft
+"\uFB05" => "ft"
+
+# st => st
+"\uFB06" => "st"
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/protwords.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/solr-data-config.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/solr-data-config.xml
new file mode 100644
index 000000000..97ace3319
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/solr-data-config.xml
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<dataConfig>
+ <document>
+ <entity name="sep" processor="SolrEntityProcessor"
+ url="http://127.0.0.1:8983/solr/db "
+ query="*:*"
+ fl="*,orig_version_l:_version_,ignored_price_c:price_c"/>
+ </document>
+</dataConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/solrconfig.xml b/solr-8.1.1/example/example-DIH/solr/solr/conf/solrconfig.xml
new file mode 100644
index 000000000..4f78d21ad
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/solrconfig.xml
@@ -0,0 +1,1351 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first.
+ The default is 100 MB. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="solr.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting the value to true will instruct the underlying Lucene
+ IndexWriter to write its info stream to solr's log. By default,
+ this is enabled here, and controlled through log4j2.xml
+ -->
+ <infoStream>true</infoStream>
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory. -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+ <!-- Max Boolean Clauses
+
+ Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded.
+
+ ** WARNING **
+
+ This option actually modifies a global Lucene property that
+ will affect all SolrCores. If multiple solrconfig.xml files
+ disagree on this property, the value at any given moment will
+ be based on the last SolrCore to be initialized.
+
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+
+ <requestHandler name="/dataimport" class="solr.DataImportHandler">
+ <lst name="defaults">
+ <str name="config">solr-data-config.xml</str>
+ </lst>
+ </requestHandler>
+
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <str name="df">text</str>
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ <str name="df">text</str>
+ </lst>
+ </requestHandler>
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+
+ <!-- VelocityResponseWriter settings -->
+ <str name="wt">velocity</str>
+ <str name="v.template">browse</str>
+ <str name="v.layout">layout</str>
+
+ <!-- Query settings -->
+ <str name="defType">edismax</str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">10</str>
+ <str name="fl">*,score</str>
+
+ <!-- Faceting defaults -->
+ <str name="facet">on</str>
+ <str name="facet.mincount">1</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">text</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="uprefix">ignored_</str>
+
+ <!-- capture link hrefs but ignore div attributes -->
+ <str name="captureAttr">true</str>
+ <str name="fmap.a">links</str>
+ <str name="fmap.div">ignored_</str>
+ </lst>
+ </requestHandler>
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">text</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+
+ <!-- a spellchecker that uses a different distance measure -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">jarowinkler</str>
+ <str name="field">spell</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="distanceMeasure">
+ org.apache.lucene.search.spell.JaroWinklerDistance
+ </str>
+ </lst>
+ -->
+
+ <!-- a spellchecker that use an alternate comparator
+
+ comparatorClass be one of:
+ 1. score (default)
+ 2. freq (Frequency first, then score)
+ 3. A fully qualified class name
+ -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">freq</str>
+ <str name="field">lowerfilt</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="comparatorClass">freq</str>
+ -->
+
+ <!-- A spellchecker that reads the list of words from a file -->
+ <!--
+ <lst name="spellchecker">
+ <str name="classname">solr.FileBasedSpellChecker</str>
+ <str name="name">file</str>
+ <str name="sourceLocation">spellings.txt</str>
+ <str name="characterEncoding">UTF-8</str>
+ <str name="spellcheckIndexDir">spellcheckerFile</str>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck.dictionary">wordbreak</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <searchComponent name="suggest" class="solr.SuggestComponent">
+ <lst name="suggester">
+ <str name="name">mySuggester</str>
+ <str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
+ <str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
+ <str name="field">cat</str>
+ <str name="weightField">price</str>
+ <str name="suggestAnalyzerFieldType">string</str>
+ </lst>
+ </searchComponent>
+
+ <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="suggest">true</str>
+ <str name="suggest.count">10</str>
+ </lst>
+ <arr name="components">
+ <str>suggest</str>
+ </arr>
+ </requestHandler>
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="df">text</str>
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ <str name="config-file">elevate.xml</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="df">text</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+
+</config>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/spellings.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/spellings.txt
new file mode 100644
index 000000000..162a044d5
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/spellings.txt
@@ -0,0 +1,2 @@
+pizza
+history
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/stopwords.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/synonyms.txt b/solr-8.1.1/example/example-DIH/solr/solr/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/update-script.js b/solr-8.1.1/example/example-DIH/solr/solr/conf/update-script.js
new file mode 100644
index 000000000..49b07f9b7
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/update-script.js
@@ -0,0 +1,53 @@
+/*
+ This is a basic skeleton JavaScript update processor.
+
+ In order for this to be executed, it must be properly wired into solrconfig.xml; by default it is commented out in
+ the example solrconfig.xml and must be uncommented to be enabled.
+
+ See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details.
+*/
+
+function processAdd(cmd) {
+
+ doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
+ id = doc.getFieldValue("id");
+ logger.info("update-script#processAdd: id=" + id);
+
+// Set a field value:
+// doc.setField("foo_s", "whatever");
+
+// Get a configuration parameter:
+// config_param = params.get('config_param'); // "params" only exists if processor configured with <lst name="params">
+
+// Get a request parameter:
+// some_param = req.getParams().get("some_param")
+
+// Add a field of field names that match a pattern:
+// - Potentially useful to determine the fields/attributes represented in a result set, via faceting on field_name_ss
+// field_names = doc.getFieldNames().toArray();
+// for(i=0; i < field_names.length; i++) {
+// field_name = field_names[i];
+// if (/attr_.*/.test(field_name)) { doc.addField("attribute_ss", field_names[i]); }
+// }
+
+}
+
+function processDelete(cmd) {
+ // no-op
+}
+
+function processMergeIndexes(cmd) {
+ // no-op
+}
+
+function processCommit(cmd) {
+ // no-op
+}
+
+function processRollback(cmd) {
+ // no-op
+}
+
+function finish() {
+ // no-op
+}
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example.xsl b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example.xsl
new file mode 100644
index 000000000..b89927008
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+ <xsl:output media-type="text/html" encoding="UTF-8"/>
+
+ <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+
+ <xsl:template match='/'>
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <xsl:call-template name="css"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$title"/></h1>
+ <div class="note">
+ This has been formatted by the sample "example.xsl" transform -
+ use your own XSLT to get a nicer page
+ </div>
+ <xsl:apply-templates select="response/result/doc"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <div class="doc">
+ <table width="100%">
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ <xsl:param name="pos"></xsl:param>
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+
+ <xsl:if test="boolean(//lst[@name='explain'])">
+ <xsl:element name="a">
+ <!-- can't allow whitespace here -->
+ <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+ <br/>
+ <xsl:element name="div">
+ <xsl:attribute name="class">exp</xsl:attribute>
+ <xsl:attribute name="id">
+ <xsl:value-of select="concat('exp-',$pos)" />
+ </xsl:attribute>
+ <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+ </xsl:element>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="doc/arr" priority="100">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="*">
+ <li><xsl:value-of select="."/></li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+
+ <xsl:template name="css">
+ <script>
+ function toggle(id) {
+ var obj = document.getElementById(id);
+ obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+ }
+ </script>
+ <style type="text/css">
+ body { font-family: "Lucida Grande", sans-serif }
+ td.name { font-style: italic; font-size:80%; }
+ td { vertical-align: top; }
+ ul { margin: 0px; margin-left: 1em; padding: 0px; }
+ .note { font-size:80%; }
+ .doc { margin-top: 1em; border-top: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ </style>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_atom.xsl b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_atom.xsl
new file mode 100644
index 000000000..b6c23151d
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_atom.xsl
@@ -0,0 +1,67 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+
+ <xsl:template match='/'>
+ <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Example Solr Atom 1.0 Feed</title>
+ <subtitle>
+ This has been formatted by the sample "example_atom.xsl" transform -
+ use your own XSLT to get a nicer Atom feed.
+ </subtitle>
+ <author>
+ <name>Apache Solr</name>
+ <email>solr-user@lucene.apache.org</email>
+ </author>
+ <link rel="self" type="application/atom+xml"
+ href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+ <updated>
+ <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+ </updated>
+ <id>tag:localhost,2007:example</id>
+ <xsl:apply-templates select="response/result/doc"/>
+ </feed>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <entry>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link href="http://localhost:8983/solr/select?q={$id}"/>
+ <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+ <summary><xsl:value-of select="arr[@name='features']"/></summary>
+ <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+ </entry>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl
new file mode 100644
index 000000000..c8ab5bfb1
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+ <xsl:template match='/'>
+ <rss version="2.0">
+ <channel>
+ <title>Example Solr RSS 2.0 Feed</title>
+ <link>http://localhost:8983/solr</link>
+ <description>
+ This has been formatted by the sample "example_rss.xsl" transform -
+ use your own XSLT to get a nicer RSS feed.
+ </description>
+ <language>en-us</language>
+ <docs>http://localhost:8983/solr</docs>
+ <xsl:apply-templates select="response/result/doc"/>
+ </channel>
+ </rss>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+ <item>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </link>
+ <description>
+ <xsl:value-of select="arr[@name='features']"/>
+ </description>
+ <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+ <guid>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </guid>
+ </item>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/luke.xsl b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/luke.xsl
new file mode 100644
index 000000000..05fb5bfee
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/luke.xsl
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<!--
+ Display the luke request handler with graphs
+ -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ version="1.0"
+ >
+ <xsl:output
+ method="html"
+ encoding="UTF-8"
+ media-type="text/html"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ />
+
+ <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <link rel="stylesheet" type="text/css" href="solr-admin.css"/>
+ <link rel="icon" href="favicon.ico" type="image/x-icon"/>
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
+ <title>
+ <xsl:value-of select="$title"/>
+ </title>
+ <xsl:call-template name="css"/>
+
+ </head>
+ <body>
+ <h1>
+ <xsl:value-of select="$title"/>
+ </h1>
+ <div class="doc">
+ <ul>
+ <xsl:if test="response/lst[@name='index']">
+ <li>
+ <a href="#index">Index Statistics</a>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <li>
+ <a href="#fields">Field Statistics</a>
+ <ul>
+ <xsl:for-each select="response/lst[@name='fields']/lst">
+ <li>
+ <a href="#{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <li>
+ <a href="#doc">Document statistics</a>
+ </li>
+ </xsl:if>
+ </ul>
+ </div>
+ <xsl:if test="response/lst[@name='index']">
+ <h2><a name="index"/>Index Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='index']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <h2><a name="fields"/>Field Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='fields']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <h2><a name="doc"/>Document statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='doc']"/>
+ </xsl:if>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="lst">
+ <xsl:if test="parent::lst">
+ <tr>
+ <td colspan="2">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </td>
+ </tr>
+ </xsl:if>
+ <xsl:if test="not(parent::lst)">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="list">
+ <xsl:if test="count(child::*)>0">
+ <table>
+ <thead>
+ <tr>
+ <th colspan="2">
+ <p>
+ <a name="{@name}"/>
+ </p>
+ <xsl:value-of select="@name"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:choose>
+ <xsl:when
+ test="@name='histogram'">
+ <tr>
+ <td colspan="2">
+ <xsl:call-template name="histogram"/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tbody>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="histogram">
+ <div class="doc">
+ <xsl:call-template name="barchart">
+ <xsl:with-param name="max_bar_width">50</xsl:with-param>
+ <xsl:with-param name="iwidth">800</xsl:with-param>
+ <xsl:with-param name="iheight">160</xsl:with-param>
+ <xsl:with-param name="fill">blue</xsl:with-param>
+ </xsl:call-template>
+ </div>
+ </xsl:template>
+
+ <xsl:template name="barchart">
+ <xsl:param name="max_bar_width"/>
+ <xsl:param name="iwidth"/>
+ <xsl:param name="iheight"/>
+ <xsl:param name="fill"/>
+ <xsl:variable name="max">
+ <xsl:for-each select="int">
+ <xsl:sort data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="bars">
+ <xsl:value-of select="count(int)"/>
+ </xsl:variable>
+ <xsl:variable name="bar_width">
+ <xsl:choose>
+ <xsl:when test="$max_bar_width &lt; ($iwidth div $bars)">
+ <xsl:value-of select="$max_bar_width"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$iwidth div $bars"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <table class="histogram">
+ <tbody>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="."/>
+ <div class="histogram">
+ <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
+ </div>
+ </td>
+ </xsl:for-each>
+ </tr>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:for-each>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="keyvalue">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="int|bool|long|float|double|uuid|date">
+ <xsl:call-template name="keyvalue"/>
+ </xsl:template>
+
+ <xsl:template match="arr">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="child::*">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="str">
+ <xsl:choose>
+ <xsl:when test="@name='schema' or @name='index' or @name='flags'">
+ <xsl:call-template name="schema"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="keyvalue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="schema">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:if test="contains(.,'unstored')">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <xsl:if test="not(contains(.,'unstored'))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="charList">
+ <xsl:value-of select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template name="infochar2string">
+ <xsl:param name="i">1</xsl:param>
+ <xsl:param name="charList"/>
+
+ <xsl:variable name="char">
+ <xsl:value-of select="substring($charList,$i,1)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$char='I'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
+ <xsl:when test="$char='T'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
+ <xsl:when test="$char='S'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
+ <xsl:when test="$char='M'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
+ <xsl:when test="$char='V'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
+ <xsl:when test="$char='o'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
+ <xsl:when test="$char='p'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
+ <xsl:when test="$char='O'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
+ <xsl:when test="$char='L'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
+ <xsl:when test="$char='B'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
+ <xsl:when test="$char='C'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
+ <xsl:when test="$char='f'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
+ <xsl:when test="$char='l'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="not($i>=string-length($charList))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="i">
+ <xsl:value-of select="$i+1"/>
+ </xsl:with-param>
+ <xsl:with-param name="charList">
+ <xsl:value-of select="$charList"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="css">
+ <style type="text/css">
+ <![CDATA[
+ td.name {font-style: italic; font-size:80%; }
+ .doc { margin: 0.5em; border: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
+ table.histogram { width: auto; vertical-align: bottom; }
+ table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
+ ]]>
+ </style>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl
new file mode 100644
index 000000000..a96e1d024
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl
@@ -0,0 +1,70 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query response into Solr Update XML compliant XML.
+ When used in the xslt response writer you will get UpdaateXML as output.
+ But you can also store a query response XML to disk and feed this XML to
+ the XSLTUpdateRequestHandler to index the content. Provided as example only.
+ See http://wiki.apache.org/solr/XsltUpdateRequestHandler for more info
+ -->
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+ <xsl:output media-type="text/xml" method="xml" indent="yes"/>
+
+ <xsl:template match='/'>
+ <add>
+ <xsl:apply-templates select="response/result/doc"/>
+ </add>
+ </xsl:template>
+
+ <!-- Ignore score (makes no sense to index) -->
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <doc>
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </doc>
+ </xsl:template>
+
+ <!-- Flatten arrays to duplicate field lines -->
+ <xsl:template match="doc/arr" priority="100">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:for-each select="*">
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/example/example-DIH/solr/solr/core.properties b/solr-8.1.1/example/example-DIH/solr/solr/core.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/solr/core.properties
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/example-DIH/solr/tika/conf/managed-schema b/solr-8.1.1/example/example-DIH/solr/tika/conf/managed-schema
new file mode 100644
index 000000000..b90f314ff
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/tika/conf/managed-schema
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<schema name="example-DIH-tika" version="1.6">
+
+ <uniqueKey>id</uniqueKey>
+
+ <field name="id" type="string" indexed="true" stored="true"/>
+ <field name="author" type="text_simple" indexed="true" stored="true"/>
+ <field name="title" type="text_simple" indexed="true" stored="true" multiValued="true"/>
+ <field name="format" type="string" indexed="true" stored="true"/>
+
+ <!-- field "text" is searchable but it is not stored to save space -->
+ <field name="text" type="text_simple" indexed="true" stored="false" multiValued="true"/>
+
+
+ <!-- Uncomment the dynamicField definition to catch any other fields
+ that may have been declared in the DIH configuration.
+ This allows to speed up prototyping.
+ -->
+ <!-- <dynamicField name="*" type="string" indexed="true" stored="true" multiValued="true"/> -->
+
+ <!-- The StrField type is not analyzed, but is indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
+
+
+ <!-- A basic text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ and down cases. It does not deal with stopwords or other issues.
+ See other examples for alternative definitions.
+ -->
+ <fieldType name="text_simple" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+</schema> \ No newline at end of file
diff --git a/solr-8.1.1/example/example-DIH/solr/tika/conf/solrconfig.xml b/solr-8.1.1/example/example-DIH/solr/tika/conf/solrconfig.xml
new file mode 100644
index 000000000..d8509f863
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/tika/conf/solrconfig.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is a DEMO configuration highlighting elements
+ specifically needed to get this example running
+ such as libraries and request handler specifics.
+
+ It uses defaults or does not define most of production-level settings
+ such as various caches or auto-commit policies.
+
+ See Solr Reference Guide and other examples for
+ more details on a well configured solrconfig.xml
+ https://lucene.apache.org/solr/guide/the-well-configured-solr-instance.html
+-->
+
+<config>
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- Load Data Import Handler and Apache Tika (extraction) libraries -->
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar"/>
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar"/>
+
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="df">text</str>
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ </requestHandler>
+
+ <requestHandler name="/dataimport" class="solr.DataImportHandler">
+ <lst name="defaults">
+ <str name="config">tika-data-config.xml</str>
+ </lst>
+ </requestHandler>
+
+</config>
diff --git a/solr-8.1.1/example/example-DIH/solr/tika/conf/tika-data-config.xml b/solr-8.1.1/example/example-DIH/solr/tika/conf/tika-data-config.xml
new file mode 100644
index 000000000..5286fc418
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/tika/conf/tika-data-config.xml
@@ -0,0 +1,26 @@
+<dataConfig>
+ <dataSource type="BinFileDataSource"/>
+ <document>
+ <entity name="file" processor="FileListEntityProcessor" dataSource="null"
+ baseDir="${solr.install.dir}/example/exampledocs" fileName=".*pdf"
+ rootEntity="false">
+
+ <field column="file" name="id"/>
+
+ <entity name="pdf" processor="TikaEntityProcessor"
+ url="${file.fileAbsolutePath}" format="text">
+
+ <field column="Author" name="author" meta="true"/>
+ <!-- in the original PDF, the Author meta-field name is upper-cased,
+ but in Solr schema it is lower-cased
+ -->
+
+ <field column="title" name="title" meta="true"/>
+ <field column="dc:format" name="format" meta="true"/>
+
+ <field column="text" name="text"/>
+
+ </entity>
+ </entity>
+ </document>
+</dataConfig>
diff --git a/solr-8.1.1/example/example-DIH/solr/tika/core.properties b/solr-8.1.1/example/example-DIH/solr/tika/core.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/example-DIH/solr/tika/core.properties
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/exampledocs/books.csv b/solr-8.1.1/example/exampledocs/books.csv
new file mode 100644
index 000000000..8ccecbbe0
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/books.csv
@@ -0,0 +1,11 @@
+id,cat,name,price,inStock,author,series_t,sequence_i,genre_s
+0553573403,book,A Game of Thrones,7.99,true,George R.R. Martin,"A Song of Ice and Fire",1,fantasy
+0553579908,book,A Clash of Kings,7.99,true,George R.R. Martin,"A Song of Ice and Fire",2,fantasy
+055357342X,book,A Storm of Swords,7.99,true,George R.R. Martin,"A Song of Ice and Fire",3,fantasy
+0553293354,book,Foundation,7.99,true,Isaac Asimov,Foundation Novels,1,scifi
+0812521390,book,The Black Company,6.99,false,Glen Cook,The Chronicles of The Black Company,1,fantasy
+0812550706,book,Ender's Game,6.99,true,Orson Scott Card,Ender,1,scifi
+0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy
+0380014300,book,Nine Princes In Amber,6.99,true,Roger Zelazny,the Chronicles of Amber,1,fantasy
+0805080481,book,The Book of Three,5.99,true,Lloyd Alexander,The Chronicles of Prydain,1,fantasy
+080508049X,book,The Black Cauldron,5.99,true,Lloyd Alexander,The Chronicles of Prydain,2,fantasy
diff --git a/solr-8.1.1/example/exampledocs/books.json b/solr-8.1.1/example/exampledocs/books.json
new file mode 100644
index 000000000..f82d5103d
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/books.json
@@ -0,0 +1,51 @@
+[
+ {
+ "id" : "978-0641723445",
+ "cat" : ["book","hardcover"],
+ "name" : "The Lightning Thief",
+ "author" : "Rick Riordan",
+ "series_t" : "Percy Jackson and the Olympians",
+ "sequence_i" : 1,
+ "genre_s" : "fantasy",
+ "inStock" : true,
+ "price" : 12.50,
+ "pages_i" : 384
+ }
+,
+ {
+ "id" : "978-1423103349",
+ "cat" : ["book","paperback"],
+ "name" : "The Sea of Monsters",
+ "author" : "Rick Riordan",
+ "series_t" : "Percy Jackson and the Olympians",
+ "sequence_i" : 2,
+ "genre_s" : "fantasy",
+ "inStock" : true,
+ "price" : 6.49,
+ "pages_i" : 304
+ }
+,
+ {
+ "id" : "978-1857995879",
+ "cat" : ["book","paperback"],
+ "name" : "Sophie's World : The Greek Philosophers",
+ "author" : "Jostein Gaarder",
+ "sequence_i" : 1,
+ "genre_s" : "fantasy",
+ "inStock" : true,
+ "price" : 3.07,
+ "pages_i" : 64
+ }
+,
+ {
+ "id" : "978-1933988177",
+ "cat" : ["book","paperback"],
+ "name" : "Lucene in Action, Second Edition",
+ "author" : "Michael McCandless",
+ "sequence_i" : 1,
+ "genre_s" : "IT",
+ "inStock" : true,
+ "price" : 30.50,
+ "pages_i" : 475
+ }
+]
diff --git a/solr-8.1.1/example/exampledocs/gb18030-example.xml b/solr-8.1.1/example/exampledocs/gb18030-example.xml
new file mode 100644
index 000000000..01743d367
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/gb18030-example.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="GB18030"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+ <doc>
+ <field name="id">GB18030TEST</field>
+ <field name="name">Test with some GB18030 encoded characters</field>
+ <field name="features">No accents here</field>
+ <field name="features">ÕâÊÇÒ»¸ö¹¦ÄÜ</field>
+ <field name="features">This is a feature (translated)</field>
+ <field name="features">Õâ·ÝÎļþÊǺÜÓйâÔó</field>
+ <field name="features">This document is very shiny (translated)</field>
+ <field name="price">0.0</field>
+ <field name="inStock">true</field>
+ </doc>
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/hd.xml b/solr-8.1.1/example/exampledocs/hd.xml
new file mode 100644
index 000000000..9cf7d1b05
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/hd.xml
@@ -0,0 +1,56 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+<doc>
+ <field name="id">SP2514N</field>
+ <field name="name">Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133</field>
+ <field name="manu">Samsung Electronics Co. Ltd.</field>
+ <!-- Join -->
+ <field name="manu_id_s">samsung</field>
+ <field name="cat">electronics</field>
+ <field name="cat">hard drive</field>
+ <field name="features">7200RPM, 8MB cache, IDE Ultra ATA-133</field>
+ <field name="features">NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor</field>
+ <field name="price">92.0</field>
+ <field name="popularity">6</field>
+ <field name="inStock">true</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+ <!-- Near Oklahoma city -->
+ <field name="store">35.0752,-97.032</field>
+</doc>
+
+<doc>
+ <field name="id">6H500F0</field>
+ <field name="name">Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300</field>
+ <field name="manu">Maxtor Corp.</field>
+ <!-- Join -->
+ <field name="manu_id_s">maxtor</field>
+ <field name="cat">electronics</field>
+ <field name="cat">hard drive</field>
+ <field name="features">SATA 3.0Gb/s, NCQ</field>
+ <field name="features">8.5ms seek</field>
+ <field name="features">16MB cache</field>
+ <field name="price">350.0</field>
+ <field name="popularity">6</field>
+ <field name="inStock">true</field>
+ <!-- Buffalo store -->
+ <field name="store">45.17614,-93.87341</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+</doc>
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/ipod_other.xml b/solr-8.1.1/example/exampledocs/ipod_other.xml
new file mode 100644
index 000000000..3de32f3b7
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/ipod_other.xml
@@ -0,0 +1,60 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+
+<doc>
+ <field name="id">F8V7067-APL-KIT</field>
+ <field name="name">Belkin Mobile Power Cord for iPod w/ Dock</field>
+ <field name="manu">Belkin</field>
+ <!-- Join -->
+ <field name="manu_id_s">belkin</field>
+ <field name="cat">electronics</field>
+ <field name="cat">connector</field>
+ <field name="features">car power adapter, white</field>
+ <field name="weight">4.0</field>
+ <field name="price">19.95</field>
+ <field name="popularity">1</field>
+ <field name="inStock">false</field>
+ <!-- Buffalo store -->
+ <field name="store">45.18014,-93.87741</field>
+ <field name="manufacturedate_dt">2005-08-01T16:30:25Z</field>
+</doc>
+
+<doc>
+ <field name="id">IW-02</field>
+ <field name="name">iPod &amp; iPod Mini USB 2.0 Cable</field>
+ <field name="manu">Belkin</field>
+ <!-- Join -->
+ <field name="manu_id_s">belkin</field>
+ <field name="cat">electronics</field>
+ <field name="cat">connector</field>
+ <field name="features">car power adapter for iPod, white</field>
+ <field name="weight">2.0</field>
+ <field name="price">11.50</field>
+ <field name="popularity">1</field>
+ <field name="inStock">false</field>
+ <!-- San Francisco store -->
+ <field name="store">37.7752,-122.4232</field>
+ <field name="manufacturedate_dt">2006-02-14T23:55:59Z</field>
+</doc>
+
+
+</add>
+
+
+
diff --git a/solr-8.1.1/example/exampledocs/ipod_video.xml b/solr-8.1.1/example/exampledocs/ipod_video.xml
new file mode 100644
index 000000000..1ca5f6f5c
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/ipod_video.xml
@@ -0,0 +1,40 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add><doc>
+ <field name="id">MA147LL/A</field>
+ <field name="name">Apple 60 GB iPod with Video Playback Black</field>
+ <field name="manu">Apple Computer Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">apple</field>
+ <field name="cat">electronics</field>
+ <field name="cat">music</field>
+ <field name="features">iTunes, Podcasts, Audiobooks</field>
+ <field name="features">Stores up to 15,000 songs, 25,000 photos, or 150 hours of video</field>
+ <field name="features">2.5-inch, 320x240 color TFT LCD display with LED backlight</field>
+ <field name="features">Up to 20 hours of battery life</field>
+ <field name="features">Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video</field>
+ <field name="features">Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication</field>
+ <field name="includes">earbud headphones, USB cable</field>
+ <field name="weight">5.5</field>
+ <field name="price">399.00</field>
+ <field name="popularity">10</field>
+ <field name="inStock">true</field>
+ <!-- Dodge City store -->
+ <field name="store">37.7752,-100.0232</field>
+ <field name="manufacturedate_dt">2005-10-12T08:00:00Z</field>
+</doc></add>
diff --git a/solr-8.1.1/example/exampledocs/manufacturers.xml b/solr-8.1.1/example/exampledocs/manufacturers.xml
new file mode 100644
index 000000000..e3121d5db
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/manufacturers.xml
@@ -0,0 +1,75 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+ <doc>
+ <field name="id">adata</field>
+ <field name="compName_s">A-Data Technology</field>
+ <field name="address_s">46221 Landing Parkway Fremont, CA 94538</field>
+ </doc>
+ <doc>
+ <field name="id">apple</field>
+ <field name="compName_s">Apple</field>
+ <field name="address_s">1 Infinite Way, Cupertino CA</field>
+ </doc>
+ <doc>
+ <field name="id">asus</field>
+ <field name="compName_s">ASUS Computer</field>
+ <field name="address_s">800 Corporate Way Fremont, CA 94539</field>
+ </doc>
+ <doc>
+ <field name="id">ati</field>
+ <field name="compName_s">ATI Technologies</field>
+ <field name="address_s">33 Commerce Valley Drive East Thornhill, ON L3T 7N6 Canada</field>
+ </doc>
+ <doc>
+ <field name="id">belkin</field>
+ <field name="compName_s">Belkin</field>
+ <field name="address_s">12045 E. Waterfront Drive Playa Vista, CA 90094</field>
+ </doc>
+ <doc>
+ <field name="id">canon</field>
+ <field name="compName_s">Canon, Inc.</field>
+ <field name="address_s">One Canon Plaza Lake Success, NY 11042</field>
+ </doc>
+ <doc>
+ <field name="id">corsair</field>
+ <field name="compName_s">Corsair Microsystems</field>
+ <field name="address_s">46221 Landing Parkway Fremont, CA 94538</field>
+ </doc>
+ <doc>
+ <field name="id">dell</field>
+ <field name="compName_s">Dell, Inc.</field>
+ <field name="address_s">One Dell Way Round Rock, Texas 78682</field>
+ </doc>
+ <doc>
+ <field name="id">maxtor</field>
+ <field name="compName_s">Maxtor Corporation</field>
+ <field name="address_s">920 Disc Drive Scotts Valley, CA 95066</field>
+ </doc>
+ <doc>
+ <field name="id">samsung</field>
+ <field name="compName_s">Samsung Electronics Co. Ltd.</field>
+ <field name="address_s">105 Challenger Rd. Ridgefield Park, NJ 07660-0511</field>
+ </doc>
+ <doc>
+ <field name="id">viewsonic</field>
+ <field name="compName_s">ViewSonic Corp</field>
+ <field name="address_s">381 Brea Canyon Road Walnut, CA 91789-0708</field>
+ </doc>
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/mem.xml b/solr-8.1.1/example/exampledocs/mem.xml
new file mode 100644
index 000000000..48af5222f
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/mem.xml
@@ -0,0 +1,77 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+<doc>
+ <field name="id">TWINX2048-3200PRO</field>
+ <field name="name">CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail</field>
+ <field name="manu">Corsair Microsystems Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">corsair</field>
+ <field name="cat">electronics</field>
+ <field name="cat">memory</field>
+ <field name="features">CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
+ <field name="price">185.00</field>
+ <field name="popularity">5</field>
+ <field name="inStock">true</field>
+ <!-- San Francisco store -->
+ <field name="store">37.7752,-122.4232</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+
+ <!-- a field for testing payload tagged text via DelimitedPayloadTokenFilter -->
+ <field name="payloads">electronics|6.0 memory|3.0</field>
+</doc>
+
+<doc>
+ <field name="id">VS1GB400C3</field>
+ <field name="name">CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail</field>
+ <field name="manu">Corsair Microsystems Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">corsair</field>
+ <field name="cat">electronics</field>
+ <field name="cat">memory</field>
+ <field name="price">74.99</field>
+ <field name="popularity">7</field>
+ <field name="inStock">true</field>
+ <!-- Dodge City store -->
+ <field name="store">37.7752,-100.0232</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+
+ <field name="payloads">electronics|4.0 memory|2.0</field>
+</doc>
+
+<doc>
+ <field name="id">VDBDB1A16</field>
+ <field name="name">A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM</field>
+ <field name="manu">A-DATA Technology Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">corsair</field>
+ <field name="cat">electronics</field>
+ <field name="cat">memory</field>
+ <field name="features">CAS latency 3, 2.7v</field>
+ <!-- note: price & popularity is missing on this one -->
+ <field name="popularity">0</field>
+ <field name="inStock">true</field>
+ <!-- Buffalo store -->
+ <field name="store">45.18414,-93.88141</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+
+ <field name="payloads">electronics|0.9 memory|0.1</field>
+</doc>
+
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/money.xml b/solr-8.1.1/example/exampledocs/money.xml
new file mode 100644
index 000000000..b1b8036c3
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/money.xml
@@ -0,0 +1,65 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example documents utilizing the CurrencyField type -->
+<add>
+<doc>
+ <field name="id">USD</field>
+ <field name="name">One Dollar</field>
+ <field name="manu">Bank of America</field>
+ <field name="manu_id_s">boa</field>
+ <field name="cat">currency</field>
+ <field name="features">Coins and notes</field>
+ <field name="price_c">1,USD</field>
+ <field name="inStock">true</field>
+</doc>
+
+<doc>
+ <field name="id">EUR</field>
+ <field name="name">One Euro</field>
+ <field name="manu">European Union</field>
+ <field name="manu_id_s">eu</field>
+ <field name="cat">currency</field>
+ <field name="features">Coins and notes</field>
+ <field name="price_c">1,EUR</field>
+ <field name="inStock">true</field>
+</doc>
+
+<doc>
+ <field name="id">GBP</field>
+ <field name="name">One British Pound</field>
+ <field name="manu">U.K.</field>
+ <field name="manu_id_s">uk</field>
+ <field name="cat">currency</field>
+ <field name="features">Coins and notes</field>
+ <field name="price_c">1,GBP</field>
+ <field name="inStock">true</field>
+</doc>
+
+<doc>
+ <field name="id">NOK</field>
+ <field name="name">One Krone</field>
+ <field name="manu">Bank of Norway</field>
+ <field name="manu_id_s">nor</field>
+ <field name="cat">currency</field>
+ <field name="features">Coins and notes</field>
+ <field name="price_c">1,NOK</field>
+ <field name="inStock">true</field>
+</doc>
+
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/monitor.xml b/solr-8.1.1/example/exampledocs/monitor.xml
new file mode 100644
index 000000000..d0343af15
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/monitor.xml
@@ -0,0 +1,34 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add><doc>
+ <field name="id">3007WFP</field>
+ <field name="name">Dell Widescreen UltraSharp 3007WFP</field>
+ <field name="manu">Dell, Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">dell</field>
+ <field name="cat">electronics and computer1</field>
+ <field name="features">30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</field>
+ <field name="includes">USB cable</field>
+ <field name="weight">401.6</field>
+ <field name="price">2199.0</field>
+ <field name="popularity">6</field>
+ <field name="inStock">true</field>
+ <!-- Buffalo store -->
+ <field name="store">43.17614,-90.57341</field>
+</doc></add>
+
diff --git a/solr-8.1.1/example/exampledocs/monitor2.xml b/solr-8.1.1/example/exampledocs/monitor2.xml
new file mode 100644
index 000000000..eaf9e223c
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/monitor2.xml
@@ -0,0 +1,33 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add><doc>
+ <field name="id">VA902B</field>
+ <field name="name">ViewSonic VA902B - flat panel display - TFT - 19"</field>
+ <field name="manu">ViewSonic Corp.</field>
+ <!-- Join -->
+ <field name="manu_id_s">viewsonic</field>
+ <field name="cat">electronics and stuff2</field>
+ <field name="features">19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution</field>
+ <field name="weight">190.4</field>
+ <field name="price">279.95</field>
+ <field name="popularity">6</field>
+ <field name="inStock">true</field>
+ <!-- Buffalo store -->
+ <field name="store">45.18814,-93.88541</field>
+</doc></add>
+
diff --git a/solr-8.1.1/example/exampledocs/more_books.jsonl b/solr-8.1.1/example/exampledocs/more_books.jsonl
new file mode 100644
index 000000000..a48ad1e42
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/more_books.jsonl
@@ -0,0 +1,3 @@
+{"id":"0060248025","name":"Falling Up","inStock": true,"author": "Shel Silverstein"}
+{"id":"0679805273","name":"Oh, The Places You'll Go","inStock": true,"author": "Dr. Seuss"}
+
diff --git a/solr-8.1.1/example/exampledocs/mp500.xml b/solr-8.1.1/example/exampledocs/mp500.xml
new file mode 100644
index 000000000..a8f51b643
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/mp500.xml
@@ -0,0 +1,43 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add><doc>
+ <field name="id">0579B002</field>
+ <field name="name">Canon PIXMA MP500 All-In-One Photo Printer</field>
+ <field name="manu">Canon Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">canon</field>
+ <field name="cat">electronics</field>
+ <field name="cat">multifunction printer</field>
+ <field name="cat">printer</field>
+ <field name="cat">scanner</field>
+ <field name="cat">copier</field>
+ <field name="features">Multifunction ink-jet color photo printer</field>
+ <field name="features">Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi</field>
+ <field name="features">2.5" color LCD preview screen</field>
+ <field name="features">Duplex Copying</field>
+ <field name="features">Printing speed up to 29ppm black, 19ppm color</field>
+ <field name="features">Hi-Speed USB</field>
+ <field name="features">memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard</field>
+ <field name="weight">352.0</field>
+ <field name="price">179.99</field>
+ <field name="popularity">6</field>
+ <field name="inStock">true</field>
+ <!-- Buffalo store -->
+ <field name="store">45.19214,-93.89941</field>
+</doc></add>
+
diff --git a/solr-8.1.1/example/exampledocs/post.jar b/solr-8.1.1/example/exampledocs/post.jar
new file mode 100644
index 000000000..bdb55c1ae
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/post.jar
Binary files differ
diff --git a/solr-8.1.1/example/exampledocs/sample.html b/solr-8.1.1/example/exampledocs/sample.html
new file mode 100644
index 000000000..656b656b6
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/sample.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+ <title>Welcome to Solr</title>
+</head>
+<body>
+<p>
+ Here is some text
+</p>
+<p>distinct<br/>words</p>
+<div>Here is some text in a div</div>
+<div>This has a <a href="http://www.apache.org">link</a>.</div>
+</body>
+</html>
diff --git a/solr-8.1.1/example/exampledocs/sd500.xml b/solr-8.1.1/example/exampledocs/sd500.xml
new file mode 100644
index 000000000..145c6fd5d
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/sd500.xml
@@ -0,0 +1,38 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add><doc>
+ <field name="id">9885A004</field>
+ <field name="name">Canon PowerShot SD500</field>
+ <field name="manu">Canon Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">canon</field>
+ <field name="cat">electronics</field>
+ <field name="cat">camera</field>
+ <field name="features">3x zoop, 7.1 megapixel Digital ELPH</field>
+ <field name="features">movie clips up to 640x480 @30 fps</field>
+ <field name="features">2.0" TFT LCD, 118,000 pixels</field>
+ <field name="features">built in flash, red-eye reduction</field>
+ <field name="includes">32MB SD card, USB cable, AV cable, battery</field>
+ <field name="weight">6.4</field>
+ <field name="price">329.95</field>
+ <field name="popularity">7</field>
+ <field name="inStock">true</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z</field>
+ <!-- Buffalo store -->
+ <field name="store">45.19614,-93.90341</field>
+</doc></add>
diff --git a/solr-8.1.1/example/exampledocs/solr-word.pdf b/solr-8.1.1/example/exampledocs/solr-word.pdf
new file mode 100644
index 000000000..bd8b86590
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/solr-word.pdf
Binary files differ
diff --git a/solr-8.1.1/example/exampledocs/solr.xml b/solr-8.1.1/example/exampledocs/solr.xml
new file mode 100644
index 000000000..a36561752
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/solr.xml
@@ -0,0 +1,38 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+<doc>
+ <field name="id">SOLR1000</field>
+ <field name="name">Solr, the Enterprise Search Server</field>
+ <field name="manu">Apache Software Foundation</field>
+ <field name="cat">software</field>
+ <field name="cat">search</field>
+ <field name="features">Advanced Full-Text Search Capabilities using Lucene</field>
+ <field name="features">Optimized for High Volume Web Traffic</field>
+ <field name="features">Standards Based Open Interfaces - XML and HTTP</field>
+ <field name="features">Comprehensive HTML Administration Interfaces</field>
+ <field name="features">Scalability - Efficient Replication to other Solr Search Servers</field>
+ <field name="features">Flexible and Adaptable with XML configuration and Schema</field>
+ <field name="features">Good unicode support: h&#xE9;llo (hello with an accent over the e)</field>
+ <field name="price">0.0</field>
+ <field name="popularity">10</field>
+ <field name="inStock">true</field>
+ <field name="incubationdate_dt">2006-01-17T00:00:00.000Z</field>
+</doc>
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/test_utf8.sh b/solr-8.1.1/example/exampledocs/test_utf8.sh
new file mode 100644
index 000000000..9032e12ff
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/test_utf8.sh
@@ -0,0 +1,93 @@
+#!/bin/sh
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#Test script to tell if the server is accepting UTF-8
+#The python writer currently escapes non-ascii chars, so it's good for testing
+
+SOLR_URL=http://localhost:8983/solr
+
+if [ ! -z $1 ]; then
+ SOLR_URL=$1
+fi
+
+curl "$SOLR_URL/select?q=hello&params=explicit&wt=python" 2> /dev/null | grep 'hello' > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "Solr server is up."
+else
+ echo "ERROR: Could not curl to Solr - is curl installed? Is Solr not running?"
+ exit 1
+fi
+
+curl "$SOLR_URL/select?q=h%C3%A9llo&echoParams=explicit&wt=python" 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP GET is accepting UTF-8"
+else
+ echo "ERROR: HTTP GET is not accepting UTF-8"
+fi
+
+curl $SOLR_URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP POST is accepting UTF-8"
+else
+ echo "ERROR: HTTP POST is not accepting UTF-8"
+fi
+
+curl $SOLR_URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP POST defaults to UTF-8"
+else
+ echo "HTTP POST does not default to UTF-8"
+fi
+
+
+#A unicode character outside of the BMP (a circle with an x inside)
+CHAR="ðŒˆ"
+CODEPOINT='0x10308'
+#URL encoded UTF8 of the codepoint
+UTF8_Q='%F0%90%8C%88'
+#expected return of the python writer (currently uses UTF-16 surrogates)
+EXPECTED='\\ud800\\udf08'
+
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=python" 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP GET is accepting UTF-8 beyond the basic multilingual plane"
+else
+ echo "ERROR: HTTP GET is not accepting UTF-8 beyond the basic multilingual plane"
+fi
+
+curl $SOLR_URL/select --data-binary "q=$UTF8_Q&echoParams=explicit&wt=python" -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP POST is accepting UTF-8 beyond the basic multilingual plane"
+else
+ echo "ERROR: HTTP POST is not accepting UTF-8 beyond the basic multilingual plane"
+fi
+
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=python" --data-binary '' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "HTTP POST + URL params is accepting UTF-8 beyond the basic multilingual plane"
+else
+ echo "ERROR: HTTP POST + URL params is not accepting UTF-8 beyond the basic multilingual plane"
+fi
+
+#curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit" 2> /dev/null | od -tx1 -w1000 | sed 's/ //g' | grep 'f4808198' > /dev/null 2>&1
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit" 2> /dev/null | grep "$CHAR" > /dev/null 2>&1
+if [ $? = 0 ]; then
+ echo "Response correctly returns UTF-8 beyond the basic multilingual plane"
+else
+ echo "ERROR: Response can't return UTF-8 beyond the basic multilingual plane"
+fi
+
+
diff --git a/solr-8.1.1/example/exampledocs/utf8-example.xml b/solr-8.1.1/example/exampledocs/utf8-example.xml
new file mode 100644
index 000000000..ee300a683
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/utf8-example.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ After posting this to Solr with bin/post, searching for "êâîôû" from
+ the solr/admin/ search page must return this document.
+ -->
+
+<add>
+ <doc>
+ <field name="id">UTF8TEST</field>
+ <field name="name">Test with some UTF-8 encoded characters</field>
+ <field name="manu">Apache Software Foundation</field>
+ <field name="cat">software</field>
+ <field name="cat">search</field>
+ <field name="features">No accents here</field>
+ <field name="features">This is an e acute: é</field>
+ <field name="features">eaiou with circumflexes: êâîôû</field>
+ <field name="features">eaiou with umlauts: ëäïöü</field>
+ <field name="features">tag with escaped chars: &lt;nicetag/&gt;</field>
+ <field name="features">escaped ampersand: Bonnie &amp; Clyde</field>
+ <field name="features">Outside the BMP:ðŒˆ codepoint=10308, a circle with an x inside. UTF8=f0908c88 UTF16=d800 df08</field>
+ <field name="price">0.0</field>
+ <field name="inStock">true</field>
+ </doc>
+</add>
+
diff --git a/solr-8.1.1/example/exampledocs/vidcard.xml b/solr-8.1.1/example/exampledocs/vidcard.xml
new file mode 100644
index 000000000..d867d82ac
--- /dev/null
+++ b/solr-8.1.1/example/exampledocs/vidcard.xml
@@ -0,0 +1,62 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<add>
+<doc>
+ <field name="id">EN7800GTX/2DHTV/256M</field>
+ <field name="name">ASUS Extreme N7800GTX/2DHTV (256 MB)</field>
+ <!-- Denormalized -->
+ <field name="manu">ASUS Computer Inc.</field>
+ <!-- Join -->
+ <field name="manu_id_s">asus</field>
+ <field name="cat">electronics</field>
+ <field name="cat">graphics card</field>
+ <field name="features">NVIDIA GeForce 7800 GTX GPU/VPU clocked at 486MHz</field>
+ <field name="features">256MB GDDR3 Memory clocked at 1.35GHz</field>
+ <field name="features">PCI Express x16</field>
+ <field name="features">Dual DVI connectors, HDTV out, video input</field>
+ <field name="features">OpenGL 2.0, DirectX 9.0</field>
+ <field name="weight">16.0</field>
+ <field name="price">479.95</field>
+ <field name="popularity">7</field>
+ <field name="store">40.7143,-74.006</field>
+ <field name="inStock">false</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z/DAY</field>
+</doc>
+ <!-- yes, you can add more than one document at a time -->
+<doc>
+ <field name="id">100-435805</field>
+ <field name="name">ATI Radeon X1900 XTX 512 MB PCIE Video Card</field>
+ <field name="manu">ATI Technologies</field>
+ <!-- Join -->
+ <field name="manu_id_s">ati</field>
+ <field name="cat">electronics</field>
+ <field name="cat">graphics card</field>
+ <field name="features">ATI RADEON X1900 GPU/VPU clocked at 650MHz</field>
+ <field name="features">512MB GDDR3 SDRAM clocked at 1.55GHz</field>
+ <field name="features">PCI Express x16</field>
+ <field name="features">dual DVI, HDTV, svideo, composite out</field>
+ <field name="features">OpenGL 2.0, DirectX 9.0</field>
+ <field name="weight">48.0</field>
+ <field name="price">649.99</field>
+ <field name="popularity">7</field>
+ <field name="inStock">false</field>
+ <field name="manufacturedate_dt">2006-02-13T15:26:37Z/DAY</field>
+ <!-- NYC store -->
+ <field name="store">40.7143,-74.006</field>
+</doc>
+</add>
diff --git a/solr-8.1.1/example/files/README.txt b/solr-8.1.1/example/files/README.txt
new file mode 100644
index 000000000..655fd5172
--- /dev/null
+++ b/solr-8.1.1/example/files/README.txt
@@ -0,0 +1,152 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+# Solr-Powered File Search
+
+This README guides you through creating a Solr-powered search engine for your own set of files including Word documents,
+PDFs, HTML, and many other supported types.
+
+For further explanations, see the frequently asked questions at the end of the guide.
+
+##GETTING STARTED
+
+* To start Solr, enter the following command (make sure you’ve cd’ed into the directory in which Solr was installed):
+
+ bin/solr start
+
+* If you’ve started correctly, you should see the following output:
+
+ Waiting to see Solr listening on port 8983 [/]
+ Started Solr server on port 8983 (pid=<your pid>). Happy searching!
+<hr>
+
+##CREATING THE CORE/COLLECTION
+
+* Before you can index your documents, you’ll need to create a core/collection. Do this by entering:
+
+ bin/solr create -c files -d example/files/conf
+
+* Now you’ve created a core called “files†using a configuration tuned for indexing and querying rich text files.
+
+* You should see the following response:
+
+ Creating new core 'files' using command:
+ http://localhost:8983/solr/admin/cores?action=CREATE&name=files&instanceDir=files
+
+ {
+ "responseHeader":{
+ "status":0,
+ "QTime":239},
+ "core":"files"}
+
+<hr>
+##INDEXING DOCUMENTS
+
+* Return to your command shell. To post all of your documents to the documents core, enter the following:
+
+ bin/post -c files ~/Documents
+
+* Depending on how many documents you have, this could take a while. Sit back and watch the magic happen. When all of your documents have been indexed you’ll see something like:
+
+ <some number> files indexed.
+ COMMITting Solr index changes to http://localhost:8983/solr/files/update...
+ Time spent: <some amount of time>
+
+* To see a list of accepted file types, do:
+ bin/post -h
+
+
+<hr>
+##BROWSING DOCUMENTS
+
+* Your document information can be viewed in multiple formats: XML, JSON, CSV, as well as a nice HTML interface.
+
+* To view your document information in the HTML interface view, adjust the URL in your address bar to [http://localhost:8983/solr/files/browse](http://localhost:8983/solr/files/browse)
+
+* To view your document information in XML or other formats, add &wt (for writer type) to the end of that URL. i.e. To view your results in xml format direct your browser to:
+ [http://localhost:8983/solr/files/browse?&wt=xml](http://localhost:8983/solr/files/browse?&wt=xml)
+
+<hr>
+##ADMIN UI
+
+* Another way to verify that your core has been created is to view it in the Admin User Interface.
+
+ - The Admin_UI serves as a visual tool for indexing and querying your index in Solr.
+
+* To access the Admin UI, go to your browser and visit :
+ [http://localhost:8983/solr/](http://localhost:8983/solr/)
+
+ - <i>The Admin UI is only accessible when Solr is running</i>
+
+* On the left-hand side of the home page, click on “Core Selectorâ€. The core you created, called “files†should be listed there; click on it. If it’s not listed, your core was not created and you’ll need to re-enter the create command.
+* Alternatively, you could just go to the core page directly by visiting : [http://localhost:8983/solr/#/files](http://localhost:8983/solr/#/files)
+
+* Now you’ve opened the core page. On this page there are a multitude of different tools you can use to analyze and search your core. You will make use of these features after indexing your documents.
+* Take note of the "Num Docs" field in your core Statistics. If after indexing your documents, it shows Num Docs to be 0, that means there was a problem indexing.
+
+<hr>
+##QUERYING INDEX
+
+* In the Admin UI, enter a term in the query box to see which documents contain the word.
+
+* You can filter the results by switching between the different content type tabs. To view an international version of this interface, hover over the globe icon in the top right hand section of the page.
+
+* Notice the tag cloud on the right side, which facets by top phrases extracted during indexing.
+ Click on the phrases to see which documents contain them.
+
+* Another way to query the index is by manipulating the URL in your address bar once in the browse view.
+
+* i.e. : [http://localhost:8983/solr/files/browse?q=Lucene](http://localhost:8983/solr/files/browse?q=Lucene)
+<hr>
+##FAQs
+
+* Why use -d when creating a core?
+ * -d specifies a specific configuration to use. This example as a configuration tuned for indexing and query rich
+ text files.
+
+* How do I delete a core?
+ * To delete a core (i.e. files), you can enter the following in your command shell:
+ bin/solr delete -c files
+
+ * You should see the following output:
+
+ Deleting core 'files' using command:
+ http://localhost:8983/solr/admin/cores?action=UNLOAD&core=files&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true
+
+ {"responseHeader":{
+ "status":0,
+ "QTime":19}}
+
+ * This calls the Solr core admin handler, "UNLOAD", and the parameters "deleteDataDir" and "deleteInstanceDir" to ensure that all data associated with core is also removed
+
+* How can I change the /browse UI?
+
+ The primary templates are under example/files/conf/velocity. **In order to edit those files in place (without having to
+ re-create or patch a core/collection with an updated configuration)**, Solr can be started with a special system property
+ set to the _absolute_ path to the conf/velocity directory, like this:
+
+ bin/solr start -Dvelocity.template.base.dir=</full/path/to>/example/files/conf/velocity/
+
+ If you want to adjust the browse templates for an existing collection, edit the core’s configuration
+ under server/solr/files/conf/velocity.
+
+
+=======
+
+* Provenance of free images used in this example:
+ - Globe icon: visualpharm.com
+ - Flag icons: freeflagicons.com
diff --git a/solr-8.1.1/example/files/browse-resources/velocity/resources.properties b/solr-8.1.1/example/files/browse-resources/velocity/resources.properties
new file mode 100644
index 000000000..4cc15b2ee
--- /dev/null
+++ b/solr-8.1.1/example/files/browse-resources/velocity/resources.properties
@@ -0,0 +1,82 @@
+# Title: "<Solr logo> Powered File Search"
+powered_file_search=Powered File Search
+
+# Search box and results
+find=Find
+submit=Submit
+page_of=Page <span class="page-num">{0}</span> of <span class="page-count">{1}</span>
+previous=previous
+next=next
+results_found_in=results found in {0}ms
+results_found=results found
+
+# Facets
+facet.top_phrases=Top Phrases
+facet.language=Language
+
+# Type labels
+type.all=All Types
+type.doc.label=Document
+type.html.label=HTML
+type.pdf.label=PDF
+type.presentation.label=Presentation
+type.spreadsheet.label=Spreadsheet
+type.text.label=text
+type.image.label=image
+type.unknown=unknown
+
+# Language code mappings
+# - from https://code.google.com/p/language-detection/wiki/LanguageList
+language.af=Afrikaans
+language.ar=Arabic
+language.bg=Bulgarian
+language.bn=Bengali
+language.cs=Czech
+language.da=Danish
+language.de=German
+language.el=Greek
+language.en=English
+language.es=Spanish
+language.et=Estonian
+language.fa=Persian
+language.fi=Finnish
+language.fr=French
+language.gu=Gujarati
+language.he=Hebrew
+language.hi=Hindi
+language.hr=Croatian
+language.hu=Hungarian
+language.id=Indonesian
+language.it=Italian
+language.ja=Japanese
+language.kn=Kannada
+language.ko=Korean
+language.lt=Lithuanian
+language.lv=Latvian
+language.mk=Macedonian
+language.ml=Malayalam
+language.mr=Marathi
+language.ne=Nepali
+language.nl=Dutch
+language.no=Norwegian
+language.pa=Punjabi
+language.pl=Polish
+language.pt=Portuguese
+language.ro=Romanian
+language.ru=Russian
+language.sk=Slovak
+language.sl=Slovene
+language.so=Somali
+language.sq=Albanian
+language.sv=Swedish
+language.sw=Swahili
+language.ta=Tamil
+language.te=Telugu
+language.th=Thai
+language.tl=Tagalog
+language.tr=Turkish
+language.uk=Ukrainian
+language.ur=Urdu
+language.vi=Vietnamese
+language.zh-cn=Simplified Chinese
+language.zh-tw=Traditional Chinese
diff --git a/solr-8.1.1/example/files/browse-resources/velocity/resources_de_DE.properties b/solr-8.1.1/example/files/browse-resources/velocity/resources_de_DE.properties
new file mode 100644
index 000000000..1837bf5ce
--- /dev/null
+++ b/solr-8.1.1/example/files/browse-resources/velocity/resources_de_DE.properties
@@ -0,0 +1,18 @@
+find=Durchsuchen
+page_of=Page <span class="page-num">{0}</span> von <span class="page-count">{1}</span>
+previous=vorherige Seite
+next=n\u00e4chste Seite
+results_found_in=Ergebnisse in {0}ms gefunden
+results_found=Ergebnisse gefunden
+powered_file_search= betriebene Dateisuche
+type.text.label=Text
+type.pdf.label=PDF
+type.html.label=HTML
+type.presentation.label=Pr\u00e4sentation
+type.image.label=Bild
+type.doc.label=Dokument
+type.spreadsheet.label=Kalkulationstabelle
+type.unknown=unbekannt
+type.all=alle Arten
+facet.top_phrases=Schl\u00fcssels\u00e4tze
+submit=einreichen
diff --git a/solr-8.1.1/example/files/browse-resources/velocity/resources_fr_FR.properties b/solr-8.1.1/example/files/browse-resources/velocity/resources_fr_FR.properties
new file mode 100644
index 000000000..5b62757b7
--- /dev/null
+++ b/solr-8.1.1/example/files/browse-resources/velocity/resources_fr_FR.properties
@@ -0,0 +1,20 @@
+find=Recherche
+page_of=Page <span class="page-num">{0}</span> de <span class="page-count">{1}</span>
+previous=pr\u00e9c\u00e9dent
+next=suivant
+results_found_in=resultas ficher en {0}ms
+results_found=resultas ficher
+powered_file_search=Recherches de Fichiers
+type.text.label=Texte
+type.pdf.label=PDF
+type.html.label=HTML
+type.image.label=Image
+type.presentation.label=Pr\u00e9sentation
+type.doc.label=Documents
+type.spreadsheet.label=Tableur
+type.unknown=Inconnu
+type.all=Tous les Types
+facet.top_phrases=Phrases Cl\u00e9s
+submit=Recherche
+
+
diff --git a/solr-8.1.1/example/files/conf/currency.xml b/solr-8.1.1/example/files/conf/currency.xml
new file mode 100644
index 000000000..3a9c58afe
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/currency.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example exchange rates file for CurrencyField type named "currency" in example schema -->
+
+<currencyConfig version="1.0">
+ <rates>
+ <!-- Updated from http://www.exchangerate.com/ at 2011-09-27 -->
+ <rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" />
+ <rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" />
+ <rate from="USD" to="EUR" rate="0.743676" comment="European Euro" />
+ <rate from="USD" to="BRL" rate="1.881093" comment="BRAZIL Real" />
+ <rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" />
+ <rate from="USD" to="CLP" rate="519.0996" comment="CHILE Peso" />
+ <rate from="USD" to="CNY" rate="6.387310" comment="CHINA Yuan" />
+ <rate from="USD" to="CZK" rate="18.47134" comment="CZECH REP. Koruna" />
+ <rate from="USD" to="DKK" rate="5.515436" comment="DENMARK Krone" />
+ <rate from="USD" to="HKD" rate="7.801922" comment="HONG KONG Dollar" />
+ <rate from="USD" to="HUF" rate="215.6169" comment="HUNGARY Forint" />
+ <rate from="USD" to="ISK" rate="118.1280" comment="ICELAND Krona" />
+ <rate from="USD" to="INR" rate="49.49088" comment="INDIA Rupee" />
+ <rate from="USD" to="XDR" rate="0.641358" comment="INTNL MON. FUND SDR" />
+ <rate from="USD" to="ILS" rate="3.709739" comment="ISRAEL Sheqel" />
+ <rate from="USD" to="JPY" rate="76.32419" comment="JAPAN Yen" />
+ <rate from="USD" to="KRW" rate="1169.173" comment="KOREA (SOUTH) Won" />
+ <rate from="USD" to="KWD" rate="0.275142" comment="KUWAIT Dinar" />
+ <rate from="USD" to="MXN" rate="13.85895" comment="MEXICO Peso" />
+ <rate from="USD" to="NZD" rate="1.285159" comment="NEW ZEALAND Dollar" />
+ <rate from="USD" to="NOK" rate="5.859035" comment="NORWAY Krone" />
+ <rate from="USD" to="PKR" rate="87.57007" comment="PAKISTAN Rupee" />
+ <rate from="USD" to="PEN" rate="2.730683" comment="PERU Sol" />
+ <rate from="USD" to="PHP" rate="43.62039" comment="PHILIPPINES Peso" />
+ <rate from="USD" to="PLN" rate="3.310139" comment="POLAND Zloty" />
+ <rate from="USD" to="RON" rate="3.100932" comment="ROMANIA Leu" />
+ <rate from="USD" to="RUB" rate="32.14663" comment="RUSSIA Ruble" />
+ <rate from="USD" to="SAR" rate="3.750465" comment="SAUDI ARABIA Riyal" />
+ <rate from="USD" to="SGD" rate="1.299352" comment="SINGAPORE Dollar" />
+ <rate from="USD" to="ZAR" rate="8.329761" comment="SOUTH AFRICA Rand" />
+ <rate from="USD" to="SEK" rate="6.883442" comment="SWEDEN Krona" />
+ <rate from="USD" to="CHF" rate="0.906035" comment="SWITZERLAND Franc" />
+ <rate from="USD" to="TWD" rate="30.40283" comment="TAIWAN Dollar" />
+ <rate from="USD" to="THB" rate="30.89487" comment="THAILAND Baht" />
+ <rate from="USD" to="AED" rate="3.672955" comment="U.A.E. Dirham" />
+ <rate from="USD" to="UAH" rate="7.988582" comment="UKRAINE Hryvnia" />
+ <rate from="USD" to="GBP" rate="0.647910" comment="UNITED KINGDOM Pound" />
+
+ <!-- Cross-rates for some common currencies -->
+ <rate from="EUR" to="GBP" rate="0.869914" />
+ <rate from="EUR" to="NOK" rate="7.800095" />
+ <rate from="GBP" to="NOK" rate="8.966508" />
+ </rates>
+</currencyConfig>
diff --git a/solr-8.1.1/example/files/conf/elevate.xml b/solr-8.1.1/example/files/conf/elevate.xml
new file mode 100644
index 000000000..2c09ebed6
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/elevate.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+ loaded once at startup. If it is found in Solr's data
+ directory, it will be re-loaded every commit.
+
+ See http://wiki.apache.org/solr/QueryElevationComponent for more info
+
+-->
+<elevate>
+ <!-- Query elevation examples
+ <query text="foo bar">
+ <doc id="1" />
+ <doc id="2" />
+ <doc id="3" />
+ </query>
+
+for use with techproducts example
+
+ <query text="ipod">
+ <doc id="MA147LL/A" /> put the actual ipod at the top
+ <doc id="IW-02" exclude="true" /> exclude this cable
+ </query>
+-->
+
+</elevate>
diff --git a/solr-8.1.1/example/files/conf/email_url_types.txt b/solr-8.1.1/example/files/conf/email_url_types.txt
new file mode 100644
index 000000000..622b193e0
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/email_url_types.txt
@@ -0,0 +1,2 @@
+<URL>
+<EMAIL>
diff --git a/solr-8.1.1/example/files/conf/lang/contractions_ca.txt b/solr-8.1.1/example/files/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/example/files/conf/lang/contractions_fr.txt b/solr-8.1.1/example/files/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/example/files/conf/lang/contractions_ga.txt b/solr-8.1.1/example/files/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/example/files/conf/lang/contractions_it.txt b/solr-8.1.1/example/files/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/example/files/conf/lang/hyphenations_ga.txt b/solr-8.1.1/example/files/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/example/files/conf/lang/stemdict_nl.txt b/solr-8.1.1/example/files/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/example/files/conf/lang/stoptags_ja.txt b/solr-8.1.1/example/files/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ar.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_bg.txt b/solr-8.1.1/example/files/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ca.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_cz.txt b/solr-8.1.1/example/files/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_da.txt b/solr-8.1.1/example/files/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_de.txt b/solr-8.1.1/example/files/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_el.txt b/solr-8.1.1/example/files/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_en.txt b/solr-8.1.1/example/files/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_es.txt b/solr-8.1.1/example/files/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_eu.txt b/solr-8.1.1/example/files/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_fa.txt b/solr-8.1.1/example/files/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_fi.txt b/solr-8.1.1/example/files/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_fr.txt b/solr-8.1.1/example/files/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ga.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_gl.txt b/solr-8.1.1/example/files/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_hi.txt b/solr-8.1.1/example/files/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_hu.txt b/solr-8.1.1/example/files/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_hy.txt b/solr-8.1.1/example/files/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_id.txt b/solr-8.1.1/example/files/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_it.txt b/solr-8.1.1/example/files/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ja.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_lv.txt b/solr-8.1.1/example/files/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_nl.txt b/solr-8.1.1/example/files/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_no.txt b/solr-8.1.1/example/files/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_pt.txt b/solr-8.1.1/example/files/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ro.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_ru.txt b/solr-8.1.1/example/files/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_sv.txt b/solr-8.1.1/example/files/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_th.txt b/solr-8.1.1/example/files/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/example/files/conf/lang/stopwords_tr.txt b/solr-8.1.1/example/files/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/example/files/conf/lang/userdict_ja.txt b/solr-8.1.1/example/files/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/example/files/conf/managed-schema b/solr-8.1.1/example/files/conf/managed-schema
new file mode 100644
index 000000000..c022331ba
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/managed-schema
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Solr managed schema - automatically generated - DO NOT EDIT -->
+<schema name="example-data-driven-schema" version="1.6">
+ <uniqueKey>id</uniqueKey>
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="binary" class="solr.BinaryField"/>
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+ <fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>
+ <fieldType name="currency" class="solr.CurrencyFieldType" amountLongSuffix="_l_ns" codeStrSuffix="_s_ns" defaultCurrency="USD" currencyConfig="currency.xml" />
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="ignored" class="solr.StrField" indexed="false" stored="false" multiValued="true"/>
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" geo="true" maxDistErr="0.001" distErrPct="0.025" distanceUnits="kilometers"/>
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="phonetic_en" class="solr.TextField" indexed="true" stored="false">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="point" class="solr.PointType" subFieldSuffix="_d" dimension="2"/>
+ <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
+ <fieldType name="strings" class="solr.StrField" sortMissingLast="true" multiValued="true"/>
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_ar.txt" ignoreCase="true"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_bg.txt" ignoreCase="true"/>
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ElisionFilterFactory" articles="lang/contractions_ca.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_ca.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_cz.txt" ignoreCase="true"/>
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_da.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_de.txt" ignoreCase="true"/>
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_el.txt" ignoreCase="false"/>
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_en_splitting" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="0" generateWordParts="0" catenateAll="0" catenateWords="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="0" generateWordParts="0" catenateAll="0" catenateWords="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_es.txt" ignoreCase="true"/>
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_eu.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_fa.txt" ignoreCase="true"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_fi.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ElisionFilterFactory" articles="lang/contractions_fr.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_fr.txt" ignoreCase="true"/>
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ElisionFilterFactory" articles="lang/contractions_ga.txt" ignoreCase="true"/>
+ <filter class="solr.StopFilterFactory" words="lang/hyphenations_ga.txt" ignoreCase="true"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_ga.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" maxPosQuestion="2" maxFractionAsterisk="0.33" maxPosAsterisk="3" withOriginal="true"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_gl.txt" ignoreCase="true"/>
+ <filter class="solr.GalicianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_hi.txt" ignoreCase="true"/>
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_hu.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_hy.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_id.txt" ignoreCase="true"/>
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ElisionFilterFactory" articles="lang/contractions_it.txt" ignoreCase="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_it.txt" ignoreCase="true"/>
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ja" class="solr.TextField" autoGeneratePhraseQueries="false" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/>
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_ja.txt" ignoreCase="true"/>
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_lv.txt" ignoreCase="true"/>
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_nl.txt" ignoreCase="true"/>
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_no.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_pt.txt" ignoreCase="true"/>
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_ro.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_ru.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_sv.txt" ignoreCase="true"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_th.txt" ignoreCase="true"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" words="lang/stopwords_tr.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="text_email_url" class="solr.TextField">
+ <analyzer>
+ <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
+ <filter class="solr.TypeTokenFilterFactory" types="email_url_types.txt" useWhitelist="true"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="text_shingles" class="solr.TextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="false" /> -->
+ <filter class="solr.LengthFilterFactory" min="2" max="18"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.PatternReplaceFilterFactory" pattern="(^[^a-z]+$)" replacement="" replace="all"/>
+ <filter class="solr.ShingleFilterFactory" minShingleSize="3" maxShingleSize="3"
+ outputUnigrams="false" outputUnigramsIfNoShingles="false" tokenSeparator=" " fillerToken="*"/>
+ <filter class="solr.PatternReplaceFilterFactory" pattern="(.*[\*].*)" replacement=""/>
+ <filter class="solr.TrimFilterFactory"/>
+
+ <!-- PRFF could have removed everything down to an empty string, remove if so -->
+ <filter class="solr.LengthFilterFactory" min="1" max="100"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
+ <field name="content_type" type="string" indexed="true" stored="true"/>
+ <field name="doc_type" type="string" indexed="true" stored="true"/>
+ <field name="title" type="string" indexed="true" stored="true"/>
+ <field name="language" type="string" indexed="true" stored="true"/>
+ <field name="content" type="text_general" multiValued="false" indexed="true" stored="true"/>
+ <field name="text_shingles" type="text_shingles" indexed="true" stored="false"/>
+ <field name="_text_" type="text_general" multiValued="true" indexed="true" stored="false"/>
+
+ <dynamicField name="*_txt_en_split_tight" type="text_en_splitting_tight" indexed="true" stored="true"/>
+ <dynamicField name="*_descendent_path" type="descendent_path" indexed="true" stored="true"/>
+ <dynamicField name="*_ancestor_path" type="ancestor_path" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_en_split" type="text_en_splitting" indexed="true" stored="true"/>
+ <dynamicField name="*_coordinate" type="pdouble" indexed="true" stored="false"/>
+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+ <dynamicField name="*_txt_rev" type="text_general_rev" indexed="true" stored="true"/>
+ <dynamicField name="*_phon_en" type="phonetic_en" indexed="true" stored="true"/>
+ <dynamicField name="*_s_lower" type="lowercase" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_cjk" type="text_cjk" indexed="true" stored="true"/>
+ <dynamicField name="random_*" type="random"/>
+ <dynamicField name="*_txt_en" type="text_en" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ar" type="text_ar" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_bg" type="text_bg" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ca" type="text_ca" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_cz" type="text_cz" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_da" type="text_da" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_de" type="text_de" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_el" type="text_el" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_es" type="text_es" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_eu" type="text_eu" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_fa" type="text_fa" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_fi" type="text_fi" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_fr" type="text_fr" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ga" type="text_ga" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_gl" type="text_gl" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_hi" type="text_hi" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_hu" type="text_hu" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_hy" type="text_hy" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_id" type="text_id" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_it" type="text_it" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ja" type="text_ja" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_lv" type="text_lv" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_nl" type="text_nl" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_no" type="text_no" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_pt" type="text_pt" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ro" type="text_ro" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_ru" type="text_ru" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_sv" type="text_sv" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_th" type="text_th" indexed="true" stored="true"/>
+ <dynamicField name="*_txt_tr" type="text_tr" indexed="true" stored="true"/>
+ <dynamicField name="*_point" type="point" indexed="true" stored="true"/>
+ <dynamicField name="*_srpt" type="location_rpt" indexed="true" stored="true"/>
+ <dynamicField name="attr_*" type="text_general" multiValued="true" indexed="true" stored="true"/>
+ <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
+ <dynamicField name="*_s_ns" type="string" indexed="true" stored="false"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" multiValued="true" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pints" indexed="true" stored="true"/>
+ <dynamicField name="*_ss" type="strings" indexed="true" stored="true"/>
+ <dynamicField name="*_ls" type="plongs" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloats" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdoubles" indexed="true" stored="true"/>
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_ws" type="text_ws" indexed="true" stored="true"/>
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+ <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
+
+ <copyField source="content" dest="text_shingles"/>
+ <copyField source="*" dest="_text_"/>
+
+
+</schema>
diff --git a/solr-8.1.1/example/files/conf/params.json b/solr-8.1.1/example/files/conf/params.json
new file mode 100644
index 000000000..22aadccdd
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/params.json
@@ -0,0 +1,34 @@
+{"params":{
+ "query":{
+ "defType":"edismax",
+ "q.alt":"*:*",
+ "rows":"10",
+ "fl":"*,score",
+ "":{"v":0}},
+ "facets":{
+ "facet":"on",
+ "facet.mincount":"1",
+ "f.doc_type.facet.mincount":"0",
+ "facet.field":["text_shingles","{!ex=type}doc_type", "language"],
+ "f.text_shingles.facet.limit":10,
+ "facet.query":"{!ex=type key=all_types}*:*",
+ "f.doc_type.facet.missing":true,
+ "":{"v":0}},
+ "browse":{
+ "type_fq":"{!field f=doc_type v=$type}",
+ "hl":"on",
+ "hl.fl":"content",
+ "v.locale":"${locale}",
+ "debug":"true",
+ "hl.simple.pre":"HL_START",
+ "hl.simple.post":"HL_END",
+ "echoParams": "explicit",
+ "_appends_": {
+ "fq": "{!switch v=$type tag=type case='*:*' case.all='*:*' case.unknown='-doc_type:[* TO *]' default=$type_fq}"
+ },
+ "":{"v":0}},
+ "velocity":{
+ "wt":"velocity",
+ "v.template":"browse",
+ "v.layout":"layout",
+ "":{"v":0}}}}
diff --git a/solr-8.1.1/example/files/conf/protwords.txt b/solr-8.1.1/example/files/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/example/files/conf/solrconfig.xml b/solr-8.1.1/example/files/conf/solrconfig.xml
new file mode 100644
index 000000000..77dc8f0a8
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/solrconfig.xml
@@ -0,0 +1,1378 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <!-- browse-resources must come before solr-velocity JAR in order to override localized resources -->
+ <lib path="${solr.install.dir:../../../..}/example/files/browse-resources"/>
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="solr.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting The value to true will instruct the underlying Lucene
+ IndexWriter to write its debugging info the specified file
+ -->
+ <!-- <infoStream file="INFOSTREAM.txt">false</infoStream> -->
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory. -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>15000</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+ <!--
+ <autoSoftCommit>
+ <maxTime>1000</maxTime>
+ </autoSoftCommit>
+ -->
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+ <!-- Max Boolean Clauses
+
+ Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded.
+
+ ** WARNING **
+
+ This option actually modifies a global Lucene property that
+ will affect all SolrCores. If multiple solrconfig.xml files
+ disagree on this property, the value at any given moment will
+ be based on the last SolrCore to be initialized.
+
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ Additional supported parameter by LRUCache:
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ -->
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <!-- Default search field
+ <str name="df">text</str>
+ -->
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ </lst>
+ </requestHandler>
+
+
+ <!--These useParams values are available in params.json-->
+ <requestHandler name="/browse" class="solr.SearchHandler" useParams="query,facets,velocity,browse"/>
+
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">_text_</str>
+ </lst>
+ </initParams>
+
+ <initParams path="/update/**">
+ <lst name="defaults">
+ <str name="update.chain">files-update-processor</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="xpath">/xhtml:html/xhtml:body/descendant:node()</str>
+ <str name="capture">content</str>
+ <str name="fmap.meta">attr_meta_</str>
+ <str name="uprefix">attr_</str>
+ <str name="lowernames">true</str>
+ </lst>
+ </requestHandler>
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">text</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+
+ <!-- a spellchecker that uses a different distance measure -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">jarowinkler</str>
+ <str name="field">spell</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="distanceMeasure">
+ org.apache.lucene.search.spell.JaroWinklerDistance
+ </str>
+ </lst>
+ -->
+
+ <!-- a spellchecker that use an alternate comparator
+
+ comparatorClass be one of:
+ 1. score (default)
+ 2. freq (Frequency first, then score)
+ 3. A fully qualified class name
+ -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">freq</str>
+ <str name="field">lowerfilt</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="comparatorClass">freq</str>
+ -->
+
+ <!-- A spellchecker that reads the list of words from a file -->
+ <!--
+ <lst name="spellchecker">
+ <str name="classname">solr.FileBasedSpellChecker</str>
+ <str name="name">file</str>
+ <str name="sourceLocation">spellings.txt</str>
+ <str name="characterEncoding">UTF-8</str>
+ <str name="spellcheckIndexDir">spellcheckerFile</str>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck.dictionary">wordbreak</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Clustering Component. (Omitted here. See the default Solr example for a typical configuration.) -->
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ <str name="config-file">elevate.xml</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+
+ <!-- Add unknown fields to the schema
+
+ An example field type guessing update processor that will
+ attempt to parse string-typed field values as Booleans, Longs,
+ Doubles, or Dates, and then add schema fields with the guessed
+ field types.
+
+ This requires that the schema is both managed and mutable, by
+ declaring schemaFactory as ManagedIndexSchemaFactory, with
+ mutable specified as true.
+
+ See http://wiki.apache.org/solr/GuessingFieldTypes
+ -->
+ <updateRequestProcessorChain name="files-update-processor">
+ <!-- UUIDUpdateProcessorFactory will generate an id if none is present in the incoming document -->
+ <processor class="solr.UUIDUpdateProcessorFactory" />
+ <processor class="solr.RemoveBlankFieldUpdateProcessorFactory"/>
+ <processor class="solr.FieldNameMutatingUpdateProcessorFactory">
+ <str name="pattern">[^\w-\.]</str>
+ <str name="replacement">_</str>
+ </processor>
+ <processor class="solr.ParseBooleanFieldUpdateProcessorFactory"/>
+ <processor class="solr.ParseLongFieldUpdateProcessorFactory"/>
+ <processor class="solr.ParseDoubleFieldUpdateProcessorFactory"/>
+ <processor class="solr.ParseDateFieldUpdateProcessorFactory">
+ <arr name="format">
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
+ <str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
+ <str>EEEE, dd-MMM-yy HH:mm:ss z</str>
+ <str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
+ </arr>
+ </processor>
+ <processor class="solr.AddSchemaFieldsUpdateProcessorFactory">
+ <str name="defaultFieldType">strings</str>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Boolean</str>
+ <str name="fieldType">booleans</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.util.Date</str>
+ <str name="fieldType">pdates</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Long</str>
+ <str name="valueClass">java.lang.Integer</str>
+ <str name="fieldType">plongs</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Number</str>
+ <str name="fieldType">pdoubles</str>
+ </lst>
+ </processor>
+
+
+ <processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory">
+ <lst name="defaults">
+ <str name="langid.fl">content</str>
+ <str name="langid.langField">language</str>
+ </lst>
+ </processor>
+
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <!--<lst name="params">-->
+ <!--<str name="config_param">example config parameter</str>-->
+ <!--</lst>-->
+ </processor>
+
+ <processor class="solr.LogUpdateProcessorFactory"/>
+ <processor class="solr.DistributedUpdateProcessorFactory"/>
+ <processor class="solr.RunUpdateProcessorFactory"/>
+ </updateRequestProcessorChain>
+
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+
+</config>
diff --git a/solr-8.1.1/example/files/conf/stopwords.txt b/solr-8.1.1/example/files/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/example/files/conf/synonyms.txt b/solr-8.1.1/example/files/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/example/files/conf/update-script.js b/solr-8.1.1/example/files/conf/update-script.js
new file mode 100644
index 000000000..2589968b5
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/update-script.js
@@ -0,0 +1,115 @@
+function get_class(name) {
+ var clazz;
+ try {
+ // Java8 Nashorn
+ clazz = eval("Java.type(name).class");
+ } catch(e) {
+ // Java7 Rhino
+ clazz = eval("Packages."+name);
+ }
+
+ return clazz;
+}
+
+function processAdd(cmd) {
+
+ doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
+ var id = doc.getFieldValue("id");
+ logger.info("update-script#processAdd: id=" + id);
+
+ // The idea here is to use the file's content_type value to
+ // simplify into user-friendly values, such that types of, say, image/jpeg and image/tiff
+ // are in an "Images" facet
+
+ var ct = doc.getFieldValue("content_type");
+ if (ct) {
+ // strip off semicolon onward
+ var semicolon_index = ct.indexOf(';');
+ if (semicolon_index != -1) {
+ ct = ct.substring(0,semicolon_index);
+ }
+ // and split type/subtype
+ var ct_type = ct.substring(0,ct.indexOf('/'));
+ var ct_subtype = ct.substring(ct.indexOf('/')+1);
+
+ var doc_type;
+ switch(true) {
+ case /^application\/rtf/.test(ct) || /wordprocessing/.test(ct):
+ doc_type = "doc";
+ break;
+
+ case /html/.test(ct):
+ doc_type = "html";
+ break;
+
+ case /^image\/.*/.test(ct):
+ doc_type = "image";
+ break;
+
+ case /presentation|powerpoint/.test(ct):
+ doc_type = "presentation";
+ break;
+
+ case /spreadsheet|excel/.test(ct):
+ doc_type = "spreadsheet";
+ break;
+
+ case /^application\/pdf/.test(ct):
+ doc_type = "pdf";
+ break;
+
+ case /^text\/plain/.test(ct):
+ doc_type = "text"
+ break;
+
+ default:
+ break;
+ }
+
+ // TODO: error handling needed? What if there is no slash?
+ if(doc_type) { doc.setField("doc_type", doc_type); }
+ doc.setField("content_type_type_s", ct_type);
+ doc.setField("content_type_subtype_s", ct_subtype);
+ }
+
+ var content = doc.getFieldValue("content");
+ if (!content) {
+ return; //No content found, so we are done here
+ }
+
+ var analyzer =
+ req.getCore().getLatestSchema()
+ .getFieldTypeByName("text_email_url")
+ .getIndexAnalyzer();
+
+ var token_stream =
+ analyzer.tokenStream("content", content);
+ var term_att = token_stream.getAttribute(get_class("org.apache.lucene.analysis.tokenattributes.CharTermAttribute"));
+ var type_att = token_stream.getAttribute(get_class("org.apache.lucene.analysis.tokenattributes.TypeAttribute"));
+ token_stream.reset();
+ while (token_stream.incrementToken()) {
+ doc.addField(type_att.type().replace(/\<|\>/g,'').toLowerCase()+"_ss", term_att.toString());
+ }
+ token_stream.end();
+ token_stream.close();
+}
+
+function processDelete(cmd) {
+ // no-op
+}
+
+function processMergeIndexes(cmd) {
+ // no-op
+}
+
+function processCommit(cmd) {
+ // no-op
+}
+
+function processRollback(cmd) {
+ // no-op
+}
+
+function finish() {
+ // no-op
+}
diff --git a/solr-8.1.1/example/files/conf/velocity/browse.vm b/solr-8.1.1/example/files/conf/velocity/browse.vm
new file mode 100644
index 000000000..535a7713b
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/browse.vm
@@ -0,0 +1,32 @@
+<div id="query-box">
+ <form id="query-form" action="#{url_for_home}" method="GET">
+ $resource.find:
+ <input type="text" id="q" name="q" style="width: 50%" value="$!esc.html($request.params.get('q'))"/>
+ <input type="submit" value="$resource.submit"/>
+ <div id="debug_query" class="debug">
+ <span id="parsed_query">$esc.html($response.response.debug.parsedquery)</span>
+ </div>
+
+ <input type="hidden" name="type" value="#current_type"/>
+ #if("#current_locale"!="")<input type="hidden" value="locale" value="#current_locale"/>#end
+ #foreach($fq in $response.responseHeader.params.getAll("fq"))
+ <input type="hidden" name="fq" id="allFQs" value="$esc.html($fq)"/>
+ #end
+ </form>
+
+ <div id="constraints">
+ #foreach($fq in $response.responseHeader.params.getAll("fq"))
+ #set($previous_fq_count=$velocityCount - 1)
+ #if($fq != '')
+ &gt; $fq<a href="#url_for_filters($response.responseHeader.params.fq.subList(0,$previous_fq_count))">x</a>
+ #end
+ #end
+ </div>
+
+</div>
+
+
+<div id="browse_results">
+ #parse("results.vm")
+</div>
+
diff --git a/solr-8.1.1/example/files/conf/velocity/dropit.js b/solr-8.1.1/example/files/conf/velocity/dropit.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/dropit.js
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm b/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm
new file mode 100644
index 000000000..ff471674c
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm
@@ -0,0 +1,2 @@
+## intentionally empty
+
diff --git a/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm b/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm
new file mode 100644
index 000000000..e8191779a
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm
@@ -0,0 +1,12 @@
+<div id="facet_$field.name">
+ <span class="facet-field">$resource.facet.top_phrases</span><br/>
+
+ <ul id="tagcloud">
+ #foreach($facet in $sort.sort($field.values,"name"))
+ <li data-weight="$math.mul($facet.count,1)">
+ <a href="#url_for_facet_filter($field.name, $facet.name)">$facet.name</a>
+ </li>
+
+ #end
+ </ul>
+</div>
diff --git a/solr-8.1.1/example/files/conf/velocity/facets.vm b/solr-8.1.1/example/files/conf/velocity/facets.vm
new file mode 100644
index 000000000..bb27b5cea
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/facets.vm
@@ -0,0 +1,24 @@
+#if($response.facetFields.size() > 0)
+ #foreach($field in $response.facetFields)
+ #if($field.values.size() > 0)
+ #if($engine.resourceExists("facet_${field.name}.vm"))
+ #parse("facet_${field.name}.vm")
+ #else
+ <div id="facet_$field.name" class="facet_field">
+ <span class="facet-field">#label("facet.${field.name}",$field.name)</span><br/>
+
+ <ul>
+ #foreach($facet in $field.values)
+ <li><a href="#url_for_facet_filter($field.name, $facet.name)">#if($facet.name!=$null)#label("${field.name}.${facet.name}","${field.name}.${facet.name}")#else<em>missing</em>#end</a> ($facet.count)</li>
+ #end
+ </ul>
+ </div>
+ #end
+ #end
+ #end ## end if field.values > 0
+#end ## end if facetFields > 0
+
+
+
+
+
diff --git a/solr-8.1.1/example/files/conf/velocity/footer.vm b/solr-8.1.1/example/files/conf/velocity/footer.vm
new file mode 100644
index 000000000..e33a7827d
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/footer.vm
@@ -0,0 +1,29 @@
+<hr/>
+
+<div>
+
+ <div id="admin"><a href="#url_root/index.html#/#{core_name}">Solr Admin</a></div>
+
+ <a href="#" onclick='jQuery(".debug").toggle(); return false;'>toggle debug mode</a>
+ <a href="#url_for_lens&wt=xml#if($debug)&debug=true#end">XML results</a> ## TODO: Add links for other formats, maybe dynamically?
+
+</div>
+
+<div>
+ <a href="http://lucene.apache.org/solr">Solr Home Page</a>
+</div>
+
+
+<div class="debug">
+ <hr/>
+ Request:
+ <pre>
+ $esc.html($request)
+ </pre>
+
+ <hr/>
+ Debug:
+ <pre>
+ $esc.html($response.response.debug)
+ </pre>
+</div>
diff --git a/solr-8.1.1/example/files/conf/velocity/head.vm b/solr-8.1.1/example/files/conf/velocity/head.vm
new file mode 100644
index 000000000..3c98747ac
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/head.vm
@@ -0,0 +1,290 @@
+<title>Solr browse: #core_name</title>
+
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+
+<link rel="icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/>
+<link rel="shortcut icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/>
+
+<script type="text/javascript" src="#{url_root}/libs/jquery-1.7.2.min.js"></script>
+<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/jquery.tx3-tag-cloud.js&contentType=text/javascript"></script>
+<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/dropit.js&contentType=text/javascript"></script>
+<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/jquery.autocomplete.js&contentType=text/javascript"></script>
+
+<script type="text/javascript">
+ $(document).ready(function() {
+
+ $("#tagcloud").tx3TagCloud({
+ multiplier: 1
+ });
+
+ $('.menu').dropit();
+
+ $( document ).ajaxComplete(function() {
+ $("#tagcloud").tx3TagCloud({
+ multiplier: 5
+ });
+ });
+
+ $('\#q').keyup(function() {
+ $('#browse_results').load('#{url_for_home}?#lensNoQ&v.layout.enabled=false&v.template=results&q='+encodeURI($('\#q').val()));
+
+ $("\#q").autocomplete('#{url_for_solr}/suggest', {
+ extraParams: {
+ 'suggest.q': function() { return $("\#q").val();},
+ 'suggest.build': 'true',
+ 'wt': 'json',
+ }
+ }).keydown(function(e) {
+ if (e.keyCode === 13){
+ $("#query-form").trigger('submit');
+ }
+ });
+ });
+
+ });
+</script>
+
+<style>
+
+ html {
+ background-color: #F0F8FF;
+ }
+
+ body {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 10pt;
+ }
+
+ #header {
+ width: 100%;
+ font-size: 20pt;
+ }
+
+ #header2 {
+ margin-left:1200px;
+ }
+
+ #logo {
+ width: 115px;
+ margin: 0px 0px 0px 0px;
+ border-style: none;
+ }
+
+ a {
+ color: #305CB3;
+ }
+
+ a.hidden {
+ display:none;
+ }
+
+ em {
+ color: #FF833D;
+ }
+
+ .error {
+ color: white;
+ background-color: red;
+ left: 210px;
+ width:80%;
+ position: relative;
+ }
+
+ .debug { display: none; font-size: 10pt}
+ #debug_query {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 10pt;
+ font-weight: bold;
+ }
+ #parsed_query {
+ font-family: Courier, Courier New, monospaced;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ #admin {
+ text-align: right;
+ vertical-align: top;
+ }
+
+ #query-form {
+ width: 90%;
+ }
+
+ #query-box {
+ padding: 5px;
+ margin: 5px;
+ font-weight: normal;
+ font-size: 24px;
+ letter-spacing: 0.08em;
+ }
+ #constraints {
+ margin: 10px;
+ }
+
+ #tabs { }
+ #tabs li { display: inline; font-size: 10px;}
+ #tabs li a { border-radius: 20px; border: 2px solid #C1CDCD; padding: 10px;color: #42454a; background-color: #dedbde;}
+ #tabs li a:hover { background-color: #f1f0ee; }
+ #tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 5px }
+ #tabs li a.no_results { color: #000; background-color: #838B8B; font-style: italic; padding: 5px; pointer-events: none;
+ cursor: default; text-decoration: none;}
+
+ .pagination {
+ width: 305px;
+ border-radius: 25px;
+ border: 2px solid #C1CDCD;
+ padding: 20px;
+ padding-left: 10%;
+ background: #eee;
+ margin-left: 190px;
+ margin-top : 42px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ text-align:left;
+ }
+
+ #results_list { width: 70%; }
+ .result-document {
+ border-radius: 25px;
+ border: 2px solid #C1CDCD;
+ padding: 10px;
+// width: 800px;
+// height: 120px;
+ margin: 5px;
+// margin-left: 60px;
+// margin-right: 210px;
+// margin-bottom: 15px;
+ transition: 1s ease;
+ }
+ .result-document:hover
+ {
+ webkit-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ transform: scale(1.1);
+ transition: 1s ease;
+ }
+ .result-document div {
+ padding: 5px;
+ }
+ .result-title {
+ width:60%;
+ }
+ .result-body {
+ background: #ddd;
+ }
+ .result-document:nth-child(2n+1) {
+ background-color: #FFFFFD;
+ }
+
+ #facets {
+ margin: 5px;
+ margin-top: 0px;
+ padding: 5px;
+ top: -20px;
+ position: relative;
+ float: right;
+ width: 25%;
+ }
+ .facet-field {
+ font-weight: bold;
+ }
+ #facets ul {
+ list-style: none;
+ margin: 0;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding-left: 10px;
+ }
+ #facets ul li {
+ color: #999;
+ padding: 2px;
+ }
+
+ div.facet_field {
+ clear: left;
+ }
+
+ ul.tx3-tag-cloud { }
+ ul.tx3-tag-cloud li {
+ display: block;
+ float: left;
+ list-style: none;
+ margin-right: 4px;
+ }
+ ul.tx3-tag-cloud li a {
+ display: block;
+ text-decoration: none;
+ color: #c9c9c9;
+ padding: 3px 10px;
+ }
+ ul.tx3-tag-cloud li a:hover {
+ color: #000000;
+ -webkit-transition: color 250ms linear;
+ -moz-transition: color 250ms linear;
+ -o-transition: color 250ms linear;
+ -ms-transition: color 250ms linear;
+ transition: color 250ms linear;
+ }
+
+ .dropit {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+ .dropit .dropit-trigger { position: relative; }
+ .dropit .dropit-submenu {
+ position: absolute;
+ top: 100%;
+ left: 0; /* dropdown left or right */
+ z-index: 1000;
+ display: none;
+ min-width: 150px;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+ .dropit .dropit-open .dropit-submenu { display: block; }
+
+
+ <!--autocomplete css-->
+ .ac_results {
+ padding: 0px;
+ border: 1px solid black;
+ background-color: white;
+ overflow: hidden;
+ z-index: 99999;
+ }
+
+ .ac_results ul {
+ width: 100%;
+ list-style-position: outside;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+
+ .ac_results li {
+ margin: 0px;
+ padding: 2px 5px;
+ cursor: default;
+ display: block;
+ font: menu;
+ font-size: 12px;
+ line-height: 16px;
+ overflow: hidden;
+ }
+
+ .ac_loading {
+// background: white url('Ëœindicator.gif') right center no-repeat;
+ }
+
+ .ac_odd {
+ background-color: #eee;
+ }
+
+ .ac_over {
+ background-color: #0A246A;
+ color: white;
+ }
+</style>
diff --git a/solr-8.1.1/example/files/conf/velocity/hit.vm b/solr-8.1.1/example/files/conf/velocity/hit.vm
new file mode 100644
index 000000000..2c658cdd9
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/hit.vm
@@ -0,0 +1,77 @@
+
+#set($docId = $doc.getFirstValue($request.schema.uniqueKeyField.name))
+
+## Load Mime-Type List and Mapping
+#parse('mime_type_lists.vm')
+
+## Title
+#if($doc.getFieldValue('title'))
+ #set($title = $esc.html($doc.getFirstValue('title')))
+#else
+ #set($title = "$doc.getFirstValue('id').substring($math.add(1,$doc.getFirstValue('id').lastIndexOf('/')))")
+#end
+
+## Date
+#if($doc.getFieldValue('attr_meta_creation_date'))
+ #set($date = $esc.html($doc.getFirstValue('attr_meta_creation_date')))
+#else
+ #set($date = "No date found")
+#end
+
+
+
+## URL
+#if($doc.getFieldValue('url'))
+ #set($url = $doc.getFieldValue('url'))
+#elseif($doc.getFieldValue('resourcename'))
+ #set($url = "file:///$doc.getFirstValue('resourcename')")
+#else
+ #set($url = "$doc.getFieldValue('id')")
+#end
+
+## Sort out Mime-Type
+#set($ct = $doc.getFirstValue('content_type').split(";").get(0))
+#set($filename = $doc.getFirstValue('resourcename'))
+#set($filetype = false)
+#set($filetype = $mimeExtensionsMap.get($ct))
+#if(!$filetype)
+ #set($filetype = $filename.substring($filename.lastIndexOf(".")).substring(1))
+#end
+#if(!$filetype)
+ #set($filetype = "file")
+#end
+#if(!$supportedMimeTypes.contains($filetype))
+ #set($filetype = "file")
+#end
+
+<div class="result-document">
+ <span class="result-title">
+ <img src="#{url_root}/img/filetypes/${filetype}.png" align="center">
+ <b>$title</b>
+ </span>
+
+ <div>
+ id: $docId </br>
+ </div>
+
+ #set($pad = "")
+ #foreach($v in $response.response.highlighting.get($docId).get("content"))
+ $pad$esc.html($v).replace("HL_START","<em>").replace("HL_END","</em>")
+ #set($pad = " ... ")
+ #end
+
+</div>
+
+<a href="#" class="debug" onclick='jQuery(this).next().toggle(); return false;'>toggle explain</a>
+<pre style="display: none;">
+ $esc.html($response.getExplainMap().get($doc.getFirstValue('id')))
+</pre>
+
+<a href="#" class="debug" onclick='jQuery(this).next().toggle(); return false;'>show all fields</a>
+<pre style="display:none;">
+ #foreach($fieldname in $doc.fieldNames)
+ <span>$fieldname :</span>
+ <span>#foreach($value in $doc.getFieldValues($fieldname))$esc.html($value)#end</span>
+ #end
+</pre>
+
diff --git a/solr-8.1.1/example/files/conf/velocity/img/english_640.png b/solr-8.1.1/example/files/conf/velocity/img/english_640.png
new file mode 100644
index 000000000..81256a1b8
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/img/english_640.png
Binary files differ
diff --git a/solr-8.1.1/example/files/conf/velocity/img/france_640.png b/solr-8.1.1/example/files/conf/velocity/img/france_640.png
new file mode 100644
index 000000000..16d454190
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/img/france_640.png
Binary files differ
diff --git a/solr-8.1.1/example/files/conf/velocity/img/germany_640.png b/solr-8.1.1/example/files/conf/velocity/img/germany_640.png
new file mode 100644
index 000000000..f5d6ae891
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/img/germany_640.png
Binary files differ
diff --git a/solr-8.1.1/example/files/conf/velocity/img/globe_256.png b/solr-8.1.1/example/files/conf/velocity/img/globe_256.png
new file mode 100644
index 000000000..514597b86
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/img/globe_256.png
Binary files differ
diff --git a/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js b/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/example/files/conf/velocity/js/dropit.js b/solr-8.1.1/example/files/conf/velocity/js/dropit.js
new file mode 100644
index 000000000..3094414f0
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/js/dropit.js
@@ -0,0 +1,97 @@
+/*
+ * Dropit v1.1.0
+ * http://dev7studios.com/dropit
+ *
+ * Copyright 2012, Dev7studios
+ * Free to use and abuse under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+;(function($) {
+
+ $.fn.dropit = function(method) {
+
+ var methods = {
+
+ init : function(options) {
+ this.dropit.settings = $.extend({}, this.dropit.defaults, options);
+ return this.each(function() {
+ var $el = $(this),
+ el = this,
+ settings = $.fn.dropit.settings;
+
+ // Hide initial submenus
+ $el.addClass('dropit')
+ .find('>'+ settings.triggerParentEl +':has('+ settings.submenuEl +')').addClass('dropit-trigger')
+ .find(settings.submenuEl).addClass('dropit-submenu').hide();
+
+ // Open on click
+ $el.off(settings.action).on(settings.action, settings.triggerParentEl +':has('+ settings.submenuEl +') > '+ settings.triggerEl +'', function(){
+ // Close click menu's if clicked again
+ if(settings.action == 'click' && $(this).parents(settings.triggerParentEl).hasClass('dropit-open')){
+ settings.beforeHide.call(this);
+ $(this).parents(settings.triggerParentEl).removeClass('dropit-open').find(settings.submenuEl).hide();
+ settings.afterHide.call(this);
+ return false;
+ }
+
+ // Hide open menus
+ settings.beforeHide.call(this);
+ $('.dropit-open').removeClass('dropit-open').find('.dropit-submenu').hide();
+ settings.afterHide.call(this);
+
+ // Open this menu
+ settings.beforeShow.call(this);
+ $(this).parents(settings.triggerParentEl).addClass('dropit-open').find(settings.submenuEl).show();
+ settings.afterShow.call(this);
+
+ return false;
+ });
+
+ // Close if outside click
+ $(document).on('click', function(){
+ settings.beforeHide.call(this);
+ $('.dropit-open').removeClass('dropit-open').find('.dropit-submenu').hide();
+ settings.afterHide.call(this);
+ });
+
+ // If hover
+ if(settings.action == 'mouseenter'){
+ $el.on('mouseleave', '.dropit-open', function(){
+ settings.beforeHide.call(this);
+ $(this).removeClass('dropit-open').find(settings.submenuEl).hide();
+ settings.afterHide.call(this);
+ });
+ }
+
+ settings.afterLoad.call(this);
+ });
+ }
+
+ };
+
+ if (methods[method]) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method === 'object' || !method) {
+ return methods.init.apply(this, arguments);
+ } else {
+ $.error( 'Method "' + method + '" does not exist in dropit plugin!');
+ }
+
+ };
+
+ $.fn.dropit.defaults = {
+ action: 'mouseenter', // The open action for the trigger
+ submenuEl: 'ul', // The submenu element
+ triggerEl: 'a', // The trigger element
+ triggerParentEl: 'li', // The trigger parent element
+ afterLoad: function(){}, // Triggers when plugin has loaded
+ beforeShow: function(){}, // Triggers before submenu is shown
+ afterShow: function(){}, // Triggers after submenu is shown
+ beforeHide: function(){}, // Triggers before submenu is hidden
+ afterHide: function(){} // Triggers before submenu is hidden
+ };
+
+ $.fn.dropit.settings = {};
+
+})(jQuery);
diff --git a/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js b/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js
new file mode 100644
index 000000000..7ede3b8a3
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js
@@ -0,0 +1,763 @@
+/*
+ * Autocomplete - jQuery plugin 1.1pre
+ *
+ * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: Id: jquery.autocomplete.js 5785 2008-07-12 10:37:33Z joern.zaefferer $
+ *
+ */
+
+;(function($) {
+
+$.fn.extend({
+ autocomplete: function(urlOrData, options) {
+ var isUrl = typeof urlOrData == "string";
+ options = $.extend({}, $.Autocompleter.defaults, {
+ url: isUrl ? urlOrData : null,
+ data: isUrl ? null : urlOrData,
+ delay: isUrl ? $.Autocompleter.defaults.delay : 10,
+ max: options && !options.scroll ? 10 : 150
+ }, options);
+
+ // if highlight is set to false, replace it with a do-nothing function
+ options.highlight = options.highlight || function(value) { return value; };
+
+ // if the formatMatch option is not specified, then use formatItem for backwards compatibility
+ options.formatMatch = options.formatMatch || options.formatItem;
+
+ return this.each(function() {
+ new $.Autocompleter(this, options);
+ });
+ },
+ result: function(handler) {
+ return this.bind("result", handler);
+ },
+ search: function(handler) {
+ return this.trigger("search", [handler]);
+ },
+ flushCache: function() {
+ return this.trigger("flushCache");
+ },
+ setOptions: function(options){
+ return this.trigger("setOptions", [options]);
+ },
+ unautocomplete: function() {
+ return this.trigger("unautocomplete");
+ }
+});
+
+$.Autocompleter = function(input, options) {
+
+ var KEY = {
+ UP: 38,
+ DOWN: 40,
+ DEL: 46,
+ TAB: 9,
+ RETURN: 13,
+ ESC: 27,
+ COMMA: 188,
+ PAGEUP: 33,
+ PAGEDOWN: 34,
+ BACKSPACE: 8
+ };
+
+ // Create $ object for input element
+ var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
+
+ var timeout;
+ var previousValue = "";
+ var cache = $.Autocompleter.Cache(options);
+ var hasFocus = 0;
+ var lastKeyPressCode;
+ var config = {
+ mouseDownOnSelect: false
+ };
+ var select = $.Autocompleter.Select(options, input, selectCurrent, config);
+
+ var blockSubmit;
+
+ // prevent form submit in opera when selecting with return key
+ $.browser.opera && $(input.form).bind("submit.autocomplete", function() {
+ if (blockSubmit) {
+ blockSubmit = false;
+ return false;
+ }
+ });
+
+ // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
+ $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
+ // track last key pressed
+ lastKeyPressCode = event.keyCode;
+ switch(event.keyCode) {
+
+ case KEY.UP:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.prev();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.DOWN:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.next();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.PAGEUP:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.pageUp();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.PAGEDOWN:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.pageDown();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ // matches also semicolon
+ case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
+ case KEY.TAB:
+ case KEY.RETURN:
+ if( selectCurrent() ) {
+ // stop default to prevent a form submit, Opera needs special handling
+ event.preventDefault();
+ blockSubmit = true;
+ return false;
+ }
+ break;
+
+ case KEY.ESC:
+ select.hide();
+ break;
+
+ default:
+ clearTimeout(timeout);
+ timeout = setTimeout(onChange, options.delay);
+ break;
+ }
+ }).focus(function(){
+ // track whether the field has focus, we shouldn't process any
+ // results if the field no longer has focus
+ hasFocus++;
+ }).blur(function() {
+ hasFocus = 0;
+ if (!config.mouseDownOnSelect) {
+ hideResults();
+ }
+ }).click(function() {
+ // show select when clicking in a focused field
+ if ( hasFocus++ > 1 && !select.visible() ) {
+ onChange(0, true);
+ }
+ }).bind("search", function() {
+ // TODO why not just specifying both arguments?
+ var fn = (arguments.length > 1) ? arguments[1] : null;
+ function findValueCallback(q, data) {
+ var result;
+ if( data && data.length ) {
+ for (var i=0; i < data.length; i++) {
+ if( data[i].result.toLowerCase() == q.toLowerCase() ) {
+ result = data[i];
+ break;
+ }
+ }
+ }
+ if( typeof fn == "function" ) fn(result);
+ else $input.trigger("result", result && [result.data, result.value]);
+ }
+ $.each(trimWords($input.val()), function(i, value) {
+ request(value, findValueCallback, findValueCallback);
+ });
+ }).bind("flushCache", function() {
+ cache.flush();
+ }).bind("setOptions", function() {
+ $.extend(options, arguments[1]);
+ // if we've updated the data, repopulate
+ if ( "data" in arguments[1] )
+ cache.populate();
+ }).bind("unautocomplete", function() {
+ select.unbind();
+ $input.unbind();
+ $(input.form).unbind(".autocomplete");
+ });
+
+
+ function selectCurrent() {
+ var selected = select.selected();
+ if( !selected )
+ return false;
+
+ var v = selected.result;
+ previousValue = v;
+
+ if ( options.multiple ) {
+ var words = trimWords($input.val());
+ if ( words.length > 1 ) {
+ v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
+ }
+ v += options.multipleSeparator;
+ }
+
+ $input.val(v);
+ hideResultsNow();
+ $input.trigger("result", [selected.data, selected.value]);
+ return true;
+ }
+
+ function onChange(crap, skipPrevCheck) {
+ if( lastKeyPressCode == KEY.DEL ) {
+ select.hide();
+ return;
+ }
+
+ var currentValue = $input.val();
+
+ if ( !skipPrevCheck && currentValue == previousValue )
+ return;
+
+ previousValue = currentValue;
+
+ currentValue = lastWord(currentValue);
+ if ( currentValue.length >= options.minChars) {
+ $input.addClass(options.loadingClass);
+ if (!options.matchCase)
+ currentValue = currentValue.toLowerCase();
+ request(currentValue, receiveData, hideResultsNow);
+ } else {
+ stopLoading();
+ select.hide();
+ }
+ };
+
+ function trimWords(value) {
+ if ( !value ) {
+ return [""];
+ }
+ var words = value.split( options.multipleSeparator );
+ var result = [];
+ $.each(words, function(i, value) {
+ if ( $.trim(value) )
+ result[i] = $.trim(value);
+ });
+ return result;
+ }
+
+ function lastWord(value) {
+ if ( !options.multiple )
+ return value;
+ var words = trimWords(value);
+ return words[words.length - 1];
+ }
+
+ // fills in the input box w/the first match (assumed to be the best match)
+ // q: the term entered
+ // sValue: the first matching result
+ function autoFill(q, sValue){
+ // autofill in the complete box w/the first match as long as the user hasn't entered in more data
+ // if the last user key pressed was backspace, don't autofill
+ if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
+ // fill in the value (keep the case the user has typed)
+ $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
+ // select the portion of the value not typed by the user (so the next character will erase)
+ $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
+ }
+ };
+
+ function hideResults() {
+ clearTimeout(timeout);
+ timeout = setTimeout(hideResultsNow, 200);
+ };
+
+ function hideResultsNow() {
+ var wasVisible = select.visible();
+ select.hide();
+ clearTimeout(timeout);
+ stopLoading();
+ if (options.mustMatch) {
+ // call search and run callback
+ $input.search(
+ function (result){
+ // if no value found, clear the input box
+ if( !result ) {
+ if (options.multiple) {
+ var words = trimWords($input.val()).slice(0, -1);
+ $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
+ }
+ else
+ $input.val( "" );
+ }
+ }
+ );
+ }
+ if (wasVisible)
+ // position cursor at end of input field
+ $.Autocompleter.Selection(input, input.value.length, input.value.length);
+ };
+
+ function receiveData(q, data) {
+ if ( data && data.length && hasFocus ) {
+ stopLoading();
+ select.display(data, q);
+ autoFill(q, data[0].value);
+ select.show();
+ } else {
+ hideResultsNow();
+ }
+ };
+
+ function request(term, success, failure) {
+ if (!options.matchCase)
+ term = term.toLowerCase();
+ var data = cache.load(term);
+ data = null; // Avoid buggy cache and go to Solr every time
+ // recieve the cached data
+ if (data && data.length) {
+ success(term, data);
+ // if an AJAX url has been supplied, try loading the data now
+ } else if( (typeof options.url == "string") && (options.url.length > 0) ){
+
+ var extraParams = {
+ timestamp: +new Date()
+ };
+ $.each(options.extraParams, function(key, param) {
+ extraParams[key] = typeof param == "function" ? param() : param;
+ });
+
+ $.ajax({
+ // try to leverage ajaxQueue plugin to abort previous requests
+ mode: "abort",
+ // limit abortion to this input
+ port: "autocomplete" + input.name,
+ dataType: options.dataType,
+ url: options.url,
+ data: $.extend({
+ q: lastWord(term),
+ limit: options.max
+ }, extraParams),
+ success: function(data) {
+ var parsed = options.parse && options.parse(data) || parse(data);
+ cache.add(term, parsed);
+ success(term, parsed);
+ }
+ });
+ } else {
+ // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
+ select.emptyList();
+ failure(term);
+ }
+ };
+
+ function parse(data) {
+ var parsed = [];
+ var rows = data.split("\n");
+ for (var i=0; i < rows.length; i++) {
+ var row = $.trim(rows[i]);
+ if (row) {
+ row = row.split("|");
+ parsed[parsed.length] = {
+ data: row,
+ value: row[0],
+ result: options.formatResult && options.formatResult(row, row[0]) || row[0]
+ };
+ }
+ }
+ return parsed;
+ };
+
+ function stopLoading() {
+ $input.removeClass(options.loadingClass);
+ };
+
+};
+
+$.Autocompleter.defaults = {
+ inputClass: "ac_input",
+ resultsClass: "ac_results",
+ loadingClass: "ac_loading",
+ minChars: 1,
+ delay: 400,
+ matchCase: false,
+ matchSubset: true,
+ matchContains: false,
+ cacheLength: 10,
+ max: 100,
+ mustMatch: false,
+ extraParams: {},
+ selectFirst: false,
+ formatItem: function(row) { return row[0]; },
+ formatMatch: null,
+ autoFill: false,
+ width: 0,
+ multiple: false,
+ multipleSeparator: ", ",
+ highlight: function(value, term) {
+ return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
+ },
+ scroll: true,
+ scrollHeight: 180
+};
+
+$.Autocompleter.Cache = function(options) {
+
+ var data = {};
+ var length = 0;
+
+ function matchSubset(s, sub) {
+ if (!options.matchCase)
+ s = s.toLowerCase();
+ var i = s.indexOf(sub);
+ if (options.matchContains == "word"){
+ i = s.toLowerCase().search("\\b" + sub.toLowerCase());
+ }
+ if (i == -1) return false;
+ return i == 0 || options.matchContains;
+ };
+
+ function add(q, value) {
+ if (length > options.cacheLength){
+ flush();
+ }
+ if (!data[q]){
+ length++;
+ }
+ data[q] = value;
+ }
+
+ function populate(){
+ if( !options.data ) return false;
+ // track the matches
+ var stMatchSets = {},
+ nullData = 0;
+
+ // no url was specified, we need to adjust the cache length to make sure it fits the local data store
+ if( !options.url ) options.cacheLength = 1;
+
+ // track all options for minChars = 0
+ stMatchSets[""] = [];
+
+ // loop through the array and create a lookup structure
+ for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
+ var rawValue = options.data[i];
+ // if rawValue is a string, make an array otherwise just reference the array
+ rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
+
+ var value = options.formatMatch(rawValue, i+1, options.data.length);
+ if ( value === false )
+ continue;
+
+ var firstChar = value.charAt(0).toLowerCase();
+ // if no lookup array for this character exists, look it up now
+ if( !stMatchSets[firstChar] )
+ stMatchSets[firstChar] = [];
+
+ // if the match is a string
+ var row = {
+ value: value,
+ data: rawValue,
+ result: options.formatResult && options.formatResult(rawValue) || value
+ };
+
+ // push the current match into the set list
+ stMatchSets[firstChar].push(row);
+
+ // keep track of minChars zero items
+ if ( nullData++ < options.max ) {
+ stMatchSets[""].push(row);
+ }
+ };
+
+ // add the data items to the cache
+ $.each(stMatchSets, function(i, value) {
+ // increase the cache size
+ options.cacheLength++;
+ // add to the cache
+ add(i, value);
+ });
+ }
+
+ // populate any existing data
+ setTimeout(populate, 25);
+
+ function flush(){
+ data = {};
+ length = 0;
+ }
+
+ return {
+ flush: flush,
+ add: add,
+ populate: populate,
+ load: function(q) {
+ if (!options.cacheLength || !length)
+ return null;
+ /*
+ * if dealing w/local data and matchContains than we must make sure
+ * to loop through all the data collections looking for matches
+ */
+ if( !options.url && options.matchContains ){
+ // track all matches
+ var csub = [];
+ // loop through all the data grids for matches
+ for( var k in data ){
+ // don't search through the stMatchSets[""] (minChars: 0) cache
+ // this prevents duplicates
+ if( k.length > 0 ){
+ var c = data[k];
+ $.each(c, function(i, x) {
+ // if we've got a match, add it to the array
+ if (matchSubset(x.value, q)) {
+ csub.push(x);
+ }
+ });
+ }
+ }
+ return csub;
+ } else
+ // if the exact item exists, use it
+ if (data[q]){
+ return data[q];
+ } else
+ if (options.matchSubset) {
+ for (var i = q.length - 1; i >= options.minChars; i--) {
+ var c = data[q.substr(0, i)];
+ if (c) {
+ var csub = [];
+ $.each(c, function(i, x) {
+ if (matchSubset(x.value, q)) {
+ csub[csub.length] = x;
+ }
+ });
+ return csub;
+ }
+ }
+ }
+ return null;
+ }
+ };
+};
+
+$.Autocompleter.Select = function (options, input, select, config) {
+ var CLASSES = {
+ ACTIVE: "ac_over"
+ };
+
+ var listItems,
+ active = -1,
+ data,
+ term = "",
+ needsInit = true,
+ element,
+ list;
+
+ // Create results
+ function init() {
+ if (!needsInit)
+ return;
+ element = $("<div/>")
+ .hide()
+ .addClass(options.resultsClass)
+ .css("position", "absolute")
+ .appendTo(document.body);
+
+ list = $("<ul/>").appendTo(element).mouseover( function(event) {
+ if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
+ active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
+ $(target(event)).addClass(CLASSES.ACTIVE);
+ }
+ }).click(function(event) {
+ $(target(event)).addClass(CLASSES.ACTIVE);
+ select();
+ // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
+ input.focus();
+ return false;
+ }).mousedown(function() {
+ config.mouseDownOnSelect = true;
+ }).mouseup(function() {
+ config.mouseDownOnSelect = false;
+ });
+
+ if( options.width > 0 )
+ element.css("width", options.width);
+
+ needsInit = false;
+ }
+
+ function target(event) {
+ var element = event.target;
+ while(element && element.tagName != "LI")
+ element = element.parentNode;
+ // more fun with IE, sometimes event.target is empty, just ignore it then
+ if(!element)
+ return [];
+ return element;
+ }
+
+ function moveSelect(step) {
+ listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
+ movePosition(step);
+ var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
+ if(options.scroll) {
+ var offset = 0;
+ listItems.slice(0, active).each(function() {
+ offset += this.offsetHeight;
+ });
+ if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
+ list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
+ } else if(offset < list.scrollTop()) {
+ list.scrollTop(offset);
+ }
+ }
+ };
+
+ function movePosition(step) {
+ active += step;
+ if (active < 0) {
+ active = listItems.size() - 1;
+ } else if (active >= listItems.size()) {
+ active = 0;
+ }
+ }
+
+ function limitNumberOfItems(available) {
+ return options.max && options.max < available
+ ? options.max
+ : available;
+ }
+
+ function fillList() {
+ list.empty();
+ var max = limitNumberOfItems(data.length);
+ for (var i=0; i < max; i++) {
+ if (!data[i])
+ continue;
+ var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
+ if ( formatted === false )
+ continue;
+ var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
+ $.data(li, "ac_data", data[i]);
+ }
+ listItems = list.find("li");
+ if ( options.selectFirst ) {
+ listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
+ active = 0;
+ }
+ // apply bgiframe if available
+ if ( $.fn.bgiframe )
+ list.bgiframe();
+ }
+
+ return {
+ display: function(d, q) {
+ init();
+ data = d;
+ term = q;
+ fillList();
+ },
+ next: function() {
+ moveSelect(1);
+ },
+ prev: function() {
+ moveSelect(-1);
+ },
+ pageUp: function() {
+ if (active != 0 && active - 8 < 0) {
+ moveSelect( -active );
+ } else {
+ moveSelect(-8);
+ }
+ },
+ pageDown: function() {
+ if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
+ moveSelect( listItems.size() - 1 - active );
+ } else {
+ moveSelect(8);
+ }
+ },
+ hide: function() {
+ element && element.hide();
+ listItems && listItems.removeClass(CLASSES.ACTIVE);
+ active = -1;
+ },
+ visible : function() {
+ return element && element.is(":visible");
+ },
+ current: function() {
+ return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
+ },
+ show: function() {
+ var offset = $(input).offset();
+ element.css({
+ width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
+ top: offset.top + input.offsetHeight,
+ left: offset.left
+ }).show();
+ if(options.scroll) {
+ list.scrollTop(0);
+ list.css({
+ maxHeight: options.scrollHeight,
+ overflow: 'auto'
+ });
+
+ if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
+ var listHeight = 0;
+ listItems.each(function() {
+ listHeight += this.offsetHeight;
+ });
+ var scrollbarsVisible = listHeight > options.scrollHeight;
+ list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
+ if (!scrollbarsVisible) {
+ // IE doesn't recalculate width when scrollbar disappears
+ listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
+ }
+ }
+
+ }
+ },
+ selected: function() {
+ var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
+ return selected && selected.length && $.data(selected[0], "ac_data");
+ },
+ emptyList: function (){
+ list && list.empty();
+ },
+ unbind: function() {
+ element && element.remove();
+ }
+ };
+};
+
+$.Autocompleter.Selection = function(field, start, end) {
+ if( field.createTextRange ){
+ var selRange = field.createTextRange();
+ selRange.collapse(true);
+ selRange.moveStart("character", start);
+ selRange.moveEnd("character", end);
+ selRange.select();
+ } else if( field.setSelectionRange ){
+ field.setSelectionRange(start, end);
+ } else {
+ if( field.selectionStart ){
+ field.selectionStart = start;
+ field.selectionEnd = end;
+ }
+ }
+ field.focus();
+};
+
+})(jQuery);
diff --git a/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js b/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js
new file mode 100644
index 000000000..eb7d7d54a
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js
@@ -0,0 +1,70 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * Tuxes3 wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return Tuxes3
+ * ----------------------------------------------------------------------------
+ */
+(function($)
+{
+ var settings;
+ $.fn.tx3TagCloud = function(options)
+ {
+
+ //
+ // DEFAULT SETTINGS
+ //
+ settings = $.extend({
+ multiplier : 1
+ }, options);
+ main(this);
+
+ }
+
+ function main(element)
+ {
+ // adding style attr
+ element.addClass("tx3-tag-cloud");
+ addListElementFontSize(element);
+ }
+
+ /**
+ * calculates the font size on each li element
+ * according to their data-weight attribut
+ */
+ function addListElementFontSize(element)
+ {
+ var hDataWeight = -9007199254740992;
+ var lDataWeight = 9007199254740992;
+ $.each(element.find("li"), function(){
+ cDataWeight = getDataWeight(this);
+ if (cDataWeight == undefined)
+ {
+ logWarning("No \"data-weight\" attribut defined on <li> element");
+ }
+ else
+ {
+ hDataWeight = cDataWeight > hDataWeight ? cDataWeight : hDataWeight;
+ lDataWeight = cDataWeight < lDataWeight ? cDataWeight : lDataWeight;
+ }
+ });
+ $.each(element.find("li"), function(){
+ var dataWeight = getDataWeight(this);
+ var percent = Math.abs((dataWeight - lDataWeight)/(lDataWeight - hDataWeight));
+ $(this).css('font-size', (1 + (percent * settings['multiplier'])) + "em");
+ });
+
+ }
+
+ function getDataWeight(element)
+ {
+ return parseInt($(element).attr("data-weight"));
+ }
+
+ function logWarning(message)
+ {
+ console.log("[WARNING] " + Date.now() + " : " + message);
+ }
+
+}(jQuery));
diff --git a/solr-8.1.1/example/files/conf/velocity/layout.vm b/solr-8.1.1/example/files/conf/velocity/layout.vm
new file mode 100644
index 000000000..ef6caf705
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/layout.vm
@@ -0,0 +1,42 @@
+<html>
+<head>
+ #parse("head.vm")
+</head>
+ <body>
+ <div id="header">
+ <a href="#url_for_home"><img src="#{url_root}/img/solr.svg" id="logo" title="Solr"/></a> $resource.powered_file_search
+ </div>
+
+ <div id="header2" onclick="javascript:locale_select()">
+ <ul class="menu">
+
+ <li>
+ <a href="#"><img src="#{url_for_solr}/admin/file?file=/velocity/img/globe_256.png&contentType=image/png" id="locale_pic" title="locale_select" width="30px" height="27px"/></a>
+ <ul>
+ <li><a href="#url_for_locale('fr_FR')" #if("#current_locale"=="fr_FR")class="hidden"#end>
+ <img src="#{url_for_solr}/admin/file?file=/velocity/img/france_640.png&contentType=image/png" id="french_flag" width="40px" height="40px"/>Fran&ccedil;ais</a></li>
+ <li><a href="#url_for_locale('de_DE')" #if("#current_locale"=="de_DE")class="hidden"#end>
+ <img src="#{url_for_solr}/admin/file?file=/velocity/img/germany_640.png&contentType=image/png" id="german_flag" width="40px" height="40px"/>Deutsch</a></li>
+ <li><a href="#url_for_locale('')" #if("#current_locale"=="")class="hidden"#end>
+ <img src="#{url_for_solr}/admin/file?file=/velocity/img/english_640.png&contentType=image/png" id="english_flag" width="40px" height="40px"/>English</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ #if($response.response.error.code)
+ <div class="error">
+ <h1>ERROR $response.response.error.code</h1>
+ $response.response.error.msg
+ </div>
+ #else
+ <div id="content">
+ $content
+ </div>
+ #end
+
+ <div id="footer">
+ #parse("footer.vm")
+ </div>
+ </body>
+</html>
diff --git a/solr-8.1.1/example/files/conf/velocity/macros.vm b/solr-8.1.1/example/files/conf/velocity/macros.vm
new file mode 100644
index 000000000..8bebb7f5d
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/macros.vm
@@ -0,0 +1,16 @@
+#macro(lensFilterSortOnly)?#if($response.responseHeader.params.getAll("fq").size() > 0)&#fqs($response.responseHeader.params.getAll("fq"))#end#sort($request.params.getParams('sort'))#end
+#macro(lensNoQ)#lensFilterSortOnly&type=#current_type#if("#current_locale"!="")&locale=#current_locale#end#end
+#macro(lensNoType)#lensFilterSortOnly#q#if("#current_locale"!="")&locale=#current_locale#end#end
+#macro(lensNoLocale)#lensFilterSortOnly#q&type=#current_type#end
+
+## lens modified for example/files - to use fq from responseHeader rather than request, and #debug removed too as it is built into browse params now, also added type to lens
+#macro(lens)#lensNoQ#q#end
+
+## Macros defined custom for the "files" example
+#macro(url_for_type $type)#url_for_home#lensNoType&type=$type#end
+#macro(current_type)#if($response.responseHeader.params.type)${response.responseHeader.params.type}#{else}all#end#end
+#macro(url_for_locale $locale)#url_for_home#lensNoLocale#if($locale!="")&locale=$locale#end&start=$page.start#end
+#macro(current_locale)$!{response.responseHeader.params.locale}#end
+
+## Usage: #label(resource_key[, default_value]) - resource_key is used as label if no default value specified and no resource exists
+#macro(label $key $default)#if($resource.get($key).exists)${resource.get($key)}#else#if($default)$default#else${key}#end#end#end
diff --git a/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm b/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm
new file mode 100644
index 000000000..1468bbdbf
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm
@@ -0,0 +1,68 @@
+#**
+ * Define some Mime-Types, short and long form
+ *#
+
+## MimeType to extension map for detecting file type
+## and showing proper icon
+## List of types match the icons in /solr/img/filetypes
+
+## Short MimeType Names
+## Was called $supportedtypes
+#set($supportedMimeTypes = "7z;ai;aiff;asc;audio;bin;bz2;c;cfc;cfm;chm;class;conf;cpp;cs;css;csv;deb;divx;doc;dot;eml;enc;file;gif;gz;hlp;htm;html;image;iso;jar;java;jpeg;jpg;js;lua;m;mm;mov;mp3;mpg;odc;odf;odg;odi;odp;ods;odt;ogg;pdf;pgp;php;pl;png;ppt;ps;py;ram;rar;rb;rm;rpm;rtf;sig;sql;swf;sxc;sxd;sxi;sxw;tar;tex;tgz;txt;vcf;video;vsd;wav;wma;wmv;xls;xml;xpi;xvid;zip")
+
+## Long Form: map MimeType headers to our Short names
+## Was called $extMap
+#set( $mimeExtensionsMap = {
+ "application/x-7z-compressed": "7z",
+ "application/postscript": "ai",
+ "application/pgp-signature": "asc",
+ "application/octet-stream": "bin",
+ "application/x-bzip2": "bz2",
+ "text/x-c": "c",
+ "application/vnd.ms-htmlhelp": "chm",
+ "application/java-vm": "class",
+ "text/css": "css",
+ "text/csv": "csv",
+ "application/x-debian-package": "deb",
+ "application/msword": "doc",
+ "message/rfc822": "eml",
+ "image/gif": "gif",
+ "application/winhlp": "hlp",
+ "text/html": "html",
+ "application/java-archive": "jar",
+ "text/x-java-source": "java",
+ "image/jpeg": "jpeg",
+ "application/javascript": "js",
+ "application/vnd.oasis.opendocument.chart": "odc",
+ "application/vnd.oasis.opendocument.formula": "odf",
+ "application/vnd.oasis.opendocument.graphics": "odg",
+ "application/vnd.oasis.opendocument.image": "odi",
+ "application/vnd.oasis.opendocument.presentation": "odp",
+ "application/vnd.oasis.opendocument.spreadsheet": "ods",
+ "application/vnd.oasis.opendocument.text": "odt",
+ "application/pdf": "pdf",
+ "application/pgp-encrypted": "pgp",
+ "image/png": "png",
+ "application/vnd.ms-powerpoint": "ppt",
+ "audio/x-pn-realaudio": "ram",
+ "application/x-rar-compressed": "rar",
+ "application/vnd.rn-realmedia": "rm",
+ "application/rtf": "rtf",
+ "application/x-shockwave-flash": "swf",
+ "application/vnd.sun.xml.calc": "sxc",
+ "application/vnd.sun.xml.draw": "sxd",
+ "application/vnd.sun.xml.impress": "sxi",
+ "application/vnd.sun.xml.writer": "sxw",
+ "application/x-tar": "tar",
+ "application/x-tex": "tex",
+ "text/plain": "txt",
+ "text/x-vcard": "vcf",
+ "application/vnd.visio": "vsd",
+ "audio/x-wav": "wav",
+ "audio/x-ms-wma": "wma",
+ "video/x-ms-wmv": "wmv",
+ "application/vnd.ms-excel": "xls",
+ "application/xml": "xml",
+ "application/x-xpinstall": "xpi",
+ "application/zip": "zip"
+})
diff --git a/solr-8.1.1/example/files/conf/velocity/results.vm b/solr-8.1.1/example/files/conf/velocity/results.vm
new file mode 100644
index 000000000..b8a17a9c3
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/results.vm
@@ -0,0 +1,20 @@
+<div id="facets">
+ #parse("facets.vm")
+</div>
+
+
+<div id="results_list">
+ <div class="pagination">
+ <span class="results-found">$page.results_found</span> $resource.results_found_in.insert(${response.responseHeader.QTime})
+ $resource.page_of.insert($page.current_page_number,$page.page_count)
+ </div>
+
+ #parse("results_list.vm")
+
+ <div class="pagination">
+ #link_to_previous_page
+ <span class="results-found">$page.results_found</span> $resource.results_found.
+ $resource.page_of.insert($page.current_page_number,$page.page_count)
+ #link_to_next_page
+ </div>
+</div>
diff --git a/solr-8.1.1/example/files/conf/velocity/results_list.vm b/solr-8.1.1/example/files/conf/velocity/results_list.vm
new file mode 100644
index 000000000..908e45b0c
--- /dev/null
+++ b/solr-8.1.1/example/files/conf/velocity/results_list.vm
@@ -0,0 +1,21 @@
+<ul id="tabs">
+ <li><a href="#url_for_type('all')" #if("#current_type"=="all")class="selected"#end>$resource.type.all ($response.response.facet_counts.facet_queries.all_types)</a></li>
+ #foreach($type in $response.response.facet_counts.facet_fields.doc_type)
+ #if($type.key)
+ <li><a href="#url_for_type($type.key)" #if($type.value=="0")class="no_results"#end #if("#current_type"==$type.key)class="selected"#end> #label("type.${type.key}.label", $type.key) ($type.value)</a></li>
+ #else
+ #if($type.value > 0)
+ <li><a href="#url_for_type('unknown')" #if("#current_type"=="unknown")class="selected"#end>$resource.type.unknown ($type.value)</a></li>
+ #end
+ #end
+ #end
+</ul>
+
+
+<div id="results">
+ #foreach($doc in $response.results)
+ #parse("hit.vm")
+ #end
+</div>
+
+
diff --git a/solr-8.1.1/example/films/README.txt b/solr-8.1.1/example/films/README.txt
new file mode 100644
index 000000000..d1679d222
--- /dev/null
+++ b/solr-8.1.1/example/films/README.txt
@@ -0,0 +1,138 @@
+We have a movie data set in JSON, Solr XML, and CSV formats.
+All 3 formats contain the same data. You can use any one format to index documents to Solr.
+
+The data is fetched from Freebase and the data license is present in the films-LICENSE.txt file.
+
+This data consists of the following fields:
+ * "id" - unique identifier for the movie
+ * "name" - Name of the movie
+ * "directed_by" - The person(s) who directed the making of the film
+ * "initial_release_date" - The earliest official initial film screening date in any country
+ * "genre" - The genre(s) that the movie belongs to
+
+ Steps:
+ * Start Solr:
+ bin/solr start
+
+ * Create a "films" core:
+ bin/solr create -c films
+
+ * Set the schema on a couple of fields that Solr would otherwise guess differently (than we'd like) about:
+curl http://localhost:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
+ "add-field" : {
+ "name":"name",
+ "type":"text_general",
+ "multiValued":false,
+ "stored":true
+ },
+ "add-field" : {
+ "name":"initial_release_date",
+ "type":"pdate",
+ "stored":true
+ }
+}'
+
+ * Now let's index the data, using one of these three commands:
+
+ - JSON: bin/post -c films example/films/films.json
+ - XML: bin/post -c films example/films/films.xml
+ - CSV: bin/post \
+ -c films \
+ example/films/films.csv \
+ -params "f.genre.split=true&f.directed_by.split=true&f.genre.separator=|&f.directed_by.separator=|"
+
+ * Let's get searching!
+ - Search for 'Batman':
+ http://localhost:8983/solr/films/query?q=name:batman
+
+ * If you get an error about the name field not existing, you haven't yet indexed the data
+ * If you don't get an error, but zero results, chances are that the _name_ field schema type override wasn't set
+ before indexing the data the first time (it ended up as a "string" type, requiring exact matching by case even).
+ It's easiest to simply reset the environment and try again, ensuring that each step successfully executes.
+
+ - Show me all 'Super hero' movies:
+ http://localhost:8983/solr/films/query?q=*:*&fq=genre:%22Superhero%20movie%22
+
+ - Let's see the distribution of genres across all the movies. See the facet section of the response for the counts:
+ http://localhost:8983/solr/films/query?q=*:*&facet=true&facet.field=genre
+
+ - Browse the indexed films in a traditional browser search interface:
+ http://localhost:8983/solr/films/browse
+
+ Now browse including the genre field as a facet:
+ http://localhost:8983/solr/films/browse?facet.field=genre
+
+ If you want to set a facet for /browse to keep around for every request add the facet.field into the "facets"
+ param set (which the /browse handler is already configured to use):
+curl http://localhost:8983/solr/films/config/params -H 'Content-type:application/json' -d '{
+"update" : {
+ "facets": {
+ "facet.field":"genre"
+ }
+ }
+}'
+
+ And now http://localhost:8983/solr/films/browse will display the _genre_ facet automatically.
+
+Exploring the data further -
+
+ * Increase the MAX_ITERATIONS value, put in your freebase API_KEY and run the film_data_generator.py script using Python 3.
+ Now re-index Solr with the new data.
+
+FAQ:
+ Why override the schema of the _name_ and _initial_release_date_ fields?
+
+ Without overriding those field types, the _name_ field would have been guessed as a multi-valued string field type
+ and _initial_release_date_ would have been guessed as a multi-valued pdate type. It makes more sense with this
+ particular data set domain to have the movie name be a single valued general full-text searchable field,
+ and for the release date also to be single valued.
+
+ How do I clear and reset my environment?
+
+ See the script below.
+
+ Is there an easy to copy/paste script to do all of the above?
+
+ Here ya go << END_OF_SCRIPT
+
+bin/solr stop
+rm server/logs/*.log
+rm -Rf server/solr/films/
+bin/solr start
+bin/solr create -c films
+curl http://localhost:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
+ "add-field" : {
+ "name":"name",
+ "type":"text_general",
+ "multiValued":false,
+ "stored":true
+ },
+ "add-field" : {
+ "name":"initial_release_date",
+ "type":"pdate",
+ "stored":true
+ }
+}'
+bin/post -c films example/films/films.json
+curl http://localhost:8983/solr/films/config/params -H 'Content-type:application/json' -d '{
+"update" : {
+ "facets": {
+ "facet.field":"genre"
+ }
+ }
+}'
+
+# END_OF_SCRIPT
+
+Additional fun -
+
+Add highlighting:
+curl http://localhost:8983/solr/films/config/params -H 'Content-type:application/json' -d '{
+"set" : {
+ "browse": {
+ "hl":"on",
+ "hl.fl":"name"
+ }
+ }
+}'
+try http://localhost:8983/solr/films/browse?q=batman now, and you'll see "batman" highlighted in the results
diff --git a/solr-8.1.1/example/films/film_data_generator.py b/solr-8.1.1/example/films/film_data_generator.py
new file mode 100644
index 000000000..7e2a46318
--- /dev/null
+++ b/solr-8.1.1/example/films/film_data_generator.py
@@ -0,0 +1,117 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+This will generate a movie data set of 1100 records.
+These are the first 1100 movies which appear when querying the Freebase of type '/film/film'.
+Here is the link to the freebase page - https://www.freebase.com/film/film?schema=
+
+Usage - python3 film_data_generator.py
+"""
+
+import csv
+import copy
+import json
+import codecs
+import datetime
+import urllib.parse
+import urllib.request
+import xml.etree.cElementTree as ET
+from xml.dom import minidom
+
+MAX_ITERATIONS=10 #10 limits it to 1100 docs
+
+# You need an API Key by Google to run this
+API_KEY = '<insert your Google developer API key>'
+service_url = 'https://www.googleapis.com/freebase/v1/mqlread'
+query = [{
+ "id": None,
+ "name": None,
+ "initial_release_date": None,
+ "directed_by": [],
+ "genre": [],
+ "type": "/film/film",
+ "initial_release_date>" : "2000"
+}]
+
+def gen_csv(filmlist):
+ filmlistDup = copy.deepcopy(filmlist)
+ #Convert multi-valued to % delimited string
+ for film in filmlistDup:
+ for key in film:
+ if isinstance(film[key], list):
+ film[key] = '|'.join(film[key])
+ keys = ['name', 'directed_by', 'genre', 'type', 'id', 'initial_release_date']
+ with open('films.csv', 'w', newline='', encoding='utf8') as csvfile:
+ dict_writer = csv.DictWriter(csvfile, keys)
+ dict_writer.writeheader()
+ dict_writer.writerows(filmlistDup)
+
+def gen_json(filmlist):
+ filmlistDup = copy.deepcopy(filmlist)
+ with open('films.json', 'w') as jsonfile:
+ jsonfile.write(json.dumps(filmlist, indent=2))
+
+def gen_xml(filmlist):
+ root = ET.Element("add")
+ for film in filmlist:
+ doc = ET.SubElement(root, "doc")
+ for key in film:
+ if isinstance(film[key], list):
+ for value in film[key]:
+ field = ET.SubElement(doc, "field")
+ field.set("name", key)
+ field.text=value
+ else:
+ field = ET.SubElement(doc, "field")
+ field.set("name", key)
+ field.text=film[key]
+ tree = ET.ElementTree(root)
+ with open('films.xml', 'w') as f:
+ f.write( minidom.parseString(ET.tostring(tree.getroot(),'utf-8')).toprettyxml(indent=" ") )
+
+def do_query(filmlist, cursor=""):
+ params = {
+ 'query': json.dumps(query),
+ 'key': API_KEY,
+ 'cursor': cursor
+ }
+ url = service_url + '?' + urllib.parse.urlencode(params)
+ data = urllib.request.urlopen(url).read().decode('utf-8')
+ response = json.loads(data)
+ for item in response['result']:
+ del item['type'] # It's always /film/film. No point of adding this.
+ try:
+ datetime.datetime.strptime(item['initial_release_date'], "%Y-%m-%d")
+ except ValueError:
+ #Date time not formatted properly. Keeping it simple by removing the date field from that doc
+ del item['initial_release_date']
+ filmlist.append(item)
+ return response.get("cursor")
+
+
+if __name__ == "__main__":
+ filmlist = []
+ cursor = do_query(filmlist)
+ i=0
+ while(cursor):
+ cursor = do_query(filmlist, cursor)
+ i = i+1
+ if i==MAX_ITERATIONS:
+ break
+
+ gen_json(filmlist)
+ gen_csv(filmlist)
+ gen_xml(filmlist)
diff --git a/solr-8.1.1/example/films/films-LICENSE.txt b/solr-8.1.1/example/films/films-LICENSE.txt
new file mode 100644
index 000000000..b1b630ba1
--- /dev/null
+++ b/solr-8.1.1/example/films/films-LICENSE.txt
@@ -0,0 +1,3 @@
+The films data (films.json/.xml/.csv) is licensed under the Creative Commons Attribution 2.5 Generic License.
+To view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/
+or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
diff --git a/solr-8.1.1/example/films/films.csv b/solr-8.1.1/example/films/films.csv
new file mode 100644
index 000000000..82fe40d68
--- /dev/null
+++ b/solr-8.1.1/example/films/films.csv
@@ -0,0 +1,1101 @@
+name,directed_by,genre,type,id,initial_release_date
+.45,Gary Lennon,Black comedy|Thriller|Psychological thriller|Indie film|Action Film|Crime Thriller|Crime Fiction|Drama,,/en/45_2006,2006-11-30
+9,Shane Acker,Computer Animation|Animation|Apocalyptic and post-apocalyptic fiction|Science Fiction|Short Film|Thriller|Fantasy,,/en/9_2005,2005-04-21
+69,Lee Sang-il,Japanese Movies|Drama,,/en/69_2004,2004-07-10
+300,Zack Snyder,Epic film|Adventure Film|Fantasy|Action Film|Historical fiction|War film|Superhero movie|Historical Epic,,/en/300_2007,2006-12-09
+2046,Wong Kar-wai,Romance Film|Fantasy|Science Fiction|Drama,,/en/2046_2004,2004-05-20
+¿Quién es el señor López?,Luis Mandoki,Documentary film,,/en/quien_es_el_senor_lopez,
+"""Weird Al"" Yankovic: The Ultimate Video Collection","Jay Levey|""Weird Al"" Yankovic",Music video|Parody,,/en/weird_al_yankovic_the_ultimate_video_collection,2003-11-04
+15 Park Avenue,Aparna Sen,Art film|Romance Film|Musical|Drama|Musical Drama,,/en/15_park_avenue,2005-10-27
+2 Fast 2 Furious,John Singleton,Thriller|Action Film|Crime Fiction,,/en/2_fast_2_furious,2003-06-03
+7G Rainbow Colony,Selvaraghavan,Drama,,/en/7g_rainbow_colony,2004-10-15
+3-Iron,Kim Ki-duk,Crime Fiction|Romance Film|East Asian cinema|World cinema|Drama,,/en/3-iron,2004-09-07
+10.5: Apocalypse,John Lafia,Disaster Film|Thriller|Television film|Action/Adventure|Action Film,,/en/10_5_apocalypse,2006-03-18
+8 Mile,Curtis Hanson,Musical|Hip hop film|Drama|Musical Drama,,/en/8_mile,2002-09-08
+100 Girls,Michael Davis,Romantic comedy|Romance Film|Indie film|Teen film|Comedy,,/en/100_girls,2001-09-25
+40 Days and 40 Nights,Michael Lehmann,Romance Film|Romantic comedy|Sex comedy|Comedy|Drama,,/en/40_days_and_40_nights,2002-03-01
+50 Cent: The New Breed,Don Robinson|Damon Johnson|Philip Atwell|Ian Inaba|Stephen Marshall|John Quigley|Jessy Terrero|Noa Shaw,Documentary film|Music|Concert film|Biographical film,,/en/50_cent_the_new_breed,2003-04-15
+3: The Dale Earnhardt Story,Russell Mulcahy,Sports|Auto racing|Biographical film|Drama,,/en/3_the_dale_earnhardt_story,2004-12-11
+61*,Billy Crystal,Sports|History|Historical period drama|Television film|Drama,,/en/61__2001,2001-04-28
+24 Hour Party People,Michael Winterbottom,Biographical film|Comedy-drama|Comedy|Music|Drama,,/en/24_hour_party_people,2002-02-13
+10th &amp; Wolf,Robert Moresco,Mystery|Thriller|Crime Fiction|Crime Thriller|Gangster Film|Drama,,/en/10th_wolf,2006-08-18
+25th Hour,Spike Lee,Crime Fiction|Drama,,/en/25th_hour,2002-12-16
+7 Seconds,Simon Fellows,Thriller|Action Film|Crime Fiction,,/en/7_seconds_2005,2005-06-28
+28 Days Later,Danny Boyle,Science Fiction|Horror|Thriller,,/en/28_days_later,2002-11-01
+21 Grams,Alejandro González Iñárritu,Thriller|Ensemble Film|Crime Fiction|Drama,,/en/21_grams,2003-09-05
+The 9th Company,Fedor Bondarchuk,War film|Action Film|Historical fiction|Drama,,/en/9th_company,2005-09-29
+102 Dalmatians,Kevin Lima,Family|Adventure Film|Comedy,,/en/102_dalmatians,2000-11-22
+16 Years of Alcohol,Richard Jobson,Indie film|Drama,,/en/16_years_of_alcohol,2003-08-14
+12B,Jeeva,Romance Film|Comedy|Tamil cinema|World cinema|Drama,,/en/12b,2001-09-28
+2009 Lost Memories,Lee Si-myung,Thriller|Action Film|Science Fiction|Mystery|Drama,,/en/2009_lost_memories,2002-02-01
+16 Blocks,Richard Donner,Thriller|Crime Fiction|Action Film|Drama,,/en/16_blocks,2006-03-01
+15 Minutes,John Herzfeld,Thriller|Action Film|Crime Fiction|Crime Thriller|Drama,,/en/15_minutes,2001-03-01
+50 First Dates,Peter Segal,Romantic comedy|Romance Film|Comedy,,/en/50_first_dates,2004-02-13
+9 Songs,Michael Winterbottom,Erotica|Musical|Romance Film|Erotic Drama|Musical Drama|Drama,,/en/9_songs,2004-05-16
+20 Fingers,Mania Akbari,World cinema|Drama,,/en/20_fingers_2004,2004-09-01
+3 Needles,Thom Fitzgerald,Indie film|Social problem film|Chinese Movies|Drama,,/en/3_needles,2006-12-01
+28 Days,Betty Thomas,Comedy-drama|Romantic comedy|Comedy|Drama,,/en/28_days_2000,2000-02-08
+36 China Town,Abbas Burmawalla|Mustan Burmawalla,Thriller|Musical|Comedy|Mystery|Crime Fiction|Bollywood|Musical comedy,,/en/36_china_town,2006-04-21
+"7 mujeres, 1 homosexual y Carlos",Rene Bueno,Romantic comedy|LGBT|Romance Film|World cinema|Sex comedy|Comedy|Drama,,/en/7_mujeres_1_homosexual_y_carlos,2004-06-01
+88 Minutes,Jon Avnet,Thriller|Psychological thriller|Mystery|Drama,,/en/88_minutes,2007-02-14
+500 Years Later,Owen 'Alik Shahadah,Indie film|Documentary film|History,,/en/500_years_later,2005-10-11
+50 Ways of Saying Fabulous,Stewart Main,LGBT|Indie film|Historical period drama|Gay Themed|World cinema|Coming of age|Drama,,/en/50_ways_of_saying_fabulous,
+5x2,François Ozon,Romance Film|World cinema|Marriage Drama|Fiction|Drama,,/en/5x2,2004-09-01
+28 Weeks Later,Juan Carlos Fresnadillo,Science Fiction|Horror|Thriller,,/en/28_weeks_later,2007-04-26
+10.5,John Lafia,Disaster Film|Thriller|Action/Adventure|Drama,,/en/10_5,2004-05-02
+13 Going on 30,Gary Winick,Romantic comedy|Coming of age|Fantasy|Romance Film|Fantasy Comedy|Comedy,,/en/13_going_on_30,2004-04-14
+2LDK,Yukihiko Tsutsumi,LGBT|Thriller|Psychological thriller|World cinema|Japanese Movies|Comedy|Drama,,/en/2ldk,2004-05-13
+7½ Phere,Ishaan Trivedi,Bollywood|Comedy|Drama,,/en/7_phere,2005-07-29
+A Beautiful Mind,Ron Howard,Biographical film|Psychological thriller|Historical period drama|Romance Film|Marriage Drama|Documentary film|Drama,,/en/a_beautiful_mind,2001-12-13
+A Cinderella Story,Mark Rosman,Teen film|Romantic comedy|Romance Film|Family|Comedy,,/en/a_cinderella_story,2004-07-10
+A Cock and Bull Story,Michael Winterbottom,Mockumentary|Indie film|Comedy|Drama,,/en/a_cock_and_bull_story,2005-07-17
+A Common Thread,Éléonore Faucher,Romance Film|Drama,,/en/a_common_thread,2004-05-14
+A Dirty Shame,John Waters,Sex comedy|Cult film|Parody|Black comedy|Gross out|Gross-out film|Comedy,,/en/a_dirty_shame,2004-09-12
+A Duo Occasion,Pierre Lamoureux,Music video,,/en/a_duo_occasion,2005-11-22
+A Good Year,Ridley Scott,Romantic comedy|Film adaptation|Romance Film|Comedy-drama|Slice of life|Comedy of manners|Comedy|Drama,,/en/a_good_year,2006-09-09
+A History of Violence,David Cronenberg,Thriller|Psychological thriller|Crime Fiction|Drama,,/en/a_history_of_violence_2005,2005-05-16
+A Hole in My Heart,Lukas Moodysson,Horror|Experimental film|Social problem film|Drama,,/en/ett_hal_i_mitt_hjarta,2004-09-10
+A Knight's Tale,Brian Helgeland,Romantic comedy|Adventure Film|Action Film|Action/Adventure|Historical period drama|Costume Adventure|Comedy|Drama,,/en/a_knights_tale,2001-03-08
+A League of Ordinary Gentlemen,Christopher Browne|Alexander H. Browne,Documentary film|Sports|Culture &amp; Society|Biographical film,,/en/a_league_of_ordinary_gentlemen,2006-03-21
+A Little Trip to Heaven,Baltasar Kormákur,Thriller|Crime Fiction|Black comedy|Indie film|Comedy-drama|Detective fiction|Ensemble Film|Drama,,/en/a_little_trip_to_heaven,2005-12-26
+A Lot like Love,Nigel Cole,Romantic comedy|Romance Film|Comedy-drama|Comedy|Drama,,/en/a_lot_like_love,2005-04-21
+A Love Song for Bobby Long,Shainee Gabel,Film adaptation|Melodrama|Drama,,/en/a_love_song_for_bobby_long,2004-09-02
+"A Man, a Real One",Arnaud Larrieu|Jean-Marie Larrieu,Comedy|Drama,,/en/a_man_a_real_one,2003-05-28
+A Midsummer Night's Rave,Gil Cates Jr.,Romance Film|Romantic comedy|Teen film|Comedy|Drama,,/en/a_midsummer_nights_rave,
+A Mighty Wind,Christopher Guest,Mockumentary|Parody|Musical|Musical comedy|Comedy,,/en/a_mighty_wind,2003-03-12
+A Perfect Day,Khalil Joreige|Joana Hadjithomas,World cinema|Drama,,/en/a_perfect_day,
+A Prairie Home Companion,Robert Altman,Musical comedy|Drama,,/en/a_prairie_home_companion_2006,2006-02-12
+A Ring of Endless Light,Greg Beeman,Drama,,/en/a_ring_of_endless_light_2002,2002-08-23
+A Scanner Darkly,Richard Linklater,Science Fiction|Dystopia|Animation|Future noir|Film adaptation|Thriller|Drama,,/en/a_scanner_darkly_2006,2006-07-07
+A Short Film About John Bolton,Neil Gaiman,Documentary film|Short Film|Black comedy|Indie film|Mockumentary|Graphic &amp; Applied Arts|Comedy|Biographical film,,/en/a_short_film_about_john_bolton,
+A Shot in the West,Bob Kelly,Western|Short Film,,/en/a_shot_in_the_west,2006-07-16
+A Sound of Thunder,Peter Hyams,Science Fiction|Adventure Film|Thriller|Action Film|Apocalyptic and post-apocalyptic fiction|Time travel,,/en/a_sound_of_thunder_2005,2005-05-15
+A State of Mind,Daniel Gordon,Documentary film|Political cinema|Sports,,/en/a_state_of_mind,2005-08-10
+A Time for Drunken Horses,Bahman Ghobadi,World cinema|War film|Drama,,/en/a_time_for_drunken_horses,
+À ton image,Aruna Villiers,Thriller|Science Fiction,,/en/a_ton_image,2004-05-26
+A Very Long Engagement,Jean-Pierre Jeunet,War film|Romance Film|World cinema|Drama,,/en/a_very_long_engagement,2004-10-27
+A View from Eiffel Tower,Nikola VukÄević,Drama,,/en/a_view_from_the_eiffel_tower,
+A Walk to Remember,Adam Shankman,Coming of age|Romance Film|Drama,,/en/a_walk_to_remember,2002-01-23
+A.I. Artificial Intelligence,Steven Spielberg,Science Fiction|Future noir|Adventure Film|Drama,,/en/a_i,2001-06-26
+a/k/a Tommy Chong,Josh Gilbert,Documentary film|Culture &amp; Society|Law &amp; Crime|Biographical film,,/en/a_k_a_tommy_chong,2006-06-14
+Aalvar,Chella,Action Film|Tamil cinema|World cinema,,/en/aalvar,2007-01-12
+Aap Ki Khatir,Dharmesh Darshan,Romance Film|Romantic comedy|Bollywood|Drama,,/en/aap_ki_khatir,2006-08-25
+Aaru,Hari,Thriller|Action Film|Drama|Tamil cinema|World cinema,,/en/aaru_2005,2005-12-09
+Aata,V.N. Aditya,Romance Film|Tollywood|World cinema,,/en/aata,2007-05-09
+Aadhi,Ramana,Thriller|Romance Film|Musical|Action Film|Tamil cinema|World cinema|Drama|Musical Drama,,/en/aathi,2006-01-14
+Aaytha Ezhuthu,Mani Ratnam,Thriller|Political thriller|Tamil cinema|World cinema|Drama,,/en/aayitha_ezhuthu,2004-05-21
+Abandon,Stephen Gaghan,Mystery|Thriller|Psychological thriller|Suspense|Drama,,/en/abandon_2002,2002-10-18
+Abduction: The Megumi Yokota Story,Patty Kim|Chris Sheridan,Documentary film|Political cinema|Culture &amp; Society|Law &amp; Crime,,/en/abduction_the_megumi_yokota_story,
+About a Boy,Chris Weitz|Paul Weitz,Romance Film|Comedy|Drama,,/en/about_a_boy_2002,2002-04-26
+About Schmidt,Alexander Payne,Black comedy|Indie film|Comedy-drama|Tragicomedy|Comedy of manners|Comedy|Drama,,/en/about_schmidt,2002-05-22
+Accepted,Steve Pink,Teen film|Comedy,,/en/accepted,2006-08-18
+Across the Hall,Alex Merkin|Alex Merkin,Short Film|Thriller|Drama,,/en/across_the_hall,
+Adam &amp; Steve,Craig Chester,Romance Film|Romantic comedy|LGBT|Gay Themed|Indie film|Gay|Gay Interest|Comedy,,/en/adam_steve,2005-04-24
+Adam Resurrected,Paul Schrader,Historical period drama|Film adaptation|War film|Drama,,/en/adam_resurrected,2008-08-30
+Adaptation,Spike Jonze,Crime Fiction|Comedy|Drama,,/en/adaptation_2002,2002-12-06
+Address Unknown,Kim Ki-duk,War film|Drama,,/en/address_unknown,2001-06-02
+Adrenaline Rush,Marc Fafard,Documentary film|Short Film,,/en/adrenaline_rush_2002,2002-10-18
+Essential Keys To Better Bowling,,Documentary film|Sports,,/en/essential_keys_to_better_bowling_2006,
+Adventures Into Digital Comics,Sébastien Dumesnil,Documentary film,,/en/adventures_into_digital_comics,
+Ae Fond Kiss...,Ken Loach,Romance Film|Drama,,/en/ae_fond_kiss,2004-02-13
+Aetbaar,Vikram Bhatt,Thriller|Romance Film|Mystery|Horror|Musical|Bollywood|World cinema|Drama|Musical Drama,,/en/aetbaar,2004-01-23
+Aethirree,K. S. Ravikumar,Comedy|Tamil cinema|World cinema,,/en/aethiree,2004-04-23
+After Innocence,Jessica Sanders,Documentary film|Crime Fiction|Political cinema|Culture &amp; Society|Law &amp; Crime|Biographical film,,/en/after_innocence,
+After the Sunset,Brett Ratner,Crime Fiction|Action/Adventure|Action Film|Crime Thriller|Heist film|Caper story|Crime Comedy|Comedy,,/en/after_the_sunset,2004-11-10
+Aftermath,Thomas Farone,Crime Fiction|Thriller,,/en/aftermath_2007,2013-03-01
+Against the Ropes,Charles S. Dutton,Biographical film|Sports|Drama,,/en/against_the_ropes,2004-02-20
+Agent Cody Banks 2: Destination London,Kevin Allen,Adventure Film|Action Film|Family|Action/Adventure|Spy film|Children's/Family|Family-Oriented Adventure|Comedy,,/en/agent_cody_banks_2_destination_london,2004-03-12
+Agent One-Half,Brian Bero,Comedy,,/en/agent_one-half,
+Agnes and His Brothers,Oskar Roehler,Drama|Comedy,,/en/agnes_and_his_brothers,2004-09-05
+Mother of Mine,Klaus Härö,War film|Drama,,/en/aideista_parhain,2005-08-25
+Aileen: Life and Death of a Serial Killer,Nick Broomfield|Joan Churchill,Documentary film|Crime Fiction|Political drama,,/en/aileen_life_and_death_of_a_serial_killer,2003-05-10
+Air,Osamu Dezaki,Fantasy|Anime|Animation|Japanese Movies|Drama,,/en/air_2005,2005-02-05
+Air Bud: Seventh Inning Fetch,Robert Vince,Family|Sports|Comedy|Drama,,/en/air_bud_seventh_inning_fetch,2002-02-21
+Air Bud: Spikes Back,Mike Southon,Family|Sports|Comedy,,/en/air_bud_spikes_back,2003-06-24
+Air Buddies,Robert Vince,Family|Animal Picture|Children's/Family|Family-Oriented Adventure|Comedy,,/en/air_buddies,2006-12-10
+Aitraaz,Abbas Burmawalla|Mustan Burmawalla,Trial drama|Thriller|Bollywood|World cinema|Drama,,/en/aitraaz,2004-11-12
+AKA,Duncan Roy,LGBT|Indie film|Historical period drama|Drama,,/en/aka_2002,2002-01-19
+Aakasha Gopuram,K.P.Kumaran,Romance Film|Drama|Malayalam Cinema|World cinema,,/en/aakasha_gopuram,2008-08-22
+Jodhaa Akbar,Ashutosh Gowariker,Biographical film|Romance Film|Musical|World cinema|Adventure Film|Action Film|Historical fiction|Musical Drama|Drama,,/en/akbar-jodha,2008-02-13
+Akeelah and the Bee,Doug Atchison,Drama,,/en/akeelah_and_the_bee,2006-03-16
+The Reflection,Rakeysh Omprakash Mehra,Horror|Thriller|Mystery|Bollywood|World cinema,,/en/aks,2001-07-13
+Aksar,Anant Mahadevan,Romance Film|World cinema|Thriller|Drama,,/en/aksar,2006-02-03
+Al Franken: God Spoke,Nick Doob|Chris Hegedus,Mockumentary|Documentary film|Political cinema|Culture &amp; Society|Biographical film,,/en/al_franken_god_spoke,2006-09-13
+Different,Ashu Trikha,Thriller|Science Fiction|Bollywood|World cinema,,/en/alag,2006-06-16
+Wave,Vikram Kumar,Romance Film|Drama|Comedy|Tamil cinema|World cinema,,/en/alai,2003-09-10
+Waves,Mani Ratnam,Musical|Romance Film|Musical Drama|Drama,,/en/alaipayuthey,2000-04-14
+Alatriste,Agustín Díaz Yanes,Thriller|War film|Adventure Film|Action Film|Drama|Historical fiction,,/en/alatriste,2006-09-01
+Alex &amp; Emma,Rob Reiner,Romantic comedy|Romance Film|Comedy,,/en/alex_emma,2003-06-20
+Alexander,Oliver Stone|Wilhelm Sasnal|Anka Sasnal,War film|Action Film|Adventure Film|Romance Film|Biographical film|Historical fiction|Drama,,/en/alexander_2004,2004-11-16
+Alexandra's Project,Rolf de Heer,Thriller|Suspense|Psychological thriller|Indie film|World cinema|Drama,,/en/alexandras_project,
+Alfie,Charles Shyer,Sex comedy|Remake|Comedy-drama|Romance Film|Romantic comedy|Comedy|Drama,,/en/alfie_2004,2004-10-22
+Ali,Michael Mann,Biographical film|Sports|Historical period drama|Sports films|Drama,,/en/ali_2001,2001-12-11
+Ali G Indahouse,Mark Mylod,Stoner film|Parody|Gross out|Gross-out film|Comedy,,/en/ali_g_indahouse,2002-03-22
+Alien Autopsy,Jonny Campbell,Science Fiction|Mockumentary|Comedy,,/en/alien_autopsy_2006,2006-04-07
+Alien vs. Predator,Paul W. S. Anderson,Science Fiction|Horror|Action Film|Monster movie|Thriller|Adventure Film,,/en/avp_alien_vs_predator,2004-08-12
+AVPR: Aliens vs Predator - Requiem,Colin Strause|Greg Strause,Science Fiction|Action Film|Action/Adventure|Horror|Monster movie|Thriller,,/en/avpr_aliens_vs_predator_requiem,2007-12-25
+Aliens of the Deep,James Cameron|Steven Quale|Steven Quale,Documentary film|Travel|Education|Biological Sciences,,/en/aliens_of_the_deep,2005-01-28
+Alive,Ryuhei Kitamura,Science Fiction|Action Film|Horror|Thriller|World cinema|Action/Adventure|Japanese Movies,,/en/alive_2002,2002-09-12
+All About Lily Chou-Chou,Shunji Iwai,Crime Fiction|Musical|Thriller|Art film|Romance Film|Drama|Musical Drama,,/en/all_about_lily_chou-chou,2001-09-07
+All About the Benjamins,Kevin Bray,Action Film|Crime Fiction|Comedy|Thriller,,/en/all_about_the_benjamins,2002-03-08
+All I Want,Jeffrey Porter,Romantic comedy|Coming of age|Romance Film|Comedy,,/en/all_i_want_2002,2002-09-10
+All Over the Guy,Julie Davis,Indie film|LGBT|Romantic comedy|Romance Film|Gay|Gay Interest|Gay Themed|Comedy,,/en/all_over_the_guy,
+All Souls Day,Jeremy Kasten|Mark A. Altman,Horror|Supernatural|Zombie Film,,/en/all_souls_day_2005,2005-01-25
+All the King's Men,Steven Zaillian,Political drama|Thriller,,/en/all_the_kings_men_2006,2006-09-10
+All the Real Girls,David Gordon Green,Romance Film|Indie film|Coming of age|Drama,,/en/all_the_real_girls,2003-01-19
+Allari Bullodu,Kovelamudi Raghavendra Rao,Comedy|Romance Film|Tollywood|World cinema,,/en/allari_bullodu,
+Allari Pidugu,Jayant Paranji,Drama|Tollywood|World cinema,,/en/allari_pidugu,2005-10-05
+Alles auf Zucker!,Dani Levy,Comedy,,/en/alles_auf_zucker,2004-12-31
+Alley Cats Strike!,Rod Daniel,Family|Sports,,/en/alley_cats_strike,2000-03-18
+Almost Famous,Cameron Crowe,Musical|Comedy-drama|Musical Drama|Road movie|Musical comedy|Comedy|Music|Drama,,/en/almost_famous,2000-09-08
+Almost: Round Three,Matt Hill|Matt Hill,Sports,,/en/almost_round_three,2004-11-10
+Alone and Restless,Michael Thomas Dunn,Drama,,/en/alone_and_restless,
+Alone in the Dark,Uwe Boll,Science Fiction|Horror|Action Film|Thriller|B movie|Action/Adventure,,/en/alone_in_the_dark,2005-01-28
+Along Came Polly,John Hamburg,Romantic comedy|Romance Film|Gross out|Gross-out film|Comedy,,/en/along_came_polly,2004-01-12
+Alpha Dog,Nick Cassavetes,Crime Fiction|Biographical film|Drama,,/en/alpha_dog,2006-01-27
+Amélie,Jean-Pierre Jeunet,Romance Film|Comedy,,/en/amelie,2001-04-25
+America: Freedom to Fascism,Aaron Russo,Documentary film|Political cinema|Culture &amp; Society,,/en/america_freedom_to_fascism,2006-07-28
+America's Sweethearts,Joe Roth,Romantic comedy|Romance Film|Comedy,,/en/americas_sweethearts,2001-07-17
+American Cowslip,Mark David,Black comedy|Indie film|Comedy,,/en/american_cowslip,2009-07-24
+American Desi,Piyush Dinker Pandya,Indie film|Romance Film|Romantic comedy|Musical comedy|Teen film|Comedy,,/en/american_desi,
+Bolt,Chris Williams|Byron Howard,Family|Adventure Film|Animation|Comedy,,/en/american_dog,2008-11-17
+American Dreamz,Paul Weitz,Political cinema|Parody|Political satire|Media Satire|Comedy,,/en/american_dreamz,2006-04-21
+American Gangster,Ridley Scott,Crime Fiction|War film|Crime Thriller|Historical period drama|Biographical film|Crime Drama|Gangster Film|True crime|Drama,,/en/american_gangster,2007-10-19
+American Gun,Aric Avelino,Indie film|Drama,,/en/american_gun,2005-09-15
+American Hardcore,Paul Rachman,Music|Documentary film|Rockumentary|Punk rock|Biographical film,,/en/american_hardcore_2006,2006-03-11
+American Outlaws,Les Mayfield,Western|Costume drama|Action/Adventure|Action Film|Revisionist Western|Comedy Western|Comedy,,/en/american_outlaws,2001-08-17
+American Pie Presents: The Naked Mile,Joe Nussbaum,Comedy,,/en/american_pie_the_naked_mile,2006-12-07
+American Pie 2,James B. Rogers,Romance Film|Comedy,,/en/american_pie_2,2001-08-06
+American Pie Presents: Band Camp,Steve Rash,Comedy,,/en/american_pie_presents_band_camp,2005-10-31
+American Psycho,Mary Harron,Black comedy|Slasher|Thriller|Horror|Psychological thriller|Crime Fiction|Horror comedy|Comedy|Drama,,/en/american_psycho_2000,2000-01-21
+American Splendor,Shari Springer Berman|Robert Pulcini,Indie film|Biographical film|Comedy-drama|Marriage Drama|Comedy|Drama,,/en/american_splendor_2003,2003-01-20
+American Wedding,Jesse Dylan,Romance Film|Comedy,,/en/american_wedding,2003-07-24
+Americano,Kevin Noland,Romance Film|Comedy|Drama,,/en/americano_2005,2005-01-07
+Amma Nanna O Tamila Ammayi,Puri Jagannadh,Sports|Tollywood|World cinema|Drama,,/en/amma_nanna_o_tamila_ammayi,2003-04-19
+Amores perros,Alejandro González Iñárritu,Thriller|Drama,,/en/amores_perros,2000-05-14
+Amrutham,Sibi Malayil,Drama|Malayalam Cinema|World cinema,,/en/amrutham,2004-12-24
+An American Crime,Tommy O'Haver,Crime Fiction|Biographical film|Indie film|Drama,,/en/an_american_crime,2007-01-19
+An American Haunting,Courtney Solomon,Horror|Mystery|Thriller,,/en/an_american_haunting,2005-11-05
+An American Tail: The Mystery of the Night Monster,Larry Latham,Fantasy|Animated cartoon|Animation|Music|Family|Adventure Film|Children's Fantasy|Children's/Family|Family-Oriented Adventure,,/en/an_american_tail_the_mystery_of_the_night_monster,2000-07-25
+An Evening with Kevin Smith,J.M. Kenny,Documentary film|Stand-up comedy|Indie film|Film &amp; Television History|Comedy|Biographical film|Media studies,,/en/an_evening_with_kevin_smith,
+An Evening with Kevin Smith 2: Evening Harder,J.M. Kenny,Documentary film,,/en/an_evening_with_kevin_smith_2006,
+An Everlasting Piece,Barry Levinson,Comedy,,/en/an_everlasting_piece,2000-12-25
+An Extremely Goofy Movie,Ian Harrowell|Douglas McCarthy,Animation|Coming of age|Animated Musical|Children's/Family|Comedy,,/en/an_extremely_goofy_movie,2000-02-29
+An Inconvenient Truth,Davis Guggenheim,Documentary film,,/en/an_inconvenient_truth,2006-01-24
+An Unfinished Life,Lasse Hallström,Melodrama|Drama,,/en/an_unfinished_life,2005-08-19
+Anacondas: The Hunt for the Blood Orchid,Dwight H. Little,Thriller|Adventure Film|Horror|Action Film|Action/Adventure|Natural horror film|Jungle Film,,/en/anacondas_the_hunt_for_the_blood_orchid,2004-08-25
+Anal Pick-Up,Decklin,Pornographic film|Gay pornography,,/en/anal_pick-up,
+Analyze That,Harold Ramis,Buddy film|Crime Comedy|Gangster Film|Comedy,,/en/analyze_that,2002-12-06
+Anamorph,H.S. Miller,Psychological thriller|Crime Fiction|Thriller|Mystery|Crime Thriller|Suspense,,/en/anamorph,
+Anand,Sekhar Kammula,Musical|Comedy|Drama|Musical comedy|Musical Drama|Tollywood|World cinema,,/en/anand_2004,2004-10-15
+Anbe Aaruyire,S. J. Surya,Romance Film|Tamil cinema|World cinema|Drama,,/en/anbe_aaruyire,2005-08-15
+Love is God,Sundar C.,Musical|Musical comedy|Comedy|Adventure Film|Tamil cinema|World cinema|Drama|Musical Drama,,/en/anbe_sivam,2003-01-14
+Ancanar,Sam R. Balcomb|Raiya Corsiglia,Fantasy|Adventure Film|Action/Adventure,,/en/ancanar,
+Anchorman: The Legend of Ron Burgundy,Adam McKay,Comedy,,/en/anchorman_the_legend_of_ron_burgundy,2004-06-28
+Andaaz,Raj Kanwar,Musical|Romance Film|Drama|Musical Drama,,/en/andaaz,2003-05-23
+Andarivaadu,Srinu Vaitla,Comedy,,/en/andarivaadu,2005-06-03
+Andhrawala,Puri Jagannadh|V.V.S. Ram,Adventure Film|Action Film|Tollywood|Drama,,/en/andhrawala,2004-01-01
+Ang Tanging Ina,Wenn V. Deramas,Comedy|Drama,,/en/ang_tanging_ina,2003-05-28
+Angel Eyes,Luis Mandoki,Romance Film|Crime Fiction|Drama,,/en/angel_eyes,2001-05-18
+Angel-A,Luc Besson,Romance Film|Fantasy|Comedy|Romantic comedy|Drama,,/en/angel-a,2005-12-21
+Angels &amp; Demons,Ron Howard,Thriller|Mystery|Crime Fiction,,/en/angels_and_demons_2008,2009-05-04
+Virgin Territory,David Leland,Romance Film|Comedy|Adventure Film|Drama,,/en/angels_and_virgins,2007-12-17
+Angels in the Infield,Robert King,Fantasy|Sports|Family|Children's/Family|Heavenly Comedy|Comedy,,/en/angels_in_the_infield,2000-04-09
+Anger Management,Peter Segal,Black comedy|Slapstick|Comedy,,/en/anger_management_2003,2003-03-05
+Angli: The Movie,Mario Busietta,Thriller|Action Film|Crime Fiction,,/en/angli_the_movie,2005-05-28
+Animal Factory,Steve Buscemi,Crime Fiction|Prison film|Drama,,/en/animal_factory,2000-10-22
+Anjaneya,Maharajan|N.Maharajan,Romance Film|Crime Fiction|Drama|World cinema|Tamil cinema,,/en/anjaneya,2003-10-24
+Ankahee,Vikram Bhatt,Romance Film|Thriller|Drama,,/en/ankahee,2006-05-19
+Annapolis,Justin Lin,Romance Film|Sports|Drama,,/en/annapolis_2006,
+Annavaram,Gridhar|Bhimaneni Srinivasa Rao|Sippy,Thriller|Musical|Action Film|Romance Film|Tollywood|World cinema,,/en/annavaram_2007,2006-12-29
+Anniyan,S. Shankar,Horror|Short Film|Psychological thriller|Thriller|Musical Drama|Action Film|Drama,,/en/anniyan,2005-06-10
+Another Gay Movie,Todd Stephens,Parody|Coming of age|LGBT|Gay Themed|Romantic comedy|Romance Film|Gay|Gay Interest|Sex comedy|Comedy|Pornographic film,,/en/another_gay_movie,2006-04-28
+Ant-Man,Peyton Reed,Thriller|Science Fiction|Action/Adventure|Superhero movie|Comedy,,/en/ant_man,2015-07-17
+Anthony Zimmer,Jérôme Salle,Thriller|Romance Film|World cinema|Crime Thriller,,/en/anthony_zimmer,2005-04-27
+Antwone Fisher,Denzel Washington,Romance Film|Biographical film|Drama,,/en/antwone_fisher_2003,2002-09-12
+Anukokunda Oka Roju,Chandra Sekhar Yeleti,Thriller|Horror|Tollywood|World cinema,,/en/anukokunda_oka_roju,2005-06-30
+Anus Magillicutty,Morey Fineburgh,B movie|Romance Film|Comedy,,/en/anus_magillicutty,2003-04-15
+Any Way the Wind Blows,Tom Barman,Comedy-drama,,/en/any_way_the_wind_blows,2003-05-17
+Anything Else,Woody Allen,Romantic comedy|Romance Film|Comedy,,/en/anything_else,2003-08-27
+Apasionados,Juan José Jusid,Romantic comedy|Romance Film|World cinema|Comedy|Drama,,/en/apasionados,2002-06-06
+Apocalypto,Mel Gibson,Action Film|Adventure Film|Epic film|Thriller|Drama,,/en/apocalypto,2006-12-08
+April's Shower,Trish Doolan,Romantic comedy|Indie film|Romance Film|LGBT|Gay|Gay Interest|Gay Themed|Sex comedy|Comedy|Drama,,/en/aprils_shower,2006-01-13
+Aquamarine,Elizabeth Allen Rosenbaum,Coming of age|Teen film|Romance Film|Family|Fantasy|Fantasy Comedy|Comedy,,/en/aquamarine_2006,2006-02-26
+Arabian Nights,Steve Barron,Family|Fantasy|Adventure Film,,/en/arabian_nights,2000-04-30
+Aragami,Ryuhei Kitamura,Thriller|Action/Adventure|World cinema|Japanese Movies|Action Film|Drama,,/en/aragami,2003-03-27
+Arahan,Ryoo Seung-wan,Action Film|Comedy|Korean drama|East Asian cinema|World cinema,,/en/arahan,2004-04-30
+Ararat,Atom Egoyan,LGBT|Political drama|War film|Drama,,/en/ararat,2002-05-20
+Are We There Yet,Brian Levant,Family|Adventure Film|Romance Film|Comedy|Drama,,/en/are_we_there_yet,2005-01-21
+Arinthum Ariyamalum,Vishnuvardhan,Crime Fiction|Family|Romance Film|Comedy|Tamil cinema|World cinema|Drama,,/en/arinthum_ariyamalum,2005-05-20
+Arisan!,Nia Dinata,Comedy|Drama,,/en/arisan,2003-12-10
+Arjun,Gunasekhar|J. Hemambar,Action Film|Tollywood|World cinema,,/en/arjun_2004,2004-08-18
+Armaan,Honey Irani,Romance Film|Family|Drama,,/en/armaan,2003-05-16
+Around the Bend,Jordan Roberts,Family Drama|Comedy-drama|Road movie|Drama,,/en/around_the_bend,2004-10-08
+Around the World in 80 Days,Frank Coraci,Adventure Film|Action Film|Family|Western|Romance Film|Comedy,,/en/around_the_world_in_80_days_2004,2004-06-13
+Art of the Devil 2,Pasith Buranajan|Seree Phongnithi|Yosapong Polsap|Putipong Saisikaew|Art Thamthrakul|Kongkiat Khomsiri|Isara Nadee,Horror|Slasher|Fantasy|Mystery,,/en/art_of_the_devil_2,2005-12-01
+Art School Confidential,Terry Zwigoff,Comedy-drama,,/en/art_school_confidential,
+Arul,Hari,Musical|Action Film|Tamil cinema|World cinema|Drama|Musical Drama,,/en/arul,2004-05-01
+Aarya,Balasekaran,Romance Film|Drama|Tamil cinema|World cinema,,/en/arya_2007,2007-08-10
+Arya,Sukumar,Musical|Romance Film|Romantic comedy|Musical comedy|Comedy|Drama|Musical Drama|World cinema|Tollywood,,/en/arya_2004,2004-05-07
+Aryan: Unbreakable,Abhishek Kapoor,Action Film|Drama,,/en/aryan_2006,2006-12-05
+As It Is in Heaven,Kay Pollak,Musical|Comedy|Romance Film|Drama|Musical comedy|Musical Drama|World cinema,,/en/as_it_is_in_heaven,2004-08-20
+Ashok,Surender Reddy,Action Film|Romance Film|Drama|Tollywood|World cinema,,/en/ashok,2006-07-13
+Ask the Dust,Robert Towne,Historical period drama|Film adaptation|Romance Film|Drama,,/en/ask_the_dust_2006,2006-02-02
+Ashoka the Great,Santosh Sivan,Action Film|Romance Film|War film|Epic film|Musical|Bollywood|World cinema|Drama|Musical Drama,,/en/asoka,2001-09-13
+Assault on Precinct 13,Jean-François Richet,Thriller|Action Film|Remake|Crime Fiction|Drama,,/en/assault_on_precinct_13_2005,2005-01-19
+Astitva,Mahesh Manjrekar,Art film|Bollywood|World cinema|Drama,,/en/astitva,2000-10-06
+Asylum,David Mackenzie,Film adaptation|Romance Film|Thriller|Drama,,/en/asylum_2005,2005-08-12
+Atanarjuat: The Fast Runner,Zacharias Kunuk,Fantasy|Drama,,/en/atanarjuat,2001-05-13
+Athadu,Trivikram Srinivas,Action Film|Thriller|Musical|Romance Film|Tollywood|World cinema,,/en/athadu,2005-08-10
+ATL,Chris Robinson,Coming of age|Comedy|Drama,,/en/atl_2006,2006-03-28
+Atlantis: The Lost Empire,Gary Trousdale|Kirk Wise,Adventure Film|Science Fiction|Family|Animation,,/en/atlantis_the_lost_empire,2001-06-03
+Atonement,Joe Wright,Romance Film|War film|Mystery|Drama|Music,,/en/atonement_2007,2007-08-28
+Attahasam,Saran,Action Film|Thriller|Tamil cinema|World cinema|Drama,,/en/attagasam,2004-11-12
+Attila,Dick Lowry,Adventure Film|History|Action Film|War film|Historical fiction|Biographical film,,/en/attila_2001,
+Austin Powers: Goldmember,Jay Roach,Action Film|Crime Fiction|Comedy,,/en/austin_powers_goldmember,2002-07-22
+Australian Rules,Paul Goldman,Drama,,/en/australian_rules,
+Oram Po,Pushkar|Gayatri,Action Film|Comedy|Tamil cinema|World cinema|Drama,,/en/auto,2007-02-16
+Auto Focus,Paul Schrader|Larry Karaszewski,Biographical film|Indie film|Crime Fiction|Drama,,/en/auto_focus,2002-09-08
+Autograph,Cheran,Musical|Romance Film|Drama|Musical Drama|Tamil cinema|World cinema,,/en/autograph_2004,2004-02-14
+Avalon,Mamoru Oshii,Science Fiction|Thriller|Action Film|Adventure Film|Fantasy|Drama,,/en/avalon_2001,2001-01-20
+Avatar,James Cameron,Science Fiction|Adventure Film|Fantasy|Action Film,,/en/avatar_2009,2009-12-10
+Avenging Angelo,Martyn Burke,Action Film|Romance Film|Crime Fiction|Action/Adventure|Thriller|Romantic comedy|Crime Comedy|Gangster Film|Comedy,,/en/avenging_angelo,2002-08-30
+Awake,Joby Harold,Thriller|Crime Fiction|Mystery,,/en/awake_2007,2007-11-30
+Awara Paagal Deewana,Vikram Bhatt,Action Film|World cinema|Musical|Crime Fiction|Musical comedy|Comedy|Bollywood|Drama|Musical Drama,,/en/awara_paagal_deewana,2002-06-20
+Awesome; I Fuckin' Shot That!,Adam Yauch,Concert film|Rockumentary|Hip hop film|Documentary film|Indie film,,/en/awesome_i_fuckin_shot_that,2006-01-06
+Azumi,Ryuhei Kitamura,Action Film|Epic film|Adventure Film|Fantasy|Thriller,,/en/azumi,2003-05-10
+Æon Flux,Karyn Kusama,Science Fiction|Dystopia|Action Film|Thriller|Adventure Film,,/wikipedia/en_title/$00C6on_Flux_$0028film$0029,2005-12-01
+Baabul,Ravi Chopra,Musical|Family|Romance Film|Bollywood|World cinema|Drama|Musical Drama,,/en/baabul,2006-12-08
+BaadAsssss Cinema,Isaac Julien,Indie film|Documentary film|Blaxploitation film|Action/Adventure|Film &amp; Television History|Biographical film,,/en/baadasssss_cinema,2002-08-14
+Baadasssss!,Mario Van Peebles,Indie film|Biographical film|Docudrama|Historical period drama|Drama,,/en/baadasssss,2003-09-07
+Babel,Alejandro González Iñárritu,Indie film|Political drama|Drama,,/en/babel_2006,2006-05-23
+Baby Boy,John Singleton,Coming of age|Crime Fiction|Drama,,/en/baby_boy,2001-06-21
+Back by Midnight,Harry Basil,Prison film|Comedy,,/en/back_by_midnight,2005-01-25
+Back to School with Franklin,Arna Selznick,Family|Animation|Educational film,,/en/back_to_school_with_franklin,2003-08-19
+Bad Boys II,Michael Bay,Action Film|Crime Fiction|Thriller|Comedy,,/en/bad_boys_ii,2003-07-09
+Bad Company,Joel Schumacher,Spy film|Action/Adventure|Action Film|Thriller|Comedy,,/wikipedia/ru_id/1598664,2002-04-26
+Bad Education,Pedro Almodóvar,Mystery|Drama,,/en/bad_education,2004-03-19
+Bad Eggs,Tony Martin,Comedy,,/en/bad_eggs,
+Bad News Bears,Richard Linklater,Family|Sports|Comedy,,/en/bad_news_bears,2005-07-22
+Bad Santa,Terry Zwigoff,Black comedy|Crime Fiction|Comedy,,/en/bad_santa,2003-11-26
+Badal,Raj Kanwar,Musical|Romance Film|Crime Fiction|Drama|Musical Drama,,/en/badal,2000-02-11
+Baghdad ER,Jon Alpert|Matthew O'Neill,Documentary film|Culture &amp; Society|War film|Biographical film,,/en/baghdad_er,2006-08-29
+Baise Moi,Virginie Despentes|Coralie Trinh Thi,Erotica|Thriller|Erotic thriller|Art film|Romance Film|Drama|Road movie,,/en/baise_moi,2000-06-28
+Bait,Antoine Fuqua,Thriller|Crime Fiction|Adventure Film|Action Film|Action/Adventure|Crime Thriller|Comedy|Drama,,/en/bait_2000,2000-09-15
+Bala,Deepak,Drama|Tamil cinema|World cinema,,/en/bala_2002,2002-12-13
+Ballistic: Ecks vs. Sever,Wych Kaosayananda,Spy film|Thriller|Action Film|Suspense|Action/Adventure|Action Thriller|Glamorized Spy Film,,/en/ballistic_ecks_vs_sever,2002-09-20
+Balu ABCDEFG,A. Karunakaran,Romance Film|Tollywood|World cinema|Drama,,/en/balu_abcdefg,2005-01-06
+The Little Chinese Seamstress,Dai Sijie,Romance Film|Comedy-drama|Biographical film|Drama,,/en/balzac_and_the_little_chinese_seamstress_2002,2002-05-16
+Bambi II,Brian Pimental,Animation|Family|Adventure Film|Coming of age|Children's/Family|Family-Oriented Adventure,,/en/bambi_ii,2006-01-26
+Bamboozled,Spike Lee,Satire|Indie film|Music|Black comedy|Comedy-drama|Media Satire|Comedy|Drama,,/en/bamboozled,2000-10-06
+Bandidas,Espen Sandberg|Joachim Rønning,Western|Action Film|Crime Fiction|Buddy film|Comedy|Adventure Film,,/en/bandidas,2006-01-18
+Bandits,Barry Levinson,Romantic comedy|Crime Fiction|Buddy film|Romance Film|Heist film|Comedy|Drama,,/en/bandits,2001-10-12
+Bangaram,Dharani,Action Film|Crime Fiction|Drama,,/en/bangaram,2006-05-03
+Bangkok Loco,Pornchai Hongrattanaporn,Musical|Musical comedy|Comedy,,/en/bangkok_loco,2004-10-07
+Baran,Majid Majidi,Romance Film|Adventure Film|World cinema|Drama,,/en/baran,2001-01-31
+Barbershop,Tim Story,Ensemble Film|Workplace Comedy|Comedy,,/en/barbershop,2002-08-07
+Bareback Mountain,Afton Nills,Pornographic film|Gay pornography,,/en/bareback_mountain,
+Barnyard,Steve Oedekerk,Family|Animation|Comedy,,/wikipedia/pt/Barnyard,2006-08-04
+Barricade,Timo Rose,Slasher|Horror,,/en/barricade_2007,
+Bas Itna Sa Khwaab Hai,Goldie Behl,Romance Film|Bollywood|World cinema,,/en/bas_itna_sa_khwaab_hai,2001-07-06
+Basic,John McTiernan,Thriller|Action Film|Mystery,,/en/basic_2003,2003-03-28
+Basic emotions,Thomas Moon|Julie Pham|Georgia Lee,Drama,,/en/basic_emotions,2004-09-09
+Basic Instinct 2,Michael Caton-Jones,Thriller|Erotic thriller|Psychological thriller|Mystery|Crime Fiction|Horror,,/en/basic_instinct_2,2006-03-31
+Battle In Heaven,Carlos Reygadas,Drama,,/en/batalla_en_el_cielo,2005-05-15
+Batman Begins,Christopher Nolan,Action Film|Crime Fiction|Adventure Film|Film noir|Drama,,/en/batman_begins,2005-06-10
+Batman Beyond: Return of the Joker,Curt Geda,Science Fiction|Animation|Superhero movie|Action Film,,/en/batman_beyond_return_of_the_joker,2000-12-12
+Batman: Dead End,Sandy Collora,Indie film|Short Film|Fan film,,/en/batman_dead_end,2003-07-19
+Batman: Mystery of the Batwoman,Curt Geda|Tim Maltby,Animated cartoon|Animation|Family|Superhero movie|Action/Adventure|Fantasy|Short Film|Fantasy Adventure,,/en/batman_mystery_of_the_batwoman,2003-10-21
+Battle Royale II: Requiem,Kenta Fukasaku|Kinji Fukasaku,Thriller|Action Film|Science Fiction|Drama,,/en/batoru_rowaiaru_ii_chinkonka,2003-07-05
+Battlefield Baseball,Yūdai Yamaguchi,Martial Arts Film|Horror|World cinema|Sports|Musical comedy|Japanese Movies|Horror comedy|Comedy,,/en/battlefield_baseball,2003-07-19
+BBS: The Documentary,Jason Scott Sadofsky,Documentary film,,/en/bbs_the_documentary,
+Be Cool,F. Gary Gray,Crime Fiction|Crime Comedy|Comedy,,/en/be_cool,2005-03-04
+Be Kind Rewind,Michel Gondry,Farce|Comedy of Errors|Comedy|Drama,,/en/be_kind_rewind,2008-01-20
+Be with Me,Eric Khoo,Indie film|LGBT|World cinema|Art film|Romance Film|Drama,,/en/be_with_me,2005-05-12
+Beah: A Black Woman Speaks,Lisa Gay Hamilton,Documentary film|History|Biographical film,,/en/beah_a_black_woman_speaks,2003-08-22
+Beastly Boyz,David DeCoteau,LGBT|Horror|B movie|Teen film,,/en/beastly_boyz,
+Beauty Shop,Bille Woodruff,Comedy,,/en/beauty_shop,2005-03-24
+Bedazzled,Harold Ramis,Romantic comedy|Fantasy|Black comedy|Romance Film|Comedy,,/en/bedazzled_2000,2000-10-19
+Bee Movie,Steve Hickner|Simon J. Smith,Family|Adventure Film|Animation|Comedy,,/en/bee_movie,2007-10-28
+Bee Season,David Siegel|Scott McGehee,Film adaptation|Coming of age|Family Drama|Drama,,/en/bee_season_2005,2005-11-11
+Artie Lange's Beer League,Frank Sebastiano,Sports|Indie film|Comedy,,/en/beer_league,2006-09-15
+Beer: The Movie,Peter Hoare,Indie film|Cult film|Parody|Bloopers &amp; Candid Camera|Comedy,,/en/beer_the_movie,2006-05-16
+Beerfest,Jay Chandrasekhar,Absurdism|Comedy,,/en/beerfest,2006-08-25
+Before Night Falls,Julian Schnabel,LGBT|Gay Themed|Political drama|Gay|Gay Interest|Biographical film|Drama,,/en/before_night_falls_2001,2000-09-03
+Before Sunset,Richard Linklater,Romance Film|Indie film|Comedy|Drama,,/en/before_sunset,2004-02-10
+Behind Enemy Lines,John Moore,Thriller|Action Film|War film|Action/Adventure|Drama,,/en/behind_enemy_lines,2001-11-17
+Behind the Mask,Shannon Keith,Documentary film|Indie film|Political cinema|Crime Fiction,,/en/behind_the_mask_2006,2006-03-21
+Behind the Sun,Walter Salles,Drama,,/en/behind_the_sun_2001,2001-09-06
+Being Cyrus,Homi Adajania,Thriller|Black comedy|Mystery|Psychological thriller|Crime Fiction|Drama,,/en/being_cyrus,2005-11-08
+Being Julia,István Szabó,Romance Film|Romantic comedy|Comedy-drama|Comedy|Drama,,/en/being_julia,2004-09-03
+Bekhal's Tears,Lauand Omar,Drama,,/en/bekhals_tears,
+Believe in Me,Robert Collector,Sports|Family Drama|Family|Drama,,/en/believe_in_me,
+Belly of the Beast,Ching Siu-tung,Action Film|Thriller|Political thriller|Martial Arts Film|Action/Adventure|Crime Thriller|Action Thriller|Chinese Movies,,/en/belly_of_the_beast,2003-12-30
+Bellyful,Melvin Van Peebles,Indie film|Satire|Comedy,,/en/bellyful,2000-06-28
+Bend It Like Beckham,Gurinder Chadha,Coming of age|Indie film|Teen film|Sports|Romance Film|Comedy-drama|Comedy|Drama,,/en/bend_it_like_beckham,2002-04-11
+Don't Tempt Me,Agustín Díaz Yanes,Religious Film|Fantasy|Comedy,,/en/bendito_infierno,2001-11-28
+Beneath,Dagen Merrill,Horror|Psychological thriller|Thriller|Supernatural|Crime Thriller,,/en/beneath,2007-08-07
+Beneath Clouds,Ivan Sen,Indie film|Romance Film|Road movie|Social problem film|Drama,,/en/beneath_clouds,2002-02-08
+Beowulf,Robert Zemeckis,Adventure Film|Computer Animation|Fantasy|Action Film|Animation,,/en/beowulf_2007,2007-11-05
+Beowulf &amp; Grendel,Sturla Gunnarsson,Adventure Film|Action Film|Fantasy|Action/Adventure|Film adaptation|World cinema|Historical period drama|Mythological Fantasy|Drama,,/en/beowulf_grendel,2005-09-14
+Best in Show,Christopher Guest,Comedy,,/en/best_in_show,2000-09-08
+"The Best of The Bloodiest Brawls, Vol. 1",,Sports,,/en/the_best_of_the_bloodiest_brawls_vol_1,2006-03-14
+Better Luck Tomorrow,Justin Lin,Coming of age|Teen film|Crime Fiction|Crime Drama|Drama,,/en/better_luck_tomorrow,2003-04-11
+Bettie Page: Dark Angel,Nico B.,Biographical film|Drama,,/en/bettie_page_dark_angel,2004-02-11
+Bewitched,Nora Ephron,Romantic comedy|Fantasy|Romance Film|Comedy,,/en/bewitched_2005,2005-06-24
+Beyond Borders,Martin Campbell,Adventure Film|Historical period drama|Romance Film|War film|Drama,,/en/beyond_borders,2003-10-24
+Beyond Re-Animator,Brian Yuzna,Horror|Science Fiction|Comedy,,/en/beyond_re-animator,2003-04-04
+Beyond the Sea,Kevin Spacey,Musical|Music|Biographical film|Drama|Musical Drama,,/en/beyond_the_sea,2004-09-11
+Bhadra,Boyapati Srinu,Action Film|Tollywood|World cinema|Drama,,/en/bhadra_2005,2005-05-12
+Bhageeratha,Rasool Ellore,Drama|Tollywood|World cinema,,/en/bhageeradha,2005-10-13
+Bheemaa,N. Lingusamy,Action Film|Tamil cinema|World cinema,,/en/bheema,2008-01-14
+Bhoot,Ram Gopal Varma,Horror|Thriller|Bollywood|World cinema,,/en/bhoot,2003-05-17
+Bichhoo,Guddu Dhanoa,Thriller|Action Film|Crime Fiction|Bollywood|World cinema|Drama,,/en/bichhoo,2000-07-07
+Big Eden,Thomas Bezucha,LGBT|Indie film|Romance Film|Comedy-drama|Gay|Gay Interest|Gay Themed|Romantic comedy|Drama,,/en/big_eden,2000-04-18
+Big Fat Liar,Shawn Levy,Family|Adventure Film|Comedy,,/en/big_fat_liar,2002-02-02
+Big Fish,Tim Burton,Fantasy|Adventure Film|War film|Comedy-drama|Film adaptation|Family Drama|Fantasy Comedy|Comedy|Drama,,/en/big_fish,2003-12-10
+Big Girls Don't Cry,Maria von Heland,World cinema|Melodrama|Teen film|Drama,,/en/big_girls_dont_cry_2002,2002-10-24
+"Big Man, Little Love",Handan İpekçi,Drama,,/en/big_man_little_love,2001-10-19
+Big Momma's House,Raja Gosnell,Action Film|Crime Fiction|Comedy,,/en/big_mommas_house,2000-05-31
+Big Momma's House 2,John Whitesell,Crime Fiction|Slapstick|Action Film|Action/Adventure|Thriller|Farce|Comedy,,/en/big_mommas_house_2,2006-01-26
+"Big Toys, No Boys 2",Tristán,Pornographic film,,/en/big_toys_no_boys_2,
+Big Trouble,Barry Sonnenfeld,Crime Fiction|Black comedy|Action Film|Action/Adventure|Gangster Film|Comedy,,/en/big_trouble_2002,2002-04-05
+Bigger Than the Sky,Al Corley,Romantic comedy|Romance Film|Comedy-drama|Comedy|Drama,,/en/bigger_than_the_sky,2005-02-18
+Biggie &amp; Tupac,Nick Broomfield,Documentary film|Hip hop film|Rockumentary|Indie film|Crime Fiction|True crime|Biographical film,,/en/biggie_tupac,2002-01-11
+Meet Bill,Bernie Goldmann|Melisa Wallick,Romantic comedy|Romance Film|Comedy|Drama,,/en/bill_2007,2007-09-08
+Billy Elliot,Stephen Daldry,Comedy|Music|Drama,,/en/billy_elliot,2000-05-19
+Bionicle 3: Web of Shadows,David Molina|Terry Shakespeare,Fantasy|Adventure Film|Animation|Family|Computer Animation|Science Fiction,,/en/bionicle_3_web_of_shadows,2005-10-11
+Bionicle 2: Legends of Metru Nui,David Molina|Terry Shakespeare,Fantasy|Adventure Film|Animation|Family|Computer Animation|Science Fiction|Children's Fantasy|Children's/Family|Fantasy Adventure,,/en/bionicle_2_legends_of_metru_nui,2004-10-19
+Bionicle: Mask of Light: The Movie,David Molina|Terry Shakespeare,Family|Fantasy|Animation|Adventure Film|Computer Animation|Science Fiction|Children's Fantasy|Children's/Family|Fantasy Adventure,,/en/bionicle_mask_of_light,2003-09-16
+Birth,Jonathan Glazer,Mystery|Indie film|Romance Film|Thriller|Drama,,/en/birth_2004,2004-09-08
+Birthday Girl,Jez Butterworth,Black comedy|Thriller|Indie film|Erotic thriller|Crime Fiction|Romance Film|Comedy|Drama,,/en/birthday_girl,2002-02-01
+"Bite Me, Fanboy",Mat Nastos,Comedy,,/en/bite_me_fanboy,2005-06-01
+Bitter Jester,Maija DiGiorgio,Indie film|Documentary film|Stand-up comedy|Culture &amp; Society|Comedy|Biographical film,,/en/bitter_jester,2003-02-26
+Black,Sanjay Leela Bhansali,Family|Drama,,/en/black_2005,2005-02-04
+Black and White,Craig Lahiff,Trial drama|Crime Fiction|World cinema|Drama,,/en/black_and_white_2002,2002-10-31
+Black Book,Paul Verhoeven,Thriller|War film|Drama,,/en/black_book_2006,2006-09-01
+Black Christmas,Glen Morgan,Slasher|Teen film|Horror|Thriller,,/wikipedia/fr/Black_Christmas_$0028film$002C_2006$0029,2006-12-15
+Black Cloud,Ricky Schroder,Indie film|Sports|Drama,,/en/black_cloud,2004-04-30
+Black Friday,Anurag Kashyap,Crime Fiction|Historical drama|Drama,,/en/black_friday_1993,2004-05-20
+Black Hawk Down,Ridley Scott,War film|Action/Adventure|Action Film|History|Combat Films|Drama,,/en/black_hawk_down,2001-12-18
+The Black Hole,Tibor Takács,Science Fiction|Thriller|Television film,,/en/black_hole_2006,2006-06-10
+Black Knight,Gil Junger,Time travel|Adventure Film|Costume drama|Science Fiction|Fantasy|Adventure Comedy|Fantasy Comedy|Comedy,,/en/black_knight_2001,2001-11-15
+Blackball,Mel Smith,Sports|Family Drama|Comedy|Drama,,/en/blackball_2005,2005-02-11
+Blackwoods,Uwe Boll,Thriller|Crime Thriller|Psychological thriller|Drama,,/en/blackwoods,
+Blade II,Guillermo del Toro,Thriller|Horror|Science Fiction|Action Film,,/en/blade_ii,2002-03-21
+Blade: Trinity,David S. Goyer,Thriller|Action Film|Horror|Action/Adventure|Superhero movie|Fantasy|Adventure Film|Action Thriller,,/en/blade_trinity,2004-12-07
+Bleach: Memories of Nobody,Noriyuki Abe,Anime|Fantasy|Animation|Action Film|Adventure Film,,/en/bleach_memories_of_nobody,2006-12-16
+Bless the Child,Chuck Russell,Horror|Crime Fiction|Drama|Thriller,,/en/bless_the_child,2000-08-11
+Blind Shaft,Li Yang,Crime Fiction|Drama,,/en/blind_shaft,2003-02-12
+Blissfully Yours,Apichatpong Weerasethakul,Erotica|Romance Film|World cinema|Drama,,/en/blissfully_yours,2002-05-17
+Blood of a Champion,Lawrence Page,Crime Fiction|Sports|Drama,,/en/blood_of_a_champion,2006-03-07
+Blood Rain,Kim Dae-seung,Thriller|Mystery|East Asian cinema|World cinema,,/en/blood_rain,2005-05-04
+Blood Work,Clint Eastwood,Mystery|Crime Thriller|Thriller|Suspense|Crime Fiction|Detective fiction|Drama,,/en/blood_work,2002-08-09
+BloodRayne,Uwe Boll,Horror|Action Film|Fantasy|Adventure Film|Costume drama,,/en/bloodrayne_2006,2005-10-23
+Bloodsport - ECW's Most Violent Matches,,Documentary film|Sports,,/en/bloodsport_ecws_most_violent_matches,2006-02-07
+Bloody Sunday,Paul Greengrass,Political drama|Docudrama|Historical fiction|War film|Drama,,/en/bloody_sunday,2002-01-16
+Blow,Ted Demme,Biographical film|Crime Fiction|Film adaptation|Historical period drama|Drama,,/en/blow,2001-03-29
+Blue Car,Karen Moncrieff,Indie film|Family Drama|Coming of age|Drama,,/en/blue_car,2003-05-02
+Blue Collar Comedy Tour Rides Again,C. B. Harding,Documentary film|Stand-up comedy|Comedy,,/en/blue_collar_comedy_tour_rides_again,2004-12-05
+Blue Collar Comedy Tour: One for the Road,C. B. Harding,Stand-up comedy|Concert film|Comedy,,/en/blue_collar_comedy_tour_one_for_the_road,2006-06-27
+Blue Collar Comedy Tour: The Movie,C. B. Harding,Stand-up comedy|Documentary film|Comedy,,/en/blue_collar_comedy_tour_the_movie,2003-03-28
+Blue Crush,John Stockwell,Teen film|Romance Film|Sports|Drama,,/en/blue_crush,2002-08-08
+Blue Gate Crossing,Yee Chin-yen,Romance Film|Drama,,/en/blue_gate_crossing,2002-09-08
+Blue Milk,William Grammer,Indie film|Short Film|Fan film,,/en/blue_milk,2006-06-20
+Blue State,Marshall Lewy,Indie film|Romance Film|Political cinema|Romantic comedy|Political satire|Road movie|Comedy,,/en/blue_state,
+Blueberry,Jan Kounen,Western|Thriller|Action Film|Adventure Film,,/en/blueberry_2004,2004-02-11
+Blueprint,Rolf Schübel,Science Fiction|Drama,,/en/blueprint_2003,2003-12-08
+Bluffmaster!,Rohan Sippy,Romance Film|Musical|Crime Fiction|Romantic comedy|Musical comedy|Comedy|Bollywood|World cinema|Drama|Musical Drama,,/en/bluffmaster,2005-12-16
+Boa vs. Python,David Flores,Horror|Natural horror film|Monster|Science Fiction|Creature Film,,/en/boa_vs_python,2004-05-24
+Bobby,Emilio Estevez,Political drama|Historical period drama|History|Drama,,/en/bobby,2006-09-05
+Boiler Room,Ben Younger,Crime Fiction|Drama,,/en/boiler_room,2000-01-30
+Bolletjes Blues,Brigit Hillenius|Karin Junger,Musical,,/en/bolletjes_blues,2006-03-23
+Bollywood/Hollywood,Deepa Mehta,Bollywood|Musical|Romance Film|Romantic comedy|Musical comedy|Comedy,,/en/bollywood_hollywood,2002-10-25
+Bomb the System,Adam Bhala Lough,Crime Fiction|Indie film|Coming of age|Drama,,/en/bomb_the_system,
+Bommarillu,Bhaskar,Musical|Romance Film|Drama|Musical Drama|Tollywood|World cinema,,/en/bommarillu,2006-08-09
+"Bon Cop, Bad Cop",Eric Canuel,Crime Fiction|Buddy film|Action Film|Action/Adventure|Thriller|Comedy,,/en/bon_cop_bad_cop,
+Bones,Ernest R. Dickerson,Horror|Blaxploitation film|Action Film,,/en/bones_2001,2001-10-26
+Bonjour Monsieur Shlomi,Shemi Zarhin,World cinema|Family Drama|Comedy-drama|Coming of age|Family|Comedy|Drama,,/en/bonjour_monsieur_shlomi,2003-04-03
+Boogeyman,Stephen T. Kay,Horror|Supernatural|Teen film|Thriller|Mystery|Drama,,/en/boogeyman,2005-02-04
+Boogiepop and Others,Ryu Kaneda,Animation|Fantasy|Anime|Thriller|Japanese Movies,,/en/boogiepop_and_others_2000,2000-03-11
+Book of Love,Alan Brown,Indie film|Romance Film|Comedy|Drama,,/en/book_of_love_2004,2004-01-18
+Book of Shadows: Blair Witch 2,Joe Berlinger,Horror|Supernatural|Mystery|Psychological thriller|Slasher|Thriller|Ensemble Film|Crime Fiction,,/en/book_of_shadows_blair_witch_2,2000-10-27
+Bimmer,Pyotr Buslov,Crime Fiction|Drama,,/en/boomer,2003-08-02
+Borat: Cultural Learnings of America for Make Benefit Glorious Nation of Kazakhstan,Larry Charles,Comedy,,/wikipedia/de_id/1782985,2006-08-04
+Born into Brothels: Calcutta's Red Light Kids,Zana Briski|Ross Kauffman,Documentary film,,/en/born_into_brothels_calcuttas_red_light_kids,2004-01-17
+Free Radicals,Barbara Albert,World cinema|Romance Film|Art film|Drama,,/en/free_radicals,
+Boss,V.N. Aditya,Musical|Romance Film|Drama|Musical Drama|Tollywood|World cinema,,/en/boss_2006,2006-09-27
+Boss'n Up,Dylan C. Brown,Musical|Indie film|Crime Fiction|Musical Drama|Drama,,/en/bossn_up,2005-06-01
+Bossa Nova,Bruno Barreto,Romance Film|Comedy|Drama,,/en/bossa_nova_2000,2000-02-18
+Bosta,Philippe Aractingi,Musical,,/en/bosta,
+Bowling for Columbine,Michael Moore,Indie film|Documentary film|Political cinema|Historical Documentaries,,/en/bowling_for_columbine,2002-05-15
+Bowling Fun And Fundamentals For Boys And Girls,,Documentary film|Sports,,/en/bowling_fun_and_fundamentals_for_boys_and_girls,
+Boy Eats Girl,Stephen Bradley,Indie film|Horror|Teen film|Creature Film|Zombie Film|Horror comedy|Comedy,,/en/boy_eats_girl,2005-04-06
+Boynton Beach Club,Susan Seidelman,Romantic comedy|Indie film|Romance Film|Comedy-drama|Slice of life|Ensemble Film|Comedy,,/en/boynton_beach_club,2006-08-04
+Boys,S. Shankar,Musical|Romance Film|Comedy|Tamil cinema|World cinema|Drama|Musical comedy|Musical Drama,,/en/boys_2003,2003-08-29
+Brain Blockers,Lincoln Kupchak,Horror|Zombie Film|Horror comedy|Comedy,,/en/brain_blockers,2007-03-15
+Breakin' All the Rules,Daniel Taplitz,Romance Film|Romantic comedy|Comedy of Errors|Comedy,,/en/breakin_all_the_rules,2004-05-14
+Breaking and Entering,Anthony Minghella,Romance Film|Crime Fiction|Drama,,/en/breaking_and_entering,2006-09-13
+Brick,Rian Johnson,Film noir|Indie film|Teen film|Neo-noir|Mystery|Crime Thriller|Crime Fiction|Thriller|Detective fiction|Drama,,/en/brick_2006,2006-04-07
+Bride and Prejudice,Gurinder Chadha,Musical|Romantic comedy|Romance Film|Film adaptation|Comedy of manners|Musical Drama|Musical comedy|Comedy|Drama,,/en/bride_and_prejudice,2004-10-06
+Bridget Jones: The Edge of Reason,Beeban Kidron,Romantic comedy|Romance Film|Comedy,,/en/bridget_jones_the_edge_of_reason,2004-11-08
+Bridget Jones's Diary,Sharon Maguire,Romantic comedy|Film adaptation|Romance Film|Comedy of manners|Comedy|Drama,,/en/bridget_joness_diary_2001,2001-04-04
+Brigham City,Richard Dutcher,Mystery|Indie film|Crime Fiction|Thriller|Crime Thriller|Drama,,/en/brigham_city_2001,
+Bright Young Things,Stephen Fry,Indie film|War film|Comedy-drama|Historical period drama|Comedy of manners|Comedy|Drama,,/en/bright_young_things,2003-10-03
+Brilliant,Roger Cardinal,Thriller,,/wikipedia/en_title/Brilliant_$0028film$0029,2004-02-15
+Bring It On,Peyton Reed,Comedy|Sports,,/en/bring_it_on,2000-08-22
+Bring It On Again,Damon Santostefano,Teen film|Sports|Comedy,,/en/bring_it_on_again,2004-01-13
+Bring It On: All or Nothing,Steve Rash,Teen film|Sports|Comedy,,/en/bring_it_on_all_or_nothing,2006-08-08
+Bringing Down the House,Adam Shankman,Romantic comedy|Screwball comedy|Comedy of Errors|Crime Comedy|Comedy,,/en/bringing_down_the_house,2003-03-07
+Broadway: The Golden Age,Rick McKay,Documentary film|Biographical film,,/en/broadway_the_golden_age,2004-06-11
+Brokeback Mountain,Ang Lee,Romance Film|Epic film|Drama,,/en/brokeback_mountain,2005-09-02
+Broken Allegiance,Nick Hallam,Indie film|Short Film|Fan film,,/en/broken_allegiance,
+Broken Flowers,Jim Jarmusch,Mystery|Road movie|Comedy|Drama,,/en/broken_flowers,2005-08-05
+The Broken Hearts Club: A Romantic Comedy,Greg Berlanti,Romance Film|LGBT|Romantic comedy|Gay Themed|Indie film|Comedy-drama|Gay|Gay Interest|Ensemble Film|Comedy|Drama,,/en/the_broken_hearts_club_a_romantic_comedy,2000-01-29
+Brooklyn Lobster,Kevin Jordan,Indie film|Family Drama|Comedy-drama|Comedy|Drama,,/en/brooklyn_lobster,2005-09-09
+Brother,Takeshi Kitano,Thriller|Crime Fiction,,/en/brother,
+Brother Bear,Aaron Blaise|Robert A. Walker,Family|Fantasy|Animation|Adventure Film,,/en/brother_bear,2003-10-20
+Brother Bear 2,Ben Gluck,Family|Animated cartoon|Fantasy|Adventure Film|Animation,,/en/brother_bear_2,2006-08-29
+Brother 2,Aleksei Balabanov,Crime Fiction|Thriller|Action Film,,/en/brother_2,2000-05-11
+Brotherhood of Blood,Michael Roesch|Peter Scheerer|Sid Haig,Horror|Cult film|Creature Film,,/en/brotherhood_of_blood,
+Brotherhood of the Wolf,Christophe Gans,Martial Arts Film|Adventure Film|Mystery|Science Fiction|Historical fiction|Thriller|Action Film,,/en/brotherhood_of_the_wolf,2001-01-31
+Brothers of the Head,Keith Fulton|Louis Pepe,Indie film|Musical|Film adaptation|Music|Mockumentary|Comedy-drama|Historical period drama|Musical Drama|Drama,,/en/brothers_of_the_head,2005-09-10
+Brown Sugar,Rick Famuyiwa,Musical|Romantic comedy|Coming of age|Romance Film|Musical Drama|Musical comedy|Comedy|Drama,,/en/brown_sugar_2002,2002-10-05
+Bruce Almighty,Tom Shadyac,Comedy|Fantasy|Drama,,/en/bruce_almighty,2003-05-23
+Bubba Ho-Tep,Don Coscarelli,Horror|Parody|Comedy|Mystery|Drama,,/en/bubba_ho-tep,2002-06-09
+Bubble,Steven Soderbergh,Crime Fiction|Mystery|Indie film|Thriller|Drama,,/en/bubble,2005-09-03
+Bubble Boy,Blair Hayes,Romance Film|Teen film|Romantic comedy|Adventure Film|Comedy|Drama,,/en/bubble_boy,2001-08-23
+Buddy Boy,Mark Hanlon,Psychological thriller|Thriller|Indie film|Erotic thriller,,/en/buddy_boy,2000-03-24
+Buffalo Dreams,David Jackson,Western|Teen film|Drama,,/en/buffalo_dreams,2005-03-11
+Buffalo Soldiers,Gregor Jordan,War film|Crime Fiction|Comedy|Thriller|Satire|Indie film|Drama,,/en/buffalo_soldiers,2001-09-08
+Bug,William Friedkin,Thriller|Horror|Indie film|Drama,,/en/bug_2006,2006-05-19
+Bulletproof Monk,Paul Hunter,Martial Arts Film|Fantasy|Action Film|Buddy film|Thriller|Action/Adventure|Action Comedy|Comedy,,/en/bulletproof_monk,2003-04-16
+Bully,Larry Clark,Teen film|Crime Fiction|Thriller|Drama,,/en/bully_2001,2001-06-15
+Bunny,V. V. Vinayak,Musical|Romance Film|World cinema|Tollywood|Musical Drama|Drama,,/en/bunny_2005,2005-04-06
+Bunshinsaba,Ahn Byeong-ki,Horror|World cinema|East Asian cinema,,/en/bunshinsaba,2004-05-14
+Bunty Aur Babli,Shaad Ali,Romance Film|Musical|World cinema|Musical comedy|Comedy|Adventure Film|Crime Fiction,,/en/bunty_aur_babli,2005-05-27
+Bus 174,José Padilha,Documentary film|True crime,,/en/onibus_174,2002-10-22
+Bus Conductor,V. M. Vinu,Comedy|Action Film|Malayalam Cinema|World cinema|Drama,,/en/bus_conductor,2005-12-23
+Busted Shoes and Broken Hearts: A Film About Lowlight,Michael Votto,Indie film|Documentary film,,/m/0bvs38,
+Butterfly,Yan Yan Mak,LGBT|Chinese Movies|Drama,,/en/butterfly_2004,2004-09-04
+Butterfly on a Wheel,Mike Barker,Thriller|Crime Thriller|Crime Fiction|Psychological thriller|Drama,,/en/butterfly_on_a_wheel,2007-02-10
+C.I.D.Moosa,Johny Antony,Action Film|Comedy|Malayalam Cinema|World cinema,,/en/c_i_d_moosa,2003-07-04
+C.R.A.Z.Y.,Jean-Marc Vallée,LGBT|Indie film|Comedy-drama|Gay|Gay Interest|Gay Themed|Historical period drama|Coming of age|Drama,,/en/c_r_a_z_y,2005-05-27
+C.S.A.: The Confederate States of America,Kevin Willmott,Mockumentary|Satire|Black comedy|Parody|Indie film|Political cinema|Comedy|Drama,,/en/c_s_a_the_confederate_states_of_america,
+Cabaret Paradis,Corinne Benizio|Gilles Benizio,Comedy,,/en/cabaret_paradis,2006-04-12
+Caché,Michael Haneke,Thriller|Mystery|Psychological thriller|Drama,,/wikipedia/it_id/335645,2005-05-14
+Cactuses,Matt Hannon|Rick Rapoza,Drama,,/en/cactuses,2006-03-15
+Cadet Kelly,Larry Shaw,Teen film|Coming of age|Family|Comedy,,/en/cadet_kelly,2002-03-08
+Caffeine,John Cosgrove,Romantic comedy|Romance Film|Indie film|Ensemble Film|Workplace Comedy|Comedy,,/en/caffeine_2006,
+Cake,Nisha Ganatra|Jennifer Arzt,Romantic comedy|Short Film|Romance Film|Comedy|Drama,,/wikipedia/es_id/1062610,
+Calcutta Mail,Sudhir Mishra,Thriller|Bollywood|World cinema,,/en/calcutta_mail,2003-06-30
+Hackers Wanted,Sam Bozzo,Indie film|Documentary film,,/en/can_you_hack_it,
+Candy,Neil Armfield,Romance Film|Indie film|World cinema|Drama,,/en/candy_2006,2006-04-27
+Caótica Ana,Julio Medem,Romance Film|Mystery|Drama,,/en/caotica_ana,2007-08-24
+Capote,Bennett Miller,Crime Fiction|Biographical film|Drama,,/en/capote,2005-09-02
+Capturing the Friedmans,Andrew Jarecki,Documentary film|Mystery|Biographical film,,/en/capturing_the_friedmans,2003-01-17
+Care Bears: Journey to Joke-a-lot,Mike Fallows,Musical|Computer Animation|Animation|Children's Fantasy|Children's/Family|Musical comedy|Comedy|Family,,/en/care_bears_journey_to_joke_a_lot,2004-10-05
+Cargo,Clive Gordon,Thriller|Psychological thriller|Indie film|Adventure Film|Drama,,/en/cargo_2006,2006-01-24
+Cars,John Lasseter|Joe Ranft,Animation|Family|Adventure Film|Sports|Comedy,,/en/cars,2006-03-14
+Casanova,Lasse Hallström,Romance Film|Romantic comedy|Costume drama|Adventure Film|Historical period drama|Swashbuckler film|Comedy|Drama,,/en/casanova,2005-09-03
+Sherlock: Case of Evil,Graham Theakston,Mystery|Action Film|Adventure Film|Thriller|Crime Fiction|Drama,,/en/case_of_evil,2002-10-25
+Cast Away,Robert Zemeckis,Airplanes and airports|Adventure Film|Action/Adventure|Drama,,/en/cast_away,2000-12-07
+Castlevania,Paul W. S. Anderson|Sylvain White,Action Film|Horror,,/en/castlevania_2007,
+Catch Me If You Can,Steven Spielberg,Crime Fiction|Comedy|Biographical film|Drama,,/en/catch_me_if_you_can,2002-12-16
+Catch That Kid,Bart Freundlich,Teen film|Adventure Film|Crime Fiction|Family|Caper story|Children's/Family|Crime Comedy|Family-Oriented Adventure|Comedy,,/en/catch_that_kid,2004-02-06
+Caterina in the Big City,Paolo Virzì,Comedy|Drama,,/en/caterina_in_the_big_city,2003-10-24
+Cats &amp; Dogs,Lawrence Guterman,Adventure Film|Family|Action Film|Children's/Family|Fantasy Adventure|Fantasy Comedy|Comedy,,/en/cats_dogs,2001-07-04
+Catwoman,Pitof,Action Film|Crime Fiction|Fantasy|Action/Adventure|Thriller|Superhero movie,,/en/catwoman_2004,2004-07-19
+Caved In: Prehistoric Terror,Richard Pepin,Science Fiction|Horror|Natural horror film|Monster|Fantasy|Television film|Creature Film|Sci-Fi Horror,,/en/caved_in_prehistoric_terror,2006-01-07
+Cellular,David R. Ellis,Thriller|Action Film|Crime Thriller|Action/Adventure,,/en/cellular,2004-09-10
+Center Stage,Nicholas Hytner,Teen film|Dance film|Musical|Musical Drama|Ensemble Film|Drama,,/en/center_stage,2000-05-12
+Chai Lai,Poj Arnon,Action Film|Martial Arts Film|Comedy,,/en/chai_lai,2006-01-26
+Chain,Jem Cohen,Documentary film,,/en/chain_2004,
+Chakram,Krishna Vamsi,Romance Film|Drama|Tollywood|World cinema,,/en/chakram_2005,2005-03-25
+Challenger,Philip Kaufman,Drama,,/en/challenger_2007,
+Chalo Ishq Ladaaye,Aziz Sejawal,Romance Film|Comedy|Bollywood|World cinema,,/en/chalo_ishq_ladaaye,2002-12-27
+Chalte Chalte,Aziz Mirza,Romance Film|Musical|Bollywood|Drama|Musical Drama,,/en/chalte_chalte,2003-06-12
+Chameli,Sudhir Mishra|Anant Balani,Romance Film|Bollywood|World cinema|Drama,,/en/chameli,2003-12-31
+Chandni Bar,Madhur Bhandarkar,Crime Fiction|Bollywood|World cinema|Drama,,/en/chandni_bar,2001-09-28
+Chandramukhi,P. Vasu,Horror|World cinema|Musical|Horror comedy|Musical comedy|Comedy|Fantasy|Romance Film,,/en/chandramukhi,2005-04-13
+Changing Lanes,Roger Michell,Thriller|Psychological thriller|Melodrama|Drama,,/en/changing_lanes,2002-04-07
+Chaos,Tony Giglio,Thriller|Action Film|Crime Fiction|Heist film|Action/Adventure|Drama,,/en/chaos_2007,2005-12-15
+Chaos,David DeFalco,Horror|Teen film|B movie|Slasher,,/en/chaos_2005,2005-08-10
+Chaos and Creation at Abbey Road,Simon Hilton,Musical,,/en/chaos_and_creation_at_abbey_road,2006-01-27
+Chaos Theory,Marcos Siega,Romance Film|Romantic comedy|Comedy-drama|Comedy|Drama,,/en/chaos_theory_2007,
+Chapter 27,Jarrett Schaefer,Indie film|Crime Fiction|Biographical film|Drama,,/en/chapter_27,2007-01-25
+Charlie and the Chocolate Factory,Tim Burton,Fantasy|Remake|Adventure Film|Family|Children's Fantasy|Children's/Family|Comedy,,/en/charlie_and_the_chocolate_factory_2005,2005-07-10
+Charlie's Angels,Joseph McGinty Nichol,Action Film|Crime Fiction|Comedy|Adventure Film|Thriller,,/en/charlies_angels,2000-10-22
+Charlie's Angels: Full Throttle,Joseph McGinty Nichol,Martial Arts Film|Action Film|Adventure Film|Crime Fiction|Action/Adventure|Action Comedy|Comedy,,/en/charlies_angels_full_throttle,2003-06-18
+Charlotte Gray,Gillian Armstrong,Romance Film|War film|Political drama|Historical period drama|Film adaptation|Drama,,/en/charlotte_gray,2001-12-17
+Charlotte's Web,Gary Winick,Animation|Family|Comedy,,/en/charlottes_web,2006-12-07
+Chasing Liberty,Andy Cadiff,Romantic comedy|Teen film|Romance Film|Road movie|Comedy,,/en/chasing_liberty,2004-01-07
+Chasing Papi,Linda Mendoza,Romance Film|Romantic comedy|Farce|Chase Movie|Comedy,,/en/chasing_papi,2003-04-16
+Chasing Sleep,Michael Walker,Mystery|Psychological thriller|Surrealism|Thriller|Indie film|Suspense|Crime Thriller,,/en/chasing_sleep,2001-09-16
+Chasing the Horizon,Markus Canter|Mason Canter,Documentary film|Auto racing,,/en/chasing_the_horizon,2006-04-26
+Chathikkatha Chanthu,Meccartin,Comedy|Malayalam Cinema|World cinema|Drama,,/en/chathikkatha_chanthu,2004-04-14
+Chhatrapati,S. S. Rajamouli,Action Film|Tollywood|World cinema|Drama,,/en/chatrapati,2005-09-25
+Cheaper by the Dozen,Shawn Levy,Family|Comedy|Drama,,/en/cheaper_by_the_dozen_2003,2003-12-25
+Cheaper by the Dozen 2,Adam Shankman,Family|Adventure Film|Domestic Comedy|Comedy,,/en/cheaper_by_the_dozen_2,2005-12-21
+Checking Out,Jeff Hare,Black comedy|Comedy,,/en/checking_out_2005,2005-04-10
+Chellamae,Gandhi Krishna,Romance Film|Tamil cinema|World cinema,,/en/chellamae,2004-09-10
+Chemman Chaalai,Deepak Kumaran Menon,Tamil cinema|World cinema|Drama,,/en/chemman_chaalai,
+Chennaiyil Oru Mazhai Kaalam,Prabhu Deva,,,/en/chennaiyil_oru_mazhai_kaalam,
+The Farewell Tour,Dorina Sanchez|David Mallet,Music video,,/en/cher_the_farewell_tour_live_in_miami,2003-08-26
+Cherry Falls,Geoffrey Wright,Satire|Slasher|Indie film|Horror|Horror comedy|Comedy,,/en/cherry_falls,2000-07-29
+Chess,RajBabu,Crime Fiction|Thriller|Action Film|Comedy|Malayalam Cinema|World cinema,,/wikipedia/en_title/Chess_$00282006_film$0029,2006-07-07
+Girl from Rio,Christopher Monger,Romantic comedy|Romance Film|Comedy,,/en/chica_de_rio,2003-04-11
+Chicago,Rob Marshall,Musical|Crime Fiction|Comedy|Musical comedy,,/en/chicago_2002,2002-12-10
+Chicken Little,Mark Dindal,Animation|Adventure Film|Comedy,,/en/chicken_little,2005-10-30
+Chicken Run,Peter Lord|Nick Park,Family|Animation|Comedy,,/en/chicken_run,2000-06-21
+Child Marriage,Neeraj Kumar,Documentary film,,/en/child_marriage_2005,
+Children of Men,Alfonso Cuarón,Thriller|Action Film|Science Fiction|Dystopia|Doomsday film|Future noir|Mystery|Adventure Film|Film adaptation|Action Thriller|Drama,,/en/children_of_men,2006-09-03
+Children of the Corn: Revelation,Guy Magar,Horror|Supernatural|Cult film,,/en/children_of_the_corn_revelation,2001-10-09
+Children of the Living Dead,Tor Ramsey,Indie film|Teen film|Horror|Zombie Film|Horror comedy,,/en/children_of_the_living_dead,
+Chinthamani Kolacase,Shaji Kailas,Horror|Mystery|Crime Fiction|Action Film|Thriller|Malayalam Cinema|World cinema,,/en/chinthamani_kolacase,2006-03-31
+CHiPs,,Musical|Children's/Family,,/en/chips_2008,
+Chithiram Pesuthadi,Mysskin,Romance Film|Tamil cinema|World cinema|Drama,,/en/chithiram_pesuthadi,2006-02-10
+Chocolat,Lasse Hallström,Romance Film|Drama,,/en/chocolat_2000,2000-12-15
+Choose Your Own Adventure The Abominable Snowman,Bob Doucette,Adventure Film|Family|Children's/Family|Family-Oriented Adventure|Animation,,/en/choose_your_own_adventure_the_abominable_snowman,2006-07-25
+Chopin: Desire for Love,Jerzy Antczak,Biographical film|Romance Film|Music|Drama,,/en/chopin_desire_for_love,2002-03-01
+Chopper,Andrew Dominik,Biographical film|Crime Fiction|Comedy|Drama,,/en/chopper,2000-08-03
+Chori Chori,Milan Luthria,Romance Film|Musical|Romantic comedy|Musical comedy|Comedy|Bollywood|World cinema|Drama|Musical Drama,,/en/chori_chori_2003,2003-08-01
+Chori Chori Chupke Chupke,Abbas Burmawalla|Mustan Burmawalla,Romance Film|Musical|Bollywood|World cinema|Drama|Musical Drama,,/en/chori_chori_chupke_chupke,2001-03-09
+Christina's House,Gavin Wilding,Thriller|Mystery|Horror|Teen film|Slasher|Psychological thriller|Drama,,/en/christinas_house,2000-02-24
+Christmas with the Kranks,Joe Roth,Christmas movie|Family|Film adaptation|Slapstick|Holiday Film|Comedy,,/en/christmas_with_the_kranks,2004-11-24
+Chromophobia,Martha Fiennes,Family Drama|Drama,,/en/chromophobia,2005-05-21
+Chubby Killer,Reuben Rox,Slasher|Indie film|Horror,,/en/chubby_killer,
+Chukkallo Chandrudu,Siva Kumar,Comedy|Tollywood|World cinema|Drama,,/en/chukkallo_chandrudu,2006-01-14
+Chup Chup Ke,Priyadarshan|Kookie Gulati,Romantic comedy|Comedy|Romance Film|Drama,,/en/chup_chup_ke,2006-06-09
+Church Ball,Kurt Hale,Family|Sports|Comedy,,/en/church_ball,2006-03-17
+Churchill: The Hollywood Years,Peter Richardson,Satire|Comedy,,/en/churchill_the_hollywood_years,2004-12-03
+Cinderella III: A Twist in Time,Frank Nissen,Family|Animated cartoon|Fantasy|Romance Film|Animation|Children's/Family,,/en/cinderella_iii,2007-02-06
+Cinderella Man,Ron Howard,Biographical film|Historical period drama|Romance Film|Sports|Drama,,/en/cinderella_man,2005-05-23
+Cinemania,Angela Christlieb|Stephen Kijak,Documentary film|Culture &amp; Society,,/en/cinemania,
+City of Ghosts,Matt Dillon,Thriller|Crime Fiction|Crime Thriller|Drama,,/en/city_of_ghosts,2003-03-27
+City of God,Fernando Meirelles,Crime Fiction|Drama,,/en/city_of_god,2002-05-18
+Claustrophobia,Mark Tapio Kines,Slasher|Horror,,/en/claustrophobia_2003,
+Clean,Olivier Assayas,Music|Drama,,/en/clean,2004-03-27
+"Clear Cut: The Story of Philomath, Oregon",Peter Richardson,Documentary film,,/en/clear_cut_the_story_of_philomath_oregon,2006-01-20
+Clerks II,Kevin Smith,Buddy film|Workplace Comedy|Comedy,,/en/clerks_ii,2006-05-26
+Click,Frank Coraci,Comedy|Fantasy|Drama,,/en/click,2006-06-22
+Clockstoppers,Jonathan Frakes,Science Fiction|Teen film|Family|Thriller|Adventure Film|Comedy,,/en/clockstoppers,2002-03-29
+Closer,Mike Nichols,Romance Film|Drama,,/en/closer_2004,2004-12-03
+Closing the Ring,Richard Attenborough,War film|Romance Film|Drama,,/en/closing_the_ring,2007-09-14
+Club Dread,Jay Chandrasekhar,Parody|Horror|Slasher|Black comedy|Indie film|Horror comedy|Comedy,,/en/club_dread,2004-02-27
+Coach Carter,Thomas Carter,Coming of age|Sports|Docudrama|Biographical film|Drama,,/en/coach_carter,2005-01-13
+The Coast Guard,Kim Ki-duk,Action Film|War film|East Asian cinema|World cinema|Drama,,/en/coast_guard_2002,2002-11-14
+Code 46,Michael Winterbottom,Science Fiction|Thriller|Romance Film|Drama,,/en/code_46,2004-05-07
+Codename: Kids Next Door: Operation Z.E.R.O.,Tom Warburton,Science Fiction|Animation|Adventure Film|Family|Comedy|Crime Fiction,,/en/codename_kids_next_door_operation_z_e_r_o,2006-01-13
+Coffee and Cigarettes,Jim Jarmusch,Music|Comedy|Drama,,/en/coffee_and_cigarettes,2003-09-05
+Cold Creek Manor,Mike Figgis,Thriller|Mystery|Psychological thriller|Crime Thriller|Drama,,/en/cold_creek_manor,2003-09-19
+Cold Mountain,Anthony Minghella,War film|Romance Film|Drama,,/en/cold_mountain,2003-12-25
+Cold Showers,Antony Cordier,Coming of age|LGBT|World cinema|Gay Themed|Teen film|Erotic Drama|Drama,,/en/cold_showers,2005-05-22
+Collateral,Michael Mann,Thriller|Crime Fiction|Crime Thriller|Film noir|Drama,,/en/collateral,2004-08-05
+Collateral Damage,Andrew Davis,Action Film|Thriller|Drama,,/en/collateral_damage_2002,2002-02-04
+Comedian,Christian Charles,Indie film|Documentary film|Stand-up comedy|Comedy|Biographical film,,/en/comedian_2002,2002-10-11
+Coming Out,Joel Zwick,Comedy|Drama,,/en/coming_out_2006,
+Commitments,Carol Mayes,Romantic comedy|Romance Film|Drama,,/en/commitments,2001-05-04
+Common Ground,Donna Deitch,LGBT|Drama,,/en/common_ground_2000,2000-01-29
+Company,Ram Gopal Varma,Thriller|Action Film|Crime Fiction|Bollywood|World cinema|Drama,,/en/company_2002,2002-04-15
+Confessions of a Dangerous Mind,George Clooney,Biographical film|Thriller|Crime Fiction|Comedy|Drama,,/en/confessions_of_a_dangerous_mind,
+Confessions of a Teenage Drama Queen,Sara Sugarman,Family|Teen film|Musical comedy|Romantic comedy,,/en/confessions_of_a_teenage_drama_queen,2004-02-17
+Confetti,Debbie Isitt,Mockumentary|Romantic comedy|Romance Film|Parody|Music|Comedy,,/en/confetti_2006,2006-05-05
+Confidence,James Foley,Thriller|Crime Fiction|Drama,,/en/confidence_2004,2003-01-20
+Connie and Carla,Michael Lembeck,LGBT|Buddy film|Comedy of Errors|Comedy,,/en/connie_and_carla,2004-04-16
+Conspiracy,Frank Pierson,History|War film|Political drama|Historical period drama|Drama,,/en/conspiracy_2001,2001-05-19
+Constantine,Francis Lawrence,Horror|Fantasy|Action Film,,/en/constantine_2005,2005-02-08
+Control Room,Jehane Noujaim,Documentary film|Political cinema|Culture &amp; Society|War film|Journalism|Media studies,,/en/control_room,
+Control,Anton Corbijn,Biographical film|Indie film|Musical|Japanese Movies|Drama|Musical Drama,,/en/control_the_ian_curtis_film,2007-05-17
+Cope,Ronald Jackson|Ronald Jerry,Horror|B movie,,/en/cope_2005,2007-01-23
+Copying Beethoven,Agnieszka Holland,Biographical film|Music|Historical fiction|Drama,,/en/copying_beethoven,2006-07-30
+Corporate,Madhur Bhandarkar,Drama,,/en/corporate,2006-07-07
+Corpse Bride,Tim Burton|Mike Johnson,Fantasy|Animation|Musical|Romance Film,,/en/corpse_bride,2005-09-07
+Covert One: The Hades Factor,Mick Jackson,Thriller|Action Film|Action/Adventure,,/en/covert_one_the_hades_factor,
+Cow Belles,Francine McDougall,Family|Television film|Teen film|Romantic comedy|Comedy,,/en/cow_belles,2006-03-24
+Cowards Bend the Knee,Guy Maddin,Silent film|Indie film|Surrealism|Romance Film|Experimental film|Crime Fiction|Avant-garde|Drama,,/en/cowards_bend_the_knee,2003-02-26
+Cowboy Bebop: The Movie,ShinichirÅ Watanabe,Anime|Science Fiction|Action Film|Animation|Comedy|Crime Fiction,,/en/cowboy_bebop_the_movie,2001-09-01
+Coyote Ugly,David McNally,Musical|Romance Film|Comedy|Drama|Musical comedy|Musical Drama,,/en/coyote_ugly,2000-07-31
+Crackerjack,Paul Moloney,Comedy,,/en/crackerjack_2002,2002-11-07
+Cradle 2 the Grave,Andrzej Bartkowiak,Martial Arts Film|Thriller|Action Film|Crime Fiction|Buddy film|Action Thriller|Adventure Film|Crime,,/en/cradle_2_the_grave,2003-02-28
+Cradle of Fear,Alex Chandon,Horror|B movie|Slasher,,/en/cradle_of_fear,
+Crank,Neveldine/Taylor,Thriller|Action Film|Action/Adventure|Crime Thriller|Crime Fiction|Action Thriller,,/en/crank,2006-08-31
+Crash,Paul Haggis,Crime Fiction|Indie film|Drama,,/en/crash_2004,2004-09-10
+Crazy/Beautiful,John Stockwell,Teen film|Romance Film|Drama,,/en/crazy_beautiful,2001-06-28
+Creep,Christopher Smith,Horror|Mystery|Thriller,,/en/creep_2005,2004-08-10
+Criminal,Gregory Jacobs,Thriller|Crime Fiction|Indie film|Crime Thriller|Heist film|Comedy|Drama,,/en/criminal,2004-09-10
+Crimson Gold,Jafar Panahi,World cinema|Thriller|Drama,,/en/crimson_gold,
+Crimson Rivers II: Angels of the Apocalypse,Olivier Dahan,Action Film|Thriller|Crime Fiction,,/en/crimson_rivers_ii_angels_of_the_apocalypse,2004-02-18
+Crocodile,Tobe Hooper,Horror|Natural horror film|Teen film|Thriller|Action Film|Action/Adventure,,/en/crocodile_2000,2000-12-26
+Crocodile 2: Death Swamp,Gary Jones,Horror|Natural horror film|B movie|Action/Adventure|Action Film|Thriller|Adventure Film|Action Thriller|Creature Film,,/en/crocodile_2_death_swamp,2002-08-01
+Crocodile Dundee in Los Angeles,Simon Wincer,Action Film|Adventure Film|Action/Adventure|World cinema|Action Comedy|Comedy|Drama,,/en/crocodile_dundee_in_los_angeles,2001-04-12
+Crossing the Bridge: The Sound of Istanbul,Fatih Akın,Musical|Documentary film|Music|Culture &amp; Society,,/en/crossing_the_bridge_the_sound_of_istanbul,2005-06-09
+Crossover,Preston A. Whitmore II,Action Film|Coming of age|Teen film|Sports|Short Film|Fantasy|Drama,,/en/crossover_2006,2006-09-01
+Crossroads,Tamra Davis,Coming of age|Teen film|Musical|Romance Film|Romantic comedy|Adventure Film|Comedy-drama|Musical Drama|Musical comedy|Comedy|Drama,,/en/crossroads_2002,2002-02-11
+"Crouching Tiger, Hidden Dragon",Ang Lee,Romance Film|Action Film|Martial Arts Film|Drama,,/en/crouching_tiger_hidden_dragon,2000-05-16
+Cruel Intentions 3,Scott Ziehl,Erotica|Thriller|Teen film|Psychological thriller|Romance Film|Erotic thriller|Crime Fiction|Crime Thriller|Drama,,/en/cruel_intentions_3,2004-05-25
+Crustacés et Coquillages,Jacques Martineau|Olivier Ducastel,Musical|Romantic comedy|LGBT|Romance Film|World cinema|Musical Drama|Musical comedy|Comedy|Drama,,/en/crustaces_et_coquillages,2005-02-12
+Cry_Wolf,Jeff Wadlow,Slasher|Horror|Mystery|Thriller|Drama,,/en/cry_wolf,2005-09-16
+Cube 2: Hypercube,Andrzej Sekuła,Science Fiction|Horror|Psychological thriller|Thriller|Escape Film,,/en/cube_2_hypercube,2002-04-15
+Curious George,Matthew O'Callaghan,Animation|Adventure Film|Family|Comedy,,/en/curious_george_2006,2006-02-10
+Curse of the Golden Flower,Zhang Yimou,Romance Film|Action Film|Drama,,/en/curse_of_the_golden_flower,2006-12-21
+Cursed,Wes Craven,Horror|Thriller|Horror comedy|Comedy,,/en/cursed,2004-11-07
+D-Tox,Jim Gillespie,Thriller|Crime Thriller|Horror|Mystery,,/en/d-tox,2002-01-04
+Daddy,Suresh Krissna,Family|Drama|Tollywood|World cinema,,/en/daddy,2001-10-04
+Daddy Day Care,Steve Carr,Family|Comedy,,/en/daddy_day_care,2003-05-04
+Daddy-Long-Legs,Gong Jeong-shik,Romantic comedy|East Asian cinema|World cinema|Drama,,/en/daddy_long-legs,2005-01-13
+Dahmer,David Jacobson,Thriller|Biographical film|LGBT|Crime Fiction|Indie film|Mystery|Cult film|Horror|Slasher|Drama,,/en/dahmer_2002,2002-06-21
+Daisy,Andrew Lau,Chinese Movies|Romance Film|Melodrama|Drama,,/en/daisy_2006,2006-03-09
+Daivanamathil,Jayaraj,Drama|Malayalam Cinema|World cinema,,/en/daivanamathil,
+Daltry Calhoun,Katrina Holden Bronson,Black comedy|Comedy-drama|Comedy|Drama,,/en/daltry_calhoun,2005-09-25
+Dan in Real Life,Peter Hedges,Romance Film|Romantic comedy|Comedy-drama|Domestic Comedy|Comedy|Drama,,/en/dan_in_real_life,2007-10-26
+Dancer in the Dark,Lars von Trier,Musical|Crime Fiction|Melodrama|Drama|Musical Drama,,/en/dancer_in_the_dark,2000-05-17
+Daniel Amos Live in Anaheim 1985,Dave Perry,Music video,,/en/daniel_amos_live_in_anaheim_1985,
+Danny Deckchair,Jeff Balsmeyer,Romantic comedy|Indie film|Romance Film|World cinema|Fantasy Comedy|Comedy,,/en/danny_deckchair,
+Daredevil,Mark Steven Johnson,Action Film|Fantasy|Thriller|Crime Fiction|Superhero movie,,/en/daredevil_2003,2003-02-09
+Dark Blue,Ron Shelton,Action Film|Crime Fiction|Historical period drama|Drama,,/en/dark_blue,2002-12-14
+Dark Harvest,"Paul Moore, Jr.",Horror|Slasher,,/en/dark_harvest,
+Dark Water,Walter Salles,Thriller|Horror|Drama,,/en/dark_water,2005-06-27
+Dark Water,Hideo Nakata,Thriller|Horror|Mystery|Drama,,/en/dark_water_2002,2002-01-19
+Darkness,Jaume Balagueró,Horror,,/en/darkness_2002,2002-10-03
+Darna Mana Hai,Prawaal Raman,Horror|Adventure Film|Bollywood|World cinema,,/en/darna_mana_hai,2003-07-25
+Darna Zaroori Hai,Ram Gopal Varma|Jijy Philip|Prawaal Raman|Vivek Shah|J. D. Chakravarthy|Sajid Khan|Manish Gupta,Horror|Thriller|Comedy|Bollywood|World cinema,,/en/darna_zaroori_hai,2006-04-28
+Darth Vader's Psychic Hotline,John E. Hudgens,Indie film|Short Film|Fan film,,/en/darth_vaders_psychic_hotline,2002-04-16
+Darwin's Nightmare,Hubert Sauper,Documentary film|Political cinema|Biographical film,,/en/darwins_nightmare,2004-09-01
+The Experiment,Paul Scheuring,Thriller|Psychological thriller|Drama,,/en/das_experiment,2010-07-15
+Dasavathaaram,K. S. Ravikumar,Science Fiction|Disaster Film|Tamil cinema,,/en/dasavatharam,2008-06-12
+Date Movie,Aaron Seltzer|Jason Friedberg,Romantic comedy|Parody|Romance Film|Comedy,,/en/date_movie,2006-02-17
+Dave Attell's Insomniac Tour,Joel Gallen,Stand-up comedy|Comedy,,/en/dave_attells_insomniac_tour,2006-04-11
+Dave Chappelle's Block Party,Michel Gondry,Documentary film|Music|Concert film|Hip hop film|Stand-up comedy|Comedy,,/en/dave_chappelles_block_party,2006-03-03
+David &amp; Layla,Jay Jonroy,Romantic comedy|Indie film|Romance Film|Comedy-drama|Comedy|Drama,,/en/david_layla,2005-10-21
+David Gilmour in Concert,David Mallet,Music video|Concert film,,/en/david_gilmour_in_concert,
+Dawn of the Dead,Zack Snyder,Horror|Action Film|Thriller|Science Fiction|Drama,,/en/dawn_of_the_dead_2004,2004-03-10
+Day of the Dead,Steve Miner,Splatter film|Doomsday film|Horror|Thriller|Cult film|Zombie Film,,/en/day_of_the_dead_2007,2008-04-08
+Day of the Dead 2: Contagium,Ana Clavell|James Glenn Dudelson,Horror|Zombie Film,,/en/day_of_the_dead_2_contagium,2005-10-18
+Day Watch,Timur Bekmambetov,Thriller|Fantasy|Action Film,,/en/day_watch,2006-01-01
+Day Zero,Bryan Gunnar Cole,Indie film|Political drama|Drama,,/en/day_zero,2007-11-02
+De-Lovely,Irwin Winkler,Musical|Biographical film|Musical Drama|Drama,,/en/de-lovely,2004-05-22
+Dead &amp; Breakfast,Matthew Leutwyler,Horror|Black comedy|Creature Film|Zombie Film|Horror comedy|Comedy,,/en/dead_breakfast,2004-03-19
+Dead Birds,Alex Turner,Horror,,/en/dead_birds_2005,2005-03-15
+Dead End,Jean-Baptiste Andrea|Fabrice Canepa,Horror|Thriller|Mystery|Comedy,,/en/dead_end_2003,2003-01-30
+Dead Friend,Kim Tae-kyeong,Horror|East Asian cinema|World cinema,,/en/dead_friend,2004-06-18
+Dead Man's Shoes,Shane Meadows,Psychological thriller|Crime Fiction|Thriller|Drama,,/en/dead_mans_shoes,2004-10-01
+Dear Frankie,Shona Auerbach,Indie film|Drama|Romance Film,,/en/dear_frankie,2004-05-04
+Dear Wendy,Thomas Vinterberg,Indie film|Crime Fiction|Melodrama|Comedy|Romance Film|Drama,,/en/dear_wendy,2004-05-16
+Death in Gaza,James Miller,Documentary film|War film|Children's Issues|Culture &amp; Society|Biographical film,,/en/death_in_gaza,2004-02-11
+Death to Smoochy,Danny DeVito,Comedy|Thriller|Crime Fiction|Drama,,/en/death_to_smoochy,2002-03-29
+Death Trance,Yuji Shimomura,Action Film|Fantasy|Martial Arts Film|Thriller|Action/Adventure|World cinema|Action Thriller|Japanese Movies,,/en/death_trance,2005-05-12
+Death Walks the Streets,James Zahn,Indie film|Horror|Crime Fiction,,/en/death_walks_the_streets,2008-06-26
+Deathwatch,Michael J. Bassett,Horror|War film|Thriller|Drama,,/en/deathwatch,2002-10-06
+December Boys,Rod Hardy,Coming of age|Film adaptation|Indie film|Historical period drama|World cinema|Drama,,/en/december_boys,
+Decoys,Matthew Hastings,Science Fiction|Horror|Thriller|Alien Film|Horror comedy,,/en/decoys,
+Deepavali,Ezhil,Romance Film|Tamil cinema|World cinema,,/en/deepavali,2007-02-09
+Deewane Huye Paagal,Vikram Bhatt,Romance Film|Romantic comedy|Comedy|Bollywood|World cinema|Drama,,/en/deewane_huye_pagal,2005-11-25
+Déjà Vu,Tony Scott,Thriller|Science Fiction|Time travel|Action Film|Mystery|Crime Thriller|Action/Adventure,,/wikipedia/ja_id/980449,2006-11-20
+Democrazy,Michael Legge,Parody|Action/Adventure|Action Film|Indie film|Superhero movie|Comedy,,/en/democrazy_2005,
+Demonium,Andreas Schnaas,Horror|Thriller,,/en/demonium,2001-08-25
+Der Schuh des Manitu,Michael Herbig,Western|Comedy|Parody,,/en/der_schuh_des_manitu,2001-07-13
+The Tunnel,Roland Suso Richter,World cinema|Thriller|Political drama|Political thriller|Drama,,/en/der_tunnel,2001-01-21
+Derailed,Mikael Håfström,Thriller|Psychological thriller|Crime Thriller|Drama,,/en/derailed,2005-11-11
+Derailed,Bob Misiorowski,Thriller|Action Film|Martial Arts Film|Disaster Film|Action/Adventure,,/en/derailed_2002,
+Destiny's Child: Live In Atlana,Julia Knowles,Music|Documentary film,,/en/destinys_child_live_in_atlana,2006-03-27
+Deuce Bigalow: European Gigolo,Mike Bigelow,Sex comedy|Slapstick|Gross out|Gross-out film|Comedy,,/en/deuce_bigalow_european_gigolo,2005-08-06
+Dev,Govind Nihalani,Drama|Bollywood,,/en/dev,2004-06-11
+Devadasu,YVS Chowdary|Gopireddy Mallikarjuna Reddy,Romance Film|Drama|Tollywood|World cinema,,/en/devadasu,2006-01-11
+Devdas,Sanjay Leela Bhansali,Romance Film|Musical|Drama|Bollywood|World cinema|Musical Drama,,/en/devdas_2002,2002-05-23
+Devil's Playground,Lucy Walker,Documentary film,,/en/devils_playground_2003,2003-02-04
+Devil's Pond,Joel Viertel,Thriller|Suspense,,/en/the_devils_pond,2003-10-21
+Dhadkan,Dharmesh Darshan,Musical|Romance Film|Melodrama|Bollywood|World cinema|Drama|Musical Drama,,/en/dhadkan,2000-08-11
+Dhool,Dharani,Musical|Family|Action Film|Tamil cinema|World cinema|Drama|Musical Drama,,/en/dhool,2003-01-10
+Dhoom 2,Sanjay Gadhvi,Crime Fiction|Action/Adventure|Musical|World cinema|Buddy cop film|Action Film|Thriller|Action Thriller|Musical comedy|Comedy,,/en/dhoom_2,2006-11-23
+Dhyaas Parva,Amol Palekar,Biographical film|Drama|Marathi cinema,,/en/dhyaas_parva,
+Diary of a Housewife,Vinod Sukumaran,Short Film|Malayalam Cinema|World cinema,,/en/diary_of_a_housewife,
+Diary of a Mad Black Woman,Darren Grant,Comedy-drama|Romance Film|Romantic comedy|Comedy|Drama,,/en/diary_of_a_mad_black_woman,2005-02-25
+Dickie Roberts: Former Child Star,Sam Weisman,Parody|Slapstick|Comedy,,/en/dickie_roberts_former_child_star,2003-09-03
+Die Bad,Ryoo Seung-wan,Crime Fiction|Drama,,/en/die_bad,2000-07-15
+Die Mommie Die!,Mark Rucker,Comedy,,/en/die_mommie_die,2003-01-20
+God Is Great and I'm Not,Pascale Bailly,Romantic comedy|World cinema|Religious Film|Romance Film|Comedy of manners|Comedy|Drama,,/en/dieu_est_grand_je_suis_toute_petite,2001-09-26
+Digimon: The Movie,Mamoru Hosoda|Shigeyasu Yamauchi,Anime|Fantasy|Family|Animation|Adventure Film|Action Film|Thriller,,/en/digimon_the_movie,2000-03-17
+Digital Monster X-Evolution,Hiroyuki KakudÅ,Computer Animation|Animation|Japanese Movies,,/en/digital_monster_x-evolution,2005-01-03
+Digna... hasta el último aliento,Felipe Cazals,Documentary film|Culture &amp; Society|Law &amp; Crime|Biographical film,,/en/digna_hasta_el_ultimo_aliento,2004-12-17
+Dil Chahta Hai,Farhan Akhtar,Bollywood|Musical|Romance Film|World cinema|Comedy-drama|Musical Drama|Musical comedy|Comedy|Drama,,/en/dil_chahta_hai,2001-07-24
+Dil Diya Hai,Aditya Datt|Aditya Datt,Romance Film|Bollywood|World cinema|Drama,,/en/dil_diya_hai,2006-09-08
+Dil Hai Tumhara,Kundan Shah,Family|Romance Film|Musical|Bollywood|World cinema|Drama|Musical Drama,,/en/dil_hai_tumhaara,2002-09-06
+Dil Ka Rishta,Naresh Malhotra,Romance Film|Bollywood,,/en/dil_ka_rishta,2003-01-17
+Dil Ne Jise Apna Kahaa,Atul Agnihotri,Musical|World cinema|Romance Film|Musical Drama|Musical comedy|Comedy|Bollywood|Drama,,/en/dil_ne_jise_apna_kahaa,2004-09-10
+Dinosaur,Eric Leighton|Ralph Zondag,Computer Animation|Animation|Fantasy|Costume drama|Family|Adventure Film|Thriller,,/en/dinosaur_2000,2000-05-13
+Dirty Dancing: Havana Nights,Guy Ferland,Musical|Coming of age|Indie film|Teen film|Romance Film|Historical period drama|Dance film|Musical Drama|Drama,,/en/dirty_dancing_2004,2004-02-27
+Dirty Deeds,David Caesar,Historical period drama|Black comedy|Crime Thriller|Thriller|Crime Fiction|World cinema|Gangster Film|Drama,,/en/dirty_deeds,2002-07-18
+Dirty Deeds,David Kendall,Comedy,,/en/dirty_deeds_2005,2005-08-26
+Dirty Love,John Mallory Asher,Indie film|Sex comedy|Romantic comedy|Romance Film|Comedy,,/en/dirty_love,2005-09-23
+Disappearing Acts,Gina Prince-Bythewood,Romance Film|Television film|Film adaptation|Comedy-drama|Drama,,/en/disappearing_acts,2000-12-09
+Dishyum,Sasi,Romance Film|Action Film|Drama|Tamil cinema|World cinema,,/en/dishyum,2006-02-02
+Distant Lights,Hans-Christian Schmid,Drama,,/en/distant_lights,2003-02-11
+District 13,Pierre Morel,Martial Arts Film|Thriller|Action Film|Science Fiction|Crime Fiction,,/en/district_b13,2004-11-10
+Disturbia,D. J. Caruso,Thriller|Mystery|Teen film|Drama,,/en/disturbia,2007-04-04
+Ditto,Jeong-kwon Kim,Romance Film|Science Fiction|East Asian cinema|World cinema,,/en/ditto_2000,2000-05-27
+Divine Intervention,Elia Suleiman,Black comedy|World cinema|Romance Film|Comedy|Drama,,/en/divine_intervention_2002,2002-05-19
+Divine Secrets of the Ya-Ya Sisterhood,Callie Khouri,Film adaptation|Comedy-drama|Historical period drama|Family Drama|Ensemble Film|Comedy|Drama,,/en/divine_secrets_of_the_ya_ya_sisterhood,2002-06-03
+DOA: Dead or Alive,Corey Yuen,Action Film|Adventure Film,,/en/doa_dead_or_alive,2006-09-07
+DodgeBall: A True Underdog Story,Rawson Marshall Thurber,Sports|Comedy,,/en/dodgeball_a_true_underdog_story,2004-06-18
+Dog Soldiers,Neil Marshall,Horror|Action Film|Creature Film,,/en/dog_soldiers,2002-03-22
+Dogtown and Z-Boys,Stacy Peralta,Documentary film|Sports|Extreme Sports|Biographical film,,/en/dogtown_and_z-boys,2001-01-19
+Dogville,Lars von Trier,Drama,,/en/dogville,2003-05-19
+The Doll Master,Jeong Yong-Gi,Horror|Thriller|East Asian cinema|World cinema,,/en/doll_master,2004-07-30
+Dolls,Takeshi Kitano,Romance Film|Drama,,/en/dolls,2002-09-05
+Dominion: Prequel to the Exorcist,Paul Schrader,Horror|Supernatural|Psychological thriller|Cult film,,/en/dominion_prequel_to_the_exorcist,2005-05-20
+Domino,Tony Scott,Thriller|Action Film|Biographical film|Crime Fiction|Comedy|Adventure Film|Drama,,/en/domino_2005,2005-09-25
+Don: The Chase Begins Again,Farhan Akhtar,Crime Fiction|Thriller|Mystery|Action Film|Romance Film|Comedy|Bollywood|World cinema,,/en/don_2006,2006-10-20
+Don's Plum,R.D. Robb,Black-and-white|Ensemble Film|Comedy|Drama,,/en/dons_plum,2001-02-10
+Don't Come Knocking,Wim Wenders,Western|Indie film|Musical|Drama|Music|Musical Drama,,/en/dont_come_knocking,2005-05-19
+Don't Move,Sergio Castellitto,Romance Film|Drama,,/en/dont_move,2004-03-12
+Don't Say a Word,Gary Fleder,Thriller|Psychological thriller|Crime Fiction|Suspense,,/en/dont_say_a_word_2001,2001-09-24
+Donnie Darko,Richard Kelly,Science Fiction|Mystery|Drama,,/en/donnie_darko,2001-01-19
+Doomsday,Neil Marshall,Science Fiction|Action Film,,/en/doomsday_2008,2008-03-14
+Dopamine,Mark Decena,Comedy-drama|Romance Film|Indie film|Romantic comedy|Comedy|Drama,,/en/dopamine_2003,2003-01-23
+Dosti: Friends Forever,Suneel Darshan,Romance Film|Drama,,/en/dosti_friends_forever,2005-12-23
+Double Take,George Gallo,Crime Fiction|Action/Adventure|Action Film|Comedy,,/en/double_take,2001-01-12
+Double Teamed,Duwayne Dunham,Family|Biographical film|Family Drama|Children's/Family|Sports,,/en/double_teamed,2002-01-18
+Double Vision,Chen Kuo-Fu,Thriller|Mystery|Martial Arts Film|Action Film|Horror|Psychological thriller|Suspense|World cinema|Crime Thriller|Action/Adventure|Chinese Movies,,/en/double_vision_2002,2002-05-20
+Double Whammy,Tom DiCillo,Comedy-drama|Indie film|Action Film|Crime Fiction|Action/Adventure|Satire|Romantic comedy|Comedy|Drama,,/en/double_whammy,2001-01-20
+Down and Derby,Eric Hendershot,Family|Sports|Comedy,,/en/down_and_derby,2005-04-15
+Down in the Valley,David Jacobson,Indie film|Romance Film|Family Drama|Psychological thriller|Drama,,/en/down_in_the_valley,2005-05-13
+Down to Earth,Chris Weitz|Paul Weitz,Fantasy|Comedy,,/en/down_to_earth,2001-02-12
+Down with Love,Peyton Reed,Romantic comedy|Romance Film|Screwball comedy|Parody|Comedy,,/en/down_with_love,2003-05-09
+Downfall,Oliver Hirschbiegel,Biographical film|War film|Historical drama|Drama,,/en/downfall,2004-09-08
+Dr. Dolittle 2,Steve Carr,Family|Fantasy Comedy|Comedy|Romance Film,,/en/dr_dolittle_2,2001-06-19
+Dr. Dolittle 3,Rich Thorne,Family|Comedy,,/en/dr_dolittle_3,2006-04-25
+Dracula: Pages from a Virgin's Diary,Guy Maddin,Silent film|Indie film|Horror|Musical|Experimental film|Dance film|Horror comedy|Musical comedy|Comedy,,/en/dracula_pages_from_a_virgins_diary,2002-02-28
+Dragon Boys,Jerry Ciccoritti,Crime Drama|Ensemble Film|Drama,,/en/dragon_boys,
+Dragon Tiger Gate,Wilson Yip,Martial Arts Film|Wuxia|Action/Adventure|Action Film|Thriller|Superhero movie|World cinema|Action Thriller|Chinese Movies,,/en/dragon_tiger_gate,2006-07-27
+Dragonfly,Tom Shadyac,Thriller|Mystery|Romance Film|Fantasy|Drama,,/en/dragonfly_2002,2002-02-18
+Dragonlance: Dragons of Autumn Twilight,Will Meugniot,Animation|Sword and sorcery|Fantasy|Adventure Film|Science Fiction,,/en/dragonlance_dragons_of_autumn_twilight,2008-01-15
+Drake &amp; Josh Go Hollywood,Adam Weissman|Steve Hoefer,Family|Adventure Film|Comedy,,/en/drake_josh_go_hollywood,2006-01-06
+Drawing Restraint 9,Matthew Barney,Cult film|Fantasy|Surrealism|Avant-garde|Experimental film|Japanese Movies,,/en/drawing_restraint_9,2005-07-01
+Dreamcatcher,Lawrence Kasdan,Science Fiction|Horror|Thriller|Drama,,/en/dreamcatcher,2003-03-06
+Dreamer,John Gatins,Family|Sports|Drama,,/en/dreamer_2005,2005-09-10
+Dreaming of Julia,Juan Gerard,Indie film|Action Film|Crime Fiction|Action/Adventure|Comedy|Drama,,/en/dreaming_of_julia,2003-10-24
+Driving Miss Wealthy,James Yuen,Romance Film|World cinema|Romantic comedy|Chinese Movies|Comedy|Drama,,/en/driving_miss_wealthy_juet_sai_ho_bun,2004-05-03
+Drowning Mona,Nick Gomez,Black comedy|Mystery|Whodunit|Crime Comedy|Crime Fiction|Comedy,,/en/drowning_mona,2000-01-02
+Drugstore Girl,Katsuhide Motoki,Japanese Movies|Comedy,,/en/drugstore_girl,
+Druids,Jacques Dorfmann,Adventure Film|War film|Action/Adventure|World cinema|Epic film|Historical Epic|Historical fiction|Biographical film|Drama,,/en/druids,2001-08-31
+Duck! The Carbine High Massacre,William Hellfire|Joey Smack,Satire|Black comedy|Parody|Indie film|Teen film|Comedy,,/en/duck_the_carbine_high_massacre,2000-04-20
+"Dude, Where's My Car?",Danny Leiner,Mystery|Comedy|Science Fiction,,/en/dude_wheres_my_car,2000-12-10
+"Dude, Where's the Party?",Benny Mathews,Indie film|Comedy of manners|Comedy,,/en/dude_wheres_the_party,
+Duets,Bruce Paltrow,Musical|Musical Drama|Musical comedy|Comedy|Drama,,/en/duets,2000-09-09
+Dumb &amp; Dumberer: When Harry Met Lloyd,Troy Miller,Buddy film|Teen film|Screwball comedy|Slapstick|Comedy,,/en/dumb_dumberer,2003-06-13
+Dumm Dumm Dumm,Azhagam Perumal,Romance Film|Comedy|Drama,,/en/dumm_dumm_dumm,2001-04-13
+Dummy,Greg Pritikin,Romantic comedy|Indie film|Romance Film|Comedy|Comedy-drama|Drama,,/en/dummy_2003,2003-09-12
+Dumplings,Fruit Chan,Horror|Drama,,/en/dumplings,2004-08-04
+Duplex,Danny DeVito,Black comedy|Comedy,,/en/duplex,2003-09-26
+Dus,Anubhav Sinha,Thriller|Action Film|Crime Fiction|Bollywood,,/en/dus,2005-07-08
+Dust,Milcho Manchevski,Western|Drama,,/en/dust_2001,2001-08-29
+E,S. P. Jananathan,Action Film|Thriller|Drama,,/wikipedia/en_title/E_$0028film$0029,2006-10-21
+Earthlings,Shaun Monson,Documentary film|Nature|Culture &amp; Society|Animal,,/en/earthlings,
+Eastern Promises,David Cronenberg,Thriller|Crime Fiction|Mystery|Drama,,/en/eastern_promises,2007-09-08
+Eating Out,Q. Allan Brocka,Romantic comedy|LGBT|Gay Themed|Romance Film|Gay|Gay Interest|Comedy,,/en/eating_out,
+Echoes of Innocence,Nathan Todd Sims,Thriller|Romance Film|Christian film|Mystery|Supernatural|Drama,,/en/echoes_of_innocence,2005-09-09
+Eddie's Million Dollar Cook-Off,Paul Hoen,Teen film,,/en/eddies_million_dollar_cook_off,2003-07-18
+Edison,David J. Burke,Thriller|Crime Fiction|Mystery|Crime Thriller|Drama,,/en/edison_2006,2005-03-05
+Edmond,Stuart Gordon,Thriller|Psychological thriller|Indie film|Crime Fiction|Drama,,/en/edmond_2006,2005-09-02
+Eight Below,Frank Marshall,Adventure Film|Family|Drama,,/en/eight_below,2006-02-17
+Eight Crazy Nights,Seth Kearsley,Christmas movie|Musical|Animation|Musical comedy|Comedy,,/en/eight_crazy_nights,2002-11-27
+Eight Legged Freaks,Ellory Elkayem,Horror|Natural horror film|Science Fiction|Monster|B movie|Comedy|Action Film|Thriller|Horror comedy,,/en/eight_legged_freaks,2002-05-30
+Ek Ajnabee,Apoorva Lakhia,Action Film|Thriller|Crime Fiction|Action Thriller|Drama|Bollywood,,/en/ek_ajnabee,2005-12-09
+Eklavya: The Royal Guard,Vidhu Vinod Chopra,Historical drama|Romance Film|Musical|Epic film|Thriller|Bollywood|World cinema,,/en/eklavya_the_royal_guard,2007-02-16
+Lost Embrace,Daniel Burman,Indie film|Comedy|Comedy-drama|Drama,,/en/el_abrazo_partido,2004-02-09
+El Aura,Fabián Bielinsky,Thriller|Crime Fiction|Drama,,/en/el_aura,2005-09-15
+The Crime of Father Amaro,Carlos Carrera,Romance Film|Drama,,/en/el_crimen_del_padre_amaro,2002-08-16
+El juego de Arcibel,Alberto Lecchi,Indie film|Political drama|World cinema|Drama,,/en/el_juego_de_arcibel,2003-05-29
+El Muerto,Brian Cox,Indie film|Supernatural|Thriller|Superhero movie|Action/Adventure,,/wikipedia/en_title/El_Muerto_$0028film$0029,
+The Archimedes Principle,Gerardo Herrero,Drama,,/en/el_principio_de_arquimedes,2004-03-26
+The Hairy Tooth Fairy,Juan Pablo Buscarini,Fantasy|Animation|Comedy|Family,,/en/el_raton_perez,2006-07-13
+Election,Johnnie To,Crime Fiction|Thriller|Drama,,/en/election_2005,2005-05-14
+Election 2,Johnnie To,Thriller|Crime Fiction|Drama,,/en/election_2,2006-04-04
+Daft Punk's Electroma,Thomas Bangalter|Guy-Manuel de Homem-Christo,Indie film|Silent film|Science Fiction|World cinema|Avant-garde|Experimental film|Road movie|Drama,,/en/daft_punks_electroma,2006-05-21
+Elektra,Rob Bowman,Action Film|Action/Adventure|Martial Arts Film|Superhero movie|Thriller|Fantasy|Crime Fiction,,/en/elektra_2005,2005-01-08
+Elephant,Gus Van Sant,Teen film|Indie film|Crime Fiction|Thriller|Drama,,/en/elephant_2003,2003-05-18
+Elephants Dream,Bassam Kurdali,Short Film|Computer Animation,,/en/elephants_dream,2006-03-24
+Elf,Jon Favreau,Family|Romance Film|Comedy|Fantasy,,/en/elf_2003,2003-10-09
+Elizabethtown,Cameron Crowe,Romantic comedy|Romance Film|Family Drama|Comedy-drama|Comedy|Drama,,/en/elizabethtown_2005,2005-09-04
+Elvira's Haunted Hills,Sam Irvin,Parody|Horror|Cult film|Haunted House Film|Horror comedy|Comedy,,/en/elviras_haunted_hills,2001-06-23
+Elvis Has Left the Building,Joel Zwick,Action Film|Action/Adventure|Road movie|Crime Comedy|Crime Fiction|Comedy,,/en/elvis_has_left_the_building_2004,
+Empire,Franc. Reyes,Thriller|Crime Fiction|Indie film|Action|Drama|Action Thriller,,/en/empire_2002,
+Employee of the Month,Mitch Rouse,Black comedy|Indie film|Heist film|Comedy,,/en/employee_of_the_month_2004,2004-01-17
+Employee of the Month,Greg Coolidge,Romantic comedy|Romance Film|Comedy,,/en/employee_of_the_month,2006-10-06
+Empress Chung,Nelson Shin,Animation|Children's/Family|East Asian cinema|World cinema,,/en/empress_chung,2005-08-12
+EMR,Danny McCullough|James Erskine,Thriller|Mystery|Psychological thriller,,/en/emr,2004-03-08
+En Route,Jan Krüger,Drama,,/en/en_route,2004-06-17
+Enakku 20 Unakku 18,Jyothi Krishna,Musical|Romance Film|Drama|Musical Drama,,/en/enakku_20_unakku_18,2003-12-19
+Enchanted,Kevin Lima,Musical|Fantasy|Romance Film|Family|Comedy|Animation|Adventure Film|Drama|Musical comedy|Musical Drama,,/en/enchanted_2007,2007-10-20
+End of the Spear,Jim Hanon,Docudrama|Christian film|Indie film|Adventure Film|Historical period drama|Action/Adventure|Inspirational Drama|Drama,,/en/end_of_the_spear,
+Enduring Love,Roger Michell,Thriller|Mystery|Film adaptation|Indie film|Romance Film|Psychological thriller|Drama,,/en/enduring_love,2004-09-04
+Enemy at the Gates,Jean-Jacques Annaud,War film|Romance Film|Action Film|Historical fiction|Thriller|Drama,,/en/enemy_at_the_gates,2001-02-07
+Enigma,Michael Apted,Thriller|War film|Spy film|Romance Film|Mystery|Drama,,/en/enigma_2001,2001-01-22
+Enigma: The Best of Jeff Hardy,Craig Leathers,Sports|Action Film,,/en/enigma_the_best_of_jeff_hardy,2005-10-04
+Enron: The Smartest Guys in the Room,Alex Gibney,Documentary film|Indie film|Crime Fiction|Business|Culture &amp; Society|Finance &amp; Investing|Law &amp; Crime|Biographical film,,/en/enron_the_smartest_guys_in_the_room,2005-04-22
+Envy,Barry Levinson,Black comedy|Cult film|Comedy,,/en/envy_2004,2004-04-30
+Equilibrium,Kurt Wimmer,Science Fiction|Dystopia|Future noir|Thriller|Action Film|Drama,,/en/equilibrium_2002,2002-12-06
+Eragon,Stefen Fangmeier,Family|Adventure Film|Fantasy|Sword and sorcery|Action Film|Drama,,/en/eragon_2006,2006-12-13
+Erin Brockovich,Steven Soderbergh,Biographical film|Legal drama|Trial drama|Romance Film|Docudrama|Comedy-drama|Feminist Film|Drama|Drama film,,/en/erin_brockovich_2000,2000-03-14
+Eros,Michelangelo Antonioni|Steven Soderbergh|Wong Kar-wai,Romance Film|Erotica|Drama,,/en/eros_2004,2004-09-10
+Escaflowne,Kazuki Akane,Adventure Film|Science Fiction|Fantasy|Animation|Romance Film|Action Film|Thriller|Drama,,/en/escaflowne,2000-06-24
+A Few Days Later,Niki Karimi,Drama,,/en/escape_2006,
+Eternal Sunshine of the Spotless Mind,Michel Gondry,Romance Film|Science Fiction|Drama,,/en/eternal_sunshine_of_the_spotless_mind,2004-03-19
+Eulogy,Michael Clancy,LGBT|Black comedy|Indie film|Comedy,,/en/eulogy_2004,2004-10-15
+EuroTrip,Jeff Schaffer|Alec Berg|David Mandel,Sex comedy|Adventure Film|Teen film|Comedy,,/en/eurotrip,2004-02-20
+Evan Almighty,Tom Shadyac,Religious Film|Parody|Family|Fantasy|Fantasy Comedy|Heavenly Comedy|Comedy,,/en/evan_almighty,2007-06-21
+Everlasting Regret,Stanley Kwan,Romance Film|Chinese Movies|Drama,,/en/everlasting_regret,2005-09-08
+Everybody's Famous!,Dominique Deruddere,World cinema|Comedy|Drama,,/en/everybody_famous,2000-04-12
+Everyman's Feast,Fritz Lehner,Drama,,/en/everymans_feast,2002-01-25
+Everyone's Hero,Christopher Reeve|Daniel St. Pierre|Colin Brady,Computer Animation|Family|Animation|Adventure Film|Sports|Children's/Family|Family-Oriented Adventure,,/en/everyones_hero,2006-09-15
+Everything,,Music video,,/en/everything_2005,2005-11-22
+Everything Goes,Andrew Kotatko,Short Film|Drama,,/en/everything_goes,2004-06-14
+Everything Is Illuminated,Liev Schreiber,Adventure Film|Film adaptation|Family Drama|Comedy-drama|Road movie|Comedy|Drama,,/en/everything_is_illuminated_2005,2005-09-16
+Evilenko,David Grieco,Thriller|Horror|Crime Fiction,,/en/evilenko,2004-04-16
+Evolution,Ivan Reitman,Science Fiction|Parody|Action Film|Action/Adventure|Comedy,,/en/evolution_2001,2001-06-08
+Exit Wounds,Andrzej Bartkowiak,Action Film|Mystery|Martial Arts Film|Action/Adventure|Thriller|Crime Fiction,,/en/exit_wounds,2001-03-16
+Exorcist: The Beginning,Renny Harlin,Horror|Supernatural|Psychological thriller|Cult film|Historical period drama,,/en/exorcist_the_beginning,2004-08-18
+Extreme Days,Eric Hannah,Comedy-drama|Action Film|Christian film|Action/Adventure|Road movie|Teen film|Sports,,/en/extreme_days,2001-09-28
+Extreme Ops,Christian Duguay,Action Film|Thriller|Action/Adventure|Sports|Adventure Film|Action Thriller|Chase Movie,,/en/extreme_ops,2002-11-27
+Face,Yoo Sang-gon,Horror|Thriller|Drama|East Asian cinema|World cinema,,/en/face_2004,2004-06-11
+Facing Windows,Ferzan Özpetek,Romance Film|Drama,,/en/la_finestra_di_fronte,2003-02-28
+Factory Girl,George Hickenlooper,Biographical film|Indie film|Historical period drama|Drama,,/en/factory_girl,2006-12-29
+Fahrenheit 9/11,Michael Moore,Indie film|Documentary film|War film|Culture &amp; Society|Crime Fiction|Drama,,/en/fahrenheit_9_11,2004-05-17
+Fahrenheit 9/11½,Michael Moore,Documentary film,,/en/fahrenheit_9_111_2,
+Fail Safe,Stephen Frears,Thriller|Science Fiction|Black-and-white|Film adaptation|Suspense|Psychological thriller|Political drama|Drama,,/en/fail_safe_2000,2000-04-09
+Failan,Song Hae-sung,Romance Film|World cinema|Drama,,/en/failan,2001-04-28
+Failure to Launch,Tom Dey,Romantic comedy|Romance Film|Comedy,,/en/failure_to_launch,2006-03-10
+Fake,Thanakorn Pongsuwan,Romance Film,,/en/fake_2003,2003-04-28
+Falcons,Friðrik Þór Friðriksson,Drama,,/en/falcons_2002,
+Fallen,Mikael Salomon|Kevin Kerslake,Science Fiction|Fantasy|Action/Adventure|Drama,,/en/fallen_2006,
+Family,Rajkumar Santoshi,Musical|Crime Fiction|Action Film|Romance Film|Thriller|Drama|Musical Drama,,/en/family_-_ties_of_blood,2006-01-11
+Familywala,Neeraj Vora,Comedy|Drama|Bollywood|World cinema,,/en/familywala,
+Fan Chan,Vitcha Gojiew|Witthaya Thongyooyong|Komgrit Triwimol|Nithiwat Tharathorn|Songyos Sugmakanan|Adisorn Tresirikasem,Comedy|Romance Film,,/en/fan_chan,2003-10-03
+Fanaa,Kunal Kohli,Thriller|Romance Film|Musical|Bollywood|Musical Drama|Drama,,/en/fanaa,2006-05-26
+Fantastic Four,Tim Story,Fantasy|Science Fiction|Adventure Film|Action Film,,/en/fantastic_four_2005,2005-06-29
+Fantastic Four: Rise of the Silver Surfer,Tim Story,Fantasy|Science Fiction|Action Film|Thriller,,/en/fantastic_four_and_the_silver_surfer,2007-06-12
+Fantastic Mr. Fox,Wes Anderson,Animation|Adventure Film|Comedy|Family,,/en/fantastic_mr_fox_2007,2009-10-14
+FAQ: Frequently Asked Questions,Carlos Atanes,Science Fiction,,/en/faq_frequently_asked_questions,2004-10-12
+Far Cry,Uwe Boll,Action Film|Science Fiction|Thriller|Adventure Film,,/en/far_cry_2008,2008-10-02
+Far from Heaven,Todd Haynes,Romance Film|Melodrama|Drama,,/en/far_from_heaven,2002-09-01
+Farce of the Penguins,Bob Saget,Parody|Mockumentary|Adventure Comedy|Comedy,,/en/farce_of_the_penguins,
+Eagles: Farewell 1 Tour-Live from Melbourne,Carol Dodds,Music video,,/en/eagles_farewell_1_tour_live_from_melbourne,2005-06-14
+Fat Albert,Joel Zwick,Family|Fantasy|Romance Film|Comedy,,/en/fat_albert,2004-12-12
+Fat Pizza,Paul Fenech,Comedy,,/en/fat_pizza_the_movie,
+Fatwa,John Carter,Thriller|Political thriller|Drama,,/en/fatwa_2006,2006-03-24
+Faust: Love of the Damned,Brian Yuzna,Horror|Supernatural,,/en/faust_love_of_the_damned,2000-10-12
+Fay Grim,Hal Hartley,Thriller|Action Film|Political thriller|Indie film|Comedy Thriller|Comedy|Crime Fiction|Drama,,/en/fay_grim,2006-09-11
+Fear and Trembling,Alain Corneau,World cinema|Japanese Movies|Comedy|Drama,,/en/fear_and_trembling_2003,
+Fear of the Dark,Glen Baisley,Horror|Mystery|Psychological thriller|Thriller|Drama,,/en/fear_of_the_dark_2006,2001-10-06
+Fear X,Nicolas Winding Refn,Psychological thriller|Thriller,,/en/fear_x,2003-01-19
+FeardotCom,William Malone,Horror|Crime Fiction|Thriller|Mystery,,/en/feardotcom,2002-08-09
+Fearless,Ronny Yu,Biographical film|Action Film|Sports|Drama,,/en/fearless,2006-01-26
+Feast,John Gulager,Horror|Cult film|Monster movie|Horror comedy|Comedy,,/en/feast,2006-09-22
+Femme Fatale,Brian De Palma,Thriller|Mystery|Crime Fiction|Erotic thriller,,/en/femme_fatale_2002,2002-04-30
+Festival,Annie Griffin,Black comedy|Parody|Comedy,,/en/festival_2005,2005-07-15
+Festival Express,Bob Smeaton,Documentary film|Concert film|History|Musical|Indie film|Rockumentary|Music,,/en/festival_express,
+Festival in Cannes,Henry Jaglom,Mockumentary|Comedy-drama|Comedy of manners|Ensemble Film|Comedy|Drama,,/en/festival_in_cannes,2001-11-03
+Fever Pitch,Bobby Farrelly|Peter Farrelly,Romance Film|Sports|Comedy|Drama,,/en/fever_pitch_2005,2005-04-06
+Fida,Ken Ghosh,Romance Film|Adventure Film|Thriller|Drama,,/en/fida,2004-08-20
+Fido,Andrew Currie,Horror|Parody|Romance Film|Horror comedy|Comedy|Drama,,/en/fido_2006,2006-09-07
+Fighter in the Wind,Yang Yun-ho|Yang Yun-ho,Action/Adventure|Action Film|War film|Biographical film|Drama,,/en/fighter_in_the_wind,2004-08-06
+Filantropica,Nae Caranfil,Comedy|Black comedy|Drama,,/en/filantropica,2002-03-15
+Film Geek,James Westby,Indie film|Workplace Comedy|Comedy,,/en/film_geek,2006-02-10
+Final Destination,James Wong,Slasher|Teen film|Supernatural|Horror|Cult film|Thriller,,/en/final_destination,2000-03-16
+Final Destination 3,James Wong,Slasher|Teen film|Horror|Thriller,,/en/final_destination_3,2006-02-09
+Final Destination 2,David R. Ellis,Slasher|Teen film|Supernatural|Horror|Cult film|Thriller,,/en/final_destination_2,2003-01-30
+Final Fantasy VII: Advent Children,Tetsuya Nomura|Takeshi Nozue,Anime|Science Fiction|Animation|Action Film|Thriller,,/en/final_fantasy_vii_advent_children,2005-08-31
+Final Fantasy: The Spirits Within,Hironobu Sakaguchi|Motonori Sakakibara,Science Fiction|Anime|Animation|Fantasy|Action Film|Adventure Film,,/en/final_fantasy_the_spirits_within,2001-07-02
+Final Stab,David DeCoteau,Horror|Slasher|Teen film,,/en/final_stab,
+Find Me Guilty,Sidney Lumet,Crime Fiction|Trial drama|Docudrama|Comedy-drama|Courtroom Comedy|Crime Comedy|Gangster Film|Comedy|Drama,,/en/find_me_guilty,2006-02-16
+Finder's Fee,Jeff Probst,Thriller|Psychological thriller|Indie film|Suspense|Drama,,/en/finders_fee,2001-06-16
+Finding Nemo,Andrew Stanton|Lee Unkrich,Animation|Adventure Film|Comedy|Family,,/en/finding_nemo,2003-05-30
+Finding Neverland,Marc Forster,Costume drama|Historical period drama|Family|Biographical film|Drama,,/en/finding_neverland,2004-09-04
+Fingerprints,Harry Basil,Thriller|Horror|Mystery,,/en/fingerprints,
+Firewall,Richard Loncraine,Thriller|Action Film|Psychological thriller|Action/Adventure|Crime Thriller|Action Thriller,,/en/firewall_2006,2006-02-02
+First Daughter,Forest Whitaker,Romantic comedy|Teen film|Romance Film|Comedy|Drama,,/en/first_daughter,2004-09-24
+First Descent,Kemp Curly|Kevin Harrison,Documentary film|Sports|Extreme Sports|Biographical film,,/en/first_descent,2005-12-02
+Fiza,Khalid Mohamed,Romance Film|Drama,,/en/fiza,2000-09-08
+Flags of Our Fathers,Clint Eastwood,War film|History|Action Film|Film adaptation|Historical drama|Drama,,/en/flags_of_our_fathers_2006,2006-10-20
+Flight from Death,Patrick Shen,Documentary film,,/en/flight_from_death,2006-09-06
+Flight of the Phoenix,John Moore,Airplanes and airports|Disaster Film|Action Film|Adventure Film|Action/Adventure|Film adaptation|Drama,,/en/flight_of_the_phoenix,2004-12-17
+Flightplan,Robert Schwentke,Thriller|Mystery|Drama,,/en/flightplan,2005-09-22
+Flock of Dodos,Randy Olson,Documentary film|History,,/en/flock_of_dodos,
+Fluffy the English Vampire Slayer,Henry Burrows,Horror comedy|Short Film|Fan film|Parody,,/en/fluffy_the_english_vampire_slayer,
+Flushed Away,David Bowers|Sam Fell,Animation|Family|Adventure Film|Children's/Family|Family-Oriented Adventure|Comedy,,/en/flushed_away,2006-10-22
+Fool &amp; Final,Ahmed Khan,Comedy|Action Film|Romance Film|Bollywood|World cinema,,/en/fool_and_final,2007-06-01
+Foolproof,William Phillips,Action Film|Thriller|Crime Thriller|Action Thriller|Caper story|Crime Fiction|Comedy,,/en/foolproof,2003-10-03
+For the Birds,Ralph Eggleston,Short Film|Animation|Comedy|Family,,/en/for_the_birds,2000-06-05
+For Your Consideration,Christopher Guest,Mockumentary|Parody|Comedy,,/en/for_your_consideration_2006,2006-11-17
+Forest of the Gods,Algimantas Puipa,War film|Drama,,/en/diev_mi_kas,2005-09-23
+Formula 17,Chen Yin-jung,Romantic comedy|Romance Film|Comedy,,/en/formula_17,2004-04-02
+Forty Shades of Blue,Ira Sachs,Indie film|Romance Film|Drama,,/en/forty_shades_of_blue,
+Four Brothers,John Singleton,Action Film|Crime Fiction|Thriller|Action/Adventure|Family Drama|Crime Drama|Drama,,/en/four_brothers_2005,2005-08-12
+Frailty,Bill Paxton,Psychological thriller|Thriller|Crime Fiction|Drama,,/en/frailty,2001-11-17
+Frankenfish,Mark A.Z. Dippé,Action Film|Horror|Natural horror film|Monster|Science Fiction,,/en/frankenfish,2004-10-09
+Franklin and the Turtle Lake Treasure,Dominique Monféry,Family|Animation,,/en/franklin_and_grannys_secret,2006-12-20
+Franklin and the Green Knight,John van Bruggen,Family|Animation,,/en/franklin_and_the_green_knight,2000-10-17
+Franklin's Magic Christmas,John van Bruggen,Family|Animation,,/en/franklins_magic_christmas,2001-11-06
+Freaky Friday,Mark Waters,Family|Fantasy|Comedy,,/en/freaky_friday_2003,2003-08-04
+Freddy vs. Jason,Ronny Yu,Horror|Thriller|Slasher|Action Film|Crime Fiction,,/en/freddy_vs_jason,2003-08-13
+Free Jimmy,Christopher Nielsen,Anime|Animation|Black comedy|Satire|Stoner film|Comedy,,/en/free_jimmy,2006-04-21
+Free Zone,Amos Gitai,Comedy|Drama,,/en/free_zone,2005-05-19
+Freedomland,Joe Roth,Mystery|Thriller|Crime Fiction|Film adaptation|Crime Thriller|Crime Drama|Drama,,/en/freedomland,2006-02-17
+Mr. Bean's Holiday,Steve Bendelack,Family|Comedy|Road movie,,/en/french_bean,2007-03-22
+Frequency,Gregory Hoblit,Thriller|Time travel|Science Fiction|Suspense|Fantasy|Crime Fiction|Family Drama|Drama,,/en/frequency_2000,2000-04-28
+Frida,Julie Taymor,Biographical film|Romance Film|Political drama|Drama,,/en/frida,2002-08-29
+Friday After Next,Marcus Raboy,Buddy film|Comedy,,/en/friday_after_next,2002-11-22
+Friday Night Lights,Peter Berg,Action Film|Sports|Drama,,/en/friday_night_lights,2004-10-06
+Friends,Siddique,Romance Film|Comedy|Drama|Tamil cinema|World cinema,,/en/friends_2001,2001-01-14
+Friends with Money,Nicole Holofcener,Romance Film|Indie film|Comedy-drama|Comedy of manners|Ensemble Film|Comedy|Drama,,/en/friends_with_money,2006-04-07
+FRO - The Movie,Brad Gashler|Michael J. Brooks,Comedy-drama,,/en/fro_the_movie,
+From Hell,Allen Hughes|Albert Hughes,Thriller|Mystery|Biographical film|Crime Fiction|Slasher|Film adaptation|Horror|Drama,,/en/from_hell_2001,2001-09-08
+From Janet to Damita Jo: The Videos,Jonathan Dayton|Mark Romanek|Paul Hunter,Music video,,/en/from_janet_to_damita_jo_the_videos,2004-09-07
+From Justin to Kelly,Robert Iscove,Musical|Romantic comedy|Teen film|Romance Film|Beach Film|Musical comedy|Comedy,,/en/from_justin_to_kelly,2003-06-20
+Frostbite,Jonathan Schwartz,Sports|Comedy,,/en/frostbite_2005,
+FUBAR,Michael Dowse,Mockumentary|Indie film|Buddy film|Comedy|Drama,,/en/fubar_2002,2002-01-01
+Fuck,Steve Anderson,Documentary film|Indie film|Political cinema,,/en/fuck_2005,2005-11-07
+Fuckland,José Luis Márques,Indie film|Dogme 95|Comedy-drama|Satire|Comedy of manners|Comedy|Drama,,/en/fuckland,2000-09-21
+Full-Court Miracle,Stuart Gillard,Family|Drama,,/en/full_court_miracle,2003-11-21
+Full Disclosure,John Bradshaw,Thriller|Action/Adventure|Action Film|Political thriller,,/en/full_disclosure_2001,2001-05-15
+Full Frontal,Steven Soderbergh,Romantic comedy|Indie film|Romance Film|Comedy-drama|Ensemble Film|Comedy|Drama,,/en/full_frontal,2002-08-02
+Fullmetal Alchemist the Movie: Conqueror of Shamballa,Seiji Mizushima,Anime|Fantasy|Action Film|Animation|Adventure Film|Drama,,/wikipedia/ja/$5287$5834$7248_$92FC$306E$932C$91D1$8853$5E2B_$30B7$30E3$30F3$30D0$30E9$3092$5F81$304F$8005,2005-07-23
+Fulltime Killer,Johnnie To|Wai Ka-fai,Action Film|Thriller|Crime Fiction|Martial Arts Film|Action Thriller|Drama,,/en/fulltime_killer,2001-08-03
+Fun with Dick and Jane,Dean Parisot,Crime Fiction|Comedy,,/en/fun_with_dick_and_jane_2005,2005-12-21
+Funny Ha Ha,Andrew Bujalski,Indie film|Romantic comedy|Romance Film|Mumblecore|Comedy-drama|Comedy of manners|Comedy,,/en/funny_ha_ha,
+G-Sale,Randy Nargi,Mockumentary|Comedy of manners|Comedy,,/en/g-sale,2005-11-15
+Gabrielle,Patrice Chéreau,Romance Film|Drama,,/en/gabrielle_2006,2005-09-05
+Gagamboy,Erik Matti,Action Film|Science Fiction|Comedy|Fantasy,,/en/gagamboy,2004-01-01
+Gallipoli,Tolga Örnek,Documentary film|War film,,/en/gallipoli_2005,2005-03-18
+Game 6,Michael Hoffman,Indie film|Sports|Comedy-drama|Drama,,/en/game_6_2006,2006-03-10
+Maximum Surge,Jason Bourque,Science Fiction,,/en/game_over_2003,2003-06-23
+Expendable,Nathaniel Barker|Eliot Lash,Indie film|Short Film|War film,,/en/gamma_squad,2004-06-14
+Gangotri,Kovelamudi Raghavendra Rao,Romance Film|Drama|Tollywood|World cinema,,/en/gangotri_2003,2003-03-28
+Gangs of New York,Martin Scorsese,Crime Fiction|Historical drama|Drama,,/en/gangs_of_new_york,2002-12-09
+Gangster,Anurag Basu,Thriller|Romance Film|Mystery|World cinema|Crime Fiction|Bollywood|Drama,,/en/gangster_2006,2006-04-28
+Gangster No. 1,Paul McGuigan,Thriller|Crime Fiction|Historical period drama|Action Film|Crime Thriller|Action/Adventure|Gangster Film|Drama,,/en/gangster_no_1,2000-06-09
+Garam Masala,Priyadarshan,Comedy,,/en/garam_masala_2005,2005-11-02
+Garçon stupide,Lionel Baier,LGBT|World cinema|Gay|Gay Interest|Gay Themed|Coming of age|Comedy|Drama,,/en/garcon_stupide,2004-03-10
+Garden State,Zach Braff,Romantic comedy|Coming of age|Romance Film|Comedy-drama|Comedy|Drama,,/en/garden_state,2004-01-16
+Garfield: The Movie,Peter Hewitt,Slapstick|Animation|Family|Comedy,,/en/garfield_2004,2004-06-06
+Garfield: A Tail of Two Kitties,Tim Hill,Family|Animal Picture|Children's/Family|Family-Oriented Adventure|Comedy,,/en/garfield_a_tail_of_two_kitties,2006-06-15
+Gene-X,Martin Simpson,Thriller|Romance Film,,/en/gene-x,
+George of the Jungle 2,David Grossman,Parody|Slapstick|Family|Jungle Film|Comedy,,/en/george_of_the_jungle_2,2003-08-18
+George Washington,David Gordon Green,Coming of age|Indie film|Drama,,/en/george_washington_2000,2000-09-29
+Georgia Rule,Garry Marshall,Comedy-drama|Romance Film|Melodrama|Comedy|Drama,,/en/georgia_rule,2007-05-10
+Gerry,Gus Van Sant,Indie film|Adventure Film|Mystery|Avant-garde|Experimental film|Buddy film|Drama,,/en/gerry,2003-02-14
+Get a Clue,Maggie Greenwald Mansfield,Mystery|Comedy,,/en/get_a_clue,2002-06-28
+Get Over It,Tommy O'Haver,Musical|Romantic comedy|Teen film|Romance Film|School story|Farce|Gay|Gay Interest|Gay Themed|Sex comedy|Musical comedy|Comedy,,/en/get_over_it,2001-03-09
+Get Rich or Die Tryin',Jim Sheridan,Coming of age|Crime Fiction|Hip hop film|Action Film|Biographical film|Musical Drama|Drama,,/en/get_rich_or_die_tryin,2005-11-09
+Get Up!,Kazuyuki Izutsu,Musical|Action Film|Japanese Movies|Musical Drama|Musical comedy|Comedy|Drama,,/en/get_up,
+Getting My Brother Laid,Sven Taddicken,Romantic comedy|Romance Film|Comedy|Drama,,/en/getting_my_brother_laid,
+Getting There: Sweet 16 and Licensed to Drive,Steve Purcell,Family|Teen film|Comedy,,/en/getting_there,2002-06-11
+Ghajini,A.R. Murugadoss,Thriller|Action Film|Mystery|Romance Film|Drama,,/en/ghajini,2005-09-29
+Gharshana,Gautham Menon,Mystery|Crime Fiction|Romance Film|Action Film|Tollywood|World cinema|Drama,,/en/gharshana,2004-07-30
+Ghilli,Dharani,Sports|Action Film|Romance Film|Comedy,,/en/ghilli,2004-04-17
+Ghost Game,Joe Knee,Horror comedy,,/en/ghost_game_2006,2005-09-01
+Ghost House,Kim Sang-jin,Horror|Horror comedy|Comedy|East Asian cinema|World cinema,,/en/ghost_house,2004-09-17
+Ghost in the Shell 2: Innocence,Mamoru Oshii,Science Fiction|Anime|Action Film|Animation|Thriller|Drama,,/en/ghost_in_the_shell_2_innocence,2004-03-06
+Ghost in the Shell: Solid State Society,Kenji Kamiyama,Anime|Science Fiction|Action Film|Animation|Thriller|Adventure Film|Fantasy,,/en/s_a_c_solid_state_society,2006-09-01
+Ghost Lake,Jay Woelfel,Horror|Zombie Film,,/en/ghost_lake,2005-05-17
+Ghost Rider,Mark Steven Johnson,Adventure Film|Thriller|Fantasy|Superhero movie|Horror|Drama,,/en/ghost_rider_2007,2007-01-15
+Ghost Ship,Steve Beck,Horror|Supernatural|Slasher,,/en/ghost_ship_2002,2002-10-22
+Ghost World,Terry Zwigoff,Indie film|Comedy-drama,,/en/ghost_world_2001,2001-06-16
+Ghosts of Mars,John Carpenter,Adventure Film|Science Fiction|Horror|Supernatural|Action Film|Thriller|Space Western,,/en/ghosts_of_mars,2001-08-24
+The International Playboys' First Movie: Ghouls Gone Wild!,Ted Geoghegan,Short Film|Musical,,/m/06ry42,2004-10-28
+Gie,Riri Riza,Biographical film|Political drama|Drama,,/en/gie,2005-07-14
+Gigantic (A Tale of Two Johns),A. J. Schnack,Indie film|Documentary film,,/en/gigantic_2003,2003-03-10
+Gigli,Martin Brest,Crime Thriller|Romance Film|Romantic comedy|Crime Fiction|Comedy,,/en/gigli,2003-07-27
+Ginger Snaps,John Fawcett,Teen film|Horror|Cult film,,/en/ginger_snaps,2000-09-10
+Ginger Snaps 2: Unleashed,Brett Sullivan,Thriller|Horror|Teen film|Creature Film|Feminist Film|Horror comedy|Comedy,,/en/ginger_snaps_2_unleashed,2004-01-30
+Girlfight,Karyn Kusama,Teen film|Sports|Coming-of-age story|Drama,,/en/girlfight,2000-01-22
+Gladiator,Ridley Scott,Historical drama|Epic film|Action Film|Adventure Film|Drama,,/en/gladiator_2000,2000-05-01
+Glastonbury,Julien Temple,Documentary film|Music|Concert film|Biographical film,,/en/glastonbury_2006,2006-04-14
+Glastonbury Anthems,Gavin Taylor|Declan Lowney|Janet Fraser-Crook|Phil Heyes,Documentary film|Music|Concert film,,/en/glastonbury_anthems,
+Glitter,Vondie Curtis-Hall,Musical|Romance Film|Musical Drama|Drama,,/en/glitter_2001,2001-09-21
+Global Heresy,Sidney J. Furie,Comedy,,/en/global_heresy,2002-09-03
+Glory Road,James Gartner,Sports|Historical period drama|Docudrama|Drama,,/en/glory_road_2006,2006-01-13
+Go Figure,Francine McDougall,Family|Comedy|Drama,,/en/go_figure_2005,2005-06-10
+Goal!,Danny Cannon,Sports|Romance Film|Drama,,/en/goal__2005,2005-09-08
+Goal II: Living the Dream,Jaume Collet-Serra,Sports|Drama,,/en/goal_2_living_the_dream,2007-02-09
+God Grew Tired of Us,Christopher Dillon Quinn|Tommy Walker,Documentary film|Indie film|Historical fiction,,/en/god_grew_tired_of_us,2006-09-04
+God on My Side,Andrew Denton,Documentary film|Christian film,,/en/god_on_my_side,2006-11-02
+Godavari,Sekhar Kammula,Romance Film|Drama|Tollywood|World cinema,,/en/godavari,2006-05-19
+Varalaru,K. S. Ravikumar,Action Film|Musical|Romance Film|Tamil cinema|Drama|Musical Drama,,/en/godfather,2006-02-24
+Godsend,Nick Hamm,Thriller|Science Fiction|Horror|Psychological thriller|Sci-Fi Horror|Drama,,/en/godsend,2004-04-30
+Godzilla 3D to the MAX,Keith Melton|Yoshimitsu Banno,Horror|Action Film|Science Fiction|Short Film,,/en/godzilla_3d_to_the_max,2007-09-12
+Godzilla Against Mechagodzilla,Masaaki Tezuka,Monster|Science Fiction|Cult film|World cinema|Action Film|Creature Film|Japanese Movies,,/en/godzilla_against_mechagodzilla,2002-12-15
+Godzilla vs. Megaguirus,Masaaki Tezuka,Monster|World cinema|Science Fiction|Cult film|Action Film|Creature Film|Japanese Movies,,/en/godzilla_vs_megaguirus,2000-11-03
+Godzilla: Tokyo SOS,Masaaki Tezuka,Monster|Fantasy|World cinema|Action/Adventure|Science Fiction|Cult film|Japanese Movies,,/en/godzilla_tokyo_sos,2003-11-03
+"Godzilla, Mothra and King Ghidorah: Giant Monsters All-Out Attack",Shusuke Kaneko,Science Fiction|Action Film|Adventure Film|Drama,,/wikipedia/fr/Godzilla$002C_Mothra_and_King_Ghidorah$003A_Giant_Monsters_All-Out_Attack,2001-11-03
+Godzilla: Final Wars,Ryuhei Kitamura,Fantasy|Science Fiction|Monster movie,,/en/godzilla_final_wars,2004-11-29
+Going the Distance,Mark Griffiths,Comedy,,/en/going_the_distance,2004-08-20
+Going to the Mat,Stuart Gillard,Family|Sports|Drama,,/en/going_to_the_mat,2004-03-19
+Going Upriver,George Butler,Documentary film|War film|Political cinema,,/en/going_upriver,2004-09-14
+Golmaal: Fun Unlimited,Rohit Shetty,Musical|Musical comedy|Comedy,,/en/golmaal,2006-07-14
+Gone in 60 Seconds,Dominic Sena,Thriller|Action Film|Crime Fiction|Crime Thriller|Heist film|Action/Adventure,,/en/gone_in_sixty_seconds,2000-06-05
+"Good bye, Lenin!",Wolfgang Becker,Romance Film|Comedy|Drama|Tragicomedy,,/en/good_bye_lenin,2003-02-09
+Good Luck Chuck,Mark Helfrich,Romance Film|Fantasy|Comedy|Drama,,/en/good_luck_chuck,2007-06-13
+"Good Night, and Good Luck",George Clooney,Political drama|Historical drama|Docudrama|Biographical film|Historical fiction|Drama,,/en/good_night_and_good_luck,2005-09-01
+"Goodbye, Dragon Inn",Tsai Ming-liang,Comedy-drama|Comedy of manners|Comedy|Drama,,/en/goodbye_dragon_inn,2003-12-12
+Gosford Park,Robert Altman,Mystery|Drama,,/en/gosford_park,2001-11-07
+Gothika,Mathieu Kassovitz,Thriller|Horror|Psychological thriller|Supernatural|Crime Thriller|Mystery,,/en/gothika,2003-11-13
+Gotta Kick It Up!,Ramón Menéndez,Teen film|Television film|Children's/Family|Family,,/en/gotta_kick_it_up,
+Goya's Ghosts,Miloš Forman,Biographical film|War film|Drama,,/en/goyas_ghosts,2006-11-08
+Gozu,Takashi Miike,Horror|Surrealism|World cinema|Japanese Movies|Horror comedy|Comedy,,/en/gozu,2003-07-12
+Grande École,Robert Salis,World cinema|LGBT|Romance Film|Gay|Gay Interest|Gay Themed|Ensemble Film|Erotic Drama|Drama,,/en/grande_ecole,2004-02-04
+Grandma's Boy,Nicholaus Goossen,Stoner film|Comedy,,/en/grandmas_boy,2006-01-06
+Grayson,John Fiorella,Indie film|Fan film|Short Film,,/en/grayson_2004,2004-07-20
+Grbavica: The Land of My Dreams,Jasmila Žbanić,War film|Art film|Drama,,/en/grbavica_2006,2006-02-12
+Green Street,Lexi Alexander,Sports|Crime Fiction|Drama,,/en/green_street,2005-03-12
+Green Tea,Zhang Yuan,Romance Film|Drama,,/en/green_tea_2003,2003-08-18
+Greenfingers,Joel Hershman,Comedy-drama|Prison film|Comedy|Drama,,/en/greenfingers,2001-09-14
+Gridiron Gang,Phil Joanou,Sports|Crime Fiction|Drama,,/en/gridiron_gang,2006-09-15
+Grill Point,Andreas Dresen,Drama|Comedy|Tragicomedy|Comedy-drama,,/en/grill_point,2002-02-12
+Grilled,Jason Ensler,Black comedy|Buddy film|Workplace Comedy|Comedy,,/en/grilled,2006-07-11
+Grindhouse,Robert Rodriguez|Quentin Tarantino|Eli Roth|Edgar Wright|Rob Zombie|Jason Eisener,Slasher|Thriller|Action Film|Horror|Zombie Film,,/en/grind_house,2007-04-06
+Grizzly Falls,Stewart Raffill,Adventure Film|Animal Picture|Family-Oriented Adventure|Family|Drama,,/en/grizzly_falls,2004-06-28
+Grizzly Man,Werner Herzog,Documentary film|Biographical film,,/en/grizzly_man,2005-01-24
+GRODMIN,Jim Horwitz,Avant-garde|Experimental film|Drama,,/en/grodmin,
+Gudumba Shankar,Veera Shankar,Action Film|Drama|Tollywood|World cinema,,/en/gudumba_shankar,2004-09-09
+Che: Part Two,Steven Soderbergh,Biographical film|War film|Historical drama|Drama,,/en/che_part_two,2008-05-21
+Guess Who,Kevin Rodney Sullivan,Romance Film|Romantic comedy|Comedy of manners|Domestic Comedy|Comedy,,/en/guess_who_2005,2005-03-25
+Gunner Palace,Michael Tucker|Petra Epperlein,Documentary film|Indie film|War film,,/en/gunner_palace,2005-03-04
+Guru,Mani Ratnam,Biographical film|Musical|Romance Film|Drama|Musical Drama,,/en/guru_2007,2007-01-12
+Primeval,Michael Katleman,Thriller|Horror|Natural horror film|Action/Adventure|Action Film,,/en/primeval_2007,2007-01-12
+Gypsy 83,Todd Stephens,Coming of age|LGBT|Black comedy|Indie film|Comedy-drama|Road movie|Comedy|Drama,,/en/gypsy_83,
+H,Jong-hyuk Lee,Thriller|Horror|Drama|Mystery|Crime Fiction|East Asian cinema|World cinema,,/en/h_2002,2002-12-27
+H. G. Wells' The War of the Worlds,Timothy Hines,Indie film|Steampunk|Science Fiction|Thriller,,/en/h_g_wells_the_war_of_the_worlds,2005-06-14
+H. G. Wells' War of the Worlds,David Michael Latt,Indie film|Science Fiction|Thriller|Film adaptation|Action Film|Alien Film|Horror|Mockbuster|Drama,,/en/h_g_wells_war_of_the_worlds,2005-06-28
+Hadh Kar Di Aapne,Manoj Agrawal,Romantic comedy|Bollywood,,/en/hadh_kar_di_aapne,2000-04-14
+Haggard: The Movie,Bam Margera,Indie film|Comedy,,/en/haggard_the_movie,2003-06-24
+Haiku Tunnel,Jacob Kornbluth|Josh Kornbluth,Black comedy|Indie film|Satire|Workplace Comedy|Comedy,,/en/haiku_tunnel,
+Hairspray,Adam Shankman,Musical|Romance Film|Comedy|Musical comedy,,/en/hairspray,2007-07-13
+Half Nelson,Ryan Fleck,Social problem film|Drama,,/en/half_nelson,2006-01-23
+Half-Life,Jennifer Phang,Fantasy|Indie film|Science Fiction|Fantasy Drama|Drama,,/en/half_life_2006,
+Halloween Resurrection,Rick Rosenthal,Slasher|Horror|Cult film|Teen film,,/en/halloween_resurrection,2002-07-12
+Halloweentown High,Mark A.Z. Dippé,Fantasy|Teen film|Fantasy Comedy|Comedy|Family,,/en/halloweentown_high,2004-10-08
+Halloweentown II: Kalabar's Revenge,Mary Lambert,Fantasy|Children's Fantasy|Children's/Family|Family,,/en/halloweentown_ii_kalabars_revenge,2001-10-12
+Return to Halloweentown,David Jackson,Family|Children's/Family|Fantasy Comedy|Comedy,,/en/halloweentown_witch_u,2006-10-20
+Hamlet,Michael Almereyda,Thriller|Romance Film|Drama,,/en/hamlet_2000,2000-05-12
+Hana and Alice,Shunji Iwai,Romance Film|Romantic comedy|Comedy|Drama,,/en/hana_alice,2004-03-13
+Hannibal,Ridley Scott,Thriller|Psychological thriller|Horror|Action Film|Mystery|Crime Thriller|Drama,,/en/hannibal,2001-02-09
+Making Babies,Daniel Lind Lagerlöf,Drama,,/en/hans_och_hennes,2001-01-29
+Hanuman,V.G. Samant|Milind Ukey,Animation|Bollywood|World cinema,,/en/hanuman_2005,2005-10-21
+Hanuman Junction,M.Raja,Action Film|Comedy|Drama|Tollywood|World cinema,,/en/hanuman_junction,2001-12-21
+Happily N'Ever After,Paul J. Bolger|Yvette Kaplan,Fantasy|Animation|Family|Comedy|Adventure Film,,/en/happily_never_after,2006-12-16
+Happy,A. Karunakaran,Romance Film|Musical|Comedy|Drama|Musical comedy|Musical Drama,,/en/happy_2006,2006-01-27
+Happy Endings,Don Roos,LGBT|Music|Thriller|Romantic comedy|Indie film|Romance Film|Comedy|Drama,,/en/happy_endings,2005-01-20
+Happy Ero Christmas,Lee Geon-dong,Romance Film|Comedy|East Asian cinema|World cinema,,/en/happy_ero_christmas,2003-12-17
+Happy Feet,George Miller|Warren Coleman|Judy Morris,Family|Animation|Comedy|Music|Musical|Musical comedy,,/en/happy_feet,2006-11-16
+I Love New Year,Radhika Rao|Vinay Sapru,Caper story|Crime Fiction|Romantic comedy|Romance Film|Bollywood|World cinema,,/wikipedia/en_title/I_Love_New_Year,2013-12-30
+Har Dil Jo Pyar Karega,Raj Kanwar,Musical|Romance Film|World cinema|Musical Drama|Drama,,/en/har_dil_jo_pyar_karega,2000-07-24
+Hard Candy,David Slade,Psychological thriller|Thriller|Suspense|Indie film|Erotic thriller|Drama,,/en/hard_candy,
+Hard Luck,Mario Van Peebles,Thriller|Crime Fiction|Action/Adventure|Action Film|Drama,,/en/hard_luck,2006-10-17
+Hardball,Brian Robbins,Sports|Drama,,/en/hardball,2001-09-14
+Harold &amp; Kumar Go to White Castle,Danny Leiner,Stoner film|Buddy film|Adventure Film|Comedy,,/en/harold_kumar_go_to_white_castle,2004-05-20
+Harry Potter and the Chamber of Secrets,Chris Columbus,Adventure Film|Family|Fantasy|Mystery,,/en/harry_potter_and_the_chamber_of_secrets_2002,2002-11-03
+Harry Potter and the Goblet of Fire,Mike Newell,Family|Fantasy|Adventure Film|Thriller|Science Fiction|Supernatural|Mystery|Children's Fantasy|Children's/Family|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_goblet_of_fire_2005,2005-11-06
+Harry Potter and the Half-Blood Prince,David Yates,Adventure Film|Fantasy|Mystery|Action Film|Family|Romance Film|Children's Fantasy|Children's/Family|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_half_blood_prince_2008,2009-07-06
+Harry Potter and the Order of the Phoenix,David Yates,Family|Mystery|Adventure Film|Fantasy|Fantasy Adventure|Fiction,,/en/harry_potter_and_the_order_of_the_phoenix_2007,2007-06-28
diff --git a/solr-8.1.1/example/films/films.json b/solr-8.1.1/example/films/films.json
new file mode 100644
index 000000000..75d1fce05
--- /dev/null
+++ b/solr-8.1.1/example/films/films.json
@@ -0,0 +1,15830 @@
+[
+ {
+ "id": "/en/45_2006",
+ "directed_by": [
+ "Gary Lennon"
+ ],
+ "initial_release_date": "2006-11-30",
+ "genre": [
+ "Black comedy",
+ "Thriller",
+ "Psychological thriller",
+ "Indie film",
+ "Action Film",
+ "Crime Thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": ".45"
+ },
+ {
+ "id": "/en/9_2005",
+ "directed_by": [
+ "Shane Acker"
+ ],
+ "initial_release_date": "2005-04-21",
+ "genre": [
+ "Computer Animation",
+ "Animation",
+ "Apocalyptic and post-apocalyptic fiction",
+ "Science Fiction",
+ "Short Film",
+ "Thriller",
+ "Fantasy"
+ ],
+ "name": "9"
+ },
+ {
+ "id": "/en/69_2004",
+ "directed_by": [
+ "Lee Sang-il"
+ ],
+ "initial_release_date": "2004-07-10",
+ "genre": [
+ "Japanese Movies",
+ "Drama"
+ ],
+ "name": "69"
+ },
+ {
+ "id": "/en/300_2007",
+ "directed_by": [
+ "Zack Snyder"
+ ],
+ "initial_release_date": "2006-12-09",
+ "genre": [
+ "Epic film",
+ "Adventure Film",
+ "Fantasy",
+ "Action Film",
+ "Historical fiction",
+ "War film",
+ "Superhero movie",
+ "Historical Epic"
+ ],
+ "name": "300"
+ },
+ {
+ "id": "/en/2046_2004",
+ "directed_by": [
+ "Wong Kar-wai"
+ ],
+ "initial_release_date": "2004-05-20",
+ "genre": [
+ "Romance Film",
+ "Fantasy",
+ "Science Fiction",
+ "Drama"
+ ],
+ "name": "2046"
+ },
+ {
+ "id": "/en/quien_es_el_senor_lopez",
+ "directed_by": [
+ "Luis Mandoki"
+ ],
+ "genre": [
+ "Documentary film"
+ ],
+ "name": "\u00bfQui\u00e9n es el se\u00f1or L\u00f3pez?"
+ },
+ {
+ "id": "/en/weird_al_yankovic_the_ultimate_video_collection",
+ "directed_by": [
+ "Jay Levey",
+ "\"Weird Al\" Yankovic"
+ ],
+ "initial_release_date": "2003-11-04",
+ "genre": [
+ "Music video",
+ "Parody"
+ ],
+ "name": "\"Weird Al\" Yankovic: The Ultimate Video Collection"
+ },
+ {
+ "id": "/en/15_park_avenue",
+ "directed_by": [
+ "Aparna Sen"
+ ],
+ "initial_release_date": "2005-10-27",
+ "genre": [
+ "Art film",
+ "Romance Film",
+ "Musical",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "15 Park Avenue"
+ },
+ {
+ "id": "/en/2_fast_2_furious",
+ "directed_by": [
+ "John Singleton"
+ ],
+ "initial_release_date": "2003-06-03",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction"
+ ],
+ "name": "2 Fast 2 Furious"
+ },
+ {
+ "id": "/en/7g_rainbow_colony",
+ "directed_by": [
+ "Selvaraghavan"
+ ],
+ "initial_release_date": "2004-10-15",
+ "genre": [
+ "Drama"
+ ],
+ "name": "7G Rainbow Colony"
+ },
+ {
+ "id": "/en/3-iron",
+ "directed_by": [
+ "Kim Ki-duk"
+ ],
+ "initial_release_date": "2004-09-07",
+ "genre": [
+ "Crime Fiction",
+ "Romance Film",
+ "East Asian cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "3-Iron"
+ },
+ {
+ "id": "/en/10_5_apocalypse",
+ "directed_by": [
+ "John Lafia"
+ ],
+ "initial_release_date": "2006-03-18",
+ "genre": [
+ "Disaster Film",
+ "Thriller",
+ "Television film",
+ "Action/Adventure",
+ "Action Film"
+ ],
+ "name": "10.5: Apocalypse"
+ },
+ {
+ "id": "/en/8_mile",
+ "directed_by": [
+ "Curtis Hanson"
+ ],
+ "initial_release_date": "2002-09-08",
+ "genre": [
+ "Musical",
+ "Hip hop film",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "8 Mile"
+ },
+ {
+ "id": "/en/100_girls",
+ "directed_by": [
+ "Michael Davis"
+ ],
+ "initial_release_date": "2001-09-25",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Indie film",
+ "Teen film",
+ "Comedy"
+ ],
+ "name": "100 Girls"
+ },
+ {
+ "id": "/en/40_days_and_40_nights",
+ "directed_by": [
+ "Michael Lehmann"
+ ],
+ "initial_release_date": "2002-03-01",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Sex comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "40 Days and 40 Nights"
+ },
+ {
+ "id": "/en/50_cent_the_new_breed",
+ "directed_by": [
+ "Don Robinson",
+ "Damon Johnson",
+ "Philip Atwell",
+ "Ian Inaba",
+ "Stephen Marshall",
+ "John Quigley",
+ "Jessy Terrero",
+ "Noa Shaw"
+ ],
+ "initial_release_date": "2003-04-15",
+ "genre": [
+ "Documentary film",
+ "Music",
+ "Concert film",
+ "Biographical film"
+ ],
+ "name": "50 Cent: The New Breed"
+ },
+ {
+ "id": "/en/3_the_dale_earnhardt_story",
+ "directed_by": [
+ "Russell Mulcahy"
+ ],
+ "initial_release_date": "2004-12-11",
+ "genre": [
+ "Sports",
+ "Auto racing",
+ "Biographical film",
+ "Drama"
+ ],
+ "name": "3: The Dale Earnhardt Story"
+ },
+ {
+ "id": "/en/61__2001",
+ "directed_by": [
+ "Billy Crystal"
+ ],
+ "initial_release_date": "2001-04-28",
+ "genre": [
+ "Sports",
+ "History",
+ "Historical period drama",
+ "Television film",
+ "Drama"
+ ],
+ "name": "61*"
+ },
+ {
+ "id": "/en/24_hour_party_people",
+ "directed_by": [
+ "Michael Winterbottom"
+ ],
+ "initial_release_date": "2002-02-13",
+ "genre": [
+ "Biographical film",
+ "Comedy-drama",
+ "Comedy",
+ "Music",
+ "Drama"
+ ],
+ "name": "24 Hour Party People"
+ },
+ {
+ "id": "/en/10th_wolf",
+ "directed_by": [
+ "Robert Moresco"
+ ],
+ "initial_release_date": "2006-08-18",
+ "genre": [
+ "Mystery",
+ "Thriller",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Gangster Film",
+ "Drama"
+ ],
+ "name": "10th &amp; Wolf"
+ },
+ {
+ "id": "/en/25th_hour",
+ "directed_by": [
+ "Spike Lee"
+ ],
+ "initial_release_date": "2002-12-16",
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "25th Hour"
+ },
+ {
+ "id": "/en/7_seconds_2005",
+ "directed_by": [
+ "Simon Fellows"
+ ],
+ "initial_release_date": "2005-06-28",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction"
+ ],
+ "name": "7 Seconds"
+ },
+ {
+ "id": "/en/28_days_later",
+ "directed_by": [
+ "Danny Boyle"
+ ],
+ "initial_release_date": "2002-11-01",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Thriller"
+ ],
+ "name": "28 Days Later"
+ },
+ {
+ "id": "/en/21_grams",
+ "directed_by": [
+ "Alejandro Gonz\u00e1lez I\u00f1\u00e1rritu"
+ ],
+ "initial_release_date": "2003-09-05",
+ "genre": [
+ "Thriller",
+ "Ensemble Film",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "21 Grams"
+ },
+ {
+ "id": "/en/9th_company",
+ "directed_by": [
+ "Fedor Bondarchuk"
+ ],
+ "initial_release_date": "2005-09-29",
+ "genre": [
+ "War film",
+ "Action Film",
+ "Historical fiction",
+ "Drama"
+ ],
+ "name": "The 9th Company"
+ },
+ {
+ "id": "/en/102_dalmatians",
+ "directed_by": [
+ "Kevin Lima"
+ ],
+ "initial_release_date": "2000-11-22",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Comedy"
+ ],
+ "name": "102 Dalmatians"
+ },
+ {
+ "id": "/en/16_years_of_alcohol",
+ "directed_by": [
+ "Richard Jobson"
+ ],
+ "initial_release_date": "2003-08-14",
+ "genre": [
+ "Indie film",
+ "Drama"
+ ],
+ "name": "16 Years of Alcohol"
+ },
+ {
+ "id": "/en/12b",
+ "directed_by": [
+ "Jeeva"
+ ],
+ "initial_release_date": "2001-09-28",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "12B"
+ },
+ {
+ "id": "/en/2009_lost_memories",
+ "directed_by": [
+ "Lee Si-myung"
+ ],
+ "initial_release_date": "2002-02-01",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Science Fiction",
+ "Mystery",
+ "Drama"
+ ],
+ "name": "2009 Lost Memories"
+ },
+ {
+ "id": "/en/16_blocks",
+ "directed_by": [
+ "Richard Donner"
+ ],
+ "initial_release_date": "2006-03-01",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Action Film",
+ "Drama"
+ ],
+ "name": "16 Blocks"
+ },
+ {
+ "id": "/en/15_minutes",
+ "directed_by": [
+ "John Herzfeld"
+ ],
+ "initial_release_date": "2001-03-01",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Drama"
+ ],
+ "name": "15 Minutes"
+ },
+ {
+ "id": "/en/50_first_dates",
+ "directed_by": [
+ "Peter Segal"
+ ],
+ "initial_release_date": "2004-02-13",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "name": "50 First Dates"
+ },
+ {
+ "id": "/en/9_songs",
+ "directed_by": [
+ "Michael Winterbottom"
+ ],
+ "initial_release_date": "2004-05-16",
+ "genre": [
+ "Erotica",
+ "Musical",
+ "Romance Film",
+ "Erotic Drama",
+ "Musical Drama",
+ "Drama"
+ ],
+ "name": "9 Songs"
+ },
+ {
+ "id": "/en/20_fingers_2004",
+ "directed_by": [
+ "Mania Akbari"
+ ],
+ "initial_release_date": "2004-09-01",
+ "genre": [
+ "World cinema",
+ "Drama"
+ ],
+ "name": "20 Fingers"
+ },
+ {
+ "id": "/en/3_needles",
+ "directed_by": [
+ "Thom Fitzgerald"
+ ],
+ "initial_release_date": "2006-12-01",
+ "genre": [
+ "Indie film",
+ "Social problem film",
+ "Chinese Movies",
+ "Drama"
+ ],
+ "name": "3 Needles"
+ },
+ {
+ "id": "/en/28_days_2000",
+ "directed_by": [
+ "Betty Thomas"
+ ],
+ "initial_release_date": "2000-02-08",
+ "genre": [
+ "Comedy-drama",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "28 Days"
+ },
+ {
+ "id": "/en/36_china_town",
+ "directed_by": [
+ "Abbas Burmawalla",
+ "Mustan Burmawalla"
+ ],
+ "initial_release_date": "2006-04-21",
+ "genre": [
+ "Thriller",
+ "Musical",
+ "Comedy",
+ "Mystery",
+ "Crime Fiction",
+ "Bollywood",
+ "Musical comedy"
+ ],
+ "name": "36 China Town"
+ },
+ {
+ "id": "/en/7_mujeres_1_homosexual_y_carlos",
+ "directed_by": [
+ "Rene Bueno"
+ ],
+ "initial_release_date": "2004-06-01",
+ "genre": [
+ "Romantic comedy",
+ "LGBT",
+ "Romance Film",
+ "World cinema",
+ "Sex comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "7 mujeres, 1 homosexual y Carlos"
+ },
+ {
+ "id": "/en/88_minutes",
+ "directed_by": [
+ "Jon Avnet"
+ ],
+ "initial_release_date": "2007-02-14",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Mystery",
+ "Drama"
+ ],
+ "name": "88 Minutes"
+ },
+ {
+ "id": "/en/500_years_later",
+ "directed_by": [
+ "Owen 'Alik Shahadah"
+ ],
+ "initial_release_date": "2005-10-11",
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "History"
+ ],
+ "name": "500 Years Later"
+ },
+ {
+ "id": "/en/50_ways_of_saying_fabulous",
+ "directed_by": [
+ "Stewart Main"
+ ],
+ "genre": [
+ "LGBT",
+ "Indie film",
+ "Historical period drama",
+ "Gay Themed",
+ "World cinema",
+ "Coming of age",
+ "Drama"
+ ],
+ "name": "50 Ways of Saying Fabulous"
+ },
+ {
+ "id": "/en/5x2",
+ "directed_by": [
+ "Fran\u00e7ois Ozon"
+ ],
+ "initial_release_date": "2004-09-01",
+ "genre": [
+ "Romance Film",
+ "World cinema",
+ "Marriage Drama",
+ "Fiction",
+ "Drama"
+ ],
+ "name": "5x2"
+ },
+ {
+ "id": "/en/28_weeks_later",
+ "directed_by": [
+ "Juan Carlos Fresnadillo"
+ ],
+ "initial_release_date": "2007-04-26",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Thriller"
+ ],
+ "name": "28 Weeks Later"
+ },
+ {
+ "id": "/en/10_5",
+ "directed_by": [
+ "John Lafia"
+ ],
+ "initial_release_date": "2004-05-02",
+ "genre": [
+ "Disaster Film",
+ "Thriller",
+ "Action/Adventure",
+ "Drama"
+ ],
+ "name": "10.5"
+ },
+ {
+ "id": "/en/13_going_on_30",
+ "directed_by": [
+ "Gary Winick"
+ ],
+ "initial_release_date": "2004-04-14",
+ "genre": [
+ "Romantic comedy",
+ "Coming of age",
+ "Fantasy",
+ "Romance Film",
+ "Fantasy Comedy",
+ "Comedy"
+ ],
+ "name": "13 Going on 30"
+ },
+ {
+ "id": "/en/2ldk",
+ "directed_by": [
+ "Yukihiko Tsutsumi"
+ ],
+ "initial_release_date": "2004-05-13",
+ "genre": [
+ "LGBT",
+ "Thriller",
+ "Psychological thriller",
+ "World cinema",
+ "Japanese Movies",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "2LDK"
+ },
+ {
+ "id": "/en/7_phere",
+ "directed_by": [
+ "Ishaan Trivedi"
+ ],
+ "initial_release_date": "2005-07-29",
+ "genre": [
+ "Bollywood",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "7\u00bd Phere"
+ },
+ {
+ "id": "/en/a_beautiful_mind",
+ "directed_by": [
+ "Ron Howard"
+ ],
+ "initial_release_date": "2001-12-13",
+ "genre": [
+ "Biographical film",
+ "Psychological thriller",
+ "Historical period drama",
+ "Romance Film",
+ "Marriage Drama",
+ "Documentary film",
+ "Drama"
+ ],
+ "name": "A Beautiful Mind"
+ },
+ {
+ "id": "/en/a_cinderella_story",
+ "directed_by": [
+ "Mark Rosman"
+ ],
+ "initial_release_date": "2004-07-10",
+ "genre": [
+ "Teen film",
+ "Romantic comedy",
+ "Romance Film",
+ "Family",
+ "Comedy"
+ ],
+ "name": "A Cinderella Story"
+ },
+ {
+ "id": "/en/a_cock_and_bull_story",
+ "directed_by": [
+ "Michael Winterbottom"
+ ],
+ "initial_release_date": "2005-07-17",
+ "genre": [
+ "Mockumentary",
+ "Indie film",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Cock and Bull Story"
+ },
+ {
+ "id": "/en/a_common_thread",
+ "directed_by": [
+ "\u00c9l\u00e9onore Faucher"
+ ],
+ "initial_release_date": "2004-05-14",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ],
+ "name": "A Common Thread"
+ },
+ {
+ "id": "/en/a_dirty_shame",
+ "directed_by": [
+ "John Waters"
+ ],
+ "initial_release_date": "2004-09-12",
+ "genre": [
+ "Sex comedy",
+ "Cult film",
+ "Parody",
+ "Black comedy",
+ "Gross out",
+ "Gross-out film",
+ "Comedy"
+ ],
+ "name": "A Dirty Shame"
+ },
+ {
+ "id": "/en/a_duo_occasion",
+ "directed_by": [
+ "Pierre Lamoureux"
+ ],
+ "initial_release_date": "2005-11-22",
+ "genre": [
+ "Music video"
+ ],
+ "name": "A Duo Occasion"
+ },
+ {
+ "id": "/en/a_good_year",
+ "directed_by": [
+ "Ridley Scott"
+ ],
+ "initial_release_date": "2006-09-09",
+ "genre": [
+ "Romantic comedy",
+ "Film adaptation",
+ "Romance Film",
+ "Comedy-drama",
+ "Slice of life",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Good Year"
+ },
+ {
+ "id": "/en/a_history_of_violence_2005",
+ "directed_by": [
+ "David Cronenberg"
+ ],
+ "initial_release_date": "2005-05-16",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "A History of Violence"
+ },
+ {
+ "id": "/en/ett_hal_i_mitt_hjarta",
+ "directed_by": [
+ "Lukas Moodysson"
+ ],
+ "initial_release_date": "2004-09-10",
+ "genre": [
+ "Horror",
+ "Experimental film",
+ "Social problem film",
+ "Drama"
+ ],
+ "name": "A Hole in My Heart"
+ },
+ {
+ "id": "/en/a_knights_tale",
+ "directed_by": [
+ "Brian Helgeland"
+ ],
+ "initial_release_date": "2001-03-08",
+ "genre": [
+ "Romantic comedy",
+ "Adventure Film",
+ "Action Film",
+ "Action/Adventure",
+ "Historical period drama",
+ "Costume Adventure",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Knight's Tale"
+ },
+ {
+ "id": "/en/a_league_of_ordinary_gentlemen",
+ "directed_by": [
+ "Christopher Browne",
+ "Alexander H. Browne"
+ ],
+ "initial_release_date": "2006-03-21",
+ "genre": [
+ "Documentary film",
+ "Sports",
+ "Culture &amp; Society",
+ "Biographical film"
+ ],
+ "name": "A League of Ordinary Gentlemen"
+ },
+ {
+ "id": "/en/a_little_trip_to_heaven",
+ "directed_by": [
+ "Baltasar Korm\u00e1kur"
+ ],
+ "initial_release_date": "2005-12-26",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Black comedy",
+ "Indie film",
+ "Comedy-drama",
+ "Detective fiction",
+ "Ensemble Film",
+ "Drama"
+ ],
+ "name": "A Little Trip to Heaven"
+ },
+ {
+ "id": "/en/a_lot_like_love",
+ "directed_by": [
+ "Nigel Cole"
+ ],
+ "initial_release_date": "2005-04-21",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Lot like Love"
+ },
+ {
+ "id": "/en/a_love_song_for_bobby_long",
+ "directed_by": [
+ "Shainee Gabel"
+ ],
+ "initial_release_date": "2004-09-02",
+ "genre": [
+ "Film adaptation",
+ "Melodrama",
+ "Drama"
+ ],
+ "name": "A Love Song for Bobby Long"
+ },
+ {
+ "id": "/en/a_man_a_real_one",
+ "directed_by": [
+ "Arnaud Larrieu",
+ "Jean-Marie Larrieu"
+ ],
+ "initial_release_date": "2003-05-28",
+ "genre": [
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Man, a Real One"
+ },
+ {
+ "id": "/en/a_midsummer_nights_rave",
+ "directed_by": [
+ "Gil Cates Jr."
+ ],
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Teen film",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "A Midsummer Night's Rave"
+ },
+ {
+ "id": "/en/a_mighty_wind",
+ "directed_by": [
+ "Christopher Guest"
+ ],
+ "initial_release_date": "2003-03-12",
+ "genre": [
+ "Mockumentary",
+ "Parody",
+ "Musical",
+ "Musical comedy",
+ "Comedy"
+ ],
+ "name": "A Mighty Wind"
+ },
+ {
+ "id": "/en/a_perfect_day",
+ "directed_by": [
+ "Khalil Joreige",
+ "Joana Hadjithomas"
+ ],
+ "genre": [
+ "World cinema",
+ "Drama"
+ ],
+ "name": "A Perfect Day"
+ },
+ {
+ "id": "/en/a_prairie_home_companion_2006",
+ "directed_by": [
+ "Robert Altman"
+ ],
+ "initial_release_date": "2006-02-12",
+ "genre": [
+ "Musical comedy",
+ "Drama"
+ ],
+ "name": "A Prairie Home Companion"
+ },
+ {
+ "id": "/en/a_ring_of_endless_light_2002",
+ "directed_by": [
+ "Greg Beeman"
+ ],
+ "initial_release_date": "2002-08-23",
+ "genre": [
+ "Drama"
+ ],
+ "name": "A Ring of Endless Light"
+ },
+ {
+ "id": "/en/a_scanner_darkly_2006",
+ "directed_by": [
+ "Richard Linklater"
+ ],
+ "initial_release_date": "2006-07-07",
+ "genre": [
+ "Science Fiction",
+ "Dystopia",
+ "Animation",
+ "Future noir",
+ "Film adaptation",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "A Scanner Darkly"
+ },
+ {
+ "id": "/en/a_short_film_about_john_bolton",
+ "directed_by": [
+ "Neil Gaiman"
+ ],
+ "genre": [
+ "Documentary film",
+ "Short Film",
+ "Black comedy",
+ "Indie film",
+ "Mockumentary",
+ "Graphic &amp; Applied Arts",
+ "Comedy",
+ "Biographical film"
+ ],
+ "name": "A Short Film About John Bolton"
+ },
+ {
+ "id": "/en/a_shot_in_the_west",
+ "directed_by": [
+ "Bob Kelly"
+ ],
+ "initial_release_date": "2006-07-16",
+ "genre": [
+ "Western",
+ "Short Film"
+ ],
+ "name": "A Shot in the West"
+ },
+ {
+ "id": "/en/a_sound_of_thunder_2005",
+ "directed_by": [
+ "Peter Hyams"
+ ],
+ "initial_release_date": "2005-05-15",
+ "genre": [
+ "Science Fiction",
+ "Adventure Film",
+ "Thriller",
+ "Action Film",
+ "Apocalyptic and post-apocalyptic fiction",
+ "Time travel"
+ ],
+ "name": "A Sound of Thunder"
+ },
+ {
+ "id": "/en/a_state_of_mind",
+ "directed_by": [
+ "Daniel Gordon"
+ ],
+ "initial_release_date": "2005-08-10",
+ "genre": [
+ "Documentary film",
+ "Political cinema",
+ "Sports"
+ ],
+ "name": "A State of Mind"
+ },
+ {
+ "id": "/en/a_time_for_drunken_horses",
+ "directed_by": [
+ "Bahman Ghobadi"
+ ],
+ "genre": [
+ "World cinema",
+ "War film",
+ "Drama"
+ ],
+ "name": "A Time for Drunken Horses"
+ },
+ {
+ "id": "/en/a_ton_image",
+ "directed_by": [
+ "Aruna Villiers"
+ ],
+ "initial_release_date": "2004-05-26",
+ "genre": [
+ "Thriller",
+ "Science Fiction"
+ ],
+ "name": "\u00c0 ton image"
+ },
+ {
+ "id": "/en/a_very_long_engagement",
+ "directed_by": [
+ "Jean-Pierre Jeunet"
+ ],
+ "initial_release_date": "2004-10-27",
+ "genre": [
+ "War film",
+ "Romance Film",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "A Very Long Engagement"
+ },
+ {
+ "id": "/en/a_view_from_the_eiffel_tower",
+ "directed_by": [
+ "Nikola Vuk\u010devi\u0107"
+ ],
+ "genre": [
+ "Drama"
+ ],
+ "name": "A View from Eiffel Tower"
+ },
+ {
+ "id": "/en/a_walk_to_remember",
+ "directed_by": [
+ "Adam Shankman"
+ ],
+ "initial_release_date": "2002-01-23",
+ "genre": [
+ "Coming of age",
+ "Romance Film",
+ "Drama"
+ ],
+ "name": "A Walk to Remember"
+ },
+ {
+ "id": "/en/a_i",
+ "directed_by": [
+ "Steven Spielberg"
+ ],
+ "initial_release_date": "2001-06-26",
+ "genre": [
+ "Science Fiction",
+ "Future noir",
+ "Adventure Film",
+ "Drama"
+ ],
+ "name": "A.I. Artificial Intelligence"
+ },
+ {
+ "id": "/en/a_k_a_tommy_chong",
+ "directed_by": [
+ "Josh Gilbert"
+ ],
+ "initial_release_date": "2006-06-14",
+ "genre": [
+ "Documentary film",
+ "Culture &amp; Society",
+ "Law &amp; Crime",
+ "Biographical film"
+ ],
+ "name": "a/k/a Tommy Chong"
+ },
+ {
+ "id": "/en/aalvar",
+ "directed_by": [
+ "Chella"
+ ],
+ "initial_release_date": "2007-01-12",
+ "genre": [
+ "Action Film",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "name": "Aalvar"
+ },
+ {
+ "id": "/en/aap_ki_khatir",
+ "directed_by": [
+ "Dharmesh Darshan"
+ ],
+ "initial_release_date": "2006-08-25",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Bollywood",
+ "Drama"
+ ],
+ "name": "Aap Ki Khatir"
+ },
+ {
+ "id": "/en/aaru_2005",
+ "directed_by": [
+ "Hari"
+ ],
+ "initial_release_date": "2005-12-09",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Drama",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "name": "Aaru"
+ },
+ {
+ "id": "/en/aata",
+ "directed_by": [
+ "V.N. Aditya"
+ ],
+ "initial_release_date": "2007-05-09",
+ "genre": [
+ "Romance Film",
+ "Tollywood",
+ "World cinema"
+ ],
+ "name": "Aata"
+ },
+ {
+ "id": "/en/aathi",
+ "directed_by": [
+ "Ramana"
+ ],
+ "initial_release_date": "2006-01-14",
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Musical",
+ "Action Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "Aadhi"
+ },
+ {
+ "id": "/en/aayitha_ezhuthu",
+ "directed_by": [
+ "Mani Ratnam"
+ ],
+ "initial_release_date": "2004-05-21",
+ "genre": [
+ "Thriller",
+ "Political thriller",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "Aaytha Ezhuthu"
+ },
+ {
+ "id": "/en/abandon_2002",
+ "directed_by": [
+ "Stephen Gaghan"
+ ],
+ "initial_release_date": "2002-10-18",
+ "genre": [
+ "Mystery",
+ "Thriller",
+ "Psychological thriller",
+ "Suspense",
+ "Drama"
+ ],
+ "name": "Abandon"
+ },
+ {
+ "id": "/en/abduction_the_megumi_yokota_story",
+ "directed_by": [
+ "Patty Kim",
+ "Chris Sheridan"
+ ],
+ "genre": [
+ "Documentary film",
+ "Political cinema",
+ "Culture &amp; Society",
+ "Law &amp; Crime"
+ ],
+ "name": "Abduction: The Megumi Yokota Story"
+ },
+ {
+ "id": "/en/about_a_boy_2002",
+ "directed_by": [
+ "Chris Weitz",
+ "Paul Weitz"
+ ],
+ "initial_release_date": "2002-04-26",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "About a Boy"
+ },
+ {
+ "id": "/en/about_schmidt",
+ "directed_by": [
+ "Alexander Payne"
+ ],
+ "initial_release_date": "2002-05-22",
+ "genre": [
+ "Black comedy",
+ "Indie film",
+ "Comedy-drama",
+ "Tragicomedy",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "About Schmidt"
+ },
+ {
+ "id": "/en/accepted",
+ "directed_by": [
+ "Steve Pink"
+ ],
+ "initial_release_date": "2006-08-18",
+ "genre": [
+ "Teen film",
+ "Comedy"
+ ],
+ "name": "Accepted"
+ },
+ {
+ "id": "/en/across_the_hall",
+ "directed_by": [
+ "Alex Merkin",
+ "Alex Merkin"
+ ],
+ "genre": [
+ "Short Film",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Across the Hall"
+ },
+ {
+ "id": "/en/adam_steve",
+ "directed_by": [
+ "Craig Chester"
+ ],
+ "initial_release_date": "2005-04-24",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "LGBT",
+ "Gay Themed",
+ "Indie film",
+ "Gay",
+ "Gay Interest",
+ "Comedy"
+ ],
+ "name": "Adam &amp; Steve"
+ },
+ {
+ "id": "/en/adam_resurrected",
+ "directed_by": [
+ "Paul Schrader"
+ ],
+ "initial_release_date": "2008-08-30",
+ "genre": [
+ "Historical period drama",
+ "Film adaptation",
+ "War film",
+ "Drama"
+ ],
+ "name": "Adam Resurrected"
+ },
+ {
+ "id": "/en/adaptation_2002",
+ "directed_by": [
+ "Spike Jonze"
+ ],
+ "initial_release_date": "2002-12-06",
+ "genre": [
+ "Crime Fiction",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Adaptation"
+ },
+ {
+ "id": "/en/address_unknown",
+ "directed_by": [
+ "Kim Ki-duk"
+ ],
+ "initial_release_date": "2001-06-02",
+ "genre": [
+ "War film",
+ "Drama"
+ ],
+ "name": "Address Unknown"
+ },
+ {
+ "id": "/en/adrenaline_rush_2002",
+ "directed_by": [
+ "Marc Fafard"
+ ],
+ "initial_release_date": "2002-10-18",
+ "genre": [
+ "Documentary film",
+ "Short Film"
+ ],
+ "name": "Adrenaline Rush"
+ },
+ {
+ "id": "/en/essential_keys_to_better_bowling_2006",
+ "directed_by": [],
+ "genre": [
+ "Documentary film",
+ "Sports"
+ ],
+ "name": "Essential Keys To Better Bowling"
+ },
+ {
+ "id": "/en/adventures_into_digital_comics",
+ "directed_by": [
+ "S\u00e9bastien Dumesnil"
+ ],
+ "genre": [
+ "Documentary film"
+ ],
+ "name": "Adventures Into Digital Comics"
+ },
+ {
+ "id": "/en/ae_fond_kiss",
+ "directed_by": [
+ "Ken Loach"
+ ],
+ "initial_release_date": "2004-02-13",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ],
+ "name": "Ae Fond Kiss..."
+ },
+ {
+ "id": "/en/aetbaar",
+ "directed_by": [
+ "Vikram Bhatt"
+ ],
+ "initial_release_date": "2004-01-23",
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Mystery",
+ "Horror",
+ "Musical",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "Aetbaar"
+ },
+ {
+ "id": "/en/aethiree",
+ "initial_release_date": "2004-04-23",
+ "genre": [
+ "Comedy",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "K. S. Ravikumar"
+ ],
+ "name": "Aethirree"
+ },
+ {
+ "id": "/en/after_innocence",
+ "genre": [
+ "Documentary film",
+ "Crime Fiction",
+ "Political cinema",
+ "Culture &amp; Society",
+ "Law &amp; Crime",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Jessica Sanders"
+ ],
+ "name": "After Innocence"
+ },
+ {
+ "id": "/en/after_the_sunset",
+ "initial_release_date": "2004-11-10",
+ "genre": [
+ "Crime Fiction",
+ "Action/Adventure",
+ "Action Film",
+ "Crime Thriller",
+ "Heist film",
+ "Caper story",
+ "Crime Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Brett Ratner"
+ ],
+ "name": "After the Sunset"
+ },
+ {
+ "id": "/en/aftermath_2007",
+ "initial_release_date": "2013-03-01",
+ "genre": [
+ "Crime Fiction",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Thomas Farone"
+ ],
+ "name": "Aftermath"
+ },
+ {
+ "id": "/en/against_the_ropes",
+ "initial_release_date": "2004-02-20",
+ "genre": [
+ "Biographical film",
+ "Sports",
+ "Drama"
+ ],
+ "directed_by": [
+ "Charles S. Dutton"
+ ],
+ "name": "Against the Ropes"
+ },
+ {
+ "id": "/en/agent_cody_banks_2_destination_london",
+ "initial_release_date": "2004-03-12",
+ "genre": [
+ "Adventure Film",
+ "Action Film",
+ "Family",
+ "Action/Adventure",
+ "Spy film",
+ "Children's/Family",
+ "Family-Oriented Adventure",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Kevin Allen"
+ ],
+ "name": "Agent Cody Banks 2: Destination London"
+ },
+ {
+ "id": "/en/agent_one-half",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Brian Bero"
+ ],
+ "name": "Agent One-Half"
+ },
+ {
+ "id": "/en/agnes_and_his_brothers",
+ "initial_release_date": "2004-09-05",
+ "genre": [
+ "Drama",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Oskar Roehler"
+ ],
+ "name": "Agnes and His Brothers"
+ },
+ {
+ "id": "/en/aideista_parhain",
+ "initial_release_date": "2005-08-25",
+ "genre": [
+ "War film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Klaus H\u00e4r\u00f6"
+ ],
+ "name": "Mother of Mine"
+ },
+ {
+ "id": "/en/aileen_life_and_death_of_a_serial_killer",
+ "initial_release_date": "2003-05-10",
+ "genre": [
+ "Documentary film",
+ "Crime Fiction",
+ "Political drama"
+ ],
+ "directed_by": [
+ "Nick Broomfield",
+ "Joan Churchill"
+ ],
+ "name": "Aileen: Life and Death of a Serial Killer"
+ },
+ {
+ "id": "/en/air_2005",
+ "initial_release_date": "2005-02-05",
+ "genre": [
+ "Fantasy",
+ "Anime",
+ "Animation",
+ "Japanese Movies",
+ "Drama"
+ ],
+ "directed_by": [
+ "Osamu Dezaki"
+ ],
+ "name": "Air"
+ },
+ {
+ "id": "/en/air_bud_seventh_inning_fetch",
+ "initial_release_date": "2002-02-21",
+ "genre": [
+ "Family",
+ "Sports",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Robert Vince"
+ ],
+ "name": "Air Bud: Seventh Inning Fetch"
+ },
+ {
+ "id": "/en/air_bud_spikes_back",
+ "initial_release_date": "2003-06-24",
+ "genre": [
+ "Family",
+ "Sports",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Mike Southon"
+ ],
+ "name": "Air Bud: Spikes Back"
+ },
+ {
+ "id": "/en/air_buddies",
+ "initial_release_date": "2006-12-10",
+ "genre": [
+ "Family",
+ "Animal Picture",
+ "Children's/Family",
+ "Family-Oriented Adventure",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Robert Vince"
+ ],
+ "name": "Air Buddies"
+ },
+ {
+ "id": "/en/aitraaz",
+ "initial_release_date": "2004-11-12",
+ "genre": [
+ "Trial drama",
+ "Thriller",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Abbas Burmawalla",
+ "Mustan Burmawalla"
+ ],
+ "name": "Aitraaz"
+ },
+ {
+ "id": "/en/aka_2002",
+ "initial_release_date": "2002-01-19",
+ "genre": [
+ "LGBT",
+ "Indie film",
+ "Historical period drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Duncan Roy"
+ ],
+ "name": "AKA"
+ },
+ {
+ "id": "/en/aakasha_gopuram",
+ "initial_release_date": "2008-08-22",
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Malayalam Cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "K.P.Kumaran"
+ ],
+ "name": "Aakasha Gopuram"
+ },
+ {
+ "id": "/en/akbar-jodha",
+ "initial_release_date": "2008-02-13",
+ "genre": [
+ "Biographical film",
+ "Romance Film",
+ "Musical",
+ "World cinema",
+ "Adventure Film",
+ "Action Film",
+ "Historical fiction",
+ "Musical Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ashutosh Gowariker"
+ ],
+ "name": "Jodhaa Akbar"
+ },
+ {
+ "id": "/en/akeelah_and_the_bee",
+ "initial_release_date": "2006-03-16",
+ "genre": [
+ "Drama"
+ ],
+ "directed_by": [
+ "Doug Atchison"
+ ],
+ "name": "Akeelah and the Bee"
+ },
+ {
+ "id": "/en/aks",
+ "initial_release_date": "2001-07-13",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Mystery",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Rakeysh Omprakash Mehra"
+ ],
+ "name": "The Reflection"
+ },
+ {
+ "id": "/en/aksar",
+ "initial_release_date": "2006-02-03",
+ "genre": [
+ "Romance Film",
+ "World cinema",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Anant Mahadevan"
+ ],
+ "name": "Aksar"
+ },
+ {
+ "id": "/en/al_franken_god_spoke",
+ "initial_release_date": "2006-09-13",
+ "genre": [
+ "Mockumentary",
+ "Documentary film",
+ "Political cinema",
+ "Culture &amp; Society",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Nick Doob",
+ "Chris Hegedus"
+ ],
+ "name": "Al Franken: God Spoke"
+ },
+ {
+ "id": "/en/alag",
+ "initial_release_date": "2006-06-16",
+ "genre": [
+ "Thriller",
+ "Science Fiction",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Ashu Trikha"
+ ],
+ "name": "Different"
+ },
+ {
+ "id": "/en/alai",
+ "initial_release_date": "2003-09-10",
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Comedy",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Vikram Kumar"
+ ],
+ "name": "Wave"
+ },
+ {
+ "id": "/en/alaipayuthey",
+ "initial_release_date": "2000-04-14",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Musical Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mani Ratnam"
+ ],
+ "name": "Waves"
+ },
+ {
+ "id": "/en/alatriste",
+ "initial_release_date": "2006-09-01",
+ "genre": [
+ "Thriller",
+ "War film",
+ "Adventure Film",
+ "Action Film",
+ "Drama",
+ "Historical fiction"
+ ],
+ "directed_by": [
+ "Agust\u00edn D\u00edaz Yanes"
+ ],
+ "name": "Alatriste"
+ },
+ {
+ "id": "/en/alex_emma",
+ "initial_release_date": "2003-06-20",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Rob Reiner"
+ ],
+ "name": "Alex &amp; Emma"
+ },
+ {
+ "id": "/en/alexander_2004",
+ "initial_release_date": "2004-11-16",
+ "genre": [
+ "War film",
+ "Action Film",
+ "Adventure Film",
+ "Romance Film",
+ "Biographical film",
+ "Historical fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Oliver Stone",
+ "Wilhelm Sasnal",
+ "Anka Sasnal"
+ ],
+ "name": "Alexander"
+ },
+ {
+ "id": "/en/alexandras_project",
+ "genre": [
+ "Thriller",
+ "Suspense",
+ "Psychological thriller",
+ "Indie film",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Rolf de Heer"
+ ],
+ "name": "Alexandra's Project"
+ },
+ {
+ "id": "/en/alfie_2004",
+ "initial_release_date": "2004-10-22",
+ "genre": [
+ "Sex comedy",
+ "Remake",
+ "Comedy-drama",
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Charles Shyer"
+ ],
+ "name": "Alfie"
+ },
+ {
+ "id": "/en/ali_2001",
+ "initial_release_date": "2001-12-11",
+ "genre": [
+ "Biographical film",
+ "Sports",
+ "Historical period drama",
+ "Sports films",
+ "Drama"
+ ],
+ "directed_by": [
+ "Michael Mann"
+ ],
+ "name": "Ali"
+ },
+ {
+ "id": "/en/ali_g_indahouse",
+ "initial_release_date": "2002-03-22",
+ "genre": [
+ "Stoner film",
+ "Parody",
+ "Gross out",
+ "Gross-out film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Mark Mylod"
+ ],
+ "name": "Ali G Indahouse"
+ },
+ {
+ "id": "/en/alien_autopsy_2006",
+ "initial_release_date": "2006-04-07",
+ "genre": [
+ "Science Fiction",
+ "Mockumentary",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jonny Campbell"
+ ],
+ "name": "Alien Autopsy"
+ },
+ {
+ "id": "/en/avp_alien_vs_predator",
+ "initial_release_date": "2004-08-12",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Action Film",
+ "Monster movie",
+ "Thriller",
+ "Adventure Film"
+ ],
+ "directed_by": [
+ "Paul W. S. Anderson"
+ ],
+ "name": "Alien vs. Predator"
+ },
+ {
+ "id": "/en/avpr_aliens_vs_predator_requiem",
+ "initial_release_date": "2007-12-25",
+ "genre": [
+ "Science Fiction",
+ "Action Film",
+ "Action/Adventure",
+ "Horror",
+ "Monster movie",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Colin Strause",
+ "Greg Strause"
+ ],
+ "name": "AVPR: Aliens vs Predator - Requiem"
+ },
+ {
+ "id": "/en/aliens_of_the_deep",
+ "initial_release_date": "2005-01-28",
+ "genre": [
+ "Documentary film",
+ "Travel",
+ "Education",
+ "Biological Sciences"
+ ],
+ "directed_by": [
+ "James Cameron",
+ "Steven Quale",
+ "Steven Quale"
+ ],
+ "name": "Aliens of the Deep"
+ },
+ {
+ "id": "/en/alive_2002",
+ "initial_release_date": "2002-09-12",
+ "genre": [
+ "Science Fiction",
+ "Action Film",
+ "Horror",
+ "Thriller",
+ "World cinema",
+ "Action/Adventure",
+ "Japanese Movies"
+ ],
+ "directed_by": [
+ "Ryuhei Kitamura"
+ ],
+ "name": "Alive"
+ },
+ {
+ "id": "/en/all_about_lily_chou-chou",
+ "initial_release_date": "2001-09-07",
+ "genre": [
+ "Crime Fiction",
+ "Musical",
+ "Thriller",
+ "Art film",
+ "Romance Film",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Shunji Iwai"
+ ],
+ "name": "All About Lily Chou-Chou"
+ },
+ {
+ "id": "/en/all_about_the_benjamins",
+ "initial_release_date": "2002-03-08",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Comedy",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Kevin Bray"
+ ],
+ "name": "All About the Benjamins"
+ },
+ {
+ "id": "/en/all_i_want_2002",
+ "initial_release_date": "2002-09-10",
+ "genre": [
+ "Romantic comedy",
+ "Coming of age",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jeffrey Porter"
+ ],
+ "name": "All I Want"
+ },
+ {
+ "id": "/en/all_over_the_guy",
+ "genre": [
+ "Indie film",
+ "LGBT",
+ "Romantic comedy",
+ "Romance Film",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Julie Davis"
+ ],
+ "name": "All Over the Guy"
+ },
+ {
+ "id": "/en/all_souls_day_2005",
+ "initial_release_date": "2005-01-25",
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Zombie Film"
+ ],
+ "directed_by": [
+ "Jeremy Kasten",
+ "Mark A. Altman"
+ ],
+ "name": "All Souls Day"
+ },
+ {
+ "id": "/en/all_the_kings_men_2006",
+ "initial_release_date": "2006-09-10",
+ "genre": [
+ "Political drama",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Steven Zaillian"
+ ],
+ "name": "All the King's Men"
+ },
+ {
+ "id": "/en/all_the_real_girls",
+ "initial_release_date": "2003-01-19",
+ "genre": [
+ "Romance Film",
+ "Indie film",
+ "Coming of age",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Gordon Green"
+ ],
+ "name": "All the Real Girls"
+ },
+ {
+ "id": "/en/allari_bullodu",
+ "genre": [
+ "Comedy",
+ "Romance Film",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Kovelamudi Raghavendra Rao"
+ ],
+ "name": "Allari Bullodu"
+ },
+ {
+ "id": "/en/allari_pidugu",
+ "initial_release_date": "2005-10-05",
+ "genre": [
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Jayant Paranji"
+ ],
+ "name": "Allari Pidugu"
+ },
+ {
+ "id": "/en/alles_auf_zucker",
+ "initial_release_date": "2004-12-31",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Dani Levy"
+ ],
+ "name": "Alles auf Zucker!"
+ },
+ {
+ "id": "/en/alley_cats_strike",
+ "initial_release_date": "2000-03-18",
+ "genre": [
+ "Family",
+ "Sports"
+ ],
+ "directed_by": [
+ "Rod Daniel"
+ ],
+ "name": "Alley Cats Strike!"
+ },
+ {
+ "id": "/en/almost_famous",
+ "initial_release_date": "2000-09-08",
+ "genre": [
+ "Musical",
+ "Comedy-drama",
+ "Musical Drama",
+ "Road movie",
+ "Musical comedy",
+ "Comedy",
+ "Music",
+ "Drama"
+ ],
+ "directed_by": [
+ "Cameron Crowe"
+ ],
+ "name": "Almost Famous"
+ },
+ {
+ "id": "/en/almost_round_three",
+ "initial_release_date": "2004-11-10",
+ "genre": [
+ "Sports"
+ ],
+ "directed_by": [
+ "Matt Hill",
+ "Matt Hill"
+ ],
+ "name": "Almost: Round Three"
+ },
+ {
+ "id": "/en/alone_and_restless",
+ "genre": [
+ "Drama"
+ ],
+ "directed_by": [
+ "Michael Thomas Dunn"
+ ],
+ "name": "Alone and Restless"
+ },
+ {
+ "id": "/en/alone_in_the_dark",
+ "initial_release_date": "2005-01-28",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Action Film",
+ "Thriller",
+ "B movie",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Uwe Boll"
+ ],
+ "name": "Alone in the Dark"
+ },
+ {
+ "id": "/en/along_came_polly",
+ "initial_release_date": "2004-01-12",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Gross out",
+ "Gross-out film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "John Hamburg"
+ ],
+ "name": "Along Came Polly"
+ },
+ {
+ "id": "/en/alpha_dog",
+ "initial_release_date": "2006-01-27",
+ "genre": [
+ "Crime Fiction",
+ "Biographical film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Nick Cassavetes"
+ ],
+ "name": "Alpha Dog"
+ },
+ {
+ "id": "/en/amelie",
+ "initial_release_date": "2001-04-25",
+ "genre": [
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jean-Pierre Jeunet"
+ ],
+ "name": "Am\u00e9lie"
+ },
+ {
+ "id": "/en/america_freedom_to_fascism",
+ "initial_release_date": "2006-07-28",
+ "genre": [
+ "Documentary film",
+ "Political cinema",
+ "Culture &amp; Society"
+ ],
+ "directed_by": [
+ "Aaron Russo"
+ ],
+ "name": "America: Freedom to Fascism"
+ },
+ {
+ "id": "/en/americas_sweethearts",
+ "initial_release_date": "2001-07-17",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Joe Roth"
+ ],
+ "name": "America's Sweethearts"
+ },
+ {
+ "id": "/en/american_cowslip",
+ "initial_release_date": "2009-07-24",
+ "genre": [
+ "Black comedy",
+ "Indie film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Mark David"
+ ],
+ "name": "American Cowslip"
+ },
+ {
+ "id": "/en/american_desi",
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Romantic comedy",
+ "Musical comedy",
+ "Teen film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Piyush Dinker Pandya"
+ ],
+ "name": "American Desi"
+ },
+ {
+ "id": "/en/american_dog",
+ "initial_release_date": "2008-11-17",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Animation",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Chris Williams",
+ "Byron Howard"
+ ],
+ "name": "Bolt"
+ },
+ {
+ "id": "/en/american_dreamz",
+ "initial_release_date": "2006-04-21",
+ "genre": [
+ "Political cinema",
+ "Parody",
+ "Political satire",
+ "Media Satire",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Paul Weitz"
+ ],
+ "name": "American Dreamz"
+ },
+ {
+ "id": "/en/american_gangster",
+ "initial_release_date": "2007-10-19",
+ "genre": [
+ "Crime Fiction",
+ "War film",
+ "Crime Thriller",
+ "Historical period drama",
+ "Biographical film",
+ "Crime Drama",
+ "Gangster Film",
+ "True crime",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ridley Scott"
+ ],
+ "name": "American Gangster"
+ },
+ {
+ "id": "/en/american_gun",
+ "initial_release_date": "2005-09-15",
+ "genre": [
+ "Indie film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Aric Avelino"
+ ],
+ "name": "American Gun"
+ },
+ {
+ "id": "/en/american_hardcore_2006",
+ "initial_release_date": "2006-03-11",
+ "genre": [
+ "Music",
+ "Documentary film",
+ "Rockumentary",
+ "Punk rock",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Paul Rachman"
+ ],
+ "name": "American Hardcore"
+ },
+ {
+ "id": "/en/american_outlaws",
+ "initial_release_date": "2001-08-17",
+ "genre": [
+ "Western",
+ "Costume drama",
+ "Action/Adventure",
+ "Action Film",
+ "Revisionist Western",
+ "Comedy Western",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Les Mayfield"
+ ],
+ "name": "American Outlaws"
+ },
+ {
+ "id": "/en/american_pie_the_naked_mile",
+ "initial_release_date": "2006-12-07",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Joe Nussbaum"
+ ],
+ "name": "American Pie Presents: The Naked Mile"
+ },
+ {
+ "id": "/en/american_pie_2",
+ "initial_release_date": "2001-08-06",
+ "genre": [
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "James B. Rogers"
+ ],
+ "name": "American Pie 2"
+ },
+ {
+ "id": "/en/american_pie_presents_band_camp",
+ "initial_release_date": "2005-10-31",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Steve Rash"
+ ],
+ "name": "American Pie Presents: Band Camp"
+ },
+ {
+ "id": "/en/american_psycho_2000",
+ "initial_release_date": "2000-01-21",
+ "genre": [
+ "Black comedy",
+ "Slasher",
+ "Thriller",
+ "Horror",
+ "Psychological thriller",
+ "Crime Fiction",
+ "Horror comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mary Harron"
+ ],
+ "name": "American Psycho"
+ },
+ {
+ "id": "/en/american_splendor_2003",
+ "initial_release_date": "2003-01-20",
+ "genre": [
+ "Indie film",
+ "Biographical film",
+ "Comedy-drama",
+ "Marriage Drama",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Shari Springer Berman",
+ "Robert Pulcini"
+ ],
+ "name": "American Splendor"
+ },
+ {
+ "id": "/en/american_wedding",
+ "initial_release_date": "2003-07-24",
+ "genre": [
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jesse Dylan"
+ ],
+ "name": "American Wedding"
+ },
+ {
+ "id": "/en/americano_2005",
+ "initial_release_date": "2005-01-07",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Kevin Noland"
+ ],
+ "name": "Americano"
+ },
+ {
+ "id": "/en/amma_nanna_o_tamila_ammayi",
+ "initial_release_date": "2003-04-19",
+ "genre": [
+ "Sports",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Puri Jagannadh"
+ ],
+ "name": "Amma Nanna O Tamila Ammayi"
+ },
+ {
+ "id": "/en/amores_perros",
+ "initial_release_date": "2000-05-14",
+ "genre": [
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Alejandro Gonz\u00e1lez I\u00f1\u00e1rritu"
+ ],
+ "name": "Amores perros"
+ },
+ {
+ "id": "/en/amrutham",
+ "initial_release_date": "2004-12-24",
+ "genre": [
+ "Drama",
+ "Malayalam Cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Sibi Malayil"
+ ],
+ "name": "Amrutham"
+ },
+ {
+ "id": "/en/an_american_crime",
+ "initial_release_date": "2007-01-19",
+ "genre": [
+ "Crime Fiction",
+ "Biographical film",
+ "Indie film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Tommy O'Haver"
+ ],
+ "name": "An American Crime"
+ },
+ {
+ "id": "/en/an_american_haunting",
+ "initial_release_date": "2005-11-05",
+ "genre": [
+ "Horror",
+ "Mystery",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Courtney Solomon"
+ ],
+ "name": "An American Haunting"
+ },
+ {
+ "id": "/en/an_american_tail_the_mystery_of_the_night_monster",
+ "initial_release_date": "2000-07-25",
+ "genre": [
+ "Fantasy",
+ "Animated cartoon",
+ "Animation",
+ "Music",
+ "Family",
+ "Adventure Film",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Family-Oriented Adventure"
+ ],
+ "directed_by": [
+ "Larry Latham"
+ ],
+ "name": "An American Tail: The Mystery of the Night Monster"
+ },
+ {
+ "id": "/en/an_evening_with_kevin_smith",
+ "genre": [
+ "Documentary film",
+ "Stand-up comedy",
+ "Indie film",
+ "Film &amp; Television History",
+ "Comedy",
+ "Biographical film",
+ "Media studies"
+ ],
+ "directed_by": [
+ "J.M. Kenny"
+ ],
+ "name": "An Evening with Kevin Smith"
+ },
+ {
+ "id": "/en/an_evening_with_kevin_smith_2006",
+ "genre": [
+ "Documentary film"
+ ],
+ "directed_by": [
+ "J.M. Kenny"
+ ],
+ "name": "An Evening with Kevin Smith 2: Evening Harder"
+ },
+ {
+ "id": "/en/an_everlasting_piece",
+ "initial_release_date": "2000-12-25",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Barry Levinson"
+ ],
+ "name": "An Everlasting Piece"
+ },
+ {
+ "id": "/en/an_extremely_goofy_movie",
+ "initial_release_date": "2000-02-29",
+ "genre": [
+ "Animation",
+ "Coming of age",
+ "Animated Musical",
+ "Children's/Family",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Ian Harrowell",
+ "Douglas McCarthy"
+ ],
+ "name": "An Extremely Goofy Movie"
+ },
+ {
+ "id": "/en/an_inconvenient_truth",
+ "initial_release_date": "2006-01-24",
+ "genre": [
+ "Documentary film"
+ ],
+ "directed_by": [
+ "Davis Guggenheim"
+ ],
+ "name": "An Inconvenient Truth"
+ },
+ {
+ "id": "/en/an_unfinished_life",
+ "initial_release_date": "2005-08-19",
+ "genre": [
+ "Melodrama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Lasse Hallstr\u00f6m"
+ ],
+ "name": "An Unfinished Life"
+ },
+ {
+ "id": "/en/anacondas_the_hunt_for_the_blood_orchid",
+ "initial_release_date": "2004-08-25",
+ "genre": [
+ "Thriller",
+ "Adventure Film",
+ "Horror",
+ "Action Film",
+ "Action/Adventure",
+ "Natural horror film",
+ "Jungle Film"
+ ],
+ "directed_by": [
+ "Dwight H. Little"
+ ],
+ "name": "Anacondas: The Hunt for the Blood Orchid"
+ },
+ {
+ "id": "/en/anal_pick-up",
+ "genre": [
+ "Pornographic film",
+ "Gay pornography"
+ ],
+ "directed_by": [
+ "Decklin"
+ ],
+ "name": "Anal Pick-Up"
+ },
+ {
+ "id": "/en/analyze_that",
+ "initial_release_date": "2002-12-06",
+ "genre": [
+ "Buddy film",
+ "Crime Comedy",
+ "Gangster Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Harold Ramis"
+ ],
+ "name": "Analyze That"
+ },
+ {
+ "id": "/en/anamorph",
+ "genre": [
+ "Psychological thriller",
+ "Crime Fiction",
+ "Thriller",
+ "Mystery",
+ "Crime Thriller",
+ "Suspense"
+ ],
+ "directed_by": [
+ "H.S. Miller"
+ ],
+ "name": "Anamorph"
+ },
+ {
+ "id": "/en/anand_2004",
+ "initial_release_date": "2004-10-15",
+ "genre": [
+ "Musical",
+ "Comedy",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Sekhar Kammula"
+ ],
+ "name": "Anand"
+ },
+ {
+ "id": "/en/anbe_aaruyire",
+ "initial_release_date": "2005-08-15",
+ "genre": [
+ "Romance Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "S. J. Surya"
+ ],
+ "name": "Anbe Aaruyire"
+ },
+ {
+ "id": "/en/anbe_sivam",
+ "initial_release_date": "2003-01-14",
+ "genre": [
+ "Musical",
+ "Musical comedy",
+ "Comedy",
+ "Adventure Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Sundar C."
+ ],
+ "name": "Love is God"
+ },
+ {
+ "id": "/en/ancanar",
+ "genre": [
+ "Fantasy",
+ "Adventure Film",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Sam R. Balcomb",
+ "Raiya Corsiglia"
+ ],
+ "name": "Ancanar"
+ },
+ {
+ "id": "/en/anchorman_the_legend_of_ron_burgundy",
+ "initial_release_date": "2004-06-28",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Adam McKay"
+ ],
+ "name": "Anchorman: The Legend of Ron Burgundy"
+ },
+ {
+ "id": "/en/andaaz",
+ "initial_release_date": "2003-05-23",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Raj Kanwar"
+ ],
+ "name": "Andaaz"
+ },
+ {
+ "id": "/en/andarivaadu",
+ "initial_release_date": "2005-06-03",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Srinu Vaitla"
+ ],
+ "name": "Andarivaadu"
+ },
+ {
+ "id": "/en/andhrawala",
+ "initial_release_date": "2004-01-01",
+ "genre": [
+ "Adventure Film",
+ "Action Film",
+ "Tollywood",
+ "Drama"
+ ],
+ "directed_by": [
+ "Puri Jagannadh",
+ "V.V.S. Ram"
+ ],
+ "name": "Andhrawala"
+ },
+ {
+ "id": "/en/ang_tanging_ina",
+ "initial_release_date": "2003-05-28",
+ "genre": [
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Wenn V. Deramas"
+ ],
+ "name": "Ang Tanging Ina"
+ },
+ {
+ "id": "/en/angel_eyes",
+ "initial_release_date": "2001-05-18",
+ "genre": [
+ "Romance Film",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Luis Mandoki"
+ ],
+ "name": "Angel Eyes"
+ },
+ {
+ "id": "/en/angel-a",
+ "initial_release_date": "2005-12-21",
+ "genre": [
+ "Romance Film",
+ "Fantasy",
+ "Comedy",
+ "Romantic comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Luc Besson"
+ ],
+ "name": "Angel-A"
+ },
+ {
+ "id": "/en/angels_and_demons_2008",
+ "initial_release_date": "2009-05-04",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Crime Fiction"
+ ],
+ "directed_by": [
+ "Ron Howard"
+ ],
+ "name": "Angels &amp; Demons"
+ },
+ {
+ "id": "/en/angels_and_virgins",
+ "initial_release_date": "2007-12-17",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Adventure Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Leland"
+ ],
+ "name": "Virgin Territory"
+ },
+ {
+ "id": "/en/angels_in_the_infield",
+ "initial_release_date": "2000-04-09",
+ "genre": [
+ "Fantasy",
+ "Sports",
+ "Family",
+ "Children's/Family",
+ "Heavenly Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Robert King"
+ ],
+ "name": "Angels in the Infield"
+ },
+ {
+ "id": "/en/anger_management_2003",
+ "initial_release_date": "2003-03-05",
+ "genre": [
+ "Black comedy",
+ "Slapstick",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Peter Segal"
+ ],
+ "name": "Anger Management"
+ },
+ {
+ "id": "/en/angli_the_movie",
+ "initial_release_date": "2005-05-28",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction"
+ ],
+ "directed_by": [
+ "Mario Busietta"
+ ],
+ "name": "Angli: The Movie"
+ },
+ {
+ "id": "/en/animal_factory",
+ "initial_release_date": "2000-10-22",
+ "genre": [
+ "Crime Fiction",
+ "Prison film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Steve Buscemi"
+ ],
+ "name": "Animal Factory"
+ },
+ {
+ "id": "/en/anjaneya",
+ "initial_release_date": "2003-10-24",
+ "genre": [
+ "Romance Film",
+ "Crime Fiction",
+ "Drama",
+ "World cinema",
+ "Tamil cinema"
+ ],
+ "directed_by": [
+ "Maharajan",
+ "N.Maharajan"
+ ],
+ "name": "Anjaneya"
+ },
+ {
+ "id": "/en/ankahee",
+ "initial_release_date": "2006-05-19",
+ "genre": [
+ "Romance Film",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Vikram Bhatt"
+ ],
+ "name": "Ankahee"
+ },
+ {
+ "id": "/en/annapolis_2006",
+ "genre": [
+ "Romance Film",
+ "Sports",
+ "Drama"
+ ],
+ "directed_by": [
+ "Justin Lin"
+ ],
+ "name": "Annapolis"
+ },
+ {
+ "id": "/en/annavaram_2007",
+ "initial_release_date": "2006-12-29",
+ "genre": [
+ "Thriller",
+ "Musical",
+ "Action Film",
+ "Romance Film",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Gridhar",
+ "Bhimaneni Srinivasa Rao",
+ "Sippy"
+ ],
+ "name": "Annavaram"
+ },
+ {
+ "id": "/en/anniyan",
+ "initial_release_date": "2005-06-10",
+ "genre": [
+ "Horror",
+ "Short Film",
+ "Psychological thriller",
+ "Thriller",
+ "Musical Drama",
+ "Action Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "S. Shankar"
+ ],
+ "name": "Anniyan"
+ },
+ {
+ "id": "/en/another_gay_movie",
+ "initial_release_date": "2006-04-28",
+ "genre": [
+ "Parody",
+ "Coming of age",
+ "LGBT",
+ "Gay Themed",
+ "Romantic comedy",
+ "Romance Film",
+ "Gay",
+ "Gay Interest",
+ "Sex comedy",
+ "Comedy",
+ "Pornographic film"
+ ],
+ "directed_by": [
+ "Todd Stephens"
+ ],
+ "name": "Another Gay Movie"
+ },
+ {
+ "id": "/en/ant_man",
+ "initial_release_date": "2015-07-17",
+ "genre": [
+ "Thriller",
+ "Science Fiction",
+ "Action/Adventure",
+ "Superhero movie",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Peyton Reed"
+ ],
+ "name": "Ant-Man"
+ },
+ {
+ "id": "/en/anthony_zimmer",
+ "initial_release_date": "2005-04-27",
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "World cinema",
+ "Crime Thriller"
+ ],
+ "directed_by": [
+ "J\u00e9r\u00f4me Salle"
+ ],
+ "name": "Anthony Zimmer"
+ },
+ {
+ "id": "/en/antwone_fisher_2003",
+ "initial_release_date": "2002-09-12",
+ "genre": [
+ "Romance Film",
+ "Biographical film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Denzel Washington"
+ ],
+ "name": "Antwone Fisher"
+ },
+ {
+ "id": "/en/anukokunda_oka_roju",
+ "initial_release_date": "2005-06-30",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Chandra Sekhar Yeleti"
+ ],
+ "name": "Anukokunda Oka Roju"
+ },
+ {
+ "id": "/en/anus_magillicutty",
+ "initial_release_date": "2003-04-15",
+ "genre": [
+ "B movie",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Morey Fineburgh"
+ ],
+ "name": "Anus Magillicutty"
+ },
+ {
+ "id": "/en/any_way_the_wind_blows",
+ "initial_release_date": "2003-05-17",
+ "genre": [
+ "Comedy-drama"
+ ],
+ "directed_by": [
+ "Tom Barman"
+ ],
+ "name": "Any Way the Wind Blows"
+ },
+ {
+ "id": "/en/anything_else",
+ "initial_release_date": "2003-08-27",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Woody Allen"
+ ],
+ "name": "Anything Else"
+ },
+ {
+ "id": "/en/apasionados",
+ "initial_release_date": "2002-06-06",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "World cinema",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Juan Jos\u00e9 Jusid"
+ ],
+ "name": "Apasionados"
+ },
+ {
+ "id": "/en/apocalypto",
+ "initial_release_date": "2006-12-08",
+ "genre": [
+ "Action Film",
+ "Adventure Film",
+ "Epic film",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mel Gibson"
+ ],
+ "name": "Apocalypto"
+ },
+ {
+ "id": "/en/aprils_shower",
+ "initial_release_date": "2006-01-13",
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "LGBT",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Sex comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Trish Doolan"
+ ],
+ "name": "April's Shower"
+ },
+ {
+ "id": "/en/aquamarine_2006",
+ "initial_release_date": "2006-02-26",
+ "genre": [
+ "Coming of age",
+ "Teen film",
+ "Romance Film",
+ "Family",
+ "Fantasy",
+ "Fantasy Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Elizabeth Allen Rosenbaum"
+ ],
+ "name": "Aquamarine"
+ },
+ {
+ "id": "/en/arabian_nights",
+ "initial_release_date": "2000-04-30",
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Adventure Film"
+ ],
+ "directed_by": [
+ "Steve Barron"
+ ],
+ "name": "Arabian Nights"
+ },
+ {
+ "id": "/en/aragami",
+ "initial_release_date": "2003-03-27",
+ "genre": [
+ "Thriller",
+ "Action/Adventure",
+ "World cinema",
+ "Japanese Movies",
+ "Action Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ryuhei Kitamura"
+ ],
+ "name": "Aragami"
+ },
+ {
+ "id": "/en/arahan",
+ "initial_release_date": "2004-04-30",
+ "genre": [
+ "Action Film",
+ "Comedy",
+ "Korean drama",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Ryoo Seung-wan"
+ ],
+ "name": "Arahan"
+ },
+ {
+ "id": "/en/ararat",
+ "initial_release_date": "2002-05-20",
+ "genre": [
+ "LGBT",
+ "Political drama",
+ "War film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Atom Egoyan"
+ ],
+ "name": "Ararat"
+ },
+ {
+ "id": "/en/are_we_there_yet",
+ "initial_release_date": "2005-01-21",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Brian Levant"
+ ],
+ "name": "Are We There Yet"
+ },
+ {
+ "id": "/en/arinthum_ariyamalum",
+ "initial_release_date": "2005-05-20",
+ "genre": [
+ "Crime Fiction",
+ "Family",
+ "Romance Film",
+ "Comedy",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Vishnuvardhan"
+ ],
+ "name": "Arinthum Ariyamalum"
+ },
+ {
+ "id": "/en/arisan",
+ "initial_release_date": "2003-12-10",
+ "genre": [
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Nia Dinata"
+ ],
+ "name": "Arisan!"
+ },
+ {
+ "id": "/en/arjun_2004",
+ "initial_release_date": "2004-08-18",
+ "genre": [
+ "Action Film",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Gunasekhar",
+ "J. Hemambar"
+ ],
+ "name": "Arjun"
+ },
+ {
+ "id": "/en/armaan",
+ "initial_release_date": "2003-05-16",
+ "genre": [
+ "Romance Film",
+ "Family",
+ "Drama"
+ ],
+ "directed_by": [
+ "Honey Irani"
+ ],
+ "name": "Armaan"
+ },
+ {
+ "id": "/en/around_the_bend",
+ "initial_release_date": "2004-10-08",
+ "genre": [
+ "Family Drama",
+ "Comedy-drama",
+ "Road movie",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jordan Roberts"
+ ],
+ "name": "Around the Bend"
+ },
+ {
+ "id": "/en/around_the_world_in_80_days_2004",
+ "initial_release_date": "2004-06-13",
+ "genre": [
+ "Adventure Film",
+ "Action Film",
+ "Family",
+ "Western",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Frank Coraci"
+ ],
+ "name": "Around the World in 80 Days"
+ },
+ {
+ "id": "/en/art_of_the_devil_2",
+ "initial_release_date": "2005-12-01",
+ "genre": [
+ "Horror",
+ "Slasher",
+ "Fantasy",
+ "Mystery"
+ ],
+ "directed_by": [
+ "Pasith Buranajan",
+ "Seree Phongnithi",
+ "Yosapong Polsap",
+ "Putipong Saisikaew",
+ "Art Thamthrakul",
+ "Kongkiat Khomsiri",
+ "Isara Nadee"
+ ],
+ "name": "Art of the Devil 2"
+ },
+ {
+ "id": "/en/art_school_confidential",
+ "genre": [
+ "Comedy-drama"
+ ],
+ "directed_by": [
+ "Terry Zwigoff"
+ ],
+ "name": "Art School Confidential"
+ },
+ {
+ "id": "/en/arul",
+ "initial_release_date": "2004-05-01",
+ "genre": [
+ "Musical",
+ "Action Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Hari"
+ ],
+ "name": "Arul"
+ },
+ {
+ "id": "/en/arya_2007",
+ "initial_release_date": "2007-08-10",
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Balasekaran"
+ ],
+ "name": "Aarya"
+ },
+ {
+ "id": "/en/arya_2004",
+ "initial_release_date": "2004-05-07",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Romantic comedy",
+ "Musical comedy",
+ "Comedy",
+ "Drama",
+ "Musical Drama",
+ "World cinema",
+ "Tollywood"
+ ],
+ "directed_by": [
+ "Sukumar"
+ ],
+ "name": "Arya"
+ },
+ {
+ "id": "/en/aryan_2006",
+ "initial_release_date": "2006-12-05",
+ "genre": [
+ "Action Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Abhishek Kapoor"
+ ],
+ "name": "Aryan: Unbreakable"
+ },
+ {
+ "id": "/en/as_it_is_in_heaven",
+ "initial_release_date": "2004-08-20",
+ "genre": [
+ "Musical",
+ "Comedy",
+ "Romance Film",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Kay Pollak"
+ ],
+ "name": "As It Is in Heaven"
+ },
+ {
+ "id": "/en/ashok",
+ "initial_release_date": "2006-07-13",
+ "genre": [
+ "Action Film",
+ "Romance Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Surender Reddy"
+ ],
+ "name": "Ashok"
+ },
+ {
+ "id": "/en/ask_the_dust_2006",
+ "initial_release_date": "2006-02-02",
+ "genre": [
+ "Historical period drama",
+ "Film adaptation",
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Robert Towne"
+ ],
+ "name": "Ask the Dust"
+ },
+ {
+ "id": "/en/asoka",
+ "initial_release_date": "2001-09-13",
+ "genre": [
+ "Action Film",
+ "Romance Film",
+ "War film",
+ "Epic film",
+ "Musical",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Santosh Sivan"
+ ],
+ "name": "Ashoka the Great"
+ },
+ {
+ "id": "/en/assault_on_precinct_13_2005",
+ "initial_release_date": "2005-01-19",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Remake",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jean-Fran\u00e7ois Richet"
+ ],
+ "name": "Assault on Precinct 13"
+ },
+ {
+ "id": "/en/astitva",
+ "initial_release_date": "2000-10-06",
+ "genre": [
+ "Art film",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mahesh Manjrekar"
+ ],
+ "name": "Astitva"
+ },
+ {
+ "id": "/en/asylum_2005",
+ "initial_release_date": "2005-08-12",
+ "genre": [
+ "Film adaptation",
+ "Romance Film",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Mackenzie"
+ ],
+ "name": "Asylum"
+ },
+ {
+ "id": "/en/atanarjuat",
+ "initial_release_date": "2001-05-13",
+ "genre": [
+ "Fantasy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Zacharias Kunuk"
+ ],
+ "name": "Atanarjuat: The Fast Runner"
+ },
+ {
+ "id": "/en/athadu",
+ "initial_release_date": "2005-08-10",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Musical",
+ "Romance Film",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Trivikram Srinivas"
+ ],
+ "name": "Athadu"
+ },
+ {
+ "id": "/en/atl_2006",
+ "initial_release_date": "2006-03-28",
+ "genre": [
+ "Coming of age",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Chris Robinson"
+ ],
+ "name": "ATL"
+ },
+ {
+ "id": "/en/atlantis_the_lost_empire",
+ "initial_release_date": "2001-06-03",
+ "genre": [
+ "Adventure Film",
+ "Science Fiction",
+ "Family",
+ "Animation"
+ ],
+ "directed_by": [
+ "Gary Trousdale",
+ "Kirk Wise"
+ ],
+ "name": "Atlantis: The Lost Empire"
+ },
+ {
+ "id": "/en/atonement_2007",
+ "initial_release_date": "2007-08-28",
+ "genre": [
+ "Romance Film",
+ "War film",
+ "Mystery",
+ "Drama",
+ "Music"
+ ],
+ "directed_by": [
+ "Joe Wright"
+ ],
+ "name": "Atonement"
+ },
+ {
+ "id": "/en/attagasam",
+ "initial_release_date": "2004-11-12",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Saran"
+ ],
+ "name": "Attahasam"
+ },
+ {
+ "id": "/en/attila_2001",
+ "genre": [
+ "Adventure Film",
+ "History",
+ "Action Film",
+ "War film",
+ "Historical fiction",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Dick Lowry"
+ ],
+ "name": "Attila"
+ },
+ {
+ "id": "/en/austin_powers_goldmember",
+ "initial_release_date": "2002-07-22",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jay Roach"
+ ],
+ "name": "Austin Powers: Goldmember"
+ },
+ {
+ "id": "/en/australian_rules",
+ "genre": [
+ "Drama"
+ ],
+ "directed_by": [
+ "Paul Goldman"
+ ],
+ "name": "Australian Rules"
+ },
+ {
+ "id": "/en/auto",
+ "initial_release_date": "2007-02-16",
+ "genre": [
+ "Action Film",
+ "Comedy",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Pushkar",
+ "Gayatri"
+ ],
+ "name": "Oram Po"
+ },
+ {
+ "id": "/en/auto_focus",
+ "initial_release_date": "2002-09-08",
+ "genre": [
+ "Biographical film",
+ "Indie film",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Paul Schrader",
+ "Larry Karaszewski"
+ ],
+ "name": "Auto Focus"
+ },
+ {
+ "id": "/en/autograph_2004",
+ "initial_release_date": "2004-02-14",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Cheran"
+ ],
+ "name": "Autograph"
+ },
+ {
+ "id": "/en/avalon_2001",
+ "initial_release_date": "2001-01-20",
+ "genre": [
+ "Science Fiction",
+ "Thriller",
+ "Action Film",
+ "Adventure Film",
+ "Fantasy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mamoru Oshii"
+ ],
+ "name": "Avalon"
+ },
+ {
+ "id": "/en/avatar_2009",
+ "initial_release_date": "2009-12-10",
+ "genre": [
+ "Science Fiction",
+ "Adventure Film",
+ "Fantasy",
+ "Action Film"
+ ],
+ "directed_by": [
+ "James Cameron"
+ ],
+ "name": "Avatar"
+ },
+ {
+ "id": "/en/avenging_angelo",
+ "initial_release_date": "2002-08-30",
+ "genre": [
+ "Action Film",
+ "Romance Film",
+ "Crime Fiction",
+ "Action/Adventure",
+ "Thriller",
+ "Romantic comedy",
+ "Crime Comedy",
+ "Gangster Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Martyn Burke"
+ ],
+ "name": "Avenging Angelo"
+ },
+ {
+ "id": "/en/awake_2007",
+ "initial_release_date": "2007-11-30",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Mystery"
+ ],
+ "directed_by": [
+ "Joby Harold"
+ ],
+ "name": "Awake"
+ },
+ {
+ "id": "/en/awara_paagal_deewana",
+ "initial_release_date": "2002-06-20",
+ "genre": [
+ "Action Film",
+ "World cinema",
+ "Musical",
+ "Crime Fiction",
+ "Musical comedy",
+ "Comedy",
+ "Bollywood",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Vikram Bhatt"
+ ],
+ "name": "Awara Paagal Deewana"
+ },
+ {
+ "id": "/en/awesome_i_fuckin_shot_that",
+ "initial_release_date": "2006-01-06",
+ "genre": [
+ "Concert film",
+ "Rockumentary",
+ "Hip hop film",
+ "Documentary film",
+ "Indie film"
+ ],
+ "directed_by": [
+ "Adam Yauch"
+ ],
+ "name": "Awesome; I Fuckin' Shot That!"
+ },
+ {
+ "id": "/en/azumi",
+ "initial_release_date": "2003-05-10",
+ "genre": [
+ "Action Film",
+ "Epic film",
+ "Adventure Film",
+ "Fantasy",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Ryuhei Kitamura"
+ ],
+ "name": "Azumi"
+ },
+ {
+ "id": "/wikipedia/en_title/$00C6on_Flux_$0028film$0029",
+ "initial_release_date": "2005-12-01",
+ "genre": [
+ "Science Fiction",
+ "Dystopia",
+ "Action Film",
+ "Thriller",
+ "Adventure Film"
+ ],
+ "directed_by": [
+ "Karyn Kusama"
+ ],
+ "name": "\u00c6on Flux"
+ },
+ {
+ "id": "/en/baabul",
+ "initial_release_date": "2006-12-08",
+ "genre": [
+ "Musical",
+ "Family",
+ "Romance Film",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Ravi Chopra"
+ ],
+ "name": "Baabul"
+ },
+ {
+ "id": "/en/baadasssss_cinema",
+ "initial_release_date": "2002-08-14",
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "Blaxploitation film",
+ "Action/Adventure",
+ "Film &amp; Television History",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Isaac Julien"
+ ],
+ "name": "BaadAsssss Cinema"
+ },
+ {
+ "id": "/en/baadasssss",
+ "initial_release_date": "2003-09-07",
+ "genre": [
+ "Indie film",
+ "Biographical film",
+ "Docudrama",
+ "Historical period drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mario Van Peebles"
+ ],
+ "name": "Baadasssss!"
+ },
+ {
+ "id": "/en/babel_2006",
+ "initial_release_date": "2006-05-23",
+ "genre": [
+ "Indie film",
+ "Political drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Alejandro Gonz\u00e1lez I\u00f1\u00e1rritu"
+ ],
+ "name": "Babel"
+ },
+ {
+ "id": "/en/baby_boy",
+ "initial_release_date": "2001-06-21",
+ "genre": [
+ "Coming of age",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "John Singleton"
+ ],
+ "name": "Baby Boy"
+ },
+ {
+ "id": "/en/back_by_midnight",
+ "initial_release_date": "2005-01-25",
+ "genre": [
+ "Prison film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Harry Basil"
+ ],
+ "name": "Back by Midnight"
+ },
+ {
+ "id": "/en/back_to_school_with_franklin",
+ "initial_release_date": "2003-08-19",
+ "genre": [
+ "Family",
+ "Animation",
+ "Educational film"
+ ],
+ "directed_by": [
+ "Arna Selznick"
+ ],
+ "name": "Back to School with Franklin"
+ },
+ {
+ "id": "/en/bad_boys_ii",
+ "initial_release_date": "2003-07-09",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Thriller",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Michael Bay"
+ ],
+ "name": "Bad Boys II"
+ },
+ {
+ "id": "/wikipedia/ru_id/1598664",
+ "initial_release_date": "2002-04-26",
+ "genre": [
+ "Spy film",
+ "Action/Adventure",
+ "Action Film",
+ "Thriller",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Joel Schumacher"
+ ],
+ "name": "Bad Company"
+ },
+ {
+ "id": "/en/bad_education",
+ "initial_release_date": "2004-03-19",
+ "genre": [
+ "Mystery",
+ "Drama"
+ ],
+ "directed_by": [
+ "Pedro Almod\u00f3var"
+ ],
+ "name": "Bad Education"
+ },
+ {
+ "id": "/en/bad_eggs",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Tony Martin"
+ ],
+ "name": "Bad Eggs"
+ },
+ {
+ "id": "/en/bad_news_bears",
+ "initial_release_date": "2005-07-22",
+ "genre": [
+ "Family",
+ "Sports",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Richard Linklater"
+ ],
+ "name": "Bad News Bears"
+ },
+ {
+ "id": "/en/bad_santa",
+ "initial_release_date": "2003-11-26",
+ "genre": [
+ "Black comedy",
+ "Crime Fiction",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Terry Zwigoff"
+ ],
+ "name": "Bad Santa"
+ },
+ {
+ "id": "/en/badal",
+ "initial_release_date": "2000-02-11",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Crime Fiction",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Raj Kanwar"
+ ],
+ "name": "Badal"
+ },
+ {
+ "id": "/en/baghdad_er",
+ "initial_release_date": "2006-08-29",
+ "genre": [
+ "Documentary film",
+ "Culture &amp; Society",
+ "War film",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Jon Alpert",
+ "Matthew O'Neill"
+ ],
+ "name": "Baghdad ER"
+ },
+ {
+ "id": "/en/baise_moi",
+ "initial_release_date": "2000-06-28",
+ "genre": [
+ "Erotica",
+ "Thriller",
+ "Erotic thriller",
+ "Art film",
+ "Romance Film",
+ "Drama",
+ "Road movie"
+ ],
+ "directed_by": [
+ "Virginie Despentes",
+ "Coralie Trinh Thi"
+ ],
+ "name": "Baise Moi"
+ },
+ {
+ "id": "/en/bait_2000",
+ "initial_release_date": "2000-09-15",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Adventure Film",
+ "Action Film",
+ "Action/Adventure",
+ "Crime Thriller",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Antoine Fuqua"
+ ],
+ "name": "Bait"
+ },
+ {
+ "id": "/en/bala_2002",
+ "initial_release_date": "2002-12-13",
+ "genre": [
+ "Drama",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Deepak"
+ ],
+ "name": "Bala"
+ },
+ {
+ "id": "/en/ballistic_ecks_vs_sever",
+ "initial_release_date": "2002-09-20",
+ "genre": [
+ "Spy film",
+ "Thriller",
+ "Action Film",
+ "Suspense",
+ "Action/Adventure",
+ "Action Thriller",
+ "Glamorized Spy Film"
+ ],
+ "directed_by": [
+ "Wych Kaosayananda"
+ ],
+ "name": "Ballistic: Ecks vs. Sever"
+ },
+ {
+ "id": "/en/balu_abcdefg",
+ "initial_release_date": "2005-01-06",
+ "genre": [
+ "Romance Film",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "A. Karunakaran"
+ ],
+ "name": "Balu ABCDEFG"
+ },
+ {
+ "id": "/en/balzac_and_the_little_chinese_seamstress_2002",
+ "initial_release_date": "2002-05-16",
+ "genre": [
+ "Romance Film",
+ "Comedy-drama",
+ "Biographical film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Dai Sijie"
+ ],
+ "name": "The Little Chinese Seamstress"
+ },
+ {
+ "id": "/en/bambi_ii",
+ "initial_release_date": "2006-01-26",
+ "genre": [
+ "Animation",
+ "Family",
+ "Adventure Film",
+ "Coming of age",
+ "Children's/Family",
+ "Family-Oriented Adventure"
+ ],
+ "directed_by": [
+ "Brian Pimental"
+ ],
+ "name": "Bambi II"
+ },
+ {
+ "id": "/en/bamboozled",
+ "initial_release_date": "2000-10-06",
+ "genre": [
+ "Satire",
+ "Indie film",
+ "Music",
+ "Black comedy",
+ "Comedy-drama",
+ "Media Satire",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Spike Lee"
+ ],
+ "name": "Bamboozled"
+ },
+ {
+ "id": "/en/bandidas",
+ "initial_release_date": "2006-01-18",
+ "genre": [
+ "Western",
+ "Action Film",
+ "Crime Fiction",
+ "Buddy film",
+ "Comedy",
+ "Adventure Film"
+ ],
+ "directed_by": [
+ "Espen Sandberg",
+ "Joachim R\u00f8nning"
+ ],
+ "name": "Bandidas"
+ },
+ {
+ "id": "/en/bandits",
+ "initial_release_date": "2001-10-12",
+ "genre": [
+ "Romantic comedy",
+ "Crime Fiction",
+ "Buddy film",
+ "Romance Film",
+ "Heist film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Barry Levinson"
+ ],
+ "name": "Bandits"
+ },
+ {
+ "id": "/en/bangaram",
+ "initial_release_date": "2006-05-03",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Dharani"
+ ],
+ "name": "Bangaram"
+ },
+ {
+ "id": "/en/bangkok_loco",
+ "initial_release_date": "2004-10-07",
+ "genre": [
+ "Musical",
+ "Musical comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Pornchai Hongrattanaporn"
+ ],
+ "name": "Bangkok Loco"
+ },
+ {
+ "id": "/en/baran",
+ "initial_release_date": "2001-01-31",
+ "genre": [
+ "Romance Film",
+ "Adventure Film",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Majid Majidi"
+ ],
+ "name": "Baran"
+ },
+ {
+ "id": "/en/barbershop",
+ "initial_release_date": "2002-08-07",
+ "genre": [
+ "Ensemble Film",
+ "Workplace Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Tim Story"
+ ],
+ "name": "Barbershop"
+ },
+ {
+ "id": "/en/bareback_mountain",
+ "genre": [
+ "Pornographic film",
+ "Gay pornography"
+ ],
+ "directed_by": [
+ "Afton Nills"
+ ],
+ "name": "Bareback Mountain"
+ },
+ {
+ "id": "/wikipedia/pt/Barnyard",
+ "initial_release_date": "2006-08-04",
+ "genre": [
+ "Family",
+ "Animation",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Steve Oedekerk"
+ ],
+ "name": "Barnyard"
+ },
+ {
+ "id": "/en/barricade_2007",
+ "genre": [
+ "Slasher",
+ "Horror"
+ ],
+ "directed_by": [
+ "Timo Rose"
+ ],
+ "name": "Barricade"
+ },
+ {
+ "id": "/en/bas_itna_sa_khwaab_hai",
+ "initial_release_date": "2001-07-06",
+ "genre": [
+ "Romance Film",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Goldie Behl"
+ ],
+ "name": "Bas Itna Sa Khwaab Hai"
+ },
+ {
+ "id": "/en/basic_2003",
+ "initial_release_date": "2003-03-28",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Mystery"
+ ],
+ "directed_by": [
+ "John McTiernan"
+ ],
+ "name": "Basic"
+ },
+ {
+ "id": "/en/basic_emotions",
+ "directed_by": [
+ "Thomas Moon",
+ "Julie Pham",
+ "Georgia Lee"
+ ],
+ "initial_release_date": "2004-09-09",
+ "name": "Basic emotions",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/basic_instinct_2",
+ "directed_by": [
+ "Michael Caton-Jones"
+ ],
+ "initial_release_date": "2006-03-31",
+ "name": "Basic Instinct 2",
+ "genre": [
+ "Thriller",
+ "Erotic thriller",
+ "Psychological thriller",
+ "Mystery",
+ "Crime Fiction",
+ "Horror"
+ ]
+ },
+ {
+ "id": "/en/batalla_en_el_cielo",
+ "directed_by": [
+ "Carlos Reygadas"
+ ],
+ "initial_release_date": "2005-05-15",
+ "name": "Battle In Heaven",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/batman_begins",
+ "directed_by": [
+ "Christopher Nolan"
+ ],
+ "initial_release_date": "2005-06-10",
+ "name": "Batman Begins",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Adventure Film",
+ "Film noir",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/batman_beyond_return_of_the_joker",
+ "directed_by": [
+ "Curt Geda"
+ ],
+ "initial_release_date": "2000-12-12",
+ "name": "Batman Beyond: Return of the Joker",
+ "genre": [
+ "Science Fiction",
+ "Animation",
+ "Superhero movie",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/batman_dead_end",
+ "directed_by": [
+ "Sandy Collora"
+ ],
+ "initial_release_date": "2003-07-19",
+ "name": "Batman: Dead End",
+ "genre": [
+ "Indie film",
+ "Short Film",
+ "Fan film"
+ ]
+ },
+ {
+ "id": "/en/batman_mystery_of_the_batwoman",
+ "directed_by": [
+ "Curt Geda",
+ "Tim Maltby"
+ ],
+ "initial_release_date": "2003-10-21",
+ "name": "Batman: Mystery of the Batwoman",
+ "genre": [
+ "Animated cartoon",
+ "Animation",
+ "Family",
+ "Superhero movie",
+ "Action/Adventure",
+ "Fantasy",
+ "Short Film",
+ "Fantasy Adventure"
+ ]
+ },
+ {
+ "id": "/en/batoru_rowaiaru_ii_chinkonka",
+ "directed_by": [
+ "Kenta Fukasaku",
+ "Kinji Fukasaku"
+ ],
+ "initial_release_date": "2003-07-05",
+ "name": "Battle Royale II: Requiem",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Science Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/battlefield_baseball",
+ "directed_by": [
+ "Y\u016bdai Yamaguchi"
+ ],
+ "initial_release_date": "2003-07-19",
+ "name": "Battlefield Baseball",
+ "genre": [
+ "Martial Arts Film",
+ "Horror",
+ "World cinema",
+ "Sports",
+ "Musical comedy",
+ "Japanese Movies",
+ "Horror comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bbs_the_documentary",
+ "directed_by": [
+ "Jason Scott Sadofsky"
+ ],
+ "name": "BBS: The Documentary",
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/be_cool",
+ "directed_by": [
+ "F. Gary Gray"
+ ],
+ "initial_release_date": "2005-03-04",
+ "name": "Be Cool",
+ "genre": [
+ "Crime Fiction",
+ "Crime Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/be_kind_rewind",
+ "directed_by": [
+ "Michel Gondry"
+ ],
+ "initial_release_date": "2008-01-20",
+ "name": "Be Kind Rewind",
+ "genre": [
+ "Farce",
+ "Comedy of Errors",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/be_with_me",
+ "directed_by": [
+ "Eric Khoo"
+ ],
+ "initial_release_date": "2005-05-12",
+ "name": "Be with Me",
+ "genre": [
+ "Indie film",
+ "LGBT",
+ "World cinema",
+ "Art film",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/beah_a_black_woman_speaks",
+ "directed_by": [
+ "Lisa Gay Hamilton"
+ ],
+ "initial_release_date": "2003-08-22",
+ "name": "Beah: A Black Woman Speaks",
+ "genre": [
+ "Documentary film",
+ "History",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/beastly_boyz",
+ "directed_by": [
+ "David DeCoteau"
+ ],
+ "name": "Beastly Boyz",
+ "genre": [
+ "LGBT",
+ "Horror",
+ "B movie",
+ "Teen film"
+ ]
+ },
+ {
+ "id": "/en/beauty_shop",
+ "directed_by": [
+ "Bille Woodruff"
+ ],
+ "initial_release_date": "2005-03-24",
+ "name": "Beauty Shop",
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bedazzled_2000",
+ "directed_by": [
+ "Harold Ramis"
+ ],
+ "initial_release_date": "2000-10-19",
+ "name": "Bedazzled",
+ "genre": [
+ "Romantic comedy",
+ "Fantasy",
+ "Black comedy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bee_movie",
+ "directed_by": [
+ "Steve Hickner",
+ "Simon J. Smith"
+ ],
+ "initial_release_date": "2007-10-28",
+ "name": "Bee Movie",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Animation",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bee_season_2005",
+ "directed_by": [
+ "David Siegel",
+ "Scott McGehee"
+ ],
+ "initial_release_date": "2005-11-11",
+ "name": "Bee Season",
+ "genre": [
+ "Film adaptation",
+ "Coming of age",
+ "Family Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/beer_league",
+ "directed_by": [
+ "Frank Sebastiano"
+ ],
+ "initial_release_date": "2006-09-15",
+ "name": "Artie Lange's Beer League",
+ "genre": [
+ "Sports",
+ "Indie film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/beer_the_movie",
+ "directed_by": [
+ "Peter Hoare"
+ ],
+ "initial_release_date": "2006-05-16",
+ "name": "Beer: The Movie",
+ "genre": [
+ "Indie film",
+ "Cult film",
+ "Parody",
+ "Bloopers &amp; Candid Camera",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/beerfest",
+ "directed_by": [
+ "Jay Chandrasekhar"
+ ],
+ "initial_release_date": "2006-08-25",
+ "name": "Beerfest",
+ "genre": [
+ "Absurdism",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/before_night_falls_2001",
+ "directed_by": [
+ "Julian Schnabel"
+ ],
+ "initial_release_date": "2000-09-03",
+ "name": "Before Night Falls",
+ "genre": [
+ "LGBT",
+ "Gay Themed",
+ "Political drama",
+ "Gay",
+ "Gay Interest",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/before_sunset",
+ "directed_by": [
+ "Richard Linklater"
+ ],
+ "initial_release_date": "2004-02-10",
+ "name": "Before Sunset",
+ "genre": [
+ "Romance Film",
+ "Indie film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/behind_enemy_lines",
+ "directed_by": [
+ "John Moore"
+ ],
+ "initial_release_date": "2001-11-17",
+ "name": "Behind Enemy Lines",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "War film",
+ "Action/Adventure",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/behind_the_mask_2006",
+ "directed_by": [
+ "Shannon Keith"
+ ],
+ "initial_release_date": "2006-03-21",
+ "name": "Behind the Mask",
+ "genre": [
+ "Documentary film",
+ "Indie film",
+ "Political cinema",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/behind_the_sun_2001",
+ "directed_by": [
+ "Walter Salles"
+ ],
+ "initial_release_date": "2001-09-06",
+ "name": "Behind the Sun",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/being_cyrus",
+ "directed_by": [
+ "Homi Adajania"
+ ],
+ "initial_release_date": "2005-11-08",
+ "name": "Being Cyrus",
+ "genre": [
+ "Thriller",
+ "Black comedy",
+ "Mystery",
+ "Psychological thriller",
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/being_julia",
+ "directed_by": [
+ "Istv\u00e1n Szab\u00f3"
+ ],
+ "initial_release_date": "2004-09-03",
+ "name": "Being Julia",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bekhals_tears",
+ "directed_by": [
+ "Lauand Omar"
+ ],
+ "name": "Bekhal's Tears",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/believe_in_me",
+ "directed_by": [
+ "Robert Collector"
+ ],
+ "name": "Believe in Me",
+ "genre": [
+ "Sports",
+ "Family Drama",
+ "Family",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/belly_of_the_beast",
+ "directed_by": [
+ "Ching Siu-tung"
+ ],
+ "initial_release_date": "2003-12-30",
+ "name": "Belly of the Beast",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Political thriller",
+ "Martial Arts Film",
+ "Action/Adventure",
+ "Crime Thriller",
+ "Action Thriller",
+ "Chinese Movies"
+ ]
+ },
+ {
+ "id": "/en/bellyful",
+ "directed_by": [
+ "Melvin Van Peebles"
+ ],
+ "initial_release_date": "2000-06-28",
+ "name": "Bellyful",
+ "genre": [
+ "Indie film",
+ "Satire",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bend_it_like_beckham",
+ "directed_by": [
+ "Gurinder Chadha"
+ ],
+ "initial_release_date": "2002-04-11",
+ "name": "Bend It Like Beckham",
+ "genre": [
+ "Coming of age",
+ "Indie film",
+ "Teen film",
+ "Sports",
+ "Romance Film",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bendito_infierno",
+ "directed_by": [
+ "Agust\u00edn D\u00edaz Yanes"
+ ],
+ "initial_release_date": "2001-11-28",
+ "name": "Don't Tempt Me",
+ "genre": [
+ "Religious Film",
+ "Fantasy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/beneath",
+ "directed_by": [
+ "Dagen Merrill"
+ ],
+ "initial_release_date": "2007-08-07",
+ "name": "Beneath",
+ "genre": [
+ "Horror",
+ "Psychological thriller",
+ "Thriller",
+ "Supernatural",
+ "Crime Thriller"
+ ]
+ },
+ {
+ "id": "/en/beneath_clouds",
+ "directed_by": [
+ "Ivan Sen"
+ ],
+ "initial_release_date": "2002-02-08",
+ "name": "Beneath Clouds",
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Road movie",
+ "Social problem film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/beowulf_2007",
+ "directed_by": [
+ "Robert Zemeckis"
+ ],
+ "initial_release_date": "2007-11-05",
+ "name": "Beowulf",
+ "genre": [
+ "Adventure Film",
+ "Computer Animation",
+ "Fantasy",
+ "Action Film",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/beowulf_grendel",
+ "directed_by": [
+ "Sturla Gunnarsson"
+ ],
+ "initial_release_date": "2005-09-14",
+ "name": "Beowulf &amp; Grendel",
+ "genre": [
+ "Adventure Film",
+ "Action Film",
+ "Fantasy",
+ "Action/Adventure",
+ "Film adaptation",
+ "World cinema",
+ "Historical period drama",
+ "Mythological Fantasy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/best_in_show",
+ "directed_by": [
+ "Christopher Guest"
+ ],
+ "initial_release_date": "2000-09-08",
+ "name": "Best in Show",
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/the_best_of_the_bloodiest_brawls_vol_1",
+ "directed_by": [],
+ "initial_release_date": "2006-03-14",
+ "name": "The Best of The Bloodiest Brawls, Vol. 1",
+ "genre": [
+ "Sports"
+ ]
+ },
+ {
+ "id": "/en/better_luck_tomorrow",
+ "directed_by": [
+ "Justin Lin"
+ ],
+ "initial_release_date": "2003-04-11",
+ "name": "Better Luck Tomorrow",
+ "genre": [
+ "Coming of age",
+ "Teen film",
+ "Crime Fiction",
+ "Crime Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bettie_page_dark_angel",
+ "directed_by": [
+ "Nico B."
+ ],
+ "initial_release_date": "2004-02-11",
+ "name": "Bettie Page: Dark Angel",
+ "genre": [
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bewitched_2005",
+ "directed_by": [
+ "Nora Ephron"
+ ],
+ "initial_release_date": "2005-06-24",
+ "name": "Bewitched",
+ "genre": [
+ "Romantic comedy",
+ "Fantasy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/beyond_borders",
+ "directed_by": [
+ "Martin Campbell"
+ ],
+ "initial_release_date": "2003-10-24",
+ "name": "Beyond Borders",
+ "genre": [
+ "Adventure Film",
+ "Historical period drama",
+ "Romance Film",
+ "War film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/beyond_re-animator",
+ "directed_by": [
+ "Brian Yuzna"
+ ],
+ "initial_release_date": "2003-04-04",
+ "name": "Beyond Re-Animator",
+ "genre": [
+ "Horror",
+ "Science Fiction",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/beyond_the_sea",
+ "directed_by": [
+ "Kevin Spacey"
+ ],
+ "initial_release_date": "2004-09-11",
+ "name": "Beyond the Sea",
+ "genre": [
+ "Musical",
+ "Music",
+ "Biographical film",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/bhadra_2005",
+ "directed_by": [
+ "Boyapati Srinu"
+ ],
+ "initial_release_date": "2005-05-12",
+ "name": "Bhadra",
+ "genre": [
+ "Action Film",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bhageeradha",
+ "directed_by": [
+ "Rasool Ellore"
+ ],
+ "initial_release_date": "2005-10-13",
+ "name": "Bhageeratha",
+ "genre": [
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/bheema",
+ "directed_by": [
+ "N. Lingusamy"
+ ],
+ "initial_release_date": "2008-01-14",
+ "name": "Bheemaa",
+ "genre": [
+ "Action Film",
+ "Tamil cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/bhoot",
+ "directed_by": [
+ "Ram Gopal Varma"
+ ],
+ "initial_release_date": "2003-05-17",
+ "name": "Bhoot",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Bollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/bichhoo",
+ "directed_by": [
+ "Guddu Dhanoa"
+ ],
+ "initial_release_date": "2000-07-07",
+ "name": "Bichhoo",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/big_eden",
+ "directed_by": [
+ "Thomas Bezucha"
+ ],
+ "initial_release_date": "2000-04-18",
+ "name": "Big Eden",
+ "genre": [
+ "LGBT",
+ "Indie film",
+ "Romance Film",
+ "Comedy-drama",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Romantic comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/big_fat_liar",
+ "directed_by": [
+ "Shawn Levy"
+ ],
+ "initial_release_date": "2002-02-02",
+ "name": "Big Fat Liar",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/big_fish",
+ "directed_by": [
+ "Tim Burton"
+ ],
+ "initial_release_date": "2003-12-10",
+ "name": "Big Fish",
+ "genre": [
+ "Fantasy",
+ "Adventure Film",
+ "War film",
+ "Comedy-drama",
+ "Film adaptation",
+ "Family Drama",
+ "Fantasy Comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/big_girls_dont_cry_2002",
+ "directed_by": [
+ "Maria von Heland"
+ ],
+ "initial_release_date": "2002-10-24",
+ "name": "Big Girls Don't Cry",
+ "genre": [
+ "World cinema",
+ "Melodrama",
+ "Teen film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/big_man_little_love",
+ "directed_by": [
+ "Handan \u0130pek\u00e7i"
+ ],
+ "initial_release_date": "2001-10-19",
+ "name": "Big Man, Little Love",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/big_mommas_house",
+ "directed_by": [
+ "Raja Gosnell"
+ ],
+ "initial_release_date": "2000-05-31",
+ "name": "Big Momma's House",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/big_mommas_house_2",
+ "directed_by": [
+ "John Whitesell"
+ ],
+ "initial_release_date": "2006-01-26",
+ "name": "Big Momma's House 2",
+ "genre": [
+ "Crime Fiction",
+ "Slapstick",
+ "Action Film",
+ "Action/Adventure",
+ "Thriller",
+ "Farce",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/big_toys_no_boys_2",
+ "directed_by": [
+ "Trist\u00e1n"
+ ],
+ "name": "Big Toys, No Boys 2",
+ "genre": [
+ "Pornographic film"
+ ]
+ },
+ {
+ "id": "/en/big_trouble_2002",
+ "directed_by": [
+ "Barry Sonnenfeld"
+ ],
+ "initial_release_date": "2002-04-05",
+ "name": "Big Trouble",
+ "genre": [
+ "Crime Fiction",
+ "Black comedy",
+ "Action Film",
+ "Action/Adventure",
+ "Gangster Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bigger_than_the_sky",
+ "directed_by": [
+ "Al Corley"
+ ],
+ "initial_release_date": "2005-02-18",
+ "name": "Bigger Than the Sky",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/biggie_tupac",
+ "directed_by": [
+ "Nick Broomfield"
+ ],
+ "initial_release_date": "2002-01-11",
+ "name": "Biggie &amp; Tupac",
+ "genre": [
+ "Documentary film",
+ "Hip hop film",
+ "Rockumentary",
+ "Indie film",
+ "Crime Fiction",
+ "True crime",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/bill_2007",
+ "directed_by": [
+ "Bernie Goldmann",
+ "Melisa Wallick"
+ ],
+ "initial_release_date": "2007-09-08",
+ "name": "Meet Bill",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/billy_elliot",
+ "directed_by": [
+ "Stephen Daldry"
+ ],
+ "initial_release_date": "2000-05-19",
+ "name": "Billy Elliot",
+ "genre": [
+ "Comedy",
+ "Music",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bionicle_3_web_of_shadows",
+ "directed_by": [
+ "David Molina",
+ "Terry Shakespeare"
+ ],
+ "initial_release_date": "2005-10-11",
+ "name": "Bionicle 3: Web of Shadows",
+ "genre": [
+ "Fantasy",
+ "Adventure Film",
+ "Animation",
+ "Family",
+ "Computer Animation",
+ "Science Fiction"
+ ]
+ },
+ {
+ "id": "/en/bionicle_2_legends_of_metru_nui",
+ "directed_by": [
+ "David Molina",
+ "Terry Shakespeare"
+ ],
+ "initial_release_date": "2004-10-19",
+ "name": "Bionicle 2: Legends of Metru Nui",
+ "genre": [
+ "Fantasy",
+ "Adventure Film",
+ "Animation",
+ "Family",
+ "Computer Animation",
+ "Science Fiction",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Fantasy Adventure"
+ ]
+ },
+ {
+ "id": "/en/bionicle_mask_of_light",
+ "directed_by": [
+ "David Molina",
+ "Terry Shakespeare"
+ ],
+ "initial_release_date": "2003-09-16",
+ "name": "Bionicle: Mask of Light: The Movie",
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Animation",
+ "Adventure Film",
+ "Computer Animation",
+ "Science Fiction",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Fantasy Adventure"
+ ]
+ },
+ {
+ "id": "/en/birth_2004",
+ "directed_by": [
+ "Jonathan Glazer"
+ ],
+ "initial_release_date": "2004-09-08",
+ "name": "Birth",
+ "genre": [
+ "Mystery",
+ "Indie film",
+ "Romance Film",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/birthday_girl",
+ "directed_by": [
+ "Jez Butterworth"
+ ],
+ "initial_release_date": "2002-02-01",
+ "name": "Birthday Girl",
+ "genre": [
+ "Black comedy",
+ "Thriller",
+ "Indie film",
+ "Erotic thriller",
+ "Crime Fiction",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bite_me_fanboy",
+ "directed_by": [
+ "Mat Nastos"
+ ],
+ "initial_release_date": "2005-06-01",
+ "name": "Bite Me, Fanboy",
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bitter_jester",
+ "directed_by": [
+ "Maija DiGiorgio"
+ ],
+ "initial_release_date": "2003-02-26",
+ "name": "Bitter Jester",
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "Stand-up comedy",
+ "Culture &amp; Society",
+ "Comedy",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/black_2005",
+ "directed_by": [
+ "Sanjay Leela Bhansali"
+ ],
+ "initial_release_date": "2005-02-04",
+ "name": "Black",
+ "genre": [
+ "Family",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/black_and_white_2002",
+ "directed_by": [
+ "Craig Lahiff"
+ ],
+ "initial_release_date": "2002-10-31",
+ "name": "Black and White",
+ "genre": [
+ "Trial drama",
+ "Crime Fiction",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/black_book_2006",
+ "directed_by": [
+ "Paul Verhoeven"
+ ],
+ "initial_release_date": "2006-09-01",
+ "name": "Black Book",
+ "genre": [
+ "Thriller",
+ "War film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/wikipedia/fr/Black_Christmas_$0028film$002C_2006$0029",
+ "directed_by": [
+ "Glen Morgan"
+ ],
+ "initial_release_date": "2006-12-15",
+ "name": "Black Christmas",
+ "genre": [
+ "Slasher",
+ "Teen film",
+ "Horror",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/black_cloud",
+ "directed_by": [
+ "Ricky Schroder"
+ ],
+ "initial_release_date": "2004-04-30",
+ "name": "Black Cloud",
+ "genre": [
+ "Indie film",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/black_friday_1993",
+ "directed_by": [
+ "Anurag Kashyap"
+ ],
+ "initial_release_date": "2004-05-20",
+ "name": "Black Friday",
+ "genre": [
+ "Crime Fiction",
+ "Historical drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/black_hawk_down",
+ "directed_by": [
+ "Ridley Scott"
+ ],
+ "initial_release_date": "2001-12-18",
+ "name": "Black Hawk Down",
+ "genre": [
+ "War film",
+ "Action/Adventure",
+ "Action Film",
+ "History",
+ "Combat Films",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/black_hole_2006",
+ "directed_by": [
+ "Tibor Tak\u00e1cs"
+ ],
+ "initial_release_date": "2006-06-10",
+ "name": "The Black Hole",
+ "genre": [
+ "Science Fiction",
+ "Thriller",
+ "Television film"
+ ]
+ },
+ {
+ "id": "/en/black_knight_2001",
+ "directed_by": [
+ "Gil Junger"
+ ],
+ "initial_release_date": "2001-11-15",
+ "name": "Black Knight",
+ "genre": [
+ "Time travel",
+ "Adventure Film",
+ "Costume drama",
+ "Science Fiction",
+ "Fantasy",
+ "Adventure Comedy",
+ "Fantasy Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/blackball_2005",
+ "directed_by": [
+ "Mel Smith"
+ ],
+ "initial_release_date": "2005-02-11",
+ "name": "Blackball",
+ "genre": [
+ "Sports",
+ "Family Drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blackwoods",
+ "directed_by": [
+ "Uwe Boll"
+ ],
+ "name": "Blackwoods",
+ "genre": [
+ "Thriller",
+ "Crime Thriller",
+ "Psychological thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blade_ii",
+ "directed_by": [
+ "Guillermo del Toro"
+ ],
+ "initial_release_date": "2002-03-21",
+ "name": "Blade II",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Science Fiction",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/blade_trinity",
+ "directed_by": [
+ "David S. Goyer"
+ ],
+ "initial_release_date": "2004-12-07",
+ "name": "Blade: Trinity",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Horror",
+ "Action/Adventure",
+ "Superhero movie",
+ "Fantasy",
+ "Adventure Film",
+ "Action Thriller"
+ ]
+ },
+ {
+ "id": "/en/bleach_memories_of_nobody",
+ "directed_by": [
+ "Noriyuki Abe"
+ ],
+ "initial_release_date": "2006-12-16",
+ "name": "Bleach: Memories of Nobody",
+ "genre": [
+ "Anime",
+ "Fantasy",
+ "Animation",
+ "Action Film",
+ "Adventure Film"
+ ]
+ },
+ {
+ "id": "/en/bless_the_child",
+ "directed_by": [
+ "Chuck Russell"
+ ],
+ "initial_release_date": "2000-08-11",
+ "name": "Bless the Child",
+ "genre": [
+ "Horror",
+ "Crime Fiction",
+ "Drama",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/blind_shaft",
+ "directed_by": [
+ "Li Yang"
+ ],
+ "initial_release_date": "2003-02-12",
+ "name": "Blind Shaft",
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blissfully_yours",
+ "directed_by": [
+ "Apichatpong Weerasethakul"
+ ],
+ "initial_release_date": "2002-05-17",
+ "name": "Blissfully Yours",
+ "genre": [
+ "Erotica",
+ "Romance Film",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blood_of_a_champion",
+ "directed_by": [
+ "Lawrence Page"
+ ],
+ "initial_release_date": "2006-03-07",
+ "name": "Blood of a Champion",
+ "genre": [
+ "Crime Fiction",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blood_rain",
+ "directed_by": [
+ "Kim Dae-seung"
+ ],
+ "initial_release_date": "2005-05-04",
+ "name": "Blood Rain",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "East Asian cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/blood_work",
+ "directed_by": [
+ "Clint Eastwood"
+ ],
+ "initial_release_date": "2002-08-09",
+ "name": "Blood Work",
+ "genre": [
+ "Mystery",
+ "Crime Thriller",
+ "Thriller",
+ "Suspense",
+ "Crime Fiction",
+ "Detective fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bloodrayne_2006",
+ "directed_by": [
+ "Uwe Boll"
+ ],
+ "initial_release_date": "2005-10-23",
+ "name": "BloodRayne",
+ "genre": [
+ "Horror",
+ "Action Film",
+ "Fantasy",
+ "Adventure Film",
+ "Costume drama"
+ ]
+ },
+ {
+ "id": "/en/bloodsport_ecws_most_violent_matches",
+ "directed_by": [],
+ "initial_release_date": "2006-02-07",
+ "name": "Bloodsport - ECW's Most Violent Matches",
+ "genre": [
+ "Documentary film",
+ "Sports"
+ ]
+ },
+ {
+ "id": "/en/bloody_sunday",
+ "directed_by": [
+ "Paul Greengrass"
+ ],
+ "initial_release_date": "2002-01-16",
+ "name": "Bloody Sunday",
+ "genre": [
+ "Political drama",
+ "Docudrama",
+ "Historical fiction",
+ "War film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blow",
+ "directed_by": [
+ "Ted Demme"
+ ],
+ "initial_release_date": "2001-03-29",
+ "name": "Blow",
+ "genre": [
+ "Biographical film",
+ "Crime Fiction",
+ "Film adaptation",
+ "Historical period drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blue_car",
+ "directed_by": [
+ "Karen Moncrieff"
+ ],
+ "initial_release_date": "2003-05-02",
+ "name": "Blue Car",
+ "genre": [
+ "Indie film",
+ "Family Drama",
+ "Coming of age",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blue_collar_comedy_tour_rides_again",
+ "directed_by": [
+ "C. B. Harding"
+ ],
+ "initial_release_date": "2004-12-05",
+ "name": "Blue Collar Comedy Tour Rides Again",
+ "genre": [
+ "Documentary film",
+ "Stand-up comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/blue_collar_comedy_tour_one_for_the_road",
+ "directed_by": [
+ "C. B. Harding"
+ ],
+ "initial_release_date": "2006-06-27",
+ "name": "Blue Collar Comedy Tour: One for the Road",
+ "genre": [
+ "Stand-up comedy",
+ "Concert film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/blue_collar_comedy_tour_the_movie",
+ "directed_by": [
+ "C. B. Harding"
+ ],
+ "initial_release_date": "2003-03-28",
+ "name": "Blue Collar Comedy Tour: The Movie",
+ "genre": [
+ "Stand-up comedy",
+ "Documentary film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/blue_crush",
+ "directed_by": [
+ "John Stockwell"
+ ],
+ "initial_release_date": "2002-08-08",
+ "name": "Blue Crush",
+ "genre": [
+ "Teen film",
+ "Romance Film",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blue_gate_crossing",
+ "directed_by": [
+ "Yee Chin-yen"
+ ],
+ "initial_release_date": "2002-09-08",
+ "name": "Blue Gate Crossing",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/blue_milk",
+ "directed_by": [
+ "William Grammer"
+ ],
+ "initial_release_date": "2006-06-20",
+ "name": "Blue Milk",
+ "genre": [
+ "Indie film",
+ "Short Film",
+ "Fan film"
+ ]
+ },
+ {
+ "id": "/en/blue_state",
+ "directed_by": [
+ "Marshall Lewy"
+ ],
+ "name": "Blue State",
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Political cinema",
+ "Romantic comedy",
+ "Political satire",
+ "Road movie",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/blueberry_2004",
+ "directed_by": [
+ "Jan Kounen"
+ ],
+ "initial_release_date": "2004-02-11",
+ "name": "Blueberry",
+ "genre": [
+ "Western",
+ "Thriller",
+ "Action Film",
+ "Adventure Film"
+ ]
+ },
+ {
+ "id": "/en/blueprint_2003",
+ "directed_by": [
+ "Rolf Sch\u00fcbel"
+ ],
+ "initial_release_date": "2003-12-08",
+ "name": "Blueprint",
+ "genre": [
+ "Science Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bluffmaster",
+ "directed_by": [
+ "Rohan Sippy"
+ ],
+ "initial_release_date": "2005-12-16",
+ "name": "Bluffmaster!",
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Crime Fiction",
+ "Romantic comedy",
+ "Musical comedy",
+ "Comedy",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/boa_vs_python",
+ "directed_by": [
+ "David Flores"
+ ],
+ "initial_release_date": "2004-05-24",
+ "name": "Boa vs. Python",
+ "genre": [
+ "Horror",
+ "Natural horror film",
+ "Monster",
+ "Science Fiction",
+ "Creature Film"
+ ]
+ },
+ {
+ "id": "/en/bobby",
+ "directed_by": [
+ "Emilio Estevez"
+ ],
+ "initial_release_date": "2006-09-05",
+ "name": "Bobby",
+ "genre": [
+ "Political drama",
+ "Historical period drama",
+ "History",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/boiler_room",
+ "directed_by": [
+ "Ben Younger"
+ ],
+ "initial_release_date": "2000-01-30",
+ "name": "Boiler Room",
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bolletjes_blues",
+ "directed_by": [
+ "Brigit Hillenius",
+ "Karin Junger"
+ ],
+ "initial_release_date": "2006-03-23",
+ "name": "Bolletjes Blues",
+ "genre": [
+ "Musical"
+ ]
+ },
+ {
+ "id": "/en/bollywood_hollywood",
+ "directed_by": [
+ "Deepa Mehta"
+ ],
+ "initial_release_date": "2002-10-25",
+ "name": "Bollywood/Hollywood",
+ "genre": [
+ "Bollywood",
+ "Musical",
+ "Romance Film",
+ "Romantic comedy",
+ "Musical comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bomb_the_system",
+ "directed_by": [
+ "Adam Bhala Lough"
+ ],
+ "name": "Bomb the System",
+ "genre": [
+ "Crime Fiction",
+ "Indie film",
+ "Coming of age",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bommarillu",
+ "directed_by": [
+ "Bhaskar"
+ ],
+ "initial_release_date": "2006-08-09",
+ "name": "Bommarillu",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/bon_cop_bad_cop",
+ "directed_by": [
+ "Eric Canuel"
+ ],
+ "name": "Bon Cop, Bad Cop",
+ "genre": [
+ "Crime Fiction",
+ "Buddy film",
+ "Action Film",
+ "Action/Adventure",
+ "Thriller",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bones_2001",
+ "directed_by": [
+ "Ernest R. Dickerson"
+ ],
+ "initial_release_date": "2001-10-26",
+ "name": "Bones",
+ "genre": [
+ "Horror",
+ "Blaxploitation film",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/bonjour_monsieur_shlomi",
+ "directed_by": [
+ "Shemi Zarhin"
+ ],
+ "initial_release_date": "2003-04-03",
+ "name": "Bonjour Monsieur Shlomi",
+ "genre": [
+ "World cinema",
+ "Family Drama",
+ "Comedy-drama",
+ "Coming of age",
+ "Family",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/boogeyman",
+ "directed_by": [
+ "Stephen T. Kay"
+ ],
+ "initial_release_date": "2005-02-04",
+ "name": "Boogeyman",
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Teen film",
+ "Thriller",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/boogiepop_and_others_2000",
+ "directed_by": [
+ "Ryu Kaneda"
+ ],
+ "initial_release_date": "2000-03-11",
+ "name": "Boogiepop and Others",
+ "genre": [
+ "Animation",
+ "Fantasy",
+ "Anime",
+ "Thriller",
+ "Japanese Movies"
+ ]
+ },
+ {
+ "id": "/en/book_of_love_2004",
+ "directed_by": [
+ "Alan Brown"
+ ],
+ "initial_release_date": "2004-01-18",
+ "name": "Book of Love",
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/book_of_shadows_blair_witch_2",
+ "directed_by": [
+ "Joe Berlinger"
+ ],
+ "initial_release_date": "2000-10-27",
+ "name": "Book of Shadows: Blair Witch 2",
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Mystery",
+ "Psychological thriller",
+ "Slasher",
+ "Thriller",
+ "Ensemble Film",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/boomer",
+ "directed_by": [
+ "Pyotr Buslov"
+ ],
+ "initial_release_date": "2003-08-02",
+ "name": "Bimmer",
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/wikipedia/de_id/1782985",
+ "directed_by": [
+ "Larry Charles"
+ ],
+ "initial_release_date": "2006-08-04",
+ "name": "Borat: Cultural Learnings of America for Make Benefit Glorious Nation of Kazakhstan",
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/born_into_brothels_calcuttas_red_light_kids",
+ "directed_by": [
+ "Zana Briski",
+ "Ross Kauffman"
+ ],
+ "initial_release_date": "2004-01-17",
+ "name": "Born into Brothels: Calcutta's Red Light Kids",
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/free_radicals",
+ "directed_by": [
+ "Barbara Albert"
+ ],
+ "name": "Free Radicals",
+ "genre": [
+ "World cinema",
+ "Romance Film",
+ "Art film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/boss_2006",
+ "directed_by": [
+ "V.N. Aditya"
+ ],
+ "initial_release_date": "2006-09-27",
+ "name": "Boss",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/bossn_up",
+ "directed_by": [
+ "Dylan C. Brown"
+ ],
+ "initial_release_date": "2005-06-01",
+ "name": "Boss'n Up",
+ "genre": [
+ "Musical",
+ "Indie film",
+ "Crime Fiction",
+ "Musical Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bossa_nova_2000",
+ "directed_by": [
+ "Bruno Barreto"
+ ],
+ "initial_release_date": "2000-02-18",
+ "name": "Bossa Nova",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bosta",
+ "directed_by": [
+ "Philippe Aractingi"
+ ],
+ "name": "Bosta",
+ "genre": [
+ "Musical"
+ ]
+ },
+ {
+ "id": "/en/bowling_for_columbine",
+ "directed_by": [
+ "Michael Moore"
+ ],
+ "initial_release_date": "2002-05-15",
+ "name": "Bowling for Columbine",
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "Political cinema",
+ "Historical Documentaries"
+ ]
+ },
+ {
+ "id": "/en/bowling_fun_and_fundamentals_for_boys_and_girls",
+ "directed_by": [],
+ "name": "Bowling Fun And Fundamentals For Boys And Girls",
+ "genre": [
+ "Documentary film",
+ "Sports"
+ ]
+ },
+ {
+ "id": "/en/boy_eats_girl",
+ "directed_by": [
+ "Stephen Bradley"
+ ],
+ "initial_release_date": "2005-04-06",
+ "name": "Boy Eats Girl",
+ "genre": [
+ "Indie film",
+ "Horror",
+ "Teen film",
+ "Creature Film",
+ "Zombie Film",
+ "Horror comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/boynton_beach_club",
+ "directed_by": [
+ "Susan Seidelman"
+ ],
+ "initial_release_date": "2006-08-04",
+ "name": "Boynton Beach Club",
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "Comedy-drama",
+ "Slice of life",
+ "Ensemble Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/boys_2003",
+ "directed_by": [
+ "S. Shankar"
+ ],
+ "initial_release_date": "2003-08-29",
+ "name": "Boys",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Comedy",
+ "Tamil cinema",
+ "World cinema",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/brain_blockers",
+ "directed_by": [
+ "Lincoln Kupchak"
+ ],
+ "initial_release_date": "2007-03-15",
+ "name": "Brain Blockers",
+ "genre": [
+ "Horror",
+ "Zombie Film",
+ "Horror comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/breakin_all_the_rules",
+ "directed_by": [
+ "Daniel Taplitz"
+ ],
+ "initial_release_date": "2004-05-14",
+ "name": "Breakin' All the Rules",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy of Errors",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/breaking_and_entering",
+ "directed_by": [
+ "Anthony Minghella"
+ ],
+ "initial_release_date": "2006-09-13",
+ "name": "Breaking and Entering",
+ "genre": [
+ "Romance Film",
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/brick_2006",
+ "directed_by": [
+ "Rian Johnson"
+ ],
+ "initial_release_date": "2006-04-07",
+ "name": "Brick",
+ "genre": [
+ "Film noir",
+ "Indie film",
+ "Teen film",
+ "Neo-noir",
+ "Mystery",
+ "Crime Thriller",
+ "Crime Fiction",
+ "Thriller",
+ "Detective fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bride_and_prejudice",
+ "directed_by": [
+ "Gurinder Chadha"
+ ],
+ "initial_release_date": "2004-10-06",
+ "name": "Bride and Prejudice",
+ "genre": [
+ "Musical",
+ "Romantic comedy",
+ "Romance Film",
+ "Film adaptation",
+ "Comedy of manners",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bridget_jones_the_edge_of_reason",
+ "directed_by": [
+ "Beeban Kidron"
+ ],
+ "initial_release_date": "2004-11-08",
+ "name": "Bridget Jones: The Edge of Reason",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bridget_joness_diary_2001",
+ "directed_by": [
+ "Sharon Maguire"
+ ],
+ "initial_release_date": "2001-04-04",
+ "name": "Bridget Jones's Diary",
+ "genre": [
+ "Romantic comedy",
+ "Film adaptation",
+ "Romance Film",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/brigham_city_2001",
+ "directed_by": [
+ "Richard Dutcher"
+ ],
+ "name": "Brigham City",
+ "genre": [
+ "Mystery",
+ "Indie film",
+ "Crime Fiction",
+ "Thriller",
+ "Crime Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bright_young_things",
+ "directed_by": [
+ "Stephen Fry"
+ ],
+ "initial_release_date": "2003-10-03",
+ "name": "Bright Young Things",
+ "genre": [
+ "Indie film",
+ "War film",
+ "Comedy-drama",
+ "Historical period drama",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/wikipedia/en_title/Brilliant_$0028film$0029",
+ "directed_by": [
+ "Roger Cardinal"
+ ],
+ "initial_release_date": "2004-02-15",
+ "name": "Brilliant",
+ "genre": [
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/bring_it_on",
+ "directed_by": [
+ "Peyton Reed"
+ ],
+ "initial_release_date": "2000-08-22",
+ "name": "Bring It On",
+ "genre": [
+ "Comedy",
+ "Sports"
+ ]
+ },
+ {
+ "id": "/en/bring_it_on_again",
+ "directed_by": [
+ "Damon Santostefano"
+ ],
+ "initial_release_date": "2004-01-13",
+ "name": "Bring It On Again",
+ "genre": [
+ "Teen film",
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bring_it_on_all_or_nothing",
+ "directed_by": [
+ "Steve Rash"
+ ],
+ "initial_release_date": "2006-08-08",
+ "name": "Bring It On: All or Nothing",
+ "genre": [
+ "Teen film",
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bringing_down_the_house",
+ "directed_by": [
+ "Adam Shankman"
+ ],
+ "initial_release_date": "2003-03-07",
+ "name": "Bringing Down the House",
+ "genre": [
+ "Romantic comedy",
+ "Screwball comedy",
+ "Comedy of Errors",
+ "Crime Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/broadway_the_golden_age",
+ "directed_by": [
+ "Rick McKay"
+ ],
+ "initial_release_date": "2004-06-11",
+ "name": "Broadway: The Golden Age",
+ "genre": [
+ "Documentary film",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/brokeback_mountain",
+ "directed_by": [
+ "Ang Lee"
+ ],
+ "initial_release_date": "2005-09-02",
+ "name": "Brokeback Mountain",
+ "genre": [
+ "Romance Film",
+ "Epic film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/broken_allegiance",
+ "directed_by": [
+ "Nick Hallam"
+ ],
+ "name": "Broken Allegiance",
+ "genre": [
+ "Indie film",
+ "Short Film",
+ "Fan film"
+ ]
+ },
+ {
+ "id": "/en/broken_flowers",
+ "directed_by": [
+ "Jim Jarmusch"
+ ],
+ "initial_release_date": "2005-08-05",
+ "name": "Broken Flowers",
+ "genre": [
+ "Mystery",
+ "Road movie",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/the_broken_hearts_club_a_romantic_comedy",
+ "directed_by": [
+ "Greg Berlanti"
+ ],
+ "initial_release_date": "2000-01-29",
+ "name": "The Broken Hearts Club: A Romantic Comedy",
+ "genre": [
+ "Romance Film",
+ "LGBT",
+ "Romantic comedy",
+ "Gay Themed",
+ "Indie film",
+ "Comedy-drama",
+ "Gay",
+ "Gay Interest",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/brooklyn_lobster",
+ "directed_by": [
+ "Kevin Jordan"
+ ],
+ "initial_release_date": "2005-09-09",
+ "name": "Brooklyn Lobster",
+ "genre": [
+ "Indie film",
+ "Family Drama",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/brother",
+ "directed_by": [
+ "Takeshi Kitano"
+ ],
+ "name": "Brother",
+ "genre": [
+ "Thriller",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/brother_bear",
+ "directed_by": [
+ "Aaron Blaise",
+ "Robert A. Walker"
+ ],
+ "initial_release_date": "2003-10-20",
+ "name": "Brother Bear",
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Animation",
+ "Adventure Film"
+ ]
+ },
+ {
+ "id": "/en/brother_bear_2",
+ "directed_by": [
+ "Ben Gluck"
+ ],
+ "initial_release_date": "2006-08-29",
+ "name": "Brother Bear 2",
+ "genre": [
+ "Family",
+ "Animated cartoon",
+ "Fantasy",
+ "Adventure Film",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/brother_2",
+ "directed_by": [
+ "Aleksei Balabanov"
+ ],
+ "initial_release_date": "2000-05-11",
+ "name": "Brother 2",
+ "genre": [
+ "Crime Fiction",
+ "Thriller",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/brotherhood_of_blood",
+ "directed_by": [
+ "Michael Roesch",
+ "Peter Scheerer",
+ "Sid Haig"
+ ],
+ "name": "Brotherhood of Blood",
+ "genre": [
+ "Horror",
+ "Cult film",
+ "Creature Film"
+ ]
+ },
+ {
+ "id": "/en/brotherhood_of_the_wolf",
+ "directed_by": [
+ "Christophe Gans"
+ ],
+ "initial_release_date": "2001-01-31",
+ "name": "Brotherhood of the Wolf",
+ "genre": [
+ "Martial Arts Film",
+ "Adventure Film",
+ "Mystery",
+ "Science Fiction",
+ "Historical fiction",
+ "Thriller",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/brothers_of_the_head",
+ "directed_by": [
+ "Keith Fulton",
+ "Louis Pepe"
+ ],
+ "initial_release_date": "2005-09-10",
+ "name": "Brothers of the Head",
+ "genre": [
+ "Indie film",
+ "Musical",
+ "Film adaptation",
+ "Music",
+ "Mockumentary",
+ "Comedy-drama",
+ "Historical period drama",
+ "Musical Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/brown_sugar_2002",
+ "directed_by": [
+ "Rick Famuyiwa"
+ ],
+ "initial_release_date": "2002-10-05",
+ "name": "Brown Sugar",
+ "genre": [
+ "Musical",
+ "Romantic comedy",
+ "Coming of age",
+ "Romance Film",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bruce_almighty",
+ "directed_by": [
+ "Tom Shadyac"
+ ],
+ "initial_release_date": "2003-05-23",
+ "name": "Bruce Almighty",
+ "genre": [
+ "Comedy",
+ "Fantasy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bubba_ho-tep",
+ "directed_by": [
+ "Don Coscarelli"
+ ],
+ "initial_release_date": "2002-06-09",
+ "name": "Bubba Ho-Tep",
+ "genre": [
+ "Horror",
+ "Parody",
+ "Comedy",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bubble",
+ "directed_by": [
+ "Steven Soderbergh"
+ ],
+ "initial_release_date": "2005-09-03",
+ "name": "Bubble",
+ "genre": [
+ "Crime Fiction",
+ "Mystery",
+ "Indie film",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bubble_boy",
+ "directed_by": [
+ "Blair Hayes"
+ ],
+ "initial_release_date": "2001-08-23",
+ "name": "Bubble Boy",
+ "genre": [
+ "Romance Film",
+ "Teen film",
+ "Romantic comedy",
+ "Adventure Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/buddy_boy",
+ "directed_by": [
+ "Mark Hanlon"
+ ],
+ "initial_release_date": "2000-03-24",
+ "name": "Buddy Boy",
+ "genre": [
+ "Psychological thriller",
+ "Thriller",
+ "Indie film",
+ "Erotic thriller"
+ ]
+ },
+ {
+ "id": "/en/buffalo_dreams",
+ "directed_by": [
+ "David Jackson"
+ ],
+ "initial_release_date": "2005-03-11",
+ "name": "Buffalo Dreams",
+ "genre": [
+ "Western",
+ "Teen film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/buffalo_soldiers",
+ "directed_by": [
+ "Gregor Jordan"
+ ],
+ "initial_release_date": "2001-09-08",
+ "name": "Buffalo Soldiers",
+ "genre": [
+ "War film",
+ "Crime Fiction",
+ "Comedy",
+ "Thriller",
+ "Satire",
+ "Indie film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bug_2006",
+ "directed_by": [
+ "William Friedkin"
+ ],
+ "initial_release_date": "2006-05-19",
+ "name": "Bug",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Indie film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bulletproof_monk",
+ "directed_by": [
+ "Paul Hunter"
+ ],
+ "initial_release_date": "2003-04-16",
+ "name": "Bulletproof Monk",
+ "genre": [
+ "Martial Arts Film",
+ "Fantasy",
+ "Action Film",
+ "Buddy film",
+ "Thriller",
+ "Action/Adventure",
+ "Action Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/bully_2001",
+ "directed_by": [
+ "Larry Clark"
+ ],
+ "initial_release_date": "2001-06-15",
+ "name": "Bully",
+ "genre": [
+ "Teen film",
+ "Crime Fiction",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bunny_2005",
+ "directed_by": [
+ "V. V. Vinayak"
+ ],
+ "initial_release_date": "2005-04-06",
+ "name": "Bunny",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "World cinema",
+ "Tollywood",
+ "Musical Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/bunshinsaba",
+ "directed_by": [
+ "Ahn Byeong-ki"
+ ],
+ "initial_release_date": "2004-05-14",
+ "name": "Bunshinsaba",
+ "genre": [
+ "Horror",
+ "World cinema",
+ "East Asian cinema"
+ ]
+ },
+ {
+ "id": "/en/bunty_aur_babli",
+ "directed_by": [
+ "Shaad Ali"
+ ],
+ "initial_release_date": "2005-05-27",
+ "name": "Bunty Aur Babli",
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "World cinema",
+ "Musical comedy",
+ "Comedy",
+ "Adventure Film",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/onibus_174",
+ "directed_by": [
+ "Jos\u00e9 Padilha"
+ ],
+ "initial_release_date": "2002-10-22",
+ "name": "Bus 174",
+ "genre": [
+ "Documentary film",
+ "True crime"
+ ]
+ },
+ {
+ "id": "/en/bus_conductor",
+ "directed_by": [
+ "V. M. Vinu"
+ ],
+ "initial_release_date": "2005-12-23",
+ "name": "Bus Conductor",
+ "genre": [
+ "Comedy",
+ "Action Film",
+ "Malayalam Cinema",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/m/0bvs38",
+ "directed_by": [
+ "Michael Votto"
+ ],
+ "name": "Busted Shoes and Broken Hearts: A Film About Lowlight",
+ "genre": [
+ "Indie film",
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/butterfly_2004",
+ "directed_by": [
+ "Yan Yan Mak"
+ ],
+ "initial_release_date": "2004-09-04",
+ "name": "Butterfly",
+ "genre": [
+ "LGBT",
+ "Chinese Movies",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/butterfly_on_a_wheel",
+ "directed_by": [
+ "Mike Barker"
+ ],
+ "initial_release_date": "2007-02-10",
+ "name": "Butterfly on a Wheel",
+ "genre": [
+ "Thriller",
+ "Crime Thriller",
+ "Crime Fiction",
+ "Psychological thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/c_i_d_moosa",
+ "directed_by": [
+ "Johny Antony"
+ ],
+ "initial_release_date": "2003-07-04",
+ "name": "C.I.D.Moosa",
+ "genre": [
+ "Action Film",
+ "Comedy",
+ "Malayalam Cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/c_r_a_z_y",
+ "directed_by": [
+ "Jean-Marc Vall\u00e9e"
+ ],
+ "initial_release_date": "2005-05-27",
+ "name": "C.R.A.Z.Y.",
+ "genre": [
+ "LGBT",
+ "Indie film",
+ "Comedy-drama",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Historical period drama",
+ "Coming of age",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/c_s_a_the_confederate_states_of_america",
+ "directed_by": [
+ "Kevin Willmott"
+ ],
+ "name": "C.S.A.: The Confederate States of America",
+ "genre": [
+ "Mockumentary",
+ "Satire",
+ "Black comedy",
+ "Parody",
+ "Indie film",
+ "Political cinema",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cabaret_paradis",
+ "directed_by": [
+ "Corinne Benizio",
+ "Gilles Benizio"
+ ],
+ "initial_release_date": "2006-04-12",
+ "name": "Cabaret Paradis",
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/wikipedia/it_id/335645",
+ "directed_by": [
+ "Michael Haneke"
+ ],
+ "initial_release_date": "2005-05-14",
+ "name": "Cach\u00e9",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Psychological thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cactuses",
+ "directed_by": [
+ "Matt Hannon",
+ "Rick Rapoza"
+ ],
+ "initial_release_date": "2006-03-15",
+ "name": "Cactuses",
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cadet_kelly",
+ "directed_by": [
+ "Larry Shaw"
+ ],
+ "initial_release_date": "2002-03-08",
+ "name": "Cadet Kelly",
+ "genre": [
+ "Teen film",
+ "Coming of age",
+ "Family",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/caffeine_2006",
+ "directed_by": [
+ "John Cosgrove"
+ ],
+ "name": "Caffeine",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Indie film",
+ "Ensemble Film",
+ "Workplace Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/wikipedia/es_id/1062610",
+ "directed_by": [
+ "Nisha Ganatra",
+ "Jennifer Arzt"
+ ],
+ "name": "Cake",
+ "genre": [
+ "Romantic comedy",
+ "Short Film",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/calcutta_mail",
+ "directed_by": [
+ "Sudhir Mishra"
+ ],
+ "initial_release_date": "2003-06-30",
+ "name": "Calcutta Mail",
+ "genre": [
+ "Thriller",
+ "Bollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/can_you_hack_it",
+ "directed_by": [
+ "Sam Bozzo"
+ ],
+ "name": "Hackers Wanted",
+ "genre": [
+ "Indie film",
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/candy_2006",
+ "directed_by": [
+ "Neil Armfield"
+ ],
+ "initial_release_date": "2006-04-27",
+ "name": "Candy",
+ "genre": [
+ "Romance Film",
+ "Indie film",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/caotica_ana",
+ "directed_by": [
+ "Julio Medem"
+ ],
+ "initial_release_date": "2007-08-24",
+ "name": "Ca\u00f3tica Ana",
+ "genre": [
+ "Romance Film",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/capote",
+ "directed_by": [
+ "Bennett Miller"
+ ],
+ "initial_release_date": "2005-09-02",
+ "name": "Capote",
+ "genre": [
+ "Crime Fiction",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/capturing_the_friedmans",
+ "directed_by": [
+ "Andrew Jarecki"
+ ],
+ "initial_release_date": "2003-01-17",
+ "name": "Capturing the Friedmans",
+ "genre": [
+ "Documentary film",
+ "Mystery",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/care_bears_journey_to_joke_a_lot",
+ "directed_by": [
+ "Mike Fallows"
+ ],
+ "initial_release_date": "2004-10-05",
+ "name": "Care Bears: Journey to Joke-a-lot",
+ "genre": [
+ "Musical",
+ "Computer Animation",
+ "Animation",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Musical comedy",
+ "Comedy",
+ "Family"
+ ]
+ },
+ {
+ "id": "/en/cargo_2006",
+ "directed_by": [
+ "Clive Gordon"
+ ],
+ "initial_release_date": "2006-01-24",
+ "name": "Cargo",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Indie film",
+ "Adventure Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cars",
+ "directed_by": [
+ "John Lasseter",
+ "Joe Ranft"
+ ],
+ "initial_release_date": "2006-03-14",
+ "name": "Cars",
+ "genre": [
+ "Animation",
+ "Family",
+ "Adventure Film",
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/casanova",
+ "directed_by": [
+ "Lasse Hallstr\u00f6m"
+ ],
+ "initial_release_date": "2005-09-03",
+ "name": "Casanova",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Costume drama",
+ "Adventure Film",
+ "Historical period drama",
+ "Swashbuckler film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/case_of_evil",
+ "directed_by": [
+ "Graham Theakston"
+ ],
+ "initial_release_date": "2002-10-25",
+ "name": "Sherlock: Case of Evil",
+ "genre": [
+ "Mystery",
+ "Action Film",
+ "Adventure Film",
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cast_away",
+ "initial_release_date": "2000-12-07",
+ "name": "Cast Away",
+ "directed_by": [
+ "Robert Zemeckis"
+ ],
+ "genre": [
+ "Airplanes and airports",
+ "Adventure Film",
+ "Action/Adventure",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/castlevania_2007",
+ "name": "Castlevania",
+ "directed_by": [
+ "Paul W. S. Anderson",
+ "Sylvain White"
+ ],
+ "genre": [
+ "Action Film",
+ "Horror"
+ ]
+ },
+ {
+ "id": "/en/catch_me_if_you_can",
+ "initial_release_date": "2002-12-16",
+ "name": "Catch Me If You Can",
+ "directed_by": [
+ "Steven Spielberg"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Comedy",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/catch_that_kid",
+ "initial_release_date": "2004-02-06",
+ "name": "Catch That Kid",
+ "directed_by": [
+ "Bart Freundlich"
+ ],
+ "genre": [
+ "Teen film",
+ "Adventure Film",
+ "Crime Fiction",
+ "Family",
+ "Caper story",
+ "Children's/Family",
+ "Crime Comedy",
+ "Family-Oriented Adventure",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/caterina_in_the_big_city",
+ "initial_release_date": "2003-10-24",
+ "name": "Caterina in the Big City",
+ "directed_by": [
+ "Paolo Virz\u00ec"
+ ],
+ "genre": [
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cats_dogs",
+ "initial_release_date": "2001-07-04",
+ "name": "Cats &amp; Dogs",
+ "directed_by": [
+ "Lawrence Guterman"
+ ],
+ "genre": [
+ "Adventure Film",
+ "Family",
+ "Action Film",
+ "Children's/Family",
+ "Fantasy Adventure",
+ "Fantasy Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/catwoman_2004",
+ "initial_release_date": "2004-07-19",
+ "name": "Catwoman",
+ "directed_by": [
+ "Pitof"
+ ],
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Fantasy",
+ "Action/Adventure",
+ "Thriller",
+ "Superhero movie"
+ ]
+ },
+ {
+ "id": "/en/caved_in_prehistoric_terror",
+ "initial_release_date": "2006-01-07",
+ "name": "Caved In: Prehistoric Terror",
+ "directed_by": [
+ "Richard Pepin"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Natural horror film",
+ "Monster",
+ "Fantasy",
+ "Television film",
+ "Creature Film",
+ "Sci-Fi Horror"
+ ]
+ },
+ {
+ "id": "/en/cellular",
+ "initial_release_date": "2004-09-10",
+ "name": "Cellular",
+ "directed_by": [
+ "David R. Ellis"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Thriller",
+ "Action/Adventure"
+ ]
+ },
+ {
+ "id": "/en/center_stage",
+ "initial_release_date": "2000-05-12",
+ "name": "Center Stage",
+ "directed_by": [
+ "Nicholas Hytner"
+ ],
+ "genre": [
+ "Teen film",
+ "Dance film",
+ "Musical",
+ "Musical Drama",
+ "Ensemble Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chai_lai",
+ "initial_release_date": "2006-01-26",
+ "name": "Chai Lai",
+ "directed_by": [
+ "Poj Arnon"
+ ],
+ "genre": [
+ "Action Film",
+ "Martial Arts Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chain_2004",
+ "name": "Chain",
+ "directed_by": [
+ "Jem Cohen"
+ ],
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/chakram_2005",
+ "initial_release_date": "2005-03-25",
+ "name": "Chakram",
+ "directed_by": [
+ "Krishna Vamsi"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/challenger_2007",
+ "name": "Challenger",
+ "directed_by": [
+ "Philip Kaufman"
+ ],
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chalo_ishq_ladaaye",
+ "initial_release_date": "2002-12-27",
+ "name": "Chalo Ishq Ladaaye",
+ "directed_by": [
+ "Aziz Sejawal"
+ ],
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Bollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/chalte_chalte",
+ "initial_release_date": "2003-06-12",
+ "name": "Chalte Chalte",
+ "directed_by": [
+ "Aziz Mirza"
+ ],
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Bollywood",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/chameli",
+ "initial_release_date": "2003-12-31",
+ "name": "Chameli",
+ "directed_by": [
+ "Sudhir Mishra",
+ "Anant Balani"
+ ],
+ "genre": [
+ "Romance Film",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chandni_bar",
+ "initial_release_date": "2001-09-28",
+ "name": "Chandni Bar",
+ "directed_by": [
+ "Madhur Bhandarkar"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chandramukhi",
+ "initial_release_date": "2005-04-13",
+ "name": "Chandramukhi",
+ "directed_by": [
+ "P. Vasu"
+ ],
+ "genre": [
+ "Horror",
+ "World cinema",
+ "Musical",
+ "Horror comedy",
+ "Musical comedy",
+ "Comedy",
+ "Fantasy",
+ "Romance Film"
+ ]
+ },
+ {
+ "id": "/en/changing_lanes",
+ "initial_release_date": "2002-04-07",
+ "name": "Changing Lanes",
+ "directed_by": [
+ "Roger Michell"
+ ],
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Melodrama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chaos_2007",
+ "initial_release_date": "2005-12-15",
+ "name": "Chaos",
+ "directed_by": [
+ "Tony Giglio"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Heist film",
+ "Action/Adventure",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chaos_2005",
+ "initial_release_date": "2005-08-10",
+ "name": "Chaos",
+ "directed_by": [
+ "David DeFalco"
+ ],
+ "genre": [
+ "Horror",
+ "Teen film",
+ "B movie",
+ "Slasher"
+ ]
+ },
+ {
+ "id": "/en/chaos_and_creation_at_abbey_road",
+ "initial_release_date": "2006-01-27",
+ "name": "Chaos and Creation at Abbey Road",
+ "directed_by": [
+ "Simon Hilton"
+ ],
+ "genre": [
+ "Musical"
+ ]
+ },
+ {
+ "id": "/en/chaos_theory_2007",
+ "name": "Chaos Theory",
+ "directed_by": [
+ "Marcos Siega"
+ ],
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chapter_27",
+ "initial_release_date": "2007-01-25",
+ "name": "Chapter 27",
+ "directed_by": [
+ "Jarrett Schaefer"
+ ],
+ "genre": [
+ "Indie film",
+ "Crime Fiction",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/charlie_and_the_chocolate_factory_2005",
+ "initial_release_date": "2005-07-10",
+ "name": "Charlie and the Chocolate Factory",
+ "directed_by": [
+ "Tim Burton"
+ ],
+ "genre": [
+ "Fantasy",
+ "Remake",
+ "Adventure Film",
+ "Family",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/charlies_angels",
+ "initial_release_date": "2000-10-22",
+ "name": "Charlie's Angels",
+ "directed_by": [
+ "Joseph McGinty Nichol"
+ ],
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Comedy",
+ "Adventure Film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/charlies_angels_full_throttle",
+ "initial_release_date": "2003-06-18",
+ "name": "Charlie's Angels: Full Throttle",
+ "directed_by": [
+ "Joseph McGinty Nichol"
+ ],
+ "genre": [
+ "Martial Arts Film",
+ "Action Film",
+ "Adventure Film",
+ "Crime Fiction",
+ "Action/Adventure",
+ "Action Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/charlotte_gray",
+ "initial_release_date": "2001-12-17",
+ "name": "Charlotte Gray",
+ "directed_by": [
+ "Gillian Armstrong"
+ ],
+ "genre": [
+ "Romance Film",
+ "War film",
+ "Political drama",
+ "Historical period drama",
+ "Film adaptation",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/charlottes_web",
+ "initial_release_date": "2006-12-07",
+ "name": "Charlotte's Web",
+ "directed_by": [
+ "Gary Winick"
+ ],
+ "genre": [
+ "Animation",
+ "Family",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chasing_liberty",
+ "initial_release_date": "2004-01-07",
+ "name": "Chasing Liberty",
+ "directed_by": [
+ "Andy Cadiff"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Teen film",
+ "Romance Film",
+ "Road movie",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chasing_papi",
+ "initial_release_date": "2003-04-16",
+ "name": "Chasing Papi",
+ "directed_by": [
+ "Linda Mendoza"
+ ],
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Farce",
+ "Chase Movie",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chasing_sleep",
+ "initial_release_date": "2001-09-16",
+ "name": "Chasing Sleep",
+ "directed_by": [
+ "Michael Walker"
+ ],
+ "genre": [
+ "Mystery",
+ "Psychological thriller",
+ "Surrealism",
+ "Thriller",
+ "Indie film",
+ "Suspense",
+ "Crime Thriller"
+ ]
+ },
+ {
+ "id": "/en/chasing_the_horizon",
+ "initial_release_date": "2006-04-26",
+ "name": "Chasing the Horizon",
+ "directed_by": [
+ "Markus Canter",
+ "Mason Canter"
+ ],
+ "genre": [
+ "Documentary film",
+ "Auto racing"
+ ]
+ },
+ {
+ "id": "/en/chathikkatha_chanthu",
+ "initial_release_date": "2004-04-14",
+ "name": "Chathikkatha Chanthu",
+ "directed_by": [
+ "Meccartin"
+ ],
+ "genre": [
+ "Comedy",
+ "Malayalam Cinema",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chatrapati",
+ "initial_release_date": "2005-09-25",
+ "name": "Chhatrapati",
+ "directed_by": [
+ "S. S. Rajamouli"
+ ],
+ "genre": [
+ "Action Film",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cheaper_by_the_dozen_2003",
+ "initial_release_date": "2003-12-25",
+ "name": "Cheaper by the Dozen",
+ "directed_by": [
+ "Shawn Levy"
+ ],
+ "genre": [
+ "Family",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cheaper_by_the_dozen_2",
+ "initial_release_date": "2005-12-21",
+ "name": "Cheaper by the Dozen 2",
+ "directed_by": [
+ "Adam Shankman"
+ ],
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Domestic Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/checking_out_2005",
+ "initial_release_date": "2005-04-10",
+ "name": "Checking Out",
+ "directed_by": [
+ "Jeff Hare"
+ ],
+ "genre": [
+ "Black comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chellamae",
+ "initial_release_date": "2004-09-10",
+ "name": "Chellamae",
+ "directed_by": [
+ "Gandhi Krishna"
+ ],
+ "genre": [
+ "Romance Film",
+ "Tamil cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/chemman_chaalai",
+ "name": "Chemman Chaalai",
+ "directed_by": [
+ "Deepak Kumaran Menon"
+ ],
+ "genre": [
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chennaiyil_oru_mazhai_kaalam",
+ "name": "Chennaiyil Oru Mazhai Kaalam",
+ "directed_by": [
+ "Prabhu Deva"
+ ],
+ "genre": []
+ },
+ {
+ "id": "/en/cher_the_farewell_tour_live_in_miami",
+ "initial_release_date": "2003-08-26",
+ "name": "The Farewell Tour",
+ "directed_by": [
+ "Dorina Sanchez",
+ "David Mallet"
+ ],
+ "genre": [
+ "Music video"
+ ]
+ },
+ {
+ "id": "/en/cherry_falls",
+ "initial_release_date": "2000-07-29",
+ "name": "Cherry Falls",
+ "directed_by": [
+ "Geoffrey Wright"
+ ],
+ "genre": [
+ "Satire",
+ "Slasher",
+ "Indie film",
+ "Horror",
+ "Horror comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/wikipedia/en_title/Chess_$00282006_film$0029",
+ "initial_release_date": "2006-07-07",
+ "name": "Chess",
+ "directed_by": [
+ "RajBabu"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Thriller",
+ "Action Film",
+ "Comedy",
+ "Malayalam Cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/chica_de_rio",
+ "initial_release_date": "2003-04-11",
+ "name": "Girl from Rio",
+ "directed_by": [
+ "Christopher Monger"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chicago_2002",
+ "initial_release_date": "2002-12-10",
+ "name": "Chicago",
+ "directed_by": [
+ "Rob Marshall"
+ ],
+ "genre": [
+ "Musical",
+ "Crime Fiction",
+ "Comedy",
+ "Musical comedy"
+ ]
+ },
+ {
+ "id": "/en/chicken_little",
+ "initial_release_date": "2005-10-30",
+ "name": "Chicken Little",
+ "directed_by": [
+ "Mark Dindal"
+ ],
+ "genre": [
+ "Animation",
+ "Adventure Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chicken_run",
+ "initial_release_date": "2000-06-21",
+ "name": "Chicken Run",
+ "directed_by": [
+ "Peter Lord",
+ "Nick Park"
+ ],
+ "genre": [
+ "Family",
+ "Animation",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/child_marriage_2005",
+ "name": "Child Marriage",
+ "directed_by": [
+ "Neeraj Kumar"
+ ],
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/children_of_men",
+ "initial_release_date": "2006-09-03",
+ "name": "Children of Men",
+ "directed_by": [
+ "Alfonso Cuar\u00f3n"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Science Fiction",
+ "Dystopia",
+ "Doomsday film",
+ "Future noir",
+ "Mystery",
+ "Adventure Film",
+ "Film adaptation",
+ "Action Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/children_of_the_corn_revelation",
+ "initial_release_date": "2001-10-09",
+ "name": "Children of the Corn: Revelation",
+ "directed_by": [
+ "Guy Magar"
+ ],
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Cult film"
+ ]
+ },
+ {
+ "id": "/en/children_of_the_living_dead",
+ "name": "Children of the Living Dead",
+ "directed_by": [
+ "Tor Ramsey"
+ ],
+ "genre": [
+ "Indie film",
+ "Teen film",
+ "Horror",
+ "Zombie Film",
+ "Horror comedy"
+ ]
+ },
+ {
+ "id": "/en/chinthamani_kolacase",
+ "initial_release_date": "2006-03-31",
+ "name": "Chinthamani Kolacase",
+ "directed_by": [
+ "Shaji Kailas"
+ ],
+ "genre": [
+ "Horror",
+ "Mystery",
+ "Crime Fiction",
+ "Action Film",
+ "Thriller",
+ "Malayalam Cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/chips_2008",
+ "name": "CHiPs",
+ "directed_by": [],
+ "genre": [
+ "Musical",
+ "Children's/Family"
+ ]
+ },
+ {
+ "id": "/en/chithiram_pesuthadi",
+ "initial_release_date": "2006-02-10",
+ "name": "Chithiram Pesuthadi",
+ "directed_by": [
+ "Mysskin"
+ ],
+ "genre": [
+ "Romance Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chocolat_2000",
+ "initial_release_date": "2000-12-15",
+ "name": "Chocolat",
+ "directed_by": [
+ "Lasse Hallstr\u00f6m"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/choose_your_own_adventure_the_abominable_snowman",
+ "initial_release_date": "2006-07-25",
+ "name": "Choose Your Own Adventure The Abominable Snowman",
+ "directed_by": [
+ "Bob Doucette"
+ ],
+ "genre": [
+ "Adventure Film",
+ "Family",
+ "Children's/Family",
+ "Family-Oriented Adventure",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/chopin_desire_for_love",
+ "initial_release_date": "2002-03-01",
+ "name": "Chopin: Desire for Love",
+ "directed_by": [
+ "Jerzy Antczak"
+ ],
+ "genre": [
+ "Biographical film",
+ "Romance Film",
+ "Music",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chopper",
+ "initial_release_date": "2000-08-03",
+ "name": "Chopper",
+ "directed_by": [
+ "Andrew Dominik"
+ ],
+ "genre": [
+ "Biographical film",
+ "Crime Fiction",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chori_chori_2003",
+ "initial_release_date": "2003-08-01",
+ "name": "Chori Chori",
+ "directed_by": [
+ "Milan Luthria"
+ ],
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Romantic comedy",
+ "Musical comedy",
+ "Comedy",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/chori_chori_chupke_chupke",
+ "initial_release_date": "2001-03-09",
+ "name": "Chori Chori Chupke Chupke",
+ "directed_by": [
+ "Abbas Burmawalla",
+ "Mustan Burmawalla"
+ ],
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/christinas_house",
+ "initial_release_date": "2000-02-24",
+ "name": "Christina's House",
+ "directed_by": [
+ "Gavin Wilding"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Horror",
+ "Teen film",
+ "Slasher",
+ "Psychological thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/christmas_with_the_kranks",
+ "initial_release_date": "2004-11-24",
+ "name": "Christmas with the Kranks",
+ "directed_by": [
+ "Joe Roth"
+ ],
+ "genre": [
+ "Christmas movie",
+ "Family",
+ "Film adaptation",
+ "Slapstick",
+ "Holiday Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/chromophobia",
+ "initial_release_date": "2005-05-21",
+ "name": "Chromophobia",
+ "directed_by": [
+ "Martha Fiennes"
+ ],
+ "genre": [
+ "Family Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chubby_killer",
+ "name": "Chubby Killer",
+ "directed_by": [
+ "Reuben Rox"
+ ],
+ "genre": [
+ "Slasher",
+ "Indie film",
+ "Horror"
+ ]
+ },
+ {
+ "id": "/en/chukkallo_chandrudu",
+ "initial_release_date": "2006-01-14",
+ "name": "Chukkallo Chandrudu",
+ "directed_by": [
+ "Siva Kumar"
+ ],
+ "genre": [
+ "Comedy",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/chup_chup_ke",
+ "initial_release_date": "2006-06-09",
+ "name": "Chup Chup Ke",
+ "directed_by": [
+ "Priyadarshan",
+ "Kookie Gulati"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Comedy",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/church_ball",
+ "initial_release_date": "2006-03-17",
+ "name": "Church Ball",
+ "directed_by": [
+ "Kurt Hale"
+ ],
+ "genre": [
+ "Family",
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/churchill_the_hollywood_years",
+ "initial_release_date": "2004-12-03",
+ "name": "Churchill: The Hollywood Years",
+ "directed_by": [
+ "Peter Richardson"
+ ],
+ "genre": [
+ "Satire",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/cinderella_iii",
+ "initial_release_date": "2007-02-06",
+ "name": "Cinderella III: A Twist in Time",
+ "directed_by": [
+ "Frank Nissen"
+ ],
+ "genre": [
+ "Family",
+ "Animated cartoon",
+ "Fantasy",
+ "Romance Film",
+ "Animation",
+ "Children's/Family"
+ ]
+ },
+ {
+ "id": "/en/cinderella_man",
+ "initial_release_date": "2005-05-23",
+ "name": "Cinderella Man",
+ "directed_by": [
+ "Ron Howard"
+ ],
+ "genre": [
+ "Biographical film",
+ "Historical period drama",
+ "Romance Film",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cinemania",
+ "name": "Cinemania",
+ "directed_by": [
+ "Angela Christlieb",
+ "Stephen Kijak"
+ ],
+ "genre": [
+ "Documentary film",
+ "Culture &amp; Society"
+ ]
+ },
+ {
+ "id": "/en/city_of_ghosts",
+ "initial_release_date": "2003-03-27",
+ "name": "City of Ghosts",
+ "directed_by": [
+ "Matt Dillon"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/city_of_god",
+ "initial_release_date": "2002-05-18",
+ "name": "City of God",
+ "directed_by": [
+ "Fernando Meirelles"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/claustrophobia_2003",
+ "name": "Claustrophobia",
+ "directed_by": [
+ "Mark Tapio Kines"
+ ],
+ "genre": [
+ "Slasher",
+ "Horror"
+ ]
+ },
+ {
+ "id": "/en/clean",
+ "initial_release_date": "2004-03-27",
+ "name": "Clean",
+ "directed_by": [
+ "Olivier Assayas"
+ ],
+ "genre": [
+ "Music",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/clear_cut_the_story_of_philomath_oregon",
+ "initial_release_date": "2006-01-20",
+ "name": "Clear Cut: The Story of Philomath, Oregon",
+ "directed_by": [
+ "Peter Richardson"
+ ],
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/clerks_ii",
+ "initial_release_date": "2006-05-26",
+ "name": "Clerks II",
+ "directed_by": [
+ "Kevin Smith"
+ ],
+ "genre": [
+ "Buddy film",
+ "Workplace Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/click",
+ "initial_release_date": "2006-06-22",
+ "name": "Click",
+ "directed_by": [
+ "Frank Coraci"
+ ],
+ "genre": [
+ "Comedy",
+ "Fantasy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/clockstoppers",
+ "initial_release_date": "2002-03-29",
+ "name": "Clockstoppers",
+ "directed_by": [
+ "Jonathan Frakes"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Teen film",
+ "Family",
+ "Thriller",
+ "Adventure Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/closer_2004",
+ "initial_release_date": "2004-12-03",
+ "name": "Closer",
+ "directed_by": [
+ "Mike Nichols"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/closing_the_ring",
+ "initial_release_date": "2007-09-14",
+ "name": "Closing the Ring",
+ "directed_by": [
+ "Richard Attenborough"
+ ],
+ "genre": [
+ "War film",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/club_dread",
+ "initial_release_date": "2004-02-27",
+ "name": "Club Dread",
+ "directed_by": [
+ "Jay Chandrasekhar"
+ ],
+ "genre": [
+ "Parody",
+ "Horror",
+ "Slasher",
+ "Black comedy",
+ "Indie film",
+ "Horror comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/coach_carter",
+ "initial_release_date": "2005-01-13",
+ "name": "Coach Carter",
+ "directed_by": [
+ "Thomas Carter"
+ ],
+ "genre": [
+ "Coming of age",
+ "Sports",
+ "Docudrama",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/coast_guard_2002",
+ "initial_release_date": "2002-11-14",
+ "name": "The Coast Guard",
+ "directed_by": [
+ "Kim Ki-duk"
+ ],
+ "genre": [
+ "Action Film",
+ "War film",
+ "East Asian cinema",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/code_46",
+ "initial_release_date": "2004-05-07",
+ "name": "Code 46",
+ "directed_by": [
+ "Michael Winterbottom"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Thriller",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/codename_kids_next_door_operation_z_e_r_o",
+ "initial_release_date": "2006-01-13",
+ "name": "Codename: Kids Next Door: Operation Z.E.R.O.",
+ "directed_by": [
+ "Tom Warburton"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Animation",
+ "Adventure Film",
+ "Family",
+ "Comedy",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/coffee_and_cigarettes",
+ "initial_release_date": "2003-09-05",
+ "name": "Coffee and Cigarettes",
+ "directed_by": [
+ "Jim Jarmusch"
+ ],
+ "genre": [
+ "Music",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cold_creek_manor",
+ "initial_release_date": "2003-09-19",
+ "name": "Cold Creek Manor",
+ "directed_by": [
+ "Mike Figgis"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Psychological thriller",
+ "Crime Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cold_mountain",
+ "initial_release_date": "2003-12-25",
+ "name": "Cold Mountain",
+ "directed_by": [
+ "Anthony Minghella"
+ ],
+ "genre": [
+ "War film",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/cold_showers",
+ "initial_release_date": "2005-05-22",
+ "name": "Cold Showers",
+ "directed_by": [
+ "Antony Cordier"
+ ],
+ "genre": [
+ "Coming of age",
+ "LGBT",
+ "World cinema",
+ "Gay Themed",
+ "Teen film",
+ "Erotic Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/collateral",
+ "initial_release_date": "2004-08-05",
+ "name": "Collateral",
+ "directed_by": [
+ "Michael Mann"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Film noir",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/collateral_damage_2002",
+ "initial_release_date": "2002-02-04",
+ "name": "Collateral Damage",
+ "directed_by": [
+ "Andrew Davis"
+ ],
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/comedian_2002",
+ "initial_release_date": "2002-10-11",
+ "name": "Comedian",
+ "directed_by": [
+ "Christian Charles"
+ ],
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "Stand-up comedy",
+ "Comedy",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/coming_out_2006",
+ "name": "Coming Out",
+ "directed_by": [
+ "Joel Zwick"
+ ],
+ "genre": [
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/commitments",
+ "initial_release_date": "2001-05-04",
+ "name": "Commitments",
+ "directed_by": [
+ "Carol Mayes"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/common_ground_2000",
+ "initial_release_date": "2000-01-29",
+ "name": "Common Ground",
+ "directed_by": [
+ "Donna Deitch"
+ ],
+ "genre": [
+ "LGBT",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/company_2002",
+ "initial_release_date": "2002-04-15",
+ "name": "Company",
+ "directed_by": [
+ "Ram Gopal Varma"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/confessions_of_a_dangerous_mind",
+ "name": "Confessions of a Dangerous Mind",
+ "directed_by": [
+ "George Clooney"
+ ],
+ "genre": [
+ "Biographical film",
+ "Thriller",
+ "Crime Fiction",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/confessions_of_a_teenage_drama_queen",
+ "initial_release_date": "2004-02-17",
+ "genre": [
+ "Family",
+ "Teen film",
+ "Musical comedy",
+ "Romantic comedy"
+ ],
+ "directed_by": [
+ "Sara Sugarman"
+ ],
+ "name": "Confessions of a Teenage Drama Queen"
+ },
+ {
+ "id": "/en/confetti_2006",
+ "initial_release_date": "2006-05-05",
+ "genre": [
+ "Mockumentary",
+ "Romantic comedy",
+ "Romance Film",
+ "Parody",
+ "Music",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Debbie Isitt"
+ ],
+ "name": "Confetti"
+ },
+ {
+ "id": "/en/confidence_2004",
+ "initial_release_date": "2003-01-20",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "James Foley"
+ ],
+ "name": "Confidence"
+ },
+ {
+ "id": "/en/connie_and_carla",
+ "initial_release_date": "2004-04-16",
+ "genre": [
+ "LGBT",
+ "Buddy film",
+ "Comedy of Errors",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Michael Lembeck"
+ ],
+ "name": "Connie and Carla"
+ },
+ {
+ "id": "/en/conspiracy_2001",
+ "initial_release_date": "2001-05-19",
+ "genre": [
+ "History",
+ "War film",
+ "Political drama",
+ "Historical period drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Frank Pierson"
+ ],
+ "name": "Conspiracy"
+ },
+ {
+ "id": "/en/constantine_2005",
+ "initial_release_date": "2005-02-08",
+ "genre": [
+ "Horror",
+ "Fantasy",
+ "Action Film"
+ ],
+ "directed_by": [
+ "Francis Lawrence"
+ ],
+ "name": "Constantine"
+ },
+ {
+ "id": "/en/control_room",
+ "genre": [
+ "Documentary film",
+ "Political cinema",
+ "Culture &amp; Society",
+ "War film",
+ "Journalism",
+ "Media studies"
+ ],
+ "directed_by": [
+ "Jehane Noujaim"
+ ],
+ "name": "Control Room"
+ },
+ {
+ "id": "/en/control_the_ian_curtis_film",
+ "initial_release_date": "2007-05-17",
+ "genre": [
+ "Biographical film",
+ "Indie film",
+ "Musical",
+ "Japanese Movies",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Anton Corbijn"
+ ],
+ "name": "Control"
+ },
+ {
+ "id": "/en/cope_2005",
+ "initial_release_date": "2007-01-23",
+ "genre": [
+ "Horror",
+ "B movie"
+ ],
+ "directed_by": [
+ "Ronald Jackson",
+ "Ronald Jerry"
+ ],
+ "name": "Cope"
+ },
+ {
+ "id": "/en/copying_beethoven",
+ "initial_release_date": "2006-07-30",
+ "genre": [
+ "Biographical film",
+ "Music",
+ "Historical fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Agnieszka Holland"
+ ],
+ "name": "Copying Beethoven"
+ },
+ {
+ "id": "/en/corporate",
+ "initial_release_date": "2006-07-07",
+ "genre": [
+ "Drama"
+ ],
+ "directed_by": [
+ "Madhur Bhandarkar"
+ ],
+ "name": "Corporate"
+ },
+ {
+ "id": "/en/corpse_bride",
+ "initial_release_date": "2005-09-07",
+ "genre": [
+ "Fantasy",
+ "Animation",
+ "Musical",
+ "Romance Film"
+ ],
+ "directed_by": [
+ "Tim Burton",
+ "Mike Johnson"
+ ],
+ "name": "Corpse Bride"
+ },
+ {
+ "id": "/en/covert_one_the_hades_factor",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Mick Jackson"
+ ],
+ "name": "Covert One: The Hades Factor"
+ },
+ {
+ "id": "/en/cow_belles",
+ "initial_release_date": "2006-03-24",
+ "genre": [
+ "Family",
+ "Television film",
+ "Teen film",
+ "Romantic comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Francine McDougall"
+ ],
+ "name": "Cow Belles"
+ },
+ {
+ "id": "/en/cowards_bend_the_knee",
+ "initial_release_date": "2003-02-26",
+ "genre": [
+ "Silent film",
+ "Indie film",
+ "Surrealism",
+ "Romance Film",
+ "Experimental film",
+ "Crime Fiction",
+ "Avant-garde",
+ "Drama"
+ ],
+ "directed_by": [
+ "Guy Maddin"
+ ],
+ "name": "Cowards Bend the Knee"
+ },
+ {
+ "id": "/en/cowboy_bebop_the_movie",
+ "initial_release_date": "2001-09-01",
+ "genre": [
+ "Anime",
+ "Science Fiction",
+ "Action Film",
+ "Animation",
+ "Comedy",
+ "Crime Fiction"
+ ],
+ "directed_by": [
+ "Shinichir\u014d Watanabe"
+ ],
+ "name": "Cowboy Bebop: The Movie"
+ },
+ {
+ "id": "/en/coyote_ugly",
+ "initial_release_date": "2000-07-31",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Comedy",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "David McNally"
+ ],
+ "name": "Coyote Ugly"
+ },
+ {
+ "id": "/en/crackerjack_2002",
+ "initial_release_date": "2002-11-07",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Paul Moloney"
+ ],
+ "name": "Crackerjack"
+ },
+ {
+ "id": "/en/cradle_2_the_grave",
+ "initial_release_date": "2003-02-28",
+ "genre": [
+ "Martial Arts Film",
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Buddy film",
+ "Action Thriller",
+ "Adventure Film",
+ "Crime"
+ ],
+ "directed_by": [
+ "Andrzej Bartkowiak"
+ ],
+ "name": "Cradle 2 the Grave"
+ },
+ {
+ "id": "/en/cradle_of_fear",
+ "genre": [
+ "Horror",
+ "B movie",
+ "Slasher"
+ ],
+ "directed_by": [
+ "Alex Chandon"
+ ],
+ "name": "Cradle of Fear"
+ },
+ {
+ "id": "/en/crank",
+ "initial_release_date": "2006-08-31",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Action/Adventure",
+ "Crime Thriller",
+ "Crime Fiction",
+ "Action Thriller"
+ ],
+ "directed_by": [
+ "Neveldine/Taylor"
+ ],
+ "name": "Crank"
+ },
+ {
+ "id": "/en/crash_2004",
+ "initial_release_date": "2004-09-10",
+ "genre": [
+ "Crime Fiction",
+ "Indie film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Paul Haggis"
+ ],
+ "name": "Crash"
+ },
+ {
+ "id": "/en/crazy_beautiful",
+ "initial_release_date": "2001-06-28",
+ "genre": [
+ "Teen film",
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "John Stockwell"
+ ],
+ "name": "Crazy/Beautiful"
+ },
+ {
+ "id": "/en/creep_2005",
+ "initial_release_date": "2004-08-10",
+ "genre": [
+ "Horror",
+ "Mystery",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Christopher Smith"
+ ],
+ "name": "Creep"
+ },
+ {
+ "id": "/en/criminal",
+ "initial_release_date": "2004-09-10",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Indie film",
+ "Crime Thriller",
+ "Heist film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Gregory Jacobs"
+ ],
+ "name": "Criminal"
+ },
+ {
+ "id": "/en/crimson_gold",
+ "genre": [
+ "World cinema",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jafar Panahi"
+ ],
+ "name": "Crimson Gold"
+ },
+ {
+ "id": "/en/crimson_rivers_ii_angels_of_the_apocalypse",
+ "initial_release_date": "2004-02-18",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Crime Fiction"
+ ],
+ "directed_by": [
+ "Olivier Dahan"
+ ],
+ "name": "Crimson Rivers II: Angels of the Apocalypse"
+ },
+ {
+ "id": "/en/crocodile_2000",
+ "initial_release_date": "2000-12-26",
+ "genre": [
+ "Horror",
+ "Natural horror film",
+ "Teen film",
+ "Thriller",
+ "Action Film",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Tobe Hooper"
+ ],
+ "name": "Crocodile"
+ },
+ {
+ "id": "/en/crocodile_2_death_swamp",
+ "initial_release_date": "2002-08-01",
+ "genre": [
+ "Horror",
+ "Natural horror film",
+ "B movie",
+ "Action/Adventure",
+ "Action Film",
+ "Thriller",
+ "Adventure Film",
+ "Action Thriller",
+ "Creature Film"
+ ],
+ "directed_by": [
+ "Gary Jones"
+ ],
+ "name": "Crocodile 2: Death Swamp"
+ },
+ {
+ "id": "/en/crocodile_dundee_in_los_angeles",
+ "initial_release_date": "2001-04-12",
+ "genre": [
+ "Action Film",
+ "Adventure Film",
+ "Action/Adventure",
+ "World cinema",
+ "Action Comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Simon Wincer"
+ ],
+ "name": "Crocodile Dundee in Los Angeles"
+ },
+ {
+ "id": "/en/crossing_the_bridge_the_sound_of_istanbul",
+ "initial_release_date": "2005-06-09",
+ "genre": [
+ "Musical",
+ "Documentary film",
+ "Music",
+ "Culture &amp; Society"
+ ],
+ "directed_by": [
+ "Fatih Ak\u0131n"
+ ],
+ "name": "Crossing the Bridge: The Sound of Istanbul"
+ },
+ {
+ "id": "/en/crossover_2006",
+ "initial_release_date": "2006-09-01",
+ "genre": [
+ "Action Film",
+ "Coming of age",
+ "Teen film",
+ "Sports",
+ "Short Film",
+ "Fantasy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Preston A. Whitmore II"
+ ],
+ "name": "Crossover"
+ },
+ {
+ "id": "/en/crossroads_2002",
+ "initial_release_date": "2002-02-11",
+ "genre": [
+ "Coming of age",
+ "Teen film",
+ "Musical",
+ "Romance Film",
+ "Romantic comedy",
+ "Adventure Film",
+ "Comedy-drama",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Tamra Davis"
+ ],
+ "name": "Crossroads"
+ },
+ {
+ "id": "/en/crouching_tiger_hidden_dragon",
+ "initial_release_date": "2000-05-16",
+ "genre": [
+ "Romance Film",
+ "Action Film",
+ "Martial Arts Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ang Lee"
+ ],
+ "name": "Crouching Tiger, Hidden Dragon"
+ },
+ {
+ "id": "/en/cruel_intentions_3",
+ "initial_release_date": "2004-05-25",
+ "genre": [
+ "Erotica",
+ "Thriller",
+ "Teen film",
+ "Psychological thriller",
+ "Romance Film",
+ "Erotic thriller",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Scott Ziehl"
+ ],
+ "name": "Cruel Intentions 3"
+ },
+ {
+ "id": "/en/crustaces_et_coquillages",
+ "initial_release_date": "2005-02-12",
+ "genre": [
+ "Musical",
+ "Romantic comedy",
+ "LGBT",
+ "Romance Film",
+ "World cinema",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jacques Martineau",
+ "Olivier Ducastel"
+ ],
+ "name": "Crustac\u00e9s et Coquillages"
+ },
+ {
+ "id": "/en/cry_wolf",
+ "initial_release_date": "2005-09-16",
+ "genre": [
+ "Slasher",
+ "Horror",
+ "Mystery",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jeff Wadlow"
+ ],
+ "name": "Cry_Wolf"
+ },
+ {
+ "id": "/en/cube_2_hypercube",
+ "initial_release_date": "2002-04-15",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Psychological thriller",
+ "Thriller",
+ "Escape Film"
+ ],
+ "directed_by": [
+ "Andrzej Seku\u0142a"
+ ],
+ "name": "Cube 2: Hypercube"
+ },
+ {
+ "id": "/en/curious_george_2006",
+ "initial_release_date": "2006-02-10",
+ "genre": [
+ "Animation",
+ "Adventure Film",
+ "Family",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Matthew O'Callaghan"
+ ],
+ "name": "Curious George"
+ },
+ {
+ "id": "/en/curse_of_the_golden_flower",
+ "initial_release_date": "2006-12-21",
+ "genre": [
+ "Romance Film",
+ "Action Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Zhang Yimou"
+ ],
+ "name": "Curse of the Golden Flower"
+ },
+ {
+ "id": "/en/cursed",
+ "initial_release_date": "2004-11-07",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Wes Craven"
+ ],
+ "name": "Cursed"
+ },
+ {
+ "id": "/en/d-tox",
+ "initial_release_date": "2002-01-04",
+ "genre": [
+ "Thriller",
+ "Crime Thriller",
+ "Horror",
+ "Mystery"
+ ],
+ "directed_by": [
+ "Jim Gillespie"
+ ],
+ "name": "D-Tox"
+ },
+ {
+ "id": "/en/daddy",
+ "initial_release_date": "2001-10-04",
+ "genre": [
+ "Family",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Suresh Krissna"
+ ],
+ "name": "Daddy"
+ },
+ {
+ "id": "/en/daddy_day_care",
+ "initial_release_date": "2003-05-04",
+ "genre": [
+ "Family",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Steve Carr"
+ ],
+ "name": "Daddy Day Care"
+ },
+ {
+ "id": "/en/daddy_long-legs",
+ "initial_release_date": "2005-01-13",
+ "genre": [
+ "Romantic comedy",
+ "East Asian cinema",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Gong Jeong-shik"
+ ],
+ "name": "Daddy-Long-Legs"
+ },
+ {
+ "id": "/en/dahmer_2002",
+ "initial_release_date": "2002-06-21",
+ "genre": [
+ "Thriller",
+ "Biographical film",
+ "LGBT",
+ "Crime Fiction",
+ "Indie film",
+ "Mystery",
+ "Cult film",
+ "Horror",
+ "Slasher",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Jacobson"
+ ],
+ "name": "Dahmer"
+ },
+ {
+ "id": "/en/daisy_2006",
+ "initial_release_date": "2006-03-09",
+ "genre": [
+ "Chinese Movies",
+ "Romance Film",
+ "Melodrama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Andrew Lau"
+ ],
+ "name": "Daisy"
+ },
+ {
+ "id": "/en/daivanamathil",
+ "genre": [
+ "Drama",
+ "Malayalam Cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Jayaraj"
+ ],
+ "name": "Daivanamathil"
+ },
+ {
+ "id": "/en/daltry_calhoun",
+ "initial_release_date": "2005-09-25",
+ "genre": [
+ "Black comedy",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Katrina Holden Bronson"
+ ],
+ "name": "Daltry Calhoun"
+ },
+ {
+ "id": "/en/dan_in_real_life",
+ "initial_release_date": "2007-10-26",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy-drama",
+ "Domestic Comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Peter Hedges"
+ ],
+ "name": "Dan in Real Life"
+ },
+ {
+ "id": "/en/dancer_in_the_dark",
+ "initial_release_date": "2000-05-17",
+ "genre": [
+ "Musical",
+ "Crime Fiction",
+ "Melodrama",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Lars von Trier"
+ ],
+ "name": "Dancer in the Dark"
+ },
+ {
+ "id": "/en/daniel_amos_live_in_anaheim_1985",
+ "genre": [
+ "Music video"
+ ],
+ "directed_by": [
+ "Dave Perry"
+ ],
+ "name": "Daniel Amos Live in Anaheim 1985"
+ },
+ {
+ "id": "/en/danny_deckchair",
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "World cinema",
+ "Fantasy Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jeff Balsmeyer"
+ ],
+ "name": "Danny Deckchair"
+ },
+ {
+ "id": "/en/daredevil_2003",
+ "initial_release_date": "2003-02-09",
+ "genre": [
+ "Action Film",
+ "Fantasy",
+ "Thriller",
+ "Crime Fiction",
+ "Superhero movie"
+ ],
+ "directed_by": [
+ "Mark Steven Johnson"
+ ],
+ "name": "Daredevil"
+ },
+ {
+ "id": "/en/dark_blue",
+ "initial_release_date": "2002-12-14",
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Historical period drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ron Shelton"
+ ],
+ "name": "Dark Blue"
+ },
+ {
+ "id": "/en/dark_harvest",
+ "genre": [
+ "Horror",
+ "Slasher"
+ ],
+ "directed_by": [
+ "Paul Moore, Jr."
+ ],
+ "name": "Dark Harvest"
+ },
+ {
+ "id": "/en/dark_water",
+ "initial_release_date": "2005-06-27",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Drama"
+ ],
+ "directed_by": [
+ "Walter Salles"
+ ],
+ "name": "Dark Water"
+ },
+ {
+ "id": "/en/dark_water_2002",
+ "initial_release_date": "2002-01-19",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Mystery",
+ "Drama"
+ ],
+ "directed_by": [
+ "Hideo Nakata"
+ ],
+ "name": "Dark Water"
+ },
+ {
+ "id": "/en/darkness_2002",
+ "initial_release_date": "2002-10-03",
+ "genre": [
+ "Horror"
+ ],
+ "directed_by": [
+ "Jaume Balaguer\u00f3"
+ ],
+ "name": "Darkness"
+ },
+ {
+ "id": "/en/darna_mana_hai",
+ "initial_release_date": "2003-07-25",
+ "genre": [
+ "Horror",
+ "Adventure Film",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Prawaal Raman"
+ ],
+ "name": "Darna Mana Hai"
+ },
+ {
+ "id": "/en/darna_zaroori_hai",
+ "initial_release_date": "2006-04-28",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Comedy",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Ram Gopal Varma",
+ "Jijy Philip",
+ "Prawaal Raman",
+ "Vivek Shah",
+ "J. D. Chakravarthy",
+ "Sajid Khan",
+ "Manish Gupta"
+ ],
+ "name": "Darna Zaroori Hai"
+ },
+ {
+ "id": "/en/darth_vaders_psychic_hotline",
+ "initial_release_date": "2002-04-16",
+ "genre": [
+ "Indie film",
+ "Short Film",
+ "Fan film"
+ ],
+ "directed_by": [
+ "John E. Hudgens"
+ ],
+ "name": "Darth Vader's Psychic Hotline"
+ },
+ {
+ "id": "/en/darwins_nightmare",
+ "initial_release_date": "2004-09-01",
+ "genre": [
+ "Documentary film",
+ "Political cinema",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Hubert Sauper"
+ ],
+ "name": "Darwin's Nightmare"
+ },
+ {
+ "id": "/en/das_experiment",
+ "initial_release_date": "2010-07-15",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Paul Scheuring"
+ ],
+ "name": "The Experiment"
+ },
+ {
+ "id": "/en/dasavatharam",
+ "initial_release_date": "2008-06-12",
+ "genre": [
+ "Science Fiction",
+ "Disaster Film",
+ "Tamil cinema"
+ ],
+ "directed_by": [
+ "K. S. Ravikumar"
+ ],
+ "name": "Dasavathaaram"
+ },
+ {
+ "id": "/en/date_movie",
+ "initial_release_date": "2006-02-17",
+ "genre": [
+ "Romantic comedy",
+ "Parody",
+ "Romance Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Aaron Seltzer",
+ "Jason Friedberg"
+ ],
+ "name": "Date Movie"
+ },
+ {
+ "id": "/en/dave_attells_insomniac_tour",
+ "initial_release_date": "2006-04-11",
+ "genre": [
+ "Stand-up comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Joel Gallen"
+ ],
+ "name": "Dave Attell's Insomniac Tour"
+ },
+ {
+ "id": "/en/dave_chappelles_block_party",
+ "initial_release_date": "2006-03-03",
+ "genre": [
+ "Documentary film",
+ "Music",
+ "Concert film",
+ "Hip hop film",
+ "Stand-up comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Michel Gondry"
+ ],
+ "name": "Dave Chappelle's Block Party"
+ },
+ {
+ "id": "/en/david_layla",
+ "initial_release_date": "2005-10-21",
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jay Jonroy"
+ ],
+ "name": "David &amp; Layla"
+ },
+ {
+ "id": "/en/david_gilmour_in_concert",
+ "genre": [
+ "Music video",
+ "Concert film"
+ ],
+ "directed_by": [
+ "David Mallet"
+ ],
+ "name": "David Gilmour in Concert"
+ },
+ {
+ "id": "/en/dawn_of_the_dead_2004",
+ "initial_release_date": "2004-03-10",
+ "genre": [
+ "Horror",
+ "Action Film",
+ "Thriller",
+ "Science Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Zack Snyder"
+ ],
+ "name": "Dawn of the Dead"
+ },
+ {
+ "id": "/en/day_of_the_dead_2007",
+ "initial_release_date": "2008-04-08",
+ "genre": [
+ "Splatter film",
+ "Doomsday film",
+ "Horror",
+ "Thriller",
+ "Cult film",
+ "Zombie Film"
+ ],
+ "directed_by": [
+ "Steve Miner"
+ ],
+ "name": "Day of the Dead"
+ },
+ {
+ "id": "/en/day_of_the_dead_2_contagium",
+ "initial_release_date": "2005-10-18",
+ "genre": [
+ "Horror",
+ "Zombie Film"
+ ],
+ "directed_by": [
+ "Ana Clavell",
+ "James Glenn Dudelson"
+ ],
+ "name": "Day of the Dead 2: Contagium"
+ },
+ {
+ "id": "/en/day_watch",
+ "initial_release_date": "2006-01-01",
+ "genre": [
+ "Thriller",
+ "Fantasy",
+ "Action Film"
+ ],
+ "directed_by": [
+ "Timur Bekmambetov"
+ ],
+ "name": "Day Watch"
+ },
+ {
+ "id": "/en/day_zero",
+ "initial_release_date": "2007-11-02",
+ "genre": [
+ "Indie film",
+ "Political drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Bryan Gunnar Cole"
+ ],
+ "name": "Day Zero"
+ },
+ {
+ "id": "/en/de-lovely",
+ "initial_release_date": "2004-05-22",
+ "genre": [
+ "Musical",
+ "Biographical film",
+ "Musical Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Irwin Winkler"
+ ],
+ "name": "De-Lovely"
+ },
+ {
+ "id": "/en/dead_breakfast",
+ "initial_release_date": "2004-03-19",
+ "genre": [
+ "Horror",
+ "Black comedy",
+ "Creature Film",
+ "Zombie Film",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Matthew Leutwyler"
+ ],
+ "name": "Dead &amp; Breakfast"
+ },
+ {
+ "id": "/en/dead_birds_2005",
+ "initial_release_date": "2005-03-15",
+ "genre": [
+ "Horror"
+ ],
+ "directed_by": [
+ "Alex Turner"
+ ],
+ "name": "Dead Birds"
+ },
+ {
+ "id": "/en/dead_end_2003",
+ "initial_release_date": "2003-01-30",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Mystery",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jean-Baptiste Andrea",
+ "Fabrice Canepa"
+ ],
+ "name": "Dead End"
+ },
+ {
+ "id": "/en/dead_friend",
+ "initial_release_date": "2004-06-18",
+ "genre": [
+ "Horror",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Kim Tae-kyeong"
+ ],
+ "name": "Dead Friend"
+ },
+ {
+ "id": "/en/dead_mans_shoes",
+ "initial_release_date": "2004-10-01",
+ "genre": [
+ "Psychological thriller",
+ "Crime Fiction",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Shane Meadows"
+ ],
+ "name": "Dead Man's Shoes"
+ },
+ {
+ "id": "/en/dear_frankie",
+ "initial_release_date": "2004-05-04",
+ "genre": [
+ "Indie film",
+ "Drama",
+ "Romance Film"
+ ],
+ "directed_by": [
+ "Shona Auerbach"
+ ],
+ "name": "Dear Frankie"
+ },
+ {
+ "id": "/en/dear_wendy",
+ "initial_release_date": "2004-05-16",
+ "genre": [
+ "Indie film",
+ "Crime Fiction",
+ "Melodrama",
+ "Comedy",
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Thomas Vinterberg"
+ ],
+ "name": "Dear Wendy"
+ },
+ {
+ "id": "/en/death_in_gaza",
+ "initial_release_date": "2004-02-11",
+ "genre": [
+ "Documentary film",
+ "War film",
+ "Children's Issues",
+ "Culture &amp; Society",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "James Miller"
+ ],
+ "name": "Death in Gaza"
+ },
+ {
+ "id": "/en/death_to_smoochy",
+ "initial_release_date": "2002-03-29",
+ "genre": [
+ "Comedy",
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Danny DeVito"
+ ],
+ "name": "Death to Smoochy"
+ },
+ {
+ "id": "/en/death_trance",
+ "initial_release_date": "2005-05-12",
+ "genre": [
+ "Action Film",
+ "Fantasy",
+ "Martial Arts Film",
+ "Thriller",
+ "Action/Adventure",
+ "World cinema",
+ "Action Thriller",
+ "Japanese Movies"
+ ],
+ "directed_by": [
+ "Yuji Shimomura"
+ ],
+ "name": "Death Trance"
+ },
+ {
+ "id": "/en/death_walks_the_streets",
+ "initial_release_date": "2008-06-26",
+ "genre": [
+ "Indie film",
+ "Horror",
+ "Crime Fiction"
+ ],
+ "directed_by": [
+ "James Zahn"
+ ],
+ "name": "Death Walks the Streets"
+ },
+ {
+ "id": "/en/deathwatch",
+ "initial_release_date": "2002-10-06",
+ "genre": [
+ "Horror",
+ "War film",
+ "Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Michael J. Bassett"
+ ],
+ "name": "Deathwatch"
+ },
+ {
+ "id": "/en/december_boys",
+ "genre": [
+ "Coming of age",
+ "Film adaptation",
+ "Indie film",
+ "Historical period drama",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Rod Hardy"
+ ],
+ "name": "December Boys"
+ },
+ {
+ "id": "/en/decoys",
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Thriller",
+ "Alien Film",
+ "Horror comedy"
+ ],
+ "directed_by": [
+ "Matthew Hastings"
+ ],
+ "name": "Decoys"
+ },
+ {
+ "id": "/en/deepavali",
+ "initial_release_date": "2007-02-09",
+ "genre": [
+ "Romance Film",
+ "Tamil cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Ezhil"
+ ],
+ "name": "Deepavali"
+ },
+ {
+ "id": "/en/deewane_huye_pagal",
+ "initial_release_date": "2005-11-25",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ],
+ "directed_by": [
+ "Vikram Bhatt"
+ ],
+ "name": "Deewane Huye Paagal"
+ },
+ {
+ "id": "/wikipedia/ja_id/980449",
+ "initial_release_date": "2006-11-20",
+ "genre": [
+ "Thriller",
+ "Science Fiction",
+ "Time travel",
+ "Action Film",
+ "Mystery",
+ "Crime Thriller",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Tony Scott"
+ ],
+ "name": "D\u00e9j\u00e0 Vu"
+ },
+ {
+ "id": "/en/democrazy_2005",
+ "genre": [
+ "Parody",
+ "Action/Adventure",
+ "Action Film",
+ "Indie film",
+ "Superhero movie",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Michael Legge"
+ ],
+ "name": "Democrazy"
+ },
+ {
+ "id": "/en/demonium",
+ "initial_release_date": "2001-08-25",
+ "genre": [
+ "Horror",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Andreas Schnaas"
+ ],
+ "name": "Demonium"
+ },
+ {
+ "id": "/en/der_schuh_des_manitu",
+ "initial_release_date": "2001-07-13",
+ "genre": [
+ "Western",
+ "Comedy",
+ "Parody"
+ ],
+ "directed_by": [
+ "Michael Herbig"
+ ],
+ "name": "Der Schuh des Manitu"
+ },
+ {
+ "id": "/en/der_tunnel",
+ "initial_release_date": "2001-01-21",
+ "genre": [
+ "World cinema",
+ "Thriller",
+ "Political drama",
+ "Political thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Roland Suso Richter"
+ ],
+ "name": "The Tunnel"
+ },
+ {
+ "id": "/en/derailed",
+ "initial_release_date": "2005-11-11",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Crime Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mikael H\u00e5fstr\u00f6m"
+ ],
+ "name": "Derailed"
+ },
+ {
+ "id": "/en/derailed_2002",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Martial Arts Film",
+ "Disaster Film",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Bob Misiorowski"
+ ],
+ "name": "Derailed"
+ },
+ {
+ "id": "/en/destinys_child_live_in_atlana",
+ "initial_release_date": "2006-03-27",
+ "genre": [
+ "Music",
+ "Documentary film"
+ ],
+ "directed_by": [
+ "Julia Knowles"
+ ],
+ "name": "Destiny's Child: Live In Atlana"
+ },
+ {
+ "id": "/en/deuce_bigalow_european_gigolo",
+ "initial_release_date": "2005-08-06",
+ "name": "Deuce Bigalow: European Gigolo",
+ "directed_by": [
+ "Mike Bigelow"
+ ],
+ "genre": [
+ "Sex comedy",
+ "Slapstick",
+ "Gross out",
+ "Gross-out film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dev",
+ "initial_release_date": "2004-06-11",
+ "name": "Dev",
+ "directed_by": [
+ "Govind Nihalani"
+ ],
+ "genre": [
+ "Drama",
+ "Bollywood"
+ ]
+ },
+ {
+ "id": "/en/devadasu",
+ "initial_release_date": "2006-01-11",
+ "name": "Devadasu",
+ "directed_by": [
+ "YVS Chowdary",
+ "Gopireddy Mallikarjuna Reddy"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/devdas_2002",
+ "initial_release_date": "2002-05-23",
+ "name": "Devdas",
+ "directed_by": [
+ "Sanjay Leela Bhansali"
+ ],
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Drama",
+ "Bollywood",
+ "World cinema",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/devils_playground_2003",
+ "initial_release_date": "2003-02-04",
+ "name": "Devil's Playground",
+ "directed_by": [
+ "Lucy Walker"
+ ],
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/the_devils_pond",
+ "initial_release_date": "2003-10-21",
+ "name": "Devil's Pond",
+ "directed_by": [
+ "Joel Viertel"
+ ],
+ "genre": [
+ "Thriller",
+ "Suspense"
+ ]
+ },
+ {
+ "id": "/en/dhadkan",
+ "initial_release_date": "2000-08-11",
+ "name": "Dhadkan",
+ "directed_by": [
+ "Dharmesh Darshan"
+ ],
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Melodrama",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/dhool",
+ "initial_release_date": "2003-01-10",
+ "name": "Dhool",
+ "directed_by": [
+ "Dharani"
+ ],
+ "genre": [
+ "Musical",
+ "Family",
+ "Action Film",
+ "Tamil cinema",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/dhoom_2",
+ "initial_release_date": "2006-11-23",
+ "name": "Dhoom 2",
+ "directed_by": [
+ "Sanjay Gadhvi"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Action/Adventure",
+ "Musical",
+ "World cinema",
+ "Buddy cop film",
+ "Action Film",
+ "Thriller",
+ "Action Thriller",
+ "Musical comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dhyaas_parva",
+ "name": "Dhyaas Parva",
+ "directed_by": [
+ "Amol Palekar"
+ ],
+ "genre": [
+ "Biographical film",
+ "Drama",
+ "Marathi cinema"
+ ]
+ },
+ {
+ "id": "/en/diary_of_a_housewife",
+ "name": "Diary of a Housewife",
+ "directed_by": [
+ "Vinod Sukumaran"
+ ],
+ "genre": [
+ "Short Film",
+ "Malayalam Cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/diary_of_a_mad_black_woman",
+ "initial_release_date": "2005-02-25",
+ "name": "Diary of a Mad Black Woman",
+ "directed_by": [
+ "Darren Grant"
+ ],
+ "genre": [
+ "Comedy-drama",
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dickie_roberts_former_child_star",
+ "initial_release_date": "2003-09-03",
+ "name": "Dickie Roberts: Former Child Star",
+ "directed_by": [
+ "Sam Weisman"
+ ],
+ "genre": [
+ "Parody",
+ "Slapstick",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/die_bad",
+ "initial_release_date": "2000-07-15",
+ "name": "Die Bad",
+ "directed_by": [
+ "Ryoo Seung-wan"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/die_mommie_die",
+ "initial_release_date": "2003-01-20",
+ "name": "Die Mommie Die!",
+ "directed_by": [
+ "Mark Rucker"
+ ],
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dieu_est_grand_je_suis_toute_petite",
+ "initial_release_date": "2001-09-26",
+ "name": "God Is Great and I'm Not",
+ "directed_by": [
+ "Pascale Bailly"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "World cinema",
+ "Religious Film",
+ "Romance Film",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/digimon_the_movie",
+ "initial_release_date": "2000-03-17",
+ "name": "Digimon: The Movie",
+ "directed_by": [
+ "Mamoru Hosoda",
+ "Shigeyasu Yamauchi"
+ ],
+ "genre": [
+ "Anime",
+ "Fantasy",
+ "Family",
+ "Animation",
+ "Adventure Film",
+ "Action Film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/digital_monster_x-evolution",
+ "initial_release_date": "2005-01-03",
+ "name": "Digital Monster X-Evolution",
+ "directed_by": [
+ "Hiroyuki Kakud\u014d"
+ ],
+ "genre": [
+ "Computer Animation",
+ "Animation",
+ "Japanese Movies"
+ ]
+ },
+ {
+ "id": "/en/digna_hasta_el_ultimo_aliento",
+ "initial_release_date": "2004-12-17",
+ "name": "Digna... hasta el \u00faltimo aliento",
+ "directed_by": [
+ "Felipe Cazals"
+ ],
+ "genre": [
+ "Documentary film",
+ "Culture &amp; Society",
+ "Law &amp; Crime",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/dil_chahta_hai",
+ "initial_release_date": "2001-07-24",
+ "name": "Dil Chahta Hai",
+ "directed_by": [
+ "Farhan Akhtar"
+ ],
+ "genre": [
+ "Bollywood",
+ "Musical",
+ "Romance Film",
+ "World cinema",
+ "Comedy-drama",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dil_diya_hai",
+ "initial_release_date": "2006-09-08",
+ "name": "Dil Diya Hai",
+ "directed_by": [
+ "Aditya Datt",
+ "Aditya Datt"
+ ],
+ "genre": [
+ "Romance Film",
+ "Bollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dil_hai_tumhaara",
+ "initial_release_date": "2002-09-06",
+ "name": "Dil Hai Tumhara",
+ "directed_by": [
+ "Kundan Shah"
+ ],
+ "genre": [
+ "Family",
+ "Romance Film",
+ "Musical",
+ "Bollywood",
+ "World cinema",
+ "Drama",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/dil_ka_rishta",
+ "initial_release_date": "2003-01-17",
+ "name": "Dil Ka Rishta",
+ "directed_by": [
+ "Naresh Malhotra"
+ ],
+ "genre": [
+ "Romance Film",
+ "Bollywood"
+ ]
+ },
+ {
+ "id": "/en/dil_ne_jise_apna_kahaa",
+ "initial_release_date": "2004-09-10",
+ "name": "Dil Ne Jise Apna Kahaa",
+ "directed_by": [
+ "Atul Agnihotri"
+ ],
+ "genre": [
+ "Musical",
+ "World cinema",
+ "Romance Film",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Bollywood",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dinosaur_2000",
+ "initial_release_date": "2000-05-13",
+ "name": "Dinosaur",
+ "directed_by": [
+ "Eric Leighton",
+ "Ralph Zondag"
+ ],
+ "genre": [
+ "Computer Animation",
+ "Animation",
+ "Fantasy",
+ "Costume drama",
+ "Family",
+ "Adventure Film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/dirty_dancing_2004",
+ "initial_release_date": "2004-02-27",
+ "name": "Dirty Dancing: Havana Nights",
+ "directed_by": [
+ "Guy Ferland"
+ ],
+ "genre": [
+ "Musical",
+ "Coming of age",
+ "Indie film",
+ "Teen film",
+ "Romance Film",
+ "Historical period drama",
+ "Dance film",
+ "Musical Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dirty_deeds",
+ "initial_release_date": "2002-07-18",
+ "name": "Dirty Deeds",
+ "directed_by": [
+ "David Caesar"
+ ],
+ "genre": [
+ "Historical period drama",
+ "Black comedy",
+ "Crime Thriller",
+ "Thriller",
+ "Crime Fiction",
+ "World cinema",
+ "Gangster Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dirty_deeds_2005",
+ "initial_release_date": "2005-08-26",
+ "name": "Dirty Deeds",
+ "directed_by": [
+ "David Kendall"
+ ],
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dirty_love",
+ "initial_release_date": "2005-09-23",
+ "name": "Dirty Love",
+ "directed_by": [
+ "John Mallory Asher"
+ ],
+ "genre": [
+ "Indie film",
+ "Sex comedy",
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/disappearing_acts",
+ "initial_release_date": "2000-12-09",
+ "name": "Disappearing Acts",
+ "directed_by": [
+ "Gina Prince-Bythewood"
+ ],
+ "genre": [
+ "Romance Film",
+ "Television film",
+ "Film adaptation",
+ "Comedy-drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dishyum",
+ "initial_release_date": "2006-02-02",
+ "name": "Dishyum",
+ "directed_by": [
+ "Sasi"
+ ],
+ "genre": [
+ "Romance Film",
+ "Action Film",
+ "Drama",
+ "Tamil cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/distant_lights",
+ "initial_release_date": "2003-02-11",
+ "name": "Distant Lights",
+ "directed_by": [
+ "Hans-Christian Schmid"
+ ],
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/district_b13",
+ "initial_release_date": "2004-11-10",
+ "name": "District 13",
+ "directed_by": [
+ "Pierre Morel"
+ ],
+ "genre": [
+ "Martial Arts Film",
+ "Thriller",
+ "Action Film",
+ "Science Fiction",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/disturbia",
+ "initial_release_date": "2007-04-04",
+ "name": "Disturbia",
+ "directed_by": [
+ "D. J. Caruso"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Teen film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/ditto_2000",
+ "initial_release_date": "2000-05-27",
+ "name": "Ditto",
+ "directed_by": [
+ "Jeong-kwon Kim"
+ ],
+ "genre": [
+ "Romance Film",
+ "Science Fiction",
+ "East Asian cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/divine_intervention_2002",
+ "initial_release_date": "2002-05-19",
+ "name": "Divine Intervention",
+ "directed_by": [
+ "Elia Suleiman"
+ ],
+ "genre": [
+ "Black comedy",
+ "World cinema",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/divine_secrets_of_the_ya_ya_sisterhood",
+ "initial_release_date": "2002-06-03",
+ "name": "Divine Secrets of the Ya-Ya Sisterhood",
+ "directed_by": [
+ "Callie Khouri"
+ ],
+ "genre": [
+ "Film adaptation",
+ "Comedy-drama",
+ "Historical period drama",
+ "Family Drama",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/doa_dead_or_alive",
+ "initial_release_date": "2006-09-07",
+ "name": "DOA: Dead or Alive",
+ "directed_by": [
+ "Corey Yuen"
+ ],
+ "genre": [
+ "Action Film",
+ "Adventure Film"
+ ]
+ },
+ {
+ "id": "/en/dodgeball_a_true_underdog_story",
+ "initial_release_date": "2004-06-18",
+ "name": "DodgeBall: A True Underdog Story",
+ "directed_by": [
+ "Rawson Marshall Thurber"
+ ],
+ "genre": [
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dog_soldiers",
+ "initial_release_date": "2002-03-22",
+ "name": "Dog Soldiers",
+ "directed_by": [
+ "Neil Marshall"
+ ],
+ "genre": [
+ "Horror",
+ "Action Film",
+ "Creature Film"
+ ]
+ },
+ {
+ "id": "/en/dogtown_and_z-boys",
+ "initial_release_date": "2001-01-19",
+ "name": "Dogtown and Z-Boys",
+ "directed_by": [
+ "Stacy Peralta"
+ ],
+ "genre": [
+ "Documentary film",
+ "Sports",
+ "Extreme Sports",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/dogville",
+ "initial_release_date": "2003-05-19",
+ "name": "Dogville",
+ "directed_by": [
+ "Lars von Trier"
+ ],
+ "genre": [
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/doll_master",
+ "initial_release_date": "2004-07-30",
+ "name": "The Doll Master",
+ "directed_by": [
+ "Jeong Yong-Gi"
+ ],
+ "genre": [
+ "Horror",
+ "Thriller",
+ "East Asian cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/dolls",
+ "initial_release_date": "2002-09-05",
+ "name": "Dolls",
+ "directed_by": [
+ "Takeshi Kitano"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dominion_prequel_to_the_exorcist",
+ "initial_release_date": "2005-05-20",
+ "name": "Dominion: Prequel to the Exorcist",
+ "directed_by": [
+ "Paul Schrader"
+ ],
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Psychological thriller",
+ "Cult film"
+ ]
+ },
+ {
+ "id": "/en/domino_2005",
+ "initial_release_date": "2005-09-25",
+ "name": "Domino",
+ "directed_by": [
+ "Tony Scott"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Biographical film",
+ "Crime Fiction",
+ "Comedy",
+ "Adventure Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/don_2006",
+ "initial_release_date": "2006-10-20",
+ "name": "Don: The Chase Begins Again",
+ "directed_by": [
+ "Farhan Akhtar"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Thriller",
+ "Mystery",
+ "Action Film",
+ "Romance Film",
+ "Comedy",
+ "Bollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/dons_plum",
+ "initial_release_date": "2001-02-10",
+ "name": "Don's Plum",
+ "directed_by": [
+ "R.D. Robb"
+ ],
+ "genre": [
+ "Black-and-white",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dont_come_knocking",
+ "initial_release_date": "2005-05-19",
+ "name": "Don't Come Knocking",
+ "directed_by": [
+ "Wim Wenders"
+ ],
+ "genre": [
+ "Western",
+ "Indie film",
+ "Musical",
+ "Drama",
+ "Music",
+ "Musical Drama"
+ ]
+ },
+ {
+ "id": "/en/dont_move",
+ "initial_release_date": "2004-03-12",
+ "name": "Don't Move",
+ "directed_by": [
+ "Sergio Castellitto"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dont_say_a_word_2001",
+ "initial_release_date": "2001-09-24",
+ "name": "Don't Say a Word",
+ "directed_by": [
+ "Gary Fleder"
+ ],
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Crime Fiction",
+ "Suspense"
+ ]
+ },
+ {
+ "id": "/en/donnie_darko",
+ "initial_release_date": "2001-01-19",
+ "name": "Donnie Darko",
+ "directed_by": [
+ "Richard Kelly"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/doomsday_2008",
+ "initial_release_date": "2008-03-14",
+ "name": "Doomsday",
+ "directed_by": [
+ "Neil Marshall"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Action Film"
+ ]
+ },
+ {
+ "id": "/en/dopamine_2003",
+ "initial_release_date": "2003-01-23",
+ "name": "Dopamine",
+ "directed_by": [
+ "Mark Decena"
+ ],
+ "genre": [
+ "Comedy-drama",
+ "Romance Film",
+ "Indie film",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dosti_friends_forever",
+ "initial_release_date": "2005-12-23",
+ "name": "Dosti: Friends Forever",
+ "directed_by": [
+ "Suneel Darshan"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/double_take",
+ "initial_release_date": "2001-01-12",
+ "name": "Double Take",
+ "directed_by": [
+ "George Gallo"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Action/Adventure",
+ "Action Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/double_teamed",
+ "initial_release_date": "2002-01-18",
+ "name": "Double Teamed",
+ "directed_by": [
+ "Duwayne Dunham"
+ ],
+ "genre": [
+ "Family",
+ "Biographical film",
+ "Family Drama",
+ "Children's/Family",
+ "Sports"
+ ]
+ },
+ {
+ "id": "/en/double_vision_2002",
+ "initial_release_date": "2002-05-20",
+ "name": "Double Vision",
+ "directed_by": [
+ "Chen Kuo-Fu"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Martial Arts Film",
+ "Action Film",
+ "Horror",
+ "Psychological thriller",
+ "Suspense",
+ "World cinema",
+ "Crime Thriller",
+ "Action/Adventure",
+ "Chinese Movies"
+ ]
+ },
+ {
+ "id": "/en/double_whammy",
+ "initial_release_date": "2001-01-20",
+ "name": "Double Whammy",
+ "directed_by": [
+ "Tom DiCillo"
+ ],
+ "genre": [
+ "Comedy-drama",
+ "Indie film",
+ "Action Film",
+ "Crime Fiction",
+ "Action/Adventure",
+ "Satire",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/down_and_derby",
+ "initial_release_date": "2005-04-15",
+ "name": "Down and Derby",
+ "directed_by": [
+ "Eric Hendershot"
+ ],
+ "genre": [
+ "Family",
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/down_in_the_valley",
+ "initial_release_date": "2005-05-13",
+ "name": "Down in the Valley",
+ "directed_by": [
+ "David Jacobson"
+ ],
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Family Drama",
+ "Psychological thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/down_to_earth",
+ "initial_release_date": "2001-02-12",
+ "name": "Down to Earth",
+ "directed_by": [
+ "Chris Weitz",
+ "Paul Weitz"
+ ],
+ "genre": [
+ "Fantasy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/down_with_love",
+ "initial_release_date": "2003-05-09",
+ "name": "Down with Love",
+ "directed_by": [
+ "Peyton Reed"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Screwball comedy",
+ "Parody",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/downfall",
+ "initial_release_date": "2004-09-08",
+ "name": "Downfall",
+ "directed_by": [
+ "Oliver Hirschbiegel"
+ ],
+ "genre": [
+ "Biographical film",
+ "War film",
+ "Historical drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dr_dolittle_2",
+ "initial_release_date": "2001-06-19",
+ "name": "Dr. Dolittle 2",
+ "directed_by": [
+ "Steve Carr"
+ ],
+ "genre": [
+ "Family",
+ "Fantasy Comedy",
+ "Comedy",
+ "Romance Film"
+ ]
+ },
+ {
+ "id": "/en/dr_dolittle_3",
+ "initial_release_date": "2006-04-25",
+ "name": "Dr. Dolittle 3",
+ "directed_by": [
+ "Rich Thorne"
+ ],
+ "genre": [
+ "Family",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dracula_pages_from_a_virgins_diary",
+ "initial_release_date": "2002-02-28",
+ "name": "Dracula: Pages from a Virgin's Diary",
+ "directed_by": [
+ "Guy Maddin"
+ ],
+ "genre": [
+ "Silent film",
+ "Indie film",
+ "Horror",
+ "Musical",
+ "Experimental film",
+ "Dance film",
+ "Horror comedy",
+ "Musical comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dragon_boys",
+ "name": "Dragon Boys",
+ "directed_by": [
+ "Jerry Ciccoritti"
+ ],
+ "genre": [
+ "Crime Drama",
+ "Ensemble Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dragon_tiger_gate",
+ "initial_release_date": "2006-07-27",
+ "name": "Dragon Tiger Gate",
+ "directed_by": [
+ "Wilson Yip"
+ ],
+ "genre": [
+ "Martial Arts Film",
+ "Wuxia",
+ "Action/Adventure",
+ "Action Film",
+ "Thriller",
+ "Superhero movie",
+ "World cinema",
+ "Action Thriller",
+ "Chinese Movies"
+ ]
+ },
+ {
+ "id": "/en/dragonfly_2002",
+ "initial_release_date": "2002-02-18",
+ "name": "Dragonfly",
+ "directed_by": [
+ "Tom Shadyac"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Romance Film",
+ "Fantasy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dragonlance_dragons_of_autumn_twilight",
+ "initial_release_date": "2008-01-15",
+ "name": "Dragonlance: Dragons of Autumn Twilight",
+ "directed_by": [
+ "Will Meugniot"
+ ],
+ "genre": [
+ "Animation",
+ "Sword and sorcery",
+ "Fantasy",
+ "Adventure Film",
+ "Science Fiction"
+ ]
+ },
+ {
+ "id": "/en/drake_josh_go_hollywood",
+ "initial_release_date": "2006-01-06",
+ "name": "Drake &amp; Josh Go Hollywood",
+ "directed_by": [
+ "Adam Weissman",
+ "Steve Hoefer"
+ ],
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/drawing_restraint_9",
+ "initial_release_date": "2005-07-01",
+ "name": "Drawing Restraint 9",
+ "directed_by": [
+ "Matthew Barney"
+ ],
+ "genre": [
+ "Cult film",
+ "Fantasy",
+ "Surrealism",
+ "Avant-garde",
+ "Experimental film",
+ "Japanese Movies"
+ ]
+ },
+ {
+ "id": "/en/dreamcatcher",
+ "initial_release_date": "2003-03-06",
+ "name": "Dreamcatcher",
+ "directed_by": [
+ "Lawrence Kasdan"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Horror",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dreamer_2005",
+ "initial_release_date": "2005-09-10",
+ "name": "Dreamer",
+ "directed_by": [
+ "John Gatins"
+ ],
+ "genre": [
+ "Family",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dreaming_of_julia",
+ "initial_release_date": "2003-10-24",
+ "name": "Dreaming of Julia",
+ "directed_by": [
+ "Juan Gerard"
+ ],
+ "genre": [
+ "Indie film",
+ "Action Film",
+ "Crime Fiction",
+ "Action/Adventure",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/driving_miss_wealthy_juet_sai_ho_bun",
+ "initial_release_date": "2004-05-03",
+ "name": "Driving Miss Wealthy",
+ "directed_by": [
+ "James Yuen"
+ ],
+ "genre": [
+ "Romance Film",
+ "World cinema",
+ "Romantic comedy",
+ "Chinese Movies",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/drowning_mona",
+ "initial_release_date": "2000-01-02",
+ "name": "Drowning Mona",
+ "directed_by": [
+ "Nick Gomez"
+ ],
+ "genre": [
+ "Black comedy",
+ "Mystery",
+ "Whodunit",
+ "Crime Comedy",
+ "Crime Fiction",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/drugstore_girl",
+ "name": "Drugstore Girl",
+ "directed_by": [
+ "Katsuhide Motoki"
+ ],
+ "genre": [
+ "Japanese Movies",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/druids",
+ "initial_release_date": "2001-08-31",
+ "name": "Druids",
+ "directed_by": [
+ "Jacques Dorfmann"
+ ],
+ "genre": [
+ "Adventure Film",
+ "War film",
+ "Action/Adventure",
+ "World cinema",
+ "Epic film",
+ "Historical Epic",
+ "Historical fiction",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/duck_the_carbine_high_massacre",
+ "initial_release_date": "2000-04-20",
+ "name": "Duck! The Carbine High Massacre",
+ "directed_by": [
+ "William Hellfire",
+ "Joey Smack"
+ ],
+ "genre": [
+ "Satire",
+ "Black comedy",
+ "Parody",
+ "Indie film",
+ "Teen film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dude_wheres_my_car",
+ "initial_release_date": "2000-12-10",
+ "name": "Dude, Where's My Car?",
+ "directed_by": [
+ "Danny Leiner"
+ ],
+ "genre": [
+ "Mystery",
+ "Comedy",
+ "Science Fiction"
+ ]
+ },
+ {
+ "id": "/en/dude_wheres_the_party",
+ "name": "Dude, Where's the Party?",
+ "directed_by": [
+ "Benny Mathews"
+ ],
+ "genre": [
+ "Indie film",
+ "Comedy of manners",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/duets",
+ "initial_release_date": "2000-09-09",
+ "name": "Duets",
+ "directed_by": [
+ "Bruce Paltrow"
+ ],
+ "genre": [
+ "Musical",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dumb_dumberer",
+ "initial_release_date": "2003-06-13",
+ "name": "Dumb &amp; Dumberer: When Harry Met Lloyd",
+ "directed_by": [
+ "Troy Miller"
+ ],
+ "genre": [
+ "Buddy film",
+ "Teen film",
+ "Screwball comedy",
+ "Slapstick",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dumm_dumm_dumm",
+ "initial_release_date": "2001-04-13",
+ "name": "Dumm Dumm Dumm",
+ "directed_by": [
+ "Azhagam Perumal"
+ ],
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dummy_2003",
+ "initial_release_date": "2003-09-12",
+ "name": "Dummy",
+ "directed_by": [
+ "Greg Pritikin"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "Comedy",
+ "Comedy-drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/dumplings",
+ "initial_release_date": "2004-08-04",
+ "name": "Dumplings",
+ "directed_by": [
+ "Fruit Chan"
+ ],
+ "genre": [
+ "Horror",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/duplex",
+ "initial_release_date": "2003-09-26",
+ "name": "Duplex",
+ "directed_by": [
+ "Danny DeVito"
+ ],
+ "genre": [
+ "Black comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/dus",
+ "initial_release_date": "2005-07-08",
+ "name": "Dus",
+ "directed_by": [
+ "Anubhav Sinha"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Bollywood"
+ ]
+ },
+ {
+ "id": "/en/dust_2001",
+ "initial_release_date": "2001-08-29",
+ "name": "Dust",
+ "directed_by": [
+ "Milcho Manchevski"
+ ],
+ "genre": [
+ "Western",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/wikipedia/en_title/E_$0028film$0029",
+ "initial_release_date": "2006-10-21",
+ "name": "E",
+ "directed_by": [
+ "S. P. Jananathan"
+ ],
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/earthlings",
+ "name": "Earthlings",
+ "directed_by": [
+ "Shaun Monson"
+ ],
+ "genre": [
+ "Documentary film",
+ "Nature",
+ "Culture &amp; Society",
+ "Animal"
+ ]
+ },
+ {
+ "id": "/en/eastern_promises",
+ "initial_release_date": "2007-09-08",
+ "name": "Eastern Promises",
+ "directed_by": [
+ "David Cronenberg"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/eating_out",
+ "name": "Eating Out",
+ "directed_by": [
+ "Q. Allan Brocka"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "LGBT",
+ "Gay Themed",
+ "Romance Film",
+ "Gay",
+ "Gay Interest",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/echoes_of_innocence",
+ "initial_release_date": "2005-09-09",
+ "name": "Echoes of Innocence",
+ "directed_by": [
+ "Nathan Todd Sims"
+ ],
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Christian film",
+ "Mystery",
+ "Supernatural",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/eddies_million_dollar_cook_off",
+ "initial_release_date": "2003-07-18",
+ "name": "Eddie's Million Dollar Cook-Off",
+ "directed_by": [
+ "Paul Hoen"
+ ],
+ "genre": [
+ "Teen film"
+ ]
+ },
+ {
+ "id": "/en/edison_2006",
+ "initial_release_date": "2005-03-05",
+ "name": "Edison",
+ "directed_by": [
+ "David J. Burke"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Mystery",
+ "Crime Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/edmond_2006",
+ "initial_release_date": "2005-09-02",
+ "name": "Edmond",
+ "directed_by": [
+ "Stuart Gordon"
+ ],
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Indie film",
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/eight_below",
+ "initial_release_date": "2006-02-17",
+ "name": "Eight Below",
+ "directed_by": [
+ "Frank Marshall"
+ ],
+ "genre": [
+ "Adventure Film",
+ "Family",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/eight_crazy_nights",
+ "directed_by": [
+ "Seth Kearsley"
+ ],
+ "initial_release_date": "2002-11-27",
+ "genre": [
+ "Christmas movie",
+ "Musical",
+ "Animation",
+ "Musical comedy",
+ "Comedy"
+ ],
+ "name": "Eight Crazy Nights"
+ },
+ {
+ "id": "/en/eight_legged_freaks",
+ "directed_by": [
+ "Ellory Elkayem"
+ ],
+ "initial_release_date": "2002-05-30",
+ "genre": [
+ "Horror",
+ "Natural horror film",
+ "Science Fiction",
+ "Monster",
+ "B movie",
+ "Comedy",
+ "Action Film",
+ "Thriller",
+ "Horror comedy"
+ ],
+ "name": "Eight Legged Freaks"
+ },
+ {
+ "id": "/en/ek_ajnabee",
+ "directed_by": [
+ "Apoorva Lakhia"
+ ],
+ "initial_release_date": "2005-12-09",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Crime Fiction",
+ "Action Thriller",
+ "Drama",
+ "Bollywood"
+ ],
+ "name": "Ek Ajnabee"
+ },
+ {
+ "id": "/en/eklavya_the_royal_guard",
+ "directed_by": [
+ "Vidhu Vinod Chopra"
+ ],
+ "initial_release_date": "2007-02-16",
+ "genre": [
+ "Historical drama",
+ "Romance Film",
+ "Musical",
+ "Epic film",
+ "Thriller",
+ "Bollywood",
+ "World cinema"
+ ],
+ "name": "Eklavya: The Royal Guard"
+ },
+ {
+ "id": "/en/el_abrazo_partido",
+ "directed_by": [
+ "Daniel Burman"
+ ],
+ "initial_release_date": "2004-02-09",
+ "genre": [
+ "Indie film",
+ "Comedy",
+ "Comedy-drama",
+ "Drama"
+ ],
+ "name": "Lost Embrace"
+ },
+ {
+ "id": "/en/el_aura",
+ "directed_by": [
+ "Fabi\u00e1n Bielinsky"
+ ],
+ "initial_release_date": "2005-09-15",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "El Aura"
+ },
+ {
+ "id": "/en/el_crimen_del_padre_amaro",
+ "directed_by": [
+ "Carlos Carrera"
+ ],
+ "initial_release_date": "2002-08-16",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ],
+ "name": "The Crime of Father Amaro"
+ },
+ {
+ "id": "/en/el_juego_de_arcibel",
+ "directed_by": [
+ "Alberto Lecchi"
+ ],
+ "initial_release_date": "2003-05-29",
+ "genre": [
+ "Indie film",
+ "Political drama",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "El juego de Arcibel"
+ },
+ {
+ "id": "/wikipedia/en_title/El_Muerto_$0028film$0029",
+ "directed_by": [
+ "Brian Cox"
+ ],
+ "genre": [
+ "Indie film",
+ "Supernatural",
+ "Thriller",
+ "Superhero movie",
+ "Action/Adventure"
+ ],
+ "name": "El Muerto"
+ },
+ {
+ "id": "/en/el_principio_de_arquimedes",
+ "directed_by": [
+ "Gerardo Herrero"
+ ],
+ "initial_release_date": "2004-03-26",
+ "genre": [
+ "Drama"
+ ],
+ "name": "The Archimedes Principle"
+ },
+ {
+ "id": "/en/el_raton_perez",
+ "directed_by": [
+ "Juan Pablo Buscarini"
+ ],
+ "initial_release_date": "2006-07-13",
+ "genre": [
+ "Fantasy",
+ "Animation",
+ "Comedy",
+ "Family"
+ ],
+ "name": "The Hairy Tooth Fairy"
+ },
+ {
+ "id": "/en/election_2005",
+ "directed_by": [
+ "Johnnie To"
+ ],
+ "initial_release_date": "2005-05-14",
+ "genre": [
+ "Crime Fiction",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Election"
+ },
+ {
+ "id": "/en/election_2",
+ "directed_by": [
+ "Johnnie To"
+ ],
+ "initial_release_date": "2006-04-04",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "Election 2"
+ },
+ {
+ "id": "/en/daft_punks_electroma",
+ "directed_by": [
+ "Thomas Bangalter",
+ "Guy-Manuel de Homem-Christo"
+ ],
+ "initial_release_date": "2006-05-21",
+ "genre": [
+ "Indie film",
+ "Silent film",
+ "Science Fiction",
+ "World cinema",
+ "Avant-garde",
+ "Experimental film",
+ "Road movie",
+ "Drama"
+ ],
+ "name": "Daft Punk's Electroma"
+ },
+ {
+ "id": "/en/elektra_2005",
+ "directed_by": [
+ "Rob Bowman"
+ ],
+ "initial_release_date": "2005-01-08",
+ "genre": [
+ "Action Film",
+ "Action/Adventure",
+ "Martial Arts Film",
+ "Superhero movie",
+ "Thriller",
+ "Fantasy",
+ "Crime Fiction"
+ ],
+ "name": "Elektra"
+ },
+ {
+ "id": "/en/elephant_2003",
+ "directed_by": [
+ "Gus Van Sant"
+ ],
+ "initial_release_date": "2003-05-18",
+ "genre": [
+ "Teen film",
+ "Indie film",
+ "Crime Fiction",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Elephant"
+ },
+ {
+ "id": "/en/elephants_dream",
+ "directed_by": [
+ "Bassam Kurdali"
+ ],
+ "initial_release_date": "2006-03-24",
+ "genre": [
+ "Short Film",
+ "Computer Animation"
+ ],
+ "name": "Elephants Dream"
+ },
+ {
+ "id": "/en/elf_2003",
+ "directed_by": [
+ "Jon Favreau"
+ ],
+ "initial_release_date": "2003-10-09",
+ "genre": [
+ "Family",
+ "Romance Film",
+ "Comedy",
+ "Fantasy"
+ ],
+ "name": "Elf"
+ },
+ {
+ "id": "/en/elizabethtown_2005",
+ "directed_by": [
+ "Cameron Crowe"
+ ],
+ "initial_release_date": "2005-09-04",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Family Drama",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Elizabethtown"
+ },
+ {
+ "id": "/en/elviras_haunted_hills",
+ "directed_by": [
+ "Sam Irvin"
+ ],
+ "initial_release_date": "2001-06-23",
+ "genre": [
+ "Parody",
+ "Horror",
+ "Cult film",
+ "Haunted House Film",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "name": "Elvira's Haunted Hills"
+ },
+ {
+ "id": "/en/elvis_has_left_the_building_2004",
+ "directed_by": [
+ "Joel Zwick"
+ ],
+ "genre": [
+ "Action Film",
+ "Action/Adventure",
+ "Road movie",
+ "Crime Comedy",
+ "Crime Fiction",
+ "Comedy"
+ ],
+ "name": "Elvis Has Left the Building"
+ },
+ {
+ "id": "/en/empire_2002",
+ "directed_by": [
+ "Franc. Reyes"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Indie film",
+ "Action",
+ "Drama",
+ "Action Thriller"
+ ],
+ "name": "Empire"
+ },
+ {
+ "id": "/en/employee_of_the_month_2004",
+ "directed_by": [
+ "Mitch Rouse"
+ ],
+ "initial_release_date": "2004-01-17",
+ "genre": [
+ "Black comedy",
+ "Indie film",
+ "Heist film",
+ "Comedy"
+ ],
+ "name": "Employee of the Month"
+ },
+ {
+ "id": "/en/employee_of_the_month",
+ "directed_by": [
+ "Greg Coolidge"
+ ],
+ "initial_release_date": "2006-10-06",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "name": "Employee of the Month"
+ },
+ {
+ "id": "/en/empress_chung",
+ "directed_by": [
+ "Nelson Shin"
+ ],
+ "initial_release_date": "2005-08-12",
+ "genre": [
+ "Animation",
+ "Children's/Family",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "name": "Empress Chung"
+ },
+ {
+ "id": "/en/emr",
+ "directed_by": [
+ "Danny McCullough",
+ "James Erskine"
+ ],
+ "initial_release_date": "2004-03-08",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Psychological thriller"
+ ],
+ "name": "EMR"
+ },
+ {
+ "id": "/en/en_route",
+ "directed_by": [
+ "Jan Kr\u00fcger"
+ ],
+ "initial_release_date": "2004-06-17",
+ "genre": [
+ "Drama"
+ ],
+ "name": "En Route"
+ },
+ {
+ "id": "/en/enakku_20_unakku_18",
+ "directed_by": [
+ "Jyothi Krishna"
+ ],
+ "initial_release_date": "2003-12-19",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "Enakku 20 Unakku 18"
+ },
+ {
+ "id": "/en/enchanted_2007",
+ "directed_by": [
+ "Kevin Lima"
+ ],
+ "initial_release_date": "2007-10-20",
+ "genre": [
+ "Musical",
+ "Fantasy",
+ "Romance Film",
+ "Family",
+ "Comedy",
+ "Animation",
+ "Adventure Film",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama"
+ ],
+ "name": "Enchanted"
+ },
+ {
+ "id": "/en/end_of_the_spear",
+ "directed_by": [
+ "Jim Hanon"
+ ],
+ "genre": [
+ "Docudrama",
+ "Christian film",
+ "Indie film",
+ "Adventure Film",
+ "Historical period drama",
+ "Action/Adventure",
+ "Inspirational Drama",
+ "Drama"
+ ],
+ "name": "End of the Spear"
+ },
+ {
+ "id": "/en/enduring_love",
+ "directed_by": [
+ "Roger Michell"
+ ],
+ "initial_release_date": "2004-09-04",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Film adaptation",
+ "Indie film",
+ "Romance Film",
+ "Psychological thriller",
+ "Drama"
+ ],
+ "name": "Enduring Love"
+ },
+ {
+ "id": "/en/enemy_at_the_gates",
+ "directed_by": [
+ "Jean-Jacques Annaud"
+ ],
+ "initial_release_date": "2001-02-07",
+ "genre": [
+ "War film",
+ "Romance Film",
+ "Action Film",
+ "Historical fiction",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Enemy at the Gates"
+ },
+ {
+ "id": "/en/enigma_2001",
+ "directed_by": [
+ "Michael Apted"
+ ],
+ "initial_release_date": "2001-01-22",
+ "genre": [
+ "Thriller",
+ "War film",
+ "Spy film",
+ "Romance Film",
+ "Mystery",
+ "Drama"
+ ],
+ "name": "Enigma"
+ },
+ {
+ "id": "/en/enigma_the_best_of_jeff_hardy",
+ "directed_by": [
+ "Craig Leathers"
+ ],
+ "initial_release_date": "2005-10-04",
+ "genre": [
+ "Sports",
+ "Action Film"
+ ],
+ "name": "Enigma: The Best of Jeff Hardy"
+ },
+ {
+ "id": "/en/enron_the_smartest_guys_in_the_room",
+ "directed_by": [
+ "Alex Gibney"
+ ],
+ "initial_release_date": "2005-04-22",
+ "genre": [
+ "Documentary film",
+ "Indie film",
+ "Crime Fiction",
+ "Business",
+ "Culture &amp; Society",
+ "Finance &amp; Investing",
+ "Law &amp; Crime",
+ "Biographical film"
+ ],
+ "name": "Enron: The Smartest Guys in the Room"
+ },
+ {
+ "id": "/en/envy_2004",
+ "directed_by": [
+ "Barry Levinson"
+ ],
+ "initial_release_date": "2004-04-30",
+ "genre": [
+ "Black comedy",
+ "Cult film",
+ "Comedy"
+ ],
+ "name": "Envy"
+ },
+ {
+ "id": "/en/equilibrium_2002",
+ "directed_by": [
+ "Kurt Wimmer"
+ ],
+ "initial_release_date": "2002-12-06",
+ "genre": [
+ "Science Fiction",
+ "Dystopia",
+ "Future noir",
+ "Thriller",
+ "Action Film",
+ "Drama"
+ ],
+ "name": "Equilibrium"
+ },
+ {
+ "id": "/en/eragon_2006",
+ "directed_by": [
+ "Stefen Fangmeier"
+ ],
+ "initial_release_date": "2006-12-13",
+ "genre": [
+ "Family",
+ "Adventure Film",
+ "Fantasy",
+ "Sword and sorcery",
+ "Action Film",
+ "Drama"
+ ],
+ "name": "Eragon"
+ },
+ {
+ "id": "/en/erin_brockovich_2000",
+ "directed_by": [
+ "Steven Soderbergh"
+ ],
+ "initial_release_date": "2000-03-14",
+ "genre": [
+ "Biographical film",
+ "Legal drama",
+ "Trial drama",
+ "Romance Film",
+ "Docudrama",
+ "Comedy-drama",
+ "Feminist Film",
+ "Drama",
+ "Drama film"
+ ],
+ "name": "Erin Brockovich"
+ },
+ {
+ "id": "/en/eros_2004",
+ "directed_by": [
+ "Michelangelo Antonioni",
+ "Steven Soderbergh",
+ "Wong Kar-wai"
+ ],
+ "initial_release_date": "2004-09-10",
+ "genre": [
+ "Romance Film",
+ "Erotica",
+ "Drama"
+ ],
+ "name": "Eros"
+ },
+ {
+ "id": "/en/escaflowne",
+ "directed_by": [
+ "Kazuki Akane"
+ ],
+ "initial_release_date": "2000-06-24",
+ "genre": [
+ "Adventure Film",
+ "Science Fiction",
+ "Fantasy",
+ "Animation",
+ "Romance Film",
+ "Action Film",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Escaflowne"
+ },
+ {
+ "id": "/en/escape_2006",
+ "directed_by": [
+ "Niki Karimi"
+ ],
+ "genre": [
+ "Drama"
+ ],
+ "name": "A Few Days Later"
+ },
+ {
+ "id": "/en/eternal_sunshine_of_the_spotless_mind",
+ "directed_by": [
+ "Michel Gondry"
+ ],
+ "initial_release_date": "2004-03-19",
+ "genre": [
+ "Romance Film",
+ "Science Fiction",
+ "Drama"
+ ],
+ "name": "Eternal Sunshine of the Spotless Mind"
+ },
+ {
+ "id": "/en/eulogy_2004",
+ "directed_by": [
+ "Michael Clancy"
+ ],
+ "initial_release_date": "2004-10-15",
+ "genre": [
+ "LGBT",
+ "Black comedy",
+ "Indie film",
+ "Comedy"
+ ],
+ "name": "Eulogy"
+ },
+ {
+ "id": "/en/eurotrip",
+ "directed_by": [
+ "Jeff Schaffer",
+ "Alec Berg",
+ "David Mandel"
+ ],
+ "initial_release_date": "2004-02-20",
+ "genre": [
+ "Sex comedy",
+ "Adventure Film",
+ "Teen film",
+ "Comedy"
+ ],
+ "name": "EuroTrip"
+ },
+ {
+ "id": "/en/evan_almighty",
+ "directed_by": [
+ "Tom Shadyac"
+ ],
+ "initial_release_date": "2007-06-21",
+ "genre": [
+ "Religious Film",
+ "Parody",
+ "Family",
+ "Fantasy",
+ "Fantasy Comedy",
+ "Heavenly Comedy",
+ "Comedy"
+ ],
+ "name": "Evan Almighty"
+ },
+ {
+ "id": "/en/everlasting_regret",
+ "directed_by": [
+ "Stanley Kwan"
+ ],
+ "initial_release_date": "2005-09-08",
+ "genre": [
+ "Romance Film",
+ "Chinese Movies",
+ "Drama"
+ ],
+ "name": "Everlasting Regret"
+ },
+ {
+ "id": "/en/everybody_famous",
+ "directed_by": [
+ "Dominique Deruddere"
+ ],
+ "initial_release_date": "2000-04-12",
+ "genre": [
+ "World cinema",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Everybody's Famous!"
+ },
+ {
+ "id": "/en/everymans_feast",
+ "directed_by": [
+ "Fritz Lehner"
+ ],
+ "initial_release_date": "2002-01-25",
+ "genre": [
+ "Drama"
+ ],
+ "name": "Everyman's Feast"
+ },
+ {
+ "id": "/en/everyones_hero",
+ "directed_by": [
+ "Christopher Reeve",
+ "Daniel St. Pierre",
+ "Colin Brady"
+ ],
+ "initial_release_date": "2006-09-15",
+ "genre": [
+ "Computer Animation",
+ "Family",
+ "Animation",
+ "Adventure Film",
+ "Sports",
+ "Children's/Family",
+ "Family-Oriented Adventure"
+ ],
+ "name": "Everyone's Hero"
+ },
+ {
+ "id": "/en/everything_2005",
+ "directed_by": [],
+ "initial_release_date": "2005-11-22",
+ "genre": [
+ "Music video"
+ ],
+ "name": "Everything"
+ },
+ {
+ "id": "/en/everything_goes",
+ "directed_by": [
+ "Andrew Kotatko"
+ ],
+ "initial_release_date": "2004-06-14",
+ "genre": [
+ "Short Film",
+ "Drama"
+ ],
+ "name": "Everything Goes"
+ },
+ {
+ "id": "/en/everything_is_illuminated_2005",
+ "directed_by": [
+ "Liev Schreiber"
+ ],
+ "initial_release_date": "2005-09-16",
+ "genre": [
+ "Adventure Film",
+ "Film adaptation",
+ "Family Drama",
+ "Comedy-drama",
+ "Road movie",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Everything Is Illuminated"
+ },
+ {
+ "id": "/en/evilenko",
+ "directed_by": [
+ "David Grieco"
+ ],
+ "initial_release_date": "2004-04-16",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Crime Fiction"
+ ],
+ "name": "Evilenko"
+ },
+ {
+ "id": "/en/evolution_2001",
+ "directed_by": [
+ "Ivan Reitman"
+ ],
+ "initial_release_date": "2001-06-08",
+ "genre": [
+ "Science Fiction",
+ "Parody",
+ "Action Film",
+ "Action/Adventure",
+ "Comedy"
+ ],
+ "name": "Evolution"
+ },
+ {
+ "id": "/en/exit_wounds",
+ "directed_by": [
+ "Andrzej Bartkowiak"
+ ],
+ "initial_release_date": "2001-03-16",
+ "genre": [
+ "Action Film",
+ "Mystery",
+ "Martial Arts Film",
+ "Action/Adventure",
+ "Thriller",
+ "Crime Fiction"
+ ],
+ "name": "Exit Wounds"
+ },
+ {
+ "id": "/en/exorcist_the_beginning",
+ "directed_by": [
+ "Renny Harlin"
+ ],
+ "initial_release_date": "2004-08-18",
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Psychological thriller",
+ "Cult film",
+ "Historical period drama"
+ ],
+ "name": "Exorcist: The Beginning"
+ },
+ {
+ "id": "/en/extreme_days",
+ "directed_by": [
+ "Eric Hannah"
+ ],
+ "initial_release_date": "2001-09-28",
+ "genre": [
+ "Comedy-drama",
+ "Action Film",
+ "Christian film",
+ "Action/Adventure",
+ "Road movie",
+ "Teen film",
+ "Sports"
+ ],
+ "name": "Extreme Days"
+ },
+ {
+ "id": "/en/extreme_ops",
+ "directed_by": [
+ "Christian Duguay"
+ ],
+ "initial_release_date": "2002-11-27",
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Action/Adventure",
+ "Sports",
+ "Adventure Film",
+ "Action Thriller",
+ "Chase Movie"
+ ],
+ "name": "Extreme Ops"
+ },
+ {
+ "id": "/en/face_2004",
+ "directed_by": [
+ "Yoo Sang-gon"
+ ],
+ "initial_release_date": "2004-06-11",
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Drama",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "name": "Face"
+ },
+ {
+ "id": "/en/la_finestra_di_fronte",
+ "directed_by": [
+ "Ferzan \u00d6zpetek"
+ ],
+ "initial_release_date": "2003-02-28",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ],
+ "name": "Facing Windows"
+ },
+ {
+ "id": "/en/factory_girl",
+ "directed_by": [
+ "George Hickenlooper"
+ ],
+ "initial_release_date": "2006-12-29",
+ "genre": [
+ "Biographical film",
+ "Indie film",
+ "Historical period drama",
+ "Drama"
+ ],
+ "name": "Factory Girl"
+ },
+ {
+ "id": "/en/fahrenheit_9_11",
+ "directed_by": [
+ "Michael Moore"
+ ],
+ "initial_release_date": "2004-05-17",
+ "genre": [
+ "Indie film",
+ "Documentary film",
+ "War film",
+ "Culture &amp; Society",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "Fahrenheit 9/11"
+ },
+ {
+ "id": "/en/fahrenheit_9_111_2",
+ "directed_by": [
+ "Michael Moore"
+ ],
+ "genre": [
+ "Documentary film"
+ ],
+ "name": "Fahrenheit 9/11\u00bd"
+ },
+ {
+ "id": "/en/fail_safe_2000",
+ "directed_by": [
+ "Stephen Frears"
+ ],
+ "initial_release_date": "2000-04-09",
+ "genre": [
+ "Thriller",
+ "Science Fiction",
+ "Black-and-white",
+ "Film adaptation",
+ "Suspense",
+ "Psychological thriller",
+ "Political drama",
+ "Drama"
+ ],
+ "name": "Fail Safe"
+ },
+ {
+ "id": "/en/failan",
+ "directed_by": [
+ "Song Hae-sung"
+ ],
+ "initial_release_date": "2001-04-28",
+ "genre": [
+ "Romance Film",
+ "World cinema",
+ "Drama"
+ ],
+ "name": "Failan"
+ },
+ {
+ "id": "/en/failure_to_launch",
+ "directed_by": [
+ "Tom Dey"
+ ],
+ "initial_release_date": "2006-03-10",
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "name": "Failure to Launch"
+ },
+ {
+ "id": "/en/fake_2003",
+ "directed_by": [
+ "Thanakorn Pongsuwan"
+ ],
+ "initial_release_date": "2003-04-28",
+ "genre": [
+ "Romance Film"
+ ],
+ "name": "Fake"
+ },
+ {
+ "id": "/en/falcons_2002",
+ "directed_by": [
+ "Fri\u00f0rik \u00de\u00f3r Fri\u00f0riksson"
+ ],
+ "genre": [
+ "Drama"
+ ],
+ "name": "Falcons"
+ },
+ {
+ "id": "/en/fallen_2006",
+ "directed_by": [
+ "Mikael Salomon",
+ "Kevin Kerslake"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Fantasy",
+ "Action/Adventure",
+ "Drama"
+ ],
+ "name": "Fallen"
+ },
+ {
+ "id": "/en/family_-_ties_of_blood",
+ "directed_by": [
+ "Rajkumar Santoshi"
+ ],
+ "initial_release_date": "2006-01-11",
+ "genre": [
+ "Musical",
+ "Crime Fiction",
+ "Action Film",
+ "Romance Film",
+ "Thriller",
+ "Drama",
+ "Musical Drama"
+ ],
+ "name": "Family"
+ },
+ {
+ "id": "/en/familywala",
+ "directed_by": [
+ "Neeraj Vora"
+ ],
+ "genre": [
+ "Comedy",
+ "Drama",
+ "Bollywood",
+ "World cinema"
+ ],
+ "name": "Familywala"
+ },
+ {
+ "id": "/en/fan_chan",
+ "directed_by": [
+ "Vitcha Gojiew",
+ "Witthaya Thongyooyong",
+ "Komgrit Triwimol",
+ "Nithiwat Tharathorn",
+ "Songyos Sugmakanan",
+ "Adisorn Tresirikasem"
+ ],
+ "initial_release_date": "2003-10-03",
+ "genre": [
+ "Comedy",
+ "Romance Film"
+ ],
+ "name": "Fan Chan"
+ },
+ {
+ "id": "/en/fanaa",
+ "directed_by": [
+ "Kunal Kohli"
+ ],
+ "initial_release_date": "2006-05-26",
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Musical",
+ "Bollywood",
+ "Musical Drama",
+ "Drama"
+ ],
+ "name": "Fanaa"
+ },
+ {
+ "id": "/en/fantastic_four_2005",
+ "directed_by": [
+ "Tim Story"
+ ],
+ "initial_release_date": "2005-06-29",
+ "genre": [
+ "Fantasy",
+ "Science Fiction",
+ "Adventure Film",
+ "Action Film"
+ ],
+ "name": "Fantastic Four"
+ },
+ {
+ "id": "/en/fantastic_four_and_the_silver_surfer",
+ "directed_by": [
+ "Tim Story"
+ ],
+ "initial_release_date": "2007-06-12",
+ "genre": [
+ "Fantasy",
+ "Science Fiction",
+ "Action Film",
+ "Thriller"
+ ],
+ "name": "Fantastic Four: Rise of the Silver Surfer"
+ },
+ {
+ "id": "/en/fantastic_mr_fox_2007",
+ "directed_by": [
+ "Wes Anderson"
+ ],
+ "initial_release_date": "2009-10-14",
+ "genre": [
+ "Animation",
+ "Adventure Film",
+ "Comedy",
+ "Family"
+ ],
+ "name": "Fantastic Mr. Fox"
+ },
+ {
+ "id": "/en/faq_frequently_asked_questions",
+ "directed_by": [
+ "Carlos Atanes"
+ ],
+ "initial_release_date": "2004-10-12",
+ "genre": [
+ "Science Fiction"
+ ],
+ "name": "FAQ: Frequently Asked Questions"
+ },
+ {
+ "id": "/en/far_cry_2008",
+ "directed_by": [
+ "Uwe Boll"
+ ],
+ "initial_release_date": "2008-10-02",
+ "genre": [
+ "Action Film",
+ "Science Fiction",
+ "Thriller",
+ "Adventure Film"
+ ],
+ "name": "Far Cry"
+ },
+ {
+ "id": "/en/far_from_heaven",
+ "directed_by": [
+ "Todd Haynes"
+ ],
+ "initial_release_date": "2002-09-01",
+ "genre": [
+ "Romance Film",
+ "Melodrama",
+ "Drama"
+ ],
+ "name": "Far from Heaven"
+ },
+ {
+ "id": "/en/farce_of_the_penguins",
+ "directed_by": [
+ "Bob Saget"
+ ],
+ "genre": [
+ "Parody",
+ "Mockumentary",
+ "Adventure Comedy",
+ "Comedy"
+ ],
+ "name": "Farce of the Penguins"
+ },
+ {
+ "id": "/en/eagles_farewell_1_tour_live_from_melbourne",
+ "directed_by": [
+ "Carol Dodds"
+ ],
+ "initial_release_date": "2005-06-14",
+ "genre": [
+ "Music video"
+ ],
+ "name": "Eagles: Farewell 1 Tour-Live from Melbourne"
+ },
+ {
+ "id": "/en/fat_albert",
+ "directed_by": [
+ "Joel Zwick"
+ ],
+ "initial_release_date": "2004-12-12",
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Romance Film",
+ "Comedy"
+ ],
+ "name": "Fat Albert"
+ },
+ {
+ "id": "/en/fat_pizza_the_movie",
+ "directed_by": [
+ "Paul Fenech"
+ ],
+ "genre": [
+ "Comedy"
+ ],
+ "name": "Fat Pizza"
+ },
+ {
+ "id": "/en/fatwa_2006",
+ "directed_by": [
+ "John Carter"
+ ],
+ "initial_release_date": "2006-03-24",
+ "genre": [
+ "Thriller",
+ "Political thriller",
+ "Drama"
+ ],
+ "name": "Fatwa"
+ },
+ {
+ "id": "/en/faust_love_of_the_damned",
+ "directed_by": [
+ "Brian Yuzna"
+ ],
+ "initial_release_date": "2000-10-12",
+ "genre": [
+ "Horror",
+ "Supernatural"
+ ],
+ "name": "Faust: Love of the Damned"
+ },
+ {
+ "id": "/en/fay_grim",
+ "directed_by": [
+ "Hal Hartley"
+ ],
+ "initial_release_date": "2006-09-11",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Political thriller",
+ "Indie film",
+ "Comedy Thriller",
+ "Comedy",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "name": "Fay Grim"
+ },
+ {
+ "id": "/en/fear_and_trembling_2003",
+ "directed_by": [
+ "Alain Corneau"
+ ],
+ "genre": [
+ "World cinema",
+ "Japanese Movies",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Fear and Trembling"
+ },
+ {
+ "id": "/en/fear_of_the_dark_2006",
+ "directed_by": [
+ "Glen Baisley"
+ ],
+ "initial_release_date": "2001-10-06",
+ "genre": [
+ "Horror",
+ "Mystery",
+ "Psychological thriller",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Fear of the Dark"
+ },
+ {
+ "id": "/en/fear_x",
+ "directed_by": [
+ "Nicolas Winding Refn"
+ ],
+ "initial_release_date": "2003-01-19",
+ "genre": [
+ "Psychological thriller",
+ "Thriller"
+ ],
+ "name": "Fear X"
+ },
+ {
+ "id": "/en/feardotcom",
+ "directed_by": [
+ "William Malone"
+ ],
+ "initial_release_date": "2002-08-09",
+ "genre": [
+ "Horror",
+ "Crime Fiction",
+ "Thriller",
+ "Mystery"
+ ],
+ "name": "FeardotCom"
+ },
+ {
+ "id": "/en/fearless",
+ "directed_by": [
+ "Ronny Yu"
+ ],
+ "initial_release_date": "2006-01-26",
+ "genre": [
+ "Biographical film",
+ "Action Film",
+ "Sports",
+ "Drama"
+ ],
+ "name": "Fearless"
+ },
+ {
+ "id": "/en/feast",
+ "directed_by": [
+ "John Gulager"
+ ],
+ "initial_release_date": "2006-09-22",
+ "genre": [
+ "Horror",
+ "Cult film",
+ "Monster movie",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "name": "Feast"
+ },
+ {
+ "id": "/en/femme_fatale_2002",
+ "directed_by": [
+ "Brian De Palma"
+ ],
+ "initial_release_date": "2002-04-30",
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Crime Fiction",
+ "Erotic thriller"
+ ],
+ "name": "Femme Fatale"
+ },
+ {
+ "id": "/en/festival_2005",
+ "directed_by": [
+ "Annie Griffin"
+ ],
+ "initial_release_date": "2005-07-15",
+ "genre": [
+ "Black comedy",
+ "Parody",
+ "Comedy"
+ ],
+ "name": "Festival"
+ },
+ {
+ "id": "/en/festival_express",
+ "directed_by": [
+ "Bob Smeaton"
+ ],
+ "genre": [
+ "Documentary film",
+ "Concert film",
+ "History",
+ "Musical",
+ "Indie film",
+ "Rockumentary",
+ "Music"
+ ],
+ "name": "Festival Express"
+ },
+ {
+ "id": "/en/festival_in_cannes",
+ "directed_by": [
+ "Henry Jaglom"
+ ],
+ "initial_release_date": "2001-11-03",
+ "genre": [
+ "Mockumentary",
+ "Comedy-drama",
+ "Comedy of manners",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Festival in Cannes"
+ },
+ {
+ "id": "/en/fever_pitch_2005",
+ "directed_by": [
+ "Bobby Farrelly",
+ "Peter Farrelly"
+ ],
+ "initial_release_date": "2005-04-06",
+ "genre": [
+ "Romance Film",
+ "Sports",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Fever Pitch"
+ },
+ {
+ "id": "/en/fida",
+ "directed_by": [
+ "Ken Ghosh"
+ ],
+ "initial_release_date": "2004-08-20",
+ "genre": [
+ "Romance Film",
+ "Adventure Film",
+ "Thriller",
+ "Drama"
+ ],
+ "name": "Fida"
+ },
+ {
+ "id": "/en/fido_2006",
+ "directed_by": [
+ "Andrew Currie"
+ ],
+ "initial_release_date": "2006-09-07",
+ "genre": [
+ "Horror",
+ "Parody",
+ "Romance Film",
+ "Horror comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "name": "Fido"
+ },
+ {
+ "id": "/en/fighter_in_the_wind",
+ "initial_release_date": "2004-08-06",
+ "name": "Fighter in the Wind",
+ "directed_by": [
+ "Yang Yun-ho",
+ "Yang Yun-ho"
+ ],
+ "genre": [
+ "Action/Adventure",
+ "Action Film",
+ "War film",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/filantropica",
+ "initial_release_date": "2002-03-15",
+ "name": "Filantropica",
+ "directed_by": [
+ "Nae Caranfil"
+ ],
+ "genre": [
+ "Comedy",
+ "Black comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/film_geek",
+ "initial_release_date": "2006-02-10",
+ "name": "Film Geek",
+ "directed_by": [
+ "James Westby"
+ ],
+ "genre": [
+ "Indie film",
+ "Workplace Comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/final_destination",
+ "initial_release_date": "2000-03-16",
+ "name": "Final Destination",
+ "directed_by": [
+ "James Wong"
+ ],
+ "genre": [
+ "Slasher",
+ "Teen film",
+ "Supernatural",
+ "Horror",
+ "Cult film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/final_destination_3",
+ "initial_release_date": "2006-02-09",
+ "name": "Final Destination 3",
+ "directed_by": [
+ "James Wong"
+ ],
+ "genre": [
+ "Slasher",
+ "Teen film",
+ "Horror",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/final_destination_2",
+ "initial_release_date": "2003-01-30",
+ "name": "Final Destination 2",
+ "directed_by": [
+ "David R. Ellis"
+ ],
+ "genre": [
+ "Slasher",
+ "Teen film",
+ "Supernatural",
+ "Horror",
+ "Cult film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/final_fantasy_vii_advent_children",
+ "initial_release_date": "2005-08-31",
+ "name": "Final Fantasy VII: Advent Children",
+ "directed_by": [
+ "Tetsuya Nomura",
+ "Takeshi Nozue"
+ ],
+ "genre": [
+ "Anime",
+ "Science Fiction",
+ "Animation",
+ "Action Film",
+ "Thriller"
+ ]
+ },
+ {
+ "id": "/en/final_fantasy_the_spirits_within",
+ "initial_release_date": "2001-07-02",
+ "name": "Final Fantasy: The Spirits Within",
+ "directed_by": [
+ "Hironobu Sakaguchi",
+ "Motonori Sakakibara"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Anime",
+ "Animation",
+ "Fantasy",
+ "Action Film",
+ "Adventure Film"
+ ]
+ },
+ {
+ "id": "/en/final_stab",
+ "name": "Final Stab",
+ "directed_by": [
+ "David DeCoteau"
+ ],
+ "genre": [
+ "Horror",
+ "Slasher",
+ "Teen film"
+ ]
+ },
+ {
+ "id": "/en/find_me_guilty",
+ "initial_release_date": "2006-02-16",
+ "name": "Find Me Guilty",
+ "directed_by": [
+ "Sidney Lumet"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Trial drama",
+ "Docudrama",
+ "Comedy-drama",
+ "Courtroom Comedy",
+ "Crime Comedy",
+ "Gangster Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/finders_fee",
+ "initial_release_date": "2001-06-16",
+ "name": "Finder's Fee",
+ "directed_by": [
+ "Jeff Probst"
+ ],
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Indie film",
+ "Suspense",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/finding_nemo",
+ "initial_release_date": "2003-05-30",
+ "name": "Finding Nemo",
+ "directed_by": [
+ "Andrew Stanton",
+ "Lee Unkrich"
+ ],
+ "genre": [
+ "Animation",
+ "Adventure Film",
+ "Comedy",
+ "Family"
+ ]
+ },
+ {
+ "id": "/en/finding_neverland",
+ "initial_release_date": "2004-09-04",
+ "name": "Finding Neverland",
+ "directed_by": [
+ "Marc Forster"
+ ],
+ "genre": [
+ "Costume drama",
+ "Historical period drama",
+ "Family",
+ "Biographical film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/fingerprints",
+ "name": "Fingerprints",
+ "directed_by": [
+ "Harry Basil"
+ ],
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Mystery"
+ ]
+ },
+ {
+ "id": "/en/firewall_2006",
+ "initial_release_date": "2006-02-02",
+ "name": "Firewall",
+ "directed_by": [
+ "Richard Loncraine"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Psychological thriller",
+ "Action/Adventure",
+ "Crime Thriller",
+ "Action Thriller"
+ ]
+ },
+ {
+ "id": "/en/first_daughter",
+ "initial_release_date": "2004-09-24",
+ "name": "First Daughter",
+ "directed_by": [
+ "Forest Whitaker"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Teen film",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/first_descent",
+ "initial_release_date": "2005-12-02",
+ "name": "First Descent",
+ "directed_by": [
+ "Kemp Curly",
+ "Kevin Harrison"
+ ],
+ "genre": [
+ "Documentary film",
+ "Sports",
+ "Extreme Sports",
+ "Biographical film"
+ ]
+ },
+ {
+ "id": "/en/fiza",
+ "initial_release_date": "2000-09-08",
+ "name": "Fiza",
+ "directed_by": [
+ "Khalid Mohamed"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/flags_of_our_fathers_2006",
+ "initial_release_date": "2006-10-20",
+ "name": "Flags of Our Fathers",
+ "directed_by": [
+ "Clint Eastwood"
+ ],
+ "genre": [
+ "War film",
+ "History",
+ "Action Film",
+ "Film adaptation",
+ "Historical drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/flight_from_death",
+ "initial_release_date": "2006-09-06",
+ "name": "Flight from Death",
+ "directed_by": [
+ "Patrick Shen"
+ ],
+ "genre": [
+ "Documentary film"
+ ]
+ },
+ {
+ "id": "/en/flight_of_the_phoenix",
+ "initial_release_date": "2004-12-17",
+ "name": "Flight of the Phoenix",
+ "directed_by": [
+ "John Moore"
+ ],
+ "genre": [
+ "Airplanes and airports",
+ "Disaster Film",
+ "Action Film",
+ "Adventure Film",
+ "Action/Adventure",
+ "Film adaptation",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/flightplan",
+ "initial_release_date": "2005-09-22",
+ "name": "Flightplan",
+ "directed_by": [
+ "Robert Schwentke"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/flock_of_dodos",
+ "name": "Flock of Dodos",
+ "directed_by": [
+ "Randy Olson"
+ ],
+ "genre": [
+ "Documentary film",
+ "History"
+ ]
+ },
+ {
+ "id": "/en/fluffy_the_english_vampire_slayer",
+ "name": "Fluffy the English Vampire Slayer",
+ "directed_by": [
+ "Henry Burrows"
+ ],
+ "genre": [
+ "Horror comedy",
+ "Short Film",
+ "Fan film",
+ "Parody"
+ ]
+ },
+ {
+ "id": "/en/flushed_away",
+ "initial_release_date": "2006-10-22",
+ "name": "Flushed Away",
+ "directed_by": [
+ "David Bowers",
+ "Sam Fell"
+ ],
+ "genre": [
+ "Animation",
+ "Family",
+ "Adventure Film",
+ "Children's/Family",
+ "Family-Oriented Adventure",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/fool_and_final",
+ "initial_release_date": "2007-06-01",
+ "name": "Fool &amp; Final",
+ "directed_by": [
+ "Ahmed Khan"
+ ],
+ "genre": [
+ "Comedy",
+ "Action Film",
+ "Romance Film",
+ "Bollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/foolproof",
+ "initial_release_date": "2003-10-03",
+ "name": "Foolproof",
+ "directed_by": [
+ "William Phillips"
+ ],
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Crime Thriller",
+ "Action Thriller",
+ "Caper story",
+ "Crime Fiction",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/for_the_birds",
+ "initial_release_date": "2000-06-05",
+ "name": "For the Birds",
+ "directed_by": [
+ "Ralph Eggleston"
+ ],
+ "genre": [
+ "Short Film",
+ "Animation",
+ "Comedy",
+ "Family"
+ ]
+ },
+ {
+ "id": "/en/for_your_consideration_2006",
+ "initial_release_date": "2006-11-17",
+ "name": "For Your Consideration",
+ "directed_by": [
+ "Christopher Guest"
+ ],
+ "genre": [
+ "Mockumentary",
+ "Parody",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/diev_mi_kas",
+ "initial_release_date": "2005-09-23",
+ "name": "Forest of the Gods",
+ "directed_by": [
+ "Algimantas Puipa"
+ ],
+ "genre": [
+ "War film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/formula_17",
+ "initial_release_date": "2004-04-02",
+ "name": "Formula 17",
+ "directed_by": [
+ "Chen Yin-jung"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/forty_shades_of_blue",
+ "name": "Forty Shades of Blue",
+ "directed_by": [
+ "Ira Sachs"
+ ],
+ "genre": [
+ "Indie film",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/four_brothers_2005",
+ "initial_release_date": "2005-08-12",
+ "name": "Four Brothers",
+ "directed_by": [
+ "John Singleton"
+ ],
+ "genre": [
+ "Action Film",
+ "Crime Fiction",
+ "Thriller",
+ "Action/Adventure",
+ "Family Drama",
+ "Crime Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/frailty",
+ "initial_release_date": "2001-11-17",
+ "name": "Frailty",
+ "directed_by": [
+ "Bill Paxton"
+ ],
+ "genre": [
+ "Psychological thriller",
+ "Thriller",
+ "Crime Fiction",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/frankenfish",
+ "initial_release_date": "2004-10-09",
+ "name": "Frankenfish",
+ "directed_by": [
+ "Mark A.Z. Dipp\u00e9"
+ ],
+ "genre": [
+ "Action Film",
+ "Horror",
+ "Natural horror film",
+ "Monster",
+ "Science Fiction"
+ ]
+ },
+ {
+ "id": "/en/franklin_and_grannys_secret",
+ "initial_release_date": "2006-12-20",
+ "name": "Franklin and the Turtle Lake Treasure",
+ "directed_by": [
+ "Dominique Monf\u00e9ry"
+ ],
+ "genre": [
+ "Family",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/franklin_and_the_green_knight",
+ "initial_release_date": "2000-10-17",
+ "name": "Franklin and the Green Knight",
+ "directed_by": [
+ "John van Bruggen"
+ ],
+ "genre": [
+ "Family",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/franklins_magic_christmas",
+ "initial_release_date": "2001-11-06",
+ "name": "Franklin's Magic Christmas",
+ "directed_by": [
+ "John van Bruggen"
+ ],
+ "genre": [
+ "Family",
+ "Animation"
+ ]
+ },
+ {
+ "id": "/en/freaky_friday_2003",
+ "initial_release_date": "2003-08-04",
+ "name": "Freaky Friday",
+ "directed_by": [
+ "Mark Waters"
+ ],
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/freddy_vs_jason",
+ "initial_release_date": "2003-08-13",
+ "name": "Freddy vs. Jason",
+ "directed_by": [
+ "Ronny Yu"
+ ],
+ "genre": [
+ "Horror",
+ "Thriller",
+ "Slasher",
+ "Action Film",
+ "Crime Fiction"
+ ]
+ },
+ {
+ "id": "/en/free_jimmy",
+ "initial_release_date": "2006-04-21",
+ "name": "Free Jimmy",
+ "directed_by": [
+ "Christopher Nielsen"
+ ],
+ "genre": [
+ "Anime",
+ "Animation",
+ "Black comedy",
+ "Satire",
+ "Stoner film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/free_zone",
+ "initial_release_date": "2005-05-19",
+ "name": "Free Zone",
+ "directed_by": [
+ "Amos Gitai"
+ ],
+ "genre": [
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/freedomland",
+ "initial_release_date": "2006-02-17",
+ "name": "Freedomland",
+ "directed_by": [
+ "Joe Roth"
+ ],
+ "genre": [
+ "Mystery",
+ "Thriller",
+ "Crime Fiction",
+ "Film adaptation",
+ "Crime Thriller",
+ "Crime Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/french_bean",
+ "initial_release_date": "2007-03-22",
+ "name": "Mr. Bean's Holiday",
+ "directed_by": [
+ "Steve Bendelack"
+ ],
+ "genre": [
+ "Family",
+ "Comedy",
+ "Road movie"
+ ]
+ },
+ {
+ "id": "/en/frequency_2000",
+ "initial_release_date": "2000-04-28",
+ "name": "Frequency",
+ "directed_by": [
+ "Gregory Hoblit"
+ ],
+ "genre": [
+ "Thriller",
+ "Time travel",
+ "Science Fiction",
+ "Suspense",
+ "Fantasy",
+ "Crime Fiction",
+ "Family Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/frida",
+ "initial_release_date": "2002-08-29",
+ "name": "Frida",
+ "directed_by": [
+ "Julie Taymor"
+ ],
+ "genre": [
+ "Biographical film",
+ "Romance Film",
+ "Political drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/friday_after_next",
+ "initial_release_date": "2002-11-22",
+ "name": "Friday After Next",
+ "directed_by": [
+ "Marcus Raboy"
+ ],
+ "genre": [
+ "Buddy film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/friday_night_lights",
+ "initial_release_date": "2004-10-06",
+ "name": "Friday Night Lights",
+ "directed_by": [
+ "Peter Berg"
+ ],
+ "genre": [
+ "Action Film",
+ "Sports",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/friends_2001",
+ "initial_release_date": "2001-01-14",
+ "name": "Friends",
+ "directed_by": [
+ "Siddique"
+ ],
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama",
+ "Tamil cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/friends_with_money",
+ "initial_release_date": "2006-04-07",
+ "name": "Friends with Money",
+ "directed_by": [
+ "Nicole Holofcener"
+ ],
+ "genre": [
+ "Romance Film",
+ "Indie film",
+ "Comedy-drama",
+ "Comedy of manners",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/fro_the_movie",
+ "name": "FRO - The Movie",
+ "directed_by": [
+ "Brad Gashler",
+ "Michael J. Brooks"
+ ],
+ "genre": [
+ "Comedy-drama"
+ ]
+ },
+ {
+ "id": "/en/from_hell_2001",
+ "initial_release_date": "2001-09-08",
+ "name": "From Hell",
+ "directed_by": [
+ "Allen Hughes",
+ "Albert Hughes"
+ ],
+ "genre": [
+ "Thriller",
+ "Mystery",
+ "Biographical film",
+ "Crime Fiction",
+ "Slasher",
+ "Film adaptation",
+ "Horror",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/from_janet_to_damita_jo_the_videos",
+ "initial_release_date": "2004-09-07",
+ "name": "From Janet to Damita Jo: The Videos",
+ "directed_by": [
+ "Jonathan Dayton",
+ "Mark Romanek",
+ "Paul Hunter"
+ ],
+ "genre": [
+ "Music video"
+ ]
+ },
+ {
+ "id": "/en/from_justin_to_kelly",
+ "initial_release_date": "2003-06-20",
+ "name": "From Justin to Kelly",
+ "directed_by": [
+ "Robert Iscove"
+ ],
+ "genre": [
+ "Musical",
+ "Romantic comedy",
+ "Teen film",
+ "Romance Film",
+ "Beach Film",
+ "Musical comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/frostbite_2005",
+ "name": "Frostbite",
+ "directed_by": [
+ "Jonathan Schwartz"
+ ],
+ "genre": [
+ "Sports",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/fubar_2002",
+ "initial_release_date": "2002-01-01",
+ "name": "FUBAR",
+ "directed_by": [
+ "Michael Dowse"
+ ],
+ "genre": [
+ "Mockumentary",
+ "Indie film",
+ "Buddy film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/fuck_2005",
+ "initial_release_date": "2005-11-07",
+ "name": "Fuck",
+ "directed_by": [
+ "Steve Anderson"
+ ],
+ "genre": [
+ "Documentary film",
+ "Indie film",
+ "Political cinema"
+ ]
+ },
+ {
+ "id": "/en/fuckland",
+ "initial_release_date": "2000-09-21",
+ "name": "Fuckland",
+ "directed_by": [
+ "Jos\u00e9 Luis M\u00e1rques"
+ ],
+ "genre": [
+ "Indie film",
+ "Dogme 95",
+ "Comedy-drama",
+ "Satire",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/full_court_miracle",
+ "initial_release_date": "2003-11-21",
+ "name": "Full-Court Miracle",
+ "directed_by": [
+ "Stuart Gillard"
+ ],
+ "genre": [
+ "Family",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/full_disclosure_2001",
+ "initial_release_date": "2001-05-15",
+ "name": "Full Disclosure",
+ "directed_by": [
+ "John Bradshaw"
+ ],
+ "genre": [
+ "Thriller",
+ "Action/Adventure",
+ "Action Film",
+ "Political thriller"
+ ]
+ },
+ {
+ "id": "/en/full_frontal",
+ "initial_release_date": "2002-08-02",
+ "name": "Full Frontal",
+ "directed_by": [
+ "Steven Soderbergh"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "Comedy-drama",
+ "Ensemble Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/wikipedia/ja/$5287$5834$7248_$92FC$306E$932C$91D1$8853$5E2B_$30B7$30E3$30F3$30D0$30E9$3092$5F81$304F$8005",
+ "initial_release_date": "2005-07-23",
+ "name": "Fullmetal Alchemist the Movie: Conqueror of Shamballa",
+ "directed_by": [
+ "Seiji Mizushima"
+ ],
+ "genre": [
+ "Anime",
+ "Fantasy",
+ "Action Film",
+ "Animation",
+ "Adventure Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/fulltime_killer",
+ "initial_release_date": "2001-08-03",
+ "name": "Fulltime Killer",
+ "directed_by": [
+ "Johnnie To",
+ "Wai Ka-fai"
+ ],
+ "genre": [
+ "Action Film",
+ "Thriller",
+ "Crime Fiction",
+ "Martial Arts Film",
+ "Action Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/fun_with_dick_and_jane_2005",
+ "initial_release_date": "2005-12-21",
+ "name": "Fun with Dick and Jane",
+ "directed_by": [
+ "Dean Parisot"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/funny_ha_ha",
+ "name": "Funny Ha Ha",
+ "directed_by": [
+ "Andrew Bujalski"
+ ],
+ "genre": [
+ "Indie film",
+ "Romantic comedy",
+ "Romance Film",
+ "Mumblecore",
+ "Comedy-drama",
+ "Comedy of manners",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/g-sale",
+ "initial_release_date": "2005-11-15",
+ "name": "G-Sale",
+ "directed_by": [
+ "Randy Nargi"
+ ],
+ "genre": [
+ "Mockumentary",
+ "Comedy of manners",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/gabrielle_2006",
+ "initial_release_date": "2005-09-05",
+ "name": "Gabrielle",
+ "directed_by": [
+ "Patrice Ch\u00e9reau"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/gagamboy",
+ "initial_release_date": "2004-01-01",
+ "name": "Gagamboy",
+ "directed_by": [
+ "Erik Matti"
+ ],
+ "genre": [
+ "Action Film",
+ "Science Fiction",
+ "Comedy",
+ "Fantasy"
+ ]
+ },
+ {
+ "id": "/en/gallipoli_2005",
+ "initial_release_date": "2005-03-18",
+ "name": "Gallipoli",
+ "directed_by": [
+ "Tolga \u00d6rnek"
+ ],
+ "genre": [
+ "Documentary film",
+ "War film"
+ ]
+ },
+ {
+ "id": "/en/game_6_2006",
+ "initial_release_date": "2006-03-10",
+ "name": "Game 6",
+ "directed_by": [
+ "Michael Hoffman"
+ ],
+ "genre": [
+ "Indie film",
+ "Sports",
+ "Comedy-drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/game_over_2003",
+ "initial_release_date": "2003-06-23",
+ "name": "Maximum Surge",
+ "directed_by": [
+ "Jason Bourque"
+ ],
+ "genre": [
+ "Science Fiction"
+ ]
+ },
+ {
+ "id": "/en/gamma_squad",
+ "initial_release_date": "2004-06-14",
+ "name": "Expendable",
+ "directed_by": [
+ "Nathaniel Barker",
+ "Eliot Lash"
+ ],
+ "genre": [
+ "Indie film",
+ "Short Film",
+ "War film"
+ ]
+ },
+ {
+ "id": "/en/gangotri_2003",
+ "initial_release_date": "2003-03-28",
+ "name": "Gangotri",
+ "directed_by": [
+ "Kovelamudi Raghavendra Rao"
+ ],
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/gangs_of_new_york",
+ "initial_release_date": "2002-12-09",
+ "name": "Gangs of New York",
+ "directed_by": [
+ "Martin Scorsese"
+ ],
+ "genre": [
+ "Crime Fiction",
+ "Historical drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/gangster_2006",
+ "initial_release_date": "2006-04-28",
+ "name": "Gangster",
+ "directed_by": [
+ "Anurag Basu"
+ ],
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Mystery",
+ "World cinema",
+ "Crime Fiction",
+ "Bollywood",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/gangster_no_1",
+ "initial_release_date": "2000-06-09",
+ "name": "Gangster No. 1",
+ "directed_by": [
+ "Paul McGuigan"
+ ],
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Historical period drama",
+ "Action Film",
+ "Crime Thriller",
+ "Action/Adventure",
+ "Gangster Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/garam_masala_2005",
+ "initial_release_date": "2005-11-02",
+ "name": "Garam Masala",
+ "directed_by": [
+ "Priyadarshan"
+ ],
+ "genre": [
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/garcon_stupide",
+ "initial_release_date": "2004-03-10",
+ "name": "Gar\u00e7on stupide",
+ "directed_by": [
+ "Lionel Baier"
+ ],
+ "genre": [
+ "LGBT",
+ "World cinema",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Coming of age",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/garden_state",
+ "initial_release_date": "2004-01-16",
+ "name": "Garden State",
+ "directed_by": [
+ "Zach Braff"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Coming of age",
+ "Romance Film",
+ "Comedy-drama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/garfield_2004",
+ "initial_release_date": "2004-06-06",
+ "name": "Garfield: The Movie",
+ "directed_by": [
+ "Peter Hewitt"
+ ],
+ "genre": [
+ "Slapstick",
+ "Animation",
+ "Family",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/garfield_a_tail_of_two_kitties",
+ "initial_release_date": "2006-06-15",
+ "name": "Garfield: A Tail of Two Kitties",
+ "directed_by": [
+ "Tim Hill"
+ ],
+ "genre": [
+ "Family",
+ "Animal Picture",
+ "Children's/Family",
+ "Family-Oriented Adventure",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/gene-x",
+ "name": "Gene-X",
+ "directed_by": [
+ "Martin Simpson"
+ ],
+ "genre": [
+ "Thriller",
+ "Romance Film"
+ ]
+ },
+ {
+ "id": "/en/george_of_the_jungle_2",
+ "initial_release_date": "2003-08-18",
+ "name": "George of the Jungle 2",
+ "directed_by": [
+ "David Grossman"
+ ],
+ "genre": [
+ "Parody",
+ "Slapstick",
+ "Family",
+ "Jungle Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/george_washington_2000",
+ "initial_release_date": "2000-09-29",
+ "name": "George Washington",
+ "directed_by": [
+ "David Gordon Green"
+ ],
+ "genre": [
+ "Coming of age",
+ "Indie film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/georgia_rule",
+ "initial_release_date": "2007-05-10",
+ "name": "Georgia Rule",
+ "directed_by": [
+ "Garry Marshall"
+ ],
+ "genre": [
+ "Comedy-drama",
+ "Romance Film",
+ "Melodrama",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/gerry",
+ "initial_release_date": "2003-02-14",
+ "name": "Gerry",
+ "directed_by": [
+ "Gus Van Sant"
+ ],
+ "genre": [
+ "Indie film",
+ "Adventure Film",
+ "Mystery",
+ "Avant-garde",
+ "Experimental film",
+ "Buddy film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/get_a_clue",
+ "initial_release_date": "2002-06-28",
+ "name": "Get a Clue",
+ "directed_by": [
+ "Maggie Greenwald Mansfield"
+ ],
+ "genre": [
+ "Mystery",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/get_over_it",
+ "initial_release_date": "2001-03-09",
+ "name": "Get Over It",
+ "directed_by": [
+ "Tommy O'Haver"
+ ],
+ "genre": [
+ "Musical",
+ "Romantic comedy",
+ "Teen film",
+ "Romance Film",
+ "School story",
+ "Farce",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Sex comedy",
+ "Musical comedy",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/get_rich_or_die_tryin",
+ "initial_release_date": "2005-11-09",
+ "name": "Get Rich or Die Tryin'",
+ "directed_by": [
+ "Jim Sheridan"
+ ],
+ "genre": [
+ "Coming of age",
+ "Crime Fiction",
+ "Hip hop film",
+ "Action Film",
+ "Biographical film",
+ "Musical Drama",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/get_up",
+ "name": "Get Up!",
+ "directed_by": [
+ "Kazuyuki Izutsu"
+ ],
+ "genre": [
+ "Musical",
+ "Action Film",
+ "Japanese Movies",
+ "Musical Drama",
+ "Musical comedy",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/getting_my_brother_laid",
+ "name": "Getting My Brother Laid",
+ "directed_by": [
+ "Sven Taddicken"
+ ],
+ "genre": [
+ "Romantic comedy",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/getting_there",
+ "initial_release_date": "2002-06-11",
+ "name": "Getting There: Sweet 16 and Licensed to Drive",
+ "directed_by": [
+ "Steve Purcell"
+ ],
+ "genre": [
+ "Family",
+ "Teen film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/ghajini",
+ "initial_release_date": "2005-09-29",
+ "name": "Ghajini",
+ "directed_by": [
+ "A.R. Murugadoss"
+ ],
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Mystery",
+ "Romance Film",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/gharshana",
+ "initial_release_date": "2004-07-30",
+ "name": "Gharshana",
+ "directed_by": [
+ "Gautham Menon"
+ ],
+ "genre": [
+ "Mystery",
+ "Crime Fiction",
+ "Romance Film",
+ "Action Film",
+ "Tollywood",
+ "World cinema",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/ghilli",
+ "initial_release_date": "2004-04-17",
+ "name": "Ghilli",
+ "directed_by": [
+ "Dharani"
+ ],
+ "genre": [
+ "Sports",
+ "Action Film",
+ "Romance Film",
+ "Comedy"
+ ]
+ },
+ {
+ "id": "/en/ghost_game_2006",
+ "initial_release_date": "2005-09-01",
+ "name": "Ghost Game",
+ "directed_by": [
+ "Joe Knee"
+ ],
+ "genre": [
+ "Horror comedy"
+ ]
+ },
+ {
+ "id": "/en/ghost_house",
+ "initial_release_date": "2004-09-17",
+ "name": "Ghost House",
+ "directed_by": [
+ "Kim Sang-jin"
+ ],
+ "genre": [
+ "Horror",
+ "Horror comedy",
+ "Comedy",
+ "East Asian cinema",
+ "World cinema"
+ ]
+ },
+ {
+ "id": "/en/ghost_in_the_shell_2_innocence",
+ "initial_release_date": "2004-03-06",
+ "name": "Ghost in the Shell 2: Innocence",
+ "directed_by": [
+ "Mamoru Oshii"
+ ],
+ "genre": [
+ "Science Fiction",
+ "Anime",
+ "Action Film",
+ "Animation",
+ "Thriller",
+ "Drama"
+ ]
+ },
+ {
+ "id": "/en/s_a_c_solid_state_society",
+ "initial_release_date": "2006-09-01",
+ "name": "Ghost in the Shell: Solid State Society",
+ "directed_by": [
+ "Kenji Kamiyama"
+ ],
+ "genre": [
+ "Anime",
+ "Science Fiction",
+ "Action Film",
+ "Animation",
+ "Thriller",
+ "Adventure Film",
+ "Fantasy"
+ ]
+ },
+ {
+ "id": "/en/ghost_lake",
+ "initial_release_date": "2005-05-17",
+ "name": "Ghost Lake",
+ "directed_by": [
+ "Jay Woelfel"
+ ],
+ "genre": [
+ "Horror",
+ "Zombie Film"
+ ]
+ },
+ {
+ "id": "/en/ghost_rider_2007",
+ "initial_release_date": "2007-01-15",
+ "name": "Ghost Rider",
+ "genre": [
+ "Adventure Film",
+ "Thriller",
+ "Fantasy",
+ "Superhero movie",
+ "Horror",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mark Steven Johnson"
+ ]
+ },
+ {
+ "id": "/en/ghost_ship_2002",
+ "initial_release_date": "2002-10-22",
+ "name": "Ghost Ship",
+ "genre": [
+ "Horror",
+ "Supernatural",
+ "Slasher"
+ ],
+ "directed_by": [
+ "Steve Beck"
+ ]
+ },
+ {
+ "id": "/en/ghost_world_2001",
+ "initial_release_date": "2001-06-16",
+ "name": "Ghost World",
+ "genre": [
+ "Indie film",
+ "Comedy-drama"
+ ],
+ "directed_by": [
+ "Terry Zwigoff"
+ ]
+ },
+ {
+ "id": "/en/ghosts_of_mars",
+ "initial_release_date": "2001-08-24",
+ "name": "Ghosts of Mars",
+ "genre": [
+ "Adventure Film",
+ "Science Fiction",
+ "Horror",
+ "Supernatural",
+ "Action Film",
+ "Thriller",
+ "Space Western"
+ ],
+ "directed_by": [
+ "John Carpenter"
+ ]
+ },
+ {
+ "id": "/m/06ry42",
+ "initial_release_date": "2004-10-28",
+ "name": "The International Playboys' First Movie: Ghouls Gone Wild!",
+ "genre": [
+ "Short Film",
+ "Musical"
+ ],
+ "directed_by": [
+ "Ted Geoghegan"
+ ]
+ },
+ {
+ "id": "/en/gie",
+ "initial_release_date": "2005-07-14",
+ "name": "Gie",
+ "genre": [
+ "Biographical film",
+ "Political drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Riri Riza"
+ ]
+ },
+ {
+ "id": "/en/gigantic_2003",
+ "initial_release_date": "2003-03-10",
+ "name": "Gigantic (A Tale of Two Johns)",
+ "genre": [
+ "Indie film",
+ "Documentary film"
+ ],
+ "directed_by": [
+ "A. J. Schnack"
+ ]
+ },
+ {
+ "id": "/en/gigli",
+ "initial_release_date": "2003-07-27",
+ "name": "Gigli",
+ "genre": [
+ "Crime Thriller",
+ "Romance Film",
+ "Romantic comedy",
+ "Crime Fiction",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Martin Brest"
+ ]
+ },
+ {
+ "id": "/en/ginger_snaps",
+ "initial_release_date": "2000-09-10",
+ "name": "Ginger Snaps",
+ "genre": [
+ "Teen film",
+ "Horror",
+ "Cult film"
+ ],
+ "directed_by": [
+ "John Fawcett"
+ ]
+ },
+ {
+ "id": "/en/ginger_snaps_2_unleashed",
+ "initial_release_date": "2004-01-30",
+ "name": "Ginger Snaps 2: Unleashed",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Teen film",
+ "Creature Film",
+ "Feminist Film",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Brett Sullivan"
+ ]
+ },
+ {
+ "id": "/en/girlfight",
+ "initial_release_date": "2000-01-22",
+ "name": "Girlfight",
+ "genre": [
+ "Teen film",
+ "Sports",
+ "Coming-of-age story",
+ "Drama"
+ ],
+ "directed_by": [
+ "Karyn Kusama"
+ ]
+ },
+ {
+ "id": "/en/gladiator_2000",
+ "initial_release_date": "2000-05-01",
+ "name": "Gladiator",
+ "genre": [
+ "Historical drama",
+ "Epic film",
+ "Action Film",
+ "Adventure Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ridley Scott"
+ ]
+ },
+ {
+ "id": "/en/glastonbury_2006",
+ "initial_release_date": "2006-04-14",
+ "name": "Glastonbury",
+ "genre": [
+ "Documentary film",
+ "Music",
+ "Concert film",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Julien Temple"
+ ]
+ },
+ {
+ "id": "/en/glastonbury_anthems",
+ "name": "Glastonbury Anthems",
+ "genre": [
+ "Documentary film",
+ "Music",
+ "Concert film"
+ ],
+ "directed_by": [
+ "Gavin Taylor",
+ "Declan Lowney",
+ "Janet Fraser-Crook",
+ "Phil Heyes"
+ ]
+ },
+ {
+ "id": "/en/glitter_2001",
+ "initial_release_date": "2001-09-21",
+ "name": "Glitter",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Musical Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Vondie Curtis-Hall"
+ ]
+ },
+ {
+ "id": "/en/global_heresy",
+ "initial_release_date": "2002-09-03",
+ "name": "Global Heresy",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Sidney J. Furie"
+ ]
+ },
+ {
+ "id": "/en/glory_road_2006",
+ "initial_release_date": "2006-01-13",
+ "name": "Glory Road",
+ "genre": [
+ "Sports",
+ "Historical period drama",
+ "Docudrama",
+ "Drama"
+ ],
+ "directed_by": [
+ "James Gartner"
+ ]
+ },
+ {
+ "id": "/en/go_figure_2005",
+ "initial_release_date": "2005-06-10",
+ "name": "Go Figure",
+ "genre": [
+ "Family",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Francine McDougall"
+ ]
+ },
+ {
+ "id": "/en/goal__2005",
+ "initial_release_date": "2005-09-08",
+ "name": "Goal!",
+ "genre": [
+ "Sports",
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Danny Cannon"
+ ]
+ },
+ {
+ "id": "/en/goal_2_living_the_dream",
+ "initial_release_date": "2007-02-09",
+ "name": "Goal II: Living the Dream",
+ "genre": [
+ "Sports",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jaume Collet-Serra"
+ ]
+ },
+ {
+ "id": "/en/god_grew_tired_of_us",
+ "initial_release_date": "2006-09-04",
+ "name": "God Grew Tired of Us",
+ "genre": [
+ "Documentary film",
+ "Indie film",
+ "Historical fiction"
+ ],
+ "directed_by": [
+ "Christopher Dillon Quinn",
+ "Tommy Walker"
+ ]
+ },
+ {
+ "id": "/en/god_on_my_side",
+ "initial_release_date": "2006-11-02",
+ "name": "God on My Side",
+ "genre": [
+ "Documentary film",
+ "Christian film"
+ ],
+ "directed_by": [
+ "Andrew Denton"
+ ]
+ },
+ {
+ "id": "/en/godavari",
+ "initial_release_date": "2006-05-19",
+ "name": "Godavari",
+ "genre": [
+ "Romance Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Sekhar Kammula"
+ ]
+ },
+ {
+ "id": "/en/godfather",
+ "initial_release_date": "2006-02-24",
+ "name": "Varalaru",
+ "genre": [
+ "Action Film",
+ "Musical",
+ "Romance Film",
+ "Tamil cinema",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "K. S. Ravikumar"
+ ]
+ },
+ {
+ "id": "/en/godsend",
+ "initial_release_date": "2004-04-30",
+ "name": "Godsend",
+ "genre": [
+ "Thriller",
+ "Science Fiction",
+ "Horror",
+ "Psychological thriller",
+ "Sci-Fi Horror",
+ "Drama"
+ ],
+ "directed_by": [
+ "Nick Hamm"
+ ]
+ },
+ {
+ "id": "/en/godzilla_3d_to_the_max",
+ "initial_release_date": "2007-09-12",
+ "name": "Godzilla 3D to the MAX",
+ "genre": [
+ "Horror",
+ "Action Film",
+ "Science Fiction",
+ "Short Film"
+ ],
+ "directed_by": [
+ "Keith Melton",
+ "Yoshimitsu Banno"
+ ]
+ },
+ {
+ "id": "/en/godzilla_against_mechagodzilla",
+ "initial_release_date": "2002-12-15",
+ "name": "Godzilla Against Mechagodzilla",
+ "genre": [
+ "Monster",
+ "Science Fiction",
+ "Cult film",
+ "World cinema",
+ "Action Film",
+ "Creature Film",
+ "Japanese Movies"
+ ],
+ "directed_by": [
+ "Masaaki Tezuka"
+ ]
+ },
+ {
+ "id": "/en/godzilla_vs_megaguirus",
+ "initial_release_date": "2000-11-03",
+ "name": "Godzilla vs. Megaguirus",
+ "genre": [
+ "Monster",
+ "World cinema",
+ "Science Fiction",
+ "Cult film",
+ "Action Film",
+ "Creature Film",
+ "Japanese Movies"
+ ],
+ "directed_by": [
+ "Masaaki Tezuka"
+ ]
+ },
+ {
+ "id": "/en/godzilla_tokyo_sos",
+ "initial_release_date": "2003-11-03",
+ "name": "Godzilla: Tokyo SOS",
+ "genre": [
+ "Monster",
+ "Fantasy",
+ "World cinema",
+ "Action/Adventure",
+ "Science Fiction",
+ "Cult film",
+ "Japanese Movies"
+ ],
+ "directed_by": [
+ "Masaaki Tezuka"
+ ]
+ },
+ {
+ "id": "/wikipedia/fr/Godzilla$002C_Mothra_and_King_Ghidorah$003A_Giant_Monsters_All-Out_Attack",
+ "initial_release_date": "2001-11-03",
+ "name": "Godzilla, Mothra and King Ghidorah: Giant Monsters All-Out Attack",
+ "genre": [
+ "Science Fiction",
+ "Action Film",
+ "Adventure Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Shusuke Kaneko"
+ ]
+ },
+ {
+ "id": "/en/godzilla_final_wars",
+ "initial_release_date": "2004-11-29",
+ "name": "Godzilla: Final Wars",
+ "genre": [
+ "Fantasy",
+ "Science Fiction",
+ "Monster movie"
+ ],
+ "directed_by": [
+ "Ryuhei Kitamura"
+ ]
+ },
+ {
+ "id": "/en/going_the_distance",
+ "initial_release_date": "2004-08-20",
+ "name": "Going the Distance",
+ "genre": [
+ "Comedy"
+ ],
+ "directed_by": [
+ "Mark Griffiths"
+ ]
+ },
+ {
+ "id": "/en/going_to_the_mat",
+ "initial_release_date": "2004-03-19",
+ "name": "Going to the Mat",
+ "genre": [
+ "Family",
+ "Sports",
+ "Drama"
+ ],
+ "directed_by": [
+ "Stuart Gillard"
+ ]
+ },
+ {
+ "id": "/en/going_upriver",
+ "initial_release_date": "2004-09-14",
+ "name": "Going Upriver",
+ "genre": [
+ "Documentary film",
+ "War film",
+ "Political cinema"
+ ],
+ "directed_by": [
+ "George Butler"
+ ]
+ },
+ {
+ "id": "/en/golmaal",
+ "initial_release_date": "2006-07-14",
+ "name": "Golmaal: Fun Unlimited",
+ "genre": [
+ "Musical",
+ "Musical comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Rohit Shetty"
+ ]
+ },
+ {
+ "id": "/en/gone_in_sixty_seconds",
+ "initial_release_date": "2000-06-05",
+ "name": "Gone in 60 Seconds",
+ "genre": [
+ "Thriller",
+ "Action Film",
+ "Crime Fiction",
+ "Crime Thriller",
+ "Heist film",
+ "Action/Adventure"
+ ],
+ "directed_by": [
+ "Dominic Sena"
+ ]
+ },
+ {
+ "id": "/en/good_bye_lenin",
+ "initial_release_date": "2003-02-09",
+ "name": "Good bye, Lenin!",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "Drama",
+ "Tragicomedy"
+ ],
+ "directed_by": [
+ "Wolfgang Becker"
+ ]
+ },
+ {
+ "id": "/en/good_luck_chuck",
+ "initial_release_date": "2007-06-13",
+ "name": "Good Luck Chuck",
+ "genre": [
+ "Romance Film",
+ "Fantasy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mark Helfrich"
+ ]
+ },
+ {
+ "id": "/en/good_night_and_good_luck",
+ "initial_release_date": "2005-09-01",
+ "name": "Good Night, and Good Luck",
+ "genre": [
+ "Political drama",
+ "Historical drama",
+ "Docudrama",
+ "Biographical film",
+ "Historical fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "George Clooney"
+ ]
+ },
+ {
+ "id": "/en/goodbye_dragon_inn",
+ "initial_release_date": "2003-12-12",
+ "name": "Goodbye, Dragon Inn",
+ "genre": [
+ "Comedy-drama",
+ "Comedy of manners",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Tsai Ming-liang"
+ ]
+ },
+ {
+ "id": "/en/gosford_park",
+ "initial_release_date": "2001-11-07",
+ "name": "Gosford Park",
+ "genre": [
+ "Mystery",
+ "Drama"
+ ],
+ "directed_by": [
+ "Robert Altman"
+ ]
+ },
+ {
+ "id": "/en/gothika",
+ "initial_release_date": "2003-11-13",
+ "name": "Gothika",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Psychological thriller",
+ "Supernatural",
+ "Crime Thriller",
+ "Mystery"
+ ],
+ "directed_by": [
+ "Mathieu Kassovitz"
+ ]
+ },
+ {
+ "id": "/en/gotta_kick_it_up",
+ "name": "Gotta Kick It Up!",
+ "genre": [
+ "Teen film",
+ "Television film",
+ "Children's/Family",
+ "Family"
+ ],
+ "directed_by": [
+ "Ram\u00f3n Men\u00e9ndez"
+ ]
+ },
+ {
+ "id": "/en/goyas_ghosts",
+ "initial_release_date": "2006-11-08",
+ "name": "Goya's Ghosts",
+ "genre": [
+ "Biographical film",
+ "War film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Milo\u0161 Forman"
+ ]
+ },
+ {
+ "id": "/en/gozu",
+ "initial_release_date": "2003-07-12",
+ "name": "Gozu",
+ "genre": [
+ "Horror",
+ "Surrealism",
+ "World cinema",
+ "Japanese Movies",
+ "Horror comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Takashi Miike"
+ ]
+ },
+ {
+ "id": "/en/grande_ecole",
+ "initial_release_date": "2004-02-04",
+ "name": "Grande \u00c9cole",
+ "genre": [
+ "World cinema",
+ "LGBT",
+ "Romance Film",
+ "Gay",
+ "Gay Interest",
+ "Gay Themed",
+ "Ensemble Film",
+ "Erotic Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Robert Salis"
+ ]
+ },
+ {
+ "id": "/en/grandmas_boy",
+ "initial_release_date": "2006-01-06",
+ "name": "Grandma's Boy",
+ "genre": [
+ "Stoner film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Nicholaus Goossen"
+ ]
+ },
+ {
+ "id": "/en/grayson_2004",
+ "initial_release_date": "2004-07-20",
+ "name": "Grayson",
+ "genre": [
+ "Indie film",
+ "Fan film",
+ "Short Film"
+ ],
+ "directed_by": [
+ "John Fiorella"
+ ]
+ },
+ {
+ "id": "/en/grbavica_2006",
+ "initial_release_date": "2006-02-12",
+ "name": "Grbavica: The Land of My Dreams",
+ "genre": [
+ "War film",
+ "Art film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jasmila \u017dbani\u0107"
+ ]
+ },
+ {
+ "id": "/en/green_street",
+ "initial_release_date": "2005-03-12",
+ "name": "Green Street",
+ "genre": [
+ "Sports",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Lexi Alexander"
+ ]
+ },
+ {
+ "id": "/en/green_tea_2003",
+ "initial_release_date": "2003-08-18",
+ "name": "Green Tea",
+ "genre": [
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Zhang Yuan"
+ ]
+ },
+ {
+ "id": "/en/greenfingers",
+ "initial_release_date": "2001-09-14",
+ "name": "Greenfingers",
+ "genre": [
+ "Comedy-drama",
+ "Prison film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Joel Hershman"
+ ]
+ },
+ {
+ "id": "/en/gridiron_gang",
+ "initial_release_date": "2006-09-15",
+ "name": "Gridiron Gang",
+ "genre": [
+ "Sports",
+ "Crime Fiction",
+ "Drama"
+ ],
+ "directed_by": [
+ "Phil Joanou"
+ ]
+ },
+ {
+ "id": "/en/grill_point",
+ "initial_release_date": "2002-02-12",
+ "name": "Grill Point",
+ "genre": [
+ "Drama",
+ "Comedy",
+ "Tragicomedy",
+ "Comedy-drama"
+ ],
+ "directed_by": [
+ "Andreas Dresen"
+ ]
+ },
+ {
+ "id": "/en/grilled",
+ "initial_release_date": "2006-07-11",
+ "name": "Grilled",
+ "genre": [
+ "Black comedy",
+ "Buddy film",
+ "Workplace Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jason Ensler"
+ ]
+ },
+ {
+ "id": "/en/grind_house",
+ "initial_release_date": "2007-04-06",
+ "name": "Grindhouse",
+ "genre": [
+ "Slasher",
+ "Thriller",
+ "Action Film",
+ "Horror",
+ "Zombie Film"
+ ],
+ "directed_by": [
+ "Robert Rodriguez",
+ "Quentin Tarantino",
+ "Eli Roth",
+ "Edgar Wright",
+ "Rob Zombie",
+ "Jason Eisener"
+ ]
+ },
+ {
+ "id": "/en/grizzly_falls",
+ "initial_release_date": "2004-06-28",
+ "name": "Grizzly Falls",
+ "genre": [
+ "Adventure Film",
+ "Animal Picture",
+ "Family-Oriented Adventure",
+ "Family",
+ "Drama"
+ ],
+ "directed_by": [
+ "Stewart Raffill"
+ ]
+ },
+ {
+ "id": "/en/grizzly_man",
+ "initial_release_date": "2005-01-24",
+ "name": "Grizzly Man",
+ "genre": [
+ "Documentary film",
+ "Biographical film"
+ ],
+ "directed_by": [
+ "Werner Herzog"
+ ]
+ },
+ {
+ "id": "/en/grodmin",
+ "name": "GRODMIN",
+ "genre": [
+ "Avant-garde",
+ "Experimental film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jim Horwitz"
+ ]
+ },
+ {
+ "id": "/en/gudumba_shankar",
+ "initial_release_date": "2004-09-09",
+ "name": "Gudumba Shankar",
+ "genre": [
+ "Action Film",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Veera Shankar"
+ ]
+ },
+ {
+ "id": "/en/che_part_two",
+ "initial_release_date": "2008-05-21",
+ "name": "Che: Part Two",
+ "genre": [
+ "Biographical film",
+ "War film",
+ "Historical drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Steven Soderbergh"
+ ]
+ },
+ {
+ "id": "/en/guess_who_2005",
+ "initial_release_date": "2005-03-25",
+ "name": "Guess Who",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy of manners",
+ "Domestic Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Kevin Rodney Sullivan"
+ ]
+ },
+ {
+ "id": "/en/gunner_palace",
+ "initial_release_date": "2005-03-04",
+ "name": "Gunner Palace",
+ "genre": [
+ "Documentary film",
+ "Indie film",
+ "War film"
+ ],
+ "directed_by": [
+ "Michael Tucker",
+ "Petra Epperlein"
+ ]
+ },
+ {
+ "id": "/en/guru_2007",
+ "initial_release_date": "2007-01-12",
+ "name": "Guru",
+ "genre": [
+ "Biographical film",
+ "Musical",
+ "Romance Film",
+ "Drama",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "Mani Ratnam"
+ ]
+ },
+ {
+ "id": "/en/primeval_2007",
+ "initial_release_date": "2007-01-12",
+ "name": "Primeval",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Natural horror film",
+ "Action/Adventure",
+ "Action Film"
+ ],
+ "directed_by": [
+ "Michael Katleman"
+ ]
+ },
+ {
+ "id": "/en/gypsy_83",
+ "name": "Gypsy 83",
+ "genre": [
+ "Coming of age",
+ "LGBT",
+ "Black comedy",
+ "Indie film",
+ "Comedy-drama",
+ "Road movie",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Todd Stephens"
+ ]
+ },
+ {
+ "id": "/en/h_2002",
+ "initial_release_date": "2002-12-27",
+ "name": "H",
+ "genre": [
+ "Thriller",
+ "Horror",
+ "Drama",
+ "Mystery",
+ "Crime Fiction",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Jong-hyuk Lee"
+ ]
+ },
+ {
+ "id": "/en/h_g_wells_the_war_of_the_worlds",
+ "initial_release_date": "2005-06-14",
+ "name": "H. G. Wells' The War of the Worlds",
+ "genre": [
+ "Indie film",
+ "Steampunk",
+ "Science Fiction",
+ "Thriller"
+ ],
+ "directed_by": [
+ "Timothy Hines"
+ ]
+ },
+ {
+ "id": "/en/h_g_wells_war_of_the_worlds",
+ "initial_release_date": "2005-06-28",
+ "name": "H. G. Wells' War of the Worlds",
+ "genre": [
+ "Indie film",
+ "Science Fiction",
+ "Thriller",
+ "Film adaptation",
+ "Action Film",
+ "Alien Film",
+ "Horror",
+ "Mockbuster",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Michael Latt"
+ ]
+ },
+ {
+ "id": "/en/hadh_kar_di_aapne",
+ "initial_release_date": "2000-04-14",
+ "name": "Hadh Kar Di Aapne",
+ "genre": [
+ "Romantic comedy",
+ "Bollywood"
+ ],
+ "directed_by": [
+ "Manoj Agrawal"
+ ]
+ },
+ {
+ "id": "/en/haggard_the_movie",
+ "initial_release_date": "2003-06-24",
+ "name": "Haggard: The Movie",
+ "genre": [
+ "Indie film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Bam Margera"
+ ]
+ },
+ {
+ "id": "/en/haiku_tunnel",
+ "name": "Haiku Tunnel",
+ "genre": [
+ "Black comedy",
+ "Indie film",
+ "Satire",
+ "Workplace Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Jacob Kornbluth",
+ "Josh Kornbluth"
+ ]
+ },
+ {
+ "id": "/en/hairspray",
+ "initial_release_date": "2007-07-13",
+ "name": "Hairspray",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "Comedy",
+ "Musical comedy"
+ ],
+ "directed_by": [
+ "Adam Shankman"
+ ]
+ },
+ {
+ "id": "/en/half_nelson",
+ "initial_release_date": "2006-01-23",
+ "name": "Half Nelson",
+ "genre": [
+ "Social problem film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ryan Fleck"
+ ]
+ },
+ {
+ "id": "/en/half_life_2006",
+ "name": "Half-Life",
+ "genre": [
+ "Fantasy",
+ "Indie film",
+ "Science Fiction",
+ "Fantasy Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Jennifer Phang"
+ ]
+ },
+ {
+ "id": "/en/halloween_resurrection",
+ "initial_release_date": "2002-07-12",
+ "name": "Halloween Resurrection",
+ "genre": [
+ "Slasher",
+ "Horror",
+ "Cult film",
+ "Teen film"
+ ],
+ "directed_by": [
+ "Rick Rosenthal"
+ ]
+ },
+ {
+ "id": "/en/halloweentown_high",
+ "initial_release_date": "2004-10-08",
+ "name": "Halloweentown High",
+ "genre": [
+ "Fantasy",
+ "Teen film",
+ "Fantasy Comedy",
+ "Comedy",
+ "Family"
+ ],
+ "directed_by": [
+ "Mark A.Z. Dipp\u00e9"
+ ]
+ },
+ {
+ "id": "/en/halloweentown_ii_kalabars_revenge",
+ "initial_release_date": "2001-10-12",
+ "name": "Halloweentown II: Kalabar's Revenge",
+ "genre": [
+ "Fantasy",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Family"
+ ],
+ "directed_by": [
+ "Mary Lambert"
+ ]
+ },
+ {
+ "id": "/en/halloweentown_witch_u",
+ "initial_release_date": "2006-10-20",
+ "name": "Return to Halloweentown",
+ "genre": [
+ "Family",
+ "Children's/Family",
+ "Fantasy Comedy",
+ "Comedy"
+ ],
+ "directed_by": [
+ "David Jackson"
+ ]
+ },
+ {
+ "id": "/en/hamlet_2000",
+ "initial_release_date": "2000-05-12",
+ "name": "Hamlet",
+ "genre": [
+ "Thriller",
+ "Romance Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Michael Almereyda"
+ ]
+ },
+ {
+ "id": "/en/hana_alice",
+ "initial_release_date": "2004-03-13",
+ "name": "Hana and Alice",
+ "genre": [
+ "Romance Film",
+ "Romantic comedy",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Shunji Iwai"
+ ]
+ },
+ {
+ "id": "/en/hannibal",
+ "initial_release_date": "2001-02-09",
+ "name": "Hannibal",
+ "genre": [
+ "Thriller",
+ "Psychological thriller",
+ "Horror",
+ "Action Film",
+ "Mystery",
+ "Crime Thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "Ridley Scott"
+ ]
+ },
+ {
+ "id": "/en/hans_och_hennes",
+ "initial_release_date": "2001-01-29",
+ "name": "Making Babies",
+ "genre": [
+ "Drama"
+ ],
+ "directed_by": [
+ "Daniel Lind Lagerl\u00f6f"
+ ]
+ },
+ {
+ "id": "/en/hanuman_2005",
+ "initial_release_date": "2005-10-21",
+ "name": "Hanuman",
+ "genre": [
+ "Animation",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "V.G. Samant",
+ "Milind Ukey"
+ ]
+ },
+ {
+ "id": "/en/hanuman_junction",
+ "initial_release_date": "2001-12-21",
+ "name": "Hanuman Junction",
+ "genre": [
+ "Action Film",
+ "Comedy",
+ "Drama",
+ "Tollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "M.Raja"
+ ]
+ },
+ {
+ "id": "/en/happily_never_after",
+ "initial_release_date": "2006-12-16",
+ "name": "Happily N'Ever After",
+ "genre": [
+ "Fantasy",
+ "Animation",
+ "Family",
+ "Comedy",
+ "Adventure Film"
+ ],
+ "directed_by": [
+ "Paul J. Bolger",
+ "Yvette Kaplan"
+ ]
+ },
+ {
+ "id": "/en/happy_2006",
+ "initial_release_date": "2006-01-27",
+ "name": "Happy",
+ "genre": [
+ "Romance Film",
+ "Musical",
+ "Comedy",
+ "Drama",
+ "Musical comedy",
+ "Musical Drama"
+ ],
+ "directed_by": [
+ "A. Karunakaran"
+ ]
+ },
+ {
+ "id": "/en/happy_endings",
+ "initial_release_date": "2005-01-20",
+ "name": "Happy Endings",
+ "genre": [
+ "LGBT",
+ "Music",
+ "Thriller",
+ "Romantic comedy",
+ "Indie film",
+ "Romance Film",
+ "Comedy",
+ "Drama"
+ ],
+ "directed_by": [
+ "Don Roos"
+ ]
+ },
+ {
+ "id": "/en/happy_ero_christmas",
+ "initial_release_date": "2003-12-17",
+ "name": "Happy Ero Christmas",
+ "genre": [
+ "Romance Film",
+ "Comedy",
+ "East Asian cinema",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Lee Geon-dong"
+ ]
+ },
+ {
+ "id": "/en/happy_feet",
+ "initial_release_date": "2006-11-16",
+ "name": "Happy Feet",
+ "genre": [
+ "Family",
+ "Animation",
+ "Comedy",
+ "Music",
+ "Musical",
+ "Musical comedy"
+ ],
+ "directed_by": [
+ "George Miller",
+ "Warren Coleman",
+ "Judy Morris"
+ ]
+ },
+ {
+ "id": "/wikipedia/en_title/I_Love_New_Year",
+ "initial_release_date": "2013-12-30",
+ "name": "I Love New Year",
+ "genre": [
+ "Caper story",
+ "Crime Fiction",
+ "Romantic comedy",
+ "Romance Film",
+ "Bollywood",
+ "World cinema"
+ ],
+ "directed_by": [
+ "Radhika Rao",
+ "Vinay Sapru"
+ ]
+ },
+ {
+ "id": "/en/har_dil_jo_pyar_karega",
+ "initial_release_date": "2000-07-24",
+ "name": "Har Dil Jo Pyar Karega",
+ "genre": [
+ "Musical",
+ "Romance Film",
+ "World cinema",
+ "Musical Drama",
+ "Drama"
+ ],
+ "directed_by": [
+ "Raj Kanwar"
+ ]
+ },
+ {
+ "id": "/en/hard_candy",
+ "name": "Hard Candy",
+ "genre": [
+ "Psychological thriller",
+ "Thriller",
+ "Suspense",
+ "Indie film",
+ "Erotic thriller",
+ "Drama"
+ ],
+ "directed_by": [
+ "David Slade"
+ ]
+ },
+ {
+ "id": "/en/hard_luck",
+ "initial_release_date": "2006-10-17",
+ "name": "Hard Luck",
+ "genre": [
+ "Thriller",
+ "Crime Fiction",
+ "Action/Adventure",
+ "Action Film",
+ "Drama"
+ ],
+ "directed_by": [
+ "Mario Van Peebles"
+ ]
+ },
+ {
+ "id": "/en/hardball",
+ "initial_release_date": "2001-09-14",
+ "name": "Hardball",
+ "genre": [
+ "Sports",
+ "Drama"
+ ],
+ "directed_by": [
+ "Brian Robbins"
+ ]
+ },
+ {
+ "id": "/en/harold_kumar_go_to_white_castle",
+ "initial_release_date": "2004-05-20",
+ "name": "Harold &amp; Kumar Go to White Castle",
+ "genre": [
+ "Stoner film",
+ "Buddy film",
+ "Adventure Film",
+ "Comedy"
+ ],
+ "directed_by": [
+ "Danny Leiner"
+ ]
+ },
+ {
+ "id": "/en/harry_potter_and_the_chamber_of_secrets_2002",
+ "initial_release_date": "2002-11-03",
+ "name": "Harry Potter and the Chamber of Secrets",
+ "genre": [
+ "Adventure Film",
+ "Family",
+ "Fantasy",
+ "Mystery"
+ ],
+ "directed_by": [
+ "Chris Columbus"
+ ]
+ },
+ {
+ "id": "/en/harry_potter_and_the_goblet_of_fire_2005",
+ "initial_release_date": "2005-11-06",
+ "name": "Harry Potter and the Goblet of Fire",
+ "genre": [
+ "Family",
+ "Fantasy",
+ "Adventure Film",
+ "Thriller",
+ "Science Fiction",
+ "Supernatural",
+ "Mystery",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Fantasy Adventure",
+ "Fiction"
+ ],
+ "directed_by": [
+ "Mike Newell"
+ ]
+ },
+ {
+ "id": "/en/harry_potter_and_the_half_blood_prince_2008",
+ "initial_release_date": "2009-07-06",
+ "name": "Harry Potter and the Half-Blood Prince",
+ "genre": [
+ "Adventure Film",
+ "Fantasy",
+ "Mystery",
+ "Action Film",
+ "Family",
+ "Romance Film",
+ "Children's Fantasy",
+ "Children's/Family",
+ "Fantasy Adventure",
+ "Fiction"
+ ],
+ "directed_by": [
+ "David Yates"
+ ]
+ },
+ {
+ "id": "/en/harry_potter_and_the_order_of_the_phoenix_2007",
+ "initial_release_date": "2007-06-28",
+ "name": "Harry Potter and the Order of the Phoenix",
+ "genre": [
+ "Family",
+ "Mystery",
+ "Adventure Film",
+ "Fantasy",
+ "Fantasy Adventure",
+ "Fiction"
+ ],
+ "directed_by": [
+ "David Yates"
+ ]
+ }
+]
diff --git a/solr-8.1.1/example/films/films.xml b/solr-8.1.1/example/films/films.xml
new file mode 100644
index 000000000..e801ad40f
--- /dev/null
+++ b/solr-8.1.1/example/films/films.xml
@@ -0,0 +1,11438 @@
+<?xml version="1.0" ?>
+<add>
+ <doc>
+ <field name="id">/en/45_2006</field>
+ <field name="directed_by">Gary Lennon</field>
+ <field name="initial_release_date">2006-11-30</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">.45</field>
+ </doc>
+ <doc>
+ <field name="id">/en/9_2005</field>
+ <field name="directed_by">Shane Acker</field>
+ <field name="initial_release_date">2005-04-21</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Apocalyptic and post-apocalyptic fiction</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Fantasy</field>
+ <field name="name">9</field>
+ </doc>
+ <doc>
+ <field name="id">/en/69_2004</field>
+ <field name="directed_by">Lee Sang-il</field>
+ <field name="initial_release_date">2004-07-10</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Drama</field>
+ <field name="name">69</field>
+ </doc>
+ <doc>
+ <field name="id">/en/300_2007</field>
+ <field name="directed_by">Zack Snyder</field>
+ <field name="initial_release_date">2006-12-09</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">War film</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Historical Epic</field>
+ <field name="name">300</field>
+ </doc>
+ <doc>
+ <field name="id">/en/2046_2004</field>
+ <field name="directed_by">Wong Kar-wai</field>
+ <field name="initial_release_date">2004-05-20</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">2046</field>
+ </doc>
+ <doc>
+ <field name="id">/en/quien_es_el_senor_lopez</field>
+ <field name="directed_by">Luis Mandoki</field>
+ <field name="genre">Documentary film</field>
+ <field name="name">¿Quién es el señor López?</field>
+ </doc>
+ <doc>
+ <field name="id">/en/weird_al_yankovic_the_ultimate_video_collection</field>
+ <field name="directed_by">Jay Levey</field>
+ <field name="directed_by">&quot;Weird Al&quot; Yankovic</field>
+ <field name="initial_release_date">2003-11-04</field>
+ <field name="genre">Music video</field>
+ <field name="genre">Parody</field>
+ <field name="name">&quot;Weird Al&quot; Yankovic: The Ultimate Video Collection</field>
+ </doc>
+ <doc>
+ <field name="id">/en/15_park_avenue</field>
+ <field name="directed_by">Aparna Sen</field>
+ <field name="initial_release_date">2005-10-27</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">15 Park Avenue</field>
+ </doc>
+ <doc>
+ <field name="id">/en/2_fast_2_furious</field>
+ <field name="directed_by">John Singleton</field>
+ <field name="initial_release_date">2003-06-03</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="name">2 Fast 2 Furious</field>
+ </doc>
+ <doc>
+ <field name="id">/en/7g_rainbow_colony</field>
+ <field name="directed_by">Selvaraghavan</field>
+ <field name="initial_release_date">2004-10-15</field>
+ <field name="genre">Drama</field>
+ <field name="name">7G Rainbow Colony</field>
+ </doc>
+ <doc>
+ <field name="id">/en/3-iron</field>
+ <field name="directed_by">Kim Ki-duk</field>
+ <field name="initial_release_date">2004-09-07</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">3-Iron</field>
+ </doc>
+ <doc>
+ <field name="id">/en/10_5_apocalypse</field>
+ <field name="directed_by">John Lafia</field>
+ <field name="initial_release_date">2006-03-18</field>
+ <field name="genre">Disaster Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="name">10.5: Apocalypse</field>
+ </doc>
+ <doc>
+ <field name="id">/en/8_mile</field>
+ <field name="directed_by">Curtis Hanson</field>
+ <field name="initial_release_date">2002-09-08</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Hip hop film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">8 Mile</field>
+ </doc>
+ <doc>
+ <field name="id">/en/100_girls</field>
+ <field name="directed_by">Michael Davis</field>
+ <field name="initial_release_date">2001-09-25</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">100 Girls</field>
+ </doc>
+ <doc>
+ <field name="id">/en/40_days_and_40_nights</field>
+ <field name="directed_by">Michael Lehmann</field>
+ <field name="initial_release_date">2002-03-01</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">40 Days and 40 Nights</field>
+ </doc>
+ <doc>
+ <field name="id">/en/50_cent_the_new_breed</field>
+ <field name="directed_by">Don Robinson</field>
+ <field name="directed_by">Damon Johnson</field>
+ <field name="directed_by">Philip Atwell</field>
+ <field name="directed_by">Ian Inaba</field>
+ <field name="directed_by">Stephen Marshall</field>
+ <field name="directed_by">John Quigley</field>
+ <field name="directed_by">Jessy Terrero</field>
+ <field name="directed_by">Noa Shaw</field>
+ <field name="initial_release_date">2003-04-15</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">Biographical film</field>
+ <field name="name">50 Cent: The New Breed</field>
+ </doc>
+ <doc>
+ <field name="id">/en/3_the_dale_earnhardt_story</field>
+ <field name="directed_by">Russell Mulcahy</field>
+ <field name="initial_release_date">2004-12-11</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Auto racing</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="name">3: The Dale Earnhardt Story</field>
+ </doc>
+ <doc>
+ <field name="id">/en/61__2001</field>
+ <field name="directed_by">Billy Crystal</field>
+ <field name="initial_release_date">2001-04-28</field>
+ <field name="genre">Sports</field>
+ <field name="genre">History</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Drama</field>
+ <field name="name">61*</field>
+ </doc>
+ <doc>
+ <field name="id">/en/24_hour_party_people</field>
+ <field name="directed_by">Michael Winterbottom</field>
+ <field name="initial_release_date">2002-02-13</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Music</field>
+ <field name="genre">Drama</field>
+ <field name="name">24 Hour Party People</field>
+ </doc>
+ <doc>
+ <field name="id">/en/10th_wolf</field>
+ <field name="directed_by">Robert Moresco</field>
+ <field name="initial_release_date">2006-08-18</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">10th &amp;amp; Wolf</field>
+ </doc>
+ <doc>
+ <field name="id">/en/25th_hour</field>
+ <field name="directed_by">Spike Lee</field>
+ <field name="initial_release_date">2002-12-16</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">25th Hour</field>
+ </doc>
+ <doc>
+ <field name="id">/en/7_seconds_2005</field>
+ <field name="directed_by">Simon Fellows</field>
+ <field name="initial_release_date">2005-06-28</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="name">7 Seconds</field>
+ </doc>
+ <doc>
+ <field name="id">/en/28_days_later</field>
+ <field name="directed_by">Danny Boyle</field>
+ <field name="initial_release_date">2002-11-01</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="name">28 Days Later</field>
+ </doc>
+ <doc>
+ <field name="id">/en/21_grams</field>
+ <field name="directed_by">Alejandro González Iñárritu</field>
+ <field name="initial_release_date">2003-09-05</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">21 Grams</field>
+ </doc>
+ <doc>
+ <field name="id">/en/9th_company</field>
+ <field name="directed_by">Fedor Bondarchuk</field>
+ <field name="initial_release_date">2005-09-29</field>
+ <field name="genre">War film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">The 9th Company</field>
+ </doc>
+ <doc>
+ <field name="id">/en/102_dalmatians</field>
+ <field name="directed_by">Kevin Lima</field>
+ <field name="initial_release_date">2000-11-22</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">102 Dalmatians</field>
+ </doc>
+ <doc>
+ <field name="id">/en/16_years_of_alcohol</field>
+ <field name="directed_by">Richard Jobson</field>
+ <field name="initial_release_date">2003-08-14</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ <field name="name">16 Years of Alcohol</field>
+ </doc>
+ <doc>
+ <field name="id">/en/12b</field>
+ <field name="directed_by">Jeeva</field>
+ <field name="initial_release_date">2001-09-28</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">12B</field>
+ </doc>
+ <doc>
+ <field name="id">/en/2009_lost_memories</field>
+ <field name="directed_by">Lee Si-myung</field>
+ <field name="initial_release_date">2002-02-01</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="name">2009 Lost Memories</field>
+ </doc>
+ <doc>
+ <field name="id">/en/16_blocks</field>
+ <field name="directed_by">Richard Donner</field>
+ <field name="initial_release_date">2006-03-01</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">16 Blocks</field>
+ </doc>
+ <doc>
+ <field name="id">/en/15_minutes</field>
+ <field name="directed_by">John Herzfeld</field>
+ <field name="initial_release_date">2001-03-01</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">15 Minutes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/50_first_dates</field>
+ <field name="directed_by">Peter Segal</field>
+ <field name="initial_release_date">2004-02-13</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">50 First Dates</field>
+ </doc>
+ <doc>
+ <field name="id">/en/9_songs</field>
+ <field name="directed_by">Michael Winterbottom</field>
+ <field name="initial_release_date">2004-05-16</field>
+ <field name="genre">Erotica</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Erotic Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">9 Songs</field>
+ </doc>
+ <doc>
+ <field name="id">/en/20_fingers_2004</field>
+ <field name="directed_by">Mania Akbari</field>
+ <field name="initial_release_date">2004-09-01</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">20 Fingers</field>
+ </doc>
+ <doc>
+ <field name="id">/en/3_needles</field>
+ <field name="directed_by">Thom Fitzgerald</field>
+ <field name="initial_release_date">2006-12-01</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Social problem film</field>
+ <field name="genre">Chinese Movies</field>
+ <field name="genre">Drama</field>
+ <field name="name">3 Needles</field>
+ </doc>
+ <doc>
+ <field name="id">/en/28_days_2000</field>
+ <field name="directed_by">Betty Thomas</field>
+ <field name="initial_release_date">2000-02-08</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">28 Days</field>
+ </doc>
+ <doc>
+ <field name="id">/en/36_china_town</field>
+ <field name="directed_by">Abbas Burmawalla</field>
+ <field name="directed_by">Mustan Burmawalla</field>
+ <field name="initial_release_date">2006-04-21</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Musical comedy</field>
+ <field name="name">36 China Town</field>
+ </doc>
+ <doc>
+ <field name="id">/en/7_mujeres_1_homosexual_y_carlos</field>
+ <field name="directed_by">Rene Bueno</field>
+ <field name="initial_release_date">2004-06-01</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">7 mujeres, 1 homosexual y Carlos</field>
+ </doc>
+ <doc>
+ <field name="id">/en/88_minutes</field>
+ <field name="directed_by">Jon Avnet</field>
+ <field name="initial_release_date">2007-02-14</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="name">88 Minutes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/500_years_later</field>
+ <field name="directed_by">Owen 'Alik Shahadah</field>
+ <field name="initial_release_date">2005-10-11</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">History</field>
+ <field name="name">500 Years Later</field>
+ </doc>
+ <doc>
+ <field name="id">/en/50_ways_of_saying_fabulous</field>
+ <field name="directed_by">Stewart Main</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Drama</field>
+ <field name="name">50 Ways of Saying Fabulous</field>
+ </doc>
+ <doc>
+ <field name="id">/en/5x2</field>
+ <field name="directed_by">François Ozon</field>
+ <field name="initial_release_date">2004-09-01</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Marriage Drama</field>
+ <field name="genre">Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">5x2</field>
+ </doc>
+ <doc>
+ <field name="id">/en/28_weeks_later</field>
+ <field name="directed_by">Juan Carlos Fresnadillo</field>
+ <field name="initial_release_date">2007-04-26</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="name">28 Weeks Later</field>
+ </doc>
+ <doc>
+ <field name="id">/en/10_5</field>
+ <field name="directed_by">John Lafia</field>
+ <field name="initial_release_date">2004-05-02</field>
+ <field name="genre">Disaster Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Drama</field>
+ <field name="name">10.5</field>
+ </doc>
+ <doc>
+ <field name="id">/en/13_going_on_30</field>
+ <field name="directed_by">Gary Winick</field>
+ <field name="initial_release_date">2004-04-14</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">13 Going on 30</field>
+ </doc>
+ <doc>
+ <field name="id">/en/2ldk</field>
+ <field name="directed_by">Yukihiko Tsutsumi</field>
+ <field name="initial_release_date">2004-05-13</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">2LDK</field>
+ </doc>
+ <doc>
+ <field name="id">/en/7_phere</field>
+ <field name="directed_by">Ishaan Trivedi</field>
+ <field name="initial_release_date">2005-07-29</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">7½ Phere</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_beautiful_mind</field>
+ <field name="directed_by">Ron Howard</field>
+ <field name="initial_release_date">2001-12-13</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Marriage Drama</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Beautiful Mind</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_cinderella_story</field>
+ <field name="directed_by">Mark Rosman</field>
+ <field name="initial_release_date">2004-07-10</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="name">A Cinderella Story</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_cock_and_bull_story</field>
+ <field name="directed_by">Michael Winterbottom</field>
+ <field name="initial_release_date">2005-07-17</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Cock and Bull Story</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_common_thread</field>
+ <field name="directed_by">Éléonore Faucher</field>
+ <field name="initial_release_date">2004-05-14</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Common Thread</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_dirty_shame</field>
+ <field name="directed_by">John Waters</field>
+ <field name="initial_release_date">2004-09-12</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Gross out</field>
+ <field name="genre">Gross-out film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">A Dirty Shame</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_duo_occasion</field>
+ <field name="directed_by">Pierre Lamoureux</field>
+ <field name="initial_release_date">2005-11-22</field>
+ <field name="genre">Music video</field>
+ <field name="name">A Duo Occasion</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_good_year</field>
+ <field name="directed_by">Ridley Scott</field>
+ <field name="initial_release_date">2006-09-09</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Slice of life</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Good Year</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_history_of_violence_2005</field>
+ <field name="directed_by">David Cronenberg</field>
+ <field name="initial_release_date">2005-05-16</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">A History of Violence</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ett_hal_i_mitt_hjarta</field>
+ <field name="directed_by">Lukas Moodysson</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Social problem film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Hole in My Heart</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_knights_tale</field>
+ <field name="directed_by">Brian Helgeland</field>
+ <field name="initial_release_date">2001-03-08</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Costume Adventure</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Knight's Tale</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_league_of_ordinary_gentlemen</field>
+ <field name="directed_by">Christopher Browne</field>
+ <field name="directed_by">Alexander H. Browne</field>
+ <field name="initial_release_date">2006-03-21</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Biographical film</field>
+ <field name="name">A League of Ordinary Gentlemen</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_little_trip_to_heaven</field>
+ <field name="directed_by">Baltasar Kormákur</field>
+ <field name="initial_release_date">2005-12-26</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Detective fiction</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Little Trip to Heaven</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_lot_like_love</field>
+ <field name="directed_by">Nigel Cole</field>
+ <field name="initial_release_date">2005-04-21</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Lot like Love</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_love_song_for_bobby_long</field>
+ <field name="directed_by">Shainee Gabel</field>
+ <field name="initial_release_date">2004-09-02</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Love Song for Bobby Long</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_man_a_real_one</field>
+ <field name="directed_by">Arnaud Larrieu</field>
+ <field name="directed_by">Jean-Marie Larrieu</field>
+ <field name="initial_release_date">2003-05-28</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Man, a Real One</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_midsummer_nights_rave</field>
+ <field name="directed_by">Gil Cates Jr.</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Midsummer Night's Rave</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_mighty_wind</field>
+ <field name="directed_by">Christopher Guest</field>
+ <field name="initial_release_date">2003-03-12</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">A Mighty Wind</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_perfect_day</field>
+ <field name="directed_by">Khalil Joreige</field>
+ <field name="directed_by">Joana Hadjithomas</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Perfect Day</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_prairie_home_companion_2006</field>
+ <field name="directed_by">Robert Altman</field>
+ <field name="initial_release_date">2006-02-12</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Prairie Home Companion</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_ring_of_endless_light_2002</field>
+ <field name="directed_by">Greg Beeman</field>
+ <field name="initial_release_date">2002-08-23</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Ring of Endless Light</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_scanner_darkly_2006</field>
+ <field name="directed_by">Richard Linklater</field>
+ <field name="initial_release_date">2006-07-07</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Dystopia</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Future noir</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Scanner Darkly</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_short_film_about_john_bolton</field>
+ <field name="directed_by">Neil Gaiman</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Graphic &amp;amp; Applied Arts</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Biographical film</field>
+ <field name="name">A Short Film About John Bolton</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_shot_in_the_west</field>
+ <field name="directed_by">Bob Kelly</field>
+ <field name="initial_release_date">2006-07-16</field>
+ <field name="genre">Western</field>
+ <field name="genre">Short Film</field>
+ <field name="name">A Shot in the West</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_sound_of_thunder_2005</field>
+ <field name="directed_by">Peter Hyams</field>
+ <field name="initial_release_date">2005-05-15</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Apocalyptic and post-apocalyptic fiction</field>
+ <field name="genre">Time travel</field>
+ <field name="name">A Sound of Thunder</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_state_of_mind</field>
+ <field name="directed_by">Daniel Gordon</field>
+ <field name="initial_release_date">2005-08-10</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Sports</field>
+ <field name="name">A State of Mind</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_time_for_drunken_horses</field>
+ <field name="directed_by">Bahman Ghobadi</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Time for Drunken Horses</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_ton_image</field>
+ <field name="directed_by">Aruna Villiers</field>
+ <field name="initial_release_date">2004-05-26</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="name">À ton image</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_very_long_engagement</field>
+ <field name="directed_by">Jean-Pierre Jeunet</field>
+ <field name="initial_release_date">2004-10-27</field>
+ <field name="genre">War film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Very Long Engagement</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_view_from_the_eiffel_tower</field>
+ <field name="directed_by">Nikola VukÄević</field>
+ <field name="genre">Drama</field>
+ <field name="name">A View from Eiffel Tower</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_walk_to_remember</field>
+ <field name="directed_by">Adam Shankman</field>
+ <field name="initial_release_date">2002-01-23</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Walk to Remember</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_i</field>
+ <field name="directed_by">Steven Spielberg</field>
+ <field name="initial_release_date">2001-06-26</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Future noir</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">A.I. Artificial Intelligence</field>
+ </doc>
+ <doc>
+ <field name="id">/en/a_k_a_tommy_chong</field>
+ <field name="directed_by">Josh Gilbert</field>
+ <field name="initial_release_date">2006-06-14</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Law &amp;amp; Crime</field>
+ <field name="genre">Biographical film</field>
+ <field name="name">a/k/a Tommy Chong</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aalvar</field>
+ <field name="directed_by">Chella</field>
+ <field name="initial_release_date">2007-01-12</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Aalvar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aap_ki_khatir</field>
+ <field name="directed_by">Dharmesh Darshan</field>
+ <field name="initial_release_date">2006-08-25</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Drama</field>
+ <field name="name">Aap Ki Khatir</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aaru_2005</field>
+ <field name="directed_by">Hari</field>
+ <field name="initial_release_date">2005-12-09</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Aaru</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aata</field>
+ <field name="directed_by">V.N. Aditya</field>
+ <field name="initial_release_date">2007-05-09</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Aata</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aathi</field>
+ <field name="directed_by">Ramana</field>
+ <field name="initial_release_date">2006-01-14</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">Aadhi</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aayitha_ezhuthu</field>
+ <field name="directed_by">Mani Ratnam</field>
+ <field name="initial_release_date">2004-05-21</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Political thriller</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">Aaytha Ezhuthu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/abandon_2002</field>
+ <field name="directed_by">Stephen Gaghan</field>
+ <field name="initial_release_date">2002-10-18</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Drama</field>
+ <field name="name">Abandon</field>
+ </doc>
+ <doc>
+ <field name="id">/en/abduction_the_megumi_yokota_story</field>
+ <field name="directed_by">Patty Kim</field>
+ <field name="directed_by">Chris Sheridan</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Law &amp;amp; Crime</field>
+ <field name="name">Abduction: The Megumi Yokota Story</field>
+ </doc>
+ <doc>
+ <field name="id">/en/about_a_boy_2002</field>
+ <field name="directed_by">Chris Weitz</field>
+ <field name="directed_by">Paul Weitz</field>
+ <field name="initial_release_date">2002-04-26</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">About a Boy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/about_schmidt</field>
+ <field name="directed_by">Alexander Payne</field>
+ <field name="initial_release_date">2002-05-22</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Tragicomedy</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">About Schmidt</field>
+ </doc>
+ <doc>
+ <field name="id">/en/accepted</field>
+ <field name="directed_by">Steve Pink</field>
+ <field name="initial_release_date">2006-08-18</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Accepted</field>
+ </doc>
+ <doc>
+ <field name="id">/en/across_the_hall</field>
+ <field name="directed_by">Alex Merkin</field>
+ <field name="directed_by">Alex Merkin</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Across the Hall</field>
+ </doc>
+ <doc>
+ <field name="id">/en/adam_steve</field>
+ <field name="directed_by">Craig Chester</field>
+ <field name="initial_release_date">2005-04-24</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Adam &amp;amp; Steve</field>
+ </doc>
+ <doc>
+ <field name="id">/en/adam_resurrected</field>
+ <field name="directed_by">Paul Schrader</field>
+ <field name="initial_release_date">2008-08-30</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Adam Resurrected</field>
+ </doc>
+ <doc>
+ <field name="id">/en/adaptation_2002</field>
+ <field name="directed_by">Spike Jonze</field>
+ <field name="initial_release_date">2002-12-06</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Adaptation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/address_unknown</field>
+ <field name="directed_by">Kim Ki-duk</field>
+ <field name="initial_release_date">2001-06-02</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Address Unknown</field>
+ </doc>
+ <doc>
+ <field name="id">/en/adrenaline_rush_2002</field>
+ <field name="directed_by">Marc Fafard</field>
+ <field name="initial_release_date">2002-10-18</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Short Film</field>
+ <field name="name">Adrenaline Rush</field>
+ </doc>
+ <doc>
+ <field name="id">/en/essential_keys_to_better_bowling_2006</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ <field name="name">Essential Keys To Better Bowling</field>
+ </doc>
+ <doc>
+ <field name="id">/en/adventures_into_digital_comics</field>
+ <field name="directed_by">Sébastien Dumesnil</field>
+ <field name="genre">Documentary film</field>
+ <field name="name">Adventures Into Digital Comics</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ae_fond_kiss</field>
+ <field name="directed_by">Ken Loach</field>
+ <field name="initial_release_date">2004-02-13</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Ae Fond Kiss...</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aetbaar</field>
+ <field name="directed_by">Vikram Bhatt</field>
+ <field name="initial_release_date">2004-01-23</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">Aetbaar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aethiree</field>
+ <field name="initial_release_date">2004-04-23</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">K. S. Ravikumar</field>
+ <field name="name">Aethirree</field>
+ </doc>
+ <doc>
+ <field name="id">/en/after_innocence</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Law &amp;amp; Crime</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Jessica Sanders</field>
+ <field name="name">After Innocence</field>
+ </doc>
+ <doc>
+ <field name="id">/en/after_the_sunset</field>
+ <field name="initial_release_date">2004-11-10</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Caper story</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Brett Ratner</field>
+ <field name="name">After the Sunset</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aftermath_2007</field>
+ <field name="initial_release_date">2013-03-01</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Thomas Farone</field>
+ <field name="name">Aftermath</field>
+ </doc>
+ <doc>
+ <field name="id">/en/against_the_ropes</field>
+ <field name="initial_release_date">2004-02-20</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Charles S. Dutton</field>
+ <field name="name">Against the Ropes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/agent_cody_banks_2_destination_london</field>
+ <field name="initial_release_date">2004-03-12</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Spy film</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Kevin Allen</field>
+ <field name="name">Agent Cody Banks 2: Destination London</field>
+ </doc>
+ <doc>
+ <field name="id">/en/agent_one-half</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Brian Bero</field>
+ <field name="name">Agent One-Half</field>
+ </doc>
+ <doc>
+ <field name="id">/en/agnes_and_his_brothers</field>
+ <field name="initial_release_date">2004-09-05</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Oskar Roehler</field>
+ <field name="name">Agnes and His Brothers</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aideista_parhain</field>
+ <field name="initial_release_date">2005-08-25</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Klaus Härö</field>
+ <field name="name">Mother of Mine</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aileen_life_and_death_of_a_serial_killer</field>
+ <field name="initial_release_date">2003-05-10</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Political drama</field>
+ <field name="directed_by">Nick Broomfield</field>
+ <field name="directed_by">Joan Churchill</field>
+ <field name="name">Aileen: Life and Death of a Serial Killer</field>
+ </doc>
+ <doc>
+ <field name="id">/en/air_2005</field>
+ <field name="initial_release_date">2005-02-05</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Osamu Dezaki</field>
+ <field name="name">Air</field>
+ </doc>
+ <doc>
+ <field name="id">/en/air_bud_seventh_inning_fetch</field>
+ <field name="initial_release_date">2002-02-21</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Robert Vince</field>
+ <field name="name">Air Bud: Seventh Inning Fetch</field>
+ </doc>
+ <doc>
+ <field name="id">/en/air_bud_spikes_back</field>
+ <field name="initial_release_date">2003-06-24</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Mike Southon</field>
+ <field name="name">Air Bud: Spikes Back</field>
+ </doc>
+ <doc>
+ <field name="id">/en/air_buddies</field>
+ <field name="initial_release_date">2006-12-10</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animal Picture</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Robert Vince</field>
+ <field name="name">Air Buddies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aitraaz</field>
+ <field name="initial_release_date">2004-11-12</field>
+ <field name="genre">Trial drama</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Abbas Burmawalla</field>
+ <field name="directed_by">Mustan Burmawalla</field>
+ <field name="name">Aitraaz</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aka_2002</field>
+ <field name="initial_release_date">2002-01-19</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Duncan Roy</field>
+ <field name="name">AKA</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aakasha_gopuram</field>
+ <field name="initial_release_date">2008-08-22</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">K.P.Kumaran</field>
+ <field name="name">Aakasha Gopuram</field>
+ </doc>
+ <doc>
+ <field name="id">/en/akbar-jodha</field>
+ <field name="initial_release_date">2008-02-13</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ashutosh Gowariker</field>
+ <field name="name">Jodhaa Akbar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/akeelah_and_the_bee</field>
+ <field name="initial_release_date">2006-03-16</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Doug Atchison</field>
+ <field name="name">Akeelah and the Bee</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aks</field>
+ <field name="initial_release_date">2001-07-13</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Rakeysh Omprakash Mehra</field>
+ <field name="name">The Reflection</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aksar</field>
+ <field name="initial_release_date">2006-02-03</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Anant Mahadevan</field>
+ <field name="name">Aksar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/al_franken_god_spoke</field>
+ <field name="initial_release_date">2006-09-13</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Nick Doob</field>
+ <field name="directed_by">Chris Hegedus</field>
+ <field name="name">Al Franken: God Spoke</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alag</field>
+ <field name="initial_release_date">2006-06-16</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Ashu Trikha</field>
+ <field name="name">Different</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alai</field>
+ <field name="initial_release_date">2003-09-10</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Vikram Kumar</field>
+ <field name="name">Wave</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alaipayuthey</field>
+ <field name="initial_release_date">2000-04-14</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mani Ratnam</field>
+ <field name="name">Waves</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alatriste</field>
+ <field name="initial_release_date">2006-09-01</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">War film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Historical fiction</field>
+ <field name="directed_by">Agustín Díaz Yanes</field>
+ <field name="name">Alatriste</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alex_emma</field>
+ <field name="initial_release_date">2003-06-20</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Rob Reiner</field>
+ <field name="name">Alex &amp;amp; Emma</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alexander_2004</field>
+ <field name="initial_release_date">2004-11-16</field>
+ <field name="genre">War film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Oliver Stone</field>
+ <field name="directed_by">Wilhelm Sasnal</field>
+ <field name="directed_by">Anka Sasnal</field>
+ <field name="name">Alexander</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alexandras_project</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Rolf de Heer</field>
+ <field name="name">Alexandra's Project</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alfie_2004</field>
+ <field name="initial_release_date">2004-10-22</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Remake</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Charles Shyer</field>
+ <field name="name">Alfie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ali_2001</field>
+ <field name="initial_release_date">2001-12-11</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Sports films</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Michael Mann</field>
+ <field name="name">Ali</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ali_g_indahouse</field>
+ <field name="initial_release_date">2002-03-22</field>
+ <field name="genre">Stoner film</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Gross out</field>
+ <field name="genre">Gross-out film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Mark Mylod</field>
+ <field name="name">Ali G Indahouse</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alien_autopsy_2006</field>
+ <field name="initial_release_date">2006-04-07</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jonny Campbell</field>
+ <field name="name">Alien Autopsy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/avp_alien_vs_predator</field>
+ <field name="initial_release_date">2004-08-12</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Monster movie</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="directed_by">Paul W. S. Anderson</field>
+ <field name="name">Alien vs. Predator</field>
+ </doc>
+ <doc>
+ <field name="id">/en/avpr_aliens_vs_predator_requiem</field>
+ <field name="initial_release_date">2007-12-25</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Monster movie</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Colin Strause</field>
+ <field name="directed_by">Greg Strause</field>
+ <field name="name">AVPR: Aliens vs Predator - Requiem</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aliens_of_the_deep</field>
+ <field name="initial_release_date">2005-01-28</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Travel</field>
+ <field name="genre">Education</field>
+ <field name="genre">Biological Sciences</field>
+ <field name="directed_by">James Cameron</field>
+ <field name="directed_by">Steven Quale</field>
+ <field name="directed_by">Steven Quale</field>
+ <field name="name">Aliens of the Deep</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alive_2002</field>
+ <field name="initial_release_date">2002-09-12</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="directed_by">Ryuhei Kitamura</field>
+ <field name="name">Alive</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_about_lily_chou-chou</field>
+ <field name="initial_release_date">2001-09-07</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Shunji Iwai</field>
+ <field name="name">All About Lily Chou-Chou</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_about_the_benjamins</field>
+ <field name="initial_release_date">2002-03-08</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Kevin Bray</field>
+ <field name="name">All About the Benjamins</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_i_want_2002</field>
+ <field name="initial_release_date">2002-09-10</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jeffrey Porter</field>
+ <field name="name">All I Want</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_over_the_guy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Julie Davis</field>
+ <field name="name">All Over the Guy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_souls_day_2005</field>
+ <field name="initial_release_date">2005-01-25</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Zombie Film</field>
+ <field name="directed_by">Jeremy Kasten</field>
+ <field name="directed_by">Mark A. Altman</field>
+ <field name="name">All Souls Day</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_the_kings_men_2006</field>
+ <field name="initial_release_date">2006-09-10</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Steven Zaillian</field>
+ <field name="name">All the King's Men</field>
+ </doc>
+ <doc>
+ <field name="id">/en/all_the_real_girls</field>
+ <field name="initial_release_date">2003-01-19</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Gordon Green</field>
+ <field name="name">All the Real Girls</field>
+ </doc>
+ <doc>
+ <field name="id">/en/allari_bullodu</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Kovelamudi Raghavendra Rao</field>
+ <field name="name">Allari Bullodu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/allari_pidugu</field>
+ <field name="initial_release_date">2005-10-05</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Jayant Paranji</field>
+ <field name="name">Allari Pidugu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alles_auf_zucker</field>
+ <field name="initial_release_date">2004-12-31</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Dani Levy</field>
+ <field name="name">Alles auf Zucker!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alley_cats_strike</field>
+ <field name="initial_release_date">2000-03-18</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="directed_by">Rod Daniel</field>
+ <field name="name">Alley Cats Strike!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/almost_famous</field>
+ <field name="initial_release_date">2000-09-08</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Music</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Cameron Crowe</field>
+ <field name="name">Almost Famous</field>
+ </doc>
+ <doc>
+ <field name="id">/en/almost_round_three</field>
+ <field name="initial_release_date">2004-11-10</field>
+ <field name="genre">Sports</field>
+ <field name="directed_by">Matt Hill</field>
+ <field name="directed_by">Matt Hill</field>
+ <field name="name">Almost: Round Three</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alone_and_restless</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Michael Thomas Dunn</field>
+ <field name="name">Alone and Restless</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alone_in_the_dark</field>
+ <field name="initial_release_date">2005-01-28</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Uwe Boll</field>
+ <field name="name">Alone in the Dark</field>
+ </doc>
+ <doc>
+ <field name="id">/en/along_came_polly</field>
+ <field name="initial_release_date">2004-01-12</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Gross out</field>
+ <field name="genre">Gross-out film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">John Hamburg</field>
+ <field name="name">Along Came Polly</field>
+ </doc>
+ <doc>
+ <field name="id">/en/alpha_dog</field>
+ <field name="initial_release_date">2006-01-27</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Nick Cassavetes</field>
+ <field name="name">Alpha Dog</field>
+ </doc>
+ <doc>
+ <field name="id">/en/amelie</field>
+ <field name="initial_release_date">2001-04-25</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jean-Pierre Jeunet</field>
+ <field name="name">Amélie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/america_freedom_to_fascism</field>
+ <field name="initial_release_date">2006-07-28</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="directed_by">Aaron Russo</field>
+ <field name="name">America: Freedom to Fascism</field>
+ </doc>
+ <doc>
+ <field name="id">/en/americas_sweethearts</field>
+ <field name="initial_release_date">2001-07-17</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Joe Roth</field>
+ <field name="name">America's Sweethearts</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_cowslip</field>
+ <field name="initial_release_date">2009-07-24</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Mark David</field>
+ <field name="name">American Cowslip</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_desi</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Piyush Dinker Pandya</field>
+ <field name="name">American Desi</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_dog</field>
+ <field name="initial_release_date">2008-11-17</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Chris Williams</field>
+ <field name="directed_by">Byron Howard</field>
+ <field name="name">Bolt</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_dreamz</field>
+ <field name="initial_release_date">2006-04-21</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Political satire</field>
+ <field name="genre">Media Satire</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Paul Weitz</field>
+ <field name="name">American Dreamz</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_gangster</field>
+ <field name="initial_release_date">2007-10-19</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">War film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Crime Drama</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">True crime</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ridley Scott</field>
+ <field name="name">American Gangster</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_gun</field>
+ <field name="initial_release_date">2005-09-15</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Aric Avelino</field>
+ <field name="name">American Gun</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_hardcore_2006</field>
+ <field name="initial_release_date">2006-03-11</field>
+ <field name="genre">Music</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Rockumentary</field>
+ <field name="genre">Punk rock</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Paul Rachman</field>
+ <field name="name">American Hardcore</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_outlaws</field>
+ <field name="initial_release_date">2001-08-17</field>
+ <field name="genre">Western</field>
+ <field name="genre">Costume drama</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Revisionist Western</field>
+ <field name="genre">Comedy Western</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Les Mayfield</field>
+ <field name="name">American Outlaws</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_pie_the_naked_mile</field>
+ <field name="initial_release_date">2006-12-07</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Joe Nussbaum</field>
+ <field name="name">American Pie Presents: The Naked Mile</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_pie_2</field>
+ <field name="initial_release_date">2001-08-06</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">James B. Rogers</field>
+ <field name="name">American Pie 2</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_pie_presents_band_camp</field>
+ <field name="initial_release_date">2005-10-31</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Steve Rash</field>
+ <field name="name">American Pie Presents: Band Camp</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_psycho_2000</field>
+ <field name="initial_release_date">2000-01-21</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mary Harron</field>
+ <field name="name">American Psycho</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_splendor_2003</field>
+ <field name="initial_release_date">2003-01-20</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Marriage Drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Shari Springer Berman</field>
+ <field name="directed_by">Robert Pulcini</field>
+ <field name="name">American Splendor</field>
+ </doc>
+ <doc>
+ <field name="id">/en/american_wedding</field>
+ <field name="initial_release_date">2003-07-24</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jesse Dylan</field>
+ <field name="name">American Wedding</field>
+ </doc>
+ <doc>
+ <field name="id">/en/americano_2005</field>
+ <field name="initial_release_date">2005-01-07</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Kevin Noland</field>
+ <field name="name">Americano</field>
+ </doc>
+ <doc>
+ <field name="id">/en/amma_nanna_o_tamila_ammayi</field>
+ <field name="initial_release_date">2003-04-19</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Puri Jagannadh</field>
+ <field name="name">Amma Nanna O Tamila Ammayi</field>
+ </doc>
+ <doc>
+ <field name="id">/en/amores_perros</field>
+ <field name="initial_release_date">2000-05-14</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Alejandro González Iñárritu</field>
+ <field name="name">Amores perros</field>
+ </doc>
+ <doc>
+ <field name="id">/en/amrutham</field>
+ <field name="initial_release_date">2004-12-24</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Sibi Malayil</field>
+ <field name="name">Amrutham</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_american_crime</field>
+ <field name="initial_release_date">2007-01-19</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Tommy O'Haver</field>
+ <field name="name">An American Crime</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_american_haunting</field>
+ <field name="initial_release_date">2005-11-05</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Courtney Solomon</field>
+ <field name="name">An American Haunting</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_american_tail_the_mystery_of_the_night_monster</field>
+ <field name="initial_release_date">2000-07-25</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animated cartoon</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Music</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="directed_by">Larry Latham</field>
+ <field name="name">An American Tail: The Mystery of the Night Monster</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_evening_with_kevin_smith</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Film &amp;amp; Television History</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Media studies</field>
+ <field name="directed_by">J.M. Kenny</field>
+ <field name="name">An Evening with Kevin Smith</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_evening_with_kevin_smith_2006</field>
+ <field name="genre">Documentary film</field>
+ <field name="directed_by">J.M. Kenny</field>
+ <field name="name">An Evening with Kevin Smith 2: Evening Harder</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_everlasting_piece</field>
+ <field name="initial_release_date">2000-12-25</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Barry Levinson</field>
+ <field name="name">An Everlasting Piece</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_extremely_goofy_movie</field>
+ <field name="initial_release_date">2000-02-29</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Animated Musical</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Ian Harrowell</field>
+ <field name="directed_by">Douglas McCarthy</field>
+ <field name="name">An Extremely Goofy Movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_inconvenient_truth</field>
+ <field name="initial_release_date">2006-01-24</field>
+ <field name="genre">Documentary film</field>
+ <field name="directed_by">Davis Guggenheim</field>
+ <field name="name">An Inconvenient Truth</field>
+ </doc>
+ <doc>
+ <field name="id">/en/an_unfinished_life</field>
+ <field name="initial_release_date">2005-08-19</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Lasse Hallström</field>
+ <field name="name">An Unfinished Life</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anacondas_the_hunt_for_the_blood_orchid</field>
+ <field name="initial_release_date">2004-08-25</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Jungle Film</field>
+ <field name="directed_by">Dwight H. Little</field>
+ <field name="name">Anacondas: The Hunt for the Blood Orchid</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anal_pick-up</field>
+ <field name="genre">Pornographic film</field>
+ <field name="genre">Gay pornography</field>
+ <field name="directed_by">Decklin</field>
+ <field name="name">Anal Pick-Up</field>
+ </doc>
+ <doc>
+ <field name="id">/en/analyze_that</field>
+ <field name="initial_release_date">2002-12-06</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Harold Ramis</field>
+ <field name="name">Analyze That</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anamorph</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="directed_by">H.S. Miller</field>
+ <field name="name">Anamorph</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anand_2004</field>
+ <field name="initial_release_date">2004-10-15</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Sekhar Kammula</field>
+ <field name="name">Anand</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anbe_aaruyire</field>
+ <field name="initial_release_date">2005-08-15</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">S. J. Surya</field>
+ <field name="name">Anbe Aaruyire</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anbe_sivam</field>
+ <field name="initial_release_date">2003-01-14</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Sundar C.</field>
+ <field name="name">Love is God</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ancanar</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Sam R. Balcomb</field>
+ <field name="directed_by">Raiya Corsiglia</field>
+ <field name="name">Ancanar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anchorman_the_legend_of_ron_burgundy</field>
+ <field name="initial_release_date">2004-06-28</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Adam McKay</field>
+ <field name="name">Anchorman: The Legend of Ron Burgundy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/andaaz</field>
+ <field name="initial_release_date">2003-05-23</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Raj Kanwar</field>
+ <field name="name">Andaaz</field>
+ </doc>
+ <doc>
+ <field name="id">/en/andarivaadu</field>
+ <field name="initial_release_date">2005-06-03</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Srinu Vaitla</field>
+ <field name="name">Andarivaadu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/andhrawala</field>
+ <field name="initial_release_date">2004-01-01</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Puri Jagannadh</field>
+ <field name="directed_by">V.V.S. Ram</field>
+ <field name="name">Andhrawala</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ang_tanging_ina</field>
+ <field name="initial_release_date">2003-05-28</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Wenn V. Deramas</field>
+ <field name="name">Ang Tanging Ina</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angel_eyes</field>
+ <field name="initial_release_date">2001-05-18</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Luis Mandoki</field>
+ <field name="name">Angel Eyes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angel-a</field>
+ <field name="initial_release_date">2005-12-21</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Luc Besson</field>
+ <field name="name">Angel-A</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angels_and_demons_2008</field>
+ <field name="initial_release_date">2009-05-04</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="directed_by">Ron Howard</field>
+ <field name="name">Angels &amp;amp; Demons</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angels_and_virgins</field>
+ <field name="initial_release_date">2007-12-17</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Leland</field>
+ <field name="name">Virgin Territory</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angels_in_the_infield</field>
+ <field name="initial_release_date">2000-04-09</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Family</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Heavenly Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Robert King</field>
+ <field name="name">Angels in the Infield</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anger_management_2003</field>
+ <field name="initial_release_date">2003-03-05</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Peter Segal</field>
+ <field name="name">Anger Management</field>
+ </doc>
+ <doc>
+ <field name="id">/en/angli_the_movie</field>
+ <field name="initial_release_date">2005-05-28</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="directed_by">Mario Busietta</field>
+ <field name="name">Angli: The Movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/animal_factory</field>
+ <field name="initial_release_date">2000-10-22</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Prison film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Steve Buscemi</field>
+ <field name="name">Animal Factory</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anjaneya</field>
+ <field name="initial_release_date">2003-10-24</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="directed_by">Maharajan</field>
+ <field name="directed_by">N.Maharajan</field>
+ <field name="name">Anjaneya</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ankahee</field>
+ <field name="initial_release_date">2006-05-19</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Vikram Bhatt</field>
+ <field name="name">Ankahee</field>
+ </doc>
+ <doc>
+ <field name="id">/en/annapolis_2006</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Justin Lin</field>
+ <field name="name">Annapolis</field>
+ </doc>
+ <doc>
+ <field name="id">/en/annavaram_2007</field>
+ <field name="initial_release_date">2006-12-29</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Gridhar</field>
+ <field name="directed_by">Bhimaneni Srinivasa Rao</field>
+ <field name="directed_by">Sippy</field>
+ <field name="name">Annavaram</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anniyan</field>
+ <field name="initial_release_date">2005-06-10</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">S. Shankar</field>
+ <field name="name">Anniyan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/another_gay_movie</field>
+ <field name="initial_release_date">2006-04-28</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Pornographic film</field>
+ <field name="directed_by">Todd Stephens</field>
+ <field name="name">Another Gay Movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ant_man</field>
+ <field name="initial_release_date">2015-07-17</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Peyton Reed</field>
+ <field name="name">Ant-Man</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anthony_zimmer</field>
+ <field name="initial_release_date">2005-04-27</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="directed_by">Jérôme Salle</field>
+ <field name="name">Anthony Zimmer</field>
+ </doc>
+ <doc>
+ <field name="id">/en/antwone_fisher_2003</field>
+ <field name="initial_release_date">2002-09-12</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Denzel Washington</field>
+ <field name="name">Antwone Fisher</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anukokunda_oka_roju</field>
+ <field name="initial_release_date">2005-06-30</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Chandra Sekhar Yeleti</field>
+ <field name="name">Anukokunda Oka Roju</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anus_magillicutty</field>
+ <field name="initial_release_date">2003-04-15</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Morey Fineburgh</field>
+ <field name="name">Anus Magillicutty</field>
+ </doc>
+ <doc>
+ <field name="id">/en/any_way_the_wind_blows</field>
+ <field name="initial_release_date">2003-05-17</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="directed_by">Tom Barman</field>
+ <field name="name">Any Way the Wind Blows</field>
+ </doc>
+ <doc>
+ <field name="id">/en/anything_else</field>
+ <field name="initial_release_date">2003-08-27</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Woody Allen</field>
+ <field name="name">Anything Else</field>
+ </doc>
+ <doc>
+ <field name="id">/en/apasionados</field>
+ <field name="initial_release_date">2002-06-06</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Juan José Jusid</field>
+ <field name="name">Apasionados</field>
+ </doc>
+ <doc>
+ <field name="id">/en/apocalypto</field>
+ <field name="initial_release_date">2006-12-08</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mel Gibson</field>
+ <field name="name">Apocalypto</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aprils_shower</field>
+ <field name="initial_release_date">2006-01-13</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Trish Doolan</field>
+ <field name="name">April's Shower</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aquamarine_2006</field>
+ <field name="initial_release_date">2006-02-26</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Elizabeth Allen Rosenbaum</field>
+ <field name="name">Aquamarine</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arabian_nights</field>
+ <field name="initial_release_date">2000-04-30</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="directed_by">Steve Barron</field>
+ <field name="name">Arabian Nights</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aragami</field>
+ <field name="initial_release_date">2003-03-27</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ryuhei Kitamura</field>
+ <field name="name">Aragami</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arahan</field>
+ <field name="initial_release_date">2004-04-30</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Korean drama</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Ryoo Seung-wan</field>
+ <field name="name">Arahan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ararat</field>
+ <field name="initial_release_date">2002-05-20</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Atom Egoyan</field>
+ <field name="name">Ararat</field>
+ </doc>
+ <doc>
+ <field name="id">/en/are_we_there_yet</field>
+ <field name="initial_release_date">2005-01-21</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Brian Levant</field>
+ <field name="name">Are We There Yet</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arinthum_ariyamalum</field>
+ <field name="initial_release_date">2005-05-20</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Family</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Vishnuvardhan</field>
+ <field name="name">Arinthum Ariyamalum</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arisan</field>
+ <field name="initial_release_date">2003-12-10</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Nia Dinata</field>
+ <field name="name">Arisan!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arjun_2004</field>
+ <field name="initial_release_date">2004-08-18</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Gunasekhar</field>
+ <field name="directed_by">J. Hemambar</field>
+ <field name="name">Arjun</field>
+ </doc>
+ <doc>
+ <field name="id">/en/armaan</field>
+ <field name="initial_release_date">2003-05-16</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Honey Irani</field>
+ <field name="name">Armaan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/around_the_bend</field>
+ <field name="initial_release_date">2004-10-08</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jordan Roberts</field>
+ <field name="name">Around the Bend</field>
+ </doc>
+ <doc>
+ <field name="id">/en/around_the_world_in_80_days_2004</field>
+ <field name="initial_release_date">2004-06-13</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Western</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Frank Coraci</field>
+ <field name="name">Around the World in 80 Days</field>
+ </doc>
+ <doc>
+ <field name="id">/en/art_of_the_devil_2</field>
+ <field name="initial_release_date">2005-12-01</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">Pasith Buranajan</field>
+ <field name="directed_by">Seree Phongnithi</field>
+ <field name="directed_by">Yosapong Polsap</field>
+ <field name="directed_by">Putipong Saisikaew</field>
+ <field name="directed_by">Art Thamthrakul</field>
+ <field name="directed_by">Kongkiat Khomsiri</field>
+ <field name="directed_by">Isara Nadee</field>
+ <field name="name">Art of the Devil 2</field>
+ </doc>
+ <doc>
+ <field name="id">/en/art_school_confidential</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="directed_by">Terry Zwigoff</field>
+ <field name="name">Art School Confidential</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arul</field>
+ <field name="initial_release_date">2004-05-01</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Hari</field>
+ <field name="name">Arul</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arya_2007</field>
+ <field name="initial_release_date">2007-08-10</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Balasekaran</field>
+ <field name="name">Aarya</field>
+ </doc>
+ <doc>
+ <field name="id">/en/arya_2004</field>
+ <field name="initial_release_date">2004-05-07</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Tollywood</field>
+ <field name="directed_by">Sukumar</field>
+ <field name="name">Arya</field>
+ </doc>
+ <doc>
+ <field name="id">/en/aryan_2006</field>
+ <field name="initial_release_date">2006-12-05</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Abhishek Kapoor</field>
+ <field name="name">Aryan: Unbreakable</field>
+ </doc>
+ <doc>
+ <field name="id">/en/as_it_is_in_heaven</field>
+ <field name="initial_release_date">2004-08-20</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Kay Pollak</field>
+ <field name="name">As It Is in Heaven</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ashok</field>
+ <field name="initial_release_date">2006-07-13</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Surender Reddy</field>
+ <field name="name">Ashok</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ask_the_dust_2006</field>
+ <field name="initial_release_date">2006-02-02</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Robert Towne</field>
+ <field name="name">Ask the Dust</field>
+ </doc>
+ <doc>
+ <field name="id">/en/asoka</field>
+ <field name="initial_release_date">2001-09-13</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Santosh Sivan</field>
+ <field name="name">Ashoka the Great</field>
+ </doc>
+ <doc>
+ <field name="id">/en/assault_on_precinct_13_2005</field>
+ <field name="initial_release_date">2005-01-19</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Remake</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jean-François Richet</field>
+ <field name="name">Assault on Precinct 13</field>
+ </doc>
+ <doc>
+ <field name="id">/en/astitva</field>
+ <field name="initial_release_date">2000-10-06</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mahesh Manjrekar</field>
+ <field name="name">Astitva</field>
+ </doc>
+ <doc>
+ <field name="id">/en/asylum_2005</field>
+ <field name="initial_release_date">2005-08-12</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Mackenzie</field>
+ <field name="name">Asylum</field>
+ </doc>
+ <doc>
+ <field name="id">/en/atanarjuat</field>
+ <field name="initial_release_date">2001-05-13</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Zacharias Kunuk</field>
+ <field name="name">Atanarjuat: The Fast Runner</field>
+ </doc>
+ <doc>
+ <field name="id">/en/athadu</field>
+ <field name="initial_release_date">2005-08-10</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Trivikram Srinivas</field>
+ <field name="name">Athadu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/atl_2006</field>
+ <field name="initial_release_date">2006-03-28</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Chris Robinson</field>
+ <field name="name">ATL</field>
+ </doc>
+ <doc>
+ <field name="id">/en/atlantis_the_lost_empire</field>
+ <field name="initial_release_date">2001-06-03</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="directed_by">Gary Trousdale</field>
+ <field name="directed_by">Kirk Wise</field>
+ <field name="name">Atlantis: The Lost Empire</field>
+ </doc>
+ <doc>
+ <field name="id">/en/atonement_2007</field>
+ <field name="initial_release_date">2007-08-28</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Music</field>
+ <field name="directed_by">Joe Wright</field>
+ <field name="name">Atonement</field>
+ </doc>
+ <doc>
+ <field name="id">/en/attagasam</field>
+ <field name="initial_release_date">2004-11-12</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Saran</field>
+ <field name="name">Attahasam</field>
+ </doc>
+ <doc>
+ <field name="id">/en/attila_2001</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">History</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Dick Lowry</field>
+ <field name="name">Attila</field>
+ </doc>
+ <doc>
+ <field name="id">/en/austin_powers_goldmember</field>
+ <field name="initial_release_date">2002-07-22</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jay Roach</field>
+ <field name="name">Austin Powers: Goldmember</field>
+ </doc>
+ <doc>
+ <field name="id">/en/australian_rules</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Paul Goldman</field>
+ <field name="name">Australian Rules</field>
+ </doc>
+ <doc>
+ <field name="id">/en/auto</field>
+ <field name="initial_release_date">2007-02-16</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Pushkar</field>
+ <field name="directed_by">Gayatri</field>
+ <field name="name">Oram Po</field>
+ </doc>
+ <doc>
+ <field name="id">/en/auto_focus</field>
+ <field name="initial_release_date">2002-09-08</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Paul Schrader</field>
+ <field name="directed_by">Larry Karaszewski</field>
+ <field name="name">Auto Focus</field>
+ </doc>
+ <doc>
+ <field name="id">/en/autograph_2004</field>
+ <field name="initial_release_date">2004-02-14</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Cheran</field>
+ <field name="name">Autograph</field>
+ </doc>
+ <doc>
+ <field name="id">/en/avalon_2001</field>
+ <field name="initial_release_date">2001-01-20</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mamoru Oshii</field>
+ <field name="name">Avalon</field>
+ </doc>
+ <doc>
+ <field name="id">/en/avatar_2009</field>
+ <field name="initial_release_date">2009-12-10</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="directed_by">James Cameron</field>
+ <field name="name">Avatar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/avenging_angelo</field>
+ <field name="initial_release_date">2002-08-30</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Martyn Burke</field>
+ <field name="name">Avenging Angelo</field>
+ </doc>
+ <doc>
+ <field name="id">/en/awake_2007</field>
+ <field name="initial_release_date">2007-11-30</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">Joby Harold</field>
+ <field name="name">Awake</field>
+ </doc>
+ <doc>
+ <field name="id">/en/awara_paagal_deewana</field>
+ <field name="initial_release_date">2002-06-20</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Vikram Bhatt</field>
+ <field name="name">Awara Paagal Deewana</field>
+ </doc>
+ <doc>
+ <field name="id">/en/awesome_i_fuckin_shot_that</field>
+ <field name="initial_release_date">2006-01-06</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">Rockumentary</field>
+ <field name="genre">Hip hop film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="directed_by">Adam Yauch</field>
+ <field name="name">Awesome; I Fuckin' Shot That!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/azumi</field>
+ <field name="initial_release_date">2003-05-10</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Ryuhei Kitamura</field>
+ <field name="name">Azumi</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/$00C6on_Flux_$0028film$0029</field>
+ <field name="initial_release_date">2005-12-01</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Dystopia</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="directed_by">Karyn Kusama</field>
+ <field name="name">Æon Flux</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baabul</field>
+ <field name="initial_release_date">2006-12-08</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Family</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Ravi Chopra</field>
+ <field name="name">Baabul</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baadasssss_cinema</field>
+ <field name="initial_release_date">2002-08-14</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Blaxploitation film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Film &amp;amp; Television History</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Isaac Julien</field>
+ <field name="name">BaadAsssss Cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baadasssss</field>
+ <field name="initial_release_date">2003-09-07</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mario Van Peebles</field>
+ <field name="name">Baadasssss!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/babel_2006</field>
+ <field name="initial_release_date">2006-05-23</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Alejandro González Iñárritu</field>
+ <field name="name">Babel</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baby_boy</field>
+ <field name="initial_release_date">2001-06-21</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">John Singleton</field>
+ <field name="name">Baby Boy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/back_by_midnight</field>
+ <field name="initial_release_date">2005-01-25</field>
+ <field name="genre">Prison film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Harry Basil</field>
+ <field name="name">Back by Midnight</field>
+ </doc>
+ <doc>
+ <field name="id">/en/back_to_school_with_franklin</field>
+ <field name="initial_release_date">2003-08-19</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Educational film</field>
+ <field name="directed_by">Arna Selznick</field>
+ <field name="name">Back to School with Franklin</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bad_boys_ii</field>
+ <field name="initial_release_date">2003-07-09</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Michael Bay</field>
+ <field name="name">Bad Boys II</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/ru_id/1598664</field>
+ <field name="initial_release_date">2002-04-26</field>
+ <field name="genre">Spy film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Joel Schumacher</field>
+ <field name="name">Bad Company</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bad_education</field>
+ <field name="initial_release_date">2004-03-19</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Pedro Almodóvar</field>
+ <field name="name">Bad Education</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bad_eggs</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Tony Martin</field>
+ <field name="name">Bad Eggs</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bad_news_bears</field>
+ <field name="initial_release_date">2005-07-22</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Richard Linklater</field>
+ <field name="name">Bad News Bears</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bad_santa</field>
+ <field name="initial_release_date">2003-11-26</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Terry Zwigoff</field>
+ <field name="name">Bad Santa</field>
+ </doc>
+ <doc>
+ <field name="id">/en/badal</field>
+ <field name="initial_release_date">2000-02-11</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Raj Kanwar</field>
+ <field name="name">Badal</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baghdad_er</field>
+ <field name="initial_release_date">2006-08-29</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">War film</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Jon Alpert</field>
+ <field name="directed_by">Matthew O'Neill</field>
+ <field name="name">Baghdad ER</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baise_moi</field>
+ <field name="initial_release_date">2000-06-28</field>
+ <field name="genre">Erotica</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Road movie</field>
+ <field name="directed_by">Virginie Despentes</field>
+ <field name="directed_by">Coralie Trinh Thi</field>
+ <field name="name">Baise Moi</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bait_2000</field>
+ <field name="initial_release_date">2000-09-15</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Antoine Fuqua</field>
+ <field name="name">Bait</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bala_2002</field>
+ <field name="initial_release_date">2002-12-13</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Deepak</field>
+ <field name="name">Bala</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ballistic_ecks_vs_sever</field>
+ <field name="initial_release_date">2002-09-20</field>
+ <field name="genre">Spy film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Glamorized Spy Film</field>
+ <field name="directed_by">Wych Kaosayananda</field>
+ <field name="name">Ballistic: Ecks vs. Sever</field>
+ </doc>
+ <doc>
+ <field name="id">/en/balu_abcdefg</field>
+ <field name="initial_release_date">2005-01-06</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">A. Karunakaran</field>
+ <field name="name">Balu ABCDEFG</field>
+ </doc>
+ <doc>
+ <field name="id">/en/balzac_and_the_little_chinese_seamstress_2002</field>
+ <field name="initial_release_date">2002-05-16</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Dai Sijie</field>
+ <field name="name">The Little Chinese Seamstress</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bambi_ii</field>
+ <field name="initial_release_date">2006-01-26</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="directed_by">Brian Pimental</field>
+ <field name="name">Bambi II</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bamboozled</field>
+ <field name="initial_release_date">2000-10-06</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Media Satire</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Spike Lee</field>
+ <field name="name">Bamboozled</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bandidas</field>
+ <field name="initial_release_date">2006-01-18</field>
+ <field name="genre">Western</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="directed_by">Espen Sandberg</field>
+ <field name="directed_by">Joachim Rønning</field>
+ <field name="name">Bandidas</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bandits</field>
+ <field name="initial_release_date">2001-10-12</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Barry Levinson</field>
+ <field name="name">Bandits</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bangaram</field>
+ <field name="initial_release_date">2006-05-03</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Dharani</field>
+ <field name="name">Bangaram</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bangkok_loco</field>
+ <field name="initial_release_date">2004-10-07</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Pornchai Hongrattanaporn</field>
+ <field name="name">Bangkok Loco</field>
+ </doc>
+ <doc>
+ <field name="id">/en/baran</field>
+ <field name="initial_release_date">2001-01-31</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Majid Majidi</field>
+ <field name="name">Baran</field>
+ </doc>
+ <doc>
+ <field name="id">/en/barbershop</field>
+ <field name="initial_release_date">2002-08-07</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Tim Story</field>
+ <field name="name">Barbershop</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bareback_mountain</field>
+ <field name="genre">Pornographic film</field>
+ <field name="genre">Gay pornography</field>
+ <field name="directed_by">Afton Nills</field>
+ <field name="name">Bareback Mountain</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/pt/Barnyard</field>
+ <field name="initial_release_date">2006-08-04</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Steve Oedekerk</field>
+ <field name="name">Barnyard</field>
+ </doc>
+ <doc>
+ <field name="id">/en/barricade_2007</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Horror</field>
+ <field name="directed_by">Timo Rose</field>
+ <field name="name">Barricade</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bas_itna_sa_khwaab_hai</field>
+ <field name="initial_release_date">2001-07-06</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Goldie Behl</field>
+ <field name="name">Bas Itna Sa Khwaab Hai</field>
+ </doc>
+ <doc>
+ <field name="id">/en/basic_2003</field>
+ <field name="initial_release_date">2003-03-28</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">John McTiernan</field>
+ <field name="name">Basic</field>
+ </doc>
+ <doc>
+ <field name="id">/en/basic_emotions</field>
+ <field name="directed_by">Thomas Moon</field>
+ <field name="directed_by">Julie Pham</field>
+ <field name="directed_by">Georgia Lee</field>
+ <field name="initial_release_date">2004-09-09</field>
+ <field name="name">Basic emotions</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/basic_instinct_2</field>
+ <field name="directed_by">Michael Caton-Jones</field>
+ <field name="initial_release_date">2006-03-31</field>
+ <field name="name">Basic Instinct 2</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Horror</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batalla_en_el_cielo</field>
+ <field name="directed_by">Carlos Reygadas</field>
+ <field name="initial_release_date">2005-05-15</field>
+ <field name="name">Battle In Heaven</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batman_begins</field>
+ <field name="directed_by">Christopher Nolan</field>
+ <field name="initial_release_date">2005-06-10</field>
+ <field name="name">Batman Begins</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Film noir</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batman_beyond_return_of_the_joker</field>
+ <field name="directed_by">Curt Geda</field>
+ <field name="initial_release_date">2000-12-12</field>
+ <field name="name">Batman Beyond: Return of the Joker</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batman_dead_end</field>
+ <field name="directed_by">Sandy Collora</field>
+ <field name="initial_release_date">2003-07-19</field>
+ <field name="name">Batman: Dead End</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fan film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batman_mystery_of_the_batwoman</field>
+ <field name="directed_by">Curt Geda</field>
+ <field name="directed_by">Tim Maltby</field>
+ <field name="initial_release_date">2003-10-21</field>
+ <field name="name">Batman: Mystery of the Batwoman</field>
+ <field name="genre">Animated cartoon</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fantasy Adventure</field>
+ </doc>
+ <doc>
+ <field name="id">/en/batoru_rowaiaru_ii_chinkonka</field>
+ <field name="directed_by">Kenta Fukasaku</field>
+ <field name="directed_by">Kinji Fukasaku</field>
+ <field name="initial_release_date">2003-07-05</field>
+ <field name="name">Battle Royale II: Requiem</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/battlefield_baseball</field>
+ <field name="directed_by">Yūdai Yamaguchi</field>
+ <field name="initial_release_date">2003-07-19</field>
+ <field name="name">Battlefield Baseball</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bbs_the_documentary</field>
+ <field name="directed_by">Jason Scott Sadofsky</field>
+ <field name="name">BBS: The Documentary</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/be_cool</field>
+ <field name="directed_by">F. Gary Gray</field>
+ <field name="initial_release_date">2005-03-04</field>
+ <field name="name">Be Cool</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/be_kind_rewind</field>
+ <field name="directed_by">Michel Gondry</field>
+ <field name="initial_release_date">2008-01-20</field>
+ <field name="name">Be Kind Rewind</field>
+ <field name="genre">Farce</field>
+ <field name="genre">Comedy of Errors</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/be_with_me</field>
+ <field name="directed_by">Eric Khoo</field>
+ <field name="initial_release_date">2005-05-12</field>
+ <field name="name">Be with Me</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beah_a_black_woman_speaks</field>
+ <field name="directed_by">Lisa Gay Hamilton</field>
+ <field name="initial_release_date">2003-08-22</field>
+ <field name="name">Beah: A Black Woman Speaks</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">History</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beastly_boyz</field>
+ <field name="directed_by">David DeCoteau</field>
+ <field name="name">Beastly Boyz</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Horror</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Teen film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beauty_shop</field>
+ <field name="directed_by">Bille Woodruff</field>
+ <field name="initial_release_date">2005-03-24</field>
+ <field name="name">Beauty Shop</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bedazzled_2000</field>
+ <field name="directed_by">Harold Ramis</field>
+ <field name="initial_release_date">2000-10-19</field>
+ <field name="name">Bedazzled</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bee_movie</field>
+ <field name="directed_by">Steve Hickner</field>
+ <field name="directed_by">Simon J. Smith</field>
+ <field name="initial_release_date">2007-10-28</field>
+ <field name="name">Bee Movie</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bee_season_2005</field>
+ <field name="directed_by">David Siegel</field>
+ <field name="directed_by">Scott McGehee</field>
+ <field name="initial_release_date">2005-11-11</field>
+ <field name="name">Bee Season</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beer_league</field>
+ <field name="directed_by">Frank Sebastiano</field>
+ <field name="initial_release_date">2006-09-15</field>
+ <field name="name">Artie Lange's Beer League</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beer_the_movie</field>
+ <field name="directed_by">Peter Hoare</field>
+ <field name="initial_release_date">2006-05-16</field>
+ <field name="name">Beer: The Movie</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Bloopers &amp;amp; Candid Camera</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beerfest</field>
+ <field name="directed_by">Jay Chandrasekhar</field>
+ <field name="initial_release_date">2006-08-25</field>
+ <field name="name">Beerfest</field>
+ <field name="genre">Absurdism</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/before_night_falls_2001</field>
+ <field name="directed_by">Julian Schnabel</field>
+ <field name="initial_release_date">2000-09-03</field>
+ <field name="name">Before Night Falls</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/before_sunset</field>
+ <field name="directed_by">Richard Linklater</field>
+ <field name="initial_release_date">2004-02-10</field>
+ <field name="name">Before Sunset</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/behind_enemy_lines</field>
+ <field name="directed_by">John Moore</field>
+ <field name="initial_release_date">2001-11-17</field>
+ <field name="name">Behind Enemy Lines</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/behind_the_mask_2006</field>
+ <field name="directed_by">Shannon Keith</field>
+ <field name="initial_release_date">2006-03-21</field>
+ <field name="name">Behind the Mask</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/behind_the_sun_2001</field>
+ <field name="directed_by">Walter Salles</field>
+ <field name="initial_release_date">2001-09-06</field>
+ <field name="name">Behind the Sun</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/being_cyrus</field>
+ <field name="directed_by">Homi Adajania</field>
+ <field name="initial_release_date">2005-11-08</field>
+ <field name="name">Being Cyrus</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/being_julia</field>
+ <field name="directed_by">István Szabó</field>
+ <field name="initial_release_date">2004-09-03</field>
+ <field name="name">Being Julia</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bekhals_tears</field>
+ <field name="directed_by">Lauand Omar</field>
+ <field name="name">Bekhal's Tears</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/believe_in_me</field>
+ <field name="directed_by">Robert Collector</field>
+ <field name="name">Believe in Me</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/belly_of_the_beast</field>
+ <field name="directed_by">Ching Siu-tung</field>
+ <field name="initial_release_date">2003-12-30</field>
+ <field name="name">Belly of the Beast</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Political thriller</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Chinese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bellyful</field>
+ <field name="directed_by">Melvin Van Peebles</field>
+ <field name="initial_release_date">2000-06-28</field>
+ <field name="name">Bellyful</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bend_it_like_beckham</field>
+ <field name="directed_by">Gurinder Chadha</field>
+ <field name="initial_release_date">2002-04-11</field>
+ <field name="name">Bend It Like Beckham</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bendito_infierno</field>
+ <field name="directed_by">Agustín Díaz Yanes</field>
+ <field name="initial_release_date">2001-11-28</field>
+ <field name="name">Don't Tempt Me</field>
+ <field name="genre">Religious Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beneath</field>
+ <field name="directed_by">Dagen Merrill</field>
+ <field name="initial_release_date">2007-08-07</field>
+ <field name="name">Beneath</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Crime Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beneath_clouds</field>
+ <field name="directed_by">Ivan Sen</field>
+ <field name="initial_release_date">2002-02-08</field>
+ <field name="name">Beneath Clouds</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Social problem film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beowulf_2007</field>
+ <field name="directed_by">Robert Zemeckis</field>
+ <field name="initial_release_date">2007-11-05</field>
+ <field name="name">Beowulf</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beowulf_grendel</field>
+ <field name="directed_by">Sturla Gunnarsson</field>
+ <field name="initial_release_date">2005-09-14</field>
+ <field name="name">Beowulf &amp;amp; Grendel</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Mythological Fantasy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/best_in_show</field>
+ <field name="directed_by">Christopher Guest</field>
+ <field name="initial_release_date">2000-09-08</field>
+ <field name="name">Best in Show</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/the_best_of_the_bloodiest_brawls_vol_1</field>
+ <field name="initial_release_date">2006-03-14</field>
+ <field name="name">The Best of The Bloodiest Brawls, Vol. 1</field>
+ <field name="genre">Sports</field>
+ </doc>
+ <doc>
+ <field name="id">/en/better_luck_tomorrow</field>
+ <field name="directed_by">Justin Lin</field>
+ <field name="initial_release_date">2003-04-11</field>
+ <field name="name">Better Luck Tomorrow</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bettie_page_dark_angel</field>
+ <field name="directed_by">Nico B.</field>
+ <field name="initial_release_date">2004-02-11</field>
+ <field name="name">Bettie Page: Dark Angel</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bewitched_2005</field>
+ <field name="directed_by">Nora Ephron</field>
+ <field name="initial_release_date">2005-06-24</field>
+ <field name="name">Bewitched</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beyond_borders</field>
+ <field name="directed_by">Martin Campbell</field>
+ <field name="initial_release_date">2003-10-24</field>
+ <field name="name">Beyond Borders</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beyond_re-animator</field>
+ <field name="directed_by">Brian Yuzna</field>
+ <field name="initial_release_date">2003-04-04</field>
+ <field name="name">Beyond Re-Animator</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/beyond_the_sea</field>
+ <field name="directed_by">Kevin Spacey</field>
+ <field name="initial_release_date">2004-09-11</field>
+ <field name="name">Beyond the Sea</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Music</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bhadra_2005</field>
+ <field name="directed_by">Boyapati Srinu</field>
+ <field name="initial_release_date">2005-05-12</field>
+ <field name="name">Bhadra</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bhageeradha</field>
+ <field name="directed_by">Rasool Ellore</field>
+ <field name="initial_release_date">2005-10-13</field>
+ <field name="name">Bhageeratha</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bheema</field>
+ <field name="directed_by">N. Lingusamy</field>
+ <field name="initial_release_date">2008-01-14</field>
+ <field name="name">Bheemaa</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bhoot</field>
+ <field name="directed_by">Ram Gopal Varma</field>
+ <field name="initial_release_date">2003-05-17</field>
+ <field name="name">Bhoot</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bichhoo</field>
+ <field name="directed_by">Guddu Dhanoa</field>
+ <field name="initial_release_date">2000-07-07</field>
+ <field name="name">Bichhoo</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_eden</field>
+ <field name="directed_by">Thomas Bezucha</field>
+ <field name="initial_release_date">2000-04-18</field>
+ <field name="name">Big Eden</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_fat_liar</field>
+ <field name="directed_by">Shawn Levy</field>
+ <field name="initial_release_date">2002-02-02</field>
+ <field name="name">Big Fat Liar</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_fish</field>
+ <field name="directed_by">Tim Burton</field>
+ <field name="initial_release_date">2003-12-10</field>
+ <field name="name">Big Fish</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_girls_dont_cry_2002</field>
+ <field name="directed_by">Maria von Heland</field>
+ <field name="initial_release_date">2002-10-24</field>
+ <field name="name">Big Girls Don't Cry</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_man_little_love</field>
+ <field name="directed_by">Handan İpekçi</field>
+ <field name="initial_release_date">2001-10-19</field>
+ <field name="name">Big Man, Little Love</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_mommas_house</field>
+ <field name="directed_by">Raja Gosnell</field>
+ <field name="initial_release_date">2000-05-31</field>
+ <field name="name">Big Momma's House</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_mommas_house_2</field>
+ <field name="directed_by">John Whitesell</field>
+ <field name="initial_release_date">2006-01-26</field>
+ <field name="name">Big Momma's House 2</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Farce</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_toys_no_boys_2</field>
+ <field name="directed_by">Tristán</field>
+ <field name="name">Big Toys, No Boys 2</field>
+ <field name="genre">Pornographic film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/big_trouble_2002</field>
+ <field name="directed_by">Barry Sonnenfeld</field>
+ <field name="initial_release_date">2002-04-05</field>
+ <field name="name">Big Trouble</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bigger_than_the_sky</field>
+ <field name="directed_by">Al Corley</field>
+ <field name="initial_release_date">2005-02-18</field>
+ <field name="name">Bigger Than the Sky</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/biggie_tupac</field>
+ <field name="directed_by">Nick Broomfield</field>
+ <field name="initial_release_date">2002-01-11</field>
+ <field name="name">Biggie &amp;amp; Tupac</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Hip hop film</field>
+ <field name="genre">Rockumentary</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">True crime</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bill_2007</field>
+ <field name="directed_by">Bernie Goldmann</field>
+ <field name="directed_by">Melisa Wallick</field>
+ <field name="initial_release_date">2007-09-08</field>
+ <field name="name">Meet Bill</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/billy_elliot</field>
+ <field name="directed_by">Stephen Daldry</field>
+ <field name="initial_release_date">2000-05-19</field>
+ <field name="name">Billy Elliot</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Music</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bionicle_3_web_of_shadows</field>
+ <field name="directed_by">David Molina</field>
+ <field name="directed_by">Terry Shakespeare</field>
+ <field name="initial_release_date">2005-10-11</field>
+ <field name="name">Bionicle 3: Web of Shadows</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Science Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bionicle_2_legends_of_metru_nui</field>
+ <field name="directed_by">David Molina</field>
+ <field name="directed_by">Terry Shakespeare</field>
+ <field name="initial_release_date">2004-10-19</field>
+ <field name="name">Bionicle 2: Legends of Metru Nui</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Adventure</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bionicle_mask_of_light</field>
+ <field name="directed_by">David Molina</field>
+ <field name="directed_by">Terry Shakespeare</field>
+ <field name="initial_release_date">2003-09-16</field>
+ <field name="name">Bionicle: Mask of Light: The Movie</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Adventure</field>
+ </doc>
+ <doc>
+ <field name="id">/en/birth_2004</field>
+ <field name="directed_by">Jonathan Glazer</field>
+ <field name="initial_release_date">2004-09-08</field>
+ <field name="name">Birth</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/birthday_girl</field>
+ <field name="directed_by">Jez Butterworth</field>
+ <field name="initial_release_date">2002-02-01</field>
+ <field name="name">Birthday Girl</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bite_me_fanboy</field>
+ <field name="directed_by">Mat Nastos</field>
+ <field name="initial_release_date">2005-06-01</field>
+ <field name="name">Bite Me, Fanboy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bitter_jester</field>
+ <field name="directed_by">Maija DiGiorgio</field>
+ <field name="initial_release_date">2003-02-26</field>
+ <field name="name">Bitter Jester</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_2005</field>
+ <field name="directed_by">Sanjay Leela Bhansali</field>
+ <field name="initial_release_date">2005-02-04</field>
+ <field name="name">Black</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_and_white_2002</field>
+ <field name="directed_by">Craig Lahiff</field>
+ <field name="initial_release_date">2002-10-31</field>
+ <field name="name">Black and White</field>
+ <field name="genre">Trial drama</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_book_2006</field>
+ <field name="directed_by">Paul Verhoeven</field>
+ <field name="initial_release_date">2006-09-01</field>
+ <field name="name">Black Book</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/fr/Black_Christmas_$0028film$002C_2006$0029</field>
+ <field name="directed_by">Glen Morgan</field>
+ <field name="initial_release_date">2006-12-15</field>
+ <field name="name">Black Christmas</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_cloud</field>
+ <field name="directed_by">Ricky Schroder</field>
+ <field name="initial_release_date">2004-04-30</field>
+ <field name="name">Black Cloud</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_friday_1993</field>
+ <field name="directed_by">Anurag Kashyap</field>
+ <field name="initial_release_date">2004-05-20</field>
+ <field name="name">Black Friday</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_hawk_down</field>
+ <field name="directed_by">Ridley Scott</field>
+ <field name="initial_release_date">2001-12-18</field>
+ <field name="name">Black Hawk Down</field>
+ <field name="genre">War film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">History</field>
+ <field name="genre">Combat Films</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_hole_2006</field>
+ <field name="directed_by">Tibor Takács</field>
+ <field name="initial_release_date">2006-06-10</field>
+ <field name="name">The Black Hole</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Television film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/black_knight_2001</field>
+ <field name="directed_by">Gil Junger</field>
+ <field name="initial_release_date">2001-11-15</field>
+ <field name="name">Black Knight</field>
+ <field name="genre">Time travel</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Costume drama</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Comedy</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blackball_2005</field>
+ <field name="directed_by">Mel Smith</field>
+ <field name="initial_release_date">2005-02-11</field>
+ <field name="name">Blackball</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blackwoods</field>
+ <field name="directed_by">Uwe Boll</field>
+ <field name="name">Blackwoods</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blade_ii</field>
+ <field name="directed_by">Guillermo del Toro</field>
+ <field name="initial_release_date">2002-03-21</field>
+ <field name="name">Blade II</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blade_trinity</field>
+ <field name="directed_by">David S. Goyer</field>
+ <field name="initial_release_date">2004-12-07</field>
+ <field name="name">Blade: Trinity</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bleach_memories_of_nobody</field>
+ <field name="directed_by">Noriyuki Abe</field>
+ <field name="initial_release_date">2006-12-16</field>
+ <field name="name">Bleach: Memories of Nobody</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bless_the_child</field>
+ <field name="directed_by">Chuck Russell</field>
+ <field name="initial_release_date">2000-08-11</field>
+ <field name="name">Bless the Child</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blind_shaft</field>
+ <field name="directed_by">Li Yang</field>
+ <field name="initial_release_date">2003-02-12</field>
+ <field name="name">Blind Shaft</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blissfully_yours</field>
+ <field name="directed_by">Apichatpong Weerasethakul</field>
+ <field name="initial_release_date">2002-05-17</field>
+ <field name="name">Blissfully Yours</field>
+ <field name="genre">Erotica</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blood_of_a_champion</field>
+ <field name="directed_by">Lawrence Page</field>
+ <field name="initial_release_date">2006-03-07</field>
+ <field name="name">Blood of a Champion</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blood_rain</field>
+ <field name="directed_by">Kim Dae-seung</field>
+ <field name="initial_release_date">2005-05-04</field>
+ <field name="name">Blood Rain</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blood_work</field>
+ <field name="directed_by">Clint Eastwood</field>
+ <field name="initial_release_date">2002-08-09</field>
+ <field name="name">Blood Work</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Detective fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bloodrayne_2006</field>
+ <field name="directed_by">Uwe Boll</field>
+ <field name="initial_release_date">2005-10-23</field>
+ <field name="name">BloodRayne</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Costume drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bloodsport_ecws_most_violent_matches</field>
+ <field name="initial_release_date">2006-02-07</field>
+ <field name="name">Bloodsport - ECW's Most Violent Matches</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bloody_sunday</field>
+ <field name="directed_by">Paul Greengrass</field>
+ <field name="initial_release_date">2002-01-16</field>
+ <field name="name">Bloody Sunday</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blow</field>
+ <field name="directed_by">Ted Demme</field>
+ <field name="initial_release_date">2001-03-29</field>
+ <field name="name">Blow</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_car</field>
+ <field name="directed_by">Karen Moncrieff</field>
+ <field name="initial_release_date">2003-05-02</field>
+ <field name="name">Blue Car</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_collar_comedy_tour_rides_again</field>
+ <field name="directed_by">C. B. Harding</field>
+ <field name="initial_release_date">2004-12-05</field>
+ <field name="name">Blue Collar Comedy Tour Rides Again</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_collar_comedy_tour_one_for_the_road</field>
+ <field name="directed_by">C. B. Harding</field>
+ <field name="initial_release_date">2006-06-27</field>
+ <field name="name">Blue Collar Comedy Tour: One for the Road</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_collar_comedy_tour_the_movie</field>
+ <field name="directed_by">C. B. Harding</field>
+ <field name="initial_release_date">2003-03-28</field>
+ <field name="name">Blue Collar Comedy Tour: The Movie</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_crush</field>
+ <field name="directed_by">John Stockwell</field>
+ <field name="initial_release_date">2002-08-08</field>
+ <field name="name">Blue Crush</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_gate_crossing</field>
+ <field name="directed_by">Yee Chin-yen</field>
+ <field name="initial_release_date">2002-09-08</field>
+ <field name="name">Blue Gate Crossing</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_milk</field>
+ <field name="directed_by">William Grammer</field>
+ <field name="initial_release_date">2006-06-20</field>
+ <field name="name">Blue Milk</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fan film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blue_state</field>
+ <field name="directed_by">Marshall Lewy</field>
+ <field name="name">Blue State</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Political satire</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blueberry_2004</field>
+ <field name="directed_by">Jan Kounen</field>
+ <field name="initial_release_date">2004-02-11</field>
+ <field name="name">Blueberry</field>
+ <field name="genre">Western</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/blueprint_2003</field>
+ <field name="directed_by">Rolf Schübel</field>
+ <field name="initial_release_date">2003-12-08</field>
+ <field name="name">Blueprint</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bluffmaster</field>
+ <field name="directed_by">Rohan Sippy</field>
+ <field name="initial_release_date">2005-12-16</field>
+ <field name="name">Bluffmaster!</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boa_vs_python</field>
+ <field name="directed_by">David Flores</field>
+ <field name="initial_release_date">2004-05-24</field>
+ <field name="name">Boa vs. Python</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Monster</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Creature Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bobby</field>
+ <field name="directed_by">Emilio Estevez</field>
+ <field name="initial_release_date">2006-09-05</field>
+ <field name="name">Bobby</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">History</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boiler_room</field>
+ <field name="directed_by">Ben Younger</field>
+ <field name="initial_release_date">2000-01-30</field>
+ <field name="name">Boiler Room</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bolletjes_blues</field>
+ <field name="directed_by">Brigit Hillenius</field>
+ <field name="directed_by">Karin Junger</field>
+ <field name="initial_release_date">2006-03-23</field>
+ <field name="name">Bolletjes Blues</field>
+ <field name="genre">Musical</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bollywood_hollywood</field>
+ <field name="directed_by">Deepa Mehta</field>
+ <field name="initial_release_date">2002-10-25</field>
+ <field name="name">Bollywood/Hollywood</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bomb_the_system</field>
+ <field name="directed_by">Adam Bhala Lough</field>
+ <field name="name">Bomb the System</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bommarillu</field>
+ <field name="directed_by">Bhaskar</field>
+ <field name="initial_release_date">2006-08-09</field>
+ <field name="name">Bommarillu</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bon_cop_bad_cop</field>
+ <field name="directed_by">Eric Canuel</field>
+ <field name="name">Bon Cop, Bad Cop</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bones_2001</field>
+ <field name="directed_by">Ernest R. Dickerson</field>
+ <field name="initial_release_date">2001-10-26</field>
+ <field name="name">Bones</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Blaxploitation film</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bonjour_monsieur_shlomi</field>
+ <field name="directed_by">Shemi Zarhin</field>
+ <field name="initial_release_date">2003-04-03</field>
+ <field name="name">Bonjour Monsieur Shlomi</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boogeyman</field>
+ <field name="directed_by">Stephen T. Kay</field>
+ <field name="initial_release_date">2005-02-04</field>
+ <field name="name">Boogeyman</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boogiepop_and_others_2000</field>
+ <field name="directed_by">Ryu Kaneda</field>
+ <field name="initial_release_date">2000-03-11</field>
+ <field name="name">Boogiepop and Others</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Japanese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/book_of_love_2004</field>
+ <field name="directed_by">Alan Brown</field>
+ <field name="initial_release_date">2004-01-18</field>
+ <field name="name">Book of Love</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/book_of_shadows_blair_witch_2</field>
+ <field name="directed_by">Joe Berlinger</field>
+ <field name="initial_release_date">2000-10-27</field>
+ <field name="name">Book of Shadows: Blair Witch 2</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boomer</field>
+ <field name="directed_by">Pyotr Buslov</field>
+ <field name="initial_release_date">2003-08-02</field>
+ <field name="name">Bimmer</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/de_id/1782985</field>
+ <field name="directed_by">Larry Charles</field>
+ <field name="initial_release_date">2006-08-04</field>
+ <field name="name">Borat: Cultural Learnings of America for Make Benefit Glorious Nation of Kazakhstan</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/born_into_brothels_calcuttas_red_light_kids</field>
+ <field name="directed_by">Zana Briski</field>
+ <field name="directed_by">Ross Kauffman</field>
+ <field name="initial_release_date">2004-01-17</field>
+ <field name="name">Born into Brothels: Calcutta's Red Light Kids</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/free_radicals</field>
+ <field name="directed_by">Barbara Albert</field>
+ <field name="name">Free Radicals</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boss_2006</field>
+ <field name="directed_by">V.N. Aditya</field>
+ <field name="initial_release_date">2006-09-27</field>
+ <field name="name">Boss</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bossn_up</field>
+ <field name="directed_by">Dylan C. Brown</field>
+ <field name="initial_release_date">2005-06-01</field>
+ <field name="name">Boss'n Up</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bossa_nova_2000</field>
+ <field name="directed_by">Bruno Barreto</field>
+ <field name="initial_release_date">2000-02-18</field>
+ <field name="name">Bossa Nova</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bosta</field>
+ <field name="directed_by">Philippe Aractingi</field>
+ <field name="name">Bosta</field>
+ <field name="genre">Musical</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bowling_for_columbine</field>
+ <field name="directed_by">Michael Moore</field>
+ <field name="initial_release_date">2002-05-15</field>
+ <field name="name">Bowling for Columbine</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Historical Documentaries</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bowling_fun_and_fundamentals_for_boys_and_girls</field>
+ <field name="name">Bowling Fun And Fundamentals For Boys And Girls</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boy_eats_girl</field>
+ <field name="directed_by">Stephen Bradley</field>
+ <field name="initial_release_date">2005-04-06</field>
+ <field name="name">Boy Eats Girl</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Zombie Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boynton_beach_club</field>
+ <field name="directed_by">Susan Seidelman</field>
+ <field name="initial_release_date">2006-08-04</field>
+ <field name="name">Boynton Beach Club</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Slice of life</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/boys_2003</field>
+ <field name="directed_by">S. Shankar</field>
+ <field name="initial_release_date">2003-08-29</field>
+ <field name="name">Boys</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brain_blockers</field>
+ <field name="directed_by">Lincoln Kupchak</field>
+ <field name="initial_release_date">2007-03-15</field>
+ <field name="name">Brain Blockers</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Zombie Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/breakin_all_the_rules</field>
+ <field name="directed_by">Daniel Taplitz</field>
+ <field name="initial_release_date">2004-05-14</field>
+ <field name="name">Breakin' All the Rules</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy of Errors</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/breaking_and_entering</field>
+ <field name="directed_by">Anthony Minghella</field>
+ <field name="initial_release_date">2006-09-13</field>
+ <field name="name">Breaking and Entering</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brick_2006</field>
+ <field name="directed_by">Rian Johnson</field>
+ <field name="initial_release_date">2006-04-07</field>
+ <field name="name">Brick</field>
+ <field name="genre">Film noir</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Neo-noir</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Detective fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bride_and_prejudice</field>
+ <field name="directed_by">Gurinder Chadha</field>
+ <field name="initial_release_date">2004-10-06</field>
+ <field name="name">Bride and Prejudice</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bridget_jones_the_edge_of_reason</field>
+ <field name="directed_by">Beeban Kidron</field>
+ <field name="initial_release_date">2004-11-08</field>
+ <field name="name">Bridget Jones: The Edge of Reason</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bridget_joness_diary_2001</field>
+ <field name="directed_by">Sharon Maguire</field>
+ <field name="initial_release_date">2001-04-04</field>
+ <field name="name">Bridget Jones's Diary</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brigham_city_2001</field>
+ <field name="directed_by">Richard Dutcher</field>
+ <field name="name">Brigham City</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bright_young_things</field>
+ <field name="directed_by">Stephen Fry</field>
+ <field name="initial_release_date">2003-10-03</field>
+ <field name="name">Bright Young Things</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/Brilliant_$0028film$0029</field>
+ <field name="directed_by">Roger Cardinal</field>
+ <field name="initial_release_date">2004-02-15</field>
+ <field name="name">Brilliant</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bring_it_on</field>
+ <field name="directed_by">Peyton Reed</field>
+ <field name="initial_release_date">2000-08-22</field>
+ <field name="name">Bring It On</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Sports</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bring_it_on_again</field>
+ <field name="directed_by">Damon Santostefano</field>
+ <field name="initial_release_date">2004-01-13</field>
+ <field name="name">Bring It On Again</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bring_it_on_all_or_nothing</field>
+ <field name="directed_by">Steve Rash</field>
+ <field name="initial_release_date">2006-08-08</field>
+ <field name="name">Bring It On: All or Nothing</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bringing_down_the_house</field>
+ <field name="directed_by">Adam Shankman</field>
+ <field name="initial_release_date">2003-03-07</field>
+ <field name="name">Bringing Down the House</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Screwball comedy</field>
+ <field name="genre">Comedy of Errors</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/broadway_the_golden_age</field>
+ <field name="directed_by">Rick McKay</field>
+ <field name="initial_release_date">2004-06-11</field>
+ <field name="name">Broadway: The Golden Age</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brokeback_mountain</field>
+ <field name="directed_by">Ang Lee</field>
+ <field name="initial_release_date">2005-09-02</field>
+ <field name="name">Brokeback Mountain</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/broken_allegiance</field>
+ <field name="directed_by">Nick Hallam</field>
+ <field name="name">Broken Allegiance</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fan film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/broken_flowers</field>
+ <field name="directed_by">Jim Jarmusch</field>
+ <field name="initial_release_date">2005-08-05</field>
+ <field name="name">Broken Flowers</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/the_broken_hearts_club_a_romantic_comedy</field>
+ <field name="directed_by">Greg Berlanti</field>
+ <field name="initial_release_date">2000-01-29</field>
+ <field name="name">The Broken Hearts Club: A Romantic Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brooklyn_lobster</field>
+ <field name="directed_by">Kevin Jordan</field>
+ <field name="initial_release_date">2005-09-09</field>
+ <field name="name">Brooklyn Lobster</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brother</field>
+ <field name="directed_by">Takeshi Kitano</field>
+ <field name="name">Brother</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brother_bear</field>
+ <field name="directed_by">Aaron Blaise</field>
+ <field name="directed_by">Robert A. Walker</field>
+ <field name="initial_release_date">2003-10-20</field>
+ <field name="name">Brother Bear</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brother_bear_2</field>
+ <field name="directed_by">Ben Gluck</field>
+ <field name="initial_release_date">2006-08-29</field>
+ <field name="name">Brother Bear 2</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animated cartoon</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brother_2</field>
+ <field name="directed_by">Aleksei Balabanov</field>
+ <field name="initial_release_date">2000-05-11</field>
+ <field name="name">Brother 2</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brotherhood_of_blood</field>
+ <field name="directed_by">Michael Roesch</field>
+ <field name="directed_by">Peter Scheerer</field>
+ <field name="directed_by">Sid Haig</field>
+ <field name="name">Brotherhood of Blood</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Creature Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brotherhood_of_the_wolf</field>
+ <field name="directed_by">Christophe Gans</field>
+ <field name="initial_release_date">2001-01-31</field>
+ <field name="name">Brotherhood of the Wolf</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brothers_of_the_head</field>
+ <field name="directed_by">Keith Fulton</field>
+ <field name="directed_by">Louis Pepe</field>
+ <field name="initial_release_date">2005-09-10</field>
+ <field name="name">Brothers of the Head</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Music</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/brown_sugar_2002</field>
+ <field name="directed_by">Rick Famuyiwa</field>
+ <field name="initial_release_date">2002-10-05</field>
+ <field name="name">Brown Sugar</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bruce_almighty</field>
+ <field name="directed_by">Tom Shadyac</field>
+ <field name="initial_release_date">2003-05-23</field>
+ <field name="name">Bruce Almighty</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bubba_ho-tep</field>
+ <field name="directed_by">Don Coscarelli</field>
+ <field name="initial_release_date">2002-06-09</field>
+ <field name="name">Bubba Ho-Tep</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bubble</field>
+ <field name="directed_by">Steven Soderbergh</field>
+ <field name="initial_release_date">2005-09-03</field>
+ <field name="name">Bubble</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bubble_boy</field>
+ <field name="directed_by">Blair Hayes</field>
+ <field name="initial_release_date">2001-08-23</field>
+ <field name="name">Bubble Boy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/buddy_boy</field>
+ <field name="directed_by">Mark Hanlon</field>
+ <field name="initial_release_date">2000-03-24</field>
+ <field name="name">Buddy Boy</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Erotic thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/buffalo_dreams</field>
+ <field name="directed_by">David Jackson</field>
+ <field name="initial_release_date">2005-03-11</field>
+ <field name="name">Buffalo Dreams</field>
+ <field name="genre">Western</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/buffalo_soldiers</field>
+ <field name="directed_by">Gregor Jordan</field>
+ <field name="initial_release_date">2001-09-08</field>
+ <field name="name">Buffalo Soldiers</field>
+ <field name="genre">War film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bug_2006</field>
+ <field name="directed_by">William Friedkin</field>
+ <field name="initial_release_date">2006-05-19</field>
+ <field name="name">Bug</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bulletproof_monk</field>
+ <field name="directed_by">Paul Hunter</field>
+ <field name="initial_release_date">2003-04-16</field>
+ <field name="name">Bulletproof Monk</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bully_2001</field>
+ <field name="directed_by">Larry Clark</field>
+ <field name="initial_release_date">2001-06-15</field>
+ <field name="name">Bully</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bunny_2005</field>
+ <field name="directed_by">V. V. Vinayak</field>
+ <field name="initial_release_date">2005-04-06</field>
+ <field name="name">Bunny</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bunshinsaba</field>
+ <field name="directed_by">Ahn Byeong-ki</field>
+ <field name="initial_release_date">2004-05-14</field>
+ <field name="name">Bunshinsaba</field>
+ <field name="genre">Horror</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">East Asian cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bunty_aur_babli</field>
+ <field name="directed_by">Shaad Ali</field>
+ <field name="initial_release_date">2005-05-27</field>
+ <field name="name">Bunty Aur Babli</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/onibus_174</field>
+ <field name="directed_by">José Padilha</field>
+ <field name="initial_release_date">2002-10-22</field>
+ <field name="name">Bus 174</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">True crime</field>
+ </doc>
+ <doc>
+ <field name="id">/en/bus_conductor</field>
+ <field name="directed_by">V. M. Vinu</field>
+ <field name="initial_release_date">2005-12-23</field>
+ <field name="name">Bus Conductor</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/m/0bvs38</field>
+ <field name="directed_by">Michael Votto</field>
+ <field name="name">Busted Shoes and Broken Hearts: A Film About Lowlight</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/butterfly_2004</field>
+ <field name="directed_by">Yan Yan Mak</field>
+ <field name="initial_release_date">2004-09-04</field>
+ <field name="name">Butterfly</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Chinese Movies</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/butterfly_on_a_wheel</field>
+ <field name="directed_by">Mike Barker</field>
+ <field name="initial_release_date">2007-02-10</field>
+ <field name="name">Butterfly on a Wheel</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/c_i_d_moosa</field>
+ <field name="directed_by">Johny Antony</field>
+ <field name="initial_release_date">2003-07-04</field>
+ <field name="name">C.I.D.Moosa</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/c_r_a_z_y</field>
+ <field name="directed_by">Jean-Marc Vallée</field>
+ <field name="initial_release_date">2005-05-27</field>
+ <field name="name">C.R.A.Z.Y.</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/c_s_a_the_confederate_states_of_america</field>
+ <field name="directed_by">Kevin Willmott</field>
+ <field name="name">C.S.A.: The Confederate States of America</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cabaret_paradis</field>
+ <field name="directed_by">Corinne Benizio</field>
+ <field name="directed_by">Gilles Benizio</field>
+ <field name="initial_release_date">2006-04-12</field>
+ <field name="name">Cabaret Paradis</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/it_id/335645</field>
+ <field name="directed_by">Michael Haneke</field>
+ <field name="initial_release_date">2005-05-14</field>
+ <field name="name">Caché</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cactuses</field>
+ <field name="directed_by">Matt Hannon</field>
+ <field name="directed_by">Rick Rapoza</field>
+ <field name="initial_release_date">2006-03-15</field>
+ <field name="name">Cactuses</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cadet_kelly</field>
+ <field name="directed_by">Larry Shaw</field>
+ <field name="initial_release_date">2002-03-08</field>
+ <field name="name">Cadet Kelly</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/caffeine_2006</field>
+ <field name="directed_by">John Cosgrove</field>
+ <field name="name">Caffeine</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/es_id/1062610</field>
+ <field name="directed_by">Nisha Ganatra</field>
+ <field name="directed_by">Jennifer Arzt</field>
+ <field name="name">Cake</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/calcutta_mail</field>
+ <field name="directed_by">Sudhir Mishra</field>
+ <field name="initial_release_date">2003-06-30</field>
+ <field name="name">Calcutta Mail</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/can_you_hack_it</field>
+ <field name="directed_by">Sam Bozzo</field>
+ <field name="name">Hackers Wanted</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/candy_2006</field>
+ <field name="directed_by">Neil Armfield</field>
+ <field name="initial_release_date">2006-04-27</field>
+ <field name="name">Candy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/caotica_ana</field>
+ <field name="directed_by">Julio Medem</field>
+ <field name="initial_release_date">2007-08-24</field>
+ <field name="name">Caótica Ana</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/capote</field>
+ <field name="directed_by">Bennett Miller</field>
+ <field name="initial_release_date">2005-09-02</field>
+ <field name="name">Capote</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/capturing_the_friedmans</field>
+ <field name="directed_by">Andrew Jarecki</field>
+ <field name="initial_release_date">2003-01-17</field>
+ <field name="name">Capturing the Friedmans</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/care_bears_journey_to_joke_a_lot</field>
+ <field name="directed_by">Mike Fallows</field>
+ <field name="initial_release_date">2004-10-05</field>
+ <field name="name">Care Bears: Journey to Joke-a-lot</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cargo_2006</field>
+ <field name="directed_by">Clive Gordon</field>
+ <field name="initial_release_date">2006-01-24</field>
+ <field name="name">Cargo</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cars</field>
+ <field name="directed_by">John Lasseter</field>
+ <field name="directed_by">Joe Ranft</field>
+ <field name="initial_release_date">2006-03-14</field>
+ <field name="name">Cars</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/casanova</field>
+ <field name="directed_by">Lasse Hallström</field>
+ <field name="initial_release_date">2005-09-03</field>
+ <field name="name">Casanova</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Costume drama</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Swashbuckler film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/case_of_evil</field>
+ <field name="directed_by">Graham Theakston</field>
+ <field name="initial_release_date">2002-10-25</field>
+ <field name="name">Sherlock: Case of Evil</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cast_away</field>
+ <field name="initial_release_date">2000-12-07</field>
+ <field name="name">Cast Away</field>
+ <field name="directed_by">Robert Zemeckis</field>
+ <field name="genre">Airplanes and airports</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/castlevania_2007</field>
+ <field name="name">Castlevania</field>
+ <field name="directed_by">Paul W. S. Anderson</field>
+ <field name="directed_by">Sylvain White</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ </doc>
+ <doc>
+ <field name="id">/en/catch_me_if_you_can</field>
+ <field name="initial_release_date">2002-12-16</field>
+ <field name="name">Catch Me If You Can</field>
+ <field name="directed_by">Steven Spielberg</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/catch_that_kid</field>
+ <field name="initial_release_date">2004-02-06</field>
+ <field name="name">Catch That Kid</field>
+ <field name="directed_by">Bart Freundlich</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Family</field>
+ <field name="genre">Caper story</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/caterina_in_the_big_city</field>
+ <field name="initial_release_date">2003-10-24</field>
+ <field name="name">Caterina in the Big City</field>
+ <field name="directed_by">Paolo Virzì</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cats_dogs</field>
+ <field name="initial_release_date">2001-07-04</field>
+ <field name="name">Cats &amp;amp; Dogs</field>
+ <field name="directed_by">Lawrence Guterman</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Adventure</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/catwoman_2004</field>
+ <field name="initial_release_date">2004-07-19</field>
+ <field name="name">Catwoman</field>
+ <field name="directed_by">Pitof</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Superhero movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/caved_in_prehistoric_terror</field>
+ <field name="initial_release_date">2006-01-07</field>
+ <field name="name">Caved In: Prehistoric Terror</field>
+ <field name="directed_by">Richard Pepin</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Monster</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Sci-Fi Horror</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cellular</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="name">Cellular</field>
+ <field name="directed_by">David R. Ellis</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ </doc>
+ <doc>
+ <field name="id">/en/center_stage</field>
+ <field name="initial_release_date">2000-05-12</field>
+ <field name="name">Center Stage</field>
+ <field name="directed_by">Nicholas Hytner</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Dance film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chai_lai</field>
+ <field name="initial_release_date">2006-01-26</field>
+ <field name="name">Chai Lai</field>
+ <field name="directed_by">Poj Arnon</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chain_2004</field>
+ <field name="name">Chain</field>
+ <field name="directed_by">Jem Cohen</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chakram_2005</field>
+ <field name="initial_release_date">2005-03-25</field>
+ <field name="name">Chakram</field>
+ <field name="directed_by">Krishna Vamsi</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/challenger_2007</field>
+ <field name="name">Challenger</field>
+ <field name="directed_by">Philip Kaufman</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chalo_ishq_ladaaye</field>
+ <field name="initial_release_date">2002-12-27</field>
+ <field name="name">Chalo Ishq Ladaaye</field>
+ <field name="directed_by">Aziz Sejawal</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chalte_chalte</field>
+ <field name="initial_release_date">2003-06-12</field>
+ <field name="name">Chalte Chalte</field>
+ <field name="directed_by">Aziz Mirza</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chameli</field>
+ <field name="initial_release_date">2003-12-31</field>
+ <field name="name">Chameli</field>
+ <field name="directed_by">Sudhir Mishra</field>
+ <field name="directed_by">Anant Balani</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chandni_bar</field>
+ <field name="initial_release_date">2001-09-28</field>
+ <field name="name">Chandni Bar</field>
+ <field name="directed_by">Madhur Bhandarkar</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chandramukhi</field>
+ <field name="initial_release_date">2005-04-13</field>
+ <field name="name">Chandramukhi</field>
+ <field name="directed_by">P. Vasu</field>
+ <field name="genre">Horror</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/changing_lanes</field>
+ <field name="initial_release_date">2002-04-07</field>
+ <field name="name">Changing Lanes</field>
+ <field name="directed_by">Roger Michell</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chaos_2007</field>
+ <field name="initial_release_date">2005-12-15</field>
+ <field name="name">Chaos</field>
+ <field name="directed_by">Tony Giglio</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chaos_2005</field>
+ <field name="initial_release_date">2005-08-10</field>
+ <field name="name">Chaos</field>
+ <field name="directed_by">David DeFalco</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Slasher</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chaos_and_creation_at_abbey_road</field>
+ <field name="initial_release_date">2006-01-27</field>
+ <field name="name">Chaos and Creation at Abbey Road</field>
+ <field name="directed_by">Simon Hilton</field>
+ <field name="genre">Musical</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chaos_theory_2007</field>
+ <field name="name">Chaos Theory</field>
+ <field name="directed_by">Marcos Siega</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chapter_27</field>
+ <field name="initial_release_date">2007-01-25</field>
+ <field name="name">Chapter 27</field>
+ <field name="directed_by">Jarrett Schaefer</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/charlie_and_the_chocolate_factory_2005</field>
+ <field name="initial_release_date">2005-07-10</field>
+ <field name="name">Charlie and the Chocolate Factory</field>
+ <field name="directed_by">Tim Burton</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Remake</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/charlies_angels</field>
+ <field name="initial_release_date">2000-10-22</field>
+ <field name="name">Charlie's Angels</field>
+ <field name="directed_by">Joseph McGinty Nichol</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/charlies_angels_full_throttle</field>
+ <field name="initial_release_date">2003-06-18</field>
+ <field name="name">Charlie's Angels: Full Throttle</field>
+ <field name="directed_by">Joseph McGinty Nichol</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/charlotte_gray</field>
+ <field name="initial_release_date">2001-12-17</field>
+ <field name="name">Charlotte Gray</field>
+ <field name="directed_by">Gillian Armstrong</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/charlottes_web</field>
+ <field name="initial_release_date">2006-12-07</field>
+ <field name="name">Charlotte's Web</field>
+ <field name="directed_by">Gary Winick</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chasing_liberty</field>
+ <field name="initial_release_date">2004-01-07</field>
+ <field name="name">Chasing Liberty</field>
+ <field name="directed_by">Andy Cadiff</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chasing_papi</field>
+ <field name="initial_release_date">2003-04-16</field>
+ <field name="name">Chasing Papi</field>
+ <field name="directed_by">Linda Mendoza</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Farce</field>
+ <field name="genre">Chase Movie</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chasing_sleep</field>
+ <field name="initial_release_date">2001-09-16</field>
+ <field name="name">Chasing Sleep</field>
+ <field name="directed_by">Michael Walker</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Surrealism</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Crime Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chasing_the_horizon</field>
+ <field name="initial_release_date">2006-04-26</field>
+ <field name="name">Chasing the Horizon</field>
+ <field name="directed_by">Markus Canter</field>
+ <field name="directed_by">Mason Canter</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Auto racing</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chathikkatha_chanthu</field>
+ <field name="initial_release_date">2004-04-14</field>
+ <field name="name">Chathikkatha Chanthu</field>
+ <field name="directed_by">Meccartin</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chatrapati</field>
+ <field name="initial_release_date">2005-09-25</field>
+ <field name="name">Chhatrapati</field>
+ <field name="directed_by">S. S. Rajamouli</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cheaper_by_the_dozen_2003</field>
+ <field name="initial_release_date">2003-12-25</field>
+ <field name="name">Cheaper by the Dozen</field>
+ <field name="directed_by">Shawn Levy</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cheaper_by_the_dozen_2</field>
+ <field name="initial_release_date">2005-12-21</field>
+ <field name="name">Cheaper by the Dozen 2</field>
+ <field name="directed_by">Adam Shankman</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Domestic Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/checking_out_2005</field>
+ <field name="initial_release_date">2005-04-10</field>
+ <field name="name">Checking Out</field>
+ <field name="directed_by">Jeff Hare</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chellamae</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="name">Chellamae</field>
+ <field name="directed_by">Gandhi Krishna</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chemman_chaalai</field>
+ <field name="name">Chemman Chaalai</field>
+ <field name="directed_by">Deepak Kumaran Menon</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chennaiyil_oru_mazhai_kaalam</field>
+ <field name="name">Chennaiyil Oru Mazhai Kaalam</field>
+ <field name="directed_by">Prabhu Deva</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cher_the_farewell_tour_live_in_miami</field>
+ <field name="initial_release_date">2003-08-26</field>
+ <field name="name">The Farewell Tour</field>
+ <field name="directed_by">Dorina Sanchez</field>
+ <field name="directed_by">David Mallet</field>
+ <field name="genre">Music video</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cherry_falls</field>
+ <field name="initial_release_date">2000-07-29</field>
+ <field name="name">Cherry Falls</field>
+ <field name="directed_by">Geoffrey Wright</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/Chess_$00282006_film$0029</field>
+ <field name="initial_release_date">2006-07-07</field>
+ <field name="name">Chess</field>
+ <field name="directed_by">RajBabu</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chica_de_rio</field>
+ <field name="initial_release_date">2003-04-11</field>
+ <field name="name">Girl from Rio</field>
+ <field name="directed_by">Christopher Monger</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chicago_2002</field>
+ <field name="initial_release_date">2002-12-10</field>
+ <field name="name">Chicago</field>
+ <field name="directed_by">Rob Marshall</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Musical comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chicken_little</field>
+ <field name="initial_release_date">2005-10-30</field>
+ <field name="name">Chicken Little</field>
+ <field name="directed_by">Mark Dindal</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chicken_run</field>
+ <field name="initial_release_date">2000-06-21</field>
+ <field name="name">Chicken Run</field>
+ <field name="directed_by">Peter Lord</field>
+ <field name="directed_by">Nick Park</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/child_marriage_2005</field>
+ <field name="name">Child Marriage</field>
+ <field name="directed_by">Neeraj Kumar</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/children_of_men</field>
+ <field name="initial_release_date">2006-09-03</field>
+ <field name="name">Children of Men</field>
+ <field name="directed_by">Alfonso Cuarón</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Dystopia</field>
+ <field name="genre">Doomsday film</field>
+ <field name="genre">Future noir</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/children_of_the_corn_revelation</field>
+ <field name="initial_release_date">2001-10-09</field>
+ <field name="name">Children of the Corn: Revelation</field>
+ <field name="directed_by">Guy Magar</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Cult film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/children_of_the_living_dead</field>
+ <field name="name">Children of the Living Dead</field>
+ <field name="directed_by">Tor Ramsey</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Zombie Film</field>
+ <field name="genre">Horror comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chinthamani_kolacase</field>
+ <field name="initial_release_date">2006-03-31</field>
+ <field name="name">Chinthamani Kolacase</field>
+ <field name="directed_by">Shaji Kailas</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chips_2008</field>
+ <field name="name">CHiPs</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Children's/Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chithiram_pesuthadi</field>
+ <field name="initial_release_date">2006-02-10</field>
+ <field name="name">Chithiram Pesuthadi</field>
+ <field name="directed_by">Mysskin</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chocolat_2000</field>
+ <field name="initial_release_date">2000-12-15</field>
+ <field name="name">Chocolat</field>
+ <field name="directed_by">Lasse Hallström</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/choose_your_own_adventure_the_abominable_snowman</field>
+ <field name="initial_release_date">2006-07-25</field>
+ <field name="name">Choose Your Own Adventure The Abominable Snowman</field>
+ <field name="directed_by">Bob Doucette</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chopin_desire_for_love</field>
+ <field name="initial_release_date">2002-03-01</field>
+ <field name="name">Chopin: Desire for Love</field>
+ <field name="directed_by">Jerzy Antczak</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chopper</field>
+ <field name="initial_release_date">2000-08-03</field>
+ <field name="name">Chopper</field>
+ <field name="directed_by">Andrew Dominik</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chori_chori_2003</field>
+ <field name="initial_release_date">2003-08-01</field>
+ <field name="name">Chori Chori</field>
+ <field name="directed_by">Milan Luthria</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chori_chori_chupke_chupke</field>
+ <field name="initial_release_date">2001-03-09</field>
+ <field name="name">Chori Chori Chupke Chupke</field>
+ <field name="directed_by">Abbas Burmawalla</field>
+ <field name="directed_by">Mustan Burmawalla</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/christinas_house</field>
+ <field name="initial_release_date">2000-02-24</field>
+ <field name="name">Christina's House</field>
+ <field name="directed_by">Gavin Wilding</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/christmas_with_the_kranks</field>
+ <field name="initial_release_date">2004-11-24</field>
+ <field name="name">Christmas with the Kranks</field>
+ <field name="directed_by">Joe Roth</field>
+ <field name="genre">Christmas movie</field>
+ <field name="genre">Family</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Holiday Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chromophobia</field>
+ <field name="initial_release_date">2005-05-21</field>
+ <field name="name">Chromophobia</field>
+ <field name="directed_by">Martha Fiennes</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chubby_killer</field>
+ <field name="name">Chubby Killer</field>
+ <field name="directed_by">Reuben Rox</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chukkallo_chandrudu</field>
+ <field name="initial_release_date">2006-01-14</field>
+ <field name="name">Chukkallo Chandrudu</field>
+ <field name="directed_by">Siva Kumar</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/chup_chup_ke</field>
+ <field name="initial_release_date">2006-06-09</field>
+ <field name="name">Chup Chup Ke</field>
+ <field name="directed_by">Priyadarshan</field>
+ <field name="directed_by">Kookie Gulati</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/church_ball</field>
+ <field name="initial_release_date">2006-03-17</field>
+ <field name="name">Church Ball</field>
+ <field name="directed_by">Kurt Hale</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/churchill_the_hollywood_years</field>
+ <field name="initial_release_date">2004-12-03</field>
+ <field name="name">Churchill: The Hollywood Years</field>
+ <field name="directed_by">Peter Richardson</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cinderella_iii</field>
+ <field name="initial_release_date">2007-02-06</field>
+ <field name="name">Cinderella III: A Twist in Time</field>
+ <field name="directed_by">Frank Nissen</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animated cartoon</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Children's/Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cinderella_man</field>
+ <field name="initial_release_date">2005-05-23</field>
+ <field name="name">Cinderella Man</field>
+ <field name="directed_by">Ron Howard</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cinemania</field>
+ <field name="name">Cinemania</field>
+ <field name="directed_by">Angela Christlieb</field>
+ <field name="directed_by">Stephen Kijak</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ </doc>
+ <doc>
+ <field name="id">/en/city_of_ghosts</field>
+ <field name="initial_release_date">2003-03-27</field>
+ <field name="name">City of Ghosts</field>
+ <field name="directed_by">Matt Dillon</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/city_of_god</field>
+ <field name="initial_release_date">2002-05-18</field>
+ <field name="name">City of God</field>
+ <field name="directed_by">Fernando Meirelles</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/claustrophobia_2003</field>
+ <field name="name">Claustrophobia</field>
+ <field name="directed_by">Mark Tapio Kines</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Horror</field>
+ </doc>
+ <doc>
+ <field name="id">/en/clean</field>
+ <field name="initial_release_date">2004-03-27</field>
+ <field name="name">Clean</field>
+ <field name="directed_by">Olivier Assayas</field>
+ <field name="genre">Music</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/clear_cut_the_story_of_philomath_oregon</field>
+ <field name="initial_release_date">2006-01-20</field>
+ <field name="name">Clear Cut: The Story of Philomath, Oregon</field>
+ <field name="directed_by">Peter Richardson</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/clerks_ii</field>
+ <field name="initial_release_date">2006-05-26</field>
+ <field name="name">Clerks II</field>
+ <field name="directed_by">Kevin Smith</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/click</field>
+ <field name="initial_release_date">2006-06-22</field>
+ <field name="name">Click</field>
+ <field name="directed_by">Frank Coraci</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/clockstoppers</field>
+ <field name="initial_release_date">2002-03-29</field>
+ <field name="name">Clockstoppers</field>
+ <field name="directed_by">Jonathan Frakes</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/closer_2004</field>
+ <field name="initial_release_date">2004-12-03</field>
+ <field name="name">Closer</field>
+ <field name="directed_by">Mike Nichols</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/closing_the_ring</field>
+ <field name="initial_release_date">2007-09-14</field>
+ <field name="name">Closing the Ring</field>
+ <field name="directed_by">Richard Attenborough</field>
+ <field name="genre">War film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/club_dread</field>
+ <field name="initial_release_date">2004-02-27</field>
+ <field name="name">Club Dread</field>
+ <field name="directed_by">Jay Chandrasekhar</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/coach_carter</field>
+ <field name="initial_release_date">2005-01-13</field>
+ <field name="name">Coach Carter</field>
+ <field name="directed_by">Thomas Carter</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/coast_guard_2002</field>
+ <field name="initial_release_date">2002-11-14</field>
+ <field name="name">The Coast Guard</field>
+ <field name="directed_by">Kim Ki-duk</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/code_46</field>
+ <field name="initial_release_date">2004-05-07</field>
+ <field name="name">Code 46</field>
+ <field name="directed_by">Michael Winterbottom</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/codename_kids_next_door_operation_z_e_r_o</field>
+ <field name="initial_release_date">2006-01-13</field>
+ <field name="name">Codename: Kids Next Door: Operation Z.E.R.O.</field>
+ <field name="directed_by">Tom Warburton</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/coffee_and_cigarettes</field>
+ <field name="initial_release_date">2003-09-05</field>
+ <field name="name">Coffee and Cigarettes</field>
+ <field name="directed_by">Jim Jarmusch</field>
+ <field name="genre">Music</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cold_creek_manor</field>
+ <field name="initial_release_date">2003-09-19</field>
+ <field name="name">Cold Creek Manor</field>
+ <field name="directed_by">Mike Figgis</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cold_mountain</field>
+ <field name="initial_release_date">2003-12-25</field>
+ <field name="name">Cold Mountain</field>
+ <field name="directed_by">Anthony Minghella</field>
+ <field name="genre">War film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cold_showers</field>
+ <field name="initial_release_date">2005-05-22</field>
+ <field name="name">Cold Showers</field>
+ <field name="directed_by">Antony Cordier</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Erotic Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/collateral</field>
+ <field name="initial_release_date">2004-08-05</field>
+ <field name="name">Collateral</field>
+ <field name="directed_by">Michael Mann</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Film noir</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/collateral_damage_2002</field>
+ <field name="initial_release_date">2002-02-04</field>
+ <field name="name">Collateral Damage</field>
+ <field name="directed_by">Andrew Davis</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/comedian_2002</field>
+ <field name="initial_release_date">2002-10-11</field>
+ <field name="name">Comedian</field>
+ <field name="directed_by">Christian Charles</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/coming_out_2006</field>
+ <field name="name">Coming Out</field>
+ <field name="directed_by">Joel Zwick</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/commitments</field>
+ <field name="initial_release_date">2001-05-04</field>
+ <field name="name">Commitments</field>
+ <field name="directed_by">Carol Mayes</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/common_ground_2000</field>
+ <field name="initial_release_date">2000-01-29</field>
+ <field name="name">Common Ground</field>
+ <field name="directed_by">Donna Deitch</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/company_2002</field>
+ <field name="initial_release_date">2002-04-15</field>
+ <field name="name">Company</field>
+ <field name="directed_by">Ram Gopal Varma</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/confessions_of_a_dangerous_mind</field>
+ <field name="name">Confessions of a Dangerous Mind</field>
+ <field name="directed_by">George Clooney</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/confessions_of_a_teenage_drama_queen</field>
+ <field name="initial_release_date">2004-02-17</field>
+ <field name="genre">Family</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="directed_by">Sara Sugarman</field>
+ <field name="name">Confessions of a Teenage Drama Queen</field>
+ </doc>
+ <doc>
+ <field name="id">/en/confetti_2006</field>
+ <field name="initial_release_date">2006-05-05</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Music</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Debbie Isitt</field>
+ <field name="name">Confetti</field>
+ </doc>
+ <doc>
+ <field name="id">/en/confidence_2004</field>
+ <field name="initial_release_date">2003-01-20</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">James Foley</field>
+ <field name="name">Confidence</field>
+ </doc>
+ <doc>
+ <field name="id">/en/connie_and_carla</field>
+ <field name="initial_release_date">2004-04-16</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Comedy of Errors</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Michael Lembeck</field>
+ <field name="name">Connie and Carla</field>
+ </doc>
+ <doc>
+ <field name="id">/en/conspiracy_2001</field>
+ <field name="initial_release_date">2001-05-19</field>
+ <field name="genre">History</field>
+ <field name="genre">War film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Frank Pierson</field>
+ <field name="name">Conspiracy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/constantine_2005</field>
+ <field name="initial_release_date">2005-02-08</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="directed_by">Francis Lawrence</field>
+ <field name="name">Constantine</field>
+ </doc>
+ <doc>
+ <field name="id">/en/control_room</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">War film</field>
+ <field name="genre">Journalism</field>
+ <field name="genre">Media studies</field>
+ <field name="directed_by">Jehane Noujaim</field>
+ <field name="name">Control Room</field>
+ </doc>
+ <doc>
+ <field name="id">/en/control_the_ian_curtis_film</field>
+ <field name="initial_release_date">2007-05-17</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Anton Corbijn</field>
+ <field name="name">Control</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cope_2005</field>
+ <field name="initial_release_date">2007-01-23</field>
+ <field name="genre">Horror</field>
+ <field name="genre">B movie</field>
+ <field name="directed_by">Ronald Jackson</field>
+ <field name="directed_by">Ronald Jerry</field>
+ <field name="name">Cope</field>
+ </doc>
+ <doc>
+ <field name="id">/en/copying_beethoven</field>
+ <field name="initial_release_date">2006-07-30</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Agnieszka Holland</field>
+ <field name="name">Copying Beethoven</field>
+ </doc>
+ <doc>
+ <field name="id">/en/corporate</field>
+ <field name="initial_release_date">2006-07-07</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Madhur Bhandarkar</field>
+ <field name="name">Corporate</field>
+ </doc>
+ <doc>
+ <field name="id">/en/corpse_bride</field>
+ <field name="initial_release_date">2005-09-07</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="directed_by">Tim Burton</field>
+ <field name="directed_by">Mike Johnson</field>
+ <field name="name">Corpse Bride</field>
+ </doc>
+ <doc>
+ <field name="id">/en/covert_one_the_hades_factor</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Mick Jackson</field>
+ <field name="name">Covert One: The Hades Factor</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cow_belles</field>
+ <field name="initial_release_date">2006-03-24</field>
+ <field name="genre">Family</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Francine McDougall</field>
+ <field name="name">Cow Belles</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cowards_bend_the_knee</field>
+ <field name="initial_release_date">2003-02-26</field>
+ <field name="genre">Silent film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Surrealism</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Avant-garde</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Guy Maddin</field>
+ <field name="name">Cowards Bend the Knee</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cowboy_bebop_the_movie</field>
+ <field name="initial_release_date">2001-09-01</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="directed_by">ShinichirÅ Watanabe</field>
+ <field name="name">Cowboy Bebop: The Movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/coyote_ugly</field>
+ <field name="initial_release_date">2000-07-31</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">David McNally</field>
+ <field name="name">Coyote Ugly</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crackerjack_2002</field>
+ <field name="initial_release_date">2002-11-07</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Paul Moloney</field>
+ <field name="name">Crackerjack</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cradle_2_the_grave</field>
+ <field name="initial_release_date">2003-02-28</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Crime</field>
+ <field name="directed_by">Andrzej Bartkowiak</field>
+ <field name="name">Cradle 2 the Grave</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cradle_of_fear</field>
+ <field name="genre">Horror</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Slasher</field>
+ <field name="directed_by">Alex Chandon</field>
+ <field name="name">Cradle of Fear</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crank</field>
+ <field name="initial_release_date">2006-08-31</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action Thriller</field>
+ <field name="directed_by">Neveldine/Taylor</field>
+ <field name="name">Crank</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crash_2004</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Paul Haggis</field>
+ <field name="name">Crash</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crazy_beautiful</field>
+ <field name="initial_release_date">2001-06-28</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">John Stockwell</field>
+ <field name="name">Crazy/Beautiful</field>
+ </doc>
+ <doc>
+ <field name="id">/en/creep_2005</field>
+ <field name="initial_release_date">2004-08-10</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Christopher Smith</field>
+ <field name="name">Creep</field>
+ </doc>
+ <doc>
+ <field name="id">/en/criminal</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Gregory Jacobs</field>
+ <field name="name">Criminal</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crimson_gold</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jafar Panahi</field>
+ <field name="name">Crimson Gold</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crimson_rivers_ii_angels_of_the_apocalypse</field>
+ <field name="initial_release_date">2004-02-18</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="directed_by">Olivier Dahan</field>
+ <field name="name">Crimson Rivers II: Angels of the Apocalypse</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crocodile_2000</field>
+ <field name="initial_release_date">2000-12-26</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Tobe Hooper</field>
+ <field name="name">Crocodile</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crocodile_2_death_swamp</field>
+ <field name="initial_release_date">2002-08-01</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Creature Film</field>
+ <field name="directed_by">Gary Jones</field>
+ <field name="name">Crocodile 2: Death Swamp</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crocodile_dundee_in_los_angeles</field>
+ <field name="initial_release_date">2001-04-12</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Simon Wincer</field>
+ <field name="name">Crocodile Dundee in Los Angeles</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crossing_the_bridge_the_sound_of_istanbul</field>
+ <field name="initial_release_date">2005-06-09</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="directed_by">Fatih Akın</field>
+ <field name="name">Crossing the Bridge: The Sound of Istanbul</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crossover_2006</field>
+ <field name="initial_release_date">2006-09-01</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Preston A. Whitmore II</field>
+ <field name="name">Crossover</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crossroads_2002</field>
+ <field name="initial_release_date">2002-02-11</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Tamra Davis</field>
+ <field name="name">Crossroads</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crouching_tiger_hidden_dragon</field>
+ <field name="initial_release_date">2000-05-16</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ang Lee</field>
+ <field name="name">Crouching Tiger, Hidden Dragon</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cruel_intentions_3</field>
+ <field name="initial_release_date">2004-05-25</field>
+ <field name="genre">Erotica</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Scott Ziehl</field>
+ <field name="name">Cruel Intentions 3</field>
+ </doc>
+ <doc>
+ <field name="id">/en/crustaces_et_coquillages</field>
+ <field name="initial_release_date">2005-02-12</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jacques Martineau</field>
+ <field name="directed_by">Olivier Ducastel</field>
+ <field name="name">Crustacés et Coquillages</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cry_wolf</field>
+ <field name="initial_release_date">2005-09-16</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jeff Wadlow</field>
+ <field name="name">Cry_Wolf</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cube_2_hypercube</field>
+ <field name="initial_release_date">2002-04-15</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Escape Film</field>
+ <field name="directed_by">Andrzej Sekuła</field>
+ <field name="name">Cube 2: Hypercube</field>
+ </doc>
+ <doc>
+ <field name="id">/en/curious_george_2006</field>
+ <field name="initial_release_date">2006-02-10</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Matthew O'Callaghan</field>
+ <field name="name">Curious George</field>
+ </doc>
+ <doc>
+ <field name="id">/en/curse_of_the_golden_flower</field>
+ <field name="initial_release_date">2006-12-21</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Zhang Yimou</field>
+ <field name="name">Curse of the Golden Flower</field>
+ </doc>
+ <doc>
+ <field name="id">/en/cursed</field>
+ <field name="initial_release_date">2004-11-07</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Wes Craven</field>
+ <field name="name">Cursed</field>
+ </doc>
+ <doc>
+ <field name="id">/en/d-tox</field>
+ <field name="initial_release_date">2002-01-04</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">Jim Gillespie</field>
+ <field name="name">D-Tox</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daddy</field>
+ <field name="initial_release_date">2001-10-04</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Suresh Krissna</field>
+ <field name="name">Daddy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daddy_day_care</field>
+ <field name="initial_release_date">2003-05-04</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Steve Carr</field>
+ <field name="name">Daddy Day Care</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daddy_long-legs</field>
+ <field name="initial_release_date">2005-01-13</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Gong Jeong-shik</field>
+ <field name="name">Daddy-Long-Legs</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dahmer_2002</field>
+ <field name="initial_release_date">2002-06-21</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Jacobson</field>
+ <field name="name">Dahmer</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daisy_2006</field>
+ <field name="initial_release_date">2006-03-09</field>
+ <field name="genre">Chinese Movies</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Andrew Lau</field>
+ <field name="name">Daisy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daivanamathil</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Jayaraj</field>
+ <field name="name">Daivanamathil</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daltry_calhoun</field>
+ <field name="initial_release_date">2005-09-25</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Katrina Holden Bronson</field>
+ <field name="name">Daltry Calhoun</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dan_in_real_life</field>
+ <field name="initial_release_date">2007-10-26</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Domestic Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Peter Hedges</field>
+ <field name="name">Dan in Real Life</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dancer_in_the_dark</field>
+ <field name="initial_release_date">2000-05-17</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Lars von Trier</field>
+ <field name="name">Dancer in the Dark</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daniel_amos_live_in_anaheim_1985</field>
+ <field name="genre">Music video</field>
+ <field name="directed_by">Dave Perry</field>
+ <field name="name">Daniel Amos Live in Anaheim 1985</field>
+ </doc>
+ <doc>
+ <field name="id">/en/danny_deckchair</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jeff Balsmeyer</field>
+ <field name="name">Danny Deckchair</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daredevil_2003</field>
+ <field name="initial_release_date">2003-02-09</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Superhero movie</field>
+ <field name="directed_by">Mark Steven Johnson</field>
+ <field name="name">Daredevil</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dark_blue</field>
+ <field name="initial_release_date">2002-12-14</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ron Shelton</field>
+ <field name="name">Dark Blue</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dark_harvest</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Slasher</field>
+ <field name="directed_by">Paul Moore, Jr.</field>
+ <field name="name">Dark Harvest</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dark_water</field>
+ <field name="initial_release_date">2005-06-27</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Walter Salles</field>
+ <field name="name">Dark Water</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dark_water_2002</field>
+ <field name="initial_release_date">2002-01-19</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Hideo Nakata</field>
+ <field name="name">Dark Water</field>
+ </doc>
+ <doc>
+ <field name="id">/en/darkness_2002</field>
+ <field name="initial_release_date">2002-10-03</field>
+ <field name="genre">Horror</field>
+ <field name="directed_by">Jaume Balagueró</field>
+ <field name="name">Darkness</field>
+ </doc>
+ <doc>
+ <field name="id">/en/darna_mana_hai</field>
+ <field name="initial_release_date">2003-07-25</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Prawaal Raman</field>
+ <field name="name">Darna Mana Hai</field>
+ </doc>
+ <doc>
+ <field name="id">/en/darna_zaroori_hai</field>
+ <field name="initial_release_date">2006-04-28</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Ram Gopal Varma</field>
+ <field name="directed_by">Jijy Philip</field>
+ <field name="directed_by">Prawaal Raman</field>
+ <field name="directed_by">Vivek Shah</field>
+ <field name="directed_by">J. D. Chakravarthy</field>
+ <field name="directed_by">Sajid Khan</field>
+ <field name="directed_by">Manish Gupta</field>
+ <field name="name">Darna Zaroori Hai</field>
+ </doc>
+ <doc>
+ <field name="id">/en/darth_vaders_psychic_hotline</field>
+ <field name="initial_release_date">2002-04-16</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fan film</field>
+ <field name="directed_by">John E. Hudgens</field>
+ <field name="name">Darth Vader's Psychic Hotline</field>
+ </doc>
+ <doc>
+ <field name="id">/en/darwins_nightmare</field>
+ <field name="initial_release_date">2004-09-01</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Political cinema</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Hubert Sauper</field>
+ <field name="name">Darwin's Nightmare</field>
+ </doc>
+ <doc>
+ <field name="id">/en/das_experiment</field>
+ <field name="initial_release_date">2010-07-15</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Paul Scheuring</field>
+ <field name="name">The Experiment</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dasavatharam</field>
+ <field name="initial_release_date">2008-06-12</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Disaster Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="directed_by">K. S. Ravikumar</field>
+ <field name="name">Dasavathaaram</field>
+ </doc>
+ <doc>
+ <field name="id">/en/date_movie</field>
+ <field name="initial_release_date">2006-02-17</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Aaron Seltzer</field>
+ <field name="directed_by">Jason Friedberg</field>
+ <field name="name">Date Movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dave_attells_insomniac_tour</field>
+ <field name="initial_release_date">2006-04-11</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Joel Gallen</field>
+ <field name="name">Dave Attell's Insomniac Tour</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dave_chappelles_block_party</field>
+ <field name="initial_release_date">2006-03-03</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">Hip hop film</field>
+ <field name="genre">Stand-up comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Michel Gondry</field>
+ <field name="name">Dave Chappelle's Block Party</field>
+ </doc>
+ <doc>
+ <field name="id">/en/david_layla</field>
+ <field name="initial_release_date">2005-10-21</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jay Jonroy</field>
+ <field name="name">David &amp;amp; Layla</field>
+ </doc>
+ <doc>
+ <field name="id">/en/david_gilmour_in_concert</field>
+ <field name="genre">Music video</field>
+ <field name="genre">Concert film</field>
+ <field name="directed_by">David Mallet</field>
+ <field name="name">David Gilmour in Concert</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dawn_of_the_dead_2004</field>
+ <field name="initial_release_date">2004-03-10</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Zack Snyder</field>
+ <field name="name">Dawn of the Dead</field>
+ </doc>
+ <doc>
+ <field name="id">/en/day_of_the_dead_2007</field>
+ <field name="initial_release_date">2008-04-08</field>
+ <field name="genre">Splatter film</field>
+ <field name="genre">Doomsday film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Zombie Film</field>
+ <field name="directed_by">Steve Miner</field>
+ <field name="name">Day of the Dead</field>
+ </doc>
+ <doc>
+ <field name="id">/en/day_of_the_dead_2_contagium</field>
+ <field name="initial_release_date">2005-10-18</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Zombie Film</field>
+ <field name="directed_by">Ana Clavell</field>
+ <field name="directed_by">James Glenn Dudelson</field>
+ <field name="name">Day of the Dead 2: Contagium</field>
+ </doc>
+ <doc>
+ <field name="id">/en/day_watch</field>
+ <field name="initial_release_date">2006-01-01</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="directed_by">Timur Bekmambetov</field>
+ <field name="name">Day Watch</field>
+ </doc>
+ <doc>
+ <field name="id">/en/day_zero</field>
+ <field name="initial_release_date">2007-11-02</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Bryan Gunnar Cole</field>
+ <field name="name">Day Zero</field>
+ </doc>
+ <doc>
+ <field name="id">/en/de-lovely</field>
+ <field name="initial_release_date">2004-05-22</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Irwin Winkler</field>
+ <field name="name">De-Lovely</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dead_breakfast</field>
+ <field name="initial_release_date">2004-03-19</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Zombie Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Matthew Leutwyler</field>
+ <field name="name">Dead &amp;amp; Breakfast</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dead_birds_2005</field>
+ <field name="initial_release_date">2005-03-15</field>
+ <field name="genre">Horror</field>
+ <field name="directed_by">Alex Turner</field>
+ <field name="name">Dead Birds</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dead_end_2003</field>
+ <field name="initial_release_date">2003-01-30</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jean-Baptiste Andrea</field>
+ <field name="directed_by">Fabrice Canepa</field>
+ <field name="name">Dead End</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dead_friend</field>
+ <field name="initial_release_date">2004-06-18</field>
+ <field name="genre">Horror</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Kim Tae-kyeong</field>
+ <field name="name">Dead Friend</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dead_mans_shoes</field>
+ <field name="initial_release_date">2004-10-01</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Shane Meadows</field>
+ <field name="name">Dead Man's Shoes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dear_frankie</field>
+ <field name="initial_release_date">2004-05-04</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="directed_by">Shona Auerbach</field>
+ <field name="name">Dear Frankie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dear_wendy</field>
+ <field name="initial_release_date">2004-05-16</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Thomas Vinterberg</field>
+ <field name="name">Dear Wendy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/death_in_gaza</field>
+ <field name="initial_release_date">2004-02-11</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Children's Issues</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">James Miller</field>
+ <field name="name">Death in Gaza</field>
+ </doc>
+ <doc>
+ <field name="id">/en/death_to_smoochy</field>
+ <field name="initial_release_date">2002-03-29</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Danny DeVito</field>
+ <field name="name">Death to Smoochy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/death_trance</field>
+ <field name="initial_release_date">2005-05-12</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="directed_by">Yuji Shimomura</field>
+ <field name="name">Death Trance</field>
+ </doc>
+ <doc>
+ <field name="id">/en/death_walks_the_streets</field>
+ <field name="initial_release_date">2008-06-26</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="directed_by">James Zahn</field>
+ <field name="name">Death Walks the Streets</field>
+ </doc>
+ <doc>
+ <field name="id">/en/deathwatch</field>
+ <field name="initial_release_date">2002-10-06</field>
+ <field name="genre">Horror</field>
+ <field name="genre">War film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Michael J. Bassett</field>
+ <field name="name">Deathwatch</field>
+ </doc>
+ <doc>
+ <field name="id">/en/december_boys</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Rod Hardy</field>
+ <field name="name">December Boys</field>
+ </doc>
+ <doc>
+ <field name="id">/en/decoys</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Alien Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="directed_by">Matthew Hastings</field>
+ <field name="name">Decoys</field>
+ </doc>
+ <doc>
+ <field name="id">/en/deepavali</field>
+ <field name="initial_release_date">2007-02-09</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Ezhil</field>
+ <field name="name">Deepavali</field>
+ </doc>
+ <doc>
+ <field name="id">/en/deewane_huye_pagal</field>
+ <field name="initial_release_date">2005-11-25</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Vikram Bhatt</field>
+ <field name="name">Deewane Huye Paagal</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/ja_id/980449</field>
+ <field name="initial_release_date">2006-11-20</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Time travel</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Tony Scott</field>
+ <field name="name">Déjà Vu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/democrazy_2005</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Michael Legge</field>
+ <field name="name">Democrazy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/demonium</field>
+ <field name="initial_release_date">2001-08-25</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Andreas Schnaas</field>
+ <field name="name">Demonium</field>
+ </doc>
+ <doc>
+ <field name="id">/en/der_schuh_des_manitu</field>
+ <field name="initial_release_date">2001-07-13</field>
+ <field name="genre">Western</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Parody</field>
+ <field name="directed_by">Michael Herbig</field>
+ <field name="name">Der Schuh des Manitu</field>
+ </doc>
+ <doc>
+ <field name="id">/en/der_tunnel</field>
+ <field name="initial_release_date">2001-01-21</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Political thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Roland Suso Richter</field>
+ <field name="name">The Tunnel</field>
+ </doc>
+ <doc>
+ <field name="id">/en/derailed</field>
+ <field name="initial_release_date">2005-11-11</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mikael Håfström</field>
+ <field name="name">Derailed</field>
+ </doc>
+ <doc>
+ <field name="id">/en/derailed_2002</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Disaster Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Bob Misiorowski</field>
+ <field name="name">Derailed</field>
+ </doc>
+ <doc>
+ <field name="id">/en/destinys_child_live_in_atlana</field>
+ <field name="initial_release_date">2006-03-27</field>
+ <field name="genre">Music</field>
+ <field name="genre">Documentary film</field>
+ <field name="directed_by">Julia Knowles</field>
+ <field name="name">Destiny's Child: Live In Atlana</field>
+ </doc>
+ <doc>
+ <field name="id">/en/deuce_bigalow_european_gigolo</field>
+ <field name="initial_release_date">2005-08-06</field>
+ <field name="name">Deuce Bigalow: European Gigolo</field>
+ <field name="directed_by">Mike Bigelow</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Gross out</field>
+ <field name="genre">Gross-out film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dev</field>
+ <field name="initial_release_date">2004-06-11</field>
+ <field name="name">Dev</field>
+ <field name="directed_by">Govind Nihalani</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Bollywood</field>
+ </doc>
+ <doc>
+ <field name="id">/en/devadasu</field>
+ <field name="initial_release_date">2006-01-11</field>
+ <field name="name">Devadasu</field>
+ <field name="directed_by">YVS Chowdary</field>
+ <field name="directed_by">Gopireddy Mallikarjuna Reddy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/devdas_2002</field>
+ <field name="initial_release_date">2002-05-23</field>
+ <field name="name">Devdas</field>
+ <field name="directed_by">Sanjay Leela Bhansali</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/devils_playground_2003</field>
+ <field name="initial_release_date">2003-02-04</field>
+ <field name="name">Devil's Playground</field>
+ <field name="directed_by">Lucy Walker</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/the_devils_pond</field>
+ <field name="initial_release_date">2003-10-21</field>
+ <field name="name">Devil's Pond</field>
+ <field name="directed_by">Joel Viertel</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Suspense</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dhadkan</field>
+ <field name="initial_release_date">2000-08-11</field>
+ <field name="name">Dhadkan</field>
+ <field name="directed_by">Dharmesh Darshan</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dhool</field>
+ <field name="initial_release_date">2003-01-10</field>
+ <field name="name">Dhool</field>
+ <field name="directed_by">Dharani</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Family</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dhoom_2</field>
+ <field name="initial_release_date">2006-11-23</field>
+ <field name="name">Dhoom 2</field>
+ <field name="directed_by">Sanjay Gadhvi</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Musical</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Buddy cop film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dhyaas_parva</field>
+ <field name="name">Dhyaas Parva</field>
+ <field name="directed_by">Amol Palekar</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Marathi cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/diary_of_a_housewife</field>
+ <field name="name">Diary of a Housewife</field>
+ <field name="directed_by">Vinod Sukumaran</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Malayalam Cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/diary_of_a_mad_black_woman</field>
+ <field name="initial_release_date">2005-02-25</field>
+ <field name="name">Diary of a Mad Black Woman</field>
+ <field name="directed_by">Darren Grant</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dickie_roberts_former_child_star</field>
+ <field name="initial_release_date">2003-09-03</field>
+ <field name="name">Dickie Roberts: Former Child Star</field>
+ <field name="directed_by">Sam Weisman</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/die_bad</field>
+ <field name="initial_release_date">2000-07-15</field>
+ <field name="name">Die Bad</field>
+ <field name="directed_by">Ryoo Seung-wan</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/die_mommie_die</field>
+ <field name="initial_release_date">2003-01-20</field>
+ <field name="name">Die Mommie Die!</field>
+ <field name="directed_by">Mark Rucker</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dieu_est_grand_je_suis_toute_petite</field>
+ <field name="initial_release_date">2001-09-26</field>
+ <field name="name">God Is Great and I'm Not</field>
+ <field name="directed_by">Pascale Bailly</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Religious Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/digimon_the_movie</field>
+ <field name="initial_release_date">2000-03-17</field>
+ <field name="name">Digimon: The Movie</field>
+ <field name="directed_by">Mamoru Hosoda</field>
+ <field name="directed_by">Shigeyasu Yamauchi</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/digital_monster_x-evolution</field>
+ <field name="initial_release_date">2005-01-03</field>
+ <field name="name">Digital Monster X-Evolution</field>
+ <field name="directed_by">Hiroyuki KakudÅ</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Japanese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/digna_hasta_el_ultimo_aliento</field>
+ <field name="initial_release_date">2004-12-17</field>
+ <field name="name">Digna... hasta el último aliento</field>
+ <field name="directed_by">Felipe Cazals</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Law &amp;amp; Crime</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dil_chahta_hai</field>
+ <field name="initial_release_date">2001-07-24</field>
+ <field name="name">Dil Chahta Hai</field>
+ <field name="directed_by">Farhan Akhtar</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dil_diya_hai</field>
+ <field name="initial_release_date">2006-09-08</field>
+ <field name="name">Dil Diya Hai</field>
+ <field name="directed_by">Aditya Datt</field>
+ <field name="directed_by">Aditya Datt</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dil_hai_tumhaara</field>
+ <field name="initial_release_date">2002-09-06</field>
+ <field name="name">Dil Hai Tumhara</field>
+ <field name="directed_by">Kundan Shah</field>
+ <field name="genre">Family</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dil_ka_rishta</field>
+ <field name="initial_release_date">2003-01-17</field>
+ <field name="name">Dil Ka Rishta</field>
+ <field name="directed_by">Naresh Malhotra</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dil_ne_jise_apna_kahaa</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="name">Dil Ne Jise Apna Kahaa</field>
+ <field name="directed_by">Atul Agnihotri</field>
+ <field name="genre">Musical</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dinosaur_2000</field>
+ <field name="initial_release_date">2000-05-13</field>
+ <field name="name">Dinosaur</field>
+ <field name="directed_by">Eric Leighton</field>
+ <field name="directed_by">Ralph Zondag</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Costume drama</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dirty_dancing_2004</field>
+ <field name="initial_release_date">2004-02-27</field>
+ <field name="name">Dirty Dancing: Havana Nights</field>
+ <field name="directed_by">Guy Ferland</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Dance film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dirty_deeds</field>
+ <field name="initial_release_date">2002-07-18</field>
+ <field name="name">Dirty Deeds</field>
+ <field name="directed_by">David Caesar</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dirty_deeds_2005</field>
+ <field name="initial_release_date">2005-08-26</field>
+ <field name="name">Dirty Deeds</field>
+ <field name="directed_by">David Kendall</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dirty_love</field>
+ <field name="initial_release_date">2005-09-23</field>
+ <field name="name">Dirty Love</field>
+ <field name="directed_by">John Mallory Asher</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/disappearing_acts</field>
+ <field name="initial_release_date">2000-12-09</field>
+ <field name="name">Disappearing Acts</field>
+ <field name="directed_by">Gina Prince-Bythewood</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dishyum</field>
+ <field name="initial_release_date">2006-02-02</field>
+ <field name="name">Dishyum</field>
+ <field name="directed_by">Sasi</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/distant_lights</field>
+ <field name="initial_release_date">2003-02-11</field>
+ <field name="name">Distant Lights</field>
+ <field name="directed_by">Hans-Christian Schmid</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/district_b13</field>
+ <field name="initial_release_date">2004-11-10</field>
+ <field name="name">District 13</field>
+ <field name="directed_by">Pierre Morel</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/disturbia</field>
+ <field name="initial_release_date">2007-04-04</field>
+ <field name="name">Disturbia</field>
+ <field name="directed_by">D. J. Caruso</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ditto_2000</field>
+ <field name="initial_release_date">2000-05-27</field>
+ <field name="name">Ditto</field>
+ <field name="directed_by">Jeong-kwon Kim</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/divine_intervention_2002</field>
+ <field name="initial_release_date">2002-05-19</field>
+ <field name="name">Divine Intervention</field>
+ <field name="directed_by">Elia Suleiman</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/divine_secrets_of_the_ya_ya_sisterhood</field>
+ <field name="initial_release_date">2002-06-03</field>
+ <field name="name">Divine Secrets of the Ya-Ya Sisterhood</field>
+ <field name="directed_by">Callie Khouri</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/doa_dead_or_alive</field>
+ <field name="initial_release_date">2006-09-07</field>
+ <field name="name">DOA: Dead or Alive</field>
+ <field name="directed_by">Corey Yuen</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dodgeball_a_true_underdog_story</field>
+ <field name="initial_release_date">2004-06-18</field>
+ <field name="name">DodgeBall: A True Underdog Story</field>
+ <field name="directed_by">Rawson Marshall Thurber</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dog_soldiers</field>
+ <field name="initial_release_date">2002-03-22</field>
+ <field name="name">Dog Soldiers</field>
+ <field name="directed_by">Neil Marshall</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Creature Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dogtown_and_z-boys</field>
+ <field name="initial_release_date">2001-01-19</field>
+ <field name="name">Dogtown and Z-Boys</field>
+ <field name="directed_by">Stacy Peralta</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Extreme Sports</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dogville</field>
+ <field name="initial_release_date">2003-05-19</field>
+ <field name="name">Dogville</field>
+ <field name="directed_by">Lars von Trier</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/doll_master</field>
+ <field name="initial_release_date">2004-07-30</field>
+ <field name="name">The Doll Master</field>
+ <field name="directed_by">Jeong Yong-Gi</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dolls</field>
+ <field name="initial_release_date">2002-09-05</field>
+ <field name="name">Dolls</field>
+ <field name="directed_by">Takeshi Kitano</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dominion_prequel_to_the_exorcist</field>
+ <field name="initial_release_date">2005-05-20</field>
+ <field name="name">Dominion: Prequel to the Exorcist</field>
+ <field name="directed_by">Paul Schrader</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Cult film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/domino_2005</field>
+ <field name="initial_release_date">2005-09-25</field>
+ <field name="name">Domino</field>
+ <field name="directed_by">Tony Scott</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/don_2006</field>
+ <field name="initial_release_date">2006-10-20</field>
+ <field name="name">Don: The Chase Begins Again</field>
+ <field name="directed_by">Farhan Akhtar</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dons_plum</field>
+ <field name="initial_release_date">2001-02-10</field>
+ <field name="name">Don's Plum</field>
+ <field name="directed_by">R.D. Robb</field>
+ <field name="genre">Black-and-white</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dont_come_knocking</field>
+ <field name="initial_release_date">2005-05-19</field>
+ <field name="name">Don't Come Knocking</field>
+ <field name="directed_by">Wim Wenders</field>
+ <field name="genre">Western</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Music</field>
+ <field name="genre">Musical Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dont_move</field>
+ <field name="initial_release_date">2004-03-12</field>
+ <field name="name">Don't Move</field>
+ <field name="directed_by">Sergio Castellitto</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dont_say_a_word_2001</field>
+ <field name="initial_release_date">2001-09-24</field>
+ <field name="name">Don't Say a Word</field>
+ <field name="directed_by">Gary Fleder</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Suspense</field>
+ </doc>
+ <doc>
+ <field name="id">/en/donnie_darko</field>
+ <field name="initial_release_date">2001-01-19</field>
+ <field name="name">Donnie Darko</field>
+ <field name="directed_by">Richard Kelly</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/doomsday_2008</field>
+ <field name="initial_release_date">2008-03-14</field>
+ <field name="name">Doomsday</field>
+ <field name="directed_by">Neil Marshall</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dopamine_2003</field>
+ <field name="initial_release_date">2003-01-23</field>
+ <field name="name">Dopamine</field>
+ <field name="directed_by">Mark Decena</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dosti_friends_forever</field>
+ <field name="initial_release_date">2005-12-23</field>
+ <field name="name">Dosti: Friends Forever</field>
+ <field name="directed_by">Suneel Darshan</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/double_take</field>
+ <field name="initial_release_date">2001-01-12</field>
+ <field name="name">Double Take</field>
+ <field name="directed_by">George Gallo</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/double_teamed</field>
+ <field name="initial_release_date">2002-01-18</field>
+ <field name="name">Double Teamed</field>
+ <field name="directed_by">Duwayne Dunham</field>
+ <field name="genre">Family</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Sports</field>
+ </doc>
+ <doc>
+ <field name="id">/en/double_vision_2002</field>
+ <field name="initial_release_date">2002-05-20</field>
+ <field name="name">Double Vision</field>
+ <field name="directed_by">Chen Kuo-Fu</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Chinese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/double_whammy</field>
+ <field name="initial_release_date">2001-01-20</field>
+ <field name="name">Double Whammy</field>
+ <field name="directed_by">Tom DiCillo</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/down_and_derby</field>
+ <field name="initial_release_date">2005-04-15</field>
+ <field name="name">Down and Derby</field>
+ <field name="directed_by">Eric Hendershot</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/down_in_the_valley</field>
+ <field name="initial_release_date">2005-05-13</field>
+ <field name="name">Down in the Valley</field>
+ <field name="directed_by">David Jacobson</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/down_to_earth</field>
+ <field name="initial_release_date">2001-02-12</field>
+ <field name="name">Down to Earth</field>
+ <field name="directed_by">Chris Weitz</field>
+ <field name="directed_by">Paul Weitz</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/down_with_love</field>
+ <field name="initial_release_date">2003-05-09</field>
+ <field name="name">Down with Love</field>
+ <field name="directed_by">Peyton Reed</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Screwball comedy</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/downfall</field>
+ <field name="initial_release_date">2004-09-08</field>
+ <field name="name">Downfall</field>
+ <field name="directed_by">Oliver Hirschbiegel</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dr_dolittle_2</field>
+ <field name="initial_release_date">2001-06-19</field>
+ <field name="name">Dr. Dolittle 2</field>
+ <field name="directed_by">Steve Carr</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dr_dolittle_3</field>
+ <field name="initial_release_date">2006-04-25</field>
+ <field name="name">Dr. Dolittle 3</field>
+ <field name="directed_by">Rich Thorne</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dracula_pages_from_a_virgins_diary</field>
+ <field name="initial_release_date">2002-02-28</field>
+ <field name="name">Dracula: Pages from a Virgin's Diary</field>
+ <field name="directed_by">Guy Maddin</field>
+ <field name="genre">Silent film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Dance film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dragon_boys</field>
+ <field name="name">Dragon Boys</field>
+ <field name="directed_by">Jerry Ciccoritti</field>
+ <field name="genre">Crime Drama</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dragon_tiger_gate</field>
+ <field name="initial_release_date">2006-07-27</field>
+ <field name="name">Dragon Tiger Gate</field>
+ <field name="directed_by">Wilson Yip</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Wuxia</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Chinese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dragonfly_2002</field>
+ <field name="initial_release_date">2002-02-18</field>
+ <field name="name">Dragonfly</field>
+ <field name="directed_by">Tom Shadyac</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dragonlance_dragons_of_autumn_twilight</field>
+ <field name="initial_release_date">2008-01-15</field>
+ <field name="name">Dragonlance: Dragons of Autumn Twilight</field>
+ <field name="directed_by">Will Meugniot</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Sword and sorcery</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Science Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/drake_josh_go_hollywood</field>
+ <field name="initial_release_date">2006-01-06</field>
+ <field name="name">Drake &amp;amp; Josh Go Hollywood</field>
+ <field name="directed_by">Adam Weissman</field>
+ <field name="directed_by">Steve Hoefer</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/drawing_restraint_9</field>
+ <field name="initial_release_date">2005-07-01</field>
+ <field name="name">Drawing Restraint 9</field>
+ <field name="directed_by">Matthew Barney</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Surrealism</field>
+ <field name="genre">Avant-garde</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Japanese Movies</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dreamcatcher</field>
+ <field name="initial_release_date">2003-03-06</field>
+ <field name="name">Dreamcatcher</field>
+ <field name="directed_by">Lawrence Kasdan</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dreamer_2005</field>
+ <field name="initial_release_date">2005-09-10</field>
+ <field name="name">Dreamer</field>
+ <field name="directed_by">John Gatins</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dreaming_of_julia</field>
+ <field name="initial_release_date">2003-10-24</field>
+ <field name="name">Dreaming of Julia</field>
+ <field name="directed_by">Juan Gerard</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/driving_miss_wealthy_juet_sai_ho_bun</field>
+ <field name="initial_release_date">2004-05-03</field>
+ <field name="name">Driving Miss Wealthy</field>
+ <field name="directed_by">James Yuen</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Chinese Movies</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/drowning_mona</field>
+ <field name="initial_release_date">2000-01-02</field>
+ <field name="name">Drowning Mona</field>
+ <field name="directed_by">Nick Gomez</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Whodunit</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/drugstore_girl</field>
+ <field name="name">Drugstore Girl</field>
+ <field name="directed_by">Katsuhide Motoki</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/druids</field>
+ <field name="initial_release_date">2001-08-31</field>
+ <field name="name">Druids</field>
+ <field name="directed_by">Jacques Dorfmann</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Historical Epic</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/duck_the_carbine_high_massacre</field>
+ <field name="initial_release_date">2000-04-20</field>
+ <field name="name">Duck! The Carbine High Massacre</field>
+ <field name="directed_by">William Hellfire</field>
+ <field name="directed_by">Joey Smack</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dude_wheres_my_car</field>
+ <field name="initial_release_date">2000-12-10</field>
+ <field name="name">Dude, Where's My Car?</field>
+ <field name="directed_by">Danny Leiner</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Science Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dude_wheres_the_party</field>
+ <field name="name">Dude, Where's the Party?</field>
+ <field name="directed_by">Benny Mathews</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/duets</field>
+ <field name="initial_release_date">2000-09-09</field>
+ <field name="name">Duets</field>
+ <field name="directed_by">Bruce Paltrow</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dumb_dumberer</field>
+ <field name="initial_release_date">2003-06-13</field>
+ <field name="name">Dumb &amp;amp; Dumberer: When Harry Met Lloyd</field>
+ <field name="directed_by">Troy Miller</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Screwball comedy</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dumm_dumm_dumm</field>
+ <field name="initial_release_date">2001-04-13</field>
+ <field name="name">Dumm Dumm Dumm</field>
+ <field name="directed_by">Azhagam Perumal</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dummy_2003</field>
+ <field name="initial_release_date">2003-09-12</field>
+ <field name="name">Dummy</field>
+ <field name="directed_by">Greg Pritikin</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dumplings</field>
+ <field name="initial_release_date">2004-08-04</field>
+ <field name="name">Dumplings</field>
+ <field name="directed_by">Fruit Chan</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/duplex</field>
+ <field name="initial_release_date">2003-09-26</field>
+ <field name="name">Duplex</field>
+ <field name="directed_by">Danny DeVito</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dus</field>
+ <field name="initial_release_date">2005-07-08</field>
+ <field name="name">Dus</field>
+ <field name="directed_by">Anubhav Sinha</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ </doc>
+ <doc>
+ <field name="id">/en/dust_2001</field>
+ <field name="initial_release_date">2001-08-29</field>
+ <field name="name">Dust</field>
+ <field name="directed_by">Milcho Manchevski</field>
+ <field name="genre">Western</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/E_$0028film$0029</field>
+ <field name="initial_release_date">2006-10-21</field>
+ <field name="name">E</field>
+ <field name="directed_by">S. P. Jananathan</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/earthlings</field>
+ <field name="name">Earthlings</field>
+ <field name="directed_by">Shaun Monson</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Nature</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Animal</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eastern_promises</field>
+ <field name="initial_release_date">2007-09-08</field>
+ <field name="name">Eastern Promises</field>
+ <field name="directed_by">David Cronenberg</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eating_out</field>
+ <field name="name">Eating Out</field>
+ <field name="directed_by">Q. Allan Brocka</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/echoes_of_innocence</field>
+ <field name="initial_release_date">2005-09-09</field>
+ <field name="name">Echoes of Innocence</field>
+ <field name="directed_by">Nathan Todd Sims</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Christian film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eddies_million_dollar_cook_off</field>
+ <field name="initial_release_date">2003-07-18</field>
+ <field name="name">Eddie's Million Dollar Cook-Off</field>
+ <field name="directed_by">Paul Hoen</field>
+ <field name="genre">Teen film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/edison_2006</field>
+ <field name="initial_release_date">2005-03-05</field>
+ <field name="name">Edison</field>
+ <field name="directed_by">David J. Burke</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/edmond_2006</field>
+ <field name="initial_release_date">2005-09-02</field>
+ <field name="name">Edmond</field>
+ <field name="directed_by">Stuart Gordon</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eight_below</field>
+ <field name="initial_release_date">2006-02-17</field>
+ <field name="name">Eight Below</field>
+ <field name="directed_by">Frank Marshall</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eight_crazy_nights</field>
+ <field name="directed_by">Seth Kearsley</field>
+ <field name="initial_release_date">2002-11-27</field>
+ <field name="genre">Christmas movie</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Eight Crazy Nights</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eight_legged_freaks</field>
+ <field name="directed_by">Ellory Elkayem</field>
+ <field name="initial_release_date">2002-05-30</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Monster</field>
+ <field name="genre">B movie</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror comedy</field>
+ <field name="name">Eight Legged Freaks</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ek_ajnabee</field>
+ <field name="directed_by">Apoorva Lakhia</field>
+ <field name="initial_release_date">2005-12-09</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Bollywood</field>
+ <field name="name">Ek Ajnabee</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eklavya_the_royal_guard</field>
+ <field name="directed_by">Vidhu Vinod Chopra</field>
+ <field name="initial_release_date">2007-02-16</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Eklavya: The Royal Guard</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_abrazo_partido</field>
+ <field name="directed_by">Daniel Burman</field>
+ <field name="initial_release_date">2004-02-09</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">Lost Embrace</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_aura</field>
+ <field name="directed_by">Fabián Bielinsky</field>
+ <field name="initial_release_date">2005-09-15</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">El Aura</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_crimen_del_padre_amaro</field>
+ <field name="directed_by">Carlos Carrera</field>
+ <field name="initial_release_date">2002-08-16</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">The Crime of Father Amaro</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_juego_de_arcibel</field>
+ <field name="directed_by">Alberto Lecchi</field>
+ <field name="initial_release_date">2003-05-29</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">El juego de Arcibel</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/El_Muerto_$0028film$0029</field>
+ <field name="directed_by">Brian Cox</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="name">El Muerto</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_principio_de_arquimedes</field>
+ <field name="directed_by">Gerardo Herrero</field>
+ <field name="initial_release_date">2004-03-26</field>
+ <field name="genre">Drama</field>
+ <field name="name">The Archimedes Principle</field>
+ </doc>
+ <doc>
+ <field name="id">/en/el_raton_perez</field>
+ <field name="directed_by">Juan Pablo Buscarini</field>
+ <field name="initial_release_date">2006-07-13</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ <field name="name">The Hairy Tooth Fairy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/election_2005</field>
+ <field name="directed_by">Johnnie To</field>
+ <field name="initial_release_date">2005-05-14</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Election</field>
+ </doc>
+ <doc>
+ <field name="id">/en/election_2</field>
+ <field name="directed_by">Johnnie To</field>
+ <field name="initial_release_date">2006-04-04</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">Election 2</field>
+ </doc>
+ <doc>
+ <field name="id">/en/daft_punks_electroma</field>
+ <field name="directed_by">Thomas Bangalter</field>
+ <field name="directed_by">Guy-Manuel de Homem-Christo</field>
+ <field name="initial_release_date">2006-05-21</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Silent film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Avant-garde</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Drama</field>
+ <field name="name">Daft Punk's Electroma</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elektra_2005</field>
+ <field name="directed_by">Rob Bowman</field>
+ <field name="initial_release_date">2005-01-08</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="name">Elektra</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elephant_2003</field>
+ <field name="directed_by">Gus Van Sant</field>
+ <field name="initial_release_date">2003-05-18</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Elephant</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elephants_dream</field>
+ <field name="directed_by">Bassam Kurdali</field>
+ <field name="initial_release_date">2006-03-24</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Computer Animation</field>
+ <field name="name">Elephants Dream</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elf_2003</field>
+ <field name="directed_by">Jon Favreau</field>
+ <field name="initial_release_date">2003-10-09</field>
+ <field name="genre">Family</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Fantasy</field>
+ <field name="name">Elf</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elizabethtown_2005</field>
+ <field name="directed_by">Cameron Crowe</field>
+ <field name="initial_release_date">2005-09-04</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Elizabethtown</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elviras_haunted_hills</field>
+ <field name="directed_by">Sam Irvin</field>
+ <field name="initial_release_date">2001-06-23</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Haunted House Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Elvira's Haunted Hills</field>
+ </doc>
+ <doc>
+ <field name="id">/en/elvis_has_left_the_building_2004</field>
+ <field name="directed_by">Joel Zwick</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Elvis Has Left the Building</field>
+ </doc>
+ <doc>
+ <field name="id">/en/empire_2002</field>
+ <field name="directed_by">Franc. Reyes</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Action</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Action Thriller</field>
+ <field name="name">Empire</field>
+ </doc>
+ <doc>
+ <field name="id">/en/employee_of_the_month_2004</field>
+ <field name="directed_by">Mitch Rouse</field>
+ <field name="initial_release_date">2004-01-17</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Employee of the Month</field>
+ </doc>
+ <doc>
+ <field name="id">/en/employee_of_the_month</field>
+ <field name="directed_by">Greg Coolidge</field>
+ <field name="initial_release_date">2006-10-06</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Employee of the Month</field>
+ </doc>
+ <doc>
+ <field name="id">/en/empress_chung</field>
+ <field name="directed_by">Nelson Shin</field>
+ <field name="initial_release_date">2005-08-12</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Empress Chung</field>
+ </doc>
+ <doc>
+ <field name="id">/en/emr</field>
+ <field name="directed_by">Danny McCullough</field>
+ <field name="directed_by">James Erskine</field>
+ <field name="initial_release_date">2004-03-08</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="name">EMR</field>
+ </doc>
+ <doc>
+ <field name="id">/en/en_route</field>
+ <field name="directed_by">Jan Krüger</field>
+ <field name="initial_release_date">2004-06-17</field>
+ <field name="genre">Drama</field>
+ <field name="name">En Route</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enakku_20_unakku_18</field>
+ <field name="directed_by">Jyothi Krishna</field>
+ <field name="initial_release_date">2003-12-19</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">Enakku 20 Unakku 18</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enchanted_2007</field>
+ <field name="directed_by">Kevin Lima</field>
+ <field name="initial_release_date">2007-10-20</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">Enchanted</field>
+ </doc>
+ <doc>
+ <field name="id">/en/end_of_the_spear</field>
+ <field name="directed_by">Jim Hanon</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Christian film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Inspirational Drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">End of the Spear</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enduring_love</field>
+ <field name="directed_by">Roger Michell</field>
+ <field name="initial_release_date">2004-09-04</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Enduring Love</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enemy_at_the_gates</field>
+ <field name="directed_by">Jean-Jacques Annaud</field>
+ <field name="initial_release_date">2001-02-07</field>
+ <field name="genre">War film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Enemy at the Gates</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enigma_2001</field>
+ <field name="directed_by">Michael Apted</field>
+ <field name="initial_release_date">2001-01-22</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">War film</field>
+ <field name="genre">Spy film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="name">Enigma</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enigma_the_best_of_jeff_hardy</field>
+ <field name="directed_by">Craig Leathers</field>
+ <field name="initial_release_date">2005-10-04</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Action Film</field>
+ <field name="name">Enigma: The Best of Jeff Hardy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/enron_the_smartest_guys_in_the_room</field>
+ <field name="directed_by">Alex Gibney</field>
+ <field name="initial_release_date">2005-04-22</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Business</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Finance &amp;amp; Investing</field>
+ <field name="genre">Law &amp;amp; Crime</field>
+ <field name="genre">Biographical film</field>
+ <field name="name">Enron: The Smartest Guys in the Room</field>
+ </doc>
+ <doc>
+ <field name="id">/en/envy_2004</field>
+ <field name="directed_by">Barry Levinson</field>
+ <field name="initial_release_date">2004-04-30</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Envy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/equilibrium_2002</field>
+ <field name="directed_by">Kurt Wimmer</field>
+ <field name="initial_release_date">2002-12-06</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Dystopia</field>
+ <field name="genre">Future noir</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Equilibrium</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eragon_2006</field>
+ <field name="directed_by">Stefen Fangmeier</field>
+ <field name="initial_release_date">2006-12-13</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Sword and sorcery</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Eragon</field>
+ </doc>
+ <doc>
+ <field name="id">/en/erin_brockovich_2000</field>
+ <field name="directed_by">Steven Soderbergh</field>
+ <field name="initial_release_date">2000-03-14</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Legal drama</field>
+ <field name="genre">Trial drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Feminist Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Drama film</field>
+ <field name="name">Erin Brockovich</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eros_2004</field>
+ <field name="directed_by">Michelangelo Antonioni</field>
+ <field name="directed_by">Steven Soderbergh</field>
+ <field name="directed_by">Wong Kar-wai</field>
+ <field name="initial_release_date">2004-09-10</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Erotica</field>
+ <field name="genre">Drama</field>
+ <field name="name">Eros</field>
+ </doc>
+ <doc>
+ <field name="id">/en/escaflowne</field>
+ <field name="directed_by">Kazuki Akane</field>
+ <field name="initial_release_date">2000-06-24</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Escaflowne</field>
+ </doc>
+ <doc>
+ <field name="id">/en/escape_2006</field>
+ <field name="directed_by">Niki Karimi</field>
+ <field name="genre">Drama</field>
+ <field name="name">A Few Days Later</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eternal_sunshine_of_the_spotless_mind</field>
+ <field name="directed_by">Michel Gondry</field>
+ <field name="initial_release_date">2004-03-19</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">Eternal Sunshine of the Spotless Mind</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eulogy_2004</field>
+ <field name="directed_by">Michael Clancy</field>
+ <field name="initial_release_date">2004-10-15</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Eulogy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eurotrip</field>
+ <field name="directed_by">Jeff Schaffer</field>
+ <field name="directed_by">Alec Berg</field>
+ <field name="directed_by">David Mandel</field>
+ <field name="initial_release_date">2004-02-20</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">EuroTrip</field>
+ </doc>
+ <doc>
+ <field name="id">/en/evan_almighty</field>
+ <field name="directed_by">Tom Shadyac</field>
+ <field name="initial_release_date">2007-06-21</field>
+ <field name="genre">Religious Film</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Heavenly Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Evan Almighty</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everlasting_regret</field>
+ <field name="directed_by">Stanley Kwan</field>
+ <field name="initial_release_date">2005-09-08</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Chinese Movies</field>
+ <field name="genre">Drama</field>
+ <field name="name">Everlasting Regret</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everybody_famous</field>
+ <field name="directed_by">Dominique Deruddere</field>
+ <field name="initial_release_date">2000-04-12</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Everybody's Famous!</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everymans_feast</field>
+ <field name="directed_by">Fritz Lehner</field>
+ <field name="initial_release_date">2002-01-25</field>
+ <field name="genre">Drama</field>
+ <field name="name">Everyman's Feast</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everyones_hero</field>
+ <field name="directed_by">Christopher Reeve</field>
+ <field name="directed_by">Daniel St. Pierre</field>
+ <field name="directed_by">Colin Brady</field>
+ <field name="initial_release_date">2006-09-15</field>
+ <field name="genre">Computer Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="name">Everyone's Hero</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everything_2005</field>
+ <field name="initial_release_date">2005-11-22</field>
+ <field name="genre">Music video</field>
+ <field name="name">Everything</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everything_goes</field>
+ <field name="directed_by">Andrew Kotatko</field>
+ <field name="initial_release_date">2004-06-14</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Everything Goes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/everything_is_illuminated_2005</field>
+ <field name="directed_by">Liev Schreiber</field>
+ <field name="initial_release_date">2005-09-16</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Everything Is Illuminated</field>
+ </doc>
+ <doc>
+ <field name="id">/en/evilenko</field>
+ <field name="directed_by">David Grieco</field>
+ <field name="initial_release_date">2004-04-16</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="name">Evilenko</field>
+ </doc>
+ <doc>
+ <field name="id">/en/evolution_2001</field>
+ <field name="directed_by">Ivan Reitman</field>
+ <field name="initial_release_date">2001-06-08</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Evolution</field>
+ </doc>
+ <doc>
+ <field name="id">/en/exit_wounds</field>
+ <field name="directed_by">Andrzej Bartkowiak</field>
+ <field name="initial_release_date">2001-03-16</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="name">Exit Wounds</field>
+ </doc>
+ <doc>
+ <field name="id">/en/exorcist_the_beginning</field>
+ <field name="directed_by">Renny Harlin</field>
+ <field name="initial_release_date">2004-08-18</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="name">Exorcist: The Beginning</field>
+ </doc>
+ <doc>
+ <field name="id">/en/extreme_days</field>
+ <field name="directed_by">Eric Hannah</field>
+ <field name="initial_release_date">2001-09-28</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Christian film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="name">Extreme Days</field>
+ </doc>
+ <doc>
+ <field name="id">/en/extreme_ops</field>
+ <field name="directed_by">Christian Duguay</field>
+ <field name="initial_release_date">2002-11-27</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Chase Movie</field>
+ <field name="name">Extreme Ops</field>
+ </doc>
+ <doc>
+ <field name="id">/en/face_2004</field>
+ <field name="directed_by">Yoo Sang-gon</field>
+ <field name="initial_release_date">2004-06-11</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Face</field>
+ </doc>
+ <doc>
+ <field name="id">/en/la_finestra_di_fronte</field>
+ <field name="directed_by">Ferzan Özpetek</field>
+ <field name="initial_release_date">2003-02-28</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="name">Facing Windows</field>
+ </doc>
+ <doc>
+ <field name="id">/en/factory_girl</field>
+ <field name="directed_by">George Hickenlooper</field>
+ <field name="initial_release_date">2006-12-29</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">Factory Girl</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fahrenheit_9_11</field>
+ <field name="directed_by">Michael Moore</field>
+ <field name="initial_release_date">2004-05-17</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Culture &amp;amp; Society</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fahrenheit 9/11</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fahrenheit_9_111_2</field>
+ <field name="directed_by">Michael Moore</field>
+ <field name="genre">Documentary film</field>
+ <field name="name">Fahrenheit 9/11½</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fail_safe_2000</field>
+ <field name="directed_by">Stephen Frears</field>
+ <field name="initial_release_date">2000-04-09</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Black-and-white</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fail Safe</field>
+ </doc>
+ <doc>
+ <field name="id">/en/failan</field>
+ <field name="directed_by">Song Hae-sung</field>
+ <field name="initial_release_date">2001-04-28</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ <field name="name">Failan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/failure_to_launch</field>
+ <field name="directed_by">Tom Dey</field>
+ <field name="initial_release_date">2006-03-10</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Failure to Launch</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fake_2003</field>
+ <field name="directed_by">Thanakorn Pongsuwan</field>
+ <field name="initial_release_date">2003-04-28</field>
+ <field name="genre">Romance Film</field>
+ <field name="name">Fake</field>
+ </doc>
+ <doc>
+ <field name="id">/en/falcons_2002</field>
+ <field name="directed_by">Friðrik Þór Friðriksson</field>
+ <field name="genre">Drama</field>
+ <field name="name">Falcons</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fallen_2006</field>
+ <field name="directed_by">Mikael Salomon</field>
+ <field name="directed_by">Kevin Kerslake</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fallen</field>
+ </doc>
+ <doc>
+ <field name="id">/en/family_-_ties_of_blood</field>
+ <field name="directed_by">Rajkumar Santoshi</field>
+ <field name="initial_release_date">2006-01-11</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="name">Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/familywala</field>
+ <field name="directed_by">Neeraj Vora</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="name">Familywala</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fan_chan</field>
+ <field name="directed_by">Vitcha Gojiew</field>
+ <field name="directed_by">Witthaya Thongyooyong</field>
+ <field name="directed_by">Komgrit Triwimol</field>
+ <field name="directed_by">Nithiwat Tharathorn</field>
+ <field name="directed_by">Songyos Sugmakanan</field>
+ <field name="directed_by">Adisorn Tresirikasem</field>
+ <field name="initial_release_date">2003-10-03</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="name">Fan Chan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fanaa</field>
+ <field name="directed_by">Kunal Kohli</field>
+ <field name="initial_release_date">2006-05-26</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fanaa</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fantastic_four_2005</field>
+ <field name="directed_by">Tim Story</field>
+ <field name="initial_release_date">2005-06-29</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action Film</field>
+ <field name="name">Fantastic Four</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fantastic_four_and_the_silver_surfer</field>
+ <field name="directed_by">Tim Story</field>
+ <field name="initial_release_date">2007-06-12</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="name">Fantastic Four: Rise of the Silver Surfer</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fantastic_mr_fox_2007</field>
+ <field name="directed_by">Wes Anderson</field>
+ <field name="initial_release_date">2009-10-14</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ <field name="name">Fantastic Mr. Fox</field>
+ </doc>
+ <doc>
+ <field name="id">/en/faq_frequently_asked_questions</field>
+ <field name="directed_by">Carlos Atanes</field>
+ <field name="initial_release_date">2004-10-12</field>
+ <field name="genre">Science Fiction</field>
+ <field name="name">FAQ: Frequently Asked Questions</field>
+ </doc>
+ <doc>
+ <field name="id">/en/far_cry_2008</field>
+ <field name="directed_by">Uwe Boll</field>
+ <field name="initial_release_date">2008-10-02</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="name">Far Cry</field>
+ </doc>
+ <doc>
+ <field name="id">/en/far_from_heaven</field>
+ <field name="directed_by">Todd Haynes</field>
+ <field name="initial_release_date">2002-09-01</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Drama</field>
+ <field name="name">Far from Heaven</field>
+ </doc>
+ <doc>
+ <field name="id">/en/farce_of_the_penguins</field>
+ <field name="directed_by">Bob Saget</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Adventure Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Farce of the Penguins</field>
+ </doc>
+ <doc>
+ <field name="id">/en/eagles_farewell_1_tour_live_from_melbourne</field>
+ <field name="directed_by">Carol Dodds</field>
+ <field name="initial_release_date">2005-06-14</field>
+ <field name="genre">Music video</field>
+ <field name="name">Eagles: Farewell 1 Tour-Live from Melbourne</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fat_albert</field>
+ <field name="directed_by">Joel Zwick</field>
+ <field name="initial_release_date">2004-12-12</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Fat Albert</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fat_pizza_the_movie</field>
+ <field name="directed_by">Paul Fenech</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Fat Pizza</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fatwa_2006</field>
+ <field name="directed_by">John Carter</field>
+ <field name="initial_release_date">2006-03-24</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Political thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fatwa</field>
+ </doc>
+ <doc>
+ <field name="id">/en/faust_love_of_the_damned</field>
+ <field name="directed_by">Brian Yuzna</field>
+ <field name="initial_release_date">2000-10-12</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="name">Faust: Love of the Damned</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fay_grim</field>
+ <field name="directed_by">Hal Hartley</field>
+ <field name="initial_release_date">2006-09-11</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Political thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy Thriller</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fay Grim</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fear_and_trembling_2003</field>
+ <field name="directed_by">Alain Corneau</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fear and Trembling</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fear_of_the_dark_2006</field>
+ <field name="directed_by">Glen Baisley</field>
+ <field name="initial_release_date">2001-10-06</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fear of the Dark</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fear_x</field>
+ <field name="directed_by">Nicolas Winding Refn</field>
+ <field name="initial_release_date">2003-01-19</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="name">Fear X</field>
+ </doc>
+ <doc>
+ <field name="id">/en/feardotcom</field>
+ <field name="directed_by">William Malone</field>
+ <field name="initial_release_date">2002-08-09</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="name">FeardotCom</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fearless</field>
+ <field name="directed_by">Ronny Yu</field>
+ <field name="initial_release_date">2006-01-26</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fearless</field>
+ </doc>
+ <doc>
+ <field name="id">/en/feast</field>
+ <field name="directed_by">John Gulager</field>
+ <field name="initial_release_date">2006-09-22</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Monster movie</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Feast</field>
+ </doc>
+ <doc>
+ <field name="id">/en/femme_fatale_2002</field>
+ <field name="directed_by">Brian De Palma</field>
+ <field name="initial_release_date">2002-04-30</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="name">Femme Fatale</field>
+ </doc>
+ <doc>
+ <field name="id">/en/festival_2005</field>
+ <field name="directed_by">Annie Griffin</field>
+ <field name="initial_release_date">2005-07-15</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Comedy</field>
+ <field name="name">Festival</field>
+ </doc>
+ <doc>
+ <field name="id">/en/festival_express</field>
+ <field name="directed_by">Bob Smeaton</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">History</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Rockumentary</field>
+ <field name="genre">Music</field>
+ <field name="name">Festival Express</field>
+ </doc>
+ <doc>
+ <field name="id">/en/festival_in_cannes</field>
+ <field name="directed_by">Henry Jaglom</field>
+ <field name="initial_release_date">2001-11-03</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Festival in Cannes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fever_pitch_2005</field>
+ <field name="directed_by">Bobby Farrelly</field>
+ <field name="directed_by">Peter Farrelly</field>
+ <field name="initial_release_date">2005-04-06</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fever Pitch</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fida</field>
+ <field name="directed_by">Ken Ghosh</field>
+ <field name="initial_release_date">2004-08-20</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fida</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fido_2006</field>
+ <field name="directed_by">Andrew Currie</field>
+ <field name="initial_release_date">2006-09-07</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="name">Fido</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fighter_in_the_wind</field>
+ <field name="initial_release_date">2004-08-06</field>
+ <field name="name">Fighter in the Wind</field>
+ <field name="directed_by">Yang Yun-ho</field>
+ <field name="directed_by">Yang Yun-ho</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/filantropica</field>
+ <field name="initial_release_date">2002-03-15</field>
+ <field name="name">Filantropica</field>
+ <field name="directed_by">Nae Caranfil</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/film_geek</field>
+ <field name="initial_release_date">2006-02-10</field>
+ <field name="name">Film Geek</field>
+ <field name="directed_by">James Westby</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_destination</field>
+ <field name="initial_release_date">2000-03-16</field>
+ <field name="name">Final Destination</field>
+ <field name="directed_by">James Wong</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_destination_3</field>
+ <field name="initial_release_date">2006-02-09</field>
+ <field name="name">Final Destination 3</field>
+ <field name="directed_by">James Wong</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_destination_2</field>
+ <field name="initial_release_date">2003-01-30</field>
+ <field name="name">Final Destination 2</field>
+ <field name="directed_by">David R. Ellis</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_fantasy_vii_advent_children</field>
+ <field name="initial_release_date">2005-08-31</field>
+ <field name="name">Final Fantasy VII: Advent Children</field>
+ <field name="directed_by">Tetsuya Nomura</field>
+ <field name="directed_by">Takeshi Nozue</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_fantasy_the_spirits_within</field>
+ <field name="initial_release_date">2001-07-02</field>
+ <field name="name">Final Fantasy: The Spirits Within</field>
+ <field name="directed_by">Hironobu Sakaguchi</field>
+ <field name="directed_by">Motonori Sakakibara</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/final_stab</field>
+ <field name="name">Final Stab</field>
+ <field name="directed_by">David DeCoteau</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Teen film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/find_me_guilty</field>
+ <field name="initial_release_date">2006-02-16</field>
+ <field name="name">Find Me Guilty</field>
+ <field name="directed_by">Sidney Lumet</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Trial drama</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Courtroom Comedy</field>
+ <field name="genre">Crime Comedy</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/finders_fee</field>
+ <field name="initial_release_date">2001-06-16</field>
+ <field name="name">Finder's Fee</field>
+ <field name="directed_by">Jeff Probst</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/finding_nemo</field>
+ <field name="initial_release_date">2003-05-30</field>
+ <field name="name">Finding Nemo</field>
+ <field name="directed_by">Andrew Stanton</field>
+ <field name="directed_by">Lee Unkrich</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/finding_neverland</field>
+ <field name="initial_release_date">2004-09-04</field>
+ <field name="name">Finding Neverland</field>
+ <field name="directed_by">Marc Forster</field>
+ <field name="genre">Costume drama</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Family</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fingerprints</field>
+ <field name="name">Fingerprints</field>
+ <field name="directed_by">Harry Basil</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mystery</field>
+ </doc>
+ <doc>
+ <field name="id">/en/firewall_2006</field>
+ <field name="initial_release_date">2006-02-02</field>
+ <field name="name">Firewall</field>
+ <field name="directed_by">Richard Loncraine</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action Thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/first_daughter</field>
+ <field name="initial_release_date">2004-09-24</field>
+ <field name="name">First Daughter</field>
+ <field name="directed_by">Forest Whitaker</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/first_descent</field>
+ <field name="initial_release_date">2005-12-02</field>
+ <field name="name">First Descent</field>
+ <field name="directed_by">Kemp Curly</field>
+ <field name="directed_by">Kevin Harrison</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Extreme Sports</field>
+ <field name="genre">Biographical film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fiza</field>
+ <field name="initial_release_date">2000-09-08</field>
+ <field name="name">Fiza</field>
+ <field name="directed_by">Khalid Mohamed</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flags_of_our_fathers_2006</field>
+ <field name="initial_release_date">2006-10-20</field>
+ <field name="name">Flags of Our Fathers</field>
+ <field name="directed_by">Clint Eastwood</field>
+ <field name="genre">War film</field>
+ <field name="genre">History</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flight_from_death</field>
+ <field name="initial_release_date">2006-09-06</field>
+ <field name="name">Flight from Death</field>
+ <field name="directed_by">Patrick Shen</field>
+ <field name="genre">Documentary film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flight_of_the_phoenix</field>
+ <field name="initial_release_date">2004-12-17</field>
+ <field name="name">Flight of the Phoenix</field>
+ <field name="directed_by">John Moore</field>
+ <field name="genre">Airplanes and airports</field>
+ <field name="genre">Disaster Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flightplan</field>
+ <field name="initial_release_date">2005-09-22</field>
+ <field name="name">Flightplan</field>
+ <field name="directed_by">Robert Schwentke</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flock_of_dodos</field>
+ <field name="name">Flock of Dodos</field>
+ <field name="directed_by">Randy Olson</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">History</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fluffy_the_english_vampire_slayer</field>
+ <field name="name">Fluffy the English Vampire Slayer</field>
+ <field name="directed_by">Henry Burrows</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Fan film</field>
+ <field name="genre">Parody</field>
+ </doc>
+ <doc>
+ <field name="id">/en/flushed_away</field>
+ <field name="initial_release_date">2006-10-22</field>
+ <field name="name">Flushed Away</field>
+ <field name="directed_by">David Bowers</field>
+ <field name="directed_by">Sam Fell</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fool_and_final</field>
+ <field name="initial_release_date">2007-06-01</field>
+ <field name="name">Fool &amp;amp; Final</field>
+ <field name="directed_by">Ahmed Khan</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/foolproof</field>
+ <field name="initial_release_date">2003-10-03</field>
+ <field name="name">Foolproof</field>
+ <field name="directed_by">William Phillips</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Caper story</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/for_the_birds</field>
+ <field name="initial_release_date">2000-06-05</field>
+ <field name="name">For the Birds</field>
+ <field name="directed_by">Ralph Eggleston</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ </doc>
+ <doc>
+ <field name="id">/en/for_your_consideration_2006</field>
+ <field name="initial_release_date">2006-11-17</field>
+ <field name="name">For Your Consideration</field>
+ <field name="directed_by">Christopher Guest</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/diev_mi_kas</field>
+ <field name="initial_release_date">2005-09-23</field>
+ <field name="name">Forest of the Gods</field>
+ <field name="directed_by">Algimantas Puipa</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/formula_17</field>
+ <field name="initial_release_date">2004-04-02</field>
+ <field name="name">Formula 17</field>
+ <field name="directed_by">Chen Yin-jung</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/forty_shades_of_blue</field>
+ <field name="name">Forty Shades of Blue</field>
+ <field name="directed_by">Ira Sachs</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/four_brothers_2005</field>
+ <field name="initial_release_date">2005-08-12</field>
+ <field name="name">Four Brothers</field>
+ <field name="directed_by">John Singleton</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Crime Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/frailty</field>
+ <field name="initial_release_date">2001-11-17</field>
+ <field name="name">Frailty</field>
+ <field name="directed_by">Bill Paxton</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/frankenfish</field>
+ <field name="initial_release_date">2004-10-09</field>
+ <field name="name">Frankenfish</field>
+ <field name="directed_by">Mark A.Z. Dippé</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Monster</field>
+ <field name="genre">Science Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/franklin_and_grannys_secret</field>
+ <field name="initial_release_date">2006-12-20</field>
+ <field name="name">Franklin and the Turtle Lake Treasure</field>
+ <field name="directed_by">Dominique Monféry</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/franklin_and_the_green_knight</field>
+ <field name="initial_release_date">2000-10-17</field>
+ <field name="name">Franklin and the Green Knight</field>
+ <field name="directed_by">John van Bruggen</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/franklins_magic_christmas</field>
+ <field name="initial_release_date">2001-11-06</field>
+ <field name="name">Franklin's Magic Christmas</field>
+ <field name="directed_by">John van Bruggen</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ </doc>
+ <doc>
+ <field name="id">/en/freaky_friday_2003</field>
+ <field name="initial_release_date">2003-08-04</field>
+ <field name="name">Freaky Friday</field>
+ <field name="directed_by">Mark Waters</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/freddy_vs_jason</field>
+ <field name="initial_release_date">2003-08-13</field>
+ <field name="name">Freddy vs. Jason</field>
+ <field name="directed_by">Ronny Yu</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/free_jimmy</field>
+ <field name="initial_release_date">2006-04-21</field>
+ <field name="name">Free Jimmy</field>
+ <field name="directed_by">Christopher Nielsen</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Stoner film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/free_zone</field>
+ <field name="initial_release_date">2005-05-19</field>
+ <field name="name">Free Zone</field>
+ <field name="directed_by">Amos Gitai</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/freedomland</field>
+ <field name="initial_release_date">2006-02-17</field>
+ <field name="name">Freedomland</field>
+ <field name="directed_by">Joe Roth</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Crime Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/french_bean</field>
+ <field name="initial_release_date">2007-03-22</field>
+ <field name="name">Mr. Bean's Holiday</field>
+ <field name="directed_by">Steve Bendelack</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Road movie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/frequency_2000</field>
+ <field name="initial_release_date">2000-04-28</field>
+ <field name="name">Frequency</field>
+ <field name="directed_by">Gregory Hoblit</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Time travel</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Family Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/frida</field>
+ <field name="initial_release_date">2002-08-29</field>
+ <field name="name">Frida</field>
+ <field name="directed_by">Julie Taymor</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/friday_after_next</field>
+ <field name="initial_release_date">2002-11-22</field>
+ <field name="name">Friday After Next</field>
+ <field name="directed_by">Marcus Raboy</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/friday_night_lights</field>
+ <field name="initial_release_date">2004-10-06</field>
+ <field name="name">Friday Night Lights</field>
+ <field name="directed_by">Peter Berg</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/friends_2001</field>
+ <field name="initial_release_date">2001-01-14</field>
+ <field name="name">Friends</field>
+ <field name="directed_by">Siddique</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/friends_with_money</field>
+ <field name="initial_release_date">2006-04-07</field>
+ <field name="name">Friends with Money</field>
+ <field name="directed_by">Nicole Holofcener</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fro_the_movie</field>
+ <field name="name">FRO - The Movie</field>
+ <field name="directed_by">Brad Gashler</field>
+ <field name="directed_by">Michael J. Brooks</field>
+ <field name="genre">Comedy-drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/from_hell_2001</field>
+ <field name="initial_release_date">2001-09-08</field>
+ <field name="name">From Hell</field>
+ <field name="directed_by">Allen Hughes</field>
+ <field name="directed_by">Albert Hughes</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/from_janet_to_damita_jo_the_videos</field>
+ <field name="initial_release_date">2004-09-07</field>
+ <field name="name">From Janet to Damita Jo: The Videos</field>
+ <field name="directed_by">Jonathan Dayton</field>
+ <field name="directed_by">Mark Romanek</field>
+ <field name="directed_by">Paul Hunter</field>
+ <field name="genre">Music video</field>
+ </doc>
+ <doc>
+ <field name="id">/en/from_justin_to_kelly</field>
+ <field name="initial_release_date">2003-06-20</field>
+ <field name="name">From Justin to Kelly</field>
+ <field name="directed_by">Robert Iscove</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Beach Film</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/frostbite_2005</field>
+ <field name="name">Frostbite</field>
+ <field name="directed_by">Jonathan Schwartz</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fubar_2002</field>
+ <field name="initial_release_date">2002-01-01</field>
+ <field name="name">FUBAR</field>
+ <field name="directed_by">Michael Dowse</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fuck_2005</field>
+ <field name="initial_release_date">2005-11-07</field>
+ <field name="name">Fuck</field>
+ <field name="directed_by">Steve Anderson</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Political cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fuckland</field>
+ <field name="initial_release_date">2000-09-21</field>
+ <field name="name">Fuckland</field>
+ <field name="directed_by">José Luis Márques</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Dogme 95</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/full_court_miracle</field>
+ <field name="initial_release_date">2003-11-21</field>
+ <field name="name">Full-Court Miracle</field>
+ <field name="directed_by">Stuart Gillard</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/full_disclosure_2001</field>
+ <field name="initial_release_date">2001-05-15</field>
+ <field name="name">Full Disclosure</field>
+ <field name="directed_by">John Bradshaw</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Political thriller</field>
+ </doc>
+ <doc>
+ <field name="id">/en/full_frontal</field>
+ <field name="initial_release_date">2002-08-02</field>
+ <field name="name">Full Frontal</field>
+ <field name="directed_by">Steven Soderbergh</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/ja/$5287$5834$7248_$92FC$306E$932C$91D1$8853$5E2B_$30B7$30E3$30F3$30D0$30E9$3092$5F81$304F$8005</field>
+ <field name="initial_release_date">2005-07-23</field>
+ <field name="name">Fullmetal Alchemist the Movie: Conqueror of Shamballa</field>
+ <field name="directed_by">Seiji Mizushima</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fulltime_killer</field>
+ <field name="initial_release_date">2001-08-03</field>
+ <field name="name">Fulltime Killer</field>
+ <field name="directed_by">Johnnie To</field>
+ <field name="directed_by">Wai Ka-fai</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Martial Arts Film</field>
+ <field name="genre">Action Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/fun_with_dick_and_jane_2005</field>
+ <field name="initial_release_date">2005-12-21</field>
+ <field name="name">Fun with Dick and Jane</field>
+ <field name="directed_by">Dean Parisot</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/funny_ha_ha</field>
+ <field name="name">Funny Ha Ha</field>
+ <field name="directed_by">Andrew Bujalski</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Mumblecore</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/g-sale</field>
+ <field name="initial_release_date">2005-11-15</field>
+ <field name="name">G-Sale</field>
+ <field name="directed_by">Randy Nargi</field>
+ <field name="genre">Mockumentary</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gabrielle_2006</field>
+ <field name="initial_release_date">2005-09-05</field>
+ <field name="name">Gabrielle</field>
+ <field name="directed_by">Patrice Chéreau</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gagamboy</field>
+ <field name="initial_release_date">2004-01-01</field>
+ <field name="name">Gagamboy</field>
+ <field name="directed_by">Erik Matti</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Fantasy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gallipoli_2005</field>
+ <field name="initial_release_date">2005-03-18</field>
+ <field name="name">Gallipoli</field>
+ <field name="directed_by">Tolga Örnek</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">War film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/game_6_2006</field>
+ <field name="initial_release_date">2006-03-10</field>
+ <field name="name">Game 6</field>
+ <field name="directed_by">Michael Hoffman</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/game_over_2003</field>
+ <field name="initial_release_date">2003-06-23</field>
+ <field name="name">Maximum Surge</field>
+ <field name="directed_by">Jason Bourque</field>
+ <field name="genre">Science Fiction</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gamma_squad</field>
+ <field name="initial_release_date">2004-06-14</field>
+ <field name="name">Expendable</field>
+ <field name="directed_by">Nathaniel Barker</field>
+ <field name="directed_by">Eliot Lash</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">War film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gangotri_2003</field>
+ <field name="initial_release_date">2003-03-28</field>
+ <field name="name">Gangotri</field>
+ <field name="directed_by">Kovelamudi Raghavendra Rao</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gangs_of_new_york</field>
+ <field name="initial_release_date">2002-12-09</field>
+ <field name="name">Gangs of New York</field>
+ <field name="directed_by">Martin Scorsese</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gangster_2006</field>
+ <field name="initial_release_date">2006-04-28</field>
+ <field name="name">Gangster</field>
+ <field name="directed_by">Anurag Basu</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gangster_no_1</field>
+ <field name="initial_release_date">2000-06-09</field>
+ <field name="name">Gangster No. 1</field>
+ <field name="directed_by">Paul McGuigan</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Gangster Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/garam_masala_2005</field>
+ <field name="initial_release_date">2005-11-02</field>
+ <field name="name">Garam Masala</field>
+ <field name="directed_by">Priyadarshan</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/garcon_stupide</field>
+ <field name="initial_release_date">2004-03-10</field>
+ <field name="name">Garçon stupide</field>
+ <field name="directed_by">Lionel Baier</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/garden_state</field>
+ <field name="initial_release_date">2004-01-16</field>
+ <field name="name">Garden State</field>
+ <field name="directed_by">Zach Braff</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/garfield_2004</field>
+ <field name="initial_release_date">2004-06-06</field>
+ <field name="name">Garfield: The Movie</field>
+ <field name="directed_by">Peter Hewitt</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/garfield_a_tail_of_two_kitties</field>
+ <field name="initial_release_date">2006-06-15</field>
+ <field name="name">Garfield: A Tail of Two Kitties</field>
+ <field name="directed_by">Tim Hill</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animal Picture</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gene-x</field>
+ <field name="name">Gene-X</field>
+ <field name="directed_by">Martin Simpson</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/george_of_the_jungle_2</field>
+ <field name="initial_release_date">2003-08-18</field>
+ <field name="name">George of the Jungle 2</field>
+ <field name="directed_by">David Grossman</field>
+ <field name="genre">Parody</field>
+ <field name="genre">Slapstick</field>
+ <field name="genre">Family</field>
+ <field name="genre">Jungle Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/george_washington_2000</field>
+ <field name="initial_release_date">2000-09-29</field>
+ <field name="name">George Washington</field>
+ <field name="directed_by">David Gordon Green</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/georgia_rule</field>
+ <field name="initial_release_date">2007-05-10</field>
+ <field name="name">Georgia Rule</field>
+ <field name="directed_by">Garry Marshall</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Melodrama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gerry</field>
+ <field name="initial_release_date">2003-02-14</field>
+ <field name="name">Gerry</field>
+ <field name="directed_by">Gus Van Sant</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Avant-garde</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/get_a_clue</field>
+ <field name="initial_release_date">2002-06-28</field>
+ <field name="name">Get a Clue</field>
+ <field name="directed_by">Maggie Greenwald Mansfield</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/get_over_it</field>
+ <field name="initial_release_date">2001-03-09</field>
+ <field name="name">Get Over It</field>
+ <field name="directed_by">Tommy O'Haver</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">School story</field>
+ <field name="genre">Farce</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Sex comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/get_rich_or_die_tryin</field>
+ <field name="initial_release_date">2005-11-09</field>
+ <field name="name">Get Rich or Die Tryin'</field>
+ <field name="directed_by">Jim Sheridan</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Hip hop film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/get_up</field>
+ <field name="name">Get Up!</field>
+ <field name="directed_by">Kazuyuki Izutsu</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/getting_my_brother_laid</field>
+ <field name="name">Getting My Brother Laid</field>
+ <field name="directed_by">Sven Taddicken</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/getting_there</field>
+ <field name="initial_release_date">2002-06-11</field>
+ <field name="name">Getting There: Sweet 16 and Licensed to Drive</field>
+ <field name="directed_by">Steve Purcell</field>
+ <field name="genre">Family</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghajini</field>
+ <field name="initial_release_date">2005-09-29</field>
+ <field name="name">Ghajini</field>
+ <field name="directed_by">A.R. Murugadoss</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gharshana</field>
+ <field name="initial_release_date">2004-07-30</field>
+ <field name="name">Gharshana</field>
+ <field name="directed_by">Gautham Menon</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghilli</field>
+ <field name="initial_release_date">2004-04-17</field>
+ <field name="name">Ghilli</field>
+ <field name="directed_by">Dharani</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_game_2006</field>
+ <field name="initial_release_date">2005-09-01</field>
+ <field name="name">Ghost Game</field>
+ <field name="directed_by">Joe Knee</field>
+ <field name="genre">Horror comedy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_house</field>
+ <field name="initial_release_date">2004-09-17</field>
+ <field name="name">Ghost House</field>
+ <field name="directed_by">Kim Sang-jin</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_in_the_shell_2_innocence</field>
+ <field name="initial_release_date">2004-03-06</field>
+ <field name="name">Ghost in the Shell 2: Innocence</field>
+ <field name="directed_by">Mamoru Oshii</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Drama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/s_a_c_solid_state_society</field>
+ <field name="initial_release_date">2006-09-01</field>
+ <field name="name">Ghost in the Shell: Solid State Society</field>
+ <field name="directed_by">Kenji Kamiyama</field>
+ <field name="genre">Anime</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_lake</field>
+ <field name="initial_release_date">2005-05-17</field>
+ <field name="name">Ghost Lake</field>
+ <field name="directed_by">Jay Woelfel</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Zombie Film</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_rider_2007</field>
+ <field name="initial_release_date">2007-01-15</field>
+ <field name="name">Ghost Rider</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Superhero movie</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mark Steven Johnson</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_ship_2002</field>
+ <field name="initial_release_date">2002-10-22</field>
+ <field name="name">Ghost Ship</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Slasher</field>
+ <field name="directed_by">Steve Beck</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghost_world_2001</field>
+ <field name="initial_release_date">2001-06-16</field>
+ <field name="name">Ghost World</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="directed_by">Terry Zwigoff</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ghosts_of_mars</field>
+ <field name="initial_release_date">2001-08-24</field>
+ <field name="name">Ghosts of Mars</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Space Western</field>
+ <field name="directed_by">John Carpenter</field>
+ </doc>
+ <doc>
+ <field name="id">/m/06ry42</field>
+ <field name="initial_release_date">2004-10-28</field>
+ <field name="name">The International Playboys' First Movie: Ghouls Gone Wild!</field>
+ <field name="genre">Short Film</field>
+ <field name="genre">Musical</field>
+ <field name="directed_by">Ted Geoghegan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gie</field>
+ <field name="initial_release_date">2005-07-14</field>
+ <field name="name">Gie</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Riri Riza</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gigantic_2003</field>
+ <field name="initial_release_date">2003-03-10</field>
+ <field name="name">Gigantic (A Tale of Two Johns)</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Documentary film</field>
+ <field name="directed_by">A. J. Schnack</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gigli</field>
+ <field name="initial_release_date">2003-07-27</field>
+ <field name="name">Gigli</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Martin Brest</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ginger_snaps</field>
+ <field name="initial_release_date">2000-09-10</field>
+ <field name="name">Ginger Snaps</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="directed_by">John Fawcett</field>
+ </doc>
+ <doc>
+ <field name="id">/en/ginger_snaps_2_unleashed</field>
+ <field name="initial_release_date">2004-01-30</field>
+ <field name="name">Ginger Snaps 2: Unleashed</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Feminist Film</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Brett Sullivan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/girlfight</field>
+ <field name="initial_release_date">2000-01-22</field>
+ <field name="name">Girlfight</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Coming-of-age story</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Karyn Kusama</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gladiator_2000</field>
+ <field name="initial_release_date">2000-05-01</field>
+ <field name="name">Gladiator</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Epic film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ridley Scott</field>
+ </doc>
+ <doc>
+ <field name="id">/en/glastonbury_2006</field>
+ <field name="initial_release_date">2006-04-14</field>
+ <field name="name">Glastonbury</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Concert film</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Julien Temple</field>
+ </doc>
+ <doc>
+ <field name="id">/en/glastonbury_anthems</field>
+ <field name="name">Glastonbury Anthems</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Music</field>
+ <field name="genre">Concert film</field>
+ <field name="directed_by">Gavin Taylor</field>
+ <field name="directed_by">Declan Lowney</field>
+ <field name="directed_by">Janet Fraser-Crook</field>
+ <field name="directed_by">Phil Heyes</field>
+ </doc>
+ <doc>
+ <field name="id">/en/glitter_2001</field>
+ <field name="initial_release_date">2001-09-21</field>
+ <field name="name">Glitter</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Vondie Curtis-Hall</field>
+ </doc>
+ <doc>
+ <field name="id">/en/global_heresy</field>
+ <field name="initial_release_date">2002-09-03</field>
+ <field name="name">Global Heresy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Sidney J. Furie</field>
+ </doc>
+ <doc>
+ <field name="id">/en/glory_road_2006</field>
+ <field name="initial_release_date">2006-01-13</field>
+ <field name="name">Glory Road</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Historical period drama</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">James Gartner</field>
+ </doc>
+ <doc>
+ <field name="id">/en/go_figure_2005</field>
+ <field name="initial_release_date">2005-06-10</field>
+ <field name="name">Go Figure</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Francine McDougall</field>
+ </doc>
+ <doc>
+ <field name="id">/en/goal__2005</field>
+ <field name="initial_release_date">2005-09-08</field>
+ <field name="name">Goal!</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Danny Cannon</field>
+ </doc>
+ <doc>
+ <field name="id">/en/goal_2_living_the_dream</field>
+ <field name="initial_release_date">2007-02-09</field>
+ <field name="name">Goal II: Living the Dream</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jaume Collet-Serra</field>
+ </doc>
+ <doc>
+ <field name="id">/en/god_grew_tired_of_us</field>
+ <field name="initial_release_date">2006-09-04</field>
+ <field name="name">God Grew Tired of Us</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="directed_by">Christopher Dillon Quinn</field>
+ <field name="directed_by">Tommy Walker</field>
+ </doc>
+ <doc>
+ <field name="id">/en/god_on_my_side</field>
+ <field name="initial_release_date">2006-11-02</field>
+ <field name="name">God on My Side</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Christian film</field>
+ <field name="directed_by">Andrew Denton</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godavari</field>
+ <field name="initial_release_date">2006-05-19</field>
+ <field name="name">Godavari</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Sekhar Kammula</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godfather</field>
+ <field name="initial_release_date">2006-02-24</field>
+ <field name="name">Varalaru</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Tamil cinema</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">K. S. Ravikumar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godsend</field>
+ <field name="initial_release_date">2004-04-30</field>
+ <field name="name">Godsend</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Sci-Fi Horror</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Nick Hamm</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godzilla_3d_to_the_max</field>
+ <field name="initial_release_date">2007-09-12</field>
+ <field name="name">Godzilla 3D to the MAX</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Short Film</field>
+ <field name="directed_by">Keith Melton</field>
+ <field name="directed_by">Yoshimitsu Banno</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godzilla_against_mechagodzilla</field>
+ <field name="initial_release_date">2002-12-15</field>
+ <field name="name">Godzilla Against Mechagodzilla</field>
+ <field name="genre">Monster</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="directed_by">Masaaki Tezuka</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godzilla_vs_megaguirus</field>
+ <field name="initial_release_date">2000-11-03</field>
+ <field name="name">Godzilla vs. Megaguirus</field>
+ <field name="genre">Monster</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Creature Film</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="directed_by">Masaaki Tezuka</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godzilla_tokyo_sos</field>
+ <field name="initial_release_date">2003-11-03</field>
+ <field name="name">Godzilla: Tokyo SOS</field>
+ <field name="genre">Monster</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="directed_by">Masaaki Tezuka</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/fr/Godzilla$002C_Mothra_and_King_Ghidorah$003A_Giant_Monsters_All-Out_Attack</field>
+ <field name="initial_release_date">2001-11-03</field>
+ <field name="name">Godzilla, Mothra and King Ghidorah: Giant Monsters All-Out Attack</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Shusuke Kaneko</field>
+ </doc>
+ <doc>
+ <field name="id">/en/godzilla_final_wars</field>
+ <field name="initial_release_date">2004-11-29</field>
+ <field name="name">Godzilla: Final Wars</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Monster movie</field>
+ <field name="directed_by">Ryuhei Kitamura</field>
+ </doc>
+ <doc>
+ <field name="id">/en/going_the_distance</field>
+ <field name="initial_release_date">2004-08-20</field>
+ <field name="name">Going the Distance</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Mark Griffiths</field>
+ </doc>
+ <doc>
+ <field name="id">/en/going_to_the_mat</field>
+ <field name="initial_release_date">2004-03-19</field>
+ <field name="name">Going to the Mat</field>
+ <field name="genre">Family</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Stuart Gillard</field>
+ </doc>
+ <doc>
+ <field name="id">/en/going_upriver</field>
+ <field name="initial_release_date">2004-09-14</field>
+ <field name="name">Going Upriver</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Political cinema</field>
+ <field name="directed_by">George Butler</field>
+ </doc>
+ <doc>
+ <field name="id">/en/golmaal</field>
+ <field name="initial_release_date">2006-07-14</field>
+ <field name="name">Golmaal: Fun Unlimited</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Rohit Shetty</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gone_in_sixty_seconds</field>
+ <field name="initial_release_date">2000-06-05</field>
+ <field name="name">Gone in 60 Seconds</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Heist film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="directed_by">Dominic Sena</field>
+ </doc>
+ <doc>
+ <field name="id">/en/good_bye_lenin</field>
+ <field name="initial_release_date">2003-02-09</field>
+ <field name="name">Good bye, Lenin!</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tragicomedy</field>
+ <field name="directed_by">Wolfgang Becker</field>
+ </doc>
+ <doc>
+ <field name="id">/en/good_luck_chuck</field>
+ <field name="initial_release_date">2007-06-13</field>
+ <field name="name">Good Luck Chuck</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mark Helfrich</field>
+ </doc>
+ <doc>
+ <field name="id">/en/good_night_and_good_luck</field>
+ <field name="initial_release_date">2005-09-01</field>
+ <field name="name">Good Night, and Good Luck</field>
+ <field name="genre">Political drama</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Docudrama</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Historical fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">George Clooney</field>
+ </doc>
+ <doc>
+ <field name="id">/en/goodbye_dragon_inn</field>
+ <field name="initial_release_date">2003-12-12</field>
+ <field name="name">Goodbye, Dragon Inn</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Tsai Ming-liang</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gosford_park</field>
+ <field name="initial_release_date">2001-11-07</field>
+ <field name="name">Gosford Park</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Robert Altman</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gothika</field>
+ <field name="initial_release_date">2003-11-13</field>
+ <field name="name">Gothika</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">Mathieu Kassovitz</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gotta_kick_it_up</field>
+ <field name="name">Gotta Kick It Up!</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Television film</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family</field>
+ <field name="directed_by">Ramón Menéndez</field>
+ </doc>
+ <doc>
+ <field name="id">/en/goyas_ghosts</field>
+ <field name="initial_release_date">2006-11-08</field>
+ <field name="name">Goya's Ghosts</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Miloš Forman</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gozu</field>
+ <field name="initial_release_date">2003-07-12</field>
+ <field name="name">Gozu</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Surrealism</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Japanese Movies</field>
+ <field name="genre">Horror comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Takashi Miike</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grande_ecole</field>
+ <field name="initial_release_date">2004-02-04</field>
+ <field name="name">Grande École</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Gay</field>
+ <field name="genre">Gay Interest</field>
+ <field name="genre">Gay Themed</field>
+ <field name="genre">Ensemble Film</field>
+ <field name="genre">Erotic Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Robert Salis</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grandmas_boy</field>
+ <field name="initial_release_date">2006-01-06</field>
+ <field name="name">Grandma's Boy</field>
+ <field name="genre">Stoner film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Nicholaus Goossen</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grayson_2004</field>
+ <field name="initial_release_date">2004-07-20</field>
+ <field name="name">Grayson</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Fan film</field>
+ <field name="genre">Short Film</field>
+ <field name="directed_by">John Fiorella</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grbavica_2006</field>
+ <field name="initial_release_date">2006-02-12</field>
+ <field name="name">Grbavica: The Land of My Dreams</field>
+ <field name="genre">War film</field>
+ <field name="genre">Art film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jasmila Žbanić</field>
+ </doc>
+ <doc>
+ <field name="id">/en/green_street</field>
+ <field name="initial_release_date">2005-03-12</field>
+ <field name="name">Green Street</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Lexi Alexander</field>
+ </doc>
+ <doc>
+ <field name="id">/en/green_tea_2003</field>
+ <field name="initial_release_date">2003-08-18</field>
+ <field name="name">Green Tea</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Zhang Yuan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/greenfingers</field>
+ <field name="initial_release_date">2001-09-14</field>
+ <field name="name">Greenfingers</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Prison film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Joel Hershman</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gridiron_gang</field>
+ <field name="initial_release_date">2006-09-15</field>
+ <field name="name">Gridiron Gang</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Phil Joanou</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grill_point</field>
+ <field name="initial_release_date">2002-02-12</field>
+ <field name="name">Grill Point</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Tragicomedy</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="directed_by">Andreas Dresen</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grilled</field>
+ <field name="initial_release_date">2006-07-11</field>
+ <field name="name">Grilled</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jason Ensler</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grind_house</field>
+ <field name="initial_release_date">2007-04-06</field>
+ <field name="name">Grindhouse</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Zombie Film</field>
+ <field name="directed_by">Robert Rodriguez</field>
+ <field name="directed_by">Quentin Tarantino</field>
+ <field name="directed_by">Eli Roth</field>
+ <field name="directed_by">Edgar Wright</field>
+ <field name="directed_by">Rob Zombie</field>
+ <field name="directed_by">Jason Eisener</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grizzly_falls</field>
+ <field name="initial_release_date">2004-06-28</field>
+ <field name="name">Grizzly Falls</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Animal Picture</field>
+ <field name="genre">Family-Oriented Adventure</field>
+ <field name="genre">Family</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Stewart Raffill</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grizzly_man</field>
+ <field name="initial_release_date">2005-01-24</field>
+ <field name="name">Grizzly Man</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Biographical film</field>
+ <field name="directed_by">Werner Herzog</field>
+ </doc>
+ <doc>
+ <field name="id">/en/grodmin</field>
+ <field name="name">GRODMIN</field>
+ <field name="genre">Avant-garde</field>
+ <field name="genre">Experimental film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jim Horwitz</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gudumba_shankar</field>
+ <field name="initial_release_date">2004-09-09</field>
+ <field name="name">Gudumba Shankar</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Veera Shankar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/che_part_two</field>
+ <field name="initial_release_date">2008-05-21</field>
+ <field name="name">Che: Part Two</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">War film</field>
+ <field name="genre">Historical drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Steven Soderbergh</field>
+ </doc>
+ <doc>
+ <field name="id">/en/guess_who_2005</field>
+ <field name="initial_release_date">2005-03-25</field>
+ <field name="name">Guess Who</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy of manners</field>
+ <field name="genre">Domestic Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Kevin Rodney Sullivan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gunner_palace</field>
+ <field name="initial_release_date">2005-03-04</field>
+ <field name="name">Gunner Palace</field>
+ <field name="genre">Documentary film</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">War film</field>
+ <field name="directed_by">Michael Tucker</field>
+ <field name="directed_by">Petra Epperlein</field>
+ </doc>
+ <doc>
+ <field name="id">/en/guru_2007</field>
+ <field name="initial_release_date">2007-01-12</field>
+ <field name="name">Guru</field>
+ <field name="genre">Biographical film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">Mani Ratnam</field>
+ </doc>
+ <doc>
+ <field name="id">/en/primeval_2007</field>
+ <field name="initial_release_date">2007-01-12</field>
+ <field name="name">Primeval</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Natural horror film</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="directed_by">Michael Katleman</field>
+ </doc>
+ <doc>
+ <field name="id">/en/gypsy_83</field>
+ <field name="name">Gypsy 83</field>
+ <field name="genre">Coming of age</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy-drama</field>
+ <field name="genre">Road movie</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Todd Stephens</field>
+ </doc>
+ <doc>
+ <field name="id">/en/h_2002</field>
+ <field name="initial_release_date">2002-12-27</field>
+ <field name="name">H</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Jong-hyuk Lee</field>
+ </doc>
+ <doc>
+ <field name="id">/en/h_g_wells_the_war_of_the_worlds</field>
+ <field name="initial_release_date">2005-06-14</field>
+ <field name="name">H. G. Wells' The War of the Worlds</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Steampunk</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="directed_by">Timothy Hines</field>
+ </doc>
+ <doc>
+ <field name="id">/en/h_g_wells_war_of_the_worlds</field>
+ <field name="initial_release_date">2005-06-28</field>
+ <field name="name">H. G. Wells' War of the Worlds</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Film adaptation</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Alien Film</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Mockbuster</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Michael Latt</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hadh_kar_di_aapne</field>
+ <field name="initial_release_date">2000-04-14</field>
+ <field name="name">Hadh Kar Di Aapne</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Bollywood</field>
+ <field name="directed_by">Manoj Agrawal</field>
+ </doc>
+ <doc>
+ <field name="id">/en/haggard_the_movie</field>
+ <field name="initial_release_date">2003-06-24</field>
+ <field name="name">Haggard: The Movie</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Bam Margera</field>
+ </doc>
+ <doc>
+ <field name="id">/en/haiku_tunnel</field>
+ <field name="name">Haiku Tunnel</field>
+ <field name="genre">Black comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Satire</field>
+ <field name="genre">Workplace Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Jacob Kornbluth</field>
+ <field name="directed_by">Josh Kornbluth</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hairspray</field>
+ <field name="initial_release_date">2007-07-13</field>
+ <field name="name">Hairspray</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Musical comedy</field>
+ <field name="directed_by">Adam Shankman</field>
+ </doc>
+ <doc>
+ <field name="id">/en/half_nelson</field>
+ <field name="initial_release_date">2006-01-23</field>
+ <field name="name">Half Nelson</field>
+ <field name="genre">Social problem film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ryan Fleck</field>
+ </doc>
+ <doc>
+ <field name="id">/en/half_life_2006</field>
+ <field name="name">Half-Life</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Fantasy Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Jennifer Phang</field>
+ </doc>
+ <doc>
+ <field name="id">/en/halloween_resurrection</field>
+ <field name="initial_release_date">2002-07-12</field>
+ <field name="name">Halloween Resurrection</field>
+ <field name="genre">Slasher</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Cult film</field>
+ <field name="genre">Teen film</field>
+ <field name="directed_by">Rick Rosenthal</field>
+ </doc>
+ <doc>
+ <field name="id">/en/halloweentown_high</field>
+ <field name="initial_release_date">2004-10-08</field>
+ <field name="name">Halloweentown High</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Teen film</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Family</field>
+ <field name="directed_by">Mark A.Z. Dippé</field>
+ </doc>
+ <doc>
+ <field name="id">/en/halloweentown_ii_kalabars_revenge</field>
+ <field name="initial_release_date">2001-10-12</field>
+ <field name="name">Halloweentown II: Kalabar's Revenge</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Family</field>
+ <field name="directed_by">Mary Lambert</field>
+ </doc>
+ <doc>
+ <field name="id">/en/halloweentown_witch_u</field>
+ <field name="initial_release_date">2006-10-20</field>
+ <field name="name">Return to Halloweentown</field>
+ <field name="genre">Family</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">David Jackson</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hamlet_2000</field>
+ <field name="initial_release_date">2000-05-12</field>
+ <field name="name">Hamlet</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Michael Almereyda</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hana_alice</field>
+ <field name="initial_release_date">2004-03-13</field>
+ <field name="name">Hana and Alice</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Shunji Iwai</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hannibal</field>
+ <field name="initial_release_date">2001-02-09</field>
+ <field name="name">Hannibal</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Horror</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Crime Thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Ridley Scott</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hans_och_hennes</field>
+ <field name="initial_release_date">2001-01-29</field>
+ <field name="name">Making Babies</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Daniel Lind Lagerlöf</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hanuman_2005</field>
+ <field name="initial_release_date">2005-10-21</field>
+ <field name="name">Hanuman</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">V.G. Samant</field>
+ <field name="directed_by">Milind Ukey</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hanuman_junction</field>
+ <field name="initial_release_date">2001-12-21</field>
+ <field name="name">Hanuman Junction</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Tollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">M.Raja</field>
+ </doc>
+ <doc>
+ <field name="id">/en/happily_never_after</field>
+ <field name="initial_release_date">2006-12-16</field>
+ <field name="name">Happily N'Ever After</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Family</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="directed_by">Paul J. Bolger</field>
+ <field name="directed_by">Yvette Kaplan</field>
+ </doc>
+ <doc>
+ <field name="id">/en/happy_2006</field>
+ <field name="initial_release_date">2006-01-27</field>
+ <field name="name">Happy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="genre">Musical comedy</field>
+ <field name="genre">Musical Drama</field>
+ <field name="directed_by">A. Karunakaran</field>
+ </doc>
+ <doc>
+ <field name="id">/en/happy_endings</field>
+ <field name="initial_release_date">2005-01-20</field>
+ <field name="name">Happy Endings</field>
+ <field name="genre">LGBT</field>
+ <field name="genre">Music</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Don Roos</field>
+ </doc>
+ <doc>
+ <field name="id">/en/happy_ero_christmas</field>
+ <field name="initial_release_date">2003-12-17</field>
+ <field name="name">Happy Ero Christmas</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">East Asian cinema</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Lee Geon-dong</field>
+ </doc>
+ <doc>
+ <field name="id">/en/happy_feet</field>
+ <field name="initial_release_date">2006-11-16</field>
+ <field name="name">Happy Feet</field>
+ <field name="genre">Family</field>
+ <field name="genre">Animation</field>
+ <field name="genre">Comedy</field>
+ <field name="genre">Music</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Musical comedy</field>
+ <field name="directed_by">George Miller</field>
+ <field name="directed_by">Warren Coleman</field>
+ <field name="directed_by">Judy Morris</field>
+ </doc>
+ <doc>
+ <field name="id">/wikipedia/en_title/I_Love_New_Year</field>
+ <field name="initial_release_date">2013-12-30</field>
+ <field name="name">I Love New Year</field>
+ <field name="genre">Caper story</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Romantic comedy</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Bollywood</field>
+ <field name="genre">World cinema</field>
+ <field name="directed_by">Radhika Rao</field>
+ <field name="directed_by">Vinay Sapru</field>
+ </doc>
+ <doc>
+ <field name="id">/en/har_dil_jo_pyar_karega</field>
+ <field name="initial_release_date">2000-07-24</field>
+ <field name="name">Har Dil Jo Pyar Karega</field>
+ <field name="genre">Musical</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">World cinema</field>
+ <field name="genre">Musical Drama</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Raj Kanwar</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hard_candy</field>
+ <field name="name">Hard Candy</field>
+ <field name="genre">Psychological thriller</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Suspense</field>
+ <field name="genre">Indie film</field>
+ <field name="genre">Erotic thriller</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">David Slade</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hard_luck</field>
+ <field name="initial_release_date">2006-10-17</field>
+ <field name="name">Hard Luck</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Crime Fiction</field>
+ <field name="genre">Action/Adventure</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Mario Van Peebles</field>
+ </doc>
+ <doc>
+ <field name="id">/en/hardball</field>
+ <field name="initial_release_date">2001-09-14</field>
+ <field name="name">Hardball</field>
+ <field name="genre">Sports</field>
+ <field name="genre">Drama</field>
+ <field name="directed_by">Brian Robbins</field>
+ </doc>
+ <doc>
+ <field name="id">/en/harold_kumar_go_to_white_castle</field>
+ <field name="initial_release_date">2004-05-20</field>
+ <field name="name">Harold &amp;amp; Kumar Go to White Castle</field>
+ <field name="genre">Stoner film</field>
+ <field name="genre">Buddy film</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Comedy</field>
+ <field name="directed_by">Danny Leiner</field>
+ </doc>
+ <doc>
+ <field name="id">/en/harry_potter_and_the_chamber_of_secrets_2002</field>
+ <field name="initial_release_date">2002-11-03</field>
+ <field name="name">Harry Potter and the Chamber of Secrets</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Mystery</field>
+ <field name="directed_by">Chris Columbus</field>
+ </doc>
+ <doc>
+ <field name="id">/en/harry_potter_and_the_goblet_of_fire_2005</field>
+ <field name="initial_release_date">2005-11-06</field>
+ <field name="name">Harry Potter and the Goblet of Fire</field>
+ <field name="genre">Family</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Thriller</field>
+ <field name="genre">Science Fiction</field>
+ <field name="genre">Supernatural</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Adventure</field>
+ <field name="genre">Fiction</field>
+ <field name="directed_by">Mike Newell</field>
+ </doc>
+ <doc>
+ <field name="id">/en/harry_potter_and_the_half_blood_prince_2008</field>
+ <field name="initial_release_date">2009-07-06</field>
+ <field name="name">Harry Potter and the Half-Blood Prince</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Action Film</field>
+ <field name="genre">Family</field>
+ <field name="genre">Romance Film</field>
+ <field name="genre">Children's Fantasy</field>
+ <field name="genre">Children's/Family</field>
+ <field name="genre">Fantasy Adventure</field>
+ <field name="genre">Fiction</field>
+ <field name="directed_by">David Yates</field>
+ </doc>
+ <doc>
+ <field name="id">/en/harry_potter_and_the_order_of_the_phoenix_2007</field>
+ <field name="initial_release_date">2007-06-28</field>
+ <field name="name">Harry Potter and the Order of the Phoenix</field>
+ <field name="genre">Family</field>
+ <field name="genre">Mystery</field>
+ <field name="genre">Adventure Film</field>
+ <field name="genre">Fantasy</field>
+ <field name="genre">Fantasy Adventure</field>
+ <field name="genre">Fiction</field>
+ <field name="directed_by">David Yates</field>
+ </doc>
+</add>
diff --git a/solr-8.1.1/licenses/activation-1.1.1.jar.sha1 b/solr-8.1.1/licenses/activation-1.1.1.jar.sha1
new file mode 100644
index 000000000..7b2295c88
--- /dev/null
+++ b/solr-8.1.1/licenses/activation-1.1.1.jar.sha1
@@ -0,0 +1 @@
+485de3a253e23f645037828c07f1d7f1af40763a
diff --git a/solr-8.1.1/licenses/activation-LICENSE-CDDL.txt b/solr-8.1.1/licenses/activation-LICENSE-CDDL.txt
new file mode 100644
index 000000000..55ce20ab1
--- /dev/null
+++ b/solr-8.1.1/licenses/activation-LICENSE-CDDL.txt
@@ -0,0 +1,119 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. Executable means the Covered Software in any form other than Source Code.
+
+1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
+
+1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. License means this document.
+
+1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. Modifications means the Source Code and Executable form of any of the following:
+
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+B. Any new file that contains any part of the Original Software or previous Modification; or
+
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)�the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)�ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections�2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section�2.1(b) above, no patent license is granted: (1)�for code that You delete from the Original Software, or (2)�for infringements caused by: (i)�the modification of the Original Software, or (ii)�the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)�Modifications made by that Contributor (or portions thereof); and (2)�the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections�2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section�2.2(b) above, no patent license is granted: (1)�for any code that Contributor has deleted from the Contributor Version; (2)�for infringements caused by: (i)�third party modifications of Contributor Version, or (ii)�the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3)�under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a)�rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b)�otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections�2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. In the event of termination under Sections�6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a commercial item, as that term is defined in 48�C.F.R.�2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R. �252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48�C.F.R.�12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The GlassFish code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+
diff --git a/solr-8.1.1/licenses/android-json-0.0.20131108.vaadin1.jar.sha1 b/solr-8.1.1/licenses/android-json-0.0.20131108.vaadin1.jar.sha1
new file mode 100644
index 000000000..99a9d8e79
--- /dev/null
+++ b/solr-8.1.1/licenses/android-json-0.0.20131108.vaadin1.jar.sha1
@@ -0,0 +1 @@
+fa26d351fe62a6a17f5cda1287c1c6110dec413f
diff --git a/solr-8.1.1/licenses/android-json-LICENSE-ASL.txt b/solr-8.1.1/licenses/android-json-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/android-json-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/android-json-NOTICE.txt b/solr-8.1.1/licenses/android-json-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/android-json-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/ant-1.8.2.jar.sha1 b/solr-8.1.1/licenses/ant-1.8.2.jar.sha1
new file mode 100644
index 000000000..564db78df
--- /dev/null
+++ b/solr-8.1.1/licenses/ant-1.8.2.jar.sha1
@@ -0,0 +1 @@
+fc33bf7cd8c5309dd7b81228e8626515ee42efd9
diff --git a/solr-8.1.1/licenses/ant-LICENSE-ASL.txt b/solr-8.1.1/licenses/ant-LICENSE-ASL.txt
new file mode 100644
index 000000000..ab3182e77
--- /dev/null
+++ b/solr-8.1.1/licenses/ant-LICENSE-ASL.txt
@@ -0,0 +1,272 @@
+/*
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright [yyyy] [name of copyright owner]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+W3C® SOFTWARE NOTICE AND LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee) agree
+that you have read, understood, and will comply with the following terms and
+conditions.
+
+Permission to copy, modify, and distribute this software and its documentation,
+with or without modification, for any purpose and without fee or royalty is
+hereby granted, provided that you include the following on ALL copies of the
+software and documentation or portions thereof, including modifications:
+
+ 1. The full text of this NOTICE in a location viewable to users of the
+ redistributed or derivative work.
+ 2. Any pre-existing intellectual property disclaimers, notices, or terms
+ and conditions. If none exist, the W3C Software Short Notice should be
+ included (hypertext is preferred, text is permitted) within the body
+ of any redistributed or derivative code.
+ 3. Notice of any changes or modifications to the files, including the date
+ changes were made. (We recommend you provide URIs to the location from
+ which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior permission.
+Title to copyright in this software and any associated documentation will at
+all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version of
+the license, and removes the ambiguous grant of "use". Otherwise, this version
+is the same as the previous version and is written so as to preserve the Free
+Software Foundation's assessment of GPL compatibility and OSI's certification
+under the Open Source Definition. Please see our Copyright FAQ for common
+questions about using materials from our site, including specific terms and
+conditions for packages like libwww, Amaya, and Jigsaw. Other questions about
+this notice can be directed to site-policy@w3.org.
+
+Joseph Reagle <site-policy@w3.org>
+
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
diff --git a/solr-8.1.1/licenses/ant-NOTICE.txt b/solr-8.1.1/licenses/ant-NOTICE.txt
new file mode 100644
index 000000000..4c88cc665
--- /dev/null
+++ b/solr-8.1.1/licenses/ant-NOTICE.txt
@@ -0,0 +1,26 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Ant distribution. ==
+ =========================================================================
+
+ Apache Ant
+ Copyright 1999-2008 The Apache Software Foundation
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ This product includes also software developed by :
+ - the W3C consortium (http://www.w3c.org) ,
+ - the SAX project (http://www.saxproject.org)
+
+ The <sync> task is based on code Copyright (c) 2002, Landmark
+ Graphics Corp that has been kindly donated to the Apache Software
+ Foundation.
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+ - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+ - voluntary contributions made by Paul Eng on behalf of the
+ Apache Software Foundation that were originally developed at iClick, Inc.,
+ software copyright (c) 1999.
diff --git a/solr-8.1.1/licenses/antlr4-runtime-4.5.1-1.jar.sha1 b/solr-8.1.1/licenses/antlr4-runtime-4.5.1-1.jar.sha1
new file mode 100644
index 000000000..f15e50069
--- /dev/null
+++ b/solr-8.1.1/licenses/antlr4-runtime-4.5.1-1.jar.sha1
@@ -0,0 +1 @@
+66144204f9d6d7d3f3f775622c2dd7e9bd511d97
diff --git a/solr-8.1.1/licenses/antlr4-runtime-LICENSE-BSD.txt b/solr-8.1.1/licenses/antlr4-runtime-LICENSE-BSD.txt
new file mode 100644
index 000000000..95d0a2554
--- /dev/null
+++ b/solr-8.1.1/licenses/antlr4-runtime-LICENSE-BSD.txt
@@ -0,0 +1,26 @@
+[The "BSD license"]
+Copyright (c) 2015 Terence Parr, Sam Harwell
+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. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/antlr4-runtime-NOTICE.txt b/solr-8.1.1/licenses/antlr4-runtime-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/antlr4-runtime-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/apache-mime4j-core-0.8.2.jar.sha1 b/solr-8.1.1/licenses/apache-mime4j-core-0.8.2.jar.sha1
new file mode 100644
index 000000000..6afc490d7
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-core-0.8.2.jar.sha1
@@ -0,0 +1 @@
+94919d81969c67c5894646338bf10fbc35f5a946
diff --git a/solr-8.1.1/licenses/apache-mime4j-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/apache-mime4j-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-core-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/apache-mime4j-core-NOTICE.txt b/solr-8.1.1/licenses/apache-mime4j-core-NOTICE.txt
new file mode 100644
index 000000000..61523975e
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-core-NOTICE.txt
@@ -0,0 +1,13 @@
+ =========================================================================
+ == NOTICE file for use with the Apache License, Version 2.0, ==
+ =========================================================================
+
+ Apache JAMES Mime4j
+ Copyright 2004-2010 The Apache Software Foundation
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ This product test suite includes data (mimetools-testmsgs folder) developed
+ by Eryq and ZeeGee Software Inc as part of the "MIME-tools" Perl5 toolkit
+ and licensed under the Artistic License
diff --git a/solr-8.1.1/licenses/apache-mime4j-dom-0.8.2.jar.sha1 b/solr-8.1.1/licenses/apache-mime4j-dom-0.8.2.jar.sha1
new file mode 100644
index 000000000..171a9d1ce
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-dom-0.8.2.jar.sha1
@@ -0,0 +1 @@
+32c9a9afe84eca86a3b0b3c66a956ced249ceade
diff --git a/solr-8.1.1/licenses/apache-mime4j-dom-LICENSE-ASL.txt b/solr-8.1.1/licenses/apache-mime4j-dom-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-dom-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/apache-mime4j-dom-NOTICE.txt b/solr-8.1.1/licenses/apache-mime4j-dom-NOTICE.txt
new file mode 100644
index 000000000..61523975e
--- /dev/null
+++ b/solr-8.1.1/licenses/apache-mime4j-dom-NOTICE.txt
@@ -0,0 +1,13 @@
+ =========================================================================
+ == NOTICE file for use with the Apache License, Version 2.0, ==
+ =========================================================================
+
+ Apache JAMES Mime4j
+ Copyright 2004-2010 The Apache Software Foundation
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ This product test suite includes data (mimetools-testmsgs folder) developed
+ by Eryq and ZeeGee Software Inc as part of the "MIME-tools" Perl5 toolkit
+ and licensed under the Artistic License
diff --git a/solr-8.1.1/licenses/argparse4j-0.8.1.jar.sha1 b/solr-8.1.1/licenses/argparse4j-0.8.1.jar.sha1
new file mode 100644
index 000000000..27a0568b0
--- /dev/null
+++ b/solr-8.1.1/licenses/argparse4j-0.8.1.jar.sha1
@@ -0,0 +1 @@
+2c8241f84acf6c924bd75be0dbd68e8d74fbcd70
diff --git a/solr-8.1.1/licenses/argparse4j-LICENSE-MIT.txt b/solr-8.1.1/licenses/argparse4j-LICENSE-MIT.txt
new file mode 100644
index 000000000..773b0df0e
--- /dev/null
+++ b/solr-8.1.1/licenses/argparse4j-LICENSE-MIT.txt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2011-2017 Tatsuhiro Tsujikawa
+ *
+ * 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.
+ */
diff --git a/solr-8.1.1/licenses/argparse4j-NOTICE.txt b/solr-8.1.1/licenses/argparse4j-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/argparse4j-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/asciidoctor-ant-1.6.0-alpha.5.jar.sha1 b/solr-8.1.1/licenses/asciidoctor-ant-1.6.0-alpha.5.jar.sha1
new file mode 100644
index 000000000..0da9ca2b1
--- /dev/null
+++ b/solr-8.1.1/licenses/asciidoctor-ant-1.6.0-alpha.5.jar.sha1
@@ -0,0 +1 @@
+741c5e5afd8a2c7d415feb7b9a8d6fe8a6cca57c
diff --git a/solr-8.1.1/licenses/asciidoctor-ant-LICENSE-ASL.txt b/solr-8.1.1/licenses/asciidoctor-ant-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/asciidoctor-ant-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/asciidoctor-ant-NOTICE.txt b/solr-8.1.1/licenses/asciidoctor-ant-NOTICE.txt
new file mode 100644
index 000000000..04f7d9865
--- /dev/null
+++ b/solr-8.1.1/licenses/asciidoctor-ant-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache [asciidoctor-ant]
+Copyright [2013] The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/asm-5.1.jar.sha1 b/solr-8.1.1/licenses/asm-5.1.jar.sha1
new file mode 100644
index 000000000..fc907c77d
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-5.1.jar.sha1
@@ -0,0 +1 @@
+5ef31c4fe953b1fd00b8a88fa1d6820e8785bb45
diff --git a/solr-8.1.1/licenses/asm-LICENSE-BSD.txt b/solr-8.1.1/licenses/asm-LICENSE-BSD.txt
new file mode 100644
index 000000000..62e67f758
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-LICENSE-BSD.txt
@@ -0,0 +1,29 @@
+/***
+ * ASM: a very small and fast Java bytecode manipulation framework
+ * Copyright (c) 2000-2007 INRIA, France Telecom
+ * 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 holders 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 OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/asm-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/asm-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..afb064f2f
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,26 @@
+Copyright (c) 2012 France Télécom
+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 holders 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 OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/asm-NOTICE.txt b/solr-8.1.1/licenses/asm-NOTICE.txt
new file mode 100644
index 000000000..8d1c8b69c
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/asm-commons-5.1.jar.sha1 b/solr-8.1.1/licenses/asm-commons-5.1.jar.sha1
new file mode 100644
index 000000000..8b4959384
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-commons-5.1.jar.sha1
@@ -0,0 +1 @@
+25d8a575034dd9cfcb375a39b5334f0ba9c8474e
diff --git a/solr-8.1.1/licenses/asm-commons-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/asm-commons-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..afb064f2f
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-commons-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,26 @@
+Copyright (c) 2012 France Télécom
+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 holders 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 OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/asm-commons-NOTICE.txt b/solr-8.1.1/licenses/asm-commons-NOTICE.txt
new file mode 100644
index 000000000..8d1c8b69c
--- /dev/null
+++ b/solr-8.1.1/licenses/asm-commons-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/aspectjrt-1.8.0.jar.sha1 b/solr-8.1.1/licenses/aspectjrt-1.8.0.jar.sha1
new file mode 100644
index 000000000..df597b225
--- /dev/null
+++ b/solr-8.1.1/licenses/aspectjrt-1.8.0.jar.sha1
@@ -0,0 +1 @@
+302d0fe0abba26bbf5f31c3cd5337b3125c744e3
diff --git a/solr-8.1.1/licenses/aspectjrt-LICENSE-EPL.txt b/solr-8.1.1/licenses/aspectjrt-LICENSE-EPL.txt
new file mode 100644
index 000000000..c93934f39
--- /dev/null
+++ b/solr-8.1.1/licenses/aspectjrt-LICENSE-EPL.txt
@@ -0,0 +1,71 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+b) a copy of this Agreement must be included with each copy of the Program.
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
diff --git a/solr-8.1.1/licenses/attributes-binder-1.3.3.jar.sha1 b/solr-8.1.1/licenses/attributes-binder-1.3.3.jar.sha1
new file mode 100644
index 000000000..bad28fb1b
--- /dev/null
+++ b/solr-8.1.1/licenses/attributes-binder-1.3.3.jar.sha1
@@ -0,0 +1 @@
+7f13f63e2e213f6ea38364836408d2dc11f29804
diff --git a/solr-8.1.1/licenses/attributes-binder-LICENSE-ASL.txt b/solr-8.1.1/licenses/attributes-binder-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/attributes-binder-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/attributes-binder-NOTICE.txt b/solr-8.1.1/licenses/attributes-binder-NOTICE.txt
new file mode 100644
index 000000000..6ff02dc13
--- /dev/null
+++ b/solr-8.1.1/licenses/attributes-binder-NOTICE.txt
@@ -0,0 +1,9 @@
+=========================================================================
+== Carrot2 Attributes Binder Notice ==
+=========================================================================
+Copyright (C) 2002-2010, Dawid Weiss, Stanislaw Osinski.
+All rights reserved.
+
+This product includes software developed by the Carrot2 Project.
+
+See http://project.carrot2.org/
diff --git a/solr-8.1.1/licenses/avatica-core-1.13.0.jar.sha1 b/solr-8.1.1/licenses/avatica-core-1.13.0.jar.sha1
new file mode 100644
index 000000000..ca67cb9d0
--- /dev/null
+++ b/solr-8.1.1/licenses/avatica-core-1.13.0.jar.sha1
@@ -0,0 +1 @@
+bae68362b6020d6da93ad9abfa6a44edffb2b952
diff --git a/solr-8.1.1/licenses/avatica-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/avatica-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..f7b9863d5
--- /dev/null
+++ b/solr-8.1.1/licenses/avatica-core-LICENSE-ASL.txt
@@ -0,0 +1,268 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+
+
+-----------------------------------------------------------------------
+
+APACHE CALCITE SUBCOMPONENTS:
+
+The Apache Calcite project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+-----------------------------------------------------------------------
+ The MIT License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following files under the MIT License:
+
+- site
+ Parts of the web site generated by Jekyll (http://jekyllrb.com/)
+ Copyright (c) 2008-2015 Tom Preston-Werner
+- site/_sass/_font-awesome.scss
+ Font-awesome css files v4.1.0 (http://fortawesome.github.io/Font-Awesome/)
+ Copyright (c) 2013 Dave Gandy
+- site/_sass/_normalize.scss
+ normalize.css v3.0.2 | git.io/normalize
+ Copyright (c) Nicolas Gallagher and Jonathan Neal
+- site/_sass/_gridism.scss
+ Gridism: A simple, responsive, and handy CSS grid by @cobyism
+ https://github.com/cobyism/gridism
+ Copyright (c) 2013 Coby Chapple
+- site/js/html5shiv.min.js
+ HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem
+- site/js/respond.min.js
+ Respond.js v1.4.2: min/max-width media query polyfill
+ Copyright 2013 Scott Jehl
+
+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.
+
+-----------------------------------------------------------------------
+ The Open Font License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following fonts under the
+SIL Open Font License (OFL) - http://scripts.sil.org/OFL/
+
+- site/fonts/fontawesome-webfont.*
+ Font-awesome font files v4.0.3 (http://fortawesome.github.io/Font-Awesome/)
diff --git a/solr-8.1.1/licenses/avatica-core-NOTICE.txt b/solr-8.1.1/licenses/avatica-core-NOTICE.txt
new file mode 100644
index 000000000..506738bca
--- /dev/null
+++ b/solr-8.1.1/licenses/avatica-core-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Calcite
+Copyright 2012-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/bcmail-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/bcmail-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..9dfdf7c6a
--- /dev/null
+++ b/solr-8.1.1/licenses/bcmail-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,15 @@
+Copyright (c) 2000-2010 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+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.
diff --git a/solr-8.1.1/licenses/bcmail-NOTICE.txt b/solr-8.1.1/licenses/bcmail-NOTICE.txt
new file mode 100644
index 000000000..be0638a2b
--- /dev/null
+++ b/solr-8.1.1/licenses/bcmail-NOTICE.txt
@@ -0,0 +1,2 @@
+Copyright (c) 2000-2006 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
diff --git a/solr-8.1.1/licenses/bcmail-jdk15on-1.60.jar.sha1 b/solr-8.1.1/licenses/bcmail-jdk15on-1.60.jar.sha1
new file mode 100644
index 000000000..9cb6092c7
--- /dev/null
+++ b/solr-8.1.1/licenses/bcmail-jdk15on-1.60.jar.sha1
@@ -0,0 +1 @@
+df0250131a6e85e546ec5b1bf964f7f2ff3a42fc
diff --git a/solr-8.1.1/licenses/bcpkix-jdk15on-1.60.jar.sha1 b/solr-8.1.1/licenses/bcpkix-jdk15on-1.60.jar.sha1
new file mode 100644
index 000000000..45e955aac
--- /dev/null
+++ b/solr-8.1.1/licenses/bcpkix-jdk15on-1.60.jar.sha1
@@ -0,0 +1 @@
+d0c46320fbc07be3a24eb13a56cee4e3d38e0c75
diff --git a/solr-8.1.1/licenses/bcpkix-jdk15on-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/bcpkix-jdk15on-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..9dfdf7c6a
--- /dev/null
+++ b/solr-8.1.1/licenses/bcpkix-jdk15on-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,15 @@
+Copyright (c) 2000-2010 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+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.
diff --git a/solr-8.1.1/licenses/bcpkix-jdk15on-NOTICE.txt b/solr-8.1.1/licenses/bcpkix-jdk15on-NOTICE.txt
new file mode 100644
index 000000000..be0638a2b
--- /dev/null
+++ b/solr-8.1.1/licenses/bcpkix-jdk15on-NOTICE.txt
@@ -0,0 +1,2 @@
+Copyright (c) 2000-2006 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
diff --git a/solr-8.1.1/licenses/bcprov-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/bcprov-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..9dfdf7c6a
--- /dev/null
+++ b/solr-8.1.1/licenses/bcprov-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,15 @@
+Copyright (c) 2000-2010 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+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.
diff --git a/solr-8.1.1/licenses/bcprov-NOTICE.txt b/solr-8.1.1/licenses/bcprov-NOTICE.txt
new file mode 100644
index 000000000..be0638a2b
--- /dev/null
+++ b/solr-8.1.1/licenses/bcprov-NOTICE.txt
@@ -0,0 +1,2 @@
+Copyright (c) 2000-2006 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
diff --git a/solr-8.1.1/licenses/bcprov-jdk15on-1.60.jar.sha1 b/solr-8.1.1/licenses/bcprov-jdk15on-1.60.jar.sha1
new file mode 100644
index 000000000..3fc67c7c9
--- /dev/null
+++ b/solr-8.1.1/licenses/bcprov-jdk15on-1.60.jar.sha1
@@ -0,0 +1 @@
+bd47ad3bd14b8e82595c7adaa143501e60842a84
diff --git a/solr-8.1.1/licenses/boilerpipe-1.1.0.jar.sha1 b/solr-8.1.1/licenses/boilerpipe-1.1.0.jar.sha1
new file mode 100644
index 000000000..889130609
--- /dev/null
+++ b/solr-8.1.1/licenses/boilerpipe-1.1.0.jar.sha1
@@ -0,0 +1 @@
+f62cb75ed52455a9e68d1d05b84c500673340eb2
diff --git a/solr-8.1.1/licenses/boilerpipe-LICENSE-ASL.txt b/solr-8.1.1/licenses/boilerpipe-LICENSE-ASL.txt
new file mode 100644
index 000000000..ffc9501ae
--- /dev/null
+++ b/solr-8.1.1/licenses/boilerpipe-LICENSE-ASL.txt
@@ -0,0 +1,18 @@
+
+ boilerpipe
+
+ Copyright (c) 2009 Christian Kohlschütter
+
+ The author licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
diff --git a/solr-8.1.1/licenses/boilerpipe-NOTICE.txt b/solr-8.1.1/licenses/boilerpipe-NOTICE.txt
new file mode 100644
index 000000000..afbc6b5c9
--- /dev/null
+++ b/solr-8.1.1/licenses/boilerpipe-NOTICE.txt
@@ -0,0 +1,24 @@
+
+ boilerpipe
+
+ Copyright (c) 2009, 2010 Christian Kohlschütter
+
+ The author licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+ This software contains the following parts which are also provided
+ under the Apache License 2.0 (http://apache.org/licenses/LICENSE-2.0.txt):
+
+ - NekoHTML
+ - Xerces
+
diff --git a/solr-8.1.1/licenses/byte-buddy-1.9.3.jar.sha1 b/solr-8.1.1/licenses/byte-buddy-1.9.3.jar.sha1
new file mode 100644
index 000000000..2a02d4267
--- /dev/null
+++ b/solr-8.1.1/licenses/byte-buddy-1.9.3.jar.sha1
@@ -0,0 +1 @@
+f32e510b239620852fc9a2387fac41fd053d6a4d
diff --git a/solr-8.1.1/licenses/byte-buddy-LICENSE-ASL.txt b/solr-8.1.1/licenses/byte-buddy-LICENSE-ASL.txt
new file mode 100644
index 000000000..e06d20818
--- /dev/null
+++ b/solr-8.1.1/licenses/byte-buddy-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/byte-buddy-NOTICE.txt b/solr-8.1.1/licenses/byte-buddy-NOTICE.txt
new file mode 100644
index 000000000..731a995d9
--- /dev/null
+++ b/solr-8.1.1/licenses/byte-buddy-NOTICE.txt
@@ -0,0 +1,4 @@
+Byte Buddy is a code generation and manipulation library for creating and modifying Java
+classes during the runtime of a Java application and without the help of a compiler.
+
+Copyright 2014 Rafael Winterhalter
diff --git a/solr-8.1.1/licenses/caffeine-2.4.0.jar.sha1 b/solr-8.1.1/licenses/caffeine-2.4.0.jar.sha1
new file mode 100644
index 000000000..9c317d927
--- /dev/null
+++ b/solr-8.1.1/licenses/caffeine-2.4.0.jar.sha1
@@ -0,0 +1 @@
+5aa8bbb851b1ad403cc140094ba4a25998369efe
diff --git a/solr-8.1.1/licenses/caffeine-LICENSE-ASL.txt b/solr-8.1.1/licenses/caffeine-LICENSE-ASL.txt
new file mode 100644
index 000000000..3e369e552
--- /dev/null
+++ b/solr-8.1.1/licenses/caffeine-LICENSE-ASL.txt
@@ -0,0 +1,403 @@
+
+
+ Apache License
+
+ Version 2.0, January 2004
+
+ http://www.apache.org/licenses/
+
+
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction,
+
+ and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+
+ the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all
+
+ other entities that control, are controlled by, or are under common
+
+ control with that entity. For the purposes of this definition,
+
+ "control" means (i) the power, direct or indirect, to cause the
+
+ direction or management of such entity, whether by contract or
+
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+
+ exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications,
+
+ including but not limited to software source code, documentation
+
+ source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical
+
+ transformation or translation of a Source form, including but
+
+ not limited to compiled object code, generated documentation,
+
+ and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or
+
+ Object form, made available under the License, as indicated by a
+
+ copyright notice that is included in or attached to the work
+
+ (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+
+ form, that is based on (or derived from) the Work and for which the
+
+ editorial revisions, annotations, elaborations, or other modifications
+
+ represent, as a whole, an original work of authorship. For the purposes
+
+ of this License, Derivative Works shall not include works that remain
+
+ separable from, or merely link (or bind by name) to the interfaces of,
+
+ the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including
+
+ the original version of the Work and any modifications or additions
+
+ to that Work or Derivative Works thereof, that is intentionally
+
+ submitted to Licensor for inclusion in the Work by the copyright owner
+
+ or by an individual or Legal Entity authorized to submit on behalf of
+
+ the copyright owner. For the purposes of this definition, "submitted"
+
+ means any form of electronic, verbal, or written communication sent
+
+ to the Licensor or its representatives, including but not limited to
+
+ communication on electronic mailing lists, source code control systems,
+
+ and issue tracking systems that are managed by, or on behalf of, the
+
+ Licensor for the purpose of discussing and improving the Work, but
+
+ excluding communication that is conspicuously marked or otherwise
+
+ designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+
+ on behalf of whom a Contribution has been received by Licensor and
+
+ subsequently incorporated within the Work.
+
+
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ copyright license to reproduce, prepare Derivative Works of,
+
+ publicly display, publicly perform, sublicense, and distribute the
+
+ Work and such Derivative Works in Source or Object form.
+
+
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ (except as stated in this section) patent license to make, have made,
+
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+
+ where such license applies only to those patent claims licensable
+
+ by such Contributor that are necessarily infringed by their
+
+ Contribution(s) alone or by combination of their Contribution(s)
+
+ with the Work to which such Contribution(s) was submitted. If You
+
+ institute patent litigation against any entity (including a
+
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+
+ or a Contribution incorporated within the Work constitutes direct
+
+ or contributory patent infringement, then any patent licenses
+
+ granted to You under this License for that Work shall terminate
+
+ as of the date such litigation is filed.
+
+
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+
+ Work or Derivative Works thereof in any medium, with or without
+
+ modifications, and in Source or Object form, provided that You
+
+ meet the following conditions:
+
+
+
+ (a) You must give any other recipients of the Work or
+
+ Derivative Works a copy of this License; and
+
+
+
+ (b) You must cause any modified files to carry prominent notices
+
+ stating that You changed the files; and
+
+
+
+ (c) You must retain, in the Source form of any Derivative Works
+
+ that You distribute, all copyright, patent, trademark, and
+
+ attribution notices from the Source form of the Work,
+
+ excluding those notices that do not pertain to any part of
+
+ the Derivative Works; and
+
+
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+
+ distribution, then any Derivative Works that You distribute must
+
+ include a readable copy of the attribution notices contained
+
+ within such NOTICE file, excluding those notices that do not
+
+ pertain to any part of the Derivative Works, in at least one
+
+ of the following places: within a NOTICE text file distributed
+
+ as part of the Derivative Works; within the Source form or
+
+ documentation, if provided along with the Derivative Works; or,
+
+ within a display generated by the Derivative Works, if and
+
+ wherever such third-party notices normally appear. The contents
+
+ of the NOTICE file are for informational purposes only and
+
+ do not modify the License. You may add Your own attribution
+
+ notices within Derivative Works that You distribute, alongside
+
+ or as an addendum to the NOTICE text from the Work, provided
+
+ that such additional attribution notices cannot be construed
+
+ as modifying the License.
+
+
+
+ You may add Your own copyright statement to Your modifications and
+
+ may provide additional or different license terms and conditions
+
+ for use, reproduction, or distribution of Your modifications, or
+
+ for any such Derivative Works as a whole, provided Your use,
+
+ reproduction, and distribution of the Work otherwise complies with
+
+ the conditions stated in this License.
+
+
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+
+ any Contribution intentionally submitted for inclusion in the Work
+
+ by You to the Licensor shall be under the terms and conditions of
+
+ this License, without any additional terms or conditions.
+
+ Notwithstanding the above, nothing herein shall supersede or modify
+
+ the terms of any separate license agreement you may have executed
+
+ with Licensor regarding such Contributions.
+
+
+
+ 6. Trademarks. This License does not grant permission to use the trade
+
+ names, trademarks, service marks, or product names of the Licensor,
+
+ except as required for reasonable and customary use in describing the
+
+ origin of the Work and reproducing the content of the NOTICE file.
+
+
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+
+ agreed to in writing, Licensor provides the Work (and each
+
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+
+ implied, including, without limitation, any warranties or conditions
+
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+
+ appropriateness of using or redistributing the Work and assume any
+
+ risks associated with Your exercise of permissions under this License.
+
+
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+
+ whether in tort (including negligence), contract, or otherwise,
+
+ unless required by applicable law (such as deliberate and grossly
+
+ negligent acts) or agreed to in writing, shall any Contributor be
+
+ liable to You for damages, including any direct, indirect, special,
+
+ incidental, or consequential damages of any character arising as a
+
+ result of this License or out of the use or inability to use the
+
+ Work (including but not limited to damages for loss of goodwill,
+
+ work stoppage, computer failure or malfunction, or any and all
+
+ other commercial damages or losses), even if such Contributor
+
+ has been advised of the possibility of such damages.
+
+
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+
+ the Work or Derivative Works thereof, You may choose to offer,
+
+ and charge a fee for, acceptance of support, warranty, indemnity,
+
+ or other liability obligations and/or rights consistent with this
+
+ License. However, in accepting such obligations, You may act only
+
+ on Your own behalf and on Your sole responsibility, not on behalf
+
+ of any other Contributor, and only if You agree to indemnify,
+
+ defend, and hold each Contributor harmless for any liability
+
+ incurred by, or claims asserted against, such Contributor by reason
+
+ of your accepting any such warranty or additional liability.
+
+
+
+ END OF TERMS AND CONDITIONS
+
+
+
+ APPENDIX: How to apply the Apache License to your work.
+
+
+
+ To apply the Apache License to your work, attach the following
+
+ boilerplate notice, with the fields enclosed by brackets "[]"
+
+ replaced with your own identifying information. (Don't include
+
+ the brackets!) The text should be enclosed in the appropriate
+
+ comment syntax for the file format. We also recommend that a
+
+ file or class name and description of purpose be included on the
+
+ same "printed page" as the copyright notice for easier
+
+ identification within third-party archives.
+
+
+
+ Copyright [yyyy] [name of copyright owner]
+
+
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+
+ you may not use this file except in compliance with the License.
+
+ You may obtain a copy of the License at
+
+
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+
+
+ Unless required by applicable law or agreed to in writing, software
+
+ distributed under the License is distributed on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+ See the License for the specific language governing permissions and
+
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/caffeine-NOTICE.txt b/solr-8.1.1/licenses/caffeine-NOTICE.txt
new file mode 100644
index 000000000..221cbcd5c
--- /dev/null
+++ b/solr-8.1.1/licenses/caffeine-NOTICE.txt
@@ -0,0 +1 @@
+Copyright 2015 by Ben Manes
diff --git a/solr-8.1.1/licenses/calcite-core-1.18.0.jar.sha1 b/solr-8.1.1/licenses/calcite-core-1.18.0.jar.sha1
new file mode 100644
index 000000000..1cc0be0b5
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-core-1.18.0.jar.sha1
@@ -0,0 +1 @@
+814f5395cb0af71d6d7eb304a94a2c5365e4929c
diff --git a/solr-8.1.1/licenses/calcite-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/calcite-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..f7b9863d5
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-core-LICENSE-ASL.txt
@@ -0,0 +1,268 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+
+
+-----------------------------------------------------------------------
+
+APACHE CALCITE SUBCOMPONENTS:
+
+The Apache Calcite project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+-----------------------------------------------------------------------
+ The MIT License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following files under the MIT License:
+
+- site
+ Parts of the web site generated by Jekyll (http://jekyllrb.com/)
+ Copyright (c) 2008-2015 Tom Preston-Werner
+- site/_sass/_font-awesome.scss
+ Font-awesome css files v4.1.0 (http://fortawesome.github.io/Font-Awesome/)
+ Copyright (c) 2013 Dave Gandy
+- site/_sass/_normalize.scss
+ normalize.css v3.0.2 | git.io/normalize
+ Copyright (c) Nicolas Gallagher and Jonathan Neal
+- site/_sass/_gridism.scss
+ Gridism: A simple, responsive, and handy CSS grid by @cobyism
+ https://github.com/cobyism/gridism
+ Copyright (c) 2013 Coby Chapple
+- site/js/html5shiv.min.js
+ HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem
+- site/js/respond.min.js
+ Respond.js v1.4.2: min/max-width media query polyfill
+ Copyright 2013 Scott Jehl
+
+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.
+
+-----------------------------------------------------------------------
+ The Open Font License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following fonts under the
+SIL Open Font License (OFL) - http://scripts.sil.org/OFL/
+
+- site/fonts/fontawesome-webfont.*
+ Font-awesome font files v4.0.3 (http://fortawesome.github.io/Font-Awesome/)
diff --git a/solr-8.1.1/licenses/calcite-core-NOTICE.txt b/solr-8.1.1/licenses/calcite-core-NOTICE.txt
new file mode 100644
index 000000000..589ab43a3
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-core-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Calcite
+Copyright 2012-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product is based on source code originally developed
+by DynamoBI Corporation, LucidEra Inc., SQLstream Inc. and others
+under the auspices of the Eigenbase Foundation
+and released as the LucidDB project.
+
+The web site includes files generated by Jekyll.
diff --git a/solr-8.1.1/licenses/calcite-linq4j-1.18.0.jar.sha1 b/solr-8.1.1/licenses/calcite-linq4j-1.18.0.jar.sha1
new file mode 100644
index 000000000..130f9e55a
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-linq4j-1.18.0.jar.sha1
@@ -0,0 +1 @@
+bc7d7a74b2e5ead39ee3688f107bece3ad13eca6
diff --git a/solr-8.1.1/licenses/calcite-linq4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/calcite-linq4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..f7b9863d5
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-linq4j-LICENSE-ASL.txt
@@ -0,0 +1,268 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+
+
+-----------------------------------------------------------------------
+
+APACHE CALCITE SUBCOMPONENTS:
+
+The Apache Calcite project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+-----------------------------------------------------------------------
+ The MIT License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following files under the MIT License:
+
+- site
+ Parts of the web site generated by Jekyll (http://jekyllrb.com/)
+ Copyright (c) 2008-2015 Tom Preston-Werner
+- site/_sass/_font-awesome.scss
+ Font-awesome css files v4.1.0 (http://fortawesome.github.io/Font-Awesome/)
+ Copyright (c) 2013 Dave Gandy
+- site/_sass/_normalize.scss
+ normalize.css v3.0.2 | git.io/normalize
+ Copyright (c) Nicolas Gallagher and Jonathan Neal
+- site/_sass/_gridism.scss
+ Gridism: A simple, responsive, and handy CSS grid by @cobyism
+ https://github.com/cobyism/gridism
+ Copyright (c) 2013 Coby Chapple
+- site/js/html5shiv.min.js
+ HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem
+- site/js/respond.min.js
+ Respond.js v1.4.2: min/max-width media query polyfill
+ Copyright 2013 Scott Jehl
+
+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.
+
+-----------------------------------------------------------------------
+ The Open Font License
+-----------------------------------------------------------------------
+
+The Apache Calcite project bundles the following fonts under the
+SIL Open Font License (OFL) - http://scripts.sil.org/OFL/
+
+- site/fonts/fontawesome-webfont.*
+ Font-awesome font files v4.0.3 (http://fortawesome.github.io/Font-Awesome/)
diff --git a/solr-8.1.1/licenses/calcite-linq4j-NOTICE.txt b/solr-8.1.1/licenses/calcite-linq4j-NOTICE.txt
new file mode 100644
index 000000000..589ab43a3
--- /dev/null
+++ b/solr-8.1.1/licenses/calcite-linq4j-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Calcite
+Copyright 2012-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product is based on source code originally developed
+by DynamoBI Corporation, LucidEra Inc., SQLstream Inc. and others
+under the auspices of the Eigenbase Foundation
+and released as the LucidDB project.
+
+The web site includes files generated by Jekyll.
diff --git a/solr-8.1.1/licenses/carrot2-guava-18.0.jar.sha1 b/solr-8.1.1/licenses/carrot2-guava-18.0.jar.sha1
new file mode 100644
index 000000000..ce50fe330
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-guava-18.0.jar.sha1
@@ -0,0 +1 @@
+539317dc171b8c92cca964e87686602800cf19b0
diff --git a/solr-8.1.1/licenses/carrot2-guava-LICENSE-ASL.txt b/solr-8.1.1/licenses/carrot2-guava-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-guava-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/carrot2-guava-NOTICE.txt b/solr-8.1.1/licenses/carrot2-guava-NOTICE.txt
new file mode 100644
index 000000000..81a8a6e4a
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-guava-NOTICE.txt
@@ -0,0 +1,5 @@
+This product includes software developed by
+Google, Inc. (http://code.google.com/p/guava-libraries/)
+
+Repacked Carrot2 Guava at:
+https://github.com/carrot2/lib-repackaged
diff --git a/solr-8.1.1/licenses/carrot2-mini-3.16.0.jar.sha1 b/solr-8.1.1/licenses/carrot2-mini-3.16.0.jar.sha1
new file mode 100644
index 000000000..0b34d73ce
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-mini-3.16.0.jar.sha1
@@ -0,0 +1 @@
+6bb27fd0dfe24a5671d9751a943728a54be48ed7
diff --git a/solr-8.1.1/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..b2a38f3a5
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,36 @@
+
+Carrot2 Project
+
+Copyright (C) 2002-2013, Dawid Weiss, Stanisław Osiński.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+- 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.
+
+- Neither the name of the Carrot2 Project nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+- We kindly request that you include in the end-user documentation provided with
+ the redistribution and/or in the software itself an acknowledgement equivalent
+ to the following: "This product includes software developed by the Carrot2
+ Project."
+
+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 OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/solr-8.1.1/licenses/carrot2-mini-NOTICE.txt b/solr-8.1.1/licenses/carrot2-mini-NOTICE.txt
new file mode 100644
index 000000000..624dbf353
--- /dev/null
+++ b/solr-8.1.1/licenses/carrot2-mini-NOTICE.txt
@@ -0,0 +1,10 @@
+=========================================================================
+== Carrot2 Notice ==
+=========================================================================
+Copyright (C) 2002-2013, Dawid Weiss, Stanislaw Osinski.
+Portions (C) Contributors listed in "carrot2.CONTRIBUTORS" file.
+All rights reserved.
+
+This product includes software developed by the Carrot2 Project.
+
+See http://project.carrot2.org/
diff --git a/solr-8.1.1/licenses/commons-beanutils-1.9.3.jar.sha1 b/solr-8.1.1/licenses/commons-beanutils-1.9.3.jar.sha1
new file mode 100644
index 000000000..da389e597
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-beanutils-1.9.3.jar.sha1
@@ -0,0 +1 @@
+c845703de334ddc6b4b3cd26835458cb1cba1f3d
diff --git a/solr-8.1.1/licenses/commons-beanutils-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-beanutils-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-beanutils-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-beanutils-NOTICE.txt b/solr-8.1.1/licenses/commons-beanutils-NOTICE.txt
new file mode 100644
index 000000000..c6c8ce997
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-beanutils-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons BeanUtils
+Copyright 2000-2018 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-cli-1.2.jar.sha1 b/solr-8.1.1/licenses/commons-cli-1.2.jar.sha1
new file mode 100644
index 000000000..6dacb321c
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-cli-1.2.jar.sha1
@@ -0,0 +1 @@
+2bf96b7aa8b611c177d329452af1dc933e14501c
diff --git a/solr-8.1.1/licenses/commons-cli-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-cli-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-cli-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-cli-NOTICE.txt b/solr-8.1.1/licenses/commons-cli-NOTICE.txt
new file mode 100644
index 000000000..72eb32a90
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-cli-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons CLI
+Copyright 2001-2009 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-codec-1.11.jar.sha1 b/solr-8.1.1/licenses/commons-codec-1.11.jar.sha1
new file mode 100644
index 000000000..0ca984151
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-codec-1.11.jar.sha1
@@ -0,0 +1 @@
+3acb4705652e16236558f0f4f2192cc33c3bd189
diff --git a/solr-8.1.1/licenses/commons-codec-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-codec-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-codec-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-codec-NOTICE.txt b/solr-8.1.1/licenses/commons-codec-NOTICE.txt
new file mode 100644
index 000000000..43d180979
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-codec-NOTICE.txt
@@ -0,0 +1,14 @@
+Apache Commons Codec
+Copyright 2002-2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+--------------------------------------------------------------------------------
+src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java contains
+test data from http://aspell.sourceforge.net/test/batch0.tab.
+
+Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org). Verbatim copying
+and distribution of this entire article is permitted in any medium,
+provided this notice is preserved.
+--------------------------------------------------------------------------------
diff --git a/solr-8.1.1/licenses/commons-collections-3.2.2.jar.sha1 b/solr-8.1.1/licenses/commons-collections-3.2.2.jar.sha1
new file mode 100644
index 000000000..3284fcae4
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections-3.2.2.jar.sha1
@@ -0,0 +1 @@
+8ad72fe39fa8c91eaaf12aadb21e0c3661fe26d5
diff --git a/solr-8.1.1/licenses/commons-collections-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-collections-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-collections-NOTICE.txt b/solr-8.1.1/licenses/commons-collections-NOTICE.txt
new file mode 100644
index 000000000..a9e0fff6c
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Collections
+Copyright 2001-2008 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-collections4-4.2.jar.sha1 b/solr-8.1.1/licenses/commons-collections4-4.2.jar.sha1
new file mode 100644
index 000000000..e00186352
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections4-4.2.jar.sha1
@@ -0,0 +1 @@
+54ebea0a5b653d3c680131e73fe807bb8f78c4ed
diff --git a/solr-8.1.1/licenses/commons-collections4-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-collections4-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections4-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-collections4-NOTICE.txt b/solr-8.1.1/licenses/commons-collections4-NOTICE.txt
new file mode 100644
index 000000000..77fd82f2e
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-collections4-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Collections
+Copyright 2001-2017 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-compiler-3.0.9.jar.sha1 b/solr-8.1.1/licenses/commons-compiler-3.0.9.jar.sha1
new file mode 100644
index 000000000..d3cd9d224
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compiler-3.0.9.jar.sha1
@@ -0,0 +1 @@
+6aac3c03d02dcab0d59f77ff00b682f5320e54e9
diff --git a/solr-8.1.1/licenses/commons-compiler-LICENSE-BSD.txt b/solr-8.1.1/licenses/commons-compiler-LICENSE-BSD.txt
new file mode 100644
index 000000000..ef871e242
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compiler-LICENSE-BSD.txt
@@ -0,0 +1,31 @@
+Janino - An embedded Java[TM] compiler
+
+Copyright (c) 2001-2016, Arno Unkrig
+Copyright (c) 2015-2016 TIBCO Software Inc.
+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 JANINO 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 HOLDERS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/commons-compiler-NOTICE.txt b/solr-8.1.1/licenses/commons-compiler-NOTICE.txt
new file mode 100644
index 000000000..203e2f920
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compiler-NOTICE.txt
@@ -0,0 +1,5 @@
+Janino - An embedded Java[TM] compiler
+
+Copyright (c) 2001-2016, Arno Unkrig
+Copyright (c) 2015-2016 TIBCO Software Inc.
+All rights reserved.
diff --git a/solr-8.1.1/licenses/commons-compress-1.18.jar.sha1 b/solr-8.1.1/licenses/commons-compress-1.18.jar.sha1
new file mode 100644
index 000000000..96fa37315
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compress-1.18.jar.sha1
@@ -0,0 +1 @@
+1191f9f2bc0c47a8cce69193feb1ff0a8bcb37d5
diff --git a/solr-8.1.1/licenses/commons-compress-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-compress-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compress-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-compress-NOTICE.txt b/solr-8.1.1/licenses/commons-compress-NOTICE.txt
new file mode 100644
index 000000000..07baa9863
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-compress-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Compress
+Copyright 2002-2012 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-configuration-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-configuration-LICENSE-ASL.txt
new file mode 100644
index 000000000..3e369e552
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-configuration-LICENSE-ASL.txt
@@ -0,0 +1,403 @@
+
+
+ Apache License
+
+ Version 2.0, January 2004
+
+ http://www.apache.org/licenses/
+
+
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction,
+
+ and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+
+ the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all
+
+ other entities that control, are controlled by, or are under common
+
+ control with that entity. For the purposes of this definition,
+
+ "control" means (i) the power, direct or indirect, to cause the
+
+ direction or management of such entity, whether by contract or
+
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+
+ exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications,
+
+ including but not limited to software source code, documentation
+
+ source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical
+
+ transformation or translation of a Source form, including but
+
+ not limited to compiled object code, generated documentation,
+
+ and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or
+
+ Object form, made available under the License, as indicated by a
+
+ copyright notice that is included in or attached to the work
+
+ (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+
+ form, that is based on (or derived from) the Work and for which the
+
+ editorial revisions, annotations, elaborations, or other modifications
+
+ represent, as a whole, an original work of authorship. For the purposes
+
+ of this License, Derivative Works shall not include works that remain
+
+ separable from, or merely link (or bind by name) to the interfaces of,
+
+ the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including
+
+ the original version of the Work and any modifications or additions
+
+ to that Work or Derivative Works thereof, that is intentionally
+
+ submitted to Licensor for inclusion in the Work by the copyright owner
+
+ or by an individual or Legal Entity authorized to submit on behalf of
+
+ the copyright owner. For the purposes of this definition, "submitted"
+
+ means any form of electronic, verbal, or written communication sent
+
+ to the Licensor or its representatives, including but not limited to
+
+ communication on electronic mailing lists, source code control systems,
+
+ and issue tracking systems that are managed by, or on behalf of, the
+
+ Licensor for the purpose of discussing and improving the Work, but
+
+ excluding communication that is conspicuously marked or otherwise
+
+ designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+
+ on behalf of whom a Contribution has been received by Licensor and
+
+ subsequently incorporated within the Work.
+
+
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ copyright license to reproduce, prepare Derivative Works of,
+
+ publicly display, publicly perform, sublicense, and distribute the
+
+ Work and such Derivative Works in Source or Object form.
+
+
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ (except as stated in this section) patent license to make, have made,
+
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+
+ where such license applies only to those patent claims licensable
+
+ by such Contributor that are necessarily infringed by their
+
+ Contribution(s) alone or by combination of their Contribution(s)
+
+ with the Work to which such Contribution(s) was submitted. If You
+
+ institute patent litigation against any entity (including a
+
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+
+ or a Contribution incorporated within the Work constitutes direct
+
+ or contributory patent infringement, then any patent licenses
+
+ granted to You under this License for that Work shall terminate
+
+ as of the date such litigation is filed.
+
+
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+
+ Work or Derivative Works thereof in any medium, with or without
+
+ modifications, and in Source or Object form, provided that You
+
+ meet the following conditions:
+
+
+
+ (a) You must give any other recipients of the Work or
+
+ Derivative Works a copy of this License; and
+
+
+
+ (b) You must cause any modified files to carry prominent notices
+
+ stating that You changed the files; and
+
+
+
+ (c) You must retain, in the Source form of any Derivative Works
+
+ that You distribute, all copyright, patent, trademark, and
+
+ attribution notices from the Source form of the Work,
+
+ excluding those notices that do not pertain to any part of
+
+ the Derivative Works; and
+
+
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+
+ distribution, then any Derivative Works that You distribute must
+
+ include a readable copy of the attribution notices contained
+
+ within such NOTICE file, excluding those notices that do not
+
+ pertain to any part of the Derivative Works, in at least one
+
+ of the following places: within a NOTICE text file distributed
+
+ as part of the Derivative Works; within the Source form or
+
+ documentation, if provided along with the Derivative Works; or,
+
+ within a display generated by the Derivative Works, if and
+
+ wherever such third-party notices normally appear. The contents
+
+ of the NOTICE file are for informational purposes only and
+
+ do not modify the License. You may add Your own attribution
+
+ notices within Derivative Works that You distribute, alongside
+
+ or as an addendum to the NOTICE text from the Work, provided
+
+ that such additional attribution notices cannot be construed
+
+ as modifying the License.
+
+
+
+ You may add Your own copyright statement to Your modifications and
+
+ may provide additional or different license terms and conditions
+
+ for use, reproduction, or distribution of Your modifications, or
+
+ for any such Derivative Works as a whole, provided Your use,
+
+ reproduction, and distribution of the Work otherwise complies with
+
+ the conditions stated in this License.
+
+
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+
+ any Contribution intentionally submitted for inclusion in the Work
+
+ by You to the Licensor shall be under the terms and conditions of
+
+ this License, without any additional terms or conditions.
+
+ Notwithstanding the above, nothing herein shall supersede or modify
+
+ the terms of any separate license agreement you may have executed
+
+ with Licensor regarding such Contributions.
+
+
+
+ 6. Trademarks. This License does not grant permission to use the trade
+
+ names, trademarks, service marks, or product names of the Licensor,
+
+ except as required for reasonable and customary use in describing the
+
+ origin of the Work and reproducing the content of the NOTICE file.
+
+
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+
+ agreed to in writing, Licensor provides the Work (and each
+
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+
+ implied, including, without limitation, any warranties or conditions
+
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+
+ appropriateness of using or redistributing the Work and assume any
+
+ risks associated with Your exercise of permissions under this License.
+
+
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+
+ whether in tort (including negligence), contract, or otherwise,
+
+ unless required by applicable law (such as deliberate and grossly
+
+ negligent acts) or agreed to in writing, shall any Contributor be
+
+ liable to You for damages, including any direct, indirect, special,
+
+ incidental, or consequential damages of any character arising as a
+
+ result of this License or out of the use or inability to use the
+
+ Work (including but not limited to damages for loss of goodwill,
+
+ work stoppage, computer failure or malfunction, or any and all
+
+ other commercial damages or losses), even if such Contributor
+
+ has been advised of the possibility of such damages.
+
+
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+
+ the Work or Derivative Works thereof, You may choose to offer,
+
+ and charge a fee for, acceptance of support, warranty, indemnity,
+
+ or other liability obligations and/or rights consistent with this
+
+ License. However, in accepting such obligations, You may act only
+
+ on Your own behalf and on Your sole responsibility, not on behalf
+
+ of any other Contributor, and only if You agree to indemnify,
+
+ defend, and hold each Contributor harmless for any liability
+
+ incurred by, or claims asserted against, such Contributor by reason
+
+ of your accepting any such warranty or additional liability.
+
+
+
+ END OF TERMS AND CONDITIONS
+
+
+
+ APPENDIX: How to apply the Apache License to your work.
+
+
+
+ To apply the Apache License to your work, attach the following
+
+ boilerplate notice, with the fields enclosed by brackets "[]"
+
+ replaced with your own identifying information. (Don't include
+
+ the brackets!) The text should be enclosed in the appropriate
+
+ comment syntax for the file format. We also recommend that a
+
+ file or class name and description of purpose be included on the
+
+ same "printed page" as the copyright notice for easier
+
+ identification within third-party archives.
+
+
+
+ Copyright [yyyy] [name of copyright owner]
+
+
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+
+ you may not use this file except in compliance with the License.
+
+ You may obtain a copy of the License at
+
+
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+
+
+ Unless required by applicable law or agreed to in writing, software
+
+ distributed under the License is distributed on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+ See the License for the specific language governing permissions and
+
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-configuration-NOTICE.txt b/solr-8.1.1/licenses/commons-configuration-NOTICE.txt
new file mode 100644
index 000000000..131f93da2
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-configuration-NOTICE.txt
@@ -0,0 +1,9 @@
+Apache Commons Configuration
+
+Copyright 2001-2008 The Apache Software Foundation
+
+
+
+This product includes software developed by
+
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-configuration2-2.1.1.jar.sha1 b/solr-8.1.1/licenses/commons-configuration2-2.1.1.jar.sha1
new file mode 100644
index 000000000..7cdc3d237
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-configuration2-2.1.1.jar.sha1
@@ -0,0 +1 @@
+d97d5b3f8b58c52730d47e1a63c8d3258f41ca6c
diff --git a/solr-8.1.1/licenses/commons-configuration2-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-configuration2-LICENSE-ASL.txt
new file mode 100644
index 000000000..3e369e552
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-configuration2-LICENSE-ASL.txt
@@ -0,0 +1,403 @@
+
+
+ Apache License
+
+ Version 2.0, January 2004
+
+ http://www.apache.org/licenses/
+
+
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction,
+
+ and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+
+ the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all
+
+ other entities that control, are controlled by, or are under common
+
+ control with that entity. For the purposes of this definition,
+
+ "control" means (i) the power, direct or indirect, to cause the
+
+ direction or management of such entity, whether by contract or
+
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+
+ exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications,
+
+ including but not limited to software source code, documentation
+
+ source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical
+
+ transformation or translation of a Source form, including but
+
+ not limited to compiled object code, generated documentation,
+
+ and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or
+
+ Object form, made available under the License, as indicated by a
+
+ copyright notice that is included in or attached to the work
+
+ (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+
+ form, that is based on (or derived from) the Work and for which the
+
+ editorial revisions, annotations, elaborations, or other modifications
+
+ represent, as a whole, an original work of authorship. For the purposes
+
+ of this License, Derivative Works shall not include works that remain
+
+ separable from, or merely link (or bind by name) to the interfaces of,
+
+ the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including
+
+ the original version of the Work and any modifications or additions
+
+ to that Work or Derivative Works thereof, that is intentionally
+
+ submitted to Licensor for inclusion in the Work by the copyright owner
+
+ or by an individual or Legal Entity authorized to submit on behalf of
+
+ the copyright owner. For the purposes of this definition, "submitted"
+
+ means any form of electronic, verbal, or written communication sent
+
+ to the Licensor or its representatives, including but not limited to
+
+ communication on electronic mailing lists, source code control systems,
+
+ and issue tracking systems that are managed by, or on behalf of, the
+
+ Licensor for the purpose of discussing and improving the Work, but
+
+ excluding communication that is conspicuously marked or otherwise
+
+ designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+
+ on behalf of whom a Contribution has been received by Licensor and
+
+ subsequently incorporated within the Work.
+
+
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ copyright license to reproduce, prepare Derivative Works of,
+
+ publicly display, publicly perform, sublicense, and distribute the
+
+ Work and such Derivative Works in Source or Object form.
+
+
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+
+ this License, each Contributor hereby grants to You a perpetual,
+
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+
+ (except as stated in this section) patent license to make, have made,
+
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+
+ where such license applies only to those patent claims licensable
+
+ by such Contributor that are necessarily infringed by their
+
+ Contribution(s) alone or by combination of their Contribution(s)
+
+ with the Work to which such Contribution(s) was submitted. If You
+
+ institute patent litigation against any entity (including a
+
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+
+ or a Contribution incorporated within the Work constitutes direct
+
+ or contributory patent infringement, then any patent licenses
+
+ granted to You under this License for that Work shall terminate
+
+ as of the date such litigation is filed.
+
+
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+
+ Work or Derivative Works thereof in any medium, with or without
+
+ modifications, and in Source or Object form, provided that You
+
+ meet the following conditions:
+
+
+
+ (a) You must give any other recipients of the Work or
+
+ Derivative Works a copy of this License; and
+
+
+
+ (b) You must cause any modified files to carry prominent notices
+
+ stating that You changed the files; and
+
+
+
+ (c) You must retain, in the Source form of any Derivative Works
+
+ that You distribute, all copyright, patent, trademark, and
+
+ attribution notices from the Source form of the Work,
+
+ excluding those notices that do not pertain to any part of
+
+ the Derivative Works; and
+
+
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+
+ distribution, then any Derivative Works that You distribute must
+
+ include a readable copy of the attribution notices contained
+
+ within such NOTICE file, excluding those notices that do not
+
+ pertain to any part of the Derivative Works, in at least one
+
+ of the following places: within a NOTICE text file distributed
+
+ as part of the Derivative Works; within the Source form or
+
+ documentation, if provided along with the Derivative Works; or,
+
+ within a display generated by the Derivative Works, if and
+
+ wherever such third-party notices normally appear. The contents
+
+ of the NOTICE file are for informational purposes only and
+
+ do not modify the License. You may add Your own attribution
+
+ notices within Derivative Works that You distribute, alongside
+
+ or as an addendum to the NOTICE text from the Work, provided
+
+ that such additional attribution notices cannot be construed
+
+ as modifying the License.
+
+
+
+ You may add Your own copyright statement to Your modifications and
+
+ may provide additional or different license terms and conditions
+
+ for use, reproduction, or distribution of Your modifications, or
+
+ for any such Derivative Works as a whole, provided Your use,
+
+ reproduction, and distribution of the Work otherwise complies with
+
+ the conditions stated in this License.
+
+
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+
+ any Contribution intentionally submitted for inclusion in the Work
+
+ by You to the Licensor shall be under the terms and conditions of
+
+ this License, without any additional terms or conditions.
+
+ Notwithstanding the above, nothing herein shall supersede or modify
+
+ the terms of any separate license agreement you may have executed
+
+ with Licensor regarding such Contributions.
+
+
+
+ 6. Trademarks. This License does not grant permission to use the trade
+
+ names, trademarks, service marks, or product names of the Licensor,
+
+ except as required for reasonable and customary use in describing the
+
+ origin of the Work and reproducing the content of the NOTICE file.
+
+
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+
+ agreed to in writing, Licensor provides the Work (and each
+
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+
+ implied, including, without limitation, any warranties or conditions
+
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+
+ appropriateness of using or redistributing the Work and assume any
+
+ risks associated with Your exercise of permissions under this License.
+
+
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+
+ whether in tort (including negligence), contract, or otherwise,
+
+ unless required by applicable law (such as deliberate and grossly
+
+ negligent acts) or agreed to in writing, shall any Contributor be
+
+ liable to You for damages, including any direct, indirect, special,
+
+ incidental, or consequential damages of any character arising as a
+
+ result of this License or out of the use or inability to use the
+
+ Work (including but not limited to damages for loss of goodwill,
+
+ work stoppage, computer failure or malfunction, or any and all
+
+ other commercial damages or losses), even if such Contributor
+
+ has been advised of the possibility of such damages.
+
+
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+
+ the Work or Derivative Works thereof, You may choose to offer,
+
+ and charge a fee for, acceptance of support, warranty, indemnity,
+
+ or other liability obligations and/or rights consistent with this
+
+ License. However, in accepting such obligations, You may act only
+
+ on Your own behalf and on Your sole responsibility, not on behalf
+
+ of any other Contributor, and only if You agree to indemnify,
+
+ defend, and hold each Contributor harmless for any liability
+
+ incurred by, or claims asserted against, such Contributor by reason
+
+ of your accepting any such warranty or additional liability.
+
+
+
+ END OF TERMS AND CONDITIONS
+
+
+
+ APPENDIX: How to apply the Apache License to your work.
+
+
+
+ To apply the Apache License to your work, attach the following
+
+ boilerplate notice, with the fields enclosed by brackets "[]"
+
+ replaced with your own identifying information. (Don't include
+
+ the brackets!) The text should be enclosed in the appropriate
+
+ comment syntax for the file format. We also recommend that a
+
+ file or class name and description of purpose be included on the
+
+ same "printed page" as the copyright notice for easier
+
+ identification within third-party archives.
+
+
+
+ Copyright [yyyy] [name of copyright owner]
+
+
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+
+ you may not use this file except in compliance with the License.
+
+ You may obtain a copy of the License at
+
+
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+
+
+ Unless required by applicable law or agreed to in writing, software
+
+ distributed under the License is distributed on an "AS IS" BASIS,
+
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+ See the License for the specific language governing permissions and
+
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-configuration2-NOTICE.txt b/solr-8.1.1/licenses/commons-configuration2-NOTICE.txt
new file mode 100644
index 000000000..51e428563
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-configuration2-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Configuration
+Copyright 2001-2018 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-digester-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-digester-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-digester-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-digester-NOTICE.txt b/solr-8.1.1/licenses/commons-digester-NOTICE.txt
new file mode 100644
index 000000000..abf5dbe66
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-digester-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Digester
+Copyright 2001-2008 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-exec-1.3.jar.sha1 b/solr-8.1.1/licenses/commons-exec-1.3.jar.sha1
new file mode 100644
index 000000000..fca1c0110
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-exec-1.3.jar.sha1
@@ -0,0 +1 @@
+8dfb9facd0830a27b1b5f29f84593f0aeee7773b
diff --git a/solr-8.1.1/licenses/commons-exec-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-exec-LICENSE-ASL.txt
new file mode 100644
index 000000000..f820d4bd3
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-exec-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+/*
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright [yyyy] [name of copyright owner]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/solr-8.1.1/licenses/commons-exec-NOTICE.txt b/solr-8.1.1/licenses/commons-exec-NOTICE.txt
new file mode 100644
index 000000000..c4add835a
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-exec-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Exec
+Copyright 2005-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-fileupload-1.3.3.jar.sha1 b/solr-8.1.1/licenses/commons-fileupload-1.3.3.jar.sha1
new file mode 100644
index 000000000..d27deb410
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-fileupload-1.3.3.jar.sha1
@@ -0,0 +1 @@
+04ff14d809195b711fd6bcc87e6777f886730ca1
diff --git a/solr-8.1.1/licenses/commons-fileupload-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-fileupload-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-fileupload-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-fileupload-NOTICE.txt b/solr-8.1.1/licenses/commons-fileupload-NOTICE.txt
new file mode 100644
index 000000000..bec42c04a
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-fileupload-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons FileUpload
+Copyright 2002-2008 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-io-2.5.jar.sha1 b/solr-8.1.1/licenses/commons-io-2.5.jar.sha1
new file mode 100644
index 000000000..4c14fb660
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-io-2.5.jar.sha1
@@ -0,0 +1 @@
+2852e6e05fbb95076fc091f6d1780f1f8fe35e0f
diff --git a/solr-8.1.1/licenses/commons-io-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-io-LICENSE-ASL.txt
new file mode 100644
index 000000000..6b0b1270f
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-io-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/commons-io-NOTICE.txt b/solr-8.1.1/licenses/commons-io-NOTICE.txt
new file mode 100644
index 000000000..f9e09a55b
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-io-NOTICE.txt
@@ -0,0 +1,6 @@
+Apache Commons IO
+Copyright 2001-2008 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/solr-8.1.1/licenses/commons-lang3-3.8.1.jar.sha1 b/solr-8.1.1/licenses/commons-lang3-3.8.1.jar.sha1
new file mode 100644
index 000000000..bbed0fbde
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-lang3-3.8.1.jar.sha1
@@ -0,0 +1 @@
+6505a72a097d9270f7a9e7bf42c4238283247755
diff --git a/solr-8.1.1/licenses/commons-lang3-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-lang3-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-lang3-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-lang3-NOTICE.txt b/solr-8.1.1/licenses/commons-lang3-NOTICE.txt
new file mode 100644
index 000000000..6a77d8601
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-lang3-NOTICE.txt
@@ -0,0 +1,8 @@
+Apache Commons Lang
+Copyright 2001-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software from the Spring Framework,
+under the Apache License 2.0 (see: StringUtils.containsWhitespace())
diff --git a/solr-8.1.1/licenses/commons-logging-1.1.3.jar.sha1 b/solr-8.1.1/licenses/commons-logging-1.1.3.jar.sha1
new file mode 100644
index 000000000..c8756c438
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-logging-1.1.3.jar.sha1
@@ -0,0 +1 @@
+f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f
diff --git a/solr-8.1.1/licenses/commons-logging-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-logging-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-logging-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-logging-NOTICE.txt b/solr-8.1.1/licenses/commons-logging-NOTICE.txt
new file mode 100644
index 000000000..1a4521835
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-logging-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Logging
+Copyright 2003-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/commons-math3-3.6.1.jar.sha1 b/solr-8.1.1/licenses/commons-math3-3.6.1.jar.sha1
new file mode 100644
index 000000000..ed9a54975
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-math3-3.6.1.jar.sha1
@@ -0,0 +1 @@
+e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf
diff --git a/solr-8.1.1/licenses/commons-math3-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-math3-LICENSE-ASL.txt
new file mode 100644
index 000000000..d97b49ab0
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-math3-LICENSE-ASL.txt
@@ -0,0 +1,457 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+Apache Commons Math includes the following code provided to the ASF under the
+Apache License 2.0:
+
+ - The inverse error function implementation in the Erf class is based on CUDA
+ code developed by Mike Giles, Oxford-Man Institute of Quantitative Finance,
+ and published in GPU Computing Gems, volume 2, 2010 (grant received on
+ March 23th 2013)
+ - The LinearConstraint, LinearObjectiveFunction, LinearOptimizer,
+ RelationShip, SimplexSolver and SimplexTableau classes in package
+ org.apache.commons.math3.optimization.linear include software developed by
+ Benjamin McCann (http://www.benmccann.com) and distributed with
+ the following copyright: Copyright 2009 Google Inc. (grant received on
+ March 16th 2009)
+ - The class "org.apache.commons.math3.exception.util.LocalizedFormatsTest" which
+ is an adapted version of "OrekitMessagesTest" test class for the Orekit library
+ - The "org.apache.commons.math3.analysis.interpolation.HermiteInterpolator"
+ has been imported from the Orekit space flight dynamics library.
+
+===============================================================================
+
+
+
+APACHE COMMONS MATH DERIVATIVE WORKS:
+
+The Apache commons-math library includes a number of subcomponents
+whose implementation is derived from original sources written
+in C or Fortran. License terms of the original sources
+are reproduced below.
+
+===============================================================================
+For the lmder, lmpar and qrsolv Fortran routine from minpack and translated in
+the LevenbergMarquardtOptimizer class in package
+org.apache.commons.math3.optimization.general
+Original source copyright and license statement:
+
+Minpack Copyright Notice (1999) University of Chicago. 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. The end-user documentation included with the
+redistribution, if any, must include the following
+acknowledgment:
+
+ "This product includes software developed by the
+ University of Chicago, as Operator of Argonne National
+ Laboratory.
+
+Alternately, this acknowledgment may appear in the software
+itself, if and wherever such third-party acknowledgments
+normally appear.
+
+4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
+WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
+UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
+OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
+OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
+USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
+THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
+DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
+BE CORRECTED.
+
+5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
+HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
+INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
+ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
+PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
+SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
+(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
+EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
+POSSIBILITY OF SUCH LOSS OR DAMAGES.
+===============================================================================
+
+Copyright and license statement for the odex Fortran routine developed by
+E. Hairer and G. Wanner and translated in GraggBulirschStoerIntegrator class
+in package org.apache.commons.math3.ode.nonstiff:
+
+
+Copyright (c) 2004, Ernst Hairer
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- 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.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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.
+===============================================================================
+
+Copyright and license statement for the original Mersenne twister C
+routines translated in MersenneTwister class in package
+org.apache.commons.math3.random:
+
+ Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+ 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. The names of its contributors may not 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 OWNER 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.
+
+===============================================================================
+
+The initial code for shuffling an array (originally in class
+"org.apache.commons.math3.random.RandomDataGenerator", now replaced by
+a method in class "org.apache.commons.math3.util.MathArrays") was
+inspired from the algorithm description provided in
+"Algorithms", by Ian Craw and John Pulham (University of Aberdeen 1999).
+The textbook (containing a proof that the shuffle is uniformly random) is
+available here:
+ http://citeseerx.ist.psu.edu/viewdoc/download;?doi=10.1.1.173.1898&rep=rep1&type=pdf
+
+===============================================================================
+License statement for the direction numbers in the resource files for Sobol sequences.
+
+-----------------------------------------------------------------------------
+Licence pertaining to sobol.cc and the accompanying sets of direction numbers
+
+-----------------------------------------------------------------------------
+Copyright (c) 2008, Frances Y. Kuo and Stephen Joe
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the names of the copyright holders nor the names of the
+ University of New South Wales and the University of Waikato
+ and 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 ``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 HOLDERS 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.
+===============================================================================
+
+The initial commit of package "org.apache.commons.math3.ml.neuralnet" is
+an adapted version of code developed in the context of the Data Processing
+and Analysis Consortium (DPAC) of the "Gaia" project of the European Space
+Agency (ESA).
+===============================================================================
+
+The initial commit of the class "org.apache.commons.math3.special.BesselJ" is
+an adapted version of code translated from the netlib Fortran program, rjbesl
+http://www.netlib.org/specfun/rjbesl by R.J. Cody at Argonne National
+Laboratory (USA). There is no license or copyright statement included with the
+original Fortran sources.
+===============================================================================
+
+
+The BracketFinder (package org.apache.commons.math3.optimization.univariate)
+and PowellOptimizer (package org.apache.commons.math3.optimization.general)
+classes are based on the Python code in module "optimize.py" (version 0.5)
+developed by Travis E. Oliphant for the SciPy library (http://www.scipy.org/)
+Copyright © 2003-2009 SciPy Developers.
+
+SciPy license
+Copyright © 2001, 2002 Enthought, Inc.
+All rights reserved.
+
+Copyright © 2003-2013 SciPy Developers.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the name of Enthought nor the names of the SciPy Developers may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS†AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+===============================================================================
+
diff --git a/solr-8.1.1/licenses/commons-math3-NOTICE.txt b/solr-8.1.1/licenses/commons-math3-NOTICE.txt
new file mode 100644
index 000000000..ce791e4f3
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-math3-NOTICE.txt
@@ -0,0 +1,9 @@
+Apache Commons Math
+Copyright 2001-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software developed for Orekit by
+CS Systèmes d'Information (http://www.c-s.fr/)
+Copyright 2010-2012 CS Systèmes d'Information
diff --git a/solr-8.1.1/licenses/commons-text-1.6.jar.sha1 b/solr-8.1.1/licenses/commons-text-1.6.jar.sha1
new file mode 100644
index 000000000..84b2ef1f1
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-text-1.6.jar.sha1
@@ -0,0 +1 @@
+ba72cf0c40cf701e972fe7720ae844629f4ecca2
diff --git a/solr-8.1.1/licenses/commons-text-LICENSE-ASL.txt b/solr-8.1.1/licenses/commons-text-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-text-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/commons-text-NOTICE.txt b/solr-8.1.1/licenses/commons-text-NOTICE.txt
new file mode 100644
index 000000000..1508878ea
--- /dev/null
+++ b/solr-8.1.1/licenses/commons-text-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Commons Text
+Copyright 2014-2018 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/curator-client-2.13.0.jar.sha1 b/solr-8.1.1/licenses/curator-client-2.13.0.jar.sha1
new file mode 100644
index 000000000..f44216a57
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-client-2.13.0.jar.sha1
@@ -0,0 +1 @@
+a1974d9b3251c055408059b2f408d19d7db07224
diff --git a/solr-8.1.1/licenses/curator-client-LICENSE-ASL.txt b/solr-8.1.1/licenses/curator-client-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-client-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/curator-client-NOTICE.txt b/solr-8.1.1/licenses/curator-client-NOTICE.txt
new file mode 100644
index 000000000..e1f07d16e
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-client-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Curator
+Copyright 2013-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/curator-framework-2.13.0.jar.sha1 b/solr-8.1.1/licenses/curator-framework-2.13.0.jar.sha1
new file mode 100644
index 000000000..930e5462d
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-framework-2.13.0.jar.sha1
@@ -0,0 +1 @@
+d45229aee7d3f1f628a34fcac9b66ed5ba52c31f
diff --git a/solr-8.1.1/licenses/curator-framework-LICENSE-ASL.txt b/solr-8.1.1/licenses/curator-framework-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-framework-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/curator-framework-NOTICE.txt b/solr-8.1.1/licenses/curator-framework-NOTICE.txt
new file mode 100644
index 000000000..e1f07d16e
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-framework-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Curator
+Copyright 2013-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/curator-recipes-2.13.0.jar.sha1 b/solr-8.1.1/licenses/curator-recipes-2.13.0.jar.sha1
new file mode 100644
index 000000000..19c936df2
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-recipes-2.13.0.jar.sha1
@@ -0,0 +1 @@
+1e6d5cf7b18a402f5d52785877010711538d68a0
diff --git a/solr-8.1.1/licenses/curator-recipes-LICENSE-ASL.txt b/solr-8.1.1/licenses/curator-recipes-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-recipes-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/curator-recipes-NOTICE.txt b/solr-8.1.1/licenses/curator-recipes-NOTICE.txt
new file mode 100644
index 000000000..e1f07d16e
--- /dev/null
+++ b/solr-8.1.1/licenses/curator-recipes-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Curator
+Copyright 2013-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/curvesapi-1.04.jar.sha1 b/solr-8.1.1/licenses/curvesapi-1.04.jar.sha1
new file mode 100644
index 000000000..51c262628
--- /dev/null
+++ b/solr-8.1.1/licenses/curvesapi-1.04.jar.sha1
@@ -0,0 +1 @@
+3386abf821719bc89c7685f9eaafaf4a842f0199
diff --git a/solr-8.1.1/licenses/curvesapi-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/curvesapi-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..e30f01523
--- /dev/null
+++ b/solr-8.1.1/licenses/curvesapi-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,28 @@
+Copyright (c) 2005, Graph Builder
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+-Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+-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.
+
+-Neither the name of Graph Builder 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 OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/curvesapi-NOTICE.txt b/solr-8.1.1/licenses/curvesapi-NOTICE.txt
new file mode 100644
index 000000000..326e674a4
--- /dev/null
+++ b/solr-8.1.1/licenses/curvesapi-NOTICE.txt
@@ -0,0 +1,2 @@
+Copyright (c) 2005, Graph Builder
+All rights reserved.
diff --git a/solr-8.1.1/licenses/dec-0.1.2.jar.sha1 b/solr-8.1.1/licenses/dec-0.1.2.jar.sha1
new file mode 100644
index 000000000..e52fb645e
--- /dev/null
+++ b/solr-8.1.1/licenses/dec-0.1.2.jar.sha1
@@ -0,0 +1 @@
+0c26a897ae0d524809eef1c786cc6183b4ddcc3b
diff --git a/solr-8.1.1/licenses/dec-LICENSE-MIT.txt b/solr-8.1.1/licenses/dec-LICENSE-MIT.txt
new file mode 100644
index 000000000..33b7cdd2d
--- /dev/null
+++ b/solr-8.1.1/licenses/dec-LICENSE-MIT.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+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.
diff --git a/solr-8.1.1/licenses/dec-NOTICE.txt b/solr-8.1.1/licenses/dec-NOTICE.txt
new file mode 100644
index 000000000..33b7cdd2d
--- /dev/null
+++ b/solr-8.1.1/licenses/dec-NOTICE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+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.
diff --git a/solr-8.1.1/licenses/derby-10.9.1.0.jar.sha1 b/solr-8.1.1/licenses/derby-10.9.1.0.jar.sha1
new file mode 100644
index 000000000..2a69e42af
--- /dev/null
+++ b/solr-8.1.1/licenses/derby-10.9.1.0.jar.sha1
@@ -0,0 +1 @@
+4538cf5564ab3c262eec65c55fdb13965625589c
diff --git a/solr-8.1.1/licenses/derby-LICENSE-ASL.txt b/solr-8.1.1/licenses/derby-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/derby-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/derby-NOTICE.txt b/solr-8.1.1/licenses/derby-NOTICE.txt
new file mode 100644
index 000000000..f22595feb
--- /dev/null
+++ b/solr-8.1.1/licenses/derby-NOTICE.txt
@@ -0,0 +1,182 @@
+=========================================================================
+== NOTICE file corresponding to section 4(d) of the Apache License,
+== Version 2.0, in this case for the Apache Derby distribution.
+==
+== DO NOT EDIT THIS FILE DIRECTLY. IT IS GENERATED
+== BY THE buildnotice TARGET IN THE TOP LEVEL build.xml FILE.
+==
+=========================================================================
+
+Apache Derby
+Copyright 2004-2012 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+
+=========================================================================
+
+Portions of Derby were originally developed by
+International Business Machines Corporation and are
+licensed to the Apache Software Foundation under the
+"Software Grant and Corporate Contribution License Agreement",
+informally known as the "Derby CLA".
+The following copyright notice(s) were affixed to portions of the code
+with which this file is now or was at one time distributed
+and are placed here unaltered.
+
+(C) Copyright 1997,2004 International Business Machines Corporation. All rights reserved.
+
+(C) Copyright IBM Corp. 2003.
+
+
+=========================================================================
+
+
+The portion of the functionTests under 'nist' was originally
+developed by the National Institute of Standards and Technology (NIST),
+an agency of the United States Department of Commerce, and adapted by
+International Business Machines Corporation in accordance with the NIST
+Software Acknowledgment and Redistribution document at
+http://www.itl.nist.gov/div897/ctg/sql_form.htm
+
+
+
+=========================================================================
+
+
+The JDBC apis for small devices and JDBC3 (under java/stubs/jsr169 and
+java/stubs/jdbc3) were produced by trimming sources supplied by the
+Apache Harmony project. In addition, the Harmony SerialBlob and
+SerialClob implementations are used. The following notice covers the Harmony sources:
+
+Portions of Harmony were originally developed by
+Intel Corporation and are licensed to the Apache Software
+Foundation under the "Software Grant and Corporate Contribution
+License Agreement", informally known as the "Intel Harmony CLA".
+
+
+=========================================================================
+
+
+The Derby build relies on source files supplied by the Apache Felix
+project. The following notice covers the Felix files:
+
+ Apache Felix Main
+ Copyright 2008 The Apache Software Foundation
+
+
+ I. Included Software
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+ Licensed under the Apache License 2.0.
+
+ This product includes software developed at
+ The OSGi Alliance (http://www.osgi.org/).
+ Copyright (c) OSGi Alliance (2000, 2007).
+ Licensed under the Apache License 2.0.
+
+ This product includes software from http://kxml.sourceforge.net.
+ Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany.
+ Licensed under BSD License.
+
+ II. Used Software
+
+ This product uses software developed at
+ The OSGi Alliance (http://www.osgi.org/).
+ Copyright (c) OSGi Alliance (2000, 2007).
+ Licensed under the Apache License 2.0.
+
+
+ III. License Summary
+ - Apache License 2.0
+ - BSD License
+
+
+=========================================================================
+
+
+The Derby build relies on jar files supplied by the Apache Xalan
+project. The following notice covers the Xalan jar files:
+
+ =========================================================================
+ == NOTICE file corresponding to section 4(d) of the Apache License, ==
+ == Version 2.0, in this case for the Apache Xalan Java distribution. ==
+ =========================================================================
+
+ Apache Xalan (Xalan XSLT processor)
+ Copyright 1999-2006 The Apache Software Foundation
+
+ Apache Xalan (Xalan serializer)
+ Copyright 1999-2006 The Apache Software Foundation
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ =========================================================================
+ Portions of this software was originally based on the following:
+ - software copyright (c) 1999-2002, Lotus Development Corporation.,
+ http://www.lotus.com.
+ - software copyright (c) 2001-2002, Sun Microsystems.,
+ http://www.sun.com.
+ - software copyright (c) 2003, IBM Corporation.,
+ http://www.ibm.com.
+
+ =========================================================================
+ The binary distribution package (ie. jars, samples and documentation) of
+ this product includes software developed by the following:
+
+ - The Apache Software Foundation
+ - Xerces Java - see LICENSE.txt
+ - JAXP 1.3 APIs - see LICENSE.txt
+ - Bytecode Engineering Library - see LICENSE.txt
+ - Regular Expression - see LICENSE.txt
+
+ - Scott Hudson, Frank Flannery, C. Scott Ananian
+ - CUP Parser Generator runtime (javacup\runtime) - see LICENSE.txt
+
+ =========================================================================
+ The source distribution package (ie. all source and tools required to build
+ Xalan Java) of this product includes software developed by the following:
+
+ - The Apache Software Foundation
+ - Xerces Java - see LICENSE.txt
+ - JAXP 1.3 APIs - see LICENSE.txt
+ - Bytecode Engineering Library - see LICENSE.txt
+ - Regular Expression - see LICENSE.txt
+ - Ant - see LICENSE.txt
+ - Stylebook doc tool - see LICENSE.txt
+
+ - Elliot Joel Berk and C. Scott Ananian
+ - Lexical Analyzer Generator (JLex) - see LICENSE.txt
+
+ =========================================================================
+ Apache Xerces Java
+ Copyright 1999-2006 The Apache Software Foundation
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of Apache Xerces Java in xercesImpl.jar and xml-apis.jar
+ were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+ - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+ - voluntary contributions made by Paul Eng on behalf of the
+ Apache Software Foundation that were originally developed at iClick, Inc.,
+ software copyright (c) 1999.
+
+ =========================================================================
+ Apache xml-commons xml-apis (redistribution of xml-apis.jar)
+
+ Apache XML Commons
+ Copyright 2001-2003,2006 The Apache Software Foundation.
+
+ This product includes software developed at
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+ - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+ - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+
diff --git a/solr-8.1.1/licenses/disruptor-3.4.2.jar.sha1 b/solr-8.1.1/licenses/disruptor-3.4.2.jar.sha1
new file mode 100644
index 000000000..c21133646
--- /dev/null
+++ b/solr-8.1.1/licenses/disruptor-3.4.2.jar.sha1
@@ -0,0 +1 @@
+e2543a63086b4189fbe418d05d56633bc1a815f7
diff --git a/solr-8.1.1/licenses/disruptor-LICENSE-ASL.txt b/solr-8.1.1/licenses/disruptor-LICENSE-ASL.txt
new file mode 100644
index 000000000..8d968b6cb
--- /dev/null
+++ b/solr-8.1.1/licenses/disruptor-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/disruptor-NOTICE.txt b/solr-8.1.1/licenses/disruptor-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/disruptor-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/eigenbase-properties-1.1.5.jar.sha1 b/solr-8.1.1/licenses/eigenbase-properties-1.1.5.jar.sha1
new file mode 100644
index 000000000..2617c4deb
--- /dev/null
+++ b/solr-8.1.1/licenses/eigenbase-properties-1.1.5.jar.sha1
@@ -0,0 +1 @@
+a941956b3a4664d0cf728ece06ba25cc2110a3aa
diff --git a/solr-8.1.1/licenses/eigenbase-properties-LICENSE-ASL.txt b/solr-8.1.1/licenses/eigenbase-properties-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/eigenbase-properties-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/eigenbase-properties-NOTICE.txt b/solr-8.1.1/licenses/eigenbase-properties-NOTICE.txt
new file mode 100644
index 000000000..95ee3fd75
--- /dev/null
+++ b/solr-8.1.1/licenses/eigenbase-properties-NOTICE.txt
@@ -0,0 +1,20 @@
+eigenbase-properties
+Copyright (C) 2012-2015, Julian Hyde
+
+This product includes software from the Eigenbase project, licensed from
+DynamoBI Corporation.
+
+Copyright (C) 2005 Dynamo BI Corporation
+
+===============================================================================
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/solr-8.1.1/licenses/fontbox-2.0.12.jar.sha1 b/solr-8.1.1/licenses/fontbox-2.0.12.jar.sha1
new file mode 100644
index 000000000..8ded8ca0a
--- /dev/null
+++ b/solr-8.1.1/licenses/fontbox-2.0.12.jar.sha1
@@ -0,0 +1 @@
+566fd1d6b25012bb82078da08b82e6d0ba8c884a
diff --git a/solr-8.1.1/licenses/fontbox-LICENSE-ASL.txt b/solr-8.1.1/licenses/fontbox-LICENSE-ASL.txt
new file mode 100644
index 000000000..3761b7ec0
--- /dev/null
+++ b/solr-8.1.1/licenses/fontbox-LICENSE-ASL.txt
@@ -0,0 +1,234 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+CONTRIBUTIONS TO THE ORIGINAL CODEBASE
+
+Apache FontBox is based on contributions made to the original FontBox project:
+
+ Copyright (c) 2006-2007, www.fontbox.org
+ 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 fontbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/fontbox-NOTICE.txt b/solr-8.1.1/licenses/fontbox-NOTICE.txt
new file mode 100644
index 000000000..a2e87e5ff
--- /dev/null
+++ b/solr-8.1.1/licenses/fontbox-NOTICE.txt
@@ -0,0 +1,10 @@
+
+Apache FontBox
+Copyright 2008-2012 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+
+Based on source code contributed to the original FontBox project.
+Copyright (c) 2006-2007, www.fontbox.org
diff --git a/solr-8.1.1/licenses/gimap-1.5.1.jar.sha1 b/solr-8.1.1/licenses/gimap-1.5.1.jar.sha1
new file mode 100644
index 000000000..41c9dbff5
--- /dev/null
+++ b/solr-8.1.1/licenses/gimap-1.5.1.jar.sha1
@@ -0,0 +1 @@
+3a4ccd3aa6ce33ec701893c3ee632eeb0e012c89
diff --git a/solr-8.1.1/licenses/gimap-LICENSE-CDDL.txt b/solr-8.1.1/licenses/gimap-LICENSE-CDDL.txt
new file mode 100644
index 000000000..a147fe44b
--- /dev/null
+++ b/solr-8.1.1/licenses/gimap-LICENSE-CDDL.txt
@@ -0,0 +1,135 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1
+
+1. Definitions.
+
+1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. "Executable" means the Covered Software in any form other than Source Code.
+
+1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
+
+1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. "License" means this document.
+
+1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. "Modifications" means the Source Code and Executable form of any of the following:
+
+ A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
diff --git a/solr-8.1.1/licenses/guava-25.1-jre.jar.sha1 b/solr-8.1.1/licenses/guava-25.1-jre.jar.sha1
new file mode 100644
index 000000000..8ee9ae964
--- /dev/null
+++ b/solr-8.1.1/licenses/guava-25.1-jre.jar.sha1
@@ -0,0 +1 @@
+6c57e4b22b44e89e548b5c9f70f0c45fe10fb0b4
diff --git a/solr-8.1.1/licenses/guava-LICENSE-ASL.txt b/solr-8.1.1/licenses/guava-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/guava-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/guava-NOTICE.txt b/solr-8.1.1/licenses/guava-NOTICE.txt
new file mode 100644
index 000000000..708a8cddb
--- /dev/null
+++ b/solr-8.1.1/licenses/guava-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+Google, Inc. (http://code.google.com/p/guava-libraries/)
diff --git a/solr-8.1.1/licenses/hadoop-annotations-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-annotations-3.2.0.jar.sha1
new file mode 100644
index 000000000..c1ae3ba96
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-annotations-3.2.0.jar.sha1
@@ -0,0 +1 @@
+275df2b5942c554ae3f3adf8483e81f5aec5ebc7
diff --git a/solr-8.1.1/licenses/hadoop-annotations-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-annotations-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-annotations-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-annotations-NOTICE.txt b/solr-8.1.1/licenses/hadoop-annotations-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-annotations-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-auth-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-auth-3.2.0.jar.sha1
new file mode 100644
index 000000000..b737a8d2e
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-auth-3.2.0.jar.sha1
@@ -0,0 +1 @@
+b1b95aed9aa956ffb7d21e30a0415ca14d91c4ad
diff --git a/solr-8.1.1/licenses/hadoop-auth-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-auth-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-auth-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-auth-NOTICE.txt b/solr-8.1.1/licenses/hadoop-auth-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-auth-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-common-3.2.0-tests.jar.sha1 b/solr-8.1.1/licenses/hadoop-common-3.2.0-tests.jar.sha1
new file mode 100644
index 000000000..ec7e6b608
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-3.2.0-tests.jar.sha1
@@ -0,0 +1 @@
+f75a9b8c7868056325c1eba7be17e42628bc4a6f
diff --git a/solr-8.1.1/licenses/hadoop-common-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-common-3.2.0.jar.sha1
new file mode 100644
index 000000000..fdc40c0ac
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-3.2.0.jar.sha1
@@ -0,0 +1 @@
+e47a88c42c450e6e4b23bf951356c203cae2db24
diff --git a/solr-8.1.1/licenses/hadoop-common-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-common-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-common-NOTICE.txt b/solr-8.1.1/licenses/hadoop-common-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-common-tests-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-common-tests-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-tests-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-common-tests-NOTICE.txt b/solr-8.1.1/licenses/hadoop-common-tests-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-common-tests-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-3.2.0-tests.jar.sha1 b/solr-8.1.1/licenses/hadoop-hdfs-3.2.0-tests.jar.sha1
new file mode 100644
index 000000000..c64eba7ea
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-3.2.0-tests.jar.sha1
@@ -0,0 +1 @@
+2243629339302f74412f4bcb3777d0b248e86387
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-hdfs-3.2.0.jar.sha1
new file mode 100644
index 000000000..133598305
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-3.2.0.jar.sha1
@@ -0,0 +1 @@
+a79e17c4d454cfb51b8d3307570ed84b1f7cc8f1
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-hdfs-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-NOTICE.txt b/solr-8.1.1/licenses/hadoop-hdfs-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-client-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-hdfs-client-3.2.0.jar.sha1
new file mode 100644
index 000000000..0f7ad25b5
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-client-3.2.0.jar.sha1
@@ -0,0 +1 @@
+c56a99b3043755b5506cfd85f11d53bd61652f3d
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-client-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-hdfs-client-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-client-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-client-NOTICE.txt b/solr-8.1.1/licenses/hadoop-hdfs-client-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-client-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-tests-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-hdfs-tests-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-tests-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-hdfs-tests-NOTICE.txt b/solr-8.1.1/licenses/hadoop-hdfs-tests-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-hdfs-tests-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-minicluster-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-minicluster-3.2.0.jar.sha1
new file mode 100644
index 000000000..5bbb11dfc
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minicluster-3.2.0.jar.sha1
@@ -0,0 +1 @@
+4d36c70e6bb489e7548bf5aede1ae4fd8cb1db2e
diff --git a/solr-8.1.1/licenses/hadoop-minicluster-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-minicluster-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minicluster-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-minicluster-NOTICE.txt b/solr-8.1.1/licenses/hadoop-minicluster-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minicluster-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hadoop-minikdc-3.2.0.jar.sha1 b/solr-8.1.1/licenses/hadoop-minikdc-3.2.0.jar.sha1
new file mode 100644
index 000000000..d6b740578
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minikdc-3.2.0.jar.sha1
@@ -0,0 +1 @@
+f23cc3049750388d6f800f5aff276cc1aaed77b3
diff --git a/solr-8.1.1/licenses/hadoop-minikdc-LICENSE-ASL.txt b/solr-8.1.1/licenses/hadoop-minikdc-LICENSE-ASL.txt
new file mode 100644
index 000000000..59bcdbc97
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minikdc-LICENSE-ASL.txt
@@ -0,0 +1,244 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE HADOOP SUBCOMPONENTS:
+
+The Apache Hadoop project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+For the org.apache.hadoop.util.bloom.* classes:
+
+/**
+ *
+ * Copyright (c) 2005, European Commission project OneLab under contract
+ * 034819 (http://www.one-lab.org)
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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.
+ * - Neither the name of the University Catholique de Louvain - UCL
+ * 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/solr-8.1.1/licenses/hadoop-minikdc-NOTICE.txt b/solr-8.1.1/licenses/hadoop-minikdc-NOTICE.txt
new file mode 100644
index 000000000..62fc5816c
--- /dev/null
+++ b/solr-8.1.1/licenses/hadoop-minikdc-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/hamcrest-core-1.3.jar.sha1 b/solr-8.1.1/licenses/hamcrest-core-1.3.jar.sha1
new file mode 100644
index 000000000..67add77ad
--- /dev/null
+++ b/solr-8.1.1/licenses/hamcrest-core-1.3.jar.sha1
@@ -0,0 +1 @@
+42a25dc3219429f0e5d060061f71acb49bf010a0
diff --git a/solr-8.1.1/licenses/hamcrest-core-LICENSE-BSD.txt b/solr-8.1.1/licenses/hamcrest-core-LICENSE-BSD.txt
new file mode 100644
index 000000000..dcdcc4234
--- /dev/null
+++ b/solr-8.1.1/licenses/hamcrest-core-LICENSE-BSD.txt
@@ -0,0 +1,27 @@
+BSD License
+
+Copyright (c) 2000-2006, www.hamcrest.org
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of
+conditions and the following disclaimer. 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.
+
+Neither the name of Hamcrest 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/solr-8.1.1/licenses/hamcrest-core-NOTICE.txt b/solr-8.1.1/licenses/hamcrest-core-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/hamcrest-core-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/hppc-0.8.1.jar.sha1 b/solr-8.1.1/licenses/hppc-0.8.1.jar.sha1
new file mode 100644
index 000000000..7006e68f4
--- /dev/null
+++ b/solr-8.1.1/licenses/hppc-0.8.1.jar.sha1
@@ -0,0 +1 @@
+ffc7ba8f289428b9508ab484b8001dea944ae603
diff --git a/solr-8.1.1/licenses/hppc-LICENSE-ASL.txt b/solr-8.1.1/licenses/hppc-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/hppc-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/hppc-NOTICE.txt b/solr-8.1.1/licenses/hppc-NOTICE.txt
new file mode 100644
index 000000000..10c50fea4
--- /dev/null
+++ b/solr-8.1.1/licenses/hppc-NOTICE.txt
@@ -0,0 +1,5 @@
+
+HPPC library integrates the following classes from other open-source projects:
+
+- fast BitSets from Apache Lucene (Apache license; same as HPPC).
+
diff --git a/solr-8.1.1/licenses/hsqldb-2.4.0.jar.sha1 b/solr-8.1.1/licenses/hsqldb-2.4.0.jar.sha1
new file mode 100644
index 000000000..efc200dff
--- /dev/null
+++ b/solr-8.1.1/licenses/hsqldb-2.4.0.jar.sha1
@@ -0,0 +1 @@
+195957160ed990dbc798207c0d577280d9919208
diff --git a/solr-8.1.1/licenses/hsqldb-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/hsqldb-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..b8ac4f54d
--- /dev/null
+++ b/solr-8.1.1/licenses/hsqldb-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,30 @@
+/* Copyright (c) 2001-2017, The HSQL Development Group
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 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.
+ *
+ * Neither the name of the HSQL Development Group 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 HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
diff --git a/solr-8.1.1/licenses/hsqldb-NOTICE.txt b/solr-8.1.1/licenses/hsqldb-NOTICE.txt
new file mode 100644
index 000000000..829f8a24e
--- /dev/null
+++ b/solr-8.1.1/licenses/hsqldb-NOTICE.txt
@@ -0,0 +1,69 @@
+/*
+ * For work developed by the HSQL Development Group:
+ *
+ * Copyright (c) 2001-2017, The HSQL Development Group
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 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.
+ *
+ * Neither the name of the HSQL Development Group 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 HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
+ * 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.
+ *
+ *
+ *
+ * For work originally developed by the Hypersonic SQL Group:
+ *
+ * Copyright (c) 1995-2000, The Hypersonic SQL Group.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 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.
+ *
+ * Neither the name of the Hypersonic SQL Group 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 HYPERSONIC SQL GROUP,
+ * 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.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Hypersonic SQL Group.
+ */
+
diff --git a/solr-8.1.1/licenses/htrace-core4-4.1.0-incubating.jar.sha1 b/solr-8.1.1/licenses/htrace-core4-4.1.0-incubating.jar.sha1
new file mode 100644
index 000000000..7162ab7cf
--- /dev/null
+++ b/solr-8.1.1/licenses/htrace-core4-4.1.0-incubating.jar.sha1
@@ -0,0 +1 @@
+12b3e2adda95e8c41d9d45d33db075137871d2e2
diff --git a/solr-8.1.1/licenses/htrace-core4-LICENSE-ASL.txt b/solr-8.1.1/licenses/htrace-core4-LICENSE-ASL.txt
new file mode 100644
index 000000000..2c41ec88f
--- /dev/null
+++ b/solr-8.1.1/licenses/htrace-core4-LICENSE-ASL.txt
@@ -0,0 +1,182 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls.
+See http://www.jcip.net and the Creative Commons Attribution License
+(http://creativecommons.org/licenses/by/2.5)
+
diff --git a/solr-8.1.1/licenses/htrace-core4-NOTICE.txt b/solr-8.1.1/licenses/htrace-core4-NOTICE.txt
new file mode 100644
index 000000000..19f97eb35
--- /dev/null
+++ b/solr-8.1.1/licenses/htrace-core4-NOTICE.txt
@@ -0,0 +1,18 @@
+This product includes software developed by The Apache Software
+Foundation (http://www.apache.org/).
+
+In addition, this product includes software developed by:
+
+JUnit (http://www.junit.org/) included under the Common Public License v1.0. See
+the full text here: http://junit.sourceforge.net/cpl-v10.html
+
+levigo, a go wrapper for leveldb, is copyright Jeffrey M Hodges and
+is MIT licensed: https://github.com/jmhodges/levigo/blob/master/LICENSE
+
+Units, unit multipliers and functions for go, has license
+(TBD https://github.com/alecthomas/units/issues/1).
+It is by alecthomas: https://github.com/alecthomas/units
+
+Kingpin, a go command line and flag parser is licensed MIT
+(https://github.com/alecthomas/kingpin/blob/master/COPYING)
+by alecthomas
diff --git a/solr-8.1.1/licenses/http2-client-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/http2-client-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..f2792c491
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-client-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+78917d06b788fad75fdd4fa73d8d8ff9679200dd
diff --git a/solr-8.1.1/licenses/http2-client-LICENSE-ASL.txt b/solr-8.1.1/licenses/http2-client-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-client-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/http2-client-NOTICE.txt b/solr-8.1.1/licenses/http2-client-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-client-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/http2-common-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/http2-common-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..dd687dd95
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-common-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+820ca2201ad531983cc3a8e2a82153268828d025
diff --git a/solr-8.1.1/licenses/http2-common-LICENSE-ASL.txt b/solr-8.1.1/licenses/http2-common-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-common-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/http2-common-NOTICE.txt b/solr-8.1.1/licenses/http2-common-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-common-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/http2-hpack-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/http2-hpack-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..755beb476
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-hpack-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+e6cc7ae5b5749afe8b787595b28c6813c13c3ac2
diff --git a/solr-8.1.1/licenses/http2-hpack-LICENSE-ASL.txt b/solr-8.1.1/licenses/http2-hpack-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-hpack-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/http2-hpack-NOTICE.txt b/solr-8.1.1/licenses/http2-hpack-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-hpack-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/http2-http-client-transport-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/http2-http-client-transport-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..d71330cbe
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-http-client-transport-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+77139eb205d3ddb2d19458c534c734f11491a429
diff --git a/solr-8.1.1/licenses/http2-http-client-transport-LICENSE-ASL.txt b/solr-8.1.1/licenses/http2-http-client-transport-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-http-client-transport-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/http2-http-client-transport-NOTICE.txt b/solr-8.1.1/licenses/http2-http-client-transport-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-http-client-transport-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/http2-server-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/http2-server-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..f3b32acb8
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-server-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+a2ce60a90cbf4db91240bb585733e33b1a55110f
diff --git a/solr-8.1.1/licenses/http2-server-LICENSE-ASL.txt b/solr-8.1.1/licenses/http2-server-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-server-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/http2-server-NOTICE.txt b/solr-8.1.1/licenses/http2-server-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/http2-server-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/httpclient-4.5.6.jar.sha1 b/solr-8.1.1/licenses/httpclient-4.5.6.jar.sha1
new file mode 100644
index 000000000..92b233e91
--- /dev/null
+++ b/solr-8.1.1/licenses/httpclient-4.5.6.jar.sha1
@@ -0,0 +1 @@
+1afe5621985efe90a92d0fbc9be86271efbe796f
diff --git a/solr-8.1.1/licenses/httpclient-LICENSE-ASL.txt b/solr-8.1.1/licenses/httpclient-LICENSE-ASL.txt
new file mode 100644
index 000000000..2c41ec88f
--- /dev/null
+++ b/solr-8.1.1/licenses/httpclient-LICENSE-ASL.txt
@@ -0,0 +1,182 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls.
+See http://www.jcip.net and the Creative Commons Attribution License
+(http://creativecommons.org/licenses/by/2.5)
+
diff --git a/solr-8.1.1/licenses/httpclient-NOTICE.txt b/solr-8.1.1/licenses/httpclient-NOTICE.txt
new file mode 100644
index 000000000..4b40ea057
--- /dev/null
+++ b/solr-8.1.1/licenses/httpclient-NOTICE.txt
@@ -0,0 +1,8 @@
+Apache HttpComponents Client
+Copyright 1999-2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
diff --git a/solr-8.1.1/licenses/httpcore-4.4.10.jar.sha1 b/solr-8.1.1/licenses/httpcore-4.4.10.jar.sha1
new file mode 100644
index 000000000..6f915469a
--- /dev/null
+++ b/solr-8.1.1/licenses/httpcore-4.4.10.jar.sha1
@@ -0,0 +1 @@
+acc54d9b28bdffe4bbde89ed2e4a1e86b5285e2b
diff --git a/solr-8.1.1/licenses/httpcore-LICENSE-ASL.txt b/solr-8.1.1/licenses/httpcore-LICENSE-ASL.txt
new file mode 100644
index 000000000..2c41ec88f
--- /dev/null
+++ b/solr-8.1.1/licenses/httpcore-LICENSE-ASL.txt
@@ -0,0 +1,182 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls.
+See http://www.jcip.net and the Creative Commons Attribution License
+(http://creativecommons.org/licenses/by/2.5)
+
diff --git a/solr-8.1.1/licenses/httpcore-NOTICE.txt b/solr-8.1.1/licenses/httpcore-NOTICE.txt
new file mode 100644
index 000000000..4b40ea057
--- /dev/null
+++ b/solr-8.1.1/licenses/httpcore-NOTICE.txt
@@ -0,0 +1,8 @@
+Apache HttpComponents Client
+Copyright 1999-2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
diff --git a/solr-8.1.1/licenses/httpmime-4.5.6.jar.sha1 b/solr-8.1.1/licenses/httpmime-4.5.6.jar.sha1
new file mode 100644
index 000000000..eba7d66ef
--- /dev/null
+++ b/solr-8.1.1/licenses/httpmime-4.5.6.jar.sha1
@@ -0,0 +1 @@
+164343da11db817e81e24e0d9869527e069850c9
diff --git a/solr-8.1.1/licenses/httpmime-LICENSE-ASL.txt b/solr-8.1.1/licenses/httpmime-LICENSE-ASL.txt
new file mode 100644
index 000000000..2c41ec88f
--- /dev/null
+++ b/solr-8.1.1/licenses/httpmime-LICENSE-ASL.txt
@@ -0,0 +1,182 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls.
+See http://www.jcip.net and the Creative Commons Attribution License
+(http://creativecommons.org/licenses/by/2.5)
+
diff --git a/solr-8.1.1/licenses/httpmime-NOTICE.txt b/solr-8.1.1/licenses/httpmime-NOTICE.txt
new file mode 100644
index 000000000..4b40ea057
--- /dev/null
+++ b/solr-8.1.1/licenses/httpmime-NOTICE.txt
@@ -0,0 +1,8 @@
+Apache HttpComponents Client
+Copyright 1999-2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
diff --git a/solr-8.1.1/licenses/icu4j-62.1.jar.sha1 b/solr-8.1.1/licenses/icu4j-62.1.jar.sha1
new file mode 100644
index 000000000..20fa5c752
--- /dev/null
+++ b/solr-8.1.1/licenses/icu4j-62.1.jar.sha1
@@ -0,0 +1 @@
+7a4d00d5ec5febd252a6182e8b6e87a0a9821f81
diff --git a/solr-8.1.1/licenses/icu4j-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/icu4j-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..e76faec4a
--- /dev/null
+++ b/solr-8.1.1/licenses/icu4j-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,33 @@
+ICU License - ICU 1.8.1 and later
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2012 International Business Machines Corporation and others
+
+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, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+provided that the above copyright notice(s) and this permission notice appear
+in all copies of the Software and that both the above copyright notice(s) and
+this permission notice appear in supporting documentation.
+
+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 OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
+LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization of the
+copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the property of
+their respective owners.
diff --git a/solr-8.1.1/licenses/icu4j-NOTICE.txt b/solr-8.1.1/licenses/icu4j-NOTICE.txt
new file mode 100644
index 000000000..575045cdb
--- /dev/null
+++ b/solr-8.1.1/licenses/icu4j-NOTICE.txt
@@ -0,0 +1,3 @@
+ICU4J, (under modules/analysis/icu) is licensed under an MIT style license
+(modules/analysis/icu/lib/icu4j-LICENSE-BSD_LIKE.txt) and Copyright (c) 1995-2012
+International Business Machines Corporation and others
diff --git a/solr-8.1.1/licenses/isoparser-1.1.22.jar.sha1 b/solr-8.1.1/licenses/isoparser-1.1.22.jar.sha1
new file mode 100644
index 000000000..be8f2ada4
--- /dev/null
+++ b/solr-8.1.1/licenses/isoparser-1.1.22.jar.sha1
@@ -0,0 +1 @@
+70b5c26b52c120d2e94643717a764c4a67640fd6
diff --git a/solr-8.1.1/licenses/isoparser-LICENSE-ASL.txt b/solr-8.1.1/licenses/isoparser-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/isoparser-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/isoparser-NOTICE.txt b/solr-8.1.1/licenses/isoparser-NOTICE.txt
new file mode 100644
index 000000000..83b225d7a
--- /dev/null
+++ b/solr-8.1.1/licenses/isoparser-NOTICE.txt
@@ -0,0 +1,23 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Maven distribution. ==
+ =========================================================================
+
+This product includes software developed by
+CoreMedia AG (http://www.coremedia.com/).
+
+This product includes software developed by
+castLabs GmbH (http://www.castlabs.com/).
+
+This product includes software developed by
+Sebastian Annies (Sebastian.Annies@gmail.com)
+
+This product includes software (Base64 Encoder extracted from commons-codec) developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software (Hex Encoder extracted from commons-codec) developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software (package com.googlecode.mp4parser.h264) developed by
+Stanislav Vitvitskiy and originally licensed under MIT license (http://www.opensource.org/licenses/mit-license.php)
diff --git a/solr-8.1.1/licenses/jackcess-2.1.12.jar.sha1 b/solr-8.1.1/licenses/jackcess-2.1.12.jar.sha1
new file mode 100644
index 000000000..49fe42146
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-2.1.12.jar.sha1
@@ -0,0 +1 @@
+8a422b016925475b2234b576a0f7ee3f55f1f9e2
diff --git a/solr-8.1.1/licenses/jackcess-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackcess-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jackcess-NOTICE.txt b/solr-8.1.1/licenses/jackcess-NOTICE.txt
new file mode 100644
index 000000000..99cb4a0bd
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-NOTICE.txt
@@ -0,0 +1,2 @@
+Jackcess: http://jackcess.sourceforge.net/
+Copyright (C) 2008-2016 James Ahlborn
diff --git a/solr-8.1.1/licenses/jackcess-encrypt-2.1.4.jar.sha1 b/solr-8.1.1/licenses/jackcess-encrypt-2.1.4.jar.sha1
new file mode 100644
index 000000000..b0153ecf9
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-encrypt-2.1.4.jar.sha1
@@ -0,0 +1 @@
+dfe7134b759597276ff87b7acf662bef1c1c4fd8
diff --git a/solr-8.1.1/licenses/jackcess-encrypt-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackcess-encrypt-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-encrypt-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jackcess-encrypt-NOTICE.txt b/solr-8.1.1/licenses/jackcess-encrypt-NOTICE.txt
new file mode 100644
index 000000000..99cb4a0bd
--- /dev/null
+++ b/solr-8.1.1/licenses/jackcess-encrypt-NOTICE.txt
@@ -0,0 +1,2 @@
+Jackcess: http://jackcess.sourceforge.net/
+Copyright (C) 2008-2016 James Ahlborn
diff --git a/solr-8.1.1/licenses/jackson-annotations-2.9.8.jar.sha1 b/solr-8.1.1/licenses/jackson-annotations-2.9.8.jar.sha1
new file mode 100644
index 000000000..64b57a832
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-annotations-2.9.8.jar.sha1
@@ -0,0 +1 @@
+ba7f0e6f8f1b28d251eeff2a5604bed34c53ff35
diff --git a/solr-8.1.1/licenses/jackson-annotations-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-annotations-LICENSE-ASL.txt
new file mode 100644
index 000000000..ff94ef8c4
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-annotations-LICENSE-ASL.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor annotations is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/solr-8.1.1/licenses/jackson-annotations-NOTICE.txt b/solr-8.1.1/licenses/jackson-annotations-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-annotations-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/jackson-core-2.9.8.jar.sha1 b/solr-8.1.1/licenses/jackson-core-2.9.8.jar.sha1
new file mode 100644
index 000000000..7634344bc
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-core-2.9.8.jar.sha1
@@ -0,0 +1 @@
+0f5a654e4675769c716e5b387830d19b501ca191
diff --git a/solr-8.1.1/licenses/jackson-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..f5f45d26a
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-core-LICENSE-ASL.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor streaming parser/generator is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/solr-8.1.1/licenses/jackson-core-NOTICE.txt b/solr-8.1.1/licenses/jackson-core-NOTICE.txt
new file mode 100644
index 000000000..4c976b7b4
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-core-NOTICE.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
diff --git a/solr-8.1.1/licenses/jackson-core-asl-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-core-asl-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-core-asl-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jackson-core-asl-NOTICE.txt b/solr-8.1.1/licenses/jackson-core-asl-NOTICE.txt
new file mode 100644
index 000000000..0cae638a1
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-core-asl-NOTICE.txt
@@ -0,0 +1,7 @@
+This product currently only contains code developed by authors
+of specific components, as identified by the source code files;
+if such notes are missing files have been created by
+Tatu Saloranta.
+
+For additional credits (generally to people who reported problems)
+see CREDITS file.
diff --git a/solr-8.1.1/licenses/jackson-databind-2.9.8.jar.sha1 b/solr-8.1.1/licenses/jackson-databind-2.9.8.jar.sha1
new file mode 100644
index 000000000..3319cf302
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-databind-2.9.8.jar.sha1
@@ -0,0 +1 @@
+11283f21cc480aa86c4df7a0a3243ec508372ed2
diff --git a/solr-8.1.1/licenses/jackson-databind-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-databind-LICENSE-ASL.txt
new file mode 100644
index 000000000..6acf75483
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-databind-LICENSE-ASL.txt
@@ -0,0 +1,8 @@
+This copy of Jackson JSON processor databind module is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
diff --git a/solr-8.1.1/licenses/jackson-databind-NOTICE.txt b/solr-8.1.1/licenses/jackson-databind-NOTICE.txt
new file mode 100644
index 000000000..5ab1e5636
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-databind-NOTICE.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may be licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
diff --git a/solr-8.1.1/licenses/jackson-dataformat-smile-2.9.8.jar.sha1 b/solr-8.1.1/licenses/jackson-dataformat-smile-2.9.8.jar.sha1
new file mode 100644
index 000000000..a4787c06b
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-dataformat-smile-2.9.8.jar.sha1
@@ -0,0 +1 @@
+dbb47a052ac2b249ae004ce32e1e0c8bd8ee526c
diff --git a/solr-8.1.1/licenses/jackson-dataformat-smile-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-dataformat-smile-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-dataformat-smile-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jackson-dataformat-smile-NOTICE.txt b/solr-8.1.1/licenses/jackson-dataformat-smile-NOTICE.txt
new file mode 100644
index 000000000..5ab1e5636
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-dataformat-smile-NOTICE.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may be licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
diff --git a/solr-8.1.1/licenses/jackson-jq-0.0.8.jar.sha1 b/solr-8.1.1/licenses/jackson-jq-0.0.8.jar.sha1
new file mode 100644
index 000000000..4b7a4d297
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-jq-0.0.8.jar.sha1
@@ -0,0 +1 @@
+9bd1a7f8268a436674a4f3210f11ef4eebe14d84
diff --git a/solr-8.1.1/licenses/jackson-jq-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-jq-LICENSE-ASL.txt
new file mode 100644
index 000000000..1a9674c55
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-jq-LICENSE-ASL.txt
@@ -0,0 +1,16 @@
+jackson-jq
+----------
+
+Copyright (C) 2015 Eiichi Sato
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/solr-8.1.1/licenses/jackson-jq-NOTICE.txt b/solr-8.1.1/licenses/jackson-jq-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-jq-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/jackson-mapper-asl-LICENSE-ASL.txt b/solr-8.1.1/licenses/jackson-mapper-asl-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-mapper-asl-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jackson-mapper-asl-NOTICE.txt b/solr-8.1.1/licenses/jackson-mapper-asl-NOTICE.txt
new file mode 100644
index 000000000..0cae638a1
--- /dev/null
+++ b/solr-8.1.1/licenses/jackson-mapper-asl-NOTICE.txt
@@ -0,0 +1,7 @@
+This product currently only contains code developed by authors
+of specific components, as identified by the source code files;
+if such notes are missing files have been created by
+Tatu Saloranta.
+
+For additional credits (generally to people who reported problems)
+see CREDITS file.
diff --git a/solr-8.1.1/licenses/janino-3.0.9.jar.sha1 b/solr-8.1.1/licenses/janino-3.0.9.jar.sha1
new file mode 100644
index 000000000..c5b66b0bf
--- /dev/null
+++ b/solr-8.1.1/licenses/janino-3.0.9.jar.sha1
@@ -0,0 +1 @@
+0ddfd261063f2e6300e4c884aeef5f145dd0b38d
diff --git a/solr-8.1.1/licenses/janino-LICENSE-BSD.txt b/solr-8.1.1/licenses/janino-LICENSE-BSD.txt
new file mode 100644
index 000000000..ef871e242
--- /dev/null
+++ b/solr-8.1.1/licenses/janino-LICENSE-BSD.txt
@@ -0,0 +1,31 @@
+Janino - An embedded Java[TM] compiler
+
+Copyright (c) 2001-2016, Arno Unkrig
+Copyright (c) 2015-2016 TIBCO Software Inc.
+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 JANINO 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 HOLDERS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/janino-NOTICE.txt b/solr-8.1.1/licenses/janino-NOTICE.txt
new file mode 100644
index 000000000..203e2f920
--- /dev/null
+++ b/solr-8.1.1/licenses/janino-NOTICE.txt
@@ -0,0 +1,5 @@
+Janino - An embedded Java[TM] compiler
+
+Copyright (c) 2001-2016, Arno Unkrig
+Copyright (c) 2015-2016 TIBCO Software Inc.
+All rights reserved.
diff --git a/solr-8.1.1/licenses/java-libpst-0.8.1.jar.sha1 b/solr-8.1.1/licenses/java-libpst-0.8.1.jar.sha1
new file mode 100644
index 000000000..f88c97625
--- /dev/null
+++ b/solr-8.1.1/licenses/java-libpst-0.8.1.jar.sha1
@@ -0,0 +1 @@
+ad31986653dac9cb5132ea5b2999c20b4b286255
diff --git a/solr-8.1.1/licenses/java-libpst-LICENSE-ASL.txt b/solr-8.1.1/licenses/java-libpst-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/java-libpst-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/java-libpst-NOTICE.txt b/solr-8.1.1/licenses/java-libpst-NOTICE.txt
new file mode 100644
index 000000000..4868ad70c
--- /dev/null
+++ b/solr-8.1.1/licenses/java-libpst-NOTICE.txt
@@ -0,0 +1,4 @@
+java-libpst is a pure java library for the reading of Outlook PST and OST files.
+https://github.com/rjohnsondev/java-libpst
+
+java-libpst is licensed under both the LGPL and Apache License v2.0
diff --git a/solr-8.1.1/licenses/javax.mail-1.5.1.jar.sha1 b/solr-8.1.1/licenses/javax.mail-1.5.1.jar.sha1
new file mode 100644
index 000000000..e7a0a834c
--- /dev/null
+++ b/solr-8.1.1/licenses/javax.mail-1.5.1.jar.sha1
@@ -0,0 +1 @@
+9724dd44f1abbba99c9858aa05fc91d53f59e7a5
diff --git a/solr-8.1.1/licenses/javax.mail-LICENSE-CDDL.txt b/solr-8.1.1/licenses/javax.mail-LICENSE-CDDL.txt
new file mode 100644
index 000000000..a147fe44b
--- /dev/null
+++ b/solr-8.1.1/licenses/javax.mail-LICENSE-CDDL.txt
@@ -0,0 +1,135 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1
+
+1. Definitions.
+
+1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. "Executable" means the Covered Software in any form other than Source Code.
+
+1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
+
+1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. "License" means this document.
+
+1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. "Modifications" means the Source Code and Executable form of any of the following:
+
+ A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
diff --git a/solr-8.1.1/licenses/javax.servlet-api-3.1.0.jar.sha1 b/solr-8.1.1/licenses/javax.servlet-api-3.1.0.jar.sha1
new file mode 100644
index 000000000..a269ca04f
--- /dev/null
+++ b/solr-8.1.1/licenses/javax.servlet-api-3.1.0.jar.sha1
@@ -0,0 +1 @@
+3cd63d075497751784b2fa84be59432f4905bf7c
diff --git a/solr-8.1.1/licenses/javax.servlet-api-LICENSE-CDDL.txt b/solr-8.1.1/licenses/javax.servlet-api-LICENSE-CDDL.txt
new file mode 100644
index 000000000..b75b04fcf
--- /dev/null
+++ b/solr-8.1.1/licenses/javax.servlet-api-LICENSE-CDDL.txt
@@ -0,0 +1,126 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+ 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
+
+ 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+ 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+ 1.4. Executable. means the Covered Software in any form other than Source Code.
+
+ 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
+
+ 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+ 1.7. License. means this document.
+
+ 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. Modifications. means the Source Code and Executable form of any of the following:
+
+ A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+ 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
+
+ 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+ 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+ 2.1. The Initial Developer Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+ 2.2. Contributor Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Availability of Source Code.
+ Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+ 3.2. Modifications.
+ The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+ 3.3. Required Notices.
+ You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+ 3.4. Application of Additional Terms.
+ You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.5. Distribution of Executable Versions.
+ You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.6. Larger Works.
+ You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+ 4.1. New Versions.
+ Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+ 4.2. Effect of New Versions.
+ You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+ 4.3. Modified Versions.
+ When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+ 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+ 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+ The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+ NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+ The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
diff --git a/solr-8.1.1/licenses/javax.servlet-api-NOTICE.txt b/solr-8.1.1/licenses/javax.servlet-api-NOTICE.txt
new file mode 100644
index 000000000..6340ec9b7
--- /dev/null
+++ b/solr-8.1.1/licenses/javax.servlet-api-NOTICE.txt
@@ -0,0 +1,2 @@
+Servlet-api.jar is under the CDDL license, the original source
+code for this can be found at http://www.eclipse.org/jetty/downloads.php
diff --git a/solr-8.1.1/licenses/jcl-over-slf4j-1.7.24.jar.sha1 b/solr-8.1.1/licenses/jcl-over-slf4j-1.7.24.jar.sha1
new file mode 100644
index 000000000..b3f8afcdb
--- /dev/null
+++ b/solr-8.1.1/licenses/jcl-over-slf4j-1.7.24.jar.sha1
@@ -0,0 +1 @@
+e6a8629079856a2aa7862c6327ccf6dd1988d7fc
diff --git a/solr-8.1.1/licenses/jcl-over-slf4j-LICENSE-MIT.txt b/solr-8.1.1/licenses/jcl-over-slf4j-LICENSE-MIT.txt
new file mode 100644
index 000000000..f5ecafa00
--- /dev/null
+++ b/solr-8.1.1/licenses/jcl-over-slf4j-LICENSE-MIT.txt
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/jcl-over-slf4j-NOTICE.txt b/solr-8.1.1/licenses/jcl-over-slf4j-NOTICE.txt
new file mode 100644
index 000000000..cf438946a
--- /dev/null
+++ b/solr-8.1.1/licenses/jcl-over-slf4j-NOTICE.txt
@@ -0,0 +1,25 @@
+=========================================================================
+== SLF4J Notice -- http://www.slf4j.org/license.html ==
+=========================================================================
+
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/jdom2-2.0.6.jar.sha1 b/solr-8.1.1/licenses/jdom2-2.0.6.jar.sha1
new file mode 100644
index 000000000..5e10b2db3
--- /dev/null
+++ b/solr-8.1.1/licenses/jdom2-2.0.6.jar.sha1
@@ -0,0 +1 @@
+6f14738ec2e9dd0011e343717fa624a10f8aab64
diff --git a/solr-8.1.1/licenses/jdom2-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/jdom2-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..132ede665
--- /dev/null
+++ b/solr-8.1.1/licenses/jdom2-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,56 @@
+/*--
+
+ Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
+
+ Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+ 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 disclaimer that follows
+ these conditions in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. The name "JDOM" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact <request_AT_jdom_DOT_org>.
+
+ 4. Products derived from this software may not be called "JDOM", nor
+ may "JDOM" appear in their name, without prior written permission
+ from the JDOM Project Management <request_AT_jdom_DOT_org>.
+
+ In addition, we request (but do not require) that you include in the
+ end-user documentation provided with the redistribution and/or in the
+ software itself an acknowledgement equivalent to the following:
+ "This product includes software developed by the
+ JDOM Project (http://www.jdom.org/)."
+ Alternatively, the acknowledgment may be graphical using the logos
+ available at http://www.jdom.org/images/logos.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JDOM AUTHORS OR THE PROJECT
+ 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.
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the JDOM Project and was originally
+ created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+ Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
+ on the JDOM Project, please see <http://www.jdom.org/>.
+
+ */
+
diff --git a/solr-8.1.1/licenses/jdom2-NOTICE.txt b/solr-8.1.1/licenses/jdom2-NOTICE.txt
new file mode 100644
index 000000000..21680afc4
--- /dev/null
+++ b/solr-8.1.1/licenses/jdom2-NOTICE.txt
@@ -0,0 +1,6 @@
+Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+All rights reserved.
+
+JDOM is available under an Apache-style open source license, with the acknowledgment clause removed.
+This license is among the least restrictive license available, enabling developers to use JDOM in
+creating new products without requiring them to release their own products as open source.
diff --git a/solr-8.1.1/licenses/jempbox-1.8.16.jar.sha1 b/solr-8.1.1/licenses/jempbox-1.8.16.jar.sha1
new file mode 100644
index 000000000..9f6f793c4
--- /dev/null
+++ b/solr-8.1.1/licenses/jempbox-1.8.16.jar.sha1
@@ -0,0 +1 @@
+1f41de81768ef84ca2d8cda4cb79e9272c8ee966
diff --git a/solr-8.1.1/licenses/jempbox-LICENSE-ASL.txt b/solr-8.1.1/licenses/jempbox-LICENSE-ASL.txt
new file mode 100644
index 000000000..acf7e6fcb
--- /dev/null
+++ b/solr-8.1.1/licenses/jempbox-LICENSE-ASL.txt
@@ -0,0 +1,236 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+CONTRIBUTIONS TO THE ORIGINAL CODEBASE
+
+Apache JempBox is based on contributions made to the original JempBox project:
+
+ Copyright (c) 2006-2007, www.jempbox.org
+ 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 fontbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
diff --git a/solr-8.1.1/licenses/jempbox-NOTICE.txt b/solr-8.1.1/licenses/jempbox-NOTICE.txt
new file mode 100644
index 000000000..a8affe377
--- /dev/null
+++ b/solr-8.1.1/licenses/jempbox-NOTICE.txt
@@ -0,0 +1,10 @@
+
+Apache JempBox
+Copyright 2008-2012 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+
+Based on source code contributed to the original JempBox project.
+Copyright (c) 2006-2007, www.jempbox.org
diff --git a/solr-8.1.1/licenses/jersey-core-1.19.jar.sha1 b/solr-8.1.1/licenses/jersey-core-1.19.jar.sha1
new file mode 100644
index 000000000..31a92685d
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-core-1.19.jar.sha1
@@ -0,0 +1 @@
+9a0619e2c514a79b610f17cadaae619c0a08d6a6
diff --git a/solr-8.1.1/licenses/jersey-core-LICENSE-CDDL.txt b/solr-8.1.1/licenses/jersey-core-LICENSE-CDDL.txt
new file mode 100644
index 000000000..633102eb7
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-core-LICENSE-CDDL.txt
@@ -0,0 +1,81 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+1. Definitions.
+
+1.1. “Contributor†means each individual or entity that creates or contributes to the creation of Modifications.
+1.2. “Contributor Version†means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+1.3. “Covered Software†means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+1.4. “Executable†means the Covered Software in any form other than Source Code.
+1.5. “Initial Developer†means the individual or entity that first makes Original Software available under this License.
+1.6. “Larger Work†means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+1.7. “License†means this document.
+1.8. “Licensable†means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+1.9. “Modifications†means the Source Code and Executable form of any of the following:
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+B. Any new file that contains any part of the Original Software or previous Modification; or
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+1.10. “Original Software†means the Source Code and Executable form of computer software code that is originally released under this License.
+1.11. “Patent Claims†means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+1.12. “Source Code†means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+1.13. “You†(or “Yourâ€) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You†includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control†means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+3.2. Modifications.
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+4. Versions of the License.
+
+4.1. New Versions.
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+4.2. Effect of New Versions.
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS†BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participantâ€) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a “commercial item,†as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software†(as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation†as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
diff --git a/solr-8.1.1/licenses/jersey-server-1.19.jar.sha1 b/solr-8.1.1/licenses/jersey-server-1.19.jar.sha1
new file mode 100644
index 000000000..9c239ce43
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-server-1.19.jar.sha1
@@ -0,0 +1 @@
+ee2ff839a65097eb12004edd909bcb4a97a2832c
diff --git a/solr-8.1.1/licenses/jersey-server-LICENSE-CDDL.txt b/solr-8.1.1/licenses/jersey-server-LICENSE-CDDL.txt
new file mode 100644
index 000000000..b73bb92d7
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-server-LICENSE-CDDL.txt
@@ -0,0 +1,85 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+1. Definitions.
+
+1.1. “Contributor†means each individual or entity that creates or contributes to the creation of Modifications.
+1.2. “Contributor Version†means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+1.3. “Covered Software†means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+1.4. “Executable†means the Covered Software in any form other than Source Code.
+1.5. “Initial Developer†means the individual or entity that first makes Original Software available under this License.
+1.6. “Larger Work†means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+1.7. “License†means this document.
+1.8. “Licensable†means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+1.9. “Modifications†means the Source Code and Executable form of any of the following:
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+B. Any new file that contains any part of the Original Software or previous Modification; or
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+1.10. “Original Software†means the Source Code and Executable form of computer software code that is originally released under this License.
+1.11. “Patent Claims†means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+1.12. “Source Code†means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+1.13. “You†(or “Yourâ€) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You†includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control†means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+3.2. Modifications.
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+4. Versions of the License.
+
+4.1. New Versions.
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+4.2. Effect of New Versions.
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS†BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participantâ€) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a “commercial item,†as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software†(as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation†as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
diff --git a/solr-8.1.1/licenses/jersey-servlet-1.19.jar.sha1 b/solr-8.1.1/licenses/jersey-servlet-1.19.jar.sha1
new file mode 100644
index 000000000..b38f1fb42
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-servlet-1.19.jar.sha1
@@ -0,0 +1 @@
+2f19f1f7096d0fe3e09ae5698e4427114c23ad03
diff --git a/solr-8.1.1/licenses/jersey-servlet-LICENSE-CDDL.txt b/solr-8.1.1/licenses/jersey-servlet-LICENSE-CDDL.txt
new file mode 100644
index 000000000..b73bb92d7
--- /dev/null
+++ b/solr-8.1.1/licenses/jersey-servlet-LICENSE-CDDL.txt
@@ -0,0 +1,85 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+1. Definitions.
+
+1.1. “Contributor†means each individual or entity that creates or contributes to the creation of Modifications.
+1.2. “Contributor Version†means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+1.3. “Covered Software†means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+1.4. “Executable†means the Covered Software in any form other than Source Code.
+1.5. “Initial Developer†means the individual or entity that first makes Original Software available under this License.
+1.6. “Larger Work†means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+1.7. “License†means this document.
+1.8. “Licensable†means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+1.9. “Modifications†means the Source Code and Executable form of any of the following:
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+B. Any new file that contains any part of the Original Software or previous Modification; or
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+1.10. “Original Software†means the Source Code and Executable form of computer software code that is originally released under this License.
+1.11. “Patent Claims†means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+1.12. “Source Code†means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+1.13. “You†(or “Yourâ€) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You†includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control†means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+3.2. Modifications.
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+4. Versions of the License.
+
+4.1. New Versions.
+Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+4.2. Effect of New Versions.
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS†BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participantâ€) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a “commercial item,†as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software†(as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation†as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
diff --git a/solr-8.1.1/licenses/jetty-LICENSE-ASL.txt b/solr-8.1.1/licenses/jetty-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jetty-NOTICE.txt b/solr-8.1.1/licenses/jetty-NOTICE.txt
new file mode 100644
index 000000000..fcd254bee
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-NOTICE.txt
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head><body lang="EN-US" link="blue" vlink="purple">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse.org CVS
+repository ("Repository") in CVS modules ("Modules") and made available
+as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A
+Feature is a bundle of one or more Plug-ins and/or Fragments and
+associated material. Each Feature may be packaged as a sub-directory in
+a directory named "features". Within a Feature, files named
+"feature.xml" may contain a list of the names and version numbers of
+the Plug-ins and/or Fragments associated with that Feature.</li>
+ <li>Features
+may also include other Features ("Included Features"). Within a
+Feature, files named "feature.xml" may contain a list of the names and
+version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Eclipse Update Manager, you must agree to a license
+("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you
+are currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body></html>
diff --git a/solr-8.1.1/licenses/jetty-alpn-client-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-alpn-client-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..5b09025d5
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-alpn-client-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+c567eba368e70a0a9aaded14a554a3b25a0a502e
diff --git a/solr-8.1.1/licenses/jetty-alpn-java-client-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-alpn-java-client-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..ddd5f76b1
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-alpn-java-client-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+f093d00fc7112bdf471efdd5d909eb9296b3d30d
diff --git a/solr-8.1.1/licenses/jetty-alpn-java-server-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-alpn-java-server-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..327c6e231
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-alpn-java-server-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+686cc093a08a2ed2bc2bed059117997c8c760262
diff --git a/solr-8.1.1/licenses/jetty-alpn-server-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-alpn-server-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..1b16a3627
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-alpn-server-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+5aa0ca49c6f7cdd4c2c8a628620dc125162213ca
diff --git a/solr-8.1.1/licenses/jetty-client-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-client-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..9fd6a1707
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-client-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+1c46b088e1119928d54ff704fe38fe1b6b6700d0
diff --git a/solr-8.1.1/licenses/jetty-continuation-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-continuation-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..0d9db3a3e
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-continuation-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+ac4981a61bcaf4e2538de6270300a870224a16b8
diff --git a/solr-8.1.1/licenses/jetty-deploy-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-deploy-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..bdc13e2b7
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-deploy-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+db0e01f00c1d11fbf2dfa72a1707b7ac9859c943
diff --git a/solr-8.1.1/licenses/jetty-http-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-http-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..5e72e348a
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-http-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+6d0c8ac42e9894ae7b5032438eb4579c2a47f4fe
diff --git a/solr-8.1.1/licenses/jetty-io-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-io-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..f3acf8544
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-io-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+a8c6a705ddb9f83a75777d89b0be59fcef3f7637
diff --git a/solr-8.1.1/licenses/jetty-jmx-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-jmx-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..44b8ffcff
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-jmx-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+3e02463d2bff175a3231cd3dc26363eaf76a3b17
diff --git a/solr-8.1.1/licenses/jetty-rewrite-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-rewrite-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..636b338b8
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-rewrite-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+eb300aa639175741839b25a5109772bcc71a586a
diff --git a/solr-8.1.1/licenses/jetty-security-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-security-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..64e092033
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-security-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+6cbeb2fe9b3cc4f88a7ea040b8a0c4f703cd72ce
diff --git a/solr-8.1.1/licenses/jetty-server-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-server-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..182b5c5cc
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-server-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+b36a3d52d78a1df6406f6fa236a6eeff48cbfef6
diff --git a/solr-8.1.1/licenses/jetty-servlet-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-servlet-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..d1576d3a1
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-servlet-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+96f501462af425190ff7b63e387692c1aa3af2c8
diff --git a/solr-8.1.1/licenses/jetty-servlets-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-servlets-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..7fec6af68
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-servlets-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+38cfc07b53e5d285bb2fca78bb2531565ed9c9e5
diff --git a/solr-8.1.1/licenses/jetty-util-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-util-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..ffced6999
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-util-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+5bb3d7a38f7ea54138336591d89dd5867b806c02
diff --git a/solr-8.1.1/licenses/jetty-webapp-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-webapp-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..1e774f36c
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-webapp-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+0088a04172b5e7736bc3e95eb58623aa9ccdb475
diff --git a/solr-8.1.1/licenses/jetty-xml-9.4.14.v20181114.jar.sha1 b/solr-8.1.1/licenses/jetty-xml-9.4.14.v20181114.jar.sha1
new file mode 100644
index 000000000..ee136319b
--- /dev/null
+++ b/solr-8.1.1/licenses/jetty-xml-9.4.14.v20181114.jar.sha1
@@ -0,0 +1 @@
+65cd197bc8082a1007130c8b644cea7938133568
diff --git a/solr-8.1.1/licenses/jmatio-1.5.jar.sha1 b/solr-8.1.1/licenses/jmatio-1.5.jar.sha1
new file mode 100644
index 000000000..45ca675fb
--- /dev/null
+++ b/solr-8.1.1/licenses/jmatio-1.5.jar.sha1
@@ -0,0 +1 @@
+517d932cc87a3b564f3f7a07ac347b725b619ab4
diff --git a/solr-8.1.1/licenses/jmatio-LICENSE-BSD.txt b/solr-8.1.1/licenses/jmatio-LICENSE-BSD.txt
new file mode 100644
index 000000000..753fa5ce9
--- /dev/null
+++ b/solr-8.1.1/licenses/jmatio-LICENSE-BSD.txt
@@ -0,0 +1,28 @@
+Copyright (c) 2006, Wojciech Gradkowski
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of the JMatIO 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
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/jmatio-NOTICE.txt b/solr-8.1.1/licenses/jmatio-NOTICE.txt
new file mode 100644
index 000000000..4c5fce725
--- /dev/null
+++ b/solr-8.1.1/licenses/jmatio-NOTICE.txt
@@ -0,0 +1,8 @@
+JMatIO is a JAVA library to read/write/manipulate with Matlab binary
+MAT-files.
+
+If you would like to comment, improve, critisize the project please
+email me: wgradkowski@gmail.com
+
+or visit JMatIO project page at Sourceforge:
+http://www.sourceforge.net/projects/jmatio
diff --git a/solr-8.1.1/licenses/jose4j-0.6.5.jar.sha1 b/solr-8.1.1/licenses/jose4j-0.6.5.jar.sha1
new file mode 100644
index 000000000..b6fbefb36
--- /dev/null
+++ b/solr-8.1.1/licenses/jose4j-0.6.5.jar.sha1
@@ -0,0 +1 @@
+524470e6ad000e3938f4c0f5e08bd423e95bd43a
diff --git a/solr-8.1.1/licenses/jose4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/jose4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..ab3182e77
--- /dev/null
+++ b/solr-8.1.1/licenses/jose4j-LICENSE-ASL.txt
@@ -0,0 +1,272 @@
+/*
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright [yyyy] [name of copyright owner]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+W3C® SOFTWARE NOTICE AND LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee) agree
+that you have read, understood, and will comply with the following terms and
+conditions.
+
+Permission to copy, modify, and distribute this software and its documentation,
+with or without modification, for any purpose and without fee or royalty is
+hereby granted, provided that you include the following on ALL copies of the
+software and documentation or portions thereof, including modifications:
+
+ 1. The full text of this NOTICE in a location viewable to users of the
+ redistributed or derivative work.
+ 2. Any pre-existing intellectual property disclaimers, notices, or terms
+ and conditions. If none exist, the W3C Software Short Notice should be
+ included (hypertext is preferred, text is permitted) within the body
+ of any redistributed or derivative code.
+ 3. Notice of any changes or modifications to the files, including the date
+ changes were made. (We recommend you provide URIs to the location from
+ which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior permission.
+Title to copyright in this software and any associated documentation will at
+all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version of
+the license, and removes the ambiguous grant of "use". Otherwise, this version
+is the same as the previous version and is written so as to preserve the Free
+Software Foundation's assessment of GPL compatibility and OSI's certification
+under the Open Source Definition. Please see our Copyright FAQ for common
+questions about using materials from our site, including specific terms and
+conditions for packages like libwww, Amaya, and Jigsaw. Other questions about
+this notice can be directed to site-policy@w3.org.
+
+Joseph Reagle <site-policy@w3.org>
+
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
diff --git a/solr-8.1.1/licenses/jose4j-NOTICE.txt b/solr-8.1.1/licenses/jose4j-NOTICE.txt
new file mode 100644
index 000000000..455d1d0ca
--- /dev/null
+++ b/solr-8.1.1/licenses/jose4j-NOTICE.txt
@@ -0,0 +1,13 @@
+jose4j
+Copyright 2012-2015 Brian Campbell
+
+EcdsaUsingShaAlgorithm contains code for converting the concatenated
+R & S values of the signature to and from DER, which was originally
+derived from the Apache Santuario XML Security library's SignatureECDSA
+implementation. http://santuario.apache.org/
+
+The Base64 implementation in this software was derived from the
+Apache Commons Codec project. http://commons.apache.org/proper/commons-codec/
+
+JSON processing in this software was derived from the JSON.simple toolkit.
+https://code.google.com/p/json-simple/
diff --git a/solr-8.1.1/licenses/json-path-2.4.0.jar.sha1 b/solr-8.1.1/licenses/json-path-2.4.0.jar.sha1
new file mode 100644
index 000000000..2edbec905
--- /dev/null
+++ b/solr-8.1.1/licenses/json-path-2.4.0.jar.sha1
@@ -0,0 +1 @@
+765a4401ceb2dc8d40553c2075eb80a8fa35c2ae
diff --git a/solr-8.1.1/licenses/json-path-LICENSE-ASL.txt b/solr-8.1.1/licenses/json-path-LICENSE-ASL.txt
new file mode 100644
index 000000000..9972f34b7
--- /dev/null
+++ b/solr-8.1.1/licenses/json-path-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2017 Jayway
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/json-path-NOTICE.txt b/solr-8.1.1/licenses/json-path-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/json-path-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/jsonic-1.2.7.jar.sha1 b/solr-8.1.1/licenses/jsonic-1.2.7.jar.sha1
new file mode 100644
index 000000000..720e411da
--- /dev/null
+++ b/solr-8.1.1/licenses/jsonic-1.2.7.jar.sha1
@@ -0,0 +1 @@
+9efb491fa27424c5e4773db449e8a2c551a75de5
diff --git a/solr-8.1.1/licenses/jsonic-LICENSE-ASL.txt b/solr-8.1.1/licenses/jsonic-LICENSE-ASL.txt
new file mode 100644
index 000000000..b09cd7856
--- /dev/null
+++ b/solr-8.1.1/licenses/jsonic-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/jsonic-NOTICE.txt b/solr-8.1.1/licenses/jsonic-NOTICE.txt
new file mode 100644
index 000000000..6d1239b41
--- /dev/null
+++ b/solr-8.1.1/licenses/jsonic-NOTICE.txt
@@ -0,0 +1,3 @@
+
+jsonic - simple json encoder/decoder for java
+http://jsonic.sourceforge.jp/
diff --git a/solr-8.1.1/licenses/jsoup-1.11.3.jar.sha1 b/solr-8.1.1/licenses/jsoup-1.11.3.jar.sha1
new file mode 100644
index 000000000..1b814dcba
--- /dev/null
+++ b/solr-8.1.1/licenses/jsoup-1.11.3.jar.sha1
@@ -0,0 +1 @@
+36da09a8f68484523fa2aaa100399d612b247d67
diff --git a/solr-8.1.1/licenses/jsoup-LICENSE-MIT.txt b/solr-8.1.1/licenses/jsoup-LICENSE-MIT.txt
new file mode 100644
index 000000000..ab9f00b35
--- /dev/null
+++ b/solr-8.1.1/licenses/jsoup-LICENSE-MIT.txt
@@ -0,0 +1,21 @@
+The MIT License
+
+© 2009-2017, Jonathan Hedley <jonathan@hedley.net>
+
+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.
diff --git a/solr-8.1.1/licenses/jul-to-slf4j-1.7.24.jar.sha1 b/solr-8.1.1/licenses/jul-to-slf4j-1.7.24.jar.sha1
new file mode 100644
index 000000000..38c351e4f
--- /dev/null
+++ b/solr-8.1.1/licenses/jul-to-slf4j-1.7.24.jar.sha1
@@ -0,0 +1 @@
+25a2be668cb2ad1d05d76c0773df73b4b53617fd
diff --git a/solr-8.1.1/licenses/jul-to-slf4j-LICENSE-MIT.txt b/solr-8.1.1/licenses/jul-to-slf4j-LICENSE-MIT.txt
new file mode 100644
index 000000000..f5ecafa00
--- /dev/null
+++ b/solr-8.1.1/licenses/jul-to-slf4j-LICENSE-MIT.txt
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/jul-to-slf4j-NOTICE.txt b/solr-8.1.1/licenses/jul-to-slf4j-NOTICE.txt
new file mode 100644
index 000000000..cf438946a
--- /dev/null
+++ b/solr-8.1.1/licenses/jul-to-slf4j-NOTICE.txt
@@ -0,0 +1,25 @@
+=========================================================================
+== SLF4J Notice -- http://www.slf4j.org/license.html ==
+=========================================================================
+
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/junit-4.12.jar.sha1 b/solr-8.1.1/licenses/junit-4.12.jar.sha1
new file mode 100644
index 000000000..d0dbc0c46
--- /dev/null
+++ b/solr-8.1.1/licenses/junit-4.12.jar.sha1
@@ -0,0 +1 @@
+2973d150c0dc1fefe998f834810d68f278ea58ec
diff --git a/solr-8.1.1/licenses/junit-LICENSE-CPL.txt b/solr-8.1.1/licenses/junit-LICENSE-CPL.txt
new file mode 100644
index 000000000..4efdc7b20
--- /dev/null
+++ b/solr-8.1.1/licenses/junit-LICENSE-CPL.txt
@@ -0,0 +1,88 @@
+Common Public License - v 1.0
+
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
diff --git a/solr-8.1.1/licenses/junit-NOTICE.txt b/solr-8.1.1/licenses/junit-NOTICE.txt
new file mode 100644
index 000000000..0178e9a6a
--- /dev/null
+++ b/solr-8.1.1/licenses/junit-NOTICE.txt
@@ -0,0 +1,2 @@
+JUnit (under lib/junit-4.10.jar) is licensed under the Common Public License v. 1.0
+See http://junit.sourceforge.net/cpl-v10.html
diff --git a/solr-8.1.1/licenses/junit4-ant-2.7.2.jar.sha1 b/solr-8.1.1/licenses/junit4-ant-2.7.2.jar.sha1
new file mode 100644
index 000000000..f51d140c9
--- /dev/null
+++ b/solr-8.1.1/licenses/junit4-ant-2.7.2.jar.sha1
@@ -0,0 +1 @@
+b9e4fce45b3ee7bb14c5b72804dc1e483e61340d
diff --git a/solr-8.1.1/licenses/junit4-ant-LICENSE-ASL.txt b/solr-8.1.1/licenses/junit4-ant-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/junit4-ant-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/junit4-ant-NOTICE.txt b/solr-8.1.1/licenses/junit4-ant-NOTICE.txt
new file mode 100644
index 000000000..3c321aa25
--- /dev/null
+++ b/solr-8.1.1/licenses/junit4-ant-NOTICE.txt
@@ -0,0 +1,12 @@
+
+JUnit4, parallel JUnit execution for ANT
+Copyright 2011-2012 Carrot Search s.c.
+http://labs.carrotsearch.com/randomizedtesting.html
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes asm (asmlib), BSD license
+This product includes Google Guava, ASL license
+This product includes simple-xml, ASL license
+This product includes Google GSON, ASL license
diff --git a/solr-8.1.1/licenses/juniversalchardet-1.0.3.jar.sha1 b/solr-8.1.1/licenses/juniversalchardet-1.0.3.jar.sha1
new file mode 100644
index 000000000..6b0695267
--- /dev/null
+++ b/solr-8.1.1/licenses/juniversalchardet-1.0.3.jar.sha1
@@ -0,0 +1 @@
+cd49678784c46aa8789c060538e0154013bb421b
diff --git a/solr-8.1.1/licenses/juniversalchardet-LICENSE-MPL.txt b/solr-8.1.1/licenses/juniversalchardet-LICENSE-MPL.txt
new file mode 100644
index 000000000..06f965147
--- /dev/null
+++ b/solr-8.1.1/licenses/juniversalchardet-LICENSE-MPL.txt
@@ -0,0 +1,469 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
diff --git a/solr-8.1.1/licenses/juniversalchardet-NOTICE.txt b/solr-8.1.1/licenses/juniversalchardet-NOTICE.txt
new file mode 100644
index 000000000..23b25da3a
--- /dev/null
+++ b/solr-8.1.1/licenses/juniversalchardet-NOTICE.txt
@@ -0,0 +1,6 @@
+Project home page: http://code.google.com/p/juniversalchardet/
+Java port by Kohei TAKETA (No copyright specified)
+
+The library is subject to the Mozilla Public License Version 1.1.
+Alternatively, the library may be used under the terms of either the GNU General Public License Version 2 or later,
+or the GNU Lesser General Public License 2.1 or later.
diff --git a/solr-8.1.1/licenses/kerb-admin-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-admin-1.0.1.jar.sha1
new file mode 100644
index 000000000..63581a733
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-admin-1.0.1.jar.sha1
@@ -0,0 +1 @@
+7868b29620b92aa1040fe20d21ba09f2506207aa
diff --git a/solr-8.1.1/licenses/kerb-admin-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-admin-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-admin-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-admin-NOTICE.txt b/solr-8.1.1/licenses/kerb-admin-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-admin-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-client-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-client-1.0.1.jar.sha1
new file mode 100644
index 000000000..db0772bfe
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-client-1.0.1.jar.sha1
@@ -0,0 +1 @@
+a82d2503e718d17628fc9b4db411b001573f61b7
diff --git a/solr-8.1.1/licenses/kerb-client-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-client-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-client-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-client-NOTICE.txt b/solr-8.1.1/licenses/kerb-client-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-client-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-common-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-common-1.0.1.jar.sha1
new file mode 100644
index 000000000..abd6fe487
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-common-1.0.1.jar.sha1
@@ -0,0 +1 @@
+e358016010b6355630e398db20d83925462fa4cd
diff --git a/solr-8.1.1/licenses/kerb-common-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-common-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-common-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-common-NOTICE.txt b/solr-8.1.1/licenses/kerb-common-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-common-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-core-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-core-1.0.1.jar.sha1
new file mode 100644
index 000000000..f60c70b78
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-core-1.0.1.jar.sha1
@@ -0,0 +1 @@
+82357e97a5c1b505beb0f6c227d9f39b2d7fdde0
diff --git a/solr-8.1.1/licenses/kerb-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-core-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-core-NOTICE.txt b/solr-8.1.1/licenses/kerb-core-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-core-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-crypto-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-crypto-1.0.1.jar.sha1
new file mode 100644
index 000000000..82564c730
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-crypto-1.0.1.jar.sha1
@@ -0,0 +1 @@
+66eab4bbf91fa01ed4f72ce771db28c59d35a843
diff --git a/solr-8.1.1/licenses/kerb-crypto-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-crypto-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-crypto-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-crypto-NOTICE.txt b/solr-8.1.1/licenses/kerb-crypto-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-crypto-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-identity-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-identity-1.0.1.jar.sha1
new file mode 100644
index 000000000..afd3a2247
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-identity-1.0.1.jar.sha1
@@ -0,0 +1 @@
+eb91bc9b9ff26bfcca077cf1a888fb09e8ce72be
diff --git a/solr-8.1.1/licenses/kerb-identity-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-identity-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-identity-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-identity-NOTICE.txt b/solr-8.1.1/licenses/kerb-identity-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-identity-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-server-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-server-1.0.1.jar.sha1
new file mode 100644
index 000000000..14c3a195a
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-server-1.0.1.jar.sha1
@@ -0,0 +1 @@
+c56ffb4a6541864daf9868895b79c0c33427fd8c
diff --git a/solr-8.1.1/licenses/kerb-server-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-server-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-server-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-server-NOTICE.txt b/solr-8.1.1/licenses/kerb-server-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-server-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-simplekdc-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-simplekdc-1.0.1.jar.sha1
new file mode 100644
index 000000000..0cb16c274
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-simplekdc-1.0.1.jar.sha1
@@ -0,0 +1 @@
+1e39adf7c3f5e87695789994b694d24c1dda5752
diff --git a/solr-8.1.1/licenses/kerb-simplekdc-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-simplekdc-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-simplekdc-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-simplekdc-NOTICE.txt b/solr-8.1.1/licenses/kerb-simplekdc-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-simplekdc-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerb-util-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerb-util-1.0.1.jar.sha1
new file mode 100644
index 000000000..f73a9360d
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-util-1.0.1.jar.sha1
@@ -0,0 +1 @@
+93d37f677addd2450b199e8da8fcac243ceb8a88
diff --git a/solr-8.1.1/licenses/kerb-util-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerb-util-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-util-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerb-util-NOTICE.txt b/solr-8.1.1/licenses/kerb-util-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerb-util-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerby-asn1-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerby-asn1-1.0.1.jar.sha1
new file mode 100644
index 000000000..e8dc97f62
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-asn1-1.0.1.jar.sha1
@@ -0,0 +1 @@
+d54a9712c29c4e6d9d9ba483fad3d450be135fff
diff --git a/solr-8.1.1/licenses/kerby-asn1-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerby-asn1-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-asn1-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerby-asn1-NOTICE.txt b/solr-8.1.1/licenses/kerby-asn1-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-asn1-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerby-config-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerby-config-1.0.1.jar.sha1
new file mode 100644
index 000000000..f1670cf81
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-config-1.0.1.jar.sha1
@@ -0,0 +1 @@
+a4c3885fa656a92508315aca9b4632197a454b18
diff --git a/solr-8.1.1/licenses/kerby-config-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerby-config-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-config-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerby-config-NOTICE.txt b/solr-8.1.1/licenses/kerby-config-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-config-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerby-kdc-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerby-kdc-1.0.1.jar.sha1
new file mode 100644
index 000000000..5e5d939bd
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-kdc-1.0.1.jar.sha1
@@ -0,0 +1 @@
+1a65dfc7f5e5eccc15e44dbdb7c34ddb14a03a97
diff --git a/solr-8.1.1/licenses/kerby-kdc-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerby-kdc-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-kdc-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerby-kdc-NOTICE.txt b/solr-8.1.1/licenses/kerby-kdc-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-kdc-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerby-pkix-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerby-pkix-1.0.1.jar.sha1
new file mode 100644
index 000000000..8c51c75c9
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-pkix-1.0.1.jar.sha1
@@ -0,0 +1 @@
+4c1fd1f78ba7c16cf6fcd663ddad7eed34b4d911
diff --git a/solr-8.1.1/licenses/kerby-pkix-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerby-pkix-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-pkix-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerby-pkix-NOTICE.txt b/solr-8.1.1/licenses/kerby-pkix-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-pkix-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/kerby-util-1.0.1.jar.sha1 b/solr-8.1.1/licenses/kerby-util-1.0.1.jar.sha1
new file mode 100644
index 000000000..c2c526af8
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-util-1.0.1.jar.sha1
@@ -0,0 +1 @@
+389b730dc4e454f70d72ec19ddac2528047f157e
diff --git a/solr-8.1.1/licenses/kerby-util-LICENSE-ASL.txt b/solr-8.1.1/licenses/kerby-util-LICENSE-ASL.txt
new file mode 100644
index 000000000..5c304d1a4
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-util-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/kerby-util-NOTICE.txt b/solr-8.1.1/licenses/kerby-util-NOTICE.txt
new file mode 100644
index 000000000..373b85deb
--- /dev/null
+++ b/solr-8.1.1/licenses/kerby-util-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Kerby
+Copyright 2015-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/langdetect-1.1-20120112.jar.sha1 b/solr-8.1.1/licenses/langdetect-1.1-20120112.jar.sha1
new file mode 100644
index 000000000..d482d3704
--- /dev/null
+++ b/solr-8.1.1/licenses/langdetect-1.1-20120112.jar.sha1
@@ -0,0 +1 @@
+99091df19fff62f815d56d23b412610baf38fe97
diff --git a/solr-8.1.1/licenses/langdetect-LICENSE-ASL.txt b/solr-8.1.1/licenses/langdetect-LICENSE-ASL.txt
new file mode 100644
index 000000000..b320a71d0
--- /dev/null
+++ b/solr-8.1.1/licenses/langdetect-LICENSE-ASL.txt
@@ -0,0 +1,13 @@
+(c)2010 All rights reserved by Cybozu Labs, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/langdetect-NOTICE.txt b/solr-8.1.1/licenses/langdetect-NOTICE.txt
new file mode 100644
index 000000000..86d095f11
--- /dev/null
+++ b/solr-8.1.1/licenses/langdetect-NOTICE.txt
@@ -0,0 +1,3 @@
+langdetect
+
+http://code.google.com/p/language-detection/
diff --git a/solr-8.1.1/licenses/log4j-1.2-api-2.11.2.jar.sha1 b/solr-8.1.1/licenses/log4j-1.2-api-2.11.2.jar.sha1
new file mode 100644
index 000000000..4ad6f9676
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-1.2-api-2.11.2.jar.sha1
@@ -0,0 +1 @@
+afb9ef0baba766725c3733e6a2626877dba72715
diff --git a/solr-8.1.1/licenses/log4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/log4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/log4j-NOTICE.txt b/solr-8.1.1/licenses/log4j-NOTICE.txt
new file mode 100644
index 000000000..d69754231
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache log4j
+Copyright 2010 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/log4j-api-2.11.2.jar.sha1 b/solr-8.1.1/licenses/log4j-api-2.11.2.jar.sha1
new file mode 100644
index 000000000..0cdea100b
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-api-2.11.2.jar.sha1
@@ -0,0 +1 @@
+f5e9a2ffca496057d6891a3de65128efc636e26e
diff --git a/solr-8.1.1/licenses/log4j-api-LICENSE-ASL.txt b/solr-8.1.1/licenses/log4j-api-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-api-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/log4j-api-NOTICE.txt b/solr-8.1.1/licenses/log4j-api-NOTICE.txt
new file mode 100644
index 000000000..bd95322f2
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-api-NOTICE.txt
@@ -0,0 +1,17 @@
+Apache Log4j
+Copyright 1999-2017 Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+ResolverUtil.java
+Copyright 2005-2006 Tim Fennell
+
+Dumbster SMTP test server
+Copyright 2004 Jason Paul Kitchen
+
+TypeUtil.java
+Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams
+
+picocli (http://picocli.info)
+Copyright 2017 Remko Popma
diff --git a/solr-8.1.1/licenses/log4j-core-2.11.2.jar.sha1 b/solr-8.1.1/licenses/log4j-core-2.11.2.jar.sha1
new file mode 100644
index 000000000..ec2acae4d
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-core-2.11.2.jar.sha1
@@ -0,0 +1 @@
+6c2fb3f5b7cd27504726aef1b674b542a0c9cf53
diff --git a/solr-8.1.1/licenses/log4j-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/log4j-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-core-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/log4j-core-NOTICE.txt b/solr-8.1.1/licenses/log4j-core-NOTICE.txt
new file mode 100644
index 000000000..bd95322f2
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-core-NOTICE.txt
@@ -0,0 +1,17 @@
+Apache Log4j
+Copyright 1999-2017 Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+ResolverUtil.java
+Copyright 2005-2006 Tim Fennell
+
+Dumbster SMTP test server
+Copyright 2004 Jason Paul Kitchen
+
+TypeUtil.java
+Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams
+
+picocli (http://picocli.info)
+Copyright 2017 Remko Popma
diff --git a/solr-8.1.1/licenses/log4j-slf4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/log4j-slf4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-slf4j-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/log4j-slf4j-NOTICE.txt b/solr-8.1.1/licenses/log4j-slf4j-NOTICE.txt
new file mode 100644
index 000000000..bd95322f2
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-slf4j-NOTICE.txt
@@ -0,0 +1,17 @@
+Apache Log4j
+Copyright 1999-2017 Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+ResolverUtil.java
+Copyright 2005-2006 Tim Fennell
+
+Dumbster SMTP test server
+Copyright 2004 Jason Paul Kitchen
+
+TypeUtil.java
+Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams
+
+picocli (http://picocli.info)
+Copyright 2017 Remko Popma
diff --git a/solr-8.1.1/licenses/log4j-slf4j-impl-2.11.2.jar.sha1 b/solr-8.1.1/licenses/log4j-slf4j-impl-2.11.2.jar.sha1
new file mode 100644
index 000000000..69bca4b80
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-slf4j-impl-2.11.2.jar.sha1
@@ -0,0 +1 @@
+4d44e4edc4a7fb39f09b95b09f560a15976fa1ba
diff --git a/solr-8.1.1/licenses/log4j-web-2.11.2.jar.sha1 b/solr-8.1.1/licenses/log4j-web-2.11.2.jar.sha1
new file mode 100644
index 000000000..cc4476efe
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-web-2.11.2.jar.sha1
@@ -0,0 +1 @@
+d11ebc03fdf773d32143e0f7ea0fc131c21311e7
diff --git a/solr-8.1.1/licenses/log4j-web-LICENSE-ASL.txt b/solr-8.1.1/licenses/log4j-web-LICENSE-ASL.txt
new file mode 100644
index 000000000..6279e5206
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-web-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 1999-2005 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/log4j-web-NOTICE.txt b/solr-8.1.1/licenses/log4j-web-NOTICE.txt
new file mode 100644
index 000000000..bd95322f2
--- /dev/null
+++ b/solr-8.1.1/licenses/log4j-web-NOTICE.txt
@@ -0,0 +1,17 @@
+Apache Log4j
+Copyright 1999-2017 Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+ResolverUtil.java
+Copyright 2005-2006 Tim Fennell
+
+Dumbster SMTP test server
+Copyright 2004 Jason Paul Kitchen
+
+TypeUtil.java
+Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams
+
+picocli (http://picocli.info)
+Copyright 2017 Remko Popma
diff --git a/solr-8.1.1/licenses/metadata-extractor-2.11.0.jar.sha1 b/solr-8.1.1/licenses/metadata-extractor-2.11.0.jar.sha1
new file mode 100644
index 000000000..39a443b58
--- /dev/null
+++ b/solr-8.1.1/licenses/metadata-extractor-2.11.0.jar.sha1
@@ -0,0 +1 @@
+5f11883f6d06a16ca5fb8a9edf7c6c1237a92da0
diff --git a/solr-8.1.1/licenses/metadata-extractor-LICENSE-PD.txt b/solr-8.1.1/licenses/metadata-extractor-LICENSE-PD.txt
new file mode 100644
index 000000000..71c760910
--- /dev/null
+++ b/solr-8.1.1/licenses/metadata-extractor-LICENSE-PD.txt
@@ -0,0 +1 @@
+See http://www.drewnaoakes.com/drewnoakes.com/code/exif. Site says the software is public domain.
diff --git a/solr-8.1.1/licenses/metrics-core-4.0.5.jar.sha1 b/solr-8.1.1/licenses/metrics-core-4.0.5.jar.sha1
new file mode 100644
index 000000000..f5e12e83a
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-core-4.0.5.jar.sha1
@@ -0,0 +1 @@
+b81ef162970cdb9f4512ee2da09715a856ff4c4c
diff --git a/solr-8.1.1/licenses/metrics-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..e4ba40426
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-core-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/metrics-core-NOTICE.txt b/solr-8.1.1/licenses/metrics-core-NOTICE.txt
new file mode 100644
index 000000000..4fe83de38
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-core-NOTICE.txt
@@ -0,0 +1,11 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/solr-8.1.1/licenses/metrics-graphite-4.0.5.jar.sha1 b/solr-8.1.1/licenses/metrics-graphite-4.0.5.jar.sha1
new file mode 100644
index 000000000..2aa9abb95
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-graphite-4.0.5.jar.sha1
@@ -0,0 +1 @@
+76e8758356373d5aed5abacbda429b38f6e8fa98
diff --git a/solr-8.1.1/licenses/metrics-graphite-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-graphite-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-graphite-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-graphite-NOTICE.txt b/solr-8.1.1/licenses/metrics-graphite-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-graphite-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/metrics-jetty-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-jetty-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jetty-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-jetty-NOTICE.txt b/solr-8.1.1/licenses/metrics-jetty-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jetty-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/metrics-jetty9-4.0.5.jar.sha1 b/solr-8.1.1/licenses/metrics-jetty9-4.0.5.jar.sha1
new file mode 100644
index 000000000..228b179fa
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jetty9-4.0.5.jar.sha1
@@ -0,0 +1 @@
+87f3b49a7377e56f62046875d394ed0028b37690
diff --git a/solr-8.1.1/licenses/metrics-jmx-4.0.5.jar.sha1 b/solr-8.1.1/licenses/metrics-jmx-4.0.5.jar.sha1
new file mode 100644
index 000000000..b70a07de0
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jmx-4.0.5.jar.sha1
@@ -0,0 +1 @@
+d7be4ddd7ba674ee8be1d23d883fb3ca68ee1d54
diff --git a/solr-8.1.1/licenses/metrics-jmx-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-jmx-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jmx-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-jmx-NOTICE.txt b/solr-8.1.1/licenses/metrics-jmx-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jmx-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/metrics-json-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-json-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-json-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-json-NOTICE.txt b/solr-8.1.1/licenses/metrics-json-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-json-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/metrics-jvm-4.0.5.jar.sha1 b/solr-8.1.1/licenses/metrics-jvm-4.0.5.jar.sha1
new file mode 100644
index 000000000..176a65f9f
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jvm-4.0.5.jar.sha1
@@ -0,0 +1 @@
+09f6f1e6c1db440d9ad4c3114f17be40f66bb399
diff --git a/solr-8.1.1/licenses/metrics-jvm-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-jvm-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jvm-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-jvm-NOTICE.txt b/solr-8.1.1/licenses/metrics-jvm-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-jvm-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/metrics-servlets-LICENSE-ASL.txt b/solr-8.1.1/licenses/metrics-servlets-LICENSE-ASL.txt
new file mode 100644
index 000000000..ccb320c7d
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-servlets-LICENSE-ASL.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2010-2012 Coda Hale and Yammer, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/metrics-servlets-NOTICE.txt b/solr-8.1.1/licenses/metrics-servlets-NOTICE.txt
new file mode 100644
index 000000000..b4c629847
--- /dev/null
+++ b/solr-8.1.1/licenses/metrics-servlets-NOTICE.txt
@@ -0,0 +1,12 @@
+Metrics
+Copyright 2010-2013 Coda Hale and Yammer, Inc.
+
+This product includes software developed by Coda Hale and Yammer, Inc.
+
+This product includes code derived from the JSR-166 project (ThreadLocalRandom, Striped64,
+LongAdder), which was released with the following comments:
+
+ Written by Doug Lea with assistance from members of JCP JSR-166
+ Expert Group and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
diff --git a/solr-8.1.1/licenses/mina-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/mina-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..3615005dc
--- /dev/null
+++ b/solr-8.1.1/licenses/mina-core-LICENSE-ASL.txt
@@ -0,0 +1,341 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+--------------------------------------------------------------------------------------------------
+ANTLR 2 License
+
+We reserve no legal rights to the ANTLR--it is fully in the public domain. An individual or company
+may do whatever they wish with source code distributed with ANTLR or the code generated by ANTLR,
+including the incorporation of ANTLR, or its output, into commerical software.
+
+We encourage users to develop software with ANTLR. However, we do ask that credit is given to us
+for developing ANTLR. By "credit", we mean that if you use ANTLR or incorporate any source code
+into one of your programs (commercial product, research project, or otherwise) that you acknowledge
+this fact somewhere in the documentation, research report, etc... If you like ANTLR and have developed
+a nice tool with the output, please mention that you developed it using ANTLR. In addition, we ask that
+the headers remain intact in our source code. As long as these guidelines are kept, we expect to
+continue enhancing this system and expect to make other tools available as they are completed.
+
+--------------------------------------------------------------------------------------------------
+/**
+ * JDBM LICENSE v1.00
+ *
+ * Redistribution and use of this software and associated documentation
+ * ("Software"), with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain copyright
+ * statements and notices. Redistributions must also contain a
+ * copy of this document.
+ *
+ * 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. The name "JDBM" must not be used to endorse or promote
+ * products derived from this Software without prior written
+ * permission of Cees de Groot. For written permission,
+ * please contact cg@cdegroot.com.
+ *
+ * 4. Products derived from this Software may not be called "JDBM"
+ * nor may "JDBM" appear in their names without prior written
+ * permission of Cees de Groot.
+ *
+ * 5. Due credit should be given to the JDBM Project
+ * (http://jdbm.sourceforge.net/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESSED 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
+ * CEES DE GROOT OR ANY 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.
+ *
+ * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
+ * Contributions are Copyright (C) 2000 by their associated contributors.
+ *
+ * $Id: LICENSE.txt,v 1.1 2000/05/05 23:59:52 boisvert Exp $
+ */
+--------------------------------------------------------------------------------------------------
+Copyright (c) 2000-2006 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+
+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.
+--------------------------------------------------------------------------------------------------
+JUG (package org/safehaus/uuid) is licensed under the AL v2.
+--------------------------------------------------------------------------------------------------
+Spring is licensed under the AL v2.
+--------------------------------------------------------------------------------------------------
+slf4j license:
+Copyright (c) 2004-2007 QOS.ch 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.
+--------------------------------------------------------------------------------------------------
+Copyright (c) 1999, 2004 Tanuki Software
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of the Java Service Wrapper 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, sub-license,
+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
+NON-INFRINGEMENT. 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.
+
+
+Portions of the Software have been derived from source code
+developed by Silver Egg Technology under the following license:
+
+Copyright (c) 2001 Silver Egg Technology
+
+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, sub-license, 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.
diff --git a/solr-8.1.1/licenses/mina-core-NOTICE.txt b/solr-8.1.1/licenses/mina-core-NOTICE.txt
new file mode 100644
index 000000000..9b8ad59ea
--- /dev/null
+++ b/solr-8.1.1/licenses/mina-core-NOTICE.txt
@@ -0,0 +1,7 @@
+
+Apache MINA
+Copyright 2004-2009 Apache MINA Project
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/solr-8.1.1/licenses/mockito-core-2.23.4.jar.sha1 b/solr-8.1.1/licenses/mockito-core-2.23.4.jar.sha1
new file mode 100644
index 000000000..725998b2f
--- /dev/null
+++ b/solr-8.1.1/licenses/mockito-core-2.23.4.jar.sha1
@@ -0,0 +1 @@
+a35b6f8ffcfa786771eac7d7d903429e790fdf3f
diff --git a/solr-8.1.1/licenses/mockito-core-LICENSE-MIT.txt b/solr-8.1.1/licenses/mockito-core-LICENSE-MIT.txt
new file mode 100644
index 000000000..5a311f7c5
--- /dev/null
+++ b/solr-8.1.1/licenses/mockito-core-LICENSE-MIT.txt
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2007 Mockito contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/solr-8.1.1/licenses/morfologik-fsa-2.1.5.jar.sha1 b/solr-8.1.1/licenses/morfologik-fsa-2.1.5.jar.sha1
new file mode 100644
index 000000000..638ac0722
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-fsa-2.1.5.jar.sha1
@@ -0,0 +1 @@
+8c28fea0e928b6eb1070926ad5820a3013020fa5
diff --git a/solr-8.1.1/licenses/morfologik-fsa-LICENSE-BSD.txt b/solr-8.1.1/licenses/morfologik-fsa-LICENSE-BSD.txt
new file mode 100644
index 000000000..5dc83a738
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-fsa-LICENSE-BSD.txt
@@ -0,0 +1,29 @@
+
+Copyright (c) 2006 Dawid Weiss
+Copyright (c) 2007-2016 Dawid Weiss, Marcin Miłkowski
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the name of Morfologik nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/morfologik-fsa-NOTICE.txt b/solr-8.1.1/licenses/morfologik-fsa-NOTICE.txt
new file mode 100644
index 000000000..18ba2f3e3
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-fsa-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes BSD-licensed software developed by Dawid Weiss and Marcin Miłkowski
+(http://morfologik.blogspot.com/).
diff --git a/solr-8.1.1/licenses/morfologik-polish-2.1.5.jar.sha1 b/solr-8.1.1/licenses/morfologik-polish-2.1.5.jar.sha1
new file mode 100644
index 000000000..cb29f244a
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-polish-2.1.5.jar.sha1
@@ -0,0 +1 @@
+9e3dd781cf27337d64ab1bb0fc98d8b6c0fecf59
diff --git a/solr-8.1.1/licenses/morfologik-polish-LICENSE-BSD.txt b/solr-8.1.1/licenses/morfologik-polish-LICENSE-BSD.txt
new file mode 100644
index 000000000..b8152d29e
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-polish-LICENSE-BSD.txt
@@ -0,0 +1,28 @@
+BSD-licensed dictionary of Polish (Morfologik)
+
+VERSION: 2.1 PoliMorf
+BUILD: 2016-02-13 19:37:50+01:00
+GIT: 6e63b53
+
+Copyright (c) 2016, Marcin Miłkowski
+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.
+
+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 OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/morfologik-polish-NOTICE.txt b/solr-8.1.1/licenses/morfologik-polish-NOTICE.txt
new file mode 100644
index 000000000..f200970f3
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-polish-NOTICE.txt
@@ -0,0 +1,3 @@
+
+This product includes data from BSD-licensed dictionary of Polish (Morfologik, PoliMorf)
+(http://morfologik.blogspot.com/)
diff --git a/solr-8.1.1/licenses/morfologik-stemming-2.1.5.jar.sha1 b/solr-8.1.1/licenses/morfologik-stemming-2.1.5.jar.sha1
new file mode 100644
index 000000000..56e3d9708
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-stemming-2.1.5.jar.sha1
@@ -0,0 +1 @@
+a195cbd8ffa3481ea0608a8ec1518f9fc771e78f
diff --git a/solr-8.1.1/licenses/morfologik-stemming-LICENSE-BSD.txt b/solr-8.1.1/licenses/morfologik-stemming-LICENSE-BSD.txt
new file mode 100644
index 000000000..5dc83a738
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-stemming-LICENSE-BSD.txt
@@ -0,0 +1,29 @@
+
+Copyright (c) 2006 Dawid Weiss
+Copyright (c) 2007-2016 Dawid Weiss, Marcin Miłkowski
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the name of Morfologik nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/morfologik-stemming-NOTICE.txt b/solr-8.1.1/licenses/morfologik-stemming-NOTICE.txt
new file mode 100644
index 000000000..18ba2f3e3
--- /dev/null
+++ b/solr-8.1.1/licenses/morfologik-stemming-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes BSD-licensed software developed by Dawid Weiss and Marcin Miłkowski
+(http://morfologik.blogspot.com/).
diff --git a/solr-8.1.1/licenses/netty-all-4.0.52.Final.jar.sha1 b/solr-8.1.1/licenses/netty-all-4.0.52.Final.jar.sha1
new file mode 100644
index 000000000..c95a6c896
--- /dev/null
+++ b/solr-8.1.1/licenses/netty-all-4.0.52.Final.jar.sha1
@@ -0,0 +1 @@
+6adde4fa5e7b8ff8a25500a66b369a110a047862
diff --git a/solr-8.1.1/licenses/netty-all-LICENSE-ASL.txt b/solr-8.1.1/licenses/netty-all-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/netty-all-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/netty-all-NOTICE.txt b/solr-8.1.1/licenses/netty-all-NOTICE.txt
new file mode 100644
index 000000000..f97366367
--- /dev/null
+++ b/solr-8.1.1/licenses/netty-all-NOTICE.txt
@@ -0,0 +1,223 @@
+
+ The Netty Project
+ =================
+
+Please visit the Netty web site for more information:
+
+ * http://netty.io/
+
+Copyright 2014 The Netty Project
+
+The Netty Project licenses this file to you under the Apache License,
+version 2.0 (the "License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at:
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations
+under the License.
+
+Also, please refer to each LICENSE.<component>.txt file, which is located in
+the 'license' directory of the distribution file, for the license terms of the
+components that this product depends on.
+
+-------------------------------------------------------------------------------
+This product contains the extensions to Java Collections Framework which has
+been derived from the works by JSR-166 EG, Doug Lea, and Jason T. Greene:
+
+ * LICENSE:
+ * license/LICENSE.jsr166y.txt (Public Domain)
+ * HOMEPAGE:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/
+ * http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/
+
+This product contains a modified version of Robert Harder's Public Domain
+Base64 Encoder and Decoder, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.base64.txt (Public Domain)
+ * HOMEPAGE:
+ * http://iharder.sourceforge.net/current/java/base64/
+
+This product contains a modified portion of 'Webbit', an event based
+WebSocket and HTTP server, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.webbit.txt (BSD License)
+ * HOMEPAGE:
+ * https://github.com/joewalnes/webbit
+
+This product contains a modified portion of 'SLF4J', a simple logging
+facade for Java, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.slf4j.txt (MIT License)
+ * HOMEPAGE:
+ * http://www.slf4j.org/
+
+This product contains a modified portion of 'Apache Harmony', an open source
+Java SE, which can be obtained at:
+
+ * NOTICE:
+ * license/NOTICE.harmony.txt
+ * LICENSE:
+ * license/LICENSE.harmony.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * http://archive.apache.org/dist/harmony/
+
+This product contains a modified portion of 'jbzip2', a Java bzip2 compression
+and decompression library written by Matthew J. Francis. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.jbzip2.txt (MIT License)
+ * HOMEPAGE:
+ * https://code.google.com/p/jbzip2/
+
+This product contains a modified portion of 'libdivsufsort', a C API library to construct
+the suffix array and the Burrows-Wheeler transformed string for any input string of
+a constant-size alphabet written by Yuta Mori. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.libdivsufsort.txt (MIT License)
+ * HOMEPAGE:
+ * https://github.com/y-256/libdivsufsort
+
+This product contains a modified portion of Nitsan Wakart's 'JCTools', Java Concurrency Tools for the JVM,
+ which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.jctools.txt (ASL2 License)
+ * HOMEPAGE:
+ * https://github.com/JCTools/JCTools
+
+This product optionally depends on 'JZlib', a re-implementation of zlib in
+pure Java, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.jzlib.txt (BSD style License)
+ * HOMEPAGE:
+ * http://www.jcraft.com/jzlib/
+
+This product optionally depends on 'Compress-LZF', a Java library for encoding and
+decoding data in LZF format, written by Tatu Saloranta. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.compress-lzf.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/ning/compress
+
+This product optionally depends on 'lz4', a LZ4 Java compression
+and decompression library written by Adrien Grand. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.lz4.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/jpountz/lz4-java
+
+This product optionally depends on 'lzma-java', a LZMA Java compression
+and decompression library, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.lzma-java.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/jponge/lzma-java
+
+This product contains a modified portion of 'jfastlz', a Java port of FastLZ compression
+and decompression library written by William Kinney. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.jfastlz.txt (MIT License)
+ * HOMEPAGE:
+ * https://code.google.com/p/jfastlz/
+
+This product contains a modified portion of and optionally depends on 'Protocol Buffers', Google's data
+interchange format, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.protobuf.txt (New BSD License)
+ * HOMEPAGE:
+ * https://github.com/google/protobuf
+
+This product optionally depends on 'Bouncy Castle Crypto APIs' to generate
+a temporary self-signed X.509 certificate when the JVM does not provide the
+equivalent functionality. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.bouncycastle.txt (MIT License)
+ * HOMEPAGE:
+ * http://www.bouncycastle.org/
+
+This product optionally depends on 'Snappy', a compression library produced
+by Google Inc, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.snappy.txt (New BSD License)
+ * HOMEPAGE:
+ * https://github.com/google/snappy
+
+This product optionally depends on 'JBoss Marshalling', an alternative Java
+serialization API, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.jboss-marshalling.txt (GNU LGPL 2.1)
+ * HOMEPAGE:
+ * http://www.jboss.org/jbossmarshalling
+
+This product optionally depends on 'Caliper', Google's micro-
+benchmarking framework, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.caliper.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/google/caliper
+
+This product optionally depends on 'Apache Commons Logging', a logging
+framework, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.commons-logging.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * http://commons.apache.org/logging/
+
+This product optionally depends on 'Apache Log4J', a logging framework, which
+can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.log4j.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * http://logging.apache.org/log4j/
+
+This product optionally depends on 'Aalto XML', an ultra-high performance
+non-blocking XML processor, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.aalto-xml.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * http://wiki.fasterxml.com/AaltoHome
+
+This product contains a modified version of 'HPACK', a Java implementation of
+the HTTP/2 HPACK algorithm written by Twitter. It can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.hpack.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/twitter/hpack
+
+This product contains a modified portion of 'Apache Commons Lang', a Java library
+provides utilities for the java.lang API, which can be obtained at:
+
+ * LICENSE:
+ * license/LICENSE.commons-lang.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://commons.apache.org/proper/commons-lang/
+
+
+This product contains the Maven wrapper scripts from 'Maven Wrapper', that provides an easy way to ensure a user has everything necessary to run the Maven build.
+
+ * LICENSE:
+ * license/LICENSE.mvn-wrapper.txt (Apache License 2.0)
+ * HOMEPAGE:
+ * https://github.com/takari/maven-wrapper
diff --git a/solr-8.1.1/licenses/noggit-0.8.jar.sha1 b/solr-8.1.1/licenses/noggit-0.8.jar.sha1
new file mode 100644
index 000000000..6a004387a
--- /dev/null
+++ b/solr-8.1.1/licenses/noggit-0.8.jar.sha1
@@ -0,0 +1 @@
+ba4ad65a62d7dfcf97a8d42c82ae7d8824f9087f
diff --git a/solr-8.1.1/licenses/noggit-LICENSE-ASL.txt b/solr-8.1.1/licenses/noggit-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/noggit-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/noggit-NOTICE.txt b/solr-8.1.1/licenses/noggit-NOTICE.txt
new file mode 100644
index 000000000..3bf8aefcd
--- /dev/null
+++ b/solr-8.1.1/licenses/noggit-NOTICE.txt
@@ -0,0 +1,3 @@
+noggit
+
+https://github.com/yonik/noggit
diff --git a/solr-8.1.1/licenses/objenesis-2.6.jar.sha1 b/solr-8.1.1/licenses/objenesis-2.6.jar.sha1
new file mode 100644
index 000000000..277e036b1
--- /dev/null
+++ b/solr-8.1.1/licenses/objenesis-2.6.jar.sha1
@@ -0,0 +1 @@
+639033469776fd37c08358c6b92a4761feb2af4b
diff --git a/solr-8.1.1/licenses/objenesis-LICENSE-ASL.txt b/solr-8.1.1/licenses/objenesis-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/objenesis-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/objenesis-NOTICE.txt b/solr-8.1.1/licenses/objenesis-NOTICE.txt
new file mode 100644
index 000000000..bee3251ae
--- /dev/null
+++ b/solr-8.1.1/licenses/objenesis-NOTICE.txt
@@ -0,0 +1,8 @@
+// ------------------------------------------------------------------
+// NOTICE file corresponding to the section 4d of The Apache License,
+// Version 2.0, in this case for Objenesis
+// ------------------------------------------------------------------
+
+Objenesis
+Copyright 2006-2009 Joe Walnes, Henri Tremblay, Leonardo Mesquita
+
diff --git a/solr-8.1.1/licenses/opennlp-tools-1.9.1.jar.sha1 b/solr-8.1.1/licenses/opennlp-tools-1.9.1.jar.sha1
new file mode 100644
index 000000000..efc21aa91
--- /dev/null
+++ b/solr-8.1.1/licenses/opennlp-tools-1.9.1.jar.sha1
@@ -0,0 +1 @@
+8145429d82a4b811fdd3390557dbe6546b0153ad
diff --git a/solr-8.1.1/licenses/opennlp-tools-LICENSE-ASL.txt b/solr-8.1.1/licenses/opennlp-tools-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/opennlp-tools-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/opennlp-tools-NOTICE.txt b/solr-8.1.1/licenses/opennlp-tools-NOTICE.txt
new file mode 100644
index 000000000..68a08dc4d
--- /dev/null
+++ b/solr-8.1.1/licenses/opennlp-tools-NOTICE.txt
@@ -0,0 +1,6 @@
+
+Apache OpenNLP Tools
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/licenses/org.restlet-2.3.0.jar.sha1 b/solr-8.1.1/licenses/org.restlet-2.3.0.jar.sha1
new file mode 100644
index 000000000..77e949d32
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet-2.3.0.jar.sha1
@@ -0,0 +1 @@
+4c5d184e23fa729726668a90dc7338d80c4e7e6f
diff --git a/solr-8.1.1/licenses/org.restlet-LICENSE-ASL.txt b/solr-8.1.1/licenses/org.restlet-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/org.restlet-NOTICE.txt b/solr-8.1.1/licenses/org.restlet-NOTICE.txt
new file mode 100644
index 000000000..a2aa4627e
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+the Restlet project (http://www.restlet.org).
diff --git a/solr-8.1.1/licenses/org.restlet.ext.servlet-2.3.0.jar.sha1 b/solr-8.1.1/licenses/org.restlet.ext.servlet-2.3.0.jar.sha1
new file mode 100644
index 000000000..32c31ad33
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet.ext.servlet-2.3.0.jar.sha1
@@ -0,0 +1 @@
+9303e20d0397c0304342943560c3a1693fd7ce7d
diff --git a/solr-8.1.1/licenses/org.restlet.ext.servlet-LICENSE-ASL.txt b/solr-8.1.1/licenses/org.restlet.ext.servlet-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet.ext.servlet-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/org.restlet.ext.servlet-NOTICE.txt b/solr-8.1.1/licenses/org.restlet.ext.servlet-NOTICE.txt
new file mode 100644
index 000000000..6f139d6e8
--- /dev/null
+++ b/solr-8.1.1/licenses/org.restlet.ext.servlet-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+the SimpleXML project (http://simple.sourceforge.net).
diff --git a/solr-8.1.1/licenses/parso-2.0.9.jar.sha1 b/solr-8.1.1/licenses/parso-2.0.9.jar.sha1
new file mode 100644
index 000000000..d292e7ef7
--- /dev/null
+++ b/solr-8.1.1/licenses/parso-2.0.9.jar.sha1
@@ -0,0 +1 @@
+615d910051b7c4695397e6686cf840caf6216e19
diff --git a/solr-8.1.1/licenses/parso-LICENSE-ASL.txt b/solr-8.1.1/licenses/parso-LICENSE-ASL.txt
new file mode 100644
index 000000000..3761b7ec0
--- /dev/null
+++ b/solr-8.1.1/licenses/parso-LICENSE-ASL.txt
@@ -0,0 +1,234 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+CONTRIBUTIONS TO THE ORIGINAL CODEBASE
+
+Apache FontBox is based on contributions made to the original FontBox project:
+
+ Copyright (c) 2006-2007, www.fontbox.org
+ 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 fontbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/parso-NOTICE.txt b/solr-8.1.1/licenses/parso-NOTICE.txt
new file mode 100644
index 000000000..3761b7ec0
--- /dev/null
+++ b/solr-8.1.1/licenses/parso-NOTICE.txt
@@ -0,0 +1,234 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+CONTRIBUTIONS TO THE ORIGINAL CODEBASE
+
+Apache FontBox is based on contributions made to the original FontBox project:
+
+ Copyright (c) 2006-2007, www.fontbox.org
+ 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 fontbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/pdfbox-2.0.12.jar.sha1 b/solr-8.1.1/licenses/pdfbox-2.0.12.jar.sha1
new file mode 100644
index 000000000..d190b7e23
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-2.0.12.jar.sha1
@@ -0,0 +1 @@
+a7311cd267c19e1ba8154b076a63d29537154784
diff --git a/solr-8.1.1/licenses/pdfbox-LICENSE-ASL.txt b/solr-8.1.1/licenses/pdfbox-LICENSE-ASL.txt
new file mode 100644
index 000000000..d1f4d5cc0
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-LICENSE-ASL.txt
@@ -0,0 +1,314 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+EXTERNAL COMPONENTS
+
+Apache PDFBox includes a number of components with separate copyright notices
+and license terms. Your use of these components is subject to the terms and
+conditions of the following licenses.
+
+Contributions made to the original PDFBox project:
+
+ Copyright (c) 2002-2007, www.pdfbox.org
+ 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 pdfbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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.
+
+Adobe Font Metrics (AFM) for PDF Core 14 Fonts
+
+ This file and the 14 PostScript(R) AFM files it accompanies may be used,
+ copied, and distributed for any purpose and without charge, with or without
+ modification, provided that all copyright notices are retained; that the
+ AFM files are not distributed without this file; that all modifications
+ to this file or any of the AFM files are prominently noted in the modified
+ file(s); and that this paragraph is not modified. Adobe Systems has no
+ responsibility or obligation to support the use of the AFM files.
+
+CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads)
+
+ Copyright 1990-2009 Adobe Systems Incorporated.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 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.
+
+ Neither the name of Adobe Systems Incorporated 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.
+
+Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html)
+
+ Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this documentation file to use, copy, publish, distribute,
+ sublicense, and/or sell copies of the documentation, and to permit
+ others to do the same, provided that:
+ - No modification, editing or other alteration of this document is
+ allowed; and
+ - The above copyright notice and this permission notice shall be
+ included in all copies of the documentation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this documentation file, to create their own derivative works
+ from the content of this document to use, copy, publish, distribute,
+ sublicense, and/or sell the derivative works, and to permit others to do
+ the same, provided that the derived work is not represented as being a
+ copy or version of this document.
+
+ Adobe shall not be liable to any party for any loss of revenue or profit
+ or for indirect, incidental, special, consequential, or other similar
+ damages, whether based on tort (including without limitation negligence
+ or strict liability), contract or other legal or equitable grounds even
+ if Adobe has been advised or had reason to know of the possibility of
+ such damages. The Adobe materials are provided on an "AS IS" basis.
+ Adobe specifically disclaims all express, statutory, or implied
+ warranties relating to the Adobe materials, including but not limited to
+ those concerning merchantability or fitness for a particular purpose or
+ non-infringement of any third party rights regarding the Adobe
+ materials.
+
diff --git a/solr-8.1.1/licenses/pdfbox-NOTICE.txt b/solr-8.1.1/licenses/pdfbox-NOTICE.txt
new file mode 100644
index 000000000..0d67b51ff
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-NOTICE.txt
@@ -0,0 +1,14 @@
+Apache PDFBox
+Copyright 2011 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Based on source code originally developed in the PDFBox, JempBox and
+FontBox projects.
+Copyright (c) 2002-2007, www.pdfbox.org
+Copyright (c) 2006-2007, www.jempbox.org
+
+Based on source code originally developed in the PaDaF project.
+Copyright (c) 2010 Atos Worldline SAS
+
diff --git a/solr-8.1.1/licenses/pdfbox-tools-2.0.12.jar.sha1 b/solr-8.1.1/licenses/pdfbox-tools-2.0.12.jar.sha1
new file mode 100644
index 000000000..226084a79
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-tools-2.0.12.jar.sha1
@@ -0,0 +1 @@
+0e4569e8364f33be1c0af889f62b0f8f4dca7d45
diff --git a/solr-8.1.1/licenses/pdfbox-tools-LICENSE-ASL.txt b/solr-8.1.1/licenses/pdfbox-tools-LICENSE-ASL.txt
new file mode 100644
index 000000000..d1f4d5cc0
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-tools-LICENSE-ASL.txt
@@ -0,0 +1,314 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+EXTERNAL COMPONENTS
+
+Apache PDFBox includes a number of components with separate copyright notices
+and license terms. Your use of these components is subject to the terms and
+conditions of the following licenses.
+
+Contributions made to the original PDFBox project:
+
+ Copyright (c) 2002-2007, www.pdfbox.org
+ 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 pdfbox; nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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.
+
+Adobe Font Metrics (AFM) for PDF Core 14 Fonts
+
+ This file and the 14 PostScript(R) AFM files it accompanies may be used,
+ copied, and distributed for any purpose and without charge, with or without
+ modification, provided that all copyright notices are retained; that the
+ AFM files are not distributed without this file; that all modifications
+ to this file or any of the AFM files are prominently noted in the modified
+ file(s); and that this paragraph is not modified. Adobe Systems has no
+ responsibility or obligation to support the use of the AFM files.
+
+CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads)
+
+ Copyright 1990-2009 Adobe Systems Incorporated.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 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.
+
+ Neither the name of Adobe Systems Incorporated 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.
+
+Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html)
+
+ Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this documentation file to use, copy, publish, distribute,
+ sublicense, and/or sell copies of the documentation, and to permit
+ others to do the same, provided that:
+ - No modification, editing or other alteration of this document is
+ allowed; and
+ - The above copyright notice and this permission notice shall be
+ included in all copies of the documentation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this documentation file, to create their own derivative works
+ from the content of this document to use, copy, publish, distribute,
+ sublicense, and/or sell the derivative works, and to permit others to do
+ the same, provided that the derived work is not represented as being a
+ copy or version of this document.
+
+ Adobe shall not be liable to any party for any loss of revenue or profit
+ or for indirect, incidental, special, consequential, or other similar
+ damages, whether based on tort (including without limitation negligence
+ or strict liability), contract or other legal or equitable grounds even
+ if Adobe has been advised or had reason to know of the possibility of
+ such damages. The Adobe materials are provided on an "AS IS" basis.
+ Adobe specifically disclaims all express, statutory, or implied
+ warranties relating to the Adobe materials, including but not limited to
+ those concerning merchantability or fitness for a particular purpose or
+ non-infringement of any third party rights regarding the Adobe
+ materials.
+
diff --git a/solr-8.1.1/licenses/pdfbox-tools-NOTICE.txt b/solr-8.1.1/licenses/pdfbox-tools-NOTICE.txt
new file mode 100644
index 000000000..0d67b51ff
--- /dev/null
+++ b/solr-8.1.1/licenses/pdfbox-tools-NOTICE.txt
@@ -0,0 +1,14 @@
+Apache PDFBox
+Copyright 2011 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Based on source code originally developed in the PDFBox, JempBox and
+FontBox projects.
+Copyright (c) 2002-2007, www.pdfbox.org
+Copyright (c) 2006-2007, www.jempbox.org
+
+Based on source code originally developed in the PaDaF project.
+Copyright (c) 2010 Atos Worldline SAS
+
diff --git a/solr-8.1.1/licenses/poi-4.0.0.jar.sha1 b/solr-8.1.1/licenses/poi-4.0.0.jar.sha1
new file mode 100644
index 000000000..503cc5bbe
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-4.0.0.jar.sha1
@@ -0,0 +1 @@
+7ddb9b983ed682c93a986e8bb596d5935b13086c
diff --git a/solr-8.1.1/licenses/poi-LICENSE-ASL.txt b/solr-8.1.1/licenses/poi-LICENSE-ASL.txt
new file mode 100644
index 000000000..09d38da72
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-LICENSE-ASL.txt
@@ -0,0 +1,537 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE POI SUBCOMPONENTS:
+
+Apache POI includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses:
+
+
+Office Open XML schemas (ooxml-schemas-1.*.jar)
+
+ The Office Open XML schema definitions used by Apache POI are
+ a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
+ As defined in section 9.4 of the ECMA bylaws [2], this specification
+ is available to all interested parties without restriction:
+
+ 9.4 All documents when approved shall be made available to
+ all interested parties without restriction.
+
+ Furthermore, both Microsoft and Adobe have granted patent licenses
+ to this work [3,4,5].
+
+ [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
+ [2] http://www.ecma-international.org/memento/Ecmabylaws.htm
+ [3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
+ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
+ [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Adobe%20Patent%20Declaration.pdf
+
+
+Bouncy Castle library (bcprov-*.jar, bcpg-*.jar, bcpkix-*.jar)
+
+ 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.
+
+JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
+
+ Eclipse Public License - v 1.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+
+ "Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from
+ a Contributor if it was added to the Program by such Contributor itself or
+ anyone acting on such Contributor's behalf. Contributions do not include
+ additions to the Program which: (i) are separate modules of software
+ distributed in conjunction with the Program under their own license agreement,
+ and (ii) are not derivative works of the Program.
+
+ "Contributor" means any person or entity that distributes the Program.
+
+ "Licensed Patents" mean patent claims licensable by a Contributor which are
+ necessarily infringed by the use or sale of its Contribution alone or when
+ combined with the Program.
+
+ "Program" means the Contributions distributed in accordance with this Agreement.
+
+ "Recipient" means anyone who receives the Program under this Agreement,
+ including all Contributors.
+
+ 2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code
+ and object code form. This patent license shall apply to the combination
+ of the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if
+ a third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+ 3. REQUIREMENTS
+
+ A Contributor may choose to distribute the Program in object code form under
+ its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of
+ title and non-infringement, and implied warranties or conditions of
+ merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+ When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+ Each Contributor must identify itself as the originator of its Contribution,
+ if any, in a manner that reasonably allows subsequent Recipients to identify
+ the originator of the Contribution.
+
+ 4. COMMERCIAL DISTRIBUTION
+
+ Commercial distributors of software may accept certain responsibilities with
+ respect to end users, business partners and the like. While this license is
+ intended to facilitate the commercial use of the Program, the Contributor
+ who includes the Program in a commercial product offering should do so in a
+ manner which does not create potential liability for other Contributors.
+ Therefore, if a Contributor includes the Program in a commercial product
+ offering, such Contributor ("Commercial Contributor") hereby agrees to
+ defend and indemnify every other Contributor ("Indemnified Contributor")
+ against any losses, damages and costs (collectively "Losses") arising from
+ claims, lawsuits and other legal actions brought by a third party against
+ the Indemnified Contributor to the extent caused by the acts or omissions
+ of such Commercial Contributor in connection with its distribution of the
+ Program in a commercial product offering. The obligations in this section
+ do not apply to any claims or Losses relating to any actual or alleged
+ intellectual property infringement. In order to qualify, an Indemnified
+ Contributor must: a) promptly notify the Commercial Contributor in writing
+ of such claim, and b) allow the Commercial Contributor to control, and
+ cooperate with the Commercial Contributor in, the defense and any related
+ settlement negotiations. The Indemnified Contributor may participate in any
+ such claim at its own expense.
+
+ For example, a Contributor might include the Program in a commercial product
+ offering, Product X. That Contributor is then a Commercial Contributor. If
+ that Commercial Contributor then makes performance claims, or offers
+ warranties related to Product X, those performance claims and warranties are
+ such Commercial Contributor's responsibility alone. Under this section, the
+ Commercial Contributor would have to defend claims against the other
+ Contributors related to those performance claims and warranties, and if a
+ court requires any other Contributor to pay any damages as a result, the
+ Commercial Contributor must pay those damages.
+
+ 5. NO WARRANTY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
+ AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
+ EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+ CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
+ PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
+ appropriateness of using and distributing the Program and assumes all risks
+ associated with its exercise of rights under this Agreement , including but
+ not limited to the risks and costs of program errors, compliance with
+ applicable laws, damage to or loss of data, programs or equipment, and
+ unavailability or interruption of operations.
+
+ 6. DISCLAIMER OF LIABILITY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+ LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGES.
+
+ 7. GENERAL
+
+ If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+
+ If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+
+ All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program as
+ soon as reasonably practicable. However, Recipient's obligations under this
+ Agreement and any licenses granted by Recipient relating to the Program
+ shall continue and survive.
+
+ Everyone is permitted to copy and distribute copies of this Agreement, but
+ in order to avoid inconsistency the Agreement is copyrighted and may only
+ be modified in the following manner. The Agreement Steward reserves the
+ right to publish new versions (including revisions) of this Agreement from
+ time to time. No one other than the Agreement Steward has the right to
+ modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to distribute
+ the Program (including its Contributions) under the new version. Except as
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+ rights or licenses to the intellectual property of any Contributor under
+ this Agreement, whether expressly, by implication, estoppel or otherwise.
+ All rights in the Program not expressly granted under this Agreement are
+ reserved.
+
+ This Agreement is governed by the laws of the State of New York and the
+ intellectual property laws of the United States of America. No party to this
+ Agreement will bring a legal action under this Agreement more than one year
+ after the cause of action arose. Each party waives its rights to a jury
+ trial in any resulting litigation.
+
+Hamcrest library (hamcrest-*.jar) & CuvesAPI / Curve API
+
+ BSD License
+
+ Copyright (c) 2000-2006, www.hamcrest.org
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. 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.
+
+ Neither the name of Hamcrest 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 OWNER 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.
+
+SLF4J library (slf4j-api-*.jar)
+
+ Copyright (c) 2004-2013 QOS.ch
+ 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.
+
+inbot-utils (https://github.com/Inbot/inbot-utils)
+
+ The MIT License (MIT)
+
+ Copyright (c) 2015 Inbot
+
+ 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.
diff --git a/solr-8.1.1/licenses/poi-NOTICE.txt b/solr-8.1.1/licenses/poi-NOTICE.txt
new file mode 100644
index 000000000..251850655
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-NOTICE.txt
@@ -0,0 +1,24 @@
+Apache POI
+Copyright 2003-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (https://www.apache.org/).
+
+This product contains parts that were originally based on software from BEA.
+Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link),
+which was acquired by Oracle Corporation in 2008.
+<http://www.oracle.com/us/corporate/Acquisitions/bea/index.html>
+<https://en.wikipedia.org/wiki/BEA_Systems>
+
+This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
+World Wide Web Consortium (Massachusetts Institute of Technology, European
+Research Consortium for Informatics and Mathematics, Keio University)
+
+This product contains the chunks_parse_cmds.tbl file from the vsdump program.
+Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
+
+This product contains parts of the eID Applet project
+<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
+Copyright (c) 2009-2014
+FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
+Bart Hanssens from FedICT
diff --git a/solr-8.1.1/licenses/poi-ooxml-4.0.0.jar.sha1 b/solr-8.1.1/licenses/poi-ooxml-4.0.0.jar.sha1
new file mode 100644
index 000000000..82f38e8f1
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-4.0.0.jar.sha1
@@ -0,0 +1 @@
+f3fa9c2bd64eb3ec15378de960a07d077ae5b26d
diff --git a/solr-8.1.1/licenses/poi-ooxml-LICENSE-ASL.txt b/solr-8.1.1/licenses/poi-ooxml-LICENSE-ASL.txt
new file mode 100644
index 000000000..09d38da72
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-LICENSE-ASL.txt
@@ -0,0 +1,537 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE POI SUBCOMPONENTS:
+
+Apache POI includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses:
+
+
+Office Open XML schemas (ooxml-schemas-1.*.jar)
+
+ The Office Open XML schema definitions used by Apache POI are
+ a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
+ As defined in section 9.4 of the ECMA bylaws [2], this specification
+ is available to all interested parties without restriction:
+
+ 9.4 All documents when approved shall be made available to
+ all interested parties without restriction.
+
+ Furthermore, both Microsoft and Adobe have granted patent licenses
+ to this work [3,4,5].
+
+ [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
+ [2] http://www.ecma-international.org/memento/Ecmabylaws.htm
+ [3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
+ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
+ [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Adobe%20Patent%20Declaration.pdf
+
+
+Bouncy Castle library (bcprov-*.jar, bcpg-*.jar, bcpkix-*.jar)
+
+ 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.
+
+JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
+
+ Eclipse Public License - v 1.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+
+ "Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from
+ a Contributor if it was added to the Program by such Contributor itself or
+ anyone acting on such Contributor's behalf. Contributions do not include
+ additions to the Program which: (i) are separate modules of software
+ distributed in conjunction with the Program under their own license agreement,
+ and (ii) are not derivative works of the Program.
+
+ "Contributor" means any person or entity that distributes the Program.
+
+ "Licensed Patents" mean patent claims licensable by a Contributor which are
+ necessarily infringed by the use or sale of its Contribution alone or when
+ combined with the Program.
+
+ "Program" means the Contributions distributed in accordance with this Agreement.
+
+ "Recipient" means anyone who receives the Program under this Agreement,
+ including all Contributors.
+
+ 2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code
+ and object code form. This patent license shall apply to the combination
+ of the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if
+ a third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+ 3. REQUIREMENTS
+
+ A Contributor may choose to distribute the Program in object code form under
+ its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of
+ title and non-infringement, and implied warranties or conditions of
+ merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+ When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+ Each Contributor must identify itself as the originator of its Contribution,
+ if any, in a manner that reasonably allows subsequent Recipients to identify
+ the originator of the Contribution.
+
+ 4. COMMERCIAL DISTRIBUTION
+
+ Commercial distributors of software may accept certain responsibilities with
+ respect to end users, business partners and the like. While this license is
+ intended to facilitate the commercial use of the Program, the Contributor
+ who includes the Program in a commercial product offering should do so in a
+ manner which does not create potential liability for other Contributors.
+ Therefore, if a Contributor includes the Program in a commercial product
+ offering, such Contributor ("Commercial Contributor") hereby agrees to
+ defend and indemnify every other Contributor ("Indemnified Contributor")
+ against any losses, damages and costs (collectively "Losses") arising from
+ claims, lawsuits and other legal actions brought by a third party against
+ the Indemnified Contributor to the extent caused by the acts or omissions
+ of such Commercial Contributor in connection with its distribution of the
+ Program in a commercial product offering. The obligations in this section
+ do not apply to any claims or Losses relating to any actual or alleged
+ intellectual property infringement. In order to qualify, an Indemnified
+ Contributor must: a) promptly notify the Commercial Contributor in writing
+ of such claim, and b) allow the Commercial Contributor to control, and
+ cooperate with the Commercial Contributor in, the defense and any related
+ settlement negotiations. The Indemnified Contributor may participate in any
+ such claim at its own expense.
+
+ For example, a Contributor might include the Program in a commercial product
+ offering, Product X. That Contributor is then a Commercial Contributor. If
+ that Commercial Contributor then makes performance claims, or offers
+ warranties related to Product X, those performance claims and warranties are
+ such Commercial Contributor's responsibility alone. Under this section, the
+ Commercial Contributor would have to defend claims against the other
+ Contributors related to those performance claims and warranties, and if a
+ court requires any other Contributor to pay any damages as a result, the
+ Commercial Contributor must pay those damages.
+
+ 5. NO WARRANTY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
+ AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
+ EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+ CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
+ PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
+ appropriateness of using and distributing the Program and assumes all risks
+ associated with its exercise of rights under this Agreement , including but
+ not limited to the risks and costs of program errors, compliance with
+ applicable laws, damage to or loss of data, programs or equipment, and
+ unavailability or interruption of operations.
+
+ 6. DISCLAIMER OF LIABILITY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+ LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGES.
+
+ 7. GENERAL
+
+ If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+
+ If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+
+ All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program as
+ soon as reasonably practicable. However, Recipient's obligations under this
+ Agreement and any licenses granted by Recipient relating to the Program
+ shall continue and survive.
+
+ Everyone is permitted to copy and distribute copies of this Agreement, but
+ in order to avoid inconsistency the Agreement is copyrighted and may only
+ be modified in the following manner. The Agreement Steward reserves the
+ right to publish new versions (including revisions) of this Agreement from
+ time to time. No one other than the Agreement Steward has the right to
+ modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to distribute
+ the Program (including its Contributions) under the new version. Except as
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+ rights or licenses to the intellectual property of any Contributor under
+ this Agreement, whether expressly, by implication, estoppel or otherwise.
+ All rights in the Program not expressly granted under this Agreement are
+ reserved.
+
+ This Agreement is governed by the laws of the State of New York and the
+ intellectual property laws of the United States of America. No party to this
+ Agreement will bring a legal action under this Agreement more than one year
+ after the cause of action arose. Each party waives its rights to a jury
+ trial in any resulting litigation.
+
+Hamcrest library (hamcrest-*.jar) & CuvesAPI / Curve API
+
+ BSD License
+
+ Copyright (c) 2000-2006, www.hamcrest.org
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. 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.
+
+ Neither the name of Hamcrest 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 OWNER 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.
+
+SLF4J library (slf4j-api-*.jar)
+
+ Copyright (c) 2004-2013 QOS.ch
+ 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.
+
+inbot-utils (https://github.com/Inbot/inbot-utils)
+
+ The MIT License (MIT)
+
+ Copyright (c) 2015 Inbot
+
+ 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.
diff --git a/solr-8.1.1/licenses/poi-ooxml-NOTICE.txt b/solr-8.1.1/licenses/poi-ooxml-NOTICE.txt
new file mode 100644
index 000000000..251850655
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-NOTICE.txt
@@ -0,0 +1,24 @@
+Apache POI
+Copyright 2003-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (https://www.apache.org/).
+
+This product contains parts that were originally based on software from BEA.
+Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link),
+which was acquired by Oracle Corporation in 2008.
+<http://www.oracle.com/us/corporate/Acquisitions/bea/index.html>
+<https://en.wikipedia.org/wiki/BEA_Systems>
+
+This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
+World Wide Web Consortium (Massachusetts Institute of Technology, European
+Research Consortium for Informatics and Mathematics, Keio University)
+
+This product contains the chunks_parse_cmds.tbl file from the vsdump program.
+Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
+
+This product contains parts of the eID Applet project
+<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
+Copyright (c) 2009-2014
+FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
+Bart Hanssens from FedICT
diff --git a/solr-8.1.1/licenses/poi-ooxml-schemas-4.0.0.jar.sha1 b/solr-8.1.1/licenses/poi-ooxml-schemas-4.0.0.jar.sha1
new file mode 100644
index 000000000..6edf823b8
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-schemas-4.0.0.jar.sha1
@@ -0,0 +1 @@
+125f9ccd2cf652fa4169b1c30e9023362e23324f
diff --git a/solr-8.1.1/licenses/poi-ooxml-schemas-LICENSE-ASL.txt b/solr-8.1.1/licenses/poi-ooxml-schemas-LICENSE-ASL.txt
new file mode 100644
index 000000000..09d38da72
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-schemas-LICENSE-ASL.txt
@@ -0,0 +1,537 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE POI SUBCOMPONENTS:
+
+Apache POI includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses:
+
+
+Office Open XML schemas (ooxml-schemas-1.*.jar)
+
+ The Office Open XML schema definitions used by Apache POI are
+ a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
+ As defined in section 9.4 of the ECMA bylaws [2], this specification
+ is available to all interested parties without restriction:
+
+ 9.4 All documents when approved shall be made available to
+ all interested parties without restriction.
+
+ Furthermore, both Microsoft and Adobe have granted patent licenses
+ to this work [3,4,5].
+
+ [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
+ [2] http://www.ecma-international.org/memento/Ecmabylaws.htm
+ [3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
+ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
+ [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Adobe%20Patent%20Declaration.pdf
+
+
+Bouncy Castle library (bcprov-*.jar, bcpg-*.jar, bcpkix-*.jar)
+
+ 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.
+
+JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
+
+ Eclipse Public License - v 1.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+
+ "Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from
+ a Contributor if it was added to the Program by such Contributor itself or
+ anyone acting on such Contributor's behalf. Contributions do not include
+ additions to the Program which: (i) are separate modules of software
+ distributed in conjunction with the Program under their own license agreement,
+ and (ii) are not derivative works of the Program.
+
+ "Contributor" means any person or entity that distributes the Program.
+
+ "Licensed Patents" mean patent claims licensable by a Contributor which are
+ necessarily infringed by the use or sale of its Contribution alone or when
+ combined with the Program.
+
+ "Program" means the Contributions distributed in accordance with this Agreement.
+
+ "Recipient" means anyone who receives the Program under this Agreement,
+ including all Contributors.
+
+ 2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code
+ and object code form. This patent license shall apply to the combination
+ of the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if
+ a third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+ 3. REQUIREMENTS
+
+ A Contributor may choose to distribute the Program in object code form under
+ its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of
+ title and non-infringement, and implied warranties or conditions of
+ merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+ When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+ Each Contributor must identify itself as the originator of its Contribution,
+ if any, in a manner that reasonably allows subsequent Recipients to identify
+ the originator of the Contribution.
+
+ 4. COMMERCIAL DISTRIBUTION
+
+ Commercial distributors of software may accept certain responsibilities with
+ respect to end users, business partners and the like. While this license is
+ intended to facilitate the commercial use of the Program, the Contributor
+ who includes the Program in a commercial product offering should do so in a
+ manner which does not create potential liability for other Contributors.
+ Therefore, if a Contributor includes the Program in a commercial product
+ offering, such Contributor ("Commercial Contributor") hereby agrees to
+ defend and indemnify every other Contributor ("Indemnified Contributor")
+ against any losses, damages and costs (collectively "Losses") arising from
+ claims, lawsuits and other legal actions brought by a third party against
+ the Indemnified Contributor to the extent caused by the acts or omissions
+ of such Commercial Contributor in connection with its distribution of the
+ Program in a commercial product offering. The obligations in this section
+ do not apply to any claims or Losses relating to any actual or alleged
+ intellectual property infringement. In order to qualify, an Indemnified
+ Contributor must: a) promptly notify the Commercial Contributor in writing
+ of such claim, and b) allow the Commercial Contributor to control, and
+ cooperate with the Commercial Contributor in, the defense and any related
+ settlement negotiations. The Indemnified Contributor may participate in any
+ such claim at its own expense.
+
+ For example, a Contributor might include the Program in a commercial product
+ offering, Product X. That Contributor is then a Commercial Contributor. If
+ that Commercial Contributor then makes performance claims, or offers
+ warranties related to Product X, those performance claims and warranties are
+ such Commercial Contributor's responsibility alone. Under this section, the
+ Commercial Contributor would have to defend claims against the other
+ Contributors related to those performance claims and warranties, and if a
+ court requires any other Contributor to pay any damages as a result, the
+ Commercial Contributor must pay those damages.
+
+ 5. NO WARRANTY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
+ AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
+ EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+ CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
+ PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
+ appropriateness of using and distributing the Program and assumes all risks
+ associated with its exercise of rights under this Agreement , including but
+ not limited to the risks and costs of program errors, compliance with
+ applicable laws, damage to or loss of data, programs or equipment, and
+ unavailability or interruption of operations.
+
+ 6. DISCLAIMER OF LIABILITY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+ LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGES.
+
+ 7. GENERAL
+
+ If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+
+ If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+
+ All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program as
+ soon as reasonably practicable. However, Recipient's obligations under this
+ Agreement and any licenses granted by Recipient relating to the Program
+ shall continue and survive.
+
+ Everyone is permitted to copy and distribute copies of this Agreement, but
+ in order to avoid inconsistency the Agreement is copyrighted and may only
+ be modified in the following manner. The Agreement Steward reserves the
+ right to publish new versions (including revisions) of this Agreement from
+ time to time. No one other than the Agreement Steward has the right to
+ modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to distribute
+ the Program (including its Contributions) under the new version. Except as
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+ rights or licenses to the intellectual property of any Contributor under
+ this Agreement, whether expressly, by implication, estoppel or otherwise.
+ All rights in the Program not expressly granted under this Agreement are
+ reserved.
+
+ This Agreement is governed by the laws of the State of New York and the
+ intellectual property laws of the United States of America. No party to this
+ Agreement will bring a legal action under this Agreement more than one year
+ after the cause of action arose. Each party waives its rights to a jury
+ trial in any resulting litigation.
+
+Hamcrest library (hamcrest-*.jar) & CuvesAPI / Curve API
+
+ BSD License
+
+ Copyright (c) 2000-2006, www.hamcrest.org
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. 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.
+
+ Neither the name of Hamcrest 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 OWNER 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.
+
+SLF4J library (slf4j-api-*.jar)
+
+ Copyright (c) 2004-2013 QOS.ch
+ 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.
+
+inbot-utils (https://github.com/Inbot/inbot-utils)
+
+ The MIT License (MIT)
+
+ Copyright (c) 2015 Inbot
+
+ 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.
diff --git a/solr-8.1.1/licenses/poi-ooxml-schemas-NOTICE.txt b/solr-8.1.1/licenses/poi-ooxml-schemas-NOTICE.txt
new file mode 100644
index 000000000..251850655
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-ooxml-schemas-NOTICE.txt
@@ -0,0 +1,24 @@
+Apache POI
+Copyright 2003-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (https://www.apache.org/).
+
+This product contains parts that were originally based on software from BEA.
+Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link),
+which was acquired by Oracle Corporation in 2008.
+<http://www.oracle.com/us/corporate/Acquisitions/bea/index.html>
+<https://en.wikipedia.org/wiki/BEA_Systems>
+
+This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
+World Wide Web Consortium (Massachusetts Institute of Technology, European
+Research Consortium for Informatics and Mathematics, Keio University)
+
+This product contains the chunks_parse_cmds.tbl file from the vsdump program.
+Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
+
+This product contains parts of the eID Applet project
+<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
+Copyright (c) 2009-2014
+FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
+Bart Hanssens from FedICT
diff --git a/solr-8.1.1/licenses/poi-scratchpad-4.0.0.jar.sha1 b/solr-8.1.1/licenses/poi-scratchpad-4.0.0.jar.sha1
new file mode 100644
index 000000000..ba817eef9
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-scratchpad-4.0.0.jar.sha1
@@ -0,0 +1 @@
+1038d3bb1ec34e93c184b4c5b690e2f51c6f7a60
diff --git a/solr-8.1.1/licenses/poi-scratchpad-LICENSE-ASL.txt b/solr-8.1.1/licenses/poi-scratchpad-LICENSE-ASL.txt
new file mode 100644
index 000000000..09d38da72
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-scratchpad-LICENSE-ASL.txt
@@ -0,0 +1,537 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+APACHE POI SUBCOMPONENTS:
+
+Apache POI includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses:
+
+
+Office Open XML schemas (ooxml-schemas-1.*.jar)
+
+ The Office Open XML schema definitions used by Apache POI are
+ a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
+ As defined in section 9.4 of the ECMA bylaws [2], this specification
+ is available to all interested parties without restriction:
+
+ 9.4 All documents when approved shall be made available to
+ all interested parties without restriction.
+
+ Furthermore, both Microsoft and Adobe have granted patent licenses
+ to this work [3,4,5].
+
+ [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
+ [2] http://www.ecma-international.org/memento/Ecmabylaws.htm
+ [3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
+ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
+ [5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
+ Patent%20statements%20ok/ECMA-376%20Adobe%20Patent%20Declaration.pdf
+
+
+Bouncy Castle library (bcprov-*.jar, bcpg-*.jar, bcpkix-*.jar)
+
+ 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.
+
+JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
+
+ Eclipse Public License - v 1.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+
+ "Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from
+ a Contributor if it was added to the Program by such Contributor itself or
+ anyone acting on such Contributor's behalf. Contributions do not include
+ additions to the Program which: (i) are separate modules of software
+ distributed in conjunction with the Program under their own license agreement,
+ and (ii) are not derivative works of the Program.
+
+ "Contributor" means any person or entity that distributes the Program.
+
+ "Licensed Patents" mean patent claims licensable by a Contributor which are
+ necessarily infringed by the use or sale of its Contribution alone or when
+ combined with the Program.
+
+ "Program" means the Contributions distributed in accordance with this Agreement.
+
+ "Recipient" means anyone who receives the Program under this Agreement,
+ including all Contributors.
+
+ 2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code
+ and object code form. This patent license shall apply to the combination
+ of the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if
+ a third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+ 3. REQUIREMENTS
+
+ A Contributor may choose to distribute the Program in object code form under
+ its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of
+ title and non-infringement, and implied warranties or conditions of
+ merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+ When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+ Each Contributor must identify itself as the originator of its Contribution,
+ if any, in a manner that reasonably allows subsequent Recipients to identify
+ the originator of the Contribution.
+
+ 4. COMMERCIAL DISTRIBUTION
+
+ Commercial distributors of software may accept certain responsibilities with
+ respect to end users, business partners and the like. While this license is
+ intended to facilitate the commercial use of the Program, the Contributor
+ who includes the Program in a commercial product offering should do so in a
+ manner which does not create potential liability for other Contributors.
+ Therefore, if a Contributor includes the Program in a commercial product
+ offering, such Contributor ("Commercial Contributor") hereby agrees to
+ defend and indemnify every other Contributor ("Indemnified Contributor")
+ against any losses, damages and costs (collectively "Losses") arising from
+ claims, lawsuits and other legal actions brought by a third party against
+ the Indemnified Contributor to the extent caused by the acts or omissions
+ of such Commercial Contributor in connection with its distribution of the
+ Program in a commercial product offering. The obligations in this section
+ do not apply to any claims or Losses relating to any actual or alleged
+ intellectual property infringement. In order to qualify, an Indemnified
+ Contributor must: a) promptly notify the Commercial Contributor in writing
+ of such claim, and b) allow the Commercial Contributor to control, and
+ cooperate with the Commercial Contributor in, the defense and any related
+ settlement negotiations. The Indemnified Contributor may participate in any
+ such claim at its own expense.
+
+ For example, a Contributor might include the Program in a commercial product
+ offering, Product X. That Contributor is then a Commercial Contributor. If
+ that Commercial Contributor then makes performance claims, or offers
+ warranties related to Product X, those performance claims and warranties are
+ such Commercial Contributor's responsibility alone. Under this section, the
+ Commercial Contributor would have to defend claims against the other
+ Contributors related to those performance claims and warranties, and if a
+ court requires any other Contributor to pay any damages as a result, the
+ Commercial Contributor must pay those damages.
+
+ 5. NO WARRANTY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
+ AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
+ EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+ CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
+ PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
+ appropriateness of using and distributing the Program and assumes all risks
+ associated with its exercise of rights under this Agreement , including but
+ not limited to the risks and costs of program errors, compliance with
+ applicable laws, damage to or loss of data, programs or equipment, and
+ unavailability or interruption of operations.
+
+ 6. DISCLAIMER OF LIABILITY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+ LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGES.
+
+ 7. GENERAL
+
+ If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+
+ If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+
+ All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program as
+ soon as reasonably practicable. However, Recipient's obligations under this
+ Agreement and any licenses granted by Recipient relating to the Program
+ shall continue and survive.
+
+ Everyone is permitted to copy and distribute copies of this Agreement, but
+ in order to avoid inconsistency the Agreement is copyrighted and may only
+ be modified in the following manner. The Agreement Steward reserves the
+ right to publish new versions (including revisions) of this Agreement from
+ time to time. No one other than the Agreement Steward has the right to
+ modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to distribute
+ the Program (including its Contributions) under the new version. Except as
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+ rights or licenses to the intellectual property of any Contributor under
+ this Agreement, whether expressly, by implication, estoppel or otherwise.
+ All rights in the Program not expressly granted under this Agreement are
+ reserved.
+
+ This Agreement is governed by the laws of the State of New York and the
+ intellectual property laws of the United States of America. No party to this
+ Agreement will bring a legal action under this Agreement more than one year
+ after the cause of action arose. Each party waives its rights to a jury
+ trial in any resulting litigation.
+
+Hamcrest library (hamcrest-*.jar) & CuvesAPI / Curve API
+
+ BSD License
+
+ Copyright (c) 2000-2006, www.hamcrest.org
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. 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.
+
+ Neither the name of Hamcrest 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 OWNER 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.
+
+SLF4J library (slf4j-api-*.jar)
+
+ Copyright (c) 2004-2013 QOS.ch
+ 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.
+
+inbot-utils (https://github.com/Inbot/inbot-utils)
+
+ The MIT License (MIT)
+
+ Copyright (c) 2015 Inbot
+
+ 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.
diff --git a/solr-8.1.1/licenses/poi-scratchpad-NOTICE.txt b/solr-8.1.1/licenses/poi-scratchpad-NOTICE.txt
new file mode 100644
index 000000000..251850655
--- /dev/null
+++ b/solr-8.1.1/licenses/poi-scratchpad-NOTICE.txt
@@ -0,0 +1,24 @@
+Apache POI
+Copyright 2003-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (https://www.apache.org/).
+
+This product contains parts that were originally based on software from BEA.
+Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link),
+which was acquired by Oracle Corporation in 2008.
+<http://www.oracle.com/us/corporate/Acquisitions/bea/index.html>
+<https://en.wikipedia.org/wiki/BEA_Systems>
+
+This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
+World Wide Web Consortium (Massachusetts Institute of Technology, European
+Research Consortium for Informatics and Mathematics, Keio University)
+
+This product contains the chunks_parse_cmds.tbl file from the vsdump program.
+Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
+
+This product contains parts of the eID Applet project
+<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
+Copyright (c) 2009-2014
+FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
+Bart Hanssens from FedICT
diff --git a/solr-8.1.1/licenses/presto-parser-LICENSE-ASL.txt b/solr-8.1.1/licenses/presto-parser-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/presto-parser-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/presto-parser-NOTICE.txt b/solr-8.1.1/licenses/presto-parser-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/presto-parser-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/protobuf-java-3.6.1.jar.sha1 b/solr-8.1.1/licenses/protobuf-java-3.6.1.jar.sha1
new file mode 100644
index 000000000..56a4ab988
--- /dev/null
+++ b/solr-8.1.1/licenses/protobuf-java-3.6.1.jar.sha1
@@ -0,0 +1 @@
+0d06d46ecfd92ec6d0f3b423b4cd81cb38d8b924
diff --git a/solr-8.1.1/licenses/protobuf-java-LICENSE-BSD.txt b/solr-8.1.1/licenses/protobuf-java-LICENSE-BSD.txt
new file mode 100644
index 000000000..184fe077c
--- /dev/null
+++ b/solr-8.1.1/licenses/protobuf-java-LICENSE-BSD.txt
@@ -0,0 +1,9 @@
+Copyright (c) <YEAR>, <OWNER>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+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.
+Neither the name of the <ORGANIZATION> nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/protobuf-java-NOTICE.txt b/solr-8.1.1/licenses/protobuf-java-NOTICE.txt
new file mode 100644
index 000000000..b37f5297e
--- /dev/null
+++ b/solr-8.1.1/licenses/protobuf-java-NOTICE.txt
@@ -0,0 +1,3 @@
+Protocol Buffers - Google's data interchange format
+Copyright 2008 Google Inc.
+http://code.google.com/apis/protocolbuffers/
diff --git a/solr-8.1.1/licenses/randomizedtesting-runner-2.7.2.jar.sha1 b/solr-8.1.1/licenses/randomizedtesting-runner-2.7.2.jar.sha1
new file mode 100644
index 000000000..9eeaf24b7
--- /dev/null
+++ b/solr-8.1.1/licenses/randomizedtesting-runner-2.7.2.jar.sha1
@@ -0,0 +1 @@
+84ed6b5f70906f9ef173db67ccde657b43ea60df
diff --git a/solr-8.1.1/licenses/randomizedtesting-runner-LICENSE-ASL.txt b/solr-8.1.1/licenses/randomizedtesting-runner-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/randomizedtesting-runner-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/randomizedtesting-runner-NOTICE.txt b/solr-8.1.1/licenses/randomizedtesting-runner-NOTICE.txt
new file mode 100644
index 000000000..e65778825
--- /dev/null
+++ b/solr-8.1.1/licenses/randomizedtesting-runner-NOTICE.txt
@@ -0,0 +1,12 @@
+
+RandomizedRunner, a JUnit @Runner for randomized tests (and more)
+Copyright 2011-2012 Carrot Search s.c.
+http://labs.carrotsearch.com/randomizedtesting.html
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes asm (asmlib), BSD license
+This product includes Google Guava, ASL license
+This product includes simple-xml, ASL license
+This product includes Google GSON, ASL license
diff --git a/solr-8.1.1/licenses/re2j-1.2.jar.sha1 b/solr-8.1.1/licenses/re2j-1.2.jar.sha1
new file mode 100644
index 000000000..7103441f0
--- /dev/null
+++ b/solr-8.1.1/licenses/re2j-1.2.jar.sha1
@@ -0,0 +1 @@
+4361eed4abe6f84d982cbb26749825f285996dd2
diff --git a/solr-8.1.1/licenses/re2j-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/re2j-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..9c68c81a9
--- /dev/null
+++ b/solr-8.1.1/licenses/re2j-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,33 @@
+This is a work derived from Russ Cox's RE2 in Go, whose license
+http://golang.org/LICENSE is as follows:
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the name of Google Inc. 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
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/solr-8.1.1/licenses/re2j-NOTICE.txt b/solr-8.1.1/licenses/re2j-NOTICE.txt
new file mode 100644
index 000000000..04106db4f
--- /dev/null
+++ b/solr-8.1.1/licenses/re2j-NOTICE.txt
@@ -0,0 +1,5 @@
+This is a work derived from Russ Cox's RE2 in Go, whose license
+http://golang.org/LICENSE is as follows:
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
diff --git a/solr-8.1.1/licenses/rome-1.5.1.jar.sha1 b/solr-8.1.1/licenses/rome-1.5.1.jar.sha1
new file mode 100644
index 000000000..f24eb2abb
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-1.5.1.jar.sha1
@@ -0,0 +1 @@
+cc3489f066749bede7fc81f4e80c0d8c9534a210
diff --git a/solr-8.1.1/licenses/rome-LICENSE-ASL.txt b/solr-8.1.1/licenses/rome-LICENSE-ASL.txt
new file mode 100644
index 000000000..f43cdb1cb
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-LICENSE-ASL.txt
@@ -0,0 +1,14 @@
+Copyright 2004 Sun Microsystems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
diff --git a/solr-8.1.1/licenses/rome-NOTICE.txt b/solr-8.1.1/licenses/rome-NOTICE.txt
new file mode 100644
index 000000000..caefccb44
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-NOTICE.txt
@@ -0,0 +1 @@
+Copyright 2004 Sun Microsystems, Inc.
diff --git a/solr-8.1.1/licenses/rome-utils-1.5.1.jar.sha1 b/solr-8.1.1/licenses/rome-utils-1.5.1.jar.sha1
new file mode 100644
index 000000000..bc388b97c
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-utils-1.5.1.jar.sha1
@@ -0,0 +1 @@
+3a3d6473a2f5d55fb31bf6c269af963fdea13b54
diff --git a/solr-8.1.1/licenses/rome-utils-LICENSE-ASL.txt b/solr-8.1.1/licenses/rome-utils-LICENSE-ASL.txt
new file mode 100644
index 000000000..f43cdb1cb
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-utils-LICENSE-ASL.txt
@@ -0,0 +1,14 @@
+Copyright 2004 Sun Microsystems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
diff --git a/solr-8.1.1/licenses/rome-utils-NOTICE.txt b/solr-8.1.1/licenses/rome-utils-NOTICE.txt
new file mode 100644
index 000000000..caefccb44
--- /dev/null
+++ b/solr-8.1.1/licenses/rome-utils-NOTICE.txt
@@ -0,0 +1 @@
+Copyright 2004 Sun Microsystems, Inc.
diff --git a/solr-8.1.1/licenses/rrd4j-3.5.jar.sha1 b/solr-8.1.1/licenses/rrd4j-3.5.jar.sha1
new file mode 100644
index 000000000..8277f7ee8
--- /dev/null
+++ b/solr-8.1.1/licenses/rrd4j-3.5.jar.sha1
@@ -0,0 +1 @@
+540c946b471dc915b0beb7c07069e3946665ef5d
diff --git a/solr-8.1.1/licenses/rrd4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/rrd4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/rrd4j-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/rrd4j-NOTICE.txt b/solr-8.1.1/licenses/rrd4j-NOTICE.txt
new file mode 100644
index 000000000..841dd3099
--- /dev/null
+++ b/solr-8.1.1/licenses/rrd4j-NOTICE.txt
@@ -0,0 +1,2 @@
+GitHub: https://github.com/rrd4j/rrd4j/
+Maven-generated site: http://rrd4j.org/site/
diff --git a/solr-8.1.1/licenses/servlet-api-LICENSE-CDDL.txt b/solr-8.1.1/licenses/servlet-api-LICENSE-CDDL.txt
new file mode 100644
index 000000000..b75b04fcf
--- /dev/null
+++ b/solr-8.1.1/licenses/servlet-api-LICENSE-CDDL.txt
@@ -0,0 +1,126 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+ 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
+
+ 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+ 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+ 1.4. Executable. means the Covered Software in any form other than Source Code.
+
+ 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
+
+ 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+ 1.7. License. means this document.
+
+ 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. Modifications. means the Source Code and Executable form of any of the following:
+
+ A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+ B. Any new file that contains any part of the Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+ 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
+
+ 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+ 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+ 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+ 2.1. The Initial Developer Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+ 2.2. Contributor Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Availability of Source Code.
+ Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+ 3.2. Modifications.
+ The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+ 3.3. Required Notices.
+ You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+ 3.4. Application of Additional Terms.
+ You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+ 3.5. Distribution of Executable Versions.
+ You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.6. Larger Works.
+ You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+ 4.1. New Versions.
+ Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+ 4.2. Effect of New Versions.
+ You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+ 4.3. Modified Versions.
+ When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+ 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+ 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+ 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+ The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+ NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+ The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
diff --git a/solr-8.1.1/licenses/servlet-api-NOTICE.txt b/solr-8.1.1/licenses/servlet-api-NOTICE.txt
new file mode 100644
index 000000000..6340ec9b7
--- /dev/null
+++ b/solr-8.1.1/licenses/servlet-api-NOTICE.txt
@@ -0,0 +1,2 @@
+Servlet-api.jar is under the CDDL license, the original source
+code for this can be found at http://www.eclipse.org/jetty/downloads.php
diff --git a/solr-8.1.1/licenses/simple-xml-2.7.1.jar.sha1 b/solr-8.1.1/licenses/simple-xml-2.7.1.jar.sha1
new file mode 100644
index 000000000..d790fb404
--- /dev/null
+++ b/solr-8.1.1/licenses/simple-xml-2.7.1.jar.sha1
@@ -0,0 +1 @@
+dd91fb744c2ff921407475cb29a1e3fee397d411
diff --git a/solr-8.1.1/licenses/simple-xml-LICENSE-ASL.txt b/solr-8.1.1/licenses/simple-xml-LICENSE-ASL.txt
new file mode 100644
index 000000000..57bc88a15
--- /dev/null
+++ b/solr-8.1.1/licenses/simple-xml-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/simple-xml-NOTICE.txt b/solr-8.1.1/licenses/simple-xml-NOTICE.txt
new file mode 100644
index 000000000..6f139d6e8
--- /dev/null
+++ b/solr-8.1.1/licenses/simple-xml-NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+the SimpleXML project (http://simple.sourceforge.net).
diff --git a/solr-8.1.1/licenses/simpleclient-0.2.0.jar.sha1 b/solr-8.1.1/licenses/simpleclient-0.2.0.jar.sha1
new file mode 100644
index 000000000..ce8b16fb3
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient-0.2.0.jar.sha1
@@ -0,0 +1 @@
+be8de6a5a01f25074be3b27a8db4448c9cce0168
diff --git a/solr-8.1.1/licenses/simpleclient-LICENSE-ASL.txt b/solr-8.1.1/licenses/simpleclient-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/simpleclient-NOTICE.txt b/solr-8.1.1/licenses/simpleclient-NOTICE.txt
new file mode 100644
index 000000000..c920ec3fe
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient-NOTICE.txt
@@ -0,0 +1,11 @@
+Prometheus instrumentation library for JVM applications
+Copyright 2012-2015 The Prometheus Authors
+
+This product includes software developed at
+Boxever Ltd. (http://www.boxever.com/).
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
+
+This product includes software developed as part of the
+Ocelli project by Netflix Inc. (https://github.com/Netflix/ocelli/).
diff --git a/solr-8.1.1/licenses/simpleclient_common-0.2.0.jar.sha1 b/solr-8.1.1/licenses/simpleclient_common-0.2.0.jar.sha1
new file mode 100644
index 000000000..1e1c2e947
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_common-0.2.0.jar.sha1
@@ -0,0 +1 @@
+42d513358b26ae44137c620fa517d37b5e707ae1
diff --git a/solr-8.1.1/licenses/simpleclient_common-LICENSE-ASL.txt b/solr-8.1.1/licenses/simpleclient_common-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_common-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/simpleclient_common-NOTICE.txt b/solr-8.1.1/licenses/simpleclient_common-NOTICE.txt
new file mode 100644
index 000000000..c920ec3fe
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_common-NOTICE.txt
@@ -0,0 +1,11 @@
+Prometheus instrumentation library for JVM applications
+Copyright 2012-2015 The Prometheus Authors
+
+This product includes software developed at
+Boxever Ltd. (http://www.boxever.com/).
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
+
+This product includes software developed as part of the
+Ocelli project by Netflix Inc. (https://github.com/Netflix/ocelli/).
diff --git a/solr-8.1.1/licenses/simpleclient_httpserver-0.2.0.jar.sha1 b/solr-8.1.1/licenses/simpleclient_httpserver-0.2.0.jar.sha1
new file mode 100644
index 000000000..7d188b52e
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_httpserver-0.2.0.jar.sha1
@@ -0,0 +1 @@
+f644860c08c787821c8c7ce78c408cea187fe1a3
diff --git a/solr-8.1.1/licenses/simpleclient_httpserver-LICENSE-ASL.txt b/solr-8.1.1/licenses/simpleclient_httpserver-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_httpserver-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/simpleclient_httpserver-NOTICE.txt b/solr-8.1.1/licenses/simpleclient_httpserver-NOTICE.txt
new file mode 100644
index 000000000..c920ec3fe
--- /dev/null
+++ b/solr-8.1.1/licenses/simpleclient_httpserver-NOTICE.txt
@@ -0,0 +1,11 @@
+Prometheus instrumentation library for JVM applications
+Copyright 2012-2015 The Prometheus Authors
+
+This product includes software developed at
+Boxever Ltd. (http://www.boxever.com/).
+
+This product includes software developed at
+SoundCloud Ltd. (http://soundcloud.com/).
+
+This product includes software developed as part of the
+Ocelli project by Netflix Inc. (https://github.com/Netflix/ocelli/).
diff --git a/solr-8.1.1/licenses/slf4j-LICENSE-MIT.txt b/solr-8.1.1/licenses/slf4j-LICENSE-MIT.txt
new file mode 100644
index 000000000..f5ecafa00
--- /dev/null
+++ b/solr-8.1.1/licenses/slf4j-LICENSE-MIT.txt
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/slf4j-NOTICE.txt b/solr-8.1.1/licenses/slf4j-NOTICE.txt
new file mode 100644
index 000000000..cf438946a
--- /dev/null
+++ b/solr-8.1.1/licenses/slf4j-NOTICE.txt
@@ -0,0 +1,25 @@
+=========================================================================
+== SLF4J Notice -- http://www.slf4j.org/license.html ==
+=========================================================================
+
+Copyright (c) 2004-2008 QOS.ch
+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.
diff --git a/solr-8.1.1/licenses/slf4j-api-1.7.24.jar.sha1 b/solr-8.1.1/licenses/slf4j-api-1.7.24.jar.sha1
new file mode 100644
index 000000000..e2722e783
--- /dev/null
+++ b/solr-8.1.1/licenses/slf4j-api-1.7.24.jar.sha1
@@ -0,0 +1 @@
+3f6b4bd4f8dbe8d4bea06d107a3826469b85c3e9
diff --git a/solr-8.1.1/licenses/slf4j-simple-1.7.24.jar.sha1 b/solr-8.1.1/licenses/slf4j-simple-1.7.24.jar.sha1
new file mode 100644
index 000000000..043482ccd
--- /dev/null
+++ b/solr-8.1.1/licenses/slf4j-simple-1.7.24.jar.sha1
@@ -0,0 +1 @@
+d9841ffd9d794ab26446df2c46a2ab2b8d2a183e
diff --git a/solr-8.1.1/licenses/slice-LICENSE-ASL.txt b/solr-8.1.1/licenses/slice-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/slice-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/slice-NOTICE.txt b/solr-8.1.1/licenses/slice-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/slice-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/spatial4j-0.7.jar.sha1 b/solr-8.1.1/licenses/spatial4j-0.7.jar.sha1
new file mode 100644
index 000000000..ef2406596
--- /dev/null
+++ b/solr-8.1.1/licenses/spatial4j-0.7.jar.sha1
@@ -0,0 +1 @@
+faa8ba85d503da4ab872d17ba8c00da0098ab2f2
diff --git a/solr-8.1.1/licenses/spatial4j-LICENSE-ASL.txt b/solr-8.1.1/licenses/spatial4j-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/spatial4j-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/spatial4j-NOTICE.txt b/solr-8.1.1/licenses/spatial4j-NOTICE.txt
new file mode 100644
index 000000000..59b73004f
--- /dev/null
+++ b/solr-8.1.1/licenses/spatial4j-NOTICE.txt
@@ -0,0 +1,133 @@
+# about.md file
+
+## About This Content
+
+May 22, 2015
+
+### License
+
+The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the
+Content is provided to you under the terms and conditions of the Apache License, Version 2.0. A copy of the Apache
+License, Version 2.0 is available at
+[http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another
+party ("Redistributor") and different terms and conditions may apply to your use of any object code in the Content.
+Check the Redistributor’s license that was provided with the Content. If no such license exists, contact the
+Redistributor. Unless otherwise indicated below, the terms and conditions of the Apache License, Version 2.0 still apply
+to any source code in the Content and such source code may be obtained at
+[http://www.eclipse.org](http://www.eclipse.org).
+
+# notice.md file
+
+Note: the below Eclipse user agreement is standard. It says "Unless otherwise indicated, "... before referring to the
+EPL. We indicate above that all content is licensed under the ASLv2 license. -- David Smiley
+
+## Eclipse Foundation Software User Agreement
+
+April 9, 2014
+
+### Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE
+PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR
+THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE
+THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT
+AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY
+NOT USE THE CONTENT.
+
+### Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and
+conditions of the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this Content and is
+also available at [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html). For purposes
+of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the
+Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as
+downloadable archives ("Downloads").
+
+* Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.
+ Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+* Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Javaâ„¢ ARchive) in a directory named "plugins".
+* A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged
+ as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list
+ of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+* Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may
+ contain a list of the names and version numbers of Included Features.
+
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts").
+The terms and conditions governing Features and Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but
+not limited to the following locations:
+
+* The top-level (root) directory
+* Plug-in and Fragment directories
+* Inside Plug-ins and Fragments packaged as JARs
+* Sub-directories of the directory named "src" of certain Plug-ins
+* Feature directories
+
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined
+below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains
+Included Features, the Feature Update License should either provide you with the terms and conditions governing the
+Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license"
+property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update
+Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the
+associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR
+TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+* Eclipse Distribution License Version 1.0 (available at
+ [http://www.eclipse.org/licenses/edl-v1.0.html](http://www.eclipse.org/licenses/edl-v10.html))
+* Common Public License Version 1.0 (available at
+ [http://www.eclipse.org/legal/cpl-v10.html](http://www.eclipse.org/legal/cpl-v10.html))
+* Apache Software License 1.1 (available at
+ [http://www.apache.org/licenses/LICENSE](http://www.apache.org/licenses/LICENSE))
+* Apache Software License 2.0 (available at
+ [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0))
+* Mozilla Public License Version 1.1 (available at
+ [http://www.mozilla.org/MPL/MPL-1.1.html](http://www.mozilla.org/MPL/MPL-1.1.html))
+
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature
+License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and
+conditions govern that particular Content.
+
+### Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and
+the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software,
+documentation, information and/or other materials (collectively "Installable Software"). This capability is provided
+with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging
+Installable Software is available at
+[http://eclipse.org/equinox/p2/repository_packaging.html](http://eclipse.org/equinox/p2/repository_packaging.html)
+("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for
+enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the
+users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a
+manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:
+
+1. A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a
+ machine ("Target Machine") with the intent of installing, extending or updating the functionality of an
+ Eclipse-based product.
+2. During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion
+ thereof to be accessed and copied to the Target Machine.
+3. Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the
+ Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed
+ from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the
+ user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in
+ the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the
+ provisioning Technology will complete installation of the Installable Software.
+
+### Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import,
+possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of
+encryption software, to see if this is permitted.
+
+<small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries,
+or both.</small>
diff --git a/solr-8.1.1/licenses/start.jar.sha1 b/solr-8.1.1/licenses/start.jar.sha1
new file mode 100644
index 000000000..b350925d3
--- /dev/null
+++ b/solr-8.1.1/licenses/start.jar.sha1
@@ -0,0 +1 @@
+ed9434016612e1e2c29b4db88bc5fdfe7dbcec2f
diff --git a/solr-8.1.1/licenses/stax2-api-3.1.4.jar.sha1 b/solr-8.1.1/licenses/stax2-api-3.1.4.jar.sha1
new file mode 100644
index 000000000..d5f40207f
--- /dev/null
+++ b/solr-8.1.1/licenses/stax2-api-3.1.4.jar.sha1
@@ -0,0 +1 @@
+ac19014b1e6a7c08aad07fe114af792676b685b7
diff --git a/solr-8.1.1/licenses/stax2-api-LICENSE-BSD.txt b/solr-8.1.1/licenses/stax2-api-LICENSE-BSD.txt
new file mode 100644
index 000000000..49e7019ac
--- /dev/null
+++ b/solr-8.1.1/licenses/stax2-api-LICENSE-BSD.txt
@@ -0,0 +1,10 @@
+Copyright (c) <YEAR>, <OWNER>
+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.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/stax2-api-NOTICE.txt b/solr-8.1.1/licenses/stax2-api-NOTICE.txt
new file mode 100644
index 000000000..a5f70fc08
--- /dev/null
+++ b/solr-8.1.1/licenses/stax2-api-NOTICE.txt
@@ -0,0 +1,8 @@
+Stax2 API is an extension to basic Stax 1.0 API that adds significant
+new functionality, such as full-featured bi-direction validation
+interface and high-performance Typed Access API.
+
+(From http://repo1.maven.org/maven2/org/codehaus/woodstox/stax2-api/3.1.4/stax2-api-3.1.4.pom)
+Developer: Tatu Saloranta <tatu@fasterxml.com>
+License: The BSD License (http://www.opensource.org/licenses/bsd-license.php)
+Organization: fasterxml.com (http://fasterxml.com)
diff --git a/solr-8.1.1/licenses/t-digest-3.1.jar.sha1 b/solr-8.1.1/licenses/t-digest-3.1.jar.sha1
new file mode 100644
index 000000000..1c4c89ce0
--- /dev/null
+++ b/solr-8.1.1/licenses/t-digest-3.1.jar.sha1
@@ -0,0 +1 @@
+451ed219688aed5821a789428fd5e10426d11312
diff --git a/solr-8.1.1/licenses/t-digest-LICENSE-ASL.txt b/solr-8.1.1/licenses/t-digest-LICENSE-ASL.txt
new file mode 100644
index 000000000..e06d20818
--- /dev/null
+++ b/solr-8.1.1/licenses/t-digest-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/t-digest-NOTICE.txt b/solr-8.1.1/licenses/t-digest-NOTICE.txt
new file mode 100644
index 000000000..319f7b55c
--- /dev/null
+++ b/solr-8.1.1/licenses/t-digest-NOTICE.txt
@@ -0,0 +1,4 @@
+The code for the t-digest was originally authored by Ted Dunning
+
+A number of small but very helpful changes have been contributed by Adrien Grand (https://github.com/jpountz)
+
diff --git a/solr-8.1.1/licenses/tagsoup-1.2.1.jar.sha1 b/solr-8.1.1/licenses/tagsoup-1.2.1.jar.sha1
new file mode 100644
index 000000000..5d227b11a
--- /dev/null
+++ b/solr-8.1.1/licenses/tagsoup-1.2.1.jar.sha1
@@ -0,0 +1 @@
+5584627487e984c03456266d3f8802eb85a9ce97
diff --git a/solr-8.1.1/licenses/tagsoup-LICENSE-ASL.txt b/solr-8.1.1/licenses/tagsoup-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/tagsoup-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/tagsoup-NOTICE.txt b/solr-8.1.1/licenses/tagsoup-NOTICE.txt
new file mode 100644
index 000000000..a1b735b0d
--- /dev/null
+++ b/solr-8.1.1/licenses/tagsoup-NOTICE.txt
@@ -0,0 +1 @@
+Copyright 2002-2008 by John Cowan
diff --git a/solr-8.1.1/licenses/tika-core-1.19.1.jar.sha1 b/solr-8.1.1/licenses/tika-core-1.19.1.jar.sha1
new file mode 100644
index 000000000..d1448525b
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-core-1.19.1.jar.sha1
@@ -0,0 +1 @@
+c1f075aa01586c2c28a249ad60bcfb733b69b866
diff --git a/solr-8.1.1/licenses/tika-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/tika-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..ca855f4c3
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-core-LICENSE-ASL.txt
@@ -0,0 +1,238 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+APACHE TIKA SUBCOMPONENTS
+
+Apache Tika includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.
+
+MIME type information from file-4.26.tar.gz (http://www.darwinsys.com/file/)
+
+ Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
+ Software written by Ian F. Darwin and others;
+ maintained 1994- Christos Zoulas.
+
+ This software is not subject to any export provision of the United States
+ Department of Commerce, and may be exported to any country or planet.
+
+ 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 immediately at the beginning of the file, without modification,
+ 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.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/tika-core-NOTICE.txt b/solr-8.1.1/licenses/tika-core-NOTICE.txt
new file mode 100644
index 000000000..3b73637ac
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-core-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Tika
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Tika-server compoment uses CDDL-licensed dependencies: jersey (http://jersey.java.net/) and
+Grizzly (http://grizzly.java.net/)
+
+OpenCSV: Copyright 2005 Bytecode Pty Ltd. Licensed under the Apache License, Version 2.0
+
+IPTC Photo Metadata descriptions Copyright 2010 International Press Telecommunications Council.
diff --git a/solr-8.1.1/licenses/tika-java7-1.19.1.jar.sha1 b/solr-8.1.1/licenses/tika-java7-1.19.1.jar.sha1
new file mode 100644
index 000000000..a5459a9e6
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-java7-1.19.1.jar.sha1
@@ -0,0 +1 @@
+02661fd12fd9f0223e522dca72c1296108561263
diff --git a/solr-8.1.1/licenses/tika-java7-LICENSE-ASL.txt b/solr-8.1.1/licenses/tika-java7-LICENSE-ASL.txt
new file mode 100644
index 000000000..8ba51ef6f
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-java7-LICENSE-ASL.txt
@@ -0,0 +1,239 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+APACHE TIKA SUBCOMPONENTS
+
+Apache Tika includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.
+
+Charset detection code from ICU4J (http://site.icu-project.org/)
+
+ Copyright (c) 1995-2009 International Business Machines Corporation
+ and others
+
+ 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, and/or sell copies of the Software, and to permit persons
+ to whom the Software is furnished to do so, provided that the above
+ copyright notice(s) and this permission notice appear in all copies
+ of the Software and that both the above copyright notice(s) and this
+ permission notice appear in supporting documentation.
+
+ 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 OF THIRD PARTY RIGHTS.
+ IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+ BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+
+ Except as contained in this notice, the name of a copyright holder shall
+ not be used in advertising or otherwise to promote the sale, use or other
+ dealings in this Software without prior written authorization of the
+ copyright holder.
diff --git a/solr-8.1.1/licenses/tika-java7-NOTICE.txt b/solr-8.1.1/licenses/tika-java7-NOTICE.txt
new file mode 100644
index 000000000..7c1722d59
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-java7-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Tika Java 7 detectors
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Tika-server compoment uses CDDL-licensed dependencies: jersey (http://jersey.java.net/) and
+Grizzly (http://grizzly.java.net/)
+
+OpenCSV: Copyright 2005 Bytecode Pty Ltd. Licensed under the Apache License, Version 2.0
+
+IPTC Photo Metadata descriptions Copyright 2010 International Press Telecommunications Council.
diff --git a/solr-8.1.1/licenses/tika-parsers-1.19.1.jar.sha1 b/solr-8.1.1/licenses/tika-parsers-1.19.1.jar.sha1
new file mode 100644
index 000000000..638428d26
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-parsers-1.19.1.jar.sha1
@@ -0,0 +1 @@
+06d45a8683a7479f0e0d9d252f834d0ae44abd6b
diff --git a/solr-8.1.1/licenses/tika-parsers-LICENSE-ASL.txt b/solr-8.1.1/licenses/tika-parsers-LICENSE-ASL.txt
new file mode 100644
index 000000000..8ba51ef6f
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-parsers-LICENSE-ASL.txt
@@ -0,0 +1,239 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+APACHE TIKA SUBCOMPONENTS
+
+Apache Tika includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.
+
+Charset detection code from ICU4J (http://site.icu-project.org/)
+
+ Copyright (c) 1995-2009 International Business Machines Corporation
+ and others
+
+ 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, and/or sell copies of the Software, and to permit persons
+ to whom the Software is furnished to do so, provided that the above
+ copyright notice(s) and this permission notice appear in all copies
+ of the Software and that both the above copyright notice(s) and this
+ permission notice appear in supporting documentation.
+
+ 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 OF THIRD PARTY RIGHTS.
+ IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+ BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+
+ Except as contained in this notice, the name of a copyright holder shall
+ not be used in advertising or otherwise to promote the sale, use or other
+ dealings in this Software without prior written authorization of the
+ copyright holder.
diff --git a/solr-8.1.1/licenses/tika-parsers-NOTICE.txt b/solr-8.1.1/licenses/tika-parsers-NOTICE.txt
new file mode 100644
index 000000000..e490b9ee4
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-parsers-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Tika parsers
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Tika-server compoment uses CDDL-licensed dependencies: jersey (http://jersey.java.net/) and
+Grizzly (http://grizzly.java.net/)
+
+OpenCSV: Copyright 2005 Bytecode Pty Ltd. Licensed under the Apache License, Version 2.0
+
+IPTC Photo Metadata descriptions Copyright 2010 International Press Telecommunications Council.
diff --git a/solr-8.1.1/licenses/tika-xmp-1.19.1.jar.sha1 b/solr-8.1.1/licenses/tika-xmp-1.19.1.jar.sha1
new file mode 100644
index 000000000..80f251317
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-xmp-1.19.1.jar.sha1
@@ -0,0 +1 @@
+3b1bb7e00262813b3ef08b414fa0d5d06c45f2bb
diff --git a/solr-8.1.1/licenses/tika-xmp-LICENSE-ASL.txt b/solr-8.1.1/licenses/tika-xmp-LICENSE-ASL.txt
new file mode 100644
index 000000000..ca855f4c3
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-xmp-LICENSE-ASL.txt
@@ -0,0 +1,238 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+APACHE TIKA SUBCOMPONENTS
+
+Apache Tika includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.
+
+MIME type information from file-4.26.tar.gz (http://www.darwinsys.com/file/)
+
+ Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
+ Software written by Ian F. Darwin and others;
+ maintained 1994- Christos Zoulas.
+
+ This software is not subject to any export provision of the United States
+ Department of Commerce, and may be exported to any country or planet.
+
+ 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 immediately at the beginning of the file, without modification,
+ 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.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/tika-xmp-NOTICE.txt b/solr-8.1.1/licenses/tika-xmp-NOTICE.txt
new file mode 100644
index 000000000..52230b52a
--- /dev/null
+++ b/solr-8.1.1/licenses/tika-xmp-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Tika xmp
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Tika-server compoment uses CDDL-licensed dependencies: jersey (http://jersey.java.net/) and
+Grizzly (http://grizzly.java.net/)
+
+OpenCSV: Copyright 2005 Bytecode Pty Ltd. Licensed under the Apache License, Version 2.0
+
+IPTC Photo Metadata descriptions Copyright 2010 International Press Telecommunications Council.
diff --git a/solr-8.1.1/licenses/velocity-engine-core-2.0.jar.sha1 b/solr-8.1.1/licenses/velocity-engine-core-2.0.jar.sha1
new file mode 100644
index 000000000..9cbf13d1e
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-engine-core-2.0.jar.sha1
@@ -0,0 +1 @@
+6e5f29e1237b1764a4ce769feeffb85b0b19cfa7
diff --git a/solr-8.1.1/licenses/velocity-engine-core-LICENSE-ASL.txt b/solr-8.1.1/licenses/velocity-engine-core-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-engine-core-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/velocity-engine-core-NOTICE.txt b/solr-8.1.1/licenses/velocity-engine-core-NOTICE.txt
new file mode 100644
index 000000000..c016d50c0
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-engine-core-NOTICE.txt
@@ -0,0 +1,7 @@
+Apache Velocity
+
+Copyright (C) 2000-2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/solr-8.1.1/licenses/velocity-tools-generic-3.0.jar.sha1 b/solr-8.1.1/licenses/velocity-tools-generic-3.0.jar.sha1
new file mode 100644
index 000000000..018c1b394
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-generic-3.0.jar.sha1
@@ -0,0 +1 @@
+e789f6ec06f9a69ccb8956f407fb685b2938e74b
diff --git a/solr-8.1.1/licenses/velocity-tools-generic-LICENSE-ASL.txt b/solr-8.1.1/licenses/velocity-tools-generic-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-generic-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/velocity-tools-generic-NOTICE.txt b/solr-8.1.1/licenses/velocity-tools-generic-NOTICE.txt
new file mode 100644
index 000000000..7d6375e8d
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-generic-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Velocity Tools
+
+Copyright (C) 2000-2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Support for using SSL with Struts is provided using
+the sslext library package, which is open source software
+under the Apache Software License 1.1 with copyright attributed
+to The Apache Software Foundation.
+This software is available from http://sslext.sourceforge.net/
diff --git a/solr-8.1.1/licenses/velocity-tools-view-3.0.jar.sha1 b/solr-8.1.1/licenses/velocity-tools-view-3.0.jar.sha1
new file mode 100644
index 000000000..67cf26514
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-3.0.jar.sha1
@@ -0,0 +1 @@
+2f72ca8eb2bcb8af2c5fab826d64add20ab70a2e
diff --git a/solr-8.1.1/licenses/velocity-tools-view-LICENSE-ASL.txt b/solr-8.1.1/licenses/velocity-tools-view-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/velocity-tools-view-NOTICE.txt b/solr-8.1.1/licenses/velocity-tools-view-NOTICE.txt
new file mode 100644
index 000000000..7d6375e8d
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Velocity Tools
+
+Copyright (C) 2000-2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Support for using SSL with Struts is provided using
+the sslext library package, which is open source software
+under the Apache Software License 1.1 with copyright attributed
+to The Apache Software Foundation.
+This software is available from http://sslext.sourceforge.net/
diff --git a/solr-8.1.1/licenses/velocity-tools-view-jsp-3.0.jar.sha1 b/solr-8.1.1/licenses/velocity-tools-view-jsp-3.0.jar.sha1
new file mode 100644
index 000000000..45dd7f863
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-jsp-3.0.jar.sha1
@@ -0,0 +1 @@
+27f6a21c7973ffb75001b3e9ac4731facf5757b4
diff --git a/solr-8.1.1/licenses/velocity-tools-view-jsp-LICENSE-ASL.txt b/solr-8.1.1/licenses/velocity-tools-view-jsp-LICENSE-ASL.txt
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-jsp-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/velocity-tools-view-jsp-NOTICE.txt b/solr-8.1.1/licenses/velocity-tools-view-jsp-NOTICE.txt
new file mode 100644
index 000000000..7d6375e8d
--- /dev/null
+++ b/solr-8.1.1/licenses/velocity-tools-view-jsp-NOTICE.txt
@@ -0,0 +1,12 @@
+Apache Velocity Tools
+
+Copyright (C) 2000-2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Support for using SSL with Struts is provided using
+the sslext library package, which is open source software
+under the Apache Software License 1.1 with copyright attributed
+to The Apache Software Foundation.
+This software is available from http://sslext.sourceforge.net/
diff --git a/solr-8.1.1/licenses/vorbis-java-core-0.8.jar.sha1 b/solr-8.1.1/licenses/vorbis-java-core-0.8.jar.sha1
new file mode 100644
index 000000000..dbff784db
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-core-0.8.jar.sha1
@@ -0,0 +1 @@
+7e9937c2575cda2e3fc116415117c74f23e43fa6
diff --git a/solr-8.1.1/licenses/vorbis-java-core-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/vorbis-java-core-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..7cf076b68
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-core-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,28 @@
+Copyright (c) 2002-2004 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- 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.
+
+- Neither the name of the Xiph.org Foundation 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 FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/vorbis-java-core-NOTICE.txt b/solr-8.1.1/licenses/vorbis-java-core-NOTICE.txt
new file mode 100644
index 000000000..9791ae13f
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-core-NOTICE.txt
@@ -0,0 +1,16 @@
+********************************************************************
+* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
+* by the Xiph.org Foundation, http://www.xiph.org/ *
+********************************************************************
+
+Monty <monty@xiph.org>
+
+and the rest of the Xiph.org Foundation.
+
+Java port by Ben Cohee <bpcohee@gmail.com>
+
+Thanks to:
+IceCast Team (http://www.icecast.org/index.php)
+JCraft Jorbis Team (http://www.jcraft.com/jorbis/)
+Java Sound Resources - Matthias Pfisterer, Florian Bomers - (http://www.jsresources.org/)
+Java Sound Tritonus Team (http://tritonus.org/)
diff --git a/solr-8.1.1/licenses/vorbis-java-tika-0.8.jar.sha1 b/solr-8.1.1/licenses/vorbis-java-tika-0.8.jar.sha1
new file mode 100644
index 000000000..2b634bb68
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-tika-0.8.jar.sha1
@@ -0,0 +1 @@
+4ddbb27ac5884a0f0398a63d46a89d3bc87dc457
diff --git a/solr-8.1.1/licenses/vorbis-java-tika-LICENSE-BSD_LIKE.txt b/solr-8.1.1/licenses/vorbis-java-tika-LICENSE-BSD_LIKE.txt
new file mode 100644
index 000000000..7cf076b68
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-tika-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,28 @@
+Copyright (c) 2002-2004 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- 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.
+
+- Neither the name of the Xiph.org Foundation 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 FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/vorbis-java-tika-NOTICE.txt b/solr-8.1.1/licenses/vorbis-java-tika-NOTICE.txt
new file mode 100644
index 000000000..9791ae13f
--- /dev/null
+++ b/solr-8.1.1/licenses/vorbis-java-tika-NOTICE.txt
@@ -0,0 +1,16 @@
+********************************************************************
+* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
+* by the Xiph.org Foundation, http://www.xiph.org/ *
+********************************************************************
+
+Monty <monty@xiph.org>
+
+and the rest of the Xiph.org Foundation.
+
+Java port by Ben Cohee <bpcohee@gmail.com>
+
+Thanks to:
+IceCast Team (http://www.icecast.org/index.php)
+JCraft Jorbis Team (http://www.jcraft.com/jorbis/)
+Java Sound Resources - Matthias Pfisterer, Florian Bomers - (http://www.jsresources.org/)
+Java Sound Tritonus Team (http://tritonus.org/)
diff --git a/solr-8.1.1/licenses/woodstox-core-asl-4.4.1.jar.sha1 b/solr-8.1.1/licenses/woodstox-core-asl-4.4.1.jar.sha1
new file mode 100644
index 000000000..4432f2960
--- /dev/null
+++ b/solr-8.1.1/licenses/woodstox-core-asl-4.4.1.jar.sha1
@@ -0,0 +1 @@
+84fee5eb1a4a1cefe65b6883c73b3fa83be3c1a1
diff --git a/solr-8.1.1/licenses/woodstox-core-asl-LICENSE-ASL.txt b/solr-8.1.1/licenses/woodstox-core-asl-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/woodstox-core-asl-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/woodstox-core-asl-NOTICE.txt b/solr-8.1.1/licenses/woodstox-core-asl-NOTICE.txt
new file mode 100644
index 000000000..b7ba12b41
--- /dev/null
+++ b/solr-8.1.1/licenses/woodstox-core-asl-NOTICE.txt
@@ -0,0 +1,37 @@
+(From http://woodstox.codehaus.org/4.2.0/release-notes/README)
+--------------
+
+Woodstox is an XML-parser that allows parsing of XML documents in so-called
+pull mode (aka "pull parsing").
+It specifically implements StAX 1.0 API:
+
+http://www.jcp.org/en/jsr/detail?id=173
+
+which defines what is closest to being the J2xE standard for XML pull parsers.
+
+Woodstox was originally written by Tatu Saloranta (<tatu.saloranta@iki.fi>.
+
+Woodstox licensing is explained in file LICENSE; be sure to read it
+to understand licensing.
+
+Contributions to the source code need to be made as specified by
+the License; so that they can be distributed according to the
+License terms.
+--------------
+
+(From http://svn.codehaus.org/woodstox/wstx/trunk/release-notes/asl/LICENSE)
+--------------
+This copy of Woodstox XML processor is licensed under the
+Apache (Software) License, version 2.0 ("the License").
+See the License for details about distribution rights, and the
+specific rights regarding derivate works.
+
+You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/
+
+A copy is also included with both the the downloadable source code package
+and jar that contains class bytecodes, as file "ASL 2.0". In both cases,
+that file should be located next to this file: in source distribution
+the location should be "release-notes/asl"; and in jar "META-INF/"
+--------------
diff --git a/solr-8.1.1/licenses/xercesImpl-2.9.1.jar.sha1 b/solr-8.1.1/licenses/xercesImpl-2.9.1.jar.sha1
new file mode 100644
index 000000000..86ebad926
--- /dev/null
+++ b/solr-8.1.1/licenses/xercesImpl-2.9.1.jar.sha1
@@ -0,0 +1 @@
+7bc7e49ddfe4fb5f193ed37ecc96c12292c8ceb6
diff --git a/solr-8.1.1/licenses/xercesImpl-LICENSE-ASL.txt b/solr-8.1.1/licenses/xercesImpl-LICENSE-ASL.txt
new file mode 100644
index 000000000..a075407ae
--- /dev/null
+++ b/solr-8.1.1/licenses/xercesImpl-LICENSE-ASL.txt
@@ -0,0 +1,56 @@
+xml-commons/LICENSE.txt Id: LICENSE.txt,v 1.1 2002/01/31 23:42:49 curcuru Exp $
+See README.txt for additional licensing information.
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2002 The Apache Software Foundation. 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. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ * not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * nor may "Apache" appear in their name, without prior written
+ * permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
+ * ITS 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
diff --git a/solr-8.1.1/licenses/xercesImpl-NOTICE.txt b/solr-8.1.1/licenses/xercesImpl-NOTICE.txt
new file mode 100644
index 000000000..ff78126d9
--- /dev/null
+++ b/solr-8.1.1/licenses/xercesImpl-NOTICE.txt
@@ -0,0 +1,8 @@
+
+Apache Tika parsers
+Copyright 2007-2010 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+
diff --git a/solr-8.1.1/licenses/xmlbeans-3.0.1.jar.sha1 b/solr-8.1.1/licenses/xmlbeans-3.0.1.jar.sha1
new file mode 100644
index 000000000..5b1d35828
--- /dev/null
+++ b/solr-8.1.1/licenses/xmlbeans-3.0.1.jar.sha1
@@ -0,0 +1 @@
+50d94da791ab1e799a11d6f82410fd7d49f402ca
diff --git a/solr-8.1.1/licenses/xmlbeans-LICENSE-ASL.txt b/solr-8.1.1/licenses/xmlbeans-LICENSE-ASL.txt
new file mode 100644
index 000000000..57bc88a15
--- /dev/null
+++ b/solr-8.1.1/licenses/xmlbeans-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/solr-8.1.1/licenses/xmlbeans-NOTICE.txt b/solr-8.1.1/licenses/xmlbeans-NOTICE.txt
new file mode 100644
index 000000000..906cc4c96
--- /dev/null
+++ b/solr-8.1.1/licenses/xmlbeans-NOTICE.txt
@@ -0,0 +1,29 @@
+ =========================================================================
+ == NOTICE file corresponding to section 4(d) of the Apache License, ==
+ == Version 2.0, in this case for the Apache XmlBeans distribution. ==
+ =========================================================================
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/>.
+
+ Aside from contributions to the Apache XMLBeans project, this
+ software also includes:
+
+ - one or more source files from the Apache Xerces-J and Apache Axis
+ products, Copyright (c) 1999-2003 Apache Software Foundation
+
+ - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web
+ Consortium (Massachusetts Institute of Technology, European Research
+ Consortium for Informatics and Mathematics, Keio University)
+
+ - resolver.jar from Apache Xml Commons project,
+ Copyright (c) 2001-2003 Apache Software Foundation
+
+ - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/,
+ Copyright 2002 Yuval Oren under the terms of the Apache Software License 2.0
+
+ - JSR-173 Streaming API for XML from http://sourceforge.net/projects/xmlpullparser/,
+ Copyright 2005 BEA under the terms of the Apache Software License 2.0
diff --git a/solr-8.1.1/licenses/xmpcore-5.1.3.jar.sha1 b/solr-8.1.1/licenses/xmpcore-5.1.3.jar.sha1
new file mode 100644
index 000000000..bab995752
--- /dev/null
+++ b/solr-8.1.1/licenses/xmpcore-5.1.3.jar.sha1
@@ -0,0 +1 @@
+57e70c3b10ff269fff9adfa7a31d61af0df30757
diff --git a/solr-8.1.1/licenses/xmpcore-LICENSE-BSD.txt b/solr-8.1.1/licenses/xmpcore-LICENSE-BSD.txt
new file mode 100644
index 000000000..18064b772
--- /dev/null
+++ b/solr-8.1.1/licenses/xmpcore-LICENSE-BSD.txt
@@ -0,0 +1,11 @@
+Copyright (c) 2009, Adobe Systems Incorporated All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+* 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.
+
+* Neither the name of Adobe Systems Incorporated, 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 MERCHANT ABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/solr-8.1.1/licenses/xmpcore-NOTICE.txt b/solr-8.1.1/licenses/xmpcore-NOTICE.txt
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/solr-8.1.1/licenses/xmpcore-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr-8.1.1/licenses/xz-1.8.jar.sha1 b/solr-8.1.1/licenses/xz-1.8.jar.sha1
new file mode 100644
index 000000000..2f7c24694
--- /dev/null
+++ b/solr-8.1.1/licenses/xz-1.8.jar.sha1
@@ -0,0 +1 @@
+c4f7d054303948eb6a4066194253886c8af07128
diff --git a/solr-8.1.1/licenses/xz-LICENSE-PD.txt b/solr-8.1.1/licenses/xz-LICENSE-PD.txt
new file mode 100644
index 000000000..bb6c299df
--- /dev/null
+++ b/solr-8.1.1/licenses/xz-LICENSE-PD.txt
@@ -0,0 +1,8 @@
+XZ for Java 1.0 (2011-10-22)
+
+http://tukaani.org/xz/java.html
+
+This Java implementation of XZ has been put into the public domain,
+thus you can do whatever you want with it. All the files in the package
+have been written by Lasse Collin, but some files are heavily based
+on public domain code written by Igor Pavlov.
diff --git a/solr-8.1.1/licenses/xz-NOTICE.txt b/solr-8.1.1/licenses/xz-NOTICE.txt
new file mode 100644
index 000000000..bb6c299df
--- /dev/null
+++ b/solr-8.1.1/licenses/xz-NOTICE.txt
@@ -0,0 +1,8 @@
+XZ for Java 1.0 (2011-10-22)
+
+http://tukaani.org/xz/java.html
+
+This Java implementation of XZ has been put into the public domain,
+thus you can do whatever you want with it. All the files in the package
+have been written by Lasse Collin, but some files are heavily based
+on public domain code written by Igor Pavlov.
diff --git a/solr-8.1.1/licenses/zookeeper-3.4.14.jar.sha1 b/solr-8.1.1/licenses/zookeeper-3.4.14.jar.sha1
new file mode 100644
index 000000000..6adbf71d7
--- /dev/null
+++ b/solr-8.1.1/licenses/zookeeper-3.4.14.jar.sha1
@@ -0,0 +1 @@
+c114c1e1c8172a7cd3f6ae39209a635f7a06c1a1
diff --git a/solr-8.1.1/licenses/zookeeper-LICENSE-ASL.txt b/solr-8.1.1/licenses/zookeeper-LICENSE-ASL.txt
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/solr-8.1.1/licenses/zookeeper-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/solr-8.1.1/licenses/zookeeper-NOTICE.txt b/solr-8.1.1/licenses/zookeeper-NOTICE.txt
new file mode 100644
index 000000000..54c971ea4
--- /dev/null
+++ b/solr-8.1.1/licenses/zookeeper-NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Zookeeper
+Copyright 2011 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/solr-8.1.1/server/README.txt b/solr-8.1.1/server/README.txt
new file mode 100644
index 000000000..d4b421cac
--- /dev/null
+++ b/solr-8.1.1/server/README.txt
@@ -0,0 +1,109 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+Solr server
+------------
+
+This directory contains an instance of the Jetty Servlet container setup to
+run Solr.
+
+To run Solr:
+
+ cd $SOLR_INSTALL
+ bin/solr start
+
+where $SOLR_INSTALL is the location where you extracted the Solr installation bundle.
+
+Server directory layout
+-----------------------
+
+server/contexts
+
+ This directory contains the Jetty Web application deployment descriptor for the Solr Web app.
+
+server/etc
+
+ Jetty configuration and example SSL keystore
+
+server/lib
+
+ Jetty and other 3rd party libraries
+
+server/logs
+
+ Solr log files
+
+server/resources
+
+ Contains configuration files, such as the Log4j configuration (log4j2.xml) for configuring Solr loggers.
+
+server/scripts/cloud-scripts
+
+ Command-line utility for working with ZooKeeper when running in SolrCloud mode, see zkcli.sh / .cmd for
+ usage information.
+
+server/solr
+
+ Default solr.solr.home directory where Solr will create core directories; must contain solr.xml
+
+server/solr/configsets
+
+ Directories containing different configuration options for running Solr.
+
+ _default : Bare minimum configurations with field-guessing and managed schema turned
+ on by default, so as to start indexing data in Solr without having to design
+ a schema upfront. You can use the REST API to manage your schema as you refine your index
+ requirements. You can turn off the field (for a collection, say mycollection) guessing by:
+ curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
+
+ sample_techproducts_configs : Comprehensive example configuration that demonstrates many of the powerful
+ features of Solr, based on the use case of building a search solution for
+ tech products.
+
+server/solr-webapp
+
+ Contains files used by the Solr server; do not edit files in this directory (Solr is not a Java Web application).
+
+
+Notes About Solr Examples
+--------------------------
+
+* SolrHome *
+
+By default, start.jar starts Solr in Jetty using the default Solr Home
+directory of "./solr/" (relative to the working directory of the servlet
+container).
+
+* References to Jar Files Outside This Directory *
+
+Various example SolrHome dirs contained in this directory may use "<lib>"
+statements in the solrconfig.xml file to reference plugin jars outside of
+this directory for loading "contrib" plugins via relative paths.
+
+If you make a copy of this example server and wish to use the
+ExtractingRequestHandler (SolrCell), DataImportHandler (DIH), the
+clustering component, or any other modules in "contrib", you will need to
+copy the required jars or update the paths to those jars in your
+solrconfig.xml.
+
+* Logging *
+
+By default, Jetty & Solr will log to the console and logs/solr.log. This can
+be convenient when first getting started, but eventually you will want to
+log just to a file. To configure logging, edit the log4j2.xml file in
+"resources".
+
+It is also possible to setup log4j or other popular logging frameworks.
+
diff --git a/solr-8.1.1/server/contexts/solr-jetty-context.xml b/solr-8.1.1/server/contexts/solr-jetty-context.xml
new file mode 100644
index 000000000..6392cd11b
--- /dev/null
+++ b/solr-8.1.1/server/contexts/solr-jetty-context.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+<Configure class="org.eclipse.jetty.webapp.WebAppContext">
+ <Set name="contextPath"><Property name="hostContext" default="/solr"/></Set>
+ <Set name="war"><Property name="jetty.base"/>/solr-webapp/webapp</Set>
+ <Set name="defaultsDescriptor"><Property name="jetty.base"/>/etc/webdefault.xml</Set>
+ <Set name="extractWAR">false</Set>
+</Configure>
diff --git a/solr-8.1.1/server/etc/jetty-http.xml b/solr-8.1.1/server/etc/jetty-http.xml
new file mode 100644
index 000000000..65b979ea1
--- /dev/null
+++ b/solr-8.1.1/server/etc/jetty-http.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- ============================================================= -->
+<!-- Configure the Jetty Server instance with an ID "Server" -->
+<!-- by adding a HTTP connector. -->
+<!-- This configuration must be used in conjunction with jetty.xml -->
+<!-- ============================================================= -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+ <!-- =========================================================== -->
+ <!-- Add a HTTP Connector. -->
+ <!-- Configure an o.e.j.server.ServerConnector with a single -->
+ <!-- HttpConnectionFactory instance using the common httpConfig -->
+ <!-- instance defined in jetty.xml -->
+ <!-- -->
+ <!-- Consult the javadoc of o.e.j.server.ServerConnector and -->
+ <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
+ <!-- that may be set here. -->
+ <!-- =========================================================== -->
+ <Call name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server"><Ref refid="Server" /></Arg>
+ <Arg name="acceptors" type="int"><Property name="solr.jetty.http.acceptors" default="-1"/></Arg>
+ <Arg name="selectors" type="int"><Property name="solr.jetty.http.selectors" default="-1"/></Arg>
+ <Arg name="factories">
+ <Array type="org.eclipse.jetty.server.ConnectionFactory">
+ <Item>
+ <New class="org.eclipse.jetty.server.HttpConnectionFactory">
+ <Arg name="config"><Ref refid="httpConfig" /></Arg>
+ </New>
+ </Item>
+ <Item>
+ <New class="org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory">
+ <Arg name="config"><Ref refid="httpConfig" /></Arg>
+ </New>
+ </Item>
+ </Array>
+ </Arg>
+ <Set name="host"><Property name="jetty.host" /></Set>
+ <Set name="port"><Property name="jetty.port" default="8983" /></Set>
+ <Set name="idleTimeout"><Property name="solr.jetty.http.idleTimeout" default="120000"/></Set>
+ <Set name="soLingerTime"><Property name="solr.jetty.http.soLingerTime" default="-1"/></Set>
+ <Set name="acceptorPriorityDelta"><Property name="solr.jetty.http.acceptorPriorityDelta" default="0"/></Set>
+ <Set name="acceptQueueSize"><Property name="solr.jetty.http.acceptQueueSize" default="0"/></Set>
+ </New>
+ </Arg>
+ </Call>
+
+</Configure>
diff --git a/solr-8.1.1/server/etc/jetty-https.xml b/solr-8.1.1/server/etc/jetty-https.xml
new file mode 100644
index 000000000..41c3f197d
--- /dev/null
+++ b/solr-8.1.1/server/etc/jetty-https.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- ============================================================= -->
+<!-- Configure a HTTPS connector. -->
+<!-- This configuration must be used in conjunction with jetty.xml -->
+<!-- and jetty-ssl.xml. -->
+<!-- ============================================================= -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+ <Ref refid="sslContextFactory">
+ <Set name="CipherComparator">
+ <Get class="org.eclipse.jetty.http2.HTTP2Cipher" name="COMPARATOR"/>
+ </Set>
+ <Set name="useCipherSuitesOrder">true</Set>
+ </Ref>
+
+ <!-- =========================================================== -->
+ <!-- Add a HTTPS Connector. -->
+ <!-- Configure an o.e.j.server.ServerConnector with connection -->
+ <!-- factories for TLS (aka SSL) and HTTP to provide HTTPS. -->
+ <!-- All accepted TLS connections are wired to a HTTP connection.-->
+ <!-- -->
+ <!-- Consult the javadoc of o.e.j.server.ServerConnector, -->
+ <!-- o.e.j.server.SslConnectionFactory and -->
+ <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
+ <!-- that may be set here. -->
+ <!-- =========================================================== -->
+ <Call id="httpsConnector" name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server"><Ref refid="Server" /></Arg>
+ <Arg name="acceptors" type="int"><Property name="solr.jetty.ssl.acceptors" default="-1"/></Arg>
+ <Arg name="selectors" type="int"><Property name="solr.jetty.ssl.selectors" default="-1"/></Arg>
+ <Arg name="factories">
+ <Array type="org.eclipse.jetty.server.ConnectionFactory">
+ <Item>
+ <New class="org.eclipse.jetty.server.SslConnectionFactory">
+ <Arg name="next">alpn</Arg>
+ <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
+ </New>
+ </Item>
+ <Item>
+ <New id="alpn" class="org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory">
+ <Arg name="protocols">
+ <Array type="java.lang.String">
+ <Item>h2</Item>
+ <Item>http/1.1</Item>
+ </Array>
+ </Arg>
+ <Set name="defaultProtocol">http/1.1</Set>
+ </New>
+ </Item>
+ <Item>
+ <New class="org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory">
+ <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
+ </New>
+ </Item>
+ <Item>
+ <New class="org.eclipse.jetty.server.HttpConnectionFactory">
+ <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
+ </New>
+ </Item>
+ </Array>
+ </Arg>
+ <Set name="host"><Property name="solr.jetty.host" /></Set>
+ <Set name="port"><Property name="solr.jetty.https.port" default="8983" /></Set>
+ <Set name="idleTimeout"><Property name="solr.jetty.https.timeout" default="120000"/></Set>
+ <Set name="soLingerTime"><Property name="solr.jetty.https.soLingerTime" default="-1"/></Set>
+ <Set name="acceptorPriorityDelta"><Property name="solr.jetty.ssl.acceptorPriorityDelta" default="0"/></Set>
+ <Set name="acceptQueueSize"><Property name="solr.jetty.https.acceptQueueSize" default="0"/></Set>
+ </New>
+ </Arg>
+ </Call>
+
+</Configure>
diff --git a/solr-8.1.1/server/etc/jetty-https8.xml b/solr-8.1.1/server/etc/jetty-https8.xml
new file mode 100644
index 000000000..d8f38b602
--- /dev/null
+++ b/solr-8.1.1/server/etc/jetty-https8.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- ============================================================= -->
+<!-- Configure a HTTPS connector. -->
+<!-- This configuration must be used in conjunction with jetty.xml -->
+<!-- and jetty-ssl.xml. -->
+<!-- ============================================================= -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+ <!-- =========================================================== -->
+ <!-- Add a HTTPS Connector. -->
+ <!-- Configure an o.e.j.server.ServerConnector with connection -->
+ <!-- factories for TLS (aka SSL) and HTTP to provide HTTPS. -->
+ <!-- All accepted TLS connections are wired to a HTTP connection.-->
+ <!-- -->
+ <!-- Consult the javadoc of o.e.j.server.ServerConnector, -->
+ <!-- o.e.j.server.SslConnectionFactory and -->
+ <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
+ <!-- that may be set here. -->
+ <!-- =========================================================== -->
+ <Call id="httpsConnector" name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server"><Ref refid="Server" /></Arg>
+ <Arg name="acceptors" type="int"><Property name="solr.jetty.ssl.acceptors" default="-1"/></Arg>
+ <Arg name="selectors" type="int"><Property name="solr.jetty.ssl.selectors" default="-1"/></Arg>
+ <Arg name="factories">
+ <Array type="org.eclipse.jetty.server.ConnectionFactory">
+ <Item>
+ <New class="org.eclipse.jetty.server.SslConnectionFactory">
+ <Arg name="next">http/1.1</Arg>
+ <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
+ </New>
+ </Item>
+ <Item>
+ <New class="org.eclipse.jetty.server.HttpConnectionFactory">
+ <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
+ </New>
+ </Item>
+ </Array>
+ </Arg>
+ <Set name="host"><Property name="solr.jetty.host" /></Set>
+ <Set name="port"><Property name="solr.jetty.https.port" default="8983" /></Set>
+ <Set name="idleTimeout"><Property name="solr.jetty.https.timeout" default="120000"/></Set>
+ <Set name="soLingerTime"><Property name="solr.jetty.https.soLingerTime" default="-1"/></Set>
+ <Set name="acceptorPriorityDelta"><Property name="solr.jetty.ssl.acceptorPriorityDelta" default="0"/></Set>
+ <Set name="acceptQueueSize"><Property name="solr.jetty.https.acceptQueueSize" default="0"/></Set>
+ </New>
+ </Arg>
+ </Call>
+</Configure>
diff --git a/solr-8.1.1/server/etc/jetty-ssl.xml b/solr-8.1.1/server/etc/jetty-ssl.xml
new file mode 100644
index 000000000..9ff5accf4
--- /dev/null
+++ b/solr-8.1.1/server/etc/jetty-ssl.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- ============================================================= -->
+<!-- Configure a TLS (SSL) Context Factory -->
+<!-- This configuration must be used in conjunction with jetty.xml -->
+<!-- and either jetty-https.xml or jetty-spdy.xml (but not both) -->
+<!-- ============================================================= -->
+<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
+ <Call class="org.apache.solr.util.configuration.SSLConfigurationsFactory" name="current">
+ <Get name="keyStorePassword" id="keyStorePassword"/>
+ <Get name="trustStorePassword" id="trustStorePassword"/>
+ </Call>
+ <Set name="KeyStorePath"><Property name="solr.jetty.keystore" default="./etc/solr-ssl.keystore.jks"/></Set>
+ <Set name="KeyStorePassword"><Ref refid="keyStorePassword"/></Set>
+ <Set name="TrustStorePath"><Property name="solr.jetty.truststore" default="./etc/solr-ssl.keystore.jks"/></Set>
+ <Set name="TrustStorePassword"><Ref refid="trustStorePassword"/></Set>
+ <Set name="NeedClientAuth"><Property name="solr.jetty.ssl.needClientAuth" default="false"/></Set>
+ <Set name="WantClientAuth"><Property name="solr.jetty.ssl.wantClientAuth" default="false"/></Set>
+ <Set name="KeyStoreType"><Property name="solr.jetty.keystore.type" default="JKS"/></Set>
+ <Set name="TrustStoreType"><Property name="solr.jetty.truststore.type" default="JKS"/></Set>
+
+ <!-- =========================================================== -->
+ <!-- Create a TLS specific HttpConfiguration based on the -->
+ <!-- common HttpConfiguration defined in jetty.xml -->
+ <!-- Add a SecureRequestCustomizer to extract certificate and -->
+ <!-- session information -->
+ <!-- =========================================================== -->
+ <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
+ <Arg><Ref refid="httpConfig"/></Arg>
+ <Call name="addCustomizer">
+ <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg>
+ </Call>
+ </New>
+
+</Configure>
diff --git a/solr-8.1.1/server/etc/jetty.xml b/solr-8.1.1/server/etc/jetty.xml
new file mode 100644
index 000000000..1f6de775a
--- /dev/null
+++ b/solr-8.1.1/server/etc/jetty.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server -->
+<!-- -->
+<!-- Documentation of this file format can be found at: -->
+<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax -->
+<!-- -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+ <!-- =========================================================== -->
+ <!-- Configure the Server Thread Pool. -->
+ <!-- The server holds a common thread pool which is used by -->
+ <!-- default as the executor used by all connectors and servlet -->
+ <!-- dispatches. -->
+ <!-- -->
+ <!-- Configuring a fixed thread pool is vital to controlling the -->
+ <!-- maximal memory footprint of the server and is a key tuning -->
+ <!-- parameter for tuning. In an application that rarely blocks -->
+ <!-- then maximal threads may be close to the number of 5*CPUs. -->
+ <!-- In an application that frequently blocks, then maximal -->
+ <!-- threads should be set as high as possible given the memory -->
+ <!-- available. -->
+ <!-- -->
+ <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool -->
+ <!-- for all configuration that may be set here. -->
+ <!-- =========================================================== -->
+ <Arg name="threadpool">
+ <New id="threadpool" class="com.codahale.metrics.jetty9.InstrumentedQueuedThreadPool">
+ <Arg name="registry">
+ <Call id="solrJettyMetricRegistry" name="getOrCreate" class="com.codahale.metrics.SharedMetricRegistries">
+ <Arg>solr.jetty</Arg>
+ </Call>
+ </Arg>
+ </New>
+ </Arg>
+
+ <Get name="ThreadPool">
+ <Set name="minThreads" type="int"><Property name="solr.jetty.threads.min" default="10"/></Set>
+ <Set name="maxThreads" type="int"><Property name="solr.jetty.threads.max" default="10000"/></Set>
+ <Set name="idleTimeout" type="int"><Property name="solr.jetty.threads.idle.timeout" default="120000"/></Set>
+ <Set name="stopTimeout" type="int"><Property name="solr.jetty.threads.stop.timeout" default="60000"/></Set>
+ <Set name="detailedDump">false</Set>
+ </Get>
+
+
+ <!-- =========================================================== -->
+ <!-- Http Configuration. -->
+ <!-- This is a common configuration instance used by all -->
+ <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
+ <!-- It configures the non wire protocol aspects of the HTTP -->
+ <!-- semantic. -->
+ <!-- -->
+ <!-- This configuration is only defined here and is used by -->
+ <!-- reference from the jetty-http.xml, jetty-https.xml and -->
+ <!-- jetty-spdy.xml configuration files which instantiate the -->
+ <!-- connectors. -->
+ <!-- -->
+ <!-- Consult the javadoc of o.e.j.server.HttpConfiguration -->
+ <!-- for all configuration that may be set here. -->
+ <!-- =========================================================== -->
+ <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
+ <Set name="secureScheme">https</Set>
+ <Set name="securePort"><Property name="solr.jetty.secure.port" default="8443" /></Set>
+ <Set name="outputBufferSize"><Property name="solr.jetty.output.buffer.size" default="32768" /></Set>
+ <Set name="outputAggregationSize"><Property name="solr.jetty.output.aggregation.size" default="8192" /></Set>
+ <Set name="requestHeaderSize"><Property name="solr.jetty.request.header.size" default="8192" /></Set>
+ <Set name="responseHeaderSize"><Property name="solr.jetty.response.header.size" default="8192" /></Set>
+ <Set name="sendServerVersion"><Property name="solr.jetty.send.server.version" default="false" /></Set>
+ <Set name="sendDateHeader"><Property name="solr.jetty.send.date.header" default="false" /></Set>
+ <Set name="headerCacheSize"><Property name="solr.jetty.header.cache.size" default="512" /></Set>
+ <Set name="delayDispatchUntilContent"><Property name="solr.jetty.delayDispatchUntilContent" default="false"/></Set>
+ <!-- Uncomment to enable handling of X-Forwarded- style headers
+ <Call name="addCustomizer">
+ <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
+ </Call>
+ -->
+ </New>
+
+ <!-- =========================================================== -->
+ <!-- RewriteHandle to redirect root to Solr -->
+ <!-- =========================================================== -->
+ <New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
+ <Set name="rewriteRequestURI">true</Set>
+ <Set name="rewritePathInfo">false</Set>
+ <Set name="originalPathAttribute">requestedPath</Set>
+
+ <Call name="addRule">
+ <Arg>
+ <New class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule">
+ <Set name="regex">^/$</Set>
+ <Set name="replacement">/solr/</Set>
+ </New>
+ </Arg>
+ </Call>
+ <Call name="addRule">
+ <Arg>
+ <New class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
+ <Set name="pattern">/v2/*</Set>
+ <Set name="replacement">/solr/____v2</Set>
+ </New>
+ </Arg>
+ </Call>
+ <Call name="addRule">
+ <Arg>
+ <New class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
+ <Set name="pattern">/api/*</Set>
+ <Set name="replacement">/solr/____v2</Set>
+ </New>
+ </Arg>
+ </Call>
+ <Set name="handler">
+ <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+ <Set name="handlers">
+ <Array type="org.eclipse.jetty.server.Handler">
+ <Item>
+ <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+ </Item>
+ <Item>
+ <New id="InstrumentedHandler" class="com.codahale.metrics.jetty9.InstrumentedHandler">
+ <Arg><Ref refid="solrJettyMetricRegistry"/></Arg>
+ <Set name="handler">
+ <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
+ </Set>
+ </New>
+ </Item>
+ <Item>
+ <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+ </New>
+
+ <!-- =========================================================== -->
+ <!-- Set handler Collection Structure -->
+ <!-- =========================================================== -->
+ <Set name="handler">
+ <Ref id="RewriteHandler"/>
+ </Set>
+
+ <!-- =========================================================== -->
+ <!-- Configure Request Log -->
+ <!-- =========================================================== -->
+ <!--
+ <Ref id="Handlers">
+ <Call name="addHandler">
+ <Arg>
+ <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
+ <Set name="requestLog">
+ <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
+ <Set name="filename">
+ logs/request.yyyy_mm_dd.log
+ </Set>
+ <Set name="filenameDateFormat">yyyy_MM_dd</Set>
+ <Set name="retainDays">90</Set>
+ <Set name="append">true</Set>
+ <Set name="extended">false</Set>
+ <Set name="logCookies">false</Set>
+ <Set name="LogTimeZone">UTC</Set>
+ </New>
+ </Set>
+ </New>
+ </Arg>
+ </Call>
+ </Ref>
+ -->
+
+ <!-- =========================================================== -->
+ <!-- extra options -->
+ <!-- =========================================================== -->
+ <Set name="stopAtShutdown">true</Set>
+ <Set name="dumpAfterStart">false</Set>
+ <Set name="dumpBeforeStop">false</Set>
+
+ <Call name="addBean">
+ <Arg>
+ <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+ <Set name="contexts">
+ <Ref refid="Contexts" />
+ </Set>
+ <Call name="setContextAttribute">
+ <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
+ <Arg>.*/servlet-api-[^/]*\.jar$</Arg>
+ </Call>
+
+ <Call name="addAppProvider">
+ <Arg>
+ <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+ <Set name="monitoredDirName"><Property name="jetty.base" default="."/>/contexts</Set>
+ <Set name="scanInterval">0</Set>
+ </New>
+ </Arg>
+ </Call>
+
+ <!-- Add a customize step to the deployment lifecycle -->
+ <!-- uncomment and replace DebugBinding with your extended AppLifeCycle.Binding class
+ <Call name="insertLifeCycleNode">
+ <Arg>deployed</Arg>
+ <Arg>starting</Arg>
+ <Arg>customise</Arg>
+ </Call>
+ <Call name="addLifeCycleBinding">
+ <Arg>
+ <New class="org.eclipse.jetty.deploy.bindings.DebugBinding">
+ <Arg>customise</Arg>
+ </New>
+ </Arg>
+ </Call>
+ -->
+
+ </New>
+ </Arg>
+ </Call>
+
+</Configure>
diff --git a/solr-8.1.1/server/etc/webdefault.xml b/solr-8.1.1/server/etc/webdefault.xml
new file mode 100644
index 000000000..f0882926a
--- /dev/null
+++ b/solr-8.1.1/server/etc/webdefault.xml
@@ -0,0 +1,527 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+ <!-- ===================================================================== -->
+ <!-- This file contains the default descriptor for web applications. -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- The intent of this descriptor is to include jetty specific or common -->
+ <!-- configuration for all webapps. If a context has a webdefault.xml -->
+ <!-- descriptor, it is applied before the contexts own web.xml file -->
+ <!-- -->
+ <!-- A context may be assigned a default descriptor by: -->
+ <!-- + Calling WebApplicationContext.setDefaultsDescriptor -->
+ <!-- + Passed an arg to addWebApplications -->
+ <!-- -->
+ <!-- This file is used both as the resource within the jetty.jar (which is -->
+ <!-- used as the default if no explicit defaults descriptor is set) and it -->
+ <!-- is copied to the etc directory of the Jetty distro and explicitly -->
+ <!-- by the jetty.xml file. -->
+ <!-- -->
+ <!-- ===================================================================== -->
+<web-app
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ metadata-complete="true"
+ version="2.5"
+>
+
+ <description>
+ Default web.xml file.
+ This file is applied to a Web application before its own WEB_INF/web.xml file
+ </description>
+
+ <!-- ==================================================================== -->
+ <!-- Removes static references to beans from javax.el.BeanELResolver to -->
+ <!-- ensure webapp classloader can be released on undeploy -->
+ <!-- ==================================================================== -->
+ <listener>
+ <listener-class>org.eclipse.jetty.servlet.listener.ELContextCleaner</listener-class>
+ </listener>
+
+ <!-- ==================================================================== -->
+ <!-- Removes static cache of Methods from java.beans.Introspector to -->
+ <!-- ensure webapp classloader can be released on undeploy -->
+ <!-- ==================================================================== -->
+ <listener>
+ <listener-class>org.eclipse.jetty.servlet.listener.IntrospectorCleaner</listener-class>
+ </listener>
+
+
+ <!-- ==================================================================== -->
+ <!-- Context params to control Session Cookies -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!--
+ UNCOMMENT TO ACTIVATE <context-param> <param-name>org.eclipse.jetty.servlet.SessionDomain</param-name> <param-value>127.0.0.1</param-value> </context-param> <context-param>
+ <param-name>org.eclipse.jetty.servlet.SessionPath</param-name> <param-value>/</param-value> </context-param> <context-param> <param-name>org.eclipse.jetty.servlet.MaxAge</param-name>
+ <param-value>-1</param-value> </context-param>
+ -->
+
+ <!-- ==================================================================== -->
+ <!-- The default servlet. -->
+ <!-- This servlet, normally mapped to /, provides the handling for static -->
+ <!-- content, OPTIONS and TRACE methods for the context. -->
+ <!-- The following initParameters are supported: -->
+ <!--
+ * acceptRanges If true, range requests and responses are
+ * supported
+ *
+ * dirAllowed If true, directory listings are returned if no
+ * welcome file is found. Else 403 Forbidden.
+ *
+ * welcomeServlets If true, attempt to dispatch to welcome files
+ * that are servlets, but only after no matching static
+ * resources could be found. If false, then a welcome
+ * file must exist on disk. If "exact", then exact
+ * servlet matches are supported without an existing file.
+ * Default is true.
+ *
+ * This must be false if you want directory listings,
+ * but have index.jsp in your welcome file list.
+ *
+ * redirectWelcome If true, welcome files are redirected rather than
+ * forwarded to.
+ *
+ * gzip If set to true, then static content will be served as
+ * gzip content encoded if a matching resource is
+ * found ending with ".gz"
+ *
+ * resourceBase Set to replace the context resource base
+ *
+ * resourceCache If set, this is a context attribute name, which the servlet
+ * will use to look for a shared ResourceCache instance.
+ *
+ * relativeResourceBase
+ * Set with a pathname relative to the base of the
+ * servlet context root. Useful for only serving static content out
+ * of only specific subdirectories.
+ *
+ * aliases If True, aliases of resources are allowed (eg. symbolic
+ * links and caps variations). May bypass security constraints.
+ *
+ * maxCacheSize The maximum total size of the cache or 0 for no cache.
+ * maxCachedFileSize The maximum size of a file to cache
+ * maxCachedFiles The maximum number of files to cache
+ *
+ * useFileMappedBuffer
+ * If set to true, it will use mapped file buffer to serve static content
+ * when using NIO connector. Setting this value to false means that
+ * a direct buffer will be used instead of a mapped file buffer.
+ * By default, this is set to true.
+ *
+ * cacheControl If set, all static content will have this value set as the cache-control
+ * header.
+ -->
+
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <servlet>
+ <servlet-name>default</servlet-name>
+ <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+ <init-param>
+ <param-name>aliases</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>acceptRanges</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <init-param>
+ <param-name>dirAllowed</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>welcomeServlets</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>redirectWelcome</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCacheSize</param-name>
+ <param-value>256000000</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCachedFileSize</param-name>
+ <param-value>200000000</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCachedFiles</param-name>
+ <param-value>2048</param-value>
+ </init-param>
+ <init-param>
+ <param-name>gzip</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <init-param>
+ <param-name>useFileMappedBuffer</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <!--
+ <init-param>
+ <param-name>resourceCache</param-name>
+ <param-value>resourceCache</param-value>
+ </init-param>
+ -->
+ <!--
+ <init-param>
+ <param-name>cacheControl</param-name>
+ <param-value>max-age=3600,public</param-value>
+ </init-param>
+ -->
+ <load-on-startup>0</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>
+
+
+ <!-- ==================================================================== -->
+ <!-- JSP Servlet -->
+ <!-- This is the jasper JSP servlet from the jakarta project -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- The JSP page compiler and execution servlet, which is the mechanism -->
+ <!-- used by Glassfish to support JSP pages. Traditionally, this servlet -->
+ <!-- is mapped to URL patterh "*.jsp". This servlet supports the -->
+ <!-- following initialization parameters (default values are in square -->
+ <!-- brackets): -->
+ <!-- -->
+ <!-- checkInterval If development is false and reloading is true, -->
+ <!-- background compiles are enabled. checkInterval -->
+ <!-- is the time in seconds between checks to see -->
+ <!-- if a JSP page needs to be recompiled. [300] -->
+ <!-- -->
+ <!-- compiler Which compiler Ant should use to compile JSP -->
+ <!-- pages. See the Ant documenation for more -->
+ <!-- information. [javac] -->
+ <!-- -->
+ <!-- classdebuginfo Should the class file be compiled with -->
+ <!-- debugging information? [true] -->
+ <!-- -->
+ <!-- classpath What class path should I use while compiling -->
+ <!-- generated servlets? [Created dynamically -->
+ <!-- based on the current web application] -->
+ <!-- Set to ? to make the container explicitly set -->
+ <!-- this parameter. -->
+ <!-- -->
+ <!-- development Is Jasper used in development mode (will check -->
+ <!-- for JSP modification on every access)? [true] -->
+ <!-- -->
+ <!-- enablePooling Determines whether tag handler pooling is -->
+ <!-- enabled [true] -->
+ <!-- -->
+ <!-- fork Tell Ant to fork compiles of JSP pages so that -->
+ <!-- a separate JVM is used for JSP page compiles -->
+ <!-- from the one Tomcat is running in. [true] -->
+ <!-- -->
+ <!-- ieClassId The class-id value to be sent to Internet -->
+ <!-- Explorer when using <jsp:plugin> tags. -->
+ <!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] -->
+ <!-- -->
+ <!-- javaEncoding Java file encoding to use for generating java -->
+ <!-- source files. [UTF-8] -->
+ <!-- -->
+ <!-- keepgenerated Should we keep the generated Java source code -->
+ <!-- for each page instead of deleting it? [true] -->
+ <!-- -->
+ <!-- logVerbosityLevel The level of detailed messages to be produced -->
+ <!-- by this servlet. Increasing levels cause the -->
+ <!-- generation of more messages. Valid values are -->
+ <!-- FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
+ <!-- [WARNING] -->
+ <!-- -->
+ <!-- mappedfile Should we generate static content with one -->
+ <!-- print statement per input line, to ease -->
+ <!-- debugging? [false] -->
+ <!-- -->
+ <!-- -->
+ <!-- reloading Should Jasper check for modified JSPs? [true] -->
+ <!-- -->
+ <!-- suppressSmap Should the generation of SMAP info for JSR45 -->
+ <!-- debugging be suppressed? [false] -->
+ <!-- -->
+ <!-- dumpSmap Should the SMAP info for JSR45 debugging be -->
+ <!-- dumped to a file? [false] -->
+ <!-- False if suppressSmap is true -->
+ <!-- -->
+ <!-- scratchdir What scratch directory should we use when -->
+ <!-- compiling JSP pages? [default work directory -->
+ <!-- for the current web application] -->
+ <!-- -->
+ <!-- tagpoolMaxSize The maximum tag handler pool size [5] -->
+ <!-- -->
+ <!-- xpoweredBy Determines whether X-Powered-By response -->
+ <!-- header is added by generated servlet [false] -->
+ <!-- -->
+ <!-- If you wish to use Jikes to compile JSP pages: -->
+ <!-- Set the init parameter "compiler" to "jikes". Define -->
+ <!-- the property "-Dbuild.compiler.emacs=true" when starting Jetty -->
+ <!-- to cause Jikes to emit error messages in a format compatible with -->
+ <!-- Jasper. -->
+ <!-- If you get an error reporting that jikes can't use UTF-8 encoding, -->
+ <!-- try setting the init parameter "javaEncoding" to "ISO-8859-1". -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <servlet
+ id="jsp"
+ >
+ <servlet-name>jsp</servlet-name>
+ <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+ <init-param>
+ <param-name>logVerbosityLevel</param-name>
+ <param-value>DEBUG</param-value>
+ </init-param>
+ <init-param>
+ <param-name>fork</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>xpoweredBy</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <!--
+ <init-param>
+ <param-name>classpath</param-name>
+ <param-value>?</param-value>
+ </init-param>
+ -->
+ <load-on-startup>0</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>jsp</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ <url-pattern>*.jspf</url-pattern>
+ <url-pattern>*.jspx</url-pattern>
+ <url-pattern>*.xsp</url-pattern>
+ <url-pattern>*.JSP</url-pattern>
+ <url-pattern>*.JSPF</url-pattern>
+ <url-pattern>*.JSPX</url-pattern>
+ <url-pattern>*.XSP</url-pattern>
+ </servlet-mapping>
+
+ <!-- ==================================================================== -->
+ <!-- Dynamic Servlet Invoker. -->
+ <!-- This servlet invokes anonymous servlets that have not been defined -->
+ <!-- in the web.xml or by other means. The first element of the pathInfo -->
+ <!-- of a request passed to the envoker is treated as a servlet name for -->
+ <!-- an existing servlet, or as a class name of a new servlet. -->
+ <!-- This servlet is normally mapped to /servlet/* -->
+ <!-- This servlet support the following initParams: -->
+ <!-- -->
+ <!-- nonContextServlets If false, the invoker can only load -->
+ <!-- servlets from the contexts classloader. -->
+ <!-- This is false by default and setting this -->
+ <!-- to true may have security implications. -->
+ <!-- -->
+ <!-- verbose If true, log dynamic loads -->
+ <!-- -->
+ <!-- * All other parameters are copied to the -->
+ <!-- each dynamic servlet as init parameters -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!--
+ Uncomment for dynamic invocation <servlet> <servlet-name>invoker</servlet-name> <servlet-class>org.eclipse.jetty.servlet.Invoker</servlet-class> <init-param> <param-name>verbose</param-name>
+ <param-value>false</param-value> </init-param> <init-param> <param-name>nonContextServlets</param-name> <param-value>false</param-value> </init-param> <init-param>
+ <param-name>dynamicParam</param-name> <param-value>anyValue</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name>
+ <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
+ -->
+
+
+
+ <!-- ==================================================================== -->
+ <session-config>
+ <session-timeout>30</session-timeout>
+ </session-config>
+
+ <!-- ==================================================================== -->
+ <!-- Default MIME mappings -->
+ <!-- The default MIME mappings are provided by the mime.properties -->
+ <!-- resource in the org.eclipse.jetty.server.jar file. Additional or modified -->
+ <!-- mappings may be specified here -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- UNCOMMENT TO ACTIVATE
+ <mime-mapping>
+ <extension>mysuffix</extension>
+ <mime-type>mymime/type</mime-type>
+ </mime-mapping>
+ -->
+
+ <!-- ==================================================================== -->
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+ <!-- ==================================================================== -->
+ <locale-encoding-mapping-list>
+ <locale-encoding-mapping>
+ <locale>ar</locale>
+ <encoding>ISO-8859-6</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>be</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>bg</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ca</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>cs</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>da</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>de</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>el</locale>
+ <encoding>ISO-8859-7</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>en</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>es</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>et</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>fi</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>fr</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>hr</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>hu</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>is</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>it</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>iw</locale>
+ <encoding>ISO-8859-8</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ja</locale>
+ <encoding>Shift_JIS</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ko</locale>
+ <encoding>EUC-KR</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>lt</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>lv</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>mk</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>nl</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>no</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>pl</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>pt</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ro</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ru</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sh</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sk</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sl</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sq</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sr</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sv</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>tr</locale>
+ <encoding>ISO-8859-9</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>uk</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>zh</locale>
+ <encoding>GB2312</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>zh_TW</locale>
+ <encoding>Big5</encoding>
+ </locale-encoding-mapping>
+ </locale-encoding-mapping-list>
+
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Disable TRACE</web-resource-name>
+ <url-pattern>/</url-pattern>
+ <http-method>TRACE</http-method>
+ </web-resource-collection>
+ <auth-constraint/>
+ </security-constraint>
+
+</web-app>
+
diff --git a/solr-8.1.1/server/lib/ext/disruptor-3.4.2.jar b/solr-8.1.1/server/lib/ext/disruptor-3.4.2.jar
new file mode 100644
index 000000000..b366bbebc
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/disruptor-3.4.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/jcl-over-slf4j-1.7.24.jar b/solr-8.1.1/server/lib/ext/jcl-over-slf4j-1.7.24.jar
new file mode 100644
index 000000000..2ea9e3748
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/jcl-over-slf4j-1.7.24.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/jul-to-slf4j-1.7.24.jar b/solr-8.1.1/server/lib/ext/jul-to-slf4j-1.7.24.jar
new file mode 100644
index 000000000..82f8d17c0
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/jul-to-slf4j-1.7.24.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/log4j-1.2-api-2.11.2.jar b/solr-8.1.1/server/lib/ext/log4j-1.2-api-2.11.2.jar
new file mode 100644
index 000000000..871e2e121
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/log4j-1.2-api-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/log4j-api-2.11.2.jar b/solr-8.1.1/server/lib/ext/log4j-api-2.11.2.jar
new file mode 100644
index 000000000..809773c0b
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/log4j-api-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/log4j-core-2.11.2.jar b/solr-8.1.1/server/lib/ext/log4j-core-2.11.2.jar
new file mode 100644
index 000000000..dcb652cb7
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/log4j-core-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/log4j-slf4j-impl-2.11.2.jar b/solr-8.1.1/server/lib/ext/log4j-slf4j-impl-2.11.2.jar
new file mode 100644
index 000000000..ce8acdaae
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/log4j-slf4j-impl-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/log4j-web-2.11.2.jar b/solr-8.1.1/server/lib/ext/log4j-web-2.11.2.jar
new file mode 100644
index 000000000..e907eddb7
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/log4j-web-2.11.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/ext/slf4j-api-1.7.24.jar b/solr-8.1.1/server/lib/ext/slf4j-api-1.7.24.jar
new file mode 100644
index 000000000..05941a12f
--- /dev/null
+++ b/solr-8.1.1/server/lib/ext/slf4j-api-1.7.24.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/http2-common-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/http2-common-9.4.14.v20181114.jar
new file mode 100644
index 000000000..7df413df3
--- /dev/null
+++ b/solr-8.1.1/server/lib/http2-common-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/http2-hpack-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/http2-hpack-9.4.14.v20181114.jar
new file mode 100644
index 000000000..201bfab50
--- /dev/null
+++ b/solr-8.1.1/server/lib/http2-hpack-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/http2-server-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/http2-server-9.4.14.v20181114.jar
new file mode 100644
index 000000000..a8093043a
--- /dev/null
+++ b/solr-8.1.1/server/lib/http2-server-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/javax.servlet-api-3.1.0.jar b/solr-8.1.1/server/lib/javax.servlet-api-3.1.0.jar
new file mode 100644
index 000000000..6b14c3d26
--- /dev/null
+++ b/solr-8.1.1/server/lib/javax.servlet-api-3.1.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-alpn-java-server-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-alpn-java-server-9.4.14.v20181114.jar
new file mode 100644
index 000000000..72f499434
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-alpn-java-server-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-alpn-server-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-alpn-server-9.4.14.v20181114.jar
new file mode 100644
index 000000000..60490c913
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-alpn-server-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-continuation-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-continuation-9.4.14.v20181114.jar
new file mode 100644
index 000000000..86f8c3b17
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-continuation-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-deploy-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-deploy-9.4.14.v20181114.jar
new file mode 100644
index 000000000..3e7f5b48e
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-deploy-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-http-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-http-9.4.14.v20181114.jar
new file mode 100644
index 000000000..ac57d6d50
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-http-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-io-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-io-9.4.14.v20181114.jar
new file mode 100644
index 000000000..8fb6835e2
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-io-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-jmx-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-jmx-9.4.14.v20181114.jar
new file mode 100644
index 000000000..d8f4e0a14
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-jmx-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-rewrite-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-rewrite-9.4.14.v20181114.jar
new file mode 100644
index 000000000..7671e5efa
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-rewrite-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-security-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-security-9.4.14.v20181114.jar
new file mode 100644
index 000000000..935964938
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-security-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-server-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-server-9.4.14.v20181114.jar
new file mode 100644
index 000000000..bac55412a
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-server-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-servlet-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-servlet-9.4.14.v20181114.jar
new file mode 100644
index 000000000..fc6f152a3
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-servlet-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-servlets-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-servlets-9.4.14.v20181114.jar
new file mode 100644
index 000000000..36a6b056d
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-servlets-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-util-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-util-9.4.14.v20181114.jar
new file mode 100644
index 000000000..fb2d3e13a
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-util-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-webapp-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-webapp-9.4.14.v20181114.jar
new file mode 100644
index 000000000..058912146
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-webapp-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/jetty-xml-9.4.14.v20181114.jar b/solr-8.1.1/server/lib/jetty-xml-9.4.14.v20181114.jar
new file mode 100644
index 000000000..3c8c16409
--- /dev/null
+++ b/solr-8.1.1/server/lib/jetty-xml-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/metrics-core-4.0.5.jar b/solr-8.1.1/server/lib/metrics-core-4.0.5.jar
new file mode 100644
index 000000000..51a23f4a5
--- /dev/null
+++ b/solr-8.1.1/server/lib/metrics-core-4.0.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/metrics-graphite-4.0.5.jar b/solr-8.1.1/server/lib/metrics-graphite-4.0.5.jar
new file mode 100644
index 000000000..a153ce079
--- /dev/null
+++ b/solr-8.1.1/server/lib/metrics-graphite-4.0.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/metrics-jetty9-4.0.5.jar b/solr-8.1.1/server/lib/metrics-jetty9-4.0.5.jar
new file mode 100644
index 000000000..c06dc16c0
--- /dev/null
+++ b/solr-8.1.1/server/lib/metrics-jetty9-4.0.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/metrics-jmx-4.0.5.jar b/solr-8.1.1/server/lib/metrics-jmx-4.0.5.jar
new file mode 100644
index 000000000..773a83000
--- /dev/null
+++ b/solr-8.1.1/server/lib/metrics-jmx-4.0.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/lib/metrics-jvm-4.0.5.jar b/solr-8.1.1/server/lib/metrics-jvm-4.0.5.jar
new file mode 100644
index 000000000..bb296705f
--- /dev/null
+++ b/solr-8.1.1/server/lib/metrics-jvm-4.0.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/modules/http.mod b/solr-8.1.1/server/modules/http.mod
new file mode 100644
index 000000000..d4ceec512
--- /dev/null
+++ b/solr-8.1.1/server/modules/http.mod
@@ -0,0 +1,9 @@
+#
+# Jetty HTTP Connector
+#
+
+[depend]
+server
+
+[xml]
+etc/jetty-http.xml \ No newline at end of file
diff --git a/solr-8.1.1/server/modules/https.mod b/solr-8.1.1/server/modules/https.mod
new file mode 100644
index 000000000..8affbcf60
--- /dev/null
+++ b/solr-8.1.1/server/modules/https.mod
@@ -0,0 +1,9 @@
+#
+# Jetty HTTPS Connector
+#
+
+[depend]
+ssl
+
+[xml]
+etc/jetty-https.xml \ No newline at end of file
diff --git a/solr-8.1.1/server/modules/https8.mod b/solr-8.1.1/server/modules/https8.mod
new file mode 100644
index 000000000..f799f6bd0
--- /dev/null
+++ b/solr-8.1.1/server/modules/https8.mod
@@ -0,0 +1,9 @@
+#
+# Jetty HTTPS Connector
+#
+
+[depend]
+ssl
+
+[xml]
+etc/jetty-https8.xml \ No newline at end of file
diff --git a/solr-8.1.1/server/modules/server.mod b/solr-8.1.1/server/modules/server.mod
new file mode 100644
index 000000000..0d60a9e3f
--- /dev/null
+++ b/solr-8.1.1/server/modules/server.mod
@@ -0,0 +1,11 @@
+#
+# Base Server Module
+#
+
+[lib]
+lib/*.jar
+lib/ext/*.jar
+resources/
+
+[xml]
+etc/jetty.xml \ No newline at end of file
diff --git a/solr-8.1.1/server/modules/ssl.mod b/solr-8.1.1/server/modules/ssl.mod
new file mode 100644
index 000000000..091e3dea0
--- /dev/null
+++ b/solr-8.1.1/server/modules/ssl.mod
@@ -0,0 +1,9 @@
+#
+# SSL Keystore module
+#
+
+[depend]
+server
+
+[xml]
+etc/jetty-ssl.xml \ No newline at end of file
diff --git a/solr-8.1.1/server/resources/jetty-logging.properties b/solr-8.1.1/server/resources/jetty-logging.properties
new file mode 100644
index 000000000..e7a31b0d5
--- /dev/null
+++ b/solr-8.1.1/server/resources/jetty-logging.properties
@@ -0,0 +1 @@
+org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
diff --git a/solr-8.1.1/server/resources/log4j2-console.xml b/solr-8.1.1/server/resources/log4j2-console.xml
new file mode 100644
index 000000000..e83edf942
--- /dev/null
+++ b/solr-8.1.1/server/resources/log4j2-console.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!-- Use this file for logging exlusively to the console, useful for
+ some development tasks. Should not be used for production -->
+<!-- Configuration for asynchronous logging -->
+<Configuration>
+ <Appenders>
+ <Console name="STDERR" target="SYSTEM_ERR">
+ <PatternLayout>
+ <Pattern>
+ %maxLen{%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %c; %m%notEmpty{ =>%ex{short}}}{10240}%n
+ </Pattern>
+ </PatternLayout>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <AsyncLogger name="org.apache.zookeeper" level="WARN"/>
+ <AsyncLogger name="org.apache.hadoop" level="WARN"/>
+
+ <AsyncRoot level="INFO">
+ <AppenderRef ref="STDERR"/>
+ </AsyncRoot>
+ </Loggers>
+</Configuration>
+
+
+<!-- Configuration for synchronous logging
+ there _may_ be a very small window where log messages will not be flushed
+ to the log file on abnormal shutdown. If even this risk is unacceptable, use
+ the configuration below
+-->
+<!--Configuration>
+<Appenders>
+ <Console name="STDERR" target="SYSTEM_ERR">
+ <PatternLayout>
+ <Pattern>
+ %-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %c; %m%n
+ </Pattern>
+ </PatternLayout>
+ </Console>
+</Appenders>
+<Loggers>
+ <Logger name="org.apache.zookeeper" level="WARN"/>
+ <Logger name="org.apache.hadoop" level="WARN"/>
+
+ <Root level="INFO">
+ <AppenderRef ref="STDERR"/>
+ </Root>
+</Loggers>
+</Configuration-->
+
diff --git a/solr-8.1.1/server/resources/log4j2.xml b/solr-8.1.1/server/resources/log4j2.xml
new file mode 100644
index 000000000..e76973da6
--- /dev/null
+++ b/solr-8.1.1/server/resources/log4j2.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!-- Configuration for asynchronous logging -->
+<Configuration>
+ <Appenders>
+
+ <Console name="STDOUT" target="SYSTEM_OUT">
+ <PatternLayout>
+ <Pattern>
+ %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
+ </Pattern>
+ </PatternLayout>
+ </Console>
+
+ <RollingRandomAccessFile
+ name="MainLogFile"
+ fileName="${sys:solr.log.dir}/solr.log"
+ filePattern="${sys:solr.log.dir}/solr.log.%i" >
+ <PatternLayout>
+ <Pattern>
+ %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
+ </Pattern>
+ </PatternLayout>
+ <Policies>
+ <OnStartupTriggeringPolicy />
+ <SizeBasedTriggeringPolicy size="32 MB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="10"/>
+ </RollingRandomAccessFile>
+
+ <RollingRandomAccessFile
+ name="SlowLogFile"
+ fileName="${sys:solr.log.dir}/solr_slow_requests.log"
+ filePattern="${sys:solr.log.dir}/solr_slow_requests.log.%i" >
+ <PatternLayout>
+ <Pattern>
+ %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n
+ </Pattern>
+ </PatternLayout>
+ <Policies>
+ <OnStartupTriggeringPolicy />
+ <SizeBasedTriggeringPolicy size="32 MB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="10"/>
+ </RollingRandomAccessFile>
+
+ </Appenders>
+ <Loggers>
+ <AsyncLogger name="org.apache.hadoop" level="warn"/>
+ <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="off"/>
+ <AsyncLogger name="org.apache.zookeeper" level="warn"/>
+ <AsyncLogger name="org.apache.solr.core.SolrCore.SlowRequest" level="info" additivity="false">
+ <AppenderRef ref="SlowLogFile"/>
+ </AsyncLogger>
+
+ <AsyncRoot level="info">
+ <AppenderRef ref="MainLogFile"/>
+ <AppenderRef ref="STDOUT"/>
+ </AsyncRoot>
+ </Loggers>
+</Configuration>
+
+<!-- Configuration for synchronous logging
+ there _may_ be a very small window where log messages will not be flushed
+ to the log file on abnormal shutdown. If even this risk is unacceptable, use
+ the configuration below
+-->
+<!--Configuration>
+ <Appenders>
+
+ <Console name="STDOUT" target="SYSTEM_OUT">
+ <PatternLayout>
+ <Pattern>
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n
+ </Pattern>
+ </PatternLayout>
+ </Console>
+
+ <RollingFile
+ name="RollingFile"
+ fileName="${sys:solr.log.dir}/solr.log"
+ filePattern="${sys:solr.log.dir}/solr.log.%i" >
+ <PatternLayout>
+ <Pattern>
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n
+ </Pattern>
+ </PatternLayout>
+ <Policies>
+ <OnStartupTriggeringPolicy />
+ <SizeBasedTriggeringPolicy size="32 MB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="10"/>
+ </RollingFile>
+
+ <RollingFile
+ name="SlowFile"
+ fileName="${sys:solr.log.dir}/solr_slow_requests.log"
+ filePattern="${sys:solr.log.dir}/solr_slow_requests.log.%i" >
+ <PatternLayout>
+ <Pattern>
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n
+ </Pattern>
+ </PatternLayout>
+ <Policies>
+ <OnStartupTriggeringPolicy />
+ <SizeBasedTriggeringPolicy size="32 MB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="10"/>
+ </RollingFile>
+
+ </Appenders>
+ <Loggers>
+ <Logger name="org.apache.hadoop" level="warn"/>
+ <Logger name="org.apache.solr.update.LoggingInfoStream" level="off"/>
+ <Logger name="org.apache.zookeeper" level="warn"/>
+ <Logger name="org.apache.solr.core.SolrCore.SlowRequest" level="info" additivity="false">
+ <AppenderRef ref="SlowFile"/>
+ </Logger>
+
+ <Root level="info">
+ <AppenderRef ref="RollingFile"/>
+ <AppenderRef ref="STDOUT"/>
+ </Root>
+ </Loggers>
+</Configuration-->
+
diff --git a/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh b/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh
new file mode 100644
index 000000000..e5a26d645
--- /dev/null
+++ b/solr-8.1.1/server/scripts/cloud-scripts/snapshotscli.sh
@@ -0,0 +1,176 @@
+#!/usr/bin/env bash
+
+set -e
+
+run_solr_snapshot_tool() {
+ JVM="java"
+ scriptDir=$(dirname "$0")
+ if [ -n "$LOG4J_PROPS" ]; then
+ log4j_config="file:${LOG4J_PROPS}"
+ else
+ log4j_config="file:${scriptDir}/../../resources/log4j2-console.xml"
+ fi
+ PATH=${JAVA_HOME}/bin:${PATH} ${JVM} ${ZKCLI_JVM_FLAGS} -Dlog4j.configurationFile=${log4j_config} \
+ -classpath "${solrLibPath}" org.apache.solr.core.snapshots.SolrSnapshotsTool "$@" 2> /dev/null
+}
+
+usage() {
+ run_solr_snapshot_tool --help
+}
+
+distcp_warning() {
+ echo "SOLR_USE_DISTCP environment variable is not set. \
+ Do you want to use hadoop distcp tool for exporting Solr collection snapshot ?"
+}
+
+parse_options() {
+ OPTIND=3
+ while getopts ":c:d:s:z:p:r:i:" o ; do
+ case "${o}" in
+ d)
+ destPath=${OPTARG}
+ ;;
+ s)
+ sourcePath=${OPTARG}
+ ;;
+ c)
+ collectionName=${OPTARG}
+ ;;
+ z)
+ solrZkEnsemble=${OPTARG}
+ ;;
+ p)
+ pathPrefix=${OPTARG}
+ ;;
+ r)
+ backupRepoName=${OPTARG}
+ ;;
+ i)
+ aysncReqId=${OPTARG}
+ ;;
+ *)
+ echo "Unknown option ${OPTARG}"
+ usage 1>&2
+ exit 1
+ ;;
+ esac
+ done
+}
+
+prepare_snapshot_export() {
+ #Make sure to cleanup the temporary files.
+ scratch=$(mktemp -d -t solrsnaps.XXXXXXXXXX)
+ function finish {
+ rm -rf "${scratch}"
+ }
+ trap finish EXIT
+
+ if hdfs dfs -test -d "${destPath}" ; then
+ run_solr_snapshot_tool --prepare-snapshot-export "$@" -t "${scratch}"
+
+ hdfs dfs -mkdir -p "${copyListingDirPath}" > /dev/null
+ find "${scratch}" -type f -printf "%f\n" | while read shardId; do
+ echo "Copying the copy-listing for $shardId"
+ hdfs dfs -copyFromLocal "${scratch}/${shardId}" "${copyListingDirPath}" > /dev/null
+ done
+ else
+ echo "Directory ${destPath} does not exist."
+ exit 1
+ fi
+}
+
+copy_snapshot_files() {
+ copylisting_dir_path="$1"
+
+ if hdfs dfs -test -d "${copylisting_dir_path}" ; then
+ for shardId in $(hdfs dfs -stat "%n" "${copylisting_dir_path}/*"); do
+ oPath="${destPath}/${snapshotName}/snapshot.${shardId}"
+ echo "Copying the index files for ${shardId} to ${oPath}"
+ ${distCpCmd} -f "${copylisting_dir_path}/${shardId}" "${oPath}" > /dev/null
+ done
+ else
+ echo "Directory ${copylisting_dir_path} does not exist."
+ exit 1
+ fi
+}
+
+collectionName=""
+solrZkEnsemble=""
+pathPrefix=""
+destPath=""
+sourcePath=""
+cmd="$1"
+snapshotName="$2"
+copyListingDirPath=""
+distCpCmd="${SOLR_DISTCP_CMD:-hadoop distcp}"
+scriptDir=$(dirname "$0")
+solrLibPath="${SOLR_LIB_PATH:-${scriptDir}/../../solr-webapp/webapp/WEB-INF/lib/*:${scriptDir}/../../lib/ext/*}"
+
+case "${cmd}" in
+ --create)
+ run_solr_snapshot_tool "$@"
+ ;;
+ --delete)
+ run_solr_snapshot_tool "$@"
+ ;;
+ --list)
+ run_solr_snapshot_tool "$@"
+ ;;
+ --describe)
+ run_solr_snapshot_tool "$@"
+ ;;
+ --prepare-snapshot-export)
+ : "${SOLR_USE_DISTCP:? $(distcp_warning)}"
+
+ parse_options "$@"
+
+ : "${destPath:? Please specify destination directory using -d option}"
+
+ copyListingDirPath="${destPath}/copylistings"
+ prepare_snapshot_export "${@:2}"
+ echo "Done. GoodBye!"
+ ;;
+ --export)
+ if [ -z "${SOLR_USE_DISTCP}" ]; then
+ run_solr_snapshot_tool "$@"
+ echo "Done. GoodBye!"
+ exit 0
+ fi
+
+ parse_options "$@"
+
+ : "${snapshotName:? Please specify the name of the snapshot}"
+ : "${destPath:? Please specify destination directory using -d option}"
+
+ if [ -n "${collectionName}" ] && [ -n "${sourcePath}" ]; then
+ echo "The -c and -s options can not be specified together"
+ exit 1
+ fi
+
+ if [ -z "${collectionName}" ] && [ -z "${sourcePath}" ]; then
+ echo "At least one of options (-c or -s) must be specified"
+ exit 1
+ fi
+
+ if [ -n "${collectionName}" ]; then
+ copyListingDirPath="${destPath}/${snapshotName}/copylistings"
+ prepare_snapshot_export "${@:2}"
+ copy_snapshot_files "${destPath}/${snapshotName}/copylistings"
+ hdfs dfs -rm -r -f -skipTrash "${destPath}/${snapshotName}/copylistings" > /dev/null
+ else
+ copy_snapshot_files "${sourcePath}/copylistings"
+ echo "Copying the collection meta-data to ${destPath}/${snapshotName}"
+ ${distCpCmd} "${sourcePath}/${snapshotName}/*" "${destPath}/${snapshotName}/" > /dev/null
+ fi
+
+ echo "Done. GoodBye!"
+ ;;
+ --help)
+ usage 1>&2
+ ;;
+ *)
+ echo "Unknown command ${cmd}"
+ usage 1>&2
+ exit 1
+esac
+
diff --git a/solr-8.1.1/server/scripts/cloud-scripts/zkcli.bat b/solr-8.1.1/server/scripts/cloud-scripts/zkcli.bat
new file mode 100644
index 000000000..7005b63a5
--- /dev/null
+++ b/solr-8.1.1/server/scripts/cloud-scripts/zkcli.bat
@@ -0,0 +1,25 @@
+@echo off
+REM You can override pass the following parameters to this script:
+REM
+
+set JVM=java
+
+REM Find location of this script
+
+set SDIR=%~dp0
+if "%SDIR:~-1%"=="\" set SDIR=%SDIR:~0,-1%
+
+if defined LOG4J_PROPS (
+ set "LOG4J_CONFIG=file:///%LOG4J_PROPS%"
+) else (
+ set "LOG4J_CONFIG=file:///%SDIR%\..\..\resources\log4j2-console.xml"
+)
+
+REM Settings for ZK ACL
+REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
+REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
+REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
+REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
+
+"%JVM%" %SOLR_ZK_CREDS_AND_ACLS% %ZKCLI_JVM_FLAGS% -Dlog4j.configurationFile="%LOG4J_CONFIG%" ^
+-classpath "%SDIR%\..\..\solr-webapp\webapp\WEB-INF\lib\*;%SDIR%\..\..\lib\ext\*;%SDIR%\..\..\lib\*" org.apache.solr.cloud.ZkCLI %*
diff --git a/solr-8.1.1/server/scripts/cloud-scripts/zkcli.sh b/solr-8.1.1/server/scripts/cloud-scripts/zkcli.sh
new file mode 100644
index 000000000..37b1ec9aa
--- /dev/null
+++ b/solr-8.1.1/server/scripts/cloud-scripts/zkcli.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+# You can override pass the following parameters to this script:
+#
+
+JVM="java"
+
+# Find location of this script
+
+sdir="`dirname \"$0\"`"
+
+if [ -n "$LOG4J_PROPS" ]; then
+ log4j_config="file:$LOG4J_PROPS"
+else
+ log4j_config="file:$sdir/../../resources/log4j2-console.xml"
+fi
+
+# Settings for ZK ACL
+#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
+# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
+# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
+# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
+
+PATH=$JAVA_HOME/bin:$PATH $JVM $SOLR_ZK_CREDS_AND_ACLS $ZKCLI_JVM_FLAGS -Dlog4j.configurationFile=$log4j_config \
+-classpath "$sdir/../../solr-webapp/webapp/WEB-INF/lib/*:$sdir/../../lib/ext/*:$sdir/../../lib/*" org.apache.solr.cloud.ZkCLI ${1+"$@"}
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/antlr4-runtime-4.5.1-1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/antlr4-runtime-4.5.1-1.jar
new file mode 100644
index 000000000..387129d64
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/antlr4-runtime-4.5.1-1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-5.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-5.1.jar
new file mode 100644
index 000000000..18433c1a2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-5.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-commons-5.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-commons-5.1.jar
new file mode 100644
index 000000000..2c8d5b478
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/asm-commons-5.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/avatica-core-1.13.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/avatica-core-1.13.0.jar
new file mode 100644
index 000000000..a50876842
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/avatica-core-1.13.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/caffeine-2.4.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/caffeine-2.4.0.jar
new file mode 100644
index 000000000..80b85190e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/caffeine-2.4.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-core-1.18.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-core-1.18.0.jar
new file mode 100644
index 000000000..a814080a2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-core-1.18.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-linq4j-1.18.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-linq4j-1.18.0.jar
new file mode 100644
index 000000000..dc5002d5b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/calcite-linq4j-1.18.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-beanutils-1.9.3.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-beanutils-1.9.3.jar
new file mode 100644
index 000000000..6728154e5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-beanutils-1.9.3.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-cli-1.2.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-cli-1.2.jar
new file mode 100644
index 000000000..ce4b9fffe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-cli-1.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-codec-1.11.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-codec-1.11.jar
new file mode 100644
index 000000000..22451206d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-codec-1.11.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-collections-3.2.2.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-collections-3.2.2.jar
new file mode 100644
index 000000000..fa5df82a6
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-collections-3.2.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-compiler-3.0.9.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-compiler-3.0.9.jar
new file mode 100644
index 000000000..2866a6662
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-compiler-3.0.9.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-configuration2-2.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-configuration2-2.1.1.jar
new file mode 100644
index 000000000..666baa09d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-configuration2-2.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jar
new file mode 100644
index 000000000..9a6435198
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-fileupload-1.3.3.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-fileupload-1.3.3.jar
new file mode 100644
index 000000000..915d87e74
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-fileupload-1.3.3.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-io-2.5.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-io-2.5.jar
new file mode 100644
index 000000000..107b061f5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-io-2.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-lang3-3.8.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-lang3-3.8.1.jar
new file mode 100644
index 000000000..2c65ce67d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-lang3-3.8.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-math3-3.6.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-math3-3.6.1.jar
new file mode 100644
index 000000000..0ff582cfc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-math3-3.6.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-text-1.6.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-text-1.6.jar
new file mode 100644
index 000000000..63e47300c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/commons-text-1.6.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-client-2.13.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-client-2.13.0.jar
new file mode 100644
index 000000000..7c01fbe81
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-client-2.13.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-framework-2.13.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-framework-2.13.0.jar
new file mode 100644
index 000000000..46cada077
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-framework-2.13.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-recipes-2.13.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-recipes-2.13.0.jar
new file mode 100644
index 000000000..caf7b8749
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/curator-recipes-2.13.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/disruptor-3.4.2.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/disruptor-3.4.2.jar
new file mode 100644
index 000000000..b366bbebc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/disruptor-3.4.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/eigenbase-properties-1.1.5.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/eigenbase-properties-1.1.5.jar
new file mode 100644
index 000000000..786c6c6a2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/eigenbase-properties-1.1.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/guava-25.1-jre.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/guava-25.1-jre.jar
new file mode 100644
index 000000000..babc17553
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/guava-25.1-jre.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-annotations-3.2.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-annotations-3.2.0.jar
new file mode 100644
index 000000000..0a52d1b6d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-annotations-3.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-3.2.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-3.2.0.jar
new file mode 100644
index 000000000..683f3f7d1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-3.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-3.2.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-3.2.0.jar
new file mode 100644
index 000000000..77a00c750
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-3.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-client-3.2.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-client-3.2.0.jar
new file mode 100644
index 000000000..59afc3eaf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-client-3.2.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hppc-0.8.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hppc-0.8.1.jar
new file mode 100644
index 000000000..39a7c24db
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/hppc-0.8.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/htrace-core4-4.1.0-incubating.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/htrace-core4-4.1.0-incubating.jar
new file mode 100644
index 000000000..12349a206
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/htrace-core4-4.1.0-incubating.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-client-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-client-9.4.14.v20181114.jar
new file mode 100644
index 000000000..aa4d26091
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-client-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-common-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-common-9.4.14.v20181114.jar
new file mode 100644
index 000000000..7df413df3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-common-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-hpack-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-hpack-9.4.14.v20181114.jar
new file mode 100644
index 000000000..201bfab50
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-hpack-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-http-client-transport-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-http-client-transport-9.4.14.v20181114.jar
new file mode 100644
index 000000000..d9c2e00a7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/http2-http-client-transport-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.5.6.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.5.6.jar
new file mode 100644
index 000000000..56231de0c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.5.6.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.10.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.10.jar
new file mode 100644
index 000000000..dc510f81c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.10.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.5.6.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.5.6.jar
new file mode 100644
index 000000000..df5a7d195
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.5.6.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-annotations-2.9.8.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-annotations-2.9.8.jar
new file mode 100644
index 000000000..4d9f42153
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-annotations-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.9.8.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.9.8.jar
new file mode 100644
index 000000000..362f1f393
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-databind-2.9.8.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-databind-2.9.8.jar
new file mode 100644
index 000000000..2d8687b5d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-databind-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.9.8.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.9.8.jar
new file mode 100644
index 000000000..ba565e587
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.9.8.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/janino-3.0.9.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/janino-3.0.9.jar
new file mode 100644
index 000000000..761e0c2a0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/janino-3.0.9.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-client-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-client-9.4.14.v20181114.jar
new file mode 100644
index 000000000..7ae5a277e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-client-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-java-client-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-java-client-9.4.14.v20181114.jar
new file mode 100644
index 000000000..f184cefbd
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-alpn-java-client-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-client-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-client-9.4.14.v20181114.jar
new file mode 100644
index 000000000..8e4d57110
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-client-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-http-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-http-9.4.14.v20181114.jar
new file mode 100644
index 000000000..ac57d6d50
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-http-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-io-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-io-9.4.14.v20181114.jar
new file mode 100644
index 000000000..8fb6835e2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-io-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-util-9.4.14.v20181114.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-util-9.4.14.v20181114.jar
new file mode 100644
index 000000000..fb2d3e13a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jetty-util-9.4.14.v20181114.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jose4j-0.6.5.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jose4j-0.6.5.jar
new file mode 100644
index 000000000..02c0a5a66
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/jose4j-0.6.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/json-path-2.4.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/json-path-2.4.0.jar
new file mode 100644
index 000000000..6229306b8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/json-path-2.4.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-core-1.0.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-core-1.0.1.jar
new file mode 100644
index 000000000..655c87a62
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-core-1.0.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-util-1.0.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-util-1.0.1.jar
new file mode 100644
index 000000000..8b9b24450
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerb-util-1.0.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-asn1-1.0.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-asn1-1.0.1.jar
new file mode 100644
index 000000000..6488b7462
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-asn1-1.0.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-pkix-1.0.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-pkix-1.0.1.jar
new file mode 100644
index 000000000..443d98189
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/kerby-pkix-1.0.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-common-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-common-8.1.1.jar
new file mode 100644
index 000000000..fb4388552
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-common-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-kuromoji-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-kuromoji-8.1.1.jar
new file mode 100644
index 000000000..da833bcb3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-kuromoji-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-nori-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-nori-8.1.1.jar
new file mode 100644
index 000000000..c3f42e1f9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-nori-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-phonetic-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-phonetic-8.1.1.jar
new file mode 100644
index 000000000..94541abbe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-analyzers-phonetic-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-8.1.1.jar
new file mode 100644
index 000000000..99a02fc7d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-classification-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-classification-8.1.1.jar
new file mode 100644
index 000000000..6bfbc6824
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-classification-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-8.1.1.jar
new file mode 100644
index 000000000..0e00e7812
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-8.1.1.jar
new file mode 100644
index 000000000..33661da09
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-expressions-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-expressions-8.1.1.jar
new file mode 100644
index 000000000..0dc8bf6b9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-expressions-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-grouping-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-grouping-8.1.1.jar
new file mode 100644
index 000000000..58e2ad688
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-grouping-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-8.1.1.jar
new file mode 100644
index 000000000..95a1e6859
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-8.1.1.jar
new file mode 100644
index 000000000..1a3068f69
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-8.1.1.jar
new file mode 100644
index 000000000..ada919263
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-8.1.1.jar
new file mode 100644
index 000000000..70d0a8a3e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-8.1.1.jar
new file mode 100644
index 000000000..374c1e824
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queryparser-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queryparser-8.1.1.jar
new file mode 100644
index 000000000..74a654af9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-queryparser-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-8.1.1.jar
new file mode 100644
index 000000000..d2f138400
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-extras-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-extras-8.1.1.jar
new file mode 100644
index 000000000..99255b118
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-extras-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial3d-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial3d-8.1.1.jar
new file mode 100644
index 000000000..92344f201
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial3d-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-8.1.1.jar
new file mode 100644
index 000000000..ca2a61b7b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/noggit-0.8.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/noggit-0.8.jar
new file mode 100644
index 000000000..d530cd128
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/noggit-0.8.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jar
new file mode 100644
index 000000000..64549e498
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jar
new file mode 100644
index 000000000..58a884ab9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/protobuf-java-3.6.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/protobuf-java-3.6.1.jar
new file mode 100644
index 000000000..8a187891f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/protobuf-java-3.6.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/re2j-1.2.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/re2j-1.2.jar
new file mode 100644
index 000000000..945db1ca0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/re2j-1.2.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/rrd4j-3.5.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/rrd4j-3.5.jar
new file mode 100644
index 000000000..535ea8fbe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/rrd4j-3.5.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-core-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-core-8.1.1.jar
new file mode 100644
index 000000000..4aae4028b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-core-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-8.1.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-8.1.1.jar
new file mode 100644
index 000000000..8664d0a96
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-8.1.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/spatial4j-0.7.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/spatial4j-0.7.jar
new file mode 100644
index 000000000..feb2e02aa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/spatial4j-0.7.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/stax2-api-3.1.4.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/stax2-api-3.1.4.jar
new file mode 100644
index 000000000..dded03692
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/stax2-api-3.1.4.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jar
new file mode 100644
index 000000000..a638007a8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/woodstox-core-asl-4.4.1.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/woodstox-core-asl-4.4.1.jar
new file mode 100644
index 000000000..d8b4e8cf8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/woodstox-core-asl-4.4.1.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/zookeeper-3.4.14.jar b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/zookeeper-3.4.14.jar
new file mode 100644
index 000000000..0b5620eee
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/lib/zookeeper-3.4.14.jar
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/web.xml b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/web.xml
new file mode 100644
index 000000000..53ab57abb
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/web.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5"
+ metadata-complete="true"
+>
+
+ <!-- Any path (name) registered in solrconfig.xml will be sent to that filter -->
+ <filter>
+ <filter-name>SolrRequestFilter</filter-name>
+ <filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
+ <!--
+ Exclude patterns is a list of directories that would be short circuited by the
+ SolrDispatchFilter. It includes all Admin UI related static content.
+ NOTE: It is NOT a pattern but only matches the start of the HTTP ServletPath.
+ -->
+ <init-param>
+ <param-name>excludePatterns</param-name>
+ <param-value>/partials/.+,/libs/.+,/css/.+,/js/.+,/img/.+,/templates/.+</param-value>
+ </init-param>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>SolrRequestFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <servlet>
+ <servlet-name>LoadAdminUI</servlet-name>
+ <servlet-class>org.apache.solr.servlet.LoadAdminUiServlet</servlet-class>
+ </servlet>
+
+ <servlet>
+ <servlet-name>SolrRestApi</servlet-name>
+ <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
+ <init-param>
+ <param-name>org.restlet.application</param-name>
+ <param-value>org.apache.solr.rest.SolrSchemaRestApi</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>LoadAdminUI</servlet-name>
+ <url-pattern>/index.html</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>SolrRestApi</servlet-name>
+ <url-pattern>/schema/*</url-pattern>
+ </servlet-mapping>
+
+ <mime-mapping>
+ <extension>.xsl</extension>
+ <!-- per http://www.w3.org/TR/2006/PR-xslt20-20061121/ -->
+ <mime-type>application/xslt+xml</mime-type>
+ </mime-mapping>
+
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+
+ <!-- Get rid of error message -->
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Disable TRACE</web-resource-name>
+ <url-pattern>/</url-pattern>
+ <http-method>TRACE</http-method>
+ </web-resource-collection>
+ <auth-constraint/>
+ </security-constraint>
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Enable everything but TRACE</web-resource-name>
+ <url-pattern>/</url-pattern>
+ <http-method-omission>TRACE</http-method-omission>
+ </web-resource-collection>
+ </security-constraint>
+
+ <!--
+ RedirectServlet can be used to redirect old endpoints to a new location to support back compatibility.
+ Example below
+ -->
+<!--
+ <servlet>
+ <servlet-name>RedirectOldZookeeper</servlet-name>
+ <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
+ <init-param>
+ <param-name>destination</param-name>
+ <param-value>${context}/admin/zookeeper</param-value>
+ </init-param>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>RedirectOldZookeeper</servlet-name>
+ <url-pattern>/zookeeper</url-pattern>
+ </servlet-mapping>
+-->
+</web-app>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/analysis.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/analysis.css
new file mode 100644
index 000000000..1cbff55ed
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/analysis.css
@@ -0,0 +1,303 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #analysis-holder
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 50% 0;
+ background-repeat: repeat-y;
+}
+
+#content #analysis #field-analysis
+{
+ margin-bottom: 0;
+}
+
+#content #analysis #field-analysis .content
+{
+ padding-bottom: 0;
+}
+
+#content #analysis .settings-holder
+{
+ clear: both;
+ padding-top: 15px;
+}
+
+#content #analysis .settings
+{
+ background-color: #fff;
+ border-top: 1px solid #fafafa;
+ border-bottom: 1px solid #fafafa;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+#content #analysis .settings select.loader
+{
+ background-position: 3px 50%;
+ padding-left: 21px;
+}
+
+#content #analysis .settings select optgroup
+{
+ font-style: normal;
+ padding: 5px;
+}
+
+#content #analysis .settings select option
+{
+ padding-left: 10px;
+}
+
+#content #analysis .settings #tor_schema
+{
+ background-image: url( ../../img/ico/question-white.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ margin-left: 5px;
+ padding-left: 21px;
+}
+
+#content #analysis .settings #tor_schema:hover
+{
+ background-image: url( ../../img/ico/question.png );
+}
+
+#content #analysis .settings #tor_schema span
+{
+/* display: none; */
+}
+
+#content #analysis .settings #tor_schema:hover span
+{
+ display: inline;
+}
+
+#content #analysis .settings .buttons
+{
+ float: right;
+ width: 47%;
+}
+
+#content #analysis .settings button
+{
+ float: right;
+}
+
+#content #analysis .settings button span
+{
+ background-image: url( ../../img/ico/funnel.png );
+}
+
+#content #analysis .settings .verbose_output
+{
+ float: left;
+ width: auto;
+}
+
+#content #analysis .settings .verbose_output a
+{
+ background-image: url( ../../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #analysis .settings .verbose_output.active a
+{
+ background-image: url( ../../img/ico/ui-check-box.png );
+}
+
+#content #analysis .index label,
+#content #analysis .query label
+{
+ display: block;
+}
+
+#content #analysis .index textarea,
+#content #analysis .query textarea
+{
+ display: block;
+ width: 100%;
+}
+
+#content #analysis .index
+{
+ float: left;
+ margin-right: 0.5%;
+ min-width: 47%;
+ max-width: 99%;
+}
+
+#content #analysis .query
+{
+ float: right;
+ margin-left: 0.5%;
+ min-width: 47%;
+ max-width: 99%;
+}
+
+#content #analysis .analysis-error
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 50%;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content #analysis .analysis-error .head a
+{
+ color: #fff;
+ cursor: auto;
+}
+
+#content #analysis #analysis-result
+{
+ overflow: auto;
+}
+
+#content #analysis #analysis-result .index,
+#content #analysis #analysis-result .query
+{
+ background-color: #fff;
+ padding-top: 20px;
+}
+
+#content #analysis #analysis-result table
+{
+ border-collapse: collapse;
+}
+
+#content #analysis #analysis-result td
+{
+ vertical-align: top;
+ white-space: nowrap;
+}
+
+#content #analysis #analysis-result td.part.analyzer div,
+#content #analysis #analysis-result td.part.spacer .holder,
+#content #analysis #analysis-result td td td
+{
+ padding-top: 1px;
+ padding-bottom: 1px;
+}
+
+#content #analysis #analysis-result.verbose_output td.legend
+{
+ display: table-cell;
+}
+
+#content #analysis #analysis-result.verbose_output td.data tr.verbose_output
+{
+ display: table-row;
+}
+
+#content #analysis #analysis-result .match
+{
+ background-color: #F0D9C3;
+}
+
+#content #analysis #analysis-result td.part
+{
+ padding-bottom: 10px;
+}
+
+#content #analysis #analysis-result td.part.analyzer div
+{
+ border-right: 1px solid #f0f0f0;
+ padding-right: 10px;
+}
+
+#content #analysis #analysis-result td.part.analyzer abbr
+{
+ color: #4D4D4D;
+}
+
+#content #analysis #analysis-result td.part.legend .holder,
+#content #analysis #analysis-result td.part.data .holder
+{
+ padding-left: 10px;
+ padding-right: 10px;
+ border-right: 1px solid #c0c0c0;
+}
+
+#content #analysis #analysis-result td.part.legend td
+{
+ color: #4D4D4D;
+}
+
+#content #analysis #analysis-result td.part.legend .holder
+{
+ border-right-color: #f0f0f0;
+}
+
+#content #analysis #analysis-result td.part.data:last-child .holder
+{
+ padding-right: 0;
+ border-right: 0;
+}
+
+#content #analysis #analysis-result td.details
+{
+ padding-left: 10px;
+ padding-right: 10px;
+ border-left: 1px solid #f0f0f0;
+ border-right: 1px solid #f0f0f0;
+}
+
+#content #analysis #analysis-result td.details:first-child
+{
+ padding-left: 0;
+ border-left: 0;
+}
+
+#content #analysis #analysis-result td.details:last-child
+{
+ padding-right: 0;
+ border-right: 0;
+}
+
+#content #analysis #analysis-result td.details tr.empty td
+{
+ color: #f0f0f0;
+}
+
+#content #analysis #analysis-result td.details tr.raw_bytes td
+{
+ letter-spacing: -1px;
+}
+
+#content #analysis #analysis-result .part table table td
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+#content #analysis #analysis-result .part table table tr:first-child td
+{
+ border-top: 0;
+}
+
+#content #analysis #field-analysis h2 { background-image: url( ../../img/ico/receipt.png ); }
+#content #analysis .analysis-result h2 { background-image: url( ../../img/ico/receipt-invoice.png ); }
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/chosen.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/chosen.css
new file mode 100644
index 000000000..f7ae77121
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/chosen.css
@@ -0,0 +1,465 @@
+/*
+
+Chosen
+
+- by Patrick Filler for Harvest http://getharvest.com
+- Copyright (c) 2011-2013 by Harvest
+
+Available for use under the MIT License
+
+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.
+
+*/
+/*!
+Chosen, a Select Box Enhancer for jQuery and Prototype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Version 1.3.0
+Full source at https://github.com/harvesthq/chosen
+Copyright (c) 2011-2014 Harvest http://getharvest.com
+
+MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
+This file is generated by `grunt build`, do not edit it by hand.
+*/
+
+/* @group Base */
+.chosen-container {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 13px;
+ zoom: 1;
+ *display: inline;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+.chosen-container * {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.chosen-container .chosen-drop {
+ position: absolute;
+ top: 100%;
+ left: -9999px;
+ z-index: 1010;
+ width: 100%;
+ border: 1px solid #aaa;
+ border-top: 0;
+ background: #fff;
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
+}
+.chosen-container.chosen-with-drop .chosen-drop {
+ left: 0;
+}
+.chosen-container a {
+ cursor: pointer;
+}
+
+/* @end */
+/* @group Single Chosen */
+.chosen-container-single .chosen-single {
+ position: relative;
+ display: block;
+ overflow: hidden;
+ padding: 0 0 0 8px;
+ height: 25px;
+ border: 1px solid #aaa;
+ border-radius: 5px;
+ background-color: #fff;
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
+ background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
+ background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
+ background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
+ background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
+ background-clip: padding-box;
+ box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
+ color: #444;
+ text-decoration: none;
+ white-space: nowrap;
+ line-height: 24px;
+}
+.chosen-container-single .chosen-default {
+ color: #999;
+}
+.chosen-container-single .chosen-single span {
+ display: block;
+ overflow: hidden;
+ margin-right: 26px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.chosen-container-single .chosen-single-with-deselect span {
+ margin-right: 38px;
+}
+.chosen-container-single .chosen-single abbr {
+ position: absolute;
+ top: 6px;
+ right: 26px;
+ display: block;
+ width: 12px;
+ height: 12px;
+ background: url('../../img/chosen-sprite.png') -42px 1px no-repeat;
+ font-size: 1px;
+}
+.chosen-container-single .chosen-single abbr:hover {
+ background-position: -42px -10px;
+}
+.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
+ background-position: -42px -10px;
+}
+.chosen-container-single .chosen-single div {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: block;
+ width: 18px;
+ height: 100%;
+}
+.chosen-container-single .chosen-single div b {
+ display: block;
+ width: 100%;
+ height: 100%;
+ background: url('../../img/chosen-sprite.png') no-repeat 0px 2px;
+}
+.chosen-container-single .chosen-search {
+ position: relative;
+ z-index: 1010;
+ margin: 0;
+ padding: 3px 4px;
+ white-space: nowrap;
+}
+.chosen-container-single .chosen-search input[type="text"] {
+ margin: 1px 0;
+ padding: 4px 20px 4px 5px;
+ width: 100%;
+ height: auto;
+ outline: 0;
+ border: 1px solid #aaa;
+ background: white url('../../img/chosen-sprite.png') no-repeat 100% -20px;
+ background: url('../../img/chosen-sprite.png') no-repeat 100% -20px;
+ font-size: 1em;
+ font-family: sans-serif;
+ line-height: normal;
+ border-radius: 0;
+}
+.chosen-container-single .chosen-drop {
+ margin-top: -1px;
+ border-radius: 0 0 4px 4px;
+ background-clip: padding-box;
+}
+.chosen-container-single.chosen-container-single-nosearch .chosen-search {
+ position: absolute;
+ left: -9999px;
+}
+
+/* @end */
+/* @group Results */
+.chosen-container .chosen-results {
+ color: #444;
+ position: relative;
+ overflow-x: hidden;
+ overflow-y: auto;
+ margin: 0 4px 4px 0;
+ padding: 0 0 0 4px;
+ max-height: 240px;
+ -webkit-overflow-scrolling: touch;
+}
+.chosen-container .chosen-results li {
+ display: none;
+ margin: 0;
+ padding: 5px 6px;
+ list-style: none;
+ line-height: 15px;
+ word-wrap: break-word;
+ -webkit-touch-callout: none;
+}
+.chosen-container .chosen-results li.active-result {
+ display: list-item;
+ cursor: pointer;
+}
+.chosen-container .chosen-results li.disabled-result {
+ display: list-item;
+ color: #ccc;
+ cursor: default;
+}
+.chosen-container .chosen-results li.highlighted {
+ background-color: #3875d7;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
+ background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
+ background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
+ background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
+ background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
+ color: #fff;
+}
+.chosen-container .chosen-results li.no-results {
+ color: #777;
+ display: list-item;
+ background: #f4f4f4;
+}
+.chosen-container .chosen-results li.group-result {
+ display: list-item;
+ font-weight: bold;
+ cursor: default;
+}
+.chosen-container .chosen-results li.group-option {
+ padding-left: 15px;
+}
+.chosen-container .chosen-results li em {
+ font-style: normal;
+ text-decoration: underline;
+}
+
+/* @end */
+/* @group Multi Chosen */
+.chosen-container-multi .chosen-choices {
+ position: relative;
+ overflow: hidden;
+ margin: 0;
+ padding: 0 5px;
+ width: 100%;
+ height: auto !important;
+ height: 1%;
+ border: 1px solid #aaa;
+ background-color: #fff;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
+ background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
+ background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
+ background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
+ background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
+ cursor: text;
+}
+.chosen-container-multi .chosen-choices li {
+ float: left;
+ list-style: none;
+}
+.chosen-container-multi .chosen-choices li.search-field {
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
+ margin: 1px 0;
+ padding: 0;
+ height: 25px;
+ outline: 0;
+ border: 0 !important;
+ background: transparent !important;
+ box-shadow: none;
+ color: #999;
+ font-size: 100%;
+ font-family: sans-serif;
+ line-height: normal;
+ border-radius: 0;
+}
+.chosen-container-multi .chosen-choices li.search-choice {
+ position: relative;
+ margin: 3px 5px 3px 0;
+ padding: 3px 20px 3px 5px;
+ border: 1px solid #aaa;
+ max-width: 100%;
+ border-radius: 3px;
+ background-color: #eeeeee;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
+ background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-size: 100% 19px;
+ background-repeat: repeat-x;
+ background-clip: padding-box;
+ box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
+ color: #333;
+ line-height: 13px;
+ cursor: default;
+}
+.chosen-container-multi .chosen-choices li.search-choice span {
+ word-wrap: break-word;
+}
+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
+ position: absolute;
+ top: 4px;
+ right: 3px;
+ display: block;
+ width: 12px;
+ height: 12px;
+ background: url('../../img/chosen-sprite.png') -42px 1px no-repeat;
+ font-size: 1px;
+}
+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
+ background-position: -42px -10px;
+}
+.chosen-container-multi .chosen-choices li.search-choice-disabled {
+ padding-right: 5px;
+ border: 1px solid #ccc;
+ background-color: #e4e4e4;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
+ color: #666;
+}
+.chosen-container-multi .chosen-choices li.search-choice-focus {
+ background: #d4d4d4;
+}
+.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
+ background-position: -42px -10px;
+}
+.chosen-container-multi .chosen-results {
+ margin: 0;
+ padding: 0;
+}
+.chosen-container-multi .chosen-drop .result-selected {
+ display: list-item;
+ color: #ccc;
+ cursor: default;
+}
+
+/* @end */
+/* @group Active */
+.chosen-container-active .chosen-single {
+ border: 1px solid #5897fb;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+}
+.chosen-container-active.chosen-with-drop .chosen-single {
+ border: 1px solid #aaa;
+ -moz-border-radius-bottomright: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 0;
+ border-bottom-left-radius: 0;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
+ background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
+ background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
+ background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
+ background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
+ box-shadow: 0 1px 0 #fff inset;
+}
+.chosen-container-active.chosen-with-drop .chosen-single div {
+ border-left: none;
+ background: transparent;
+}
+.chosen-container-active.chosen-with-drop .chosen-single div b {
+ background-position: -18px 2px;
+}
+.chosen-container-active .chosen-choices {
+ border: 1px solid #5897fb;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+}
+.chosen-container-active .chosen-choices li.search-field input[type="text"] {
+ color: #222 !important;
+}
+
+/* @end */
+/* @group Disabled Support */
+.chosen-disabled {
+ opacity: 0.5 !important;
+ cursor: default;
+}
+.chosen-disabled .chosen-single {
+ cursor: default;
+}
+.chosen-disabled .chosen-choices .search-choice .search-choice-close {
+ cursor: default;
+}
+
+/* @end */
+/* @group Right to Left */
+.chosen-rtl {
+ text-align: right;
+}
+.chosen-rtl .chosen-single {
+ overflow: visible;
+ padding: 0 8px 0 0;
+}
+.chosen-rtl .chosen-single span {
+ margin-right: 0;
+ margin-left: 26px;
+ direction: rtl;
+}
+.chosen-rtl .chosen-single-with-deselect span {
+ margin-left: 38px;
+}
+.chosen-rtl .chosen-single div {
+ right: auto;
+ left: 3px;
+}
+.chosen-rtl .chosen-single abbr {
+ right: auto;
+ left: 26px;
+}
+.chosen-rtl .chosen-choices li {
+ float: right;
+}
+.chosen-rtl .chosen-choices li.search-field input[type="text"] {
+ direction: rtl;
+}
+.chosen-rtl .chosen-choices li.search-choice {
+ margin: 3px 5px 3px 0;
+ padding: 3px 5px 3px 19px;
+}
+.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
+ right: auto;
+ left: 4px;
+}
+.chosen-rtl.chosen-container-single-nosearch .chosen-search,
+.chosen-rtl .chosen-drop {
+ left: 9999px;
+}
+.chosen-rtl.chosen-container-single .chosen-results {
+ margin: 0 0 4px 4px;
+ padding: 0 4px 0 0;
+}
+.chosen-rtl .chosen-results li.group-option {
+ padding-right: 15px;
+ padding-left: 0;
+}
+.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
+ border-right: none;
+}
+.chosen-rtl .chosen-search input[type="text"] {
+ padding: 4px 5px 4px 20px;
+ background: white url('../../img/chosen-sprite.png') no-repeat -30px -20px;
+ background: url('../../img/chosen-sprite.png') no-repeat -30px -20px;
+ direction: rtl;
+}
+.chosen-rtl.chosen-container-single .chosen-single div b {
+ background-position: 6px 2px;
+}
+.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
+ background-position: -12px 2px;
+}
+
+/* @end */
+/* @group Retina compatibility */
+@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
+ .chosen-rtl .chosen-search input[type="text"],
+ .chosen-container-single .chosen-single abbr,
+ .chosen-container-single .chosen-single div b,
+ .chosen-container-single .chosen-search input[type="text"],
+ .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
+ .chosen-container .chosen-results-scroll-down span,
+ .chosen-container .chosen-results-scroll-up span {
+ background-image: url('../../img/chosen-sprite-2x.png') !important;
+ background-size: 52px 37px !important;
+ background-repeat: no-repeat !important;
+ }
+}
+/* @end */
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/cloud.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/cloud.css
new file mode 100644
index 000000000..c702c7a1d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/cloud.css
@@ -0,0 +1,722 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #cloud
+{
+ position: relative;
+}
+
+#content #cloud .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #cloud #error
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 12px;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content #cloud #error .msg
+{
+ font-style: italic;
+ font-weight: normal;
+ margin-top: 10px;
+}
+
+#content #cloud #debug
+{
+ background-color: #fff;
+ box-shadow: 0px 0px 10px #c0c0c0;
+ -moz-box-shadow: 0px 0px 10px #c0c0c0;
+ -webkit-box-shadow: 0px 0px 10px #c0c0c0;
+ padding: 20px;
+ position: absolute;
+ left: 50px;
+ top: 10px;
+}
+
+#content #cloud #debug ul
+{
+ margin-bottom: 5px;
+}
+
+#content #cloud #debug ul a
+{
+ background-position: 4px 50%;
+ border-right: 0;
+ display: block;
+ padding: 2px 4px;
+ padding-left: 25px;
+}
+
+#content #cloud #debug ul a:hover,
+#content #cloud #debug ul a.hover
+{
+ background-color: #f0f0f0;
+}
+
+#content #cloud #debug .clipboard
+{
+ float: left;
+ position: relative;
+}
+
+#content #cloud #debug .clipboard a
+{
+ background-image: url( ../../img/ico/clipboard-paste.png );
+ z-index: 98;
+}
+
+#content #cloud #debug .clipboard a:hover,
+#content #cloud #debug .clipboard a.hover,
+#content #cloud #debug .clipboard.copied a
+{
+ background-image: url( ../../img/ico/clipboard-paste-document-text.png );
+}
+
+#content #cloud #debug .close
+{
+ float: right;
+}
+
+#content #cloud #debug .close a
+{
+ background-image: url( ../../img/ico/cross-0.png );
+ padding-left: 21px;
+}
+
+#content #cloud #debug .close a:hover
+{
+ background-image: url( ../../img/ico/cross-1.png );
+}
+
+#content #cloud #debug .debug
+{
+ border: 1px solid #f0f0f0;
+ max-height: 350px;
+ overflow: auto;
+ padding: 5px;
+ width: 500px;
+}
+
+#content #cloud #debug .debug .loader
+{
+ background-position: 5px 50%;
+ display: block;
+ padding: 10px 26px;
+}
+
+#content #cloud .content
+{
+ padding-left: 0;
+ padding-right: 0;
+}
+
+#content #cloud .content.show
+{
+ background-image: url( ../../img/div.gif );
+ background-repeat: repeat-y;
+ background-position: 31% 0;
+}
+
+#content #cloud #tree
+{
+ float: left;
+ width: 30%;
+}
+
+#content #cloud .show #tree
+{
+ overflow: hidden;
+}
+
+#content #cloud #file-content
+{
+ float: right;
+ position: relative;
+ width: 68%;
+ min-height: 100px
+}
+
+#content #cloud .show #file-content
+{
+ display: block;
+}
+
+#content #cloud #file-content .close
+{
+ background-image: url( ../../img/ico/cross-0.png );
+ background-position: 50% 50%;
+ display: block;
+ height: 20px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 20px;
+}
+
+#content #cloud #file-content .close:hover
+{
+ background-image: url( ../../img/ico/cross-1.png );
+}
+
+#content #cloud #file-content #toggle.plus
+{
+ font-style: italic;
+ padding-left: 17px;
+ background-image: url( ../../img/ico/toggle-small-expand.png );
+}
+
+#content #cloud #file-content #toggle.minus
+{
+ font-style: italic;
+ padding-left: 17px;
+ background-image: url( ../../img/ico/toggle-small.png );
+}
+
+#content #cloud #file-content #data
+{
+ border-top: 1px solid #c0c0c0;
+ margin-top: 10px;
+ padding-top: 10px;
+}
+
+#content #cloud #file-content #data pre
+{
+ display: block;
+ max-height: 600px;
+ overflow: auto;
+}
+
+#content #cloud #file-content #data em
+{
+ color: #4d4d4d;
+}
+
+#content #cloud #file-content #prop
+{
+}
+
+#content #cloud #file-content li
+{
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+#content #cloud #file-content li.odd
+{
+ background-color: #F8F8F8;
+}
+
+#content #cloud #file-content li dt
+{
+ float: left;
+ width: 19%;
+}
+
+#content #cloud #file-content li dd
+{
+ float: right;
+ width: 80%;
+}
+
+/* tree */
+
+#content #cloud #legend
+{
+ border: 1px solid #f0f0f0;
+ padding: 10px;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+}
+
+#content #cloud #legend li
+{
+ padding-left: 15px;
+ position: relative;
+}
+
+#content #cloud #legend li svg
+{
+ position: absolute;
+ left: 0;
+ top: 2px;
+}
+
+#content #graph-content
+{
+ min-height: 400px;
+}
+
+#content #graph-content .node
+{
+ fill: #333;
+}
+
+#content #cloud #legend circle,
+#content #graph-content .node circle
+{
+ fill: #fff;
+ stroke: #c0c0c0;
+ stroke-width: 1.5px;
+}
+
+#content #graph-content .node.lvl-3 text
+{
+ cursor: pointer;
+}
+
+#content #graph-content .node.lvl-3:hover circle
+{
+ stroke: #000 !important;
+}
+
+#content #graph-content .node.lvl-3:hover text
+{
+ fill: #000 !important;
+}
+
+#content #graph-content .link
+{
+ fill: none;
+ stroke: #e0e0e0;
+ stroke-width: 1.5px;
+}
+
+#content #cloud #legend .gone circle,
+#content #graph-content .node.gone circle,
+#content #graph-content .link.gone
+{
+ stroke: #f0f0f0;
+}
+
+#content #graph-content .node.gone text
+{
+ fill: #f0f0f0;
+}
+
+#content #cloud #legend ul .gone
+{
+ color: #e0e0e0;
+}
+
+#content #cloud #legend .recovery_failed,
+#content #cloud #legend .recovery_failed circle,
+#content #graph-content .node.recovery_failed circle
+{
+ color: #C43C35;
+ stroke: #C43C35;
+ font-style: italic;
+}
+
+#content #graph-content .node.recovery_failed text
+{
+ fill: #C43C35;
+ font-style: italic;
+}
+
+#content #cloud #legend .down,
+#content #cloud #legend .down circle,
+#content #graph-content .node.down circle
+{
+ color: #c48f00;
+ stroke: #c48f00;
+}
+
+#content #graph-content .node.down text
+{
+ fill: #c48f00;
+}
+
+#content #cloud #legend .recovering,
+#content #cloud #legend .recovering circle,
+#content #graph-content .node.recovering circle
+{
+ color: #d5dd00;
+ stroke: #d5dd00;
+ font-style: italic;
+}
+
+#content #graph-content .node.recovering text
+{
+ fill: #d5dd00;
+ font-style: italic;
+}
+
+#content #cloud #legend .active,
+#content #cloud #legend .active circle,
+#content #graph-content .node.active circle
+{
+ color: #57A957;
+ stroke: #57A957;
+}
+
+#content #graph-content .node.active text
+{
+ fill: #57A957;
+}
+
+#content #cloud #legend .leader circle,
+#content #graph-content .node.leader circle
+{
+ fill: #000;
+}
+
+#content #cloud #legend .leader circle
+{
+ stroke: #fff;
+}
+
+#content #graph-content .link.lvl-2,
+#content #graph-content .link.leader
+{
+ stroke: #c0c0c0;
+}
+
+#content #cloud #legend .leader,
+#content #graph-content .leader text
+{
+ font-weight: bold;
+}
+
+#content #graph-content .node.lvl-0 circle
+{
+ stroke: #fff;
+}
+
+#content #graph-content .link.lvl-1
+{
+ stroke: #fff;
+}
+
+#cloudGraphPaging
+{
+ display: inline-block;
+ padding-top: 15px;
+ padding-bottom: 15px;
+}
+
+#nodesPaging
+{
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+#content #cloud #legend .shard-inactive,
+#content #cloud #legend .shard-inactive li,
+#content #cloud #legend .shard-inactive li text,
+#content #graph-content .shard-inactive text
+{
+ text-decoration: line-through;
+}
+#content #cloud #legend .shard-inactive circle,
+#content #graph-content .shard-inactive circle,
+#content #graph-content .link.shard-inactive
+{
+ stroke: #e9e9e9;
+}
+
+#content #cloud #legend .replicatype,
+#content #cloud #legend .replicatype rect,
+#content #graph-content .node.replicatype rect
+{
+ color: #007BA7;
+ stroke: #007BA7;
+ fill:rgb(0,123,167);
+
+}
+
+#content #graph-content .node.replicatype text
+{
+ fill: #007BA7;
+}
+
+/* Nodes tab */
+#nodes-table {
+ border-collapse: collapse;
+}
+
+#nodes-table td, #nodes-table th {
+ border: 1px solid #ddd;
+ padding: 8px;
+ vertical-align: top;
+}
+#nodes-table th {
+ font-weight: bolder;
+ font-stretch: extra-expanded;
+ background: #F8F8F8;
+}
+#content #cloud #nodes-content #nodes-table
+{
+ border-top: 1px solid #c0c0c0;
+ margin-top: 10px;
+ padding-top: 10px;
+}
+
+#content #cloud #nodes-content .host-name,
+#content #cloud #nodes-content .node-name a
+{
+ font-weight: bold;
+ font-size: larger;
+}
+
+#content #cloud #nodes-content a,
+#content #cloud #nodes-content a:hover,
+#content #cloud #nodes-content a.hover
+{
+ text-decoration: underline;
+ text-decoration-style: dotted;
+ text-decoration-color: #beebff;
+}
+
+#content #cloud #nodes-content a:hover,
+#content #cloud #nodes-content a.hover
+{
+ background-color: #beebff;
+}
+
+#content #cloud #nodes-content .host-spec,
+#content #cloud #nodes-content .node-spec,
+#content #cloud #nodes-content .node-spec a
+{
+ font-style: italic;
+}
+#content #cloud #nodes-content .node-uptime
+{
+ font-weight: bolder;
+ font-size: 20px;
+}
+#content #cloud #nodes-content .node-load,
+#content #cloud #nodes-content .node-cpu,
+#content #cloud #nodes-content .node-heap,
+#content #cloud #nodes-content .node-disk
+{
+ font-weight: bolder;
+ font-size: 20px;
+}
+
+#content #cloud #nodes-content .pct-normal
+{
+ color: darkgreen;
+}
+
+#content #cloud #nodes-content .pct-warn
+{
+ color: orange;
+}
+
+#content #cloud #nodes-content .pct-critical
+{
+ color: red;
+}
+
+#content #cloud #nodes-content .node-down
+{
+ font-weight: bold;
+ font-size: 12px;
+}
+
+#content #cloud #nodes-content .dead-node
+{
+ background-color: salmon;
+}
+
+/* Styling of reload and details buttons */
+#content #cloud #controls,
+#content #cloud #frame #zk-status-content #zk-controls
+{
+ display: block;
+ height: 30px;
+}
+
+#content #cloud .reload
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+ padding-left: 21px;
+ float: left;
+}
+
+#content #cloud .reload.loader
+{
+ padding-left: 0;
+}
+
+#content #cloud .details-button
+{
+ background-image: url(../../img/ico/ui-check-box-uncheck.png);
+ background-position: 0 50%;
+ color: #8D8D8D;
+ margin-top: 7px;
+ margin-left: 10px;
+ padding-left: 21px;
+ width: 30px;
+}
+
+#content #cloud .details-button.on
+{
+ background-image: url( ../../img/ico/ui-check-box.png );
+ color: #333;
+}
+
+#content #cloud #nodes-content .more
+{
+ font-style: italic;
+ text-underline: #0000fa;
+}
+
+/* Disk usage details d3 chart bars style */
+.chart {
+ background: #eee;
+ padding: 1px;
+}
+.chart div {
+ width:90%;
+}
+.chart div div {
+ display:inline-block;
+}
+.chart div div.rect {
+ transition: all 0.5s ease-out;
+ -moz-transition: all 0.5s ease-out;
+ -webkit-transition: all 0.5s ease-out;
+ width:0;
+ font: 10px sans-serif;
+ background-color: #4CAF50;
+ text-align: left;
+ padding: 3px;
+ margin: 2px;
+ color: #000000;
+ box-shadow: 1px 1px 1px #666;
+}
+
+#content #nodes-content .leader
+{
+ font-weight: bold;
+}
+
+#content #nodes-content .scroll-height-250
+{
+ max-height: 250px;
+ overflow-scrolling: auto;
+ overflow: auto;
+ /*overflow-y: auto;*/
+}
+
+#content #nodes-content .min-width-150
+{
+ min-width: 150px;
+}
+
+#content #cloud #nodes-content .node-cores
+{
+ min-width: 150px;
+}
+
+#content #nodes-content .core-details
+{
+ padding-left: 21px;
+}
+
+
+
+::-webkit-scrollbar {
+ -webkit-appearance: none;
+ width: 7px;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 4px;
+ background-color: rgba(0,0,0,.5);
+ -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
+}
+#content #cloud #zk-table td,
+#content #cloud #zk-table th
+{
+ border: 0px solid #ddd;
+ border-bottom: 0.50px solid #eee;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+#content #cloud #zk-table th
+{
+ border-bottom: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+ font-weight: bolder;
+ font-stretch: extra-expanded;
+ background: #F8F8F8;
+}
+
+#content #cloud #zk-table
+{
+ border-top: 1px solid #c0c0c0;
+ margin-top: 10px;
+ border-collapse: collapse;
+
+ font-weight: bold;
+}
+
+#content #cloud #zk-table #detail-divider
+{
+ background-color: #f8f8f8;
+ height: 10px;
+}
+
+.zookeeper-status
+{
+ font-size: large;
+}
+
+.zookeeper-errors
+{
+ background-color: lightpink;
+ padding: 10px;
+ border: 1px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.zookeeper-errors li::before
+{
+ content: "- ";
+}
+
+.zkstatus-green
+{
+ color: darkgreen;
+}
+
+.zkstatus-yellow
+{
+ color: orange;
+}
+
+.zkstatus-red
+{
+ color: red;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/collections.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/collections.css
new file mode 100644
index 000000000..e8d1207e1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/collections.css
@@ -0,0 +1,366 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #collections
+{
+ position: relative;
+}
+
+#content #collections #ui-block
+{
+ background-color: #fff;
+ height: 200px;
+ position: absolute;
+ left: -5px;
+ top: 35px;
+ width: 500px;
+}
+
+#content #collections #frame
+{
+ float: right;
+ width: 86%;
+}
+
+#content #collections #navigation
+{
+ padding-top: 50px;
+ width: 12%;
+}
+
+#content #collections #navigation a
+{
+ padding-left: 5px;
+}
+
+#content #collections #frame .actions
+{
+ margin-bottom: 20px;
+ min-height: 30px;
+}
+
+#content #collections .actions div.action
+{
+ width: 320px;
+}
+
+#content #collections .actions div.action .cloud
+{
+}
+
+#content #collections .actions form .directory-note
+{
+ background-image: url( ../../img/ico/information-white.png );
+ background-position: 22% 1px;
+ color: #4D4D4D;
+}
+
+#content #collections .actions form .error
+{
+ background-image: url( ../../img/ico/cross-button.png );
+ background-position: 22% 1px;
+ color: #c00;
+ font-weight: bold;
+}
+
+#content #collections .actions form p
+{
+ padding-bottom: 8px;
+}
+
+#content #collections .actions form label
+{
+ float: left;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ text-align: right;
+ width: 25%;
+}
+
+#content #collections .actions form input,
+#content #collections .actions form select,
+#content #collections .actions form .chosen-container
+#content #collections .actions form .buttons,
+#content #collections .actions form .note span
+{
+ float: right;
+ width: 71%;
+}
+
+#content #collections .actions form .note span
+{
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+#content #collections .actions form .buttons
+{
+ padding-top: 10px;
+}
+
+#content #collections .actions form button.submit
+{
+ margin-right: 20px;
+}
+
+#content #collections .actions form button.submit span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #collections .actions form button.reset span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #collections .actions #add
+{
+ left: 0;
+ position: absolute;
+}
+
+#content #collections .actions #add span
+{
+ background-image: url( ../../img/ico/plus-button.png );
+}
+
+#content #collections .actions #delete
+{
+ margin-right: 20px;
+}
+
+#content #collections .actions #delete span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #collections .actions #reload span
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+}
+
+#content #collections .actions #rename span
+{
+ background-image: url( ../../img/ico/ui-text-field-select.png );
+}
+
+#content #collections .actions #create-alias span
+{
+ background-image: url( ../../img/ico/arrow-switch.png );
+}
+
+#content #collections .actions #delete-alias span
+{
+ background-image: url( ../../img/ico/cross-button.png );
+}
+
+
+#content #collections .actions div.action
+{
+ background-color: #fff;
+ border: 1px solid #f0f0f0;
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ position: absolute;
+ left: 50px;
+ top: 40px;
+ padding: 10px;
+}
+
+#content #collections .actions #add-replica span
+{
+ background-image: url( ../../img/ico/plus-button.png );
+}
+
+#content #collections div.action.add-replica {
+ border: 1px solid #f0f0f0;
+ width: 400px;
+ margin-right: 0px;
+ padding: 10px;
+ float: right;
+}
+
+#content #collections div.action.add-replica p {
+ padding-bottom: 8px;
+}
+
+#content #collections div.action.add-replica .buttons {
+ float: right;
+}
+
+#content #collections div.action.add-replica .buttons .submit span {
+ background-image: url( ../../img/ico/tick.png );
+ background-position: 0% 50%;
+}
+
+#content #collections div.action.add-replica .buttons .reset span {
+ background-image: url( ../../img/ico/cross.png );
+ background-position: 0% 50%;
+}
+
+#content #collections #data #collection-data h2 { background-image: url( ../../img/ico/box.png ); }
+#content #collections #data #shard-data h2 { background-image: url( ../../img/ico/sitemap.png ); }
+#content #collections #data #shard-data .replica h2 { background-image: url( ../../img/ico/node-slave.png ); }
+
+#content #collections #data #index-data
+{
+ margin-top: 10px;
+}
+
+#content #collections #data li
+{
+ padding-bottom: 3px;
+ padding-top: 3px;
+}
+
+#content #collections #data li.odd
+{
+ background-color: #f8f8f8;
+}
+
+#content #collections #data li dt
+{
+ float: left;
+ width: 50%;
+}
+
+#content #collections #data li dd
+{
+ float: right;
+ width: 50%;
+}
+
+#content #collections #data li dd.ico
+{
+ background-image: url( ../../img/ico/slash.png );
+ height: 20px;
+}
+
+#content #collections #data li dd.ico.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #collections #data li dd.ico span
+{
+}
+
+#content #collections #add_advanced {
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+}
+
+#content #collections #add_advanced.open {
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #collections .shard {
+ margin-left: 40px;
+}
+
+#content #collections .replica {
+ margin-left: 40px;
+}
+
+#content #collections .shard h2 span.openReplica {
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+}
+
+#content #collections .shard h2 span.openReplica .open {
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #collections .replica h2 span {
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+}
+
+#content #collections .replica h2 span.rem {
+ background-image: url( ../../img/ico/cross.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+ right:10px;
+}
+
+#content #collections .shard h2 span.rem {
+ background-image: url( ../../img/ico/cross.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+ right:10px;
+}
+
+#content #collections .replica h2 span .open {
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #collections #add-replica {
+ float: right;
+}
+
+#content #collections .add select {
+ width: 100%;
+}
+
+#content #collections .chosen-container ul {
+ width: 100%;
+ padding: 5px;
+}
+
+#content #collections .delete-replica span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+#content #collections .delete-replica button.submit span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #collections .delete-shard span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+#content #collections .delete-shard button.submit span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #collections #node-name .chosen-container
+{
+ width: 100% !important;
+}
+
+#content #collections #collection-data {
+ float: left;
+ width: 35%;
+}
+
+#content #collections #shard-data {
+ float: left;
+ width: 65%;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/common.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/common.css
new file mode 100644
index 000000000..080935c77
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/common.css
@@ -0,0 +1,767 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+*
+{
+ background-repeat: no-repeat;
+ margin: 0;
+ padding: 0;
+}
+
+body, h1, h2, h3, h4, h5, h6, a, button, input, select, option, textarea, th, td, div.ui-tooltip-content
+{
+ color: #333;
+ font: 12px/1.6em "Lucida Grande", "DejaVu Sans", "Bitstream Vera Sans", Verdana, Arial, sans-serif;
+}
+
+body
+{
+ padding: 30px;
+ text-align: center;
+}
+
+a, button
+{
+ cursor: pointer;
+}
+
+input, select, textarea
+{
+ border: 1px solid #c0c0c0;
+ padding: 2px;
+}
+
+input[readonly=readonly]
+{
+ border-color: #f0f0f0;
+}
+
+button
+{
+ background-color: #e6e6e6;
+ background-repeat: no-repeat;
+ background-image: -webkit-gradient( linear, 0 0, 0 100%, from( #ffffff ), color-stop( 25%, #ffffff ), to( #e6e6e6 ) );
+ background-image: -webkit-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
+ background-image: -moz-linear-gradient( top, #ffffff, #ffffff 25%, #e6e6e6 );
+ background-image: -ms-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
+ background-image: -o-linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
+ background-image: linear-gradient( #ffffff, #ffffff 25%, #e6e6e6 );
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0 );
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
+ -moz-box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
+ box-shadow: inset 0 1px 0 rgba( 255, 255, 255, 0.2 ), 0 1px 2px rgba( 0, 0, 0, 0.05 );
+ color: #333;
+ cursor: pointer;
+ display: inline-block;
+ padding: 4px 7px 5px;
+ overflow: visible;
+ text-shadow: 0 1px 1px rgba( 255, 255, 255, 0.75 );
+ -webkit-transition: 0.1s linear background-image;
+ -moz-transition: 0.1s linear background-image;
+ -ms-transition: 0.1s linear background-image;
+ -o-transition: 0.1s linear background-image;
+ transition: 0.1s linear background-image;
+}
+
+button span
+{
+ background-position: 0 50%;
+ display: block;
+ padding-left: 21px;
+}
+
+button[type=submit], button.primary
+{
+ background-color: #0064cd;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient( linear, left top, left bottom, from( #049cdb ), to( #0064cd ) );
+ background-image: -moz-linear-gradient( top, #049cdb, #0064cd );
+ background-image: -ms-linear-gradient( top, #049cdb, #0064cd );
+ background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #049cdb ), color-stop( 100%, #0064cd ) );
+ background-image: -webkit-linear-gradient( top, #049cdb, #0064cd );
+ background-image: -o-linear-gradient( top, #049cdb, #0064cd );
+ background-image: linear-gradient( top, #049cdb, #0064cd );
+ border-color: #0064cd #0064cd #003f81;
+ border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
+ color: #ffffff;
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0 );
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+button.success
+{
+ background-color: #57a957;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient( linear, left top, left bottom, from( #62c462 ), to( #57a957 ) );
+ background-image: -moz-linear-gradient( top, #62c462, #57a957 );
+ background-image: -ms-linear-gradient( top, #62c462, #57a957 );
+ background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #62c462 ), color-stop( 100%, #57a957 ) );
+ background-image: -webkit-linear-gradient( top, #62c462, #57a957 );
+ background-image: -o-linear-gradient( top, #62c462, #57a957 );
+ background-image: linear-gradient( top, #62c462, #57a957 );
+ border-color: #57a957 #57a957 #3d773d;
+ border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#62c462', endColorstr='#57a957', GradientType=0 );
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.25 );
+}
+
+button.warn
+{
+ background-color: #c43c35;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient( linear, left top, left bottom, from( #ee5f5b ), to( #c43c35 ) );
+ background-image: -moz-linear-gradient( top, #ee5f5b, #c43c35 );
+ background-image: -ms-linear-gradient( top, #ee5f5b, #c43c35 );
+ background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #ee5f5b ), color-stop( 100%, #c43c35 ) );
+ background-image: -webkit-linear-gradient( top, #ee5f5b, #c43c35 );
+ background-image: -o-linear-gradient( top, #ee5f5b, #c43c35 );
+ background-image: linear-gradient( top, #ee5f5b, #c43c35 );
+ border-color: #c43c35 #c43c35 #882a25;
+ border-color: rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.1 ) rgba( 0, 0, 0, 0.25 );
+ color: #ffffff;
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0 );
+ text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.25 );
+}
+
+a
+{
+ text-decoration: none;
+}
+
+pre
+{
+ color: #333;
+ text-align: left;
+}
+
+abbr
+{
+ cursor: help;
+}
+
+ul
+{
+ list-style: none;
+}
+
+.clearfix:after { clear: both; content: "."; display: block; font-size: 0; height: 0; visibility: hidden; }
+.clearfix { display: block; }
+
+.loader
+{
+ background-image: url( ../../img/loader.gif ) !important;
+}
+
+.loader-light
+{
+ background-image: url( ../../img/loader-light.gif ) !important;
+}
+
+.universal-loader {
+ position: absolute;
+ left: -16px;
+ top: 0px;
+ width: 16px;
+ height: 16px;
+}
+
+#wrapper
+{
+ position: relative;
+ margin: 0 auto;
+ margin-bottom: 30px;
+ text-align: left;
+}
+
+#header
+{
+ padding-bottom: 10px;
+ position: fixed;
+ z-index: 42;
+}
+
+.scroll #header
+{
+ position: absolute;
+}
+
+#header #solr
+{
+ background-image: url( ../../img/solr.svg );
+ background-size: 128px;
+ display: block;
+ height: 78px;
+ width: 150px;
+}
+
+#header #solr span
+{
+ display: none;
+}
+
+#main
+{
+ min-width: 750px;
+ position: relative;
+}
+
+#main.error
+{
+ border: 0;
+ min-height: 0;
+ padding-top: 20px;
+}
+
+#main.error .message
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 50%;
+ color: #fff;
+ font-weight: bold;
+ margin-left: 150px;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#main.error .code
+{
+ border: 1px solid #c0c0c0;
+ padding: 5px;
+}
+
+#meta
+{
+ position: absolute;
+ bottom: -26px;
+ right: 0;
+}
+
+#meta li
+{
+ float: left;
+}
+
+#meta li a
+{
+ background-position: 10px 50%;
+ display: block;
+ height: 25px;
+ line-height: 25px;
+ padding-left: 31px;
+ padding-right: 10px;
+}
+
+#meta li a:hover
+{
+ background-color: #f0f0f0;
+}
+
+#meta .documentation a { background-image: url( ../../img/ico/document-text.png ); }
+#meta .issues a { background-image: url( ../../img/ico/bug.png ); }
+#meta .irc a { background-image: url( ../../img/ico/users.png ); }
+#meta .mailinglist a { background-image: url( ../../img/ico/mail.png ); }
+#meta .wiki-query-syntax a { background-image: url( ../../img/ico/script-code.png ); }
+
+#environment
+{
+ background-image: url( ../../img/ico/box.png );
+ background-position: 5px 50%;
+ display: none;
+ font-weight: bold;
+ margin-top: 10px;
+ padding: 5px 10px;
+ padding-left: 26px;
+}
+
+.has-environment #environment
+{
+ display: block;
+}
+
+#environment.prod
+{
+ background-color: #c37f7f;
+ color: #fff;
+}
+
+#environment.test
+{
+ background-color: #f5f5b2;
+}
+
+#environment.dev
+{
+ background-color: #cce7cc;
+}
+
+.header-message
+{
+ border: 1px solid #f00;
+ margin-left: 150px;
+ margin-bottom: 20px;
+}
+
+.header-message h2,
+.header-message ul,
+.header-message p
+{
+ padding: 10px;
+}
+
+.header-message h2
+{
+ background-color: #f00;
+ color: #fff;
+ font-weight: bold;
+}
+
+.header-message p
+{
+ color: #4D4D4D;
+ padding-top: 0;
+}
+
+#loading
+#http-exception
+{
+ display: none;
+}
+
+.exception
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 50%;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content-wrapper
+{
+ margin-left: 150px;
+ border: 1px solid #c0c0c0;
+ min-height: 500px;
+}
+
+#content
+{
+ padding: 10px;
+}
+
+#content > .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content iframe
+{
+ border: 0;
+ display: block;
+ min-height: 400px;
+ width: 100%;
+}
+
+#content .block
+{
+ margin-bottom: 10px;
+}
+
+#content .block h2
+{
+ background-color: #fafafa;
+ background-position: 5px 50%;
+ border-bottom: 1px solid #f0f0f0;
+ font-weight: bold;
+ padding: 5px;
+ padding-left: 26px;
+}
+
+#content .block.disabled,
+#content .block.disabled h2
+{
+ color: #c0c0c0;
+}
+
+#content .block .message,
+#content .block .content
+{
+ padding: 5px;
+}
+
+/* syntax */
+
+pre.syntax
+{
+ overflow: auto;
+}
+
+pre.syntax code
+{
+ display: block;
+ color: #000;
+}
+
+pre.syntax .comment,
+pre.syntax .template_comment,
+pre.syntax .diff .header,
+pre.syntax .javadoc
+{
+ color: #998;
+ font-style: italic;
+}
+
+pre.syntax .keyword,
+pre.syntax .css .rule .keyword,
+pre.syntax .winutils,
+pre.syntax .javascript .title,
+pre.syntax .lisp .title,
+pre.syntax .subst
+{
+ color: #000;
+ font-weight: bold;
+}
+
+pre.syntax .number,
+pre.syntax .hexcolor
+{
+ color: #40a070;
+}
+
+pre.syntax.language-json .number
+{
+ color: blue;
+}
+
+pre.syntax.language-json .literal
+{
+ color: firebrick;
+}
+
+pre.syntax .string,
+pre.syntax .tag .value,
+pre.syntax .phpdoc,
+pre.syntax .tex .formula
+{
+ color: #d14;
+}
+
+pre.syntax.language-json .string
+{
+ color: green;
+}
+
+pre.syntax .title,
+pre.syntax .id
+{
+ color: #900;
+ font-weight: bold;
+}
+
+pre.syntax .javascript .title,
+pre.syntax .lisp .title,
+pre.syntax .subst
+{
+ font-weight: normal;
+}
+
+pre.syntax .class .title,
+pre.syntax .tex .command
+{
+ color: #458;
+ font-weight: bold;
+}
+
+pre.syntax .tag,
+pre.syntax .css .keyword,
+pre.syntax .html .keyword,
+pre.syntax .tag .title,
+pre.syntax .django .tag .keyword
+{
+ color: #000080;
+ font-weight: normal;
+}
+
+pre.syntax .attribute,
+pre.syntax .variable,
+pre.syntax .instancevar,
+pre.syntax .lisp .body
+{
+ color: #008080;
+}
+
+pre.syntax.language-json .attribute
+{
+ color: black;
+ font-weight: bold;
+}
+
+pre.syntax .regexp
+{
+ color: #009926;
+}
+
+pre.syntax .class
+{
+ color: #458;
+ font-weight: bold;
+}
+
+pre.syntax .symbol,
+pre.syntax .ruby .symbol .string,
+pre.syntax .ruby .symbol .keyword,
+pre.syntax .ruby .symbol .keymethods,
+pre.syntax .lisp .keyword,
+pre.syntax .tex .special
+{
+ color: #990073;
+}
+
+pre.syntax .builtin,
+pre.syntax .built_in,
+pre.syntax .lisp .title
+{
+ color: #0086b3;
+}
+
+pre.syntax .preprocessor,
+pre.syntax .pi,
+pre.syntax .doctype,
+pre.syntax .shebang,
+pre.syntax .cdata
+{
+ color: #999;
+ font-weight: bold;
+}
+
+pre.syntax .deletion
+{
+ background: #fdd;
+}
+
+pre.syntax .addition
+{
+ background: #dfd;
+}
+
+pre.syntax .diff .change
+{
+ background: #0086b3;
+}
+
+pre.syntax .chunk
+{
+ color: #aaa;
+}
+
+pre.syntax .tex .formula
+{
+ opacity: 0.5;
+}
+
+#content .tree li,
+#content .tree ins
+{
+ background-color: transparent;
+ background-image: url( ../../img/tree.png );
+ background-repeat: no-repeat;
+}
+
+#content .tree li
+{
+ background-position: -54px 0;
+ background-repeat: repeat-y;
+ line-height: 22px;
+}
+
+#content .tree li.jstree-last
+{
+ background:transparent;
+}
+
+#content .tree .jstree-open > ins
+{
+ background-position: -36px 0;
+}
+
+#content .tree .jstree-closed > ins
+{
+ background-position: -18px 0;
+}
+
+#content .tree .jstree-leaf > ins
+{
+ background-position: 0 0;
+}
+
+#content .tree .jstree-hovered
+{
+ background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px;
+}
+
+#content .tree .jstree-clicked
+{
+ background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px;
+}
+
+#content .tree a.active
+{
+ background-color: #f0f0f0;
+ color: #00f;
+}
+
+#content .tree a .jstree-icon
+{
+ background-image: url( ../../img/ico/folder.png );
+}
+
+#content .tree .jstree-leaf a .jstree-icon
+{
+ background-image: url( ../../img/ico/document-text.png );
+}
+
+#content .tree .jstree-search
+{
+ font-style:italic;
+}
+
+#content .tree a.jstree-search
+{
+ color:aqua;
+}
+
+#connection-box
+{
+ display: none;
+}
+
+#connection-status-modal
+{
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ background-color: #e6e6e6;
+ opacity: 0.5;
+ z-index: 100;
+}
+
+#connection-status-recovered
+{
+ z-index:102;
+}
+
+.connection-status
+{
+ position: absolute;
+ left: 200px;
+ right: 200px;
+ top: 40%;
+ height: 75px;
+ border: 1px solid #f00;
+ padding: 30px;
+ background-color: #fff;
+ opacity: 1;
+ z-index: 101;
+}
+
+.connection-status p
+{
+ background-image: url( ../../img/ico/network-status-busy.png );
+ background-position: 0 50%;
+ color: #800;
+ padding-left: 26px;
+}
+
+#connection-status-recovered p
+{
+ color: #080;
+ background-image: url( ../../img/ico/network-status.png );
+}
+
+#content .address-bar
+{
+ margin-bottom: 10px;
+ background-image: url( ../../img/ico/ui-address-bar.png );
+ background-position: 5px 50%;
+ border: 1px solid #f0f0f0;
+ box-shadow: 1px 1px 0 #f0f0f0;
+ -moz-box-shadow: 1px 1px 0 #f0f0f0;
+ -webkit-box-shadow: 1px 1px 0 #f0f0f0;
+ color: #4D4D4D;
+ display: block;
+ overflow: hidden;
+ padding: 5px;
+ padding-left: 26px;
+ white-space: nowrap;
+}
+
+#content .address-bar:focus,
+#content .address-bar:hover
+{
+ border-color: #c0c0c0;
+ box-shadow: 1px 1px 0 #d8d8d8;
+ -moz-box-shadow: 1px 1px 0 #d8d8d8;
+ -webkit-box-shadow: 1px 1px 0 #d8d8d8;
+ color: #333;
+}
+
+.exception .show-exception {
+ margin-top: 4px;
+ display: block;
+ position: absolute;
+ right: 10px;
+ top: 7px;
+ color: #fff;
+}
+
+#exception .show-exception a:hover {
+ color: #333;
+}
+
+.other-ui-link {
+ margin: 0px;
+ position: absolute;
+ right: 0px;
+ top: -20px;
+}
+
+.other-ui-link span,
+.new-ui-warning span.help {
+ background-image: url( ../../img/ico/information-white.png );
+ right: 0px;
+ padding-left: 16px;
+}
+
+.other-ui-link a.ul {
+ text-decoration: underline;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/cores.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/cores.css
new file mode 100644
index 000000000..0428c664b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/cores.css
@@ -0,0 +1,225 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #cores
+{
+ position: relative;
+}
+
+#content #cores #ui-block
+{
+ background-color: #fff;
+ height: 200px;
+ position: absolute;
+ left: -5px;
+ top: 35px;
+ width: 500px;
+}
+
+#content #cores #frame
+{
+ float: right;
+ width: 86%;
+}
+
+#content #cores #navigation
+{
+ padding-top: 50px;
+ width: 12%;
+}
+
+#content #cores #navigation a
+{
+ padding-left: 5px;
+}
+
+#content #cores #frame .actions
+{
+ margin-bottom: 20px;
+ min-height: 30px;
+}
+
+#content #cores .actions div.action
+{
+ width: 320px;
+}
+
+#content #cores .actions div.action .cloud
+{
+}
+
+#content #cores .actions form .directory-note
+{
+ background-image: url( ../../img/ico/information-white.png );
+ background-position: 22% 1px;
+ color: #4D4D4D;
+}
+
+#content #cores .actions form .error
+{
+ background-image: url( ../../img/ico/cross-button.png );
+ background-position: 22% 1px;
+ color: #c00;
+ font-weight: bold;
+}
+
+#content #cores .actions form p
+{
+ padding-bottom: 8px;
+}
+
+#content #cores .actions form label
+{
+ float: left;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ text-align: right;
+ width: 25%;
+}
+
+#content #cores .actions form input,
+#content #cores .actions form select,
+#content #cores .actions form .buttons,
+#content #cores .actions form .note span
+{
+ float: right;
+ width: 71%;
+}
+
+#content #cores .actions form .note span
+{
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+#content #cores .actions form .buttons
+{
+ padding-top: 10px;
+}
+
+#content #cores .actions form button.submit
+{
+ margin-right: 20px;
+}
+
+#content #cores .actions form button.submit span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #cores .actions form button.reset span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #cores .actions #add
+{
+ left: 0;
+ position: absolute;
+}
+
+#content #cores .actions #add span
+{
+ background-image: url( ../../img/ico/plus-button.png );
+}
+
+#content #cores .actions #unload
+{
+ margin-right: 20px;
+}
+
+#content #cores .actions #unload span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #cores .actions #reload span
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+}
+
+#content #cores .actions #rename span
+{
+ background-image: url( ../../img/ico/ui-text-field-select.png );
+}
+
+#content #cores .actions #swap span
+{
+ background-image: url( ../../img/ico/arrow-switch.png );
+}
+
+
+#content #cores .actions div.action
+{
+ background-color: #fff;
+ border: 1px solid #f0f0f0;
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ position: absolute;
+ left: -50px;
+ top: 40px;
+ padding: 10px;
+}
+
+#content #cores #data #core-data h2 { background-image: url( ../../img/ico/box.png ); }
+#content #cores #data #index-data h2 { background-image: url( ../../img/ico/chart.png ); }
+
+#content #cores #data #index-data
+{
+ margin-top: 10px;
+}
+
+#content #cores #data li
+{
+ padding-bottom: 3px;
+ padding-top: 3px;
+}
+
+#content #cores #data li.odd
+{
+ background-color: #f8f8f8;
+}
+
+#content #cores #data li dt
+{
+ float: left;
+ width: 17%;
+}
+
+#content #cores #data li dd
+{
+ float: right;
+ width: 82%;
+}
+
+#content #cores #data li dd.ico
+{
+ background-image: url( ../../img/ico/slash.png );
+ height: 20px;
+}
+
+#content #cores #data li dd.ico.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #cores #data li dd.ico span
+{
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/dashboard.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/dashboard.css
new file mode 100644
index 000000000..734d62a9d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/dashboard.css
@@ -0,0 +1,179 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #dashboard .block
+{
+ background-image: none;
+ width: 49%;
+}
+
+#content #dashboard .fieldlist
+{
+ float: left;
+}
+
+#content #dashboard .fieldlist dt,
+#content #dashboard .fieldlist dd
+{
+ display: block;
+ float: left;
+}
+
+#content #dashboard .fieldlist dt
+{
+ clear: left;
+ margin-right: 2%;
+ text-align: right;
+ width: 23%;
+}
+
+#content #dashboard .fieldlist dd
+{
+ width: 74%;
+}
+
+#content #dashboard .fieldlist .index_optimized
+{
+ margin-top: 10px;
+}
+
+#content #dashboard .fieldlist .ico
+{
+ background-image: url( ../../img/ico/slash.png );
+ height: 20px;
+}
+
+#content #dashboard .fieldlist .ico.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #dashboard .fieldlist .ico span
+{
+ display: none;
+}
+
+#content #dashboard #statistics .index_optimized.value a
+{
+ display: none;
+}
+
+#content #dashboard #statistics .index_optimized.value.ico-0 a
+{
+ background-color: #f0f0f0;
+ background-image: url( ../../img/ico/hammer-screwdriver.png );
+ background-position: 5px 50%;
+ border: 1px solid #c0c0c0;
+ display: block;
+ float: left;
+ margin-left: 50px;
+ padding: 1px 5px;
+ padding-left: 26px;
+}
+
+#content #dashboard #statistics .index_has-deletions
+{
+ display: none;
+}
+
+#content #dashboard #statistics .index_has-deletions.value.ico-0
+{
+ background-image: url( ../../img/ico/tick-red.png );
+}
+
+#content #dashboard #replication
+{
+ float: left;
+}
+
+#content #dashboard #replication .is-replicating
+{
+ background-position: 99% 50%;
+ display: block;
+}
+
+#content #dashboard #replication #details table thead td span
+{
+ display: none;
+}
+
+#content #dashboard #instance
+{
+ float: right;
+}
+
+#content #dashboard #instance .dir_impl
+{
+ margin-top: 10px;
+}
+
+#content #dashboard #healthcheck
+{
+ float: right;
+}
+
+#content #dashboard #healthcheck .ico
+{
+ background-image: url( ../../img/ico/slash.png );
+ height: 20px;
+ padding-left: 20px;
+ width: 60%;
+}
+
+#content #dashboard #healthcheck .ico.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #dashboard #system h2 { background-image: url( ../../img/ico/server.png ); }
+#content #dashboard #statistics h2 { background-image: url( ../../img/ico/chart.png ); }
+#content #dashboard #replication h2 { background-image: url( ../../img/ico/node.png ); }
+#content #dashboard #replication.master h2 { background-image: url( ../../img/ico/node-master.png ); }
+#content #dashboard #replication.slave h2 { background-image: url( ../../img/ico/node-slave.png ); }
+#content #dashboard #instance h2 { background-image: url( ../../img/ico/server.png ); }
+#content #dashboard #collection h2 { background-image: url( ../../img/ico/book-open-text.png ); }
+#content #dashboard #shards h2 { background-image: url( ../../img/ico/documents-stack.png ); }
+
+#content #dashboard #shards { margin-left: 20px;}
+
+#dashboard #shards .shard h3.shard-title {
+ display: block;
+ background-color: #c8c8c8;
+ font-weight: bold;
+ padding: 3px;
+ padding-left: 30px;
+ margin-left: 20px;
+ margin-top: 20px;
+ background-image: url( ../../img/ico/document-text.png );
+ background-position-x: 10px;
+ background-position-y: 3px;
+}
+
+#dashboard #shards .shard .shard-detail {
+ margin-bottom: 25px;
+ margin-top: 7px;
+}
+
+#dashboard #shards .shard .replica {
+ background-color: #e4e4e4;
+}
+
+#dashboard #shards .shard .replica.odd {
+ background-color: #fff;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/dataimport.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/dataimport.css
new file mode 100644
index 000000000..6afb096ca
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/dataimport.css
@@ -0,0 +1,370 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #dataimport
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 21% 0;
+ background-repeat: repeat-y;
+}
+
+#content #dataimport #frame
+{
+ float: right;
+ width: 78%;
+}
+
+#content #dataimport #form
+{
+ float: left;
+ width: 20%;
+}
+
+#content #dataimport #form #navigation
+{
+ border-right: 0;
+}
+
+#content #dataimport #form #navigation a
+{
+ background-image: url( ../../img/ico/status-offline.png );
+}
+
+#content #dataimport #form #navigation .current a
+{
+ background-image: url( ../../img/ico/status.png );
+}
+
+#content #dataimport #form form
+{
+ border-top: 1px solid #f0f0f0;
+ margin-top: 10px;
+ padding-top: 5px;
+}
+
+#content #dataimport #form label
+{
+ cursor: pointer;
+ display: block;
+ margin-top: 5px;
+}
+
+#content #dataimport #form input,
+#content #dataimport #form select,
+#content #dataimport #form textarea
+{
+ margin-bottom: 2px;
+ width: 100%;
+}
+
+#content #dataimport #form input
+{
+ width: 98%;
+}
+
+#content #dataimport #form button
+{
+ margin-top: 10px;
+}
+
+#content #dataimport #form .execute span
+{
+ background-image: url( ../../img/ico/document-import.png );
+}
+
+#content #dataimport #form .refresh-status span
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+}
+
+#content #dataimport #form .refresh-status span.success
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #dataimport #form #start
+{
+ float: left;
+ width: 47%;
+}
+
+#content #dataimport #form #rows
+{
+ float: right;
+ width: 47%;
+}
+
+#content #dataimport #form .checkbox input
+{
+ margin-bottom: 0;
+ width: auto;
+}
+
+#content #dataimport #form #auto-refresh-status
+{
+ margin-top: 20px;
+}
+
+#content #dataimport #form #auto-refresh-status a
+{
+ background-image: url( ../../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #dataimport #form #auto-refresh-status a.on,
+#content #dataimport #form #auto-refresh-status a:hover
+{
+ color: #333;
+}
+
+#content #dataimport #form #auto-refresh-status a.on
+{
+ background-image: url( ../../img/ico/ui-check-box.png );
+}
+
+#content #dataimport #current_state
+{
+ padding: 10px;
+ margin-bottom: 20px;
+}
+
+#content #dataimport #current_state .last_update,
+#content #dataimport #current_state .info
+{
+ display: block;
+ padding-left: 21px;
+}
+
+#content #dataimport #current_state .last_update
+{
+ color: #4D4D4D;
+ font-size: 11px;
+}
+
+#content #dataimport #current_state .info
+{
+ background-position: 0 1px;
+ position: relative;
+}
+
+#content #dataimport #current_state .info .details span
+{
+ color: #c0c0c0;
+}
+
+#content #dataimport #current_state .info .abort-import
+{
+ position: absolute;
+ right: 0px;
+ top: 0px;
+}
+
+#content #dataimport #current_state .info .abort-import span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #dataimport #current_state .info .abort-import.success span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #dataimport #current_state.indexing
+{
+ background-color: #f9f9f9;
+}
+
+#content #dataimport #current_state.indexing .info
+{
+ background-image: url( ../../img/ico/hourglass.png );
+}
+
+#content #dataimport #current_state.indexing .info .abort-import
+{
+ display: block;
+}
+
+#content #dataimport #current_state.success
+{
+ background-color: #e6f3e6;
+}
+
+#content #dataimport #current_state.success .info
+{
+ background-image: url( ../../img/ico/tick-circle.png );
+}
+
+#content #dataimport #current_state.success .info strong
+{
+ color: #080;
+}
+
+#content #dataimport #current_state.aborted
+{
+ background-color: #f3e6e6;
+}
+
+#content #dataimport #current_state.aborted .info
+{
+ background-image: url( ../../img/ico/slash.png );
+}
+
+#content #dataimport #current_state.aborted .info strong
+{
+ color: #800;
+}
+
+#content #dataimport #current_state.failure
+{
+ background-color: #f3e6e6;
+}
+
+#content #dataimport #current_state.failure .info
+{
+ background-image: url( ../../img/ico/cross-button.png );
+}
+
+#content #dataimport #current_state.failure .info strong
+{
+ color: #800;
+}
+
+#content #dataimport #current_state.idle
+{
+ background-color: #e6e6ff;
+}
+
+#content #dataimport #current_state.idle .info
+{
+ background-image: url( ../../img/ico/information.png );
+}
+
+#content #dataimport #error
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 50%;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content #dataimport .block h2
+{
+ border-color: #c0c0c0;
+ padding-left: 5px;
+ position: relative;
+}
+
+#content #dataimport .block.hidden h2
+{
+ border-color: #fafafa;
+}
+
+#content #dataimport .block h2 a.toggle
+{
+ background-image: url( ../../img/ico/toggle-small.png );
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #dataimport .block.hidden h2 a.toggle
+{
+ background-image: url( ../../img/ico/toggle-small-expand.png );
+}
+
+#content #dataimport #config h2 a.r
+{
+ background-position: 3px 50%;
+ display: block;
+ float: right;
+ margin-left: 10px;
+ padding-left: 24px;
+ padding-right: 3px;
+}
+
+#content #dataimport #config h2 a.reload_config
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+}
+
+#content #dataimport #config h2 a.reload_config.success
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #dataimport #config h2 a.reload_config.error
+{
+ background-image: url( ../../img/ico/slash.png );
+}
+
+#content #dataimport #config h2 a.debug_mode
+{
+ background-image: url( ../../img/ico/hammer.png );
+ color: #4D4D4D;
+}
+
+#content #dataimport #config.debug_mode h2 a.debug_mode
+{
+ background-color: #ff0;
+ background-image: url( ../../img/ico/hammer-screwdriver.png );
+ color: #333;
+}
+
+#content #dataimport #config .content
+{
+ padding: 5px 2px;
+}
+
+#content #dataimport #dataimport_config .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #dataimport #dataimport_config .formatted
+{
+ border: 1px solid #fff;
+ display: block;
+ padding: 2px;
+}
+
+#content #dataimport .debug_mode #dataimport_config .editable
+{
+ display: block;
+}
+
+#content #dataimport #dataimport_config .editable textarea
+{
+ font-family: monospace;
+ height: 120px;
+ min-height: 60px;
+ width: 100%;
+}
+
+#content #dataimport #debug_response em
+{
+ color: #4D4D4D;
+ font-style: normal;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/documents.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/documents.css
new file mode 100644
index 000000000..2f0ba12ed
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/documents.css
@@ -0,0 +1,179 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #documents
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 45% 0;
+ background-repeat: repeat-y;
+}
+
+#content #documents #form
+{
+ float: left;
+ /*width: 21%;*/
+}
+
+#content #documents #form label
+{
+ cursor: pointer;
+ display: block;
+ margin-top: 5px;
+}
+
+#content #documents #form input,
+#content #documents #form select,
+#content #documents #form textarea
+{
+ margin-bottom: 2px;
+ /*width: 100%;*/
+}
+
+#content #documents #form input,
+#content #documents #form textarea
+{
+ margin-bottom: 2px;
+ /*width: 98%;*/
+}
+
+#content #documents #form #start
+{
+ float: left;
+ /*width: 45%;*/
+}
+
+#content #documents #form #rows
+{
+ float: right;
+ /* width: 45%;*/
+}
+
+#content #documents #form .checkbox input
+{
+ margin-bottom: 0;
+ width: auto;
+}
+
+#content #documents #form fieldset,
+#content #documents #form .optional.expanded
+{
+ border: 1px solid #fff;
+ border-top: 1px solid #c0c0c0;
+ margin-bottom: 5px;
+}
+
+#content #documents #form fieldset.common
+{
+ margin-top: 10px;
+}
+
+#content #documents #form fieldset legend,
+#content #documents #form .optional.expanded legend
+{
+ display: block;
+ margin-left: 10px;
+ padding: 0px 5px;
+}
+
+#content #documents #form fieldset legend label
+{
+ margin-top: 0;
+}
+
+#content #documents #form fieldset .fieldset
+{
+ border-bottom: 1px solid #f0f0f0;
+ margin-bottom: 5px;
+ padding-bottom: 10px;
+}
+
+#content #documents #form .optional
+{
+ border: 0;
+}
+
+#content #documents #form .optional legend
+{
+ margin-left: 0;
+ padding-left: 0;
+}
+
+#content #documents #form .optional.expanded .fieldset
+{
+ display: block;
+}
+
+#content #documents #result
+{
+ float: right;
+ width: 54%;
+}
+
+#content #documents #result #url
+{
+ margin-bottom: 10px;
+ background-image: url( ../../img/ico/ui-address-bar.png );
+ background-position: 5px 50%;
+ border: 1px solid #f0f0f0;
+ box-shadow: 1px 1px 0 #f0f0f0;
+ -moz-box-shadow: 1px 1px 0 #f0f0f0;
+ -webkit-box-shadow: 1px 1px 0 #f0f0f0;
+ color: #c0c0c0;
+ display: block;
+ overflow: hidden;
+ padding: 5px;
+ padding-left: 26px;
+ white-space: nowrap;
+}
+
+#content #documents #result #url:focus,
+#content #documents #result #url:hover
+{
+ border-color: #c0c0c0;
+ box-shadow: 1px 1px 0 #d8d8d8;
+ -moz-box-shadow: 1px 1px 0 #d8d8d8;
+ -webkit-box-shadow: 1px 1px 0 #d8d8d8;
+ color: #333;
+}
+
+#content #documents #result #response
+{
+}
+
+#content #documents #result #response pre
+{
+ padding-left: 20px;
+}
+
+.description{
+ font-weight: bold;
+}
+
+#document-type{
+ padding-bottom: 5px;
+}
+
+#wizard-fields div{
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+#wiz-field-data, #wiz-field-data span{
+ vertical-align: top;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/files.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/files.css
new file mode 100644
index 000000000..46b3e8c30
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/files.css
@@ -0,0 +1,53 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #files #tree-holder
+{
+ float: left;
+ width: 20%;
+}
+
+#content #files #tree-holder li
+{
+ overflow: hidden;
+}
+
+#content #files form .buttons button
+{
+ float: right;
+}
+
+#content #files #file-content
+{
+ float: right;
+ position: relative;
+ width: 78%;
+ min-height: 100px
+}
+
+#content #files .show #file-content
+{
+ display: block;
+}
+
+#content #files #file-content .response
+{
+ border: 1px solid transparent;
+ padding: 2px;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/index.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/index.css
new file mode 100644
index 000000000..c53e3230a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/index.css
@@ -0,0 +1,216 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #index .bar-desc
+{
+ color: #4D4D4D;
+ font-weight: normal;
+ margin-left: 10px;
+ white-space: pre;
+}
+
+#content #index .bar-holder
+{
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ height: 35px;
+}
+
+#content #index .bar-holder .bar
+{
+ height: 100%;
+ position: relative;
+}
+
+#content #index .bar-holder div .val
+{
+ border-right: 1px solid #f00;
+ display: block;
+ padding-right: 5px;
+ position: absolute;
+ right: 0;
+ top: 35px;
+ white-space: nowrap;
+}
+
+#content #index .bar-holder .bar-max.bar
+{
+ background-color: #f0f0f0;
+}
+
+#content #index .bar-holder .bar-max.val
+{
+ border-color: #f0f0f0;
+ color: #8D8D8D;
+}
+
+#content #index .bar-holder .bar-total.bar
+{
+ background-color: #c0c0c0;
+}
+
+#content #index .bar-holder .bar-total.val
+{
+ border-color: #c0c0c0;
+ color: #4D4D4D;
+}
+
+#content #index .bar-holder .bar-used.bar
+{
+ background-color: #969696;
+}
+
+#content #index .bar-holder .bar-used.val
+{
+ border-color: #969696;
+ color: #969696;
+}
+
+#content #index .bar-holder.bar-lvl-2 .bar-max.val { padding-top: 25px; }
+#content #index .bar-holder.bar-lvl-2 .bar-total.val { padding-top: 5px; }
+#content #index .bar-holder.bar-lvl-2 { margin-bottom: 45px; }
+
+#content #index .bar-holder.bar-lvl-3 .bar-max.val { padding-top: 45px; }
+#content #index .bar-holder.bar-lvl-3 .bar-total.val { padding-top: 25px; }
+#content #index .bar-holder.bar-lvl-3 .bar-used.val { padding-top: 5px; }
+#content #index .bar-holder.bar-lvl-3 { margin-bottom: 65px; }
+
+#content #index .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #index .index-left
+{
+ float: left;
+ width: 55%;
+}
+
+#content #index .index-right
+{
+ float: right;
+ width: 40%;
+}
+
+#content #index .data
+{
+ padding-bottom: 12px;
+ overflow: hidden;
+}
+
+#content #index .data:hover
+{
+ overflow-x: auto;
+}
+
+#content #index .data li
+{
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+#content #index .data li dt
+{
+ float: left;
+ white-space: nowrap;
+ width: 20%;
+}
+
+#content #index .data li dd
+{
+ float: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 80%
+}
+
+#content #index .data li dd.odd
+{
+ background-color: #f0f0f0;
+}
+
+#content #index .data dt span
+{
+ background-position: 1px 50%;
+ display: block;
+ padding-left: 22px;
+}
+
+#content #index #instance h2 { background-image: url( ../../img/ico/server.png ); }
+#content #index #instance .start_time dt span { background-image: url( ../../img/ico/clock-select.png ); }
+
+#content #index #versions h2 { background-image: url( ../../img/ico/property.png ); }
+#content #index #versions .solr span { background-image: url( ../../img/solr-ico.png ); }
+#content #index #versions .lucene span { background-image: url( ../../img/lucene-ico.png ); }
+
+#content #index #jvm h2 { background-image: url( ../../img/ico/jar.png ); }
+#content #index #jvm .jvm_version dt span { background-image: url( ../../img/ico/jar.png ); }
+#content #index #jvm .processors dt span { background-image: url( ../../img/ico/processor.png ); }
+#content #index #jvm .command_line_args dt span { background-image: url( ../../img/ico/terminal.png ); }
+
+#content #index #system h2 { background-image: url( ../../img/ico/system-monitor.png ); }
+
+#content #index #system
+{
+ position: relative;
+}
+
+#content #index #system .reload
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+ background-position: 50% 50%;
+ display: block;
+ height: 30px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 30px;
+}
+
+#content #index #system .reload.loader
+{
+ padding-left: 0;
+}
+
+#content #index #system .reload span
+{
+ display: none;
+}
+
+#content #index #system .content p
+{
+ margin-top: 10px;
+ margin-bottom: 5px;
+}
+
+#content #index #system .content .no-info
+{
+ color: #4D4D4D;
+ display: none;
+ font-style: italic;
+}
+
+#content #index #jvm-memory h2 { background-image: url( ../../img/ico/memory.png ); }
+
+#content #index #jvm-memory-bar
+{
+ margin-top: 20px;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/java-properties.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/java-properties.css
new file mode 100644
index 000000000..d23fadfa4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/java-properties.css
@@ -0,0 +1,47 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #java-properties .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #java-properties li
+{
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+#content #java-properties li.odd
+{
+ background-color: #f8f8f8;
+}
+
+#content #java-properties li dt
+{
+ float: left;
+ width: 29%;
+}
+
+#content #java-properties li dd
+{
+ float: right;
+ width: 70%
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.min.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.min.css
new file mode 100644
index 000000000..4cd94c6c3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.min.css
@@ -0,0 +1,28 @@
+/*! jQuery UI - v1.12.1 - 2017-10-31
+* http://jqueryui.com
+
+Available for use under the MIT License
+
+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.
+
+* Includes: core.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{text-align:left;border-width:2px}.ui-widget{font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.structure.min.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.structure.min.css
new file mode 100644
index 000000000..d6f2f86ca
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/jquery-ui.structure.min.css
@@ -0,0 +1,24 @@
+/*! jQuery UI - v1.12.1 - 2017-10-31
+* http://jqueryui.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.
+
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/logging.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/logging.css
new file mode 100644
index 000000000..e28e771cf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/logging.css
@@ -0,0 +1,384 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #logging .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #logging .block h2
+{
+ background-image: url( ../../img/ico/document-text.png );
+ margin-bottom: 10px;
+}
+
+#content #logging .block h2 span span
+{
+ color: #c0c0c0;
+ font-weight: normal;
+ margin-left: 10px;
+}
+
+#content #logging #viewer
+{
+ position: relative;
+}
+
+#content #logging #viewer time
+{
+ white-space: pre;
+}
+
+#content #logging #viewer #footer
+{
+ margin-top: 20px;
+}
+
+#content #logging #viewer #state
+{
+ background-position: 0 50%;
+ float: left;
+ color: #4D4D4D;
+ width: 45%;
+}
+
+#content #logging #viewer #date-format
+{
+ float: right;
+}
+
+#content #logging #viewer #date-format a
+{
+ background-image: url( ../../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #logging #viewer #date-format a:hover
+{
+ color: #008;
+}
+
+#content #logging #viewer #date-format a.on
+{
+ background-image: url( ../../img/ico/ui-check-box.png );
+ color: #333;
+}
+
+#content #logging #viewer #refresh-toggle {
+ background-position: 0 50%;
+ padding-left: 21px;
+ width:45%;
+}
+
+#content #logging #viewer #refresh-toggle.active {
+ background-image: url( ../../img/ico/cross-button.png );
+}
+
+#content #logging #viewer #refresh-toggle.stopped {
+ background-image: url( ../../img/ico/arrow-circle.png ) ;
+}
+
+#content #logging #viewer table
+{
+ border-collapse: collapse;
+ width: 100%;
+}
+
+#content #logging #viewer th,
+#content #logging #viewer td a,
+#content #logging #viewer tbody .trace td
+{
+ padding: 3px 10px;
+}
+
+#content #logging #viewer td
+{
+ vertical-align: top;
+}
+
+#content #logging #viewer td a
+{
+ display: block;
+}
+
+#content #logging #viewer thead th
+{
+ font-weight: bold;
+ text-align: left;
+}
+
+#content #logging #viewer tbody td,
+#content #logging #viewer tfoot td
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+#content #logging #viewer thead th.message
+{
+ width:100%;
+}
+
+#content #logging #viewer tbody td.span a
+{
+ padding-left: 0;
+ padding-right: 0;
+}
+
+#content #logging #viewer tbody span
+{
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#content #logging #viewer tbody .level-info .level span { background-color: #ebf5eb; }
+#content #logging #viewer tbody .level-warning span { background-color: #FFD930; }
+#content #logging #viewer tbody .level-severe span { background-color: #c43c35; color: #fff; }
+
+#content #logging #viewer tbody .level-debug span { background-color: #ebf5eb; }
+#content #logging #viewer tbody .level-warn span { background-color: #FFD930; }
+#content #logging #viewer tbody .level-error span { background-color: #FF6130; }
+#content #logging #viewer tbody .level-fatal span { background-color: #c43c35; }
+
+#content #logging #viewer tbody .has-trace a
+{
+ cursor: pointer;
+}
+
+#content #logging #viewer tbody .has-trace a:hover
+{
+ color: #008;
+}
+
+#content #logging #viewer tbody .has-trace .message a
+{
+ background-image: url( ../../img/ico/information.png );
+ background-position: 100% 50%;
+ display: block;
+ padding-right: 21px;
+}
+
+#content #logging #viewer tbody .has-trace.open .message a
+{
+ background-image: url( ../../img/ico/information-white.png );
+}
+
+#content #logging #viewer tbody .trace td
+{
+ border-top: 0;
+ color: #c0c0c0;
+}
+
+#content #logging #viewer tfoot td
+{
+ color: #4D4D4D;
+}
+
+#content #logging .jstree > li
+{
+ margin-left: 0;
+}
+
+#content #logging .jstree li
+{
+ position: relative;
+}
+
+#content #logging .jstree .level-finest { background-color: #d5e5fc; }
+#content #logging .jstree .level-fine { background-color: #d5fafc; }
+#content #logging .jstree .level-config { background-color: #e6fded; }
+#content #logging .jstree .level-info { background-color: #fafcd7; }
+#content #logging .jstree .level-warning { background-color: #fcecd5; }
+#content #logging .jstree .level-severe { background-color: #fcdcda; }
+#content #logging .jstree .level-off { background-color: #ffffff; }
+
+/* Log4j */
+#content #logging .jstree .level-all { background-color: #9EDAFF; }
+#content #logging .jstree .level-trace { background-color: #d5e5fc; }
+#content #logging .jstree .level-debug { background-color: #d5fafc; }
+#content #logging .jstree .level-warn { background-color: #e6fded; }
+#content #logging .jstree .level-error { background-color: #fcecd5; }
+#content #logging .jstree .level-fatal { background-color: #fcdcda; }
+
+
+#content #logging .jstree a
+{
+ height: 17px;
+ line-height: 17px;
+ padding: 0;
+ width: 90%;
+}
+
+#content #logging .jstree a:hover
+{
+ color: #008;
+}
+
+#content #logging .jstree a span.ns
+{
+ display: none;
+}
+
+#content #logging.ns .jstree a span.ns
+{
+ display: inline;
+}
+
+#content #logging .jstree a span.name
+{
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+}
+
+#content #logging .jstree a span.name em
+{
+ color: #f00;
+ font-style: normal;
+ text-transform: uppercase;
+}
+
+#content #logging .jstree a.trigger.set
+{
+ font-weight: bold;
+}
+
+#content #logging .jstree a:hover span.name
+{
+ background-image: url( ../../img/ico/pencil-small.png );
+}
+
+#content #logging .jstree .selector-holder
+{
+ position: absolute;
+ top: -2px;
+ z-index: 700;
+}
+
+#content #logging .jstree .selector-holder.open
+{
+ background-color: #fff;
+ margin-left: -19px;
+ z-index: 800;
+}
+
+#content #logging .jstree li .selector-holder { left: 440px; }
+#content #logging .jstree li li .selector-holder { left: 422px; }
+#content #logging .jstree li li li .selector-holder { left: 404px; }
+#content #logging .jstree li li li li .selector-holder { left: 386px; }
+#content #logging .jstree li li li li li .selector-holder { left: 368px; }
+#content #logging .jstree li li li li li li .selector-holder { left: 350px; }
+#content #logging .jstree li li li li li li li .selector-holder { left: 332px; }
+#content #logging .jstree li li li li li li li li .selector-holder { left: 314px; }
+
+#content #logging .jstree .selector
+{
+ border: 1px solid transparent;
+ position: relative;
+}
+
+#content #logging .jstree .open .selector
+{
+ border-color: #f0f0f0;
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+}
+
+#content #logging .jstree .selector a
+{
+ display: block;
+ padding: 2px;
+ width: auto;
+}
+
+#content #logging .jstree .open .selector .close
+{
+ background-image: url( ../../img/ico/cross-0.png );
+ background-position: 50% 50%;
+ display: block;
+ position: absolute;
+ right: -25px;
+ top: 0;
+ width: 20px;
+}
+
+#content #logging .jstree .open .selector .close:hover
+{
+ background-image: url( ../../img/ico/cross-1.png );
+}
+
+#content #logging .jstree .open .selector .close span
+{
+ display: none;
+}
+
+#content #logging .jstree .open .selector a.trigger
+{
+ display: none;
+}
+
+#content #logging .jstree .open .selector ul
+{
+ display: block;
+}
+
+#content #logging .jstree .selector ul li
+{
+ background: none;
+ margin-left: 0;
+}
+
+#content #logging .jstree .selector ul li a
+{
+ background-image: url( ../../img/ico/ui-radio-button-uncheck.png );
+ background-position: 2px 50%;
+ padding-left: 21px;
+}
+
+#content #logging .jstree .selector ul li a.level
+{
+ background-color: #f0f0f0;
+}
+
+#content #logging .jstree .selector ul li a:hover
+{
+ background-image: url( ../../img/ico/ui-radio-button.png );
+}
+
+#content #logging .jstree .selector li.unset
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+#content #logging .jstree .selector li.unset a
+{
+ background-image: url( ../../img/ico/cross-0.png );
+ background-position: 4px 50%;
+}
+
+#content #logging .jstree .selector li.unset a:hover
+{
+ background-image: url( ../../img/ico/cross-1.png );
+ color: #800;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/login.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/login.css
new file mode 100644
index 000000000..6d6c9083e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/login.css
@@ -0,0 +1,109 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #login
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+ vertical-align: center;
+ horiz-align: center;
+}
+
+#content #login h1,
+#content #login .h1 {
+ font-size: 2.5rem;
+}
+
+#content #login h2,
+#content #login .h2 {
+ font-size: 2rem;
+}
+
+#content #login p
+{
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+#content #login a
+{
+ color: #0000bf;
+ cursor: pointer;
+}
+
+#content #login .login-error
+{
+ font-size: 1rem;
+ color: red;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+#content #login button {
+ border-radius: 0;
+}
+
+#content #login button:focus {
+ outline: 1px dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+}
+
+#content #login .btn {
+ display: inline-block;
+ font-weight: 400;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ border: 1px solid transparent;
+ padding: 0.375rem 0.75rem;
+ font-size: 1rem;
+ line-height: 1.5;
+ border-radius: 0.25rem;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+#content #login .form-inline .form-group {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -ms-flex-align: center;
+ align-items: center;
+ margin-bottom: 0;
+}
+
+#content #login .form-control {
+ display: block;
+ width: 80%;
+ padding: 0.375rem 0.75rem;
+ font-size: 1rem;
+ line-height: 1.5;
+ color: #495057;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/menu.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/menu.css
new file mode 100644
index 000000000..4a24399bf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/menu.css
@@ -0,0 +1,330 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#menu-wrapper
+{
+ position: fixed;
+ top: 120px;
+ width: 150px;
+}
+
+.scroll #menu-wrapper
+{
+ position: absolute;
+ top: 90px;
+}
+
+.has-environment #menu-wrapper
+{
+ top: 160px;
+}
+
+#menu-wrapper a
+{
+ display: block;
+ padding: 4px 2px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+#core-selector,#collection-selector
+{
+ margin-top: 20px;
+ padding-right: 10px;
+}
+
+#core-selector a,
+#collection-selector a
+{
+ padding: 0;
+ padding-left: 8px;
+}
+
+#core-selector select,
+#collection-selector select
+{
+ width: 100%;
+}
+
+#core-selector #has-no-cores a,
+#collection-selector #has-no-collections a
+{
+ background-image: url( ../../img/ico/database--plus.png );
+}
+
+#core-selector #has-no-cores span,
+#collection-selector #has-no-collections span
+{
+ color: #8D8D8D;
+ display: block;
+}
+
+#menu-wrapper .active p
+{
+ background-color: #fafafa;
+ border-color: #c0c0c0;
+}
+
+#menu-wrapper p a,
+#menu a
+{
+ background-position: 5px 50%;
+ padding-left: 26px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+#menu-wrapper p a:hover
+{
+ background-color: #f0f0f0;
+}
+
+#menu-wrapper .active p a
+{
+ background-color: #c0c0c0;
+ font-weight: bold;
+}
+
+#menu p.loader
+{
+ background-position: 5px 50%;
+ color: #c0c0c0;
+ margin-top: 5px;
+ padding-left: 26px;
+}
+
+#menu p a small
+{
+ color: #b5b5b5;
+ font-weight: normal;
+}
+
+#menu p a small span.txt
+{
+}
+
+#menu p a small:hover span.txt
+{
+ display: inline;
+}
+
+#menu .busy
+{
+ border-right-color: #f6f5d9;
+}
+
+#menu .busy p a
+{
+ background-color: #f6f5d9;
+ background-image: url( ../../img/ico/status-away.png );
+}
+
+#menu .offline
+{
+ border-right-color: #eccfcf;
+}
+
+#menu .offline p a
+{
+ background-color: #eccfcf;
+ background-image: url( ../../img/ico/status-busy.png );
+}
+
+#menu .online
+{
+ border-right-color: #cfecd3;
+}
+
+#menu .online p a
+{
+ background-color: #cfecd3;
+ background-image: url( ../../img/ico/status.png );
+}
+
+#menu .ping small
+{
+ color: #000
+}
+
+#menu li
+{
+ border-bottom: 1px solid #f0f0f0;
+}
+
+#menu li:last-child
+{
+ border-bottom: 0;
+}
+
+#menu li.optional
+{
+}
+
+.sub-menu p
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+.sub-menu li:first-child p
+{
+ border-top: 0;
+}
+
+.sub-menu p a
+{
+ background-image: url( ../../img/ico/status-offline.png );
+}
+
+.sub-menu .active p a
+{
+ background-image: url( ../../img/ico/box.png );
+}
+
+.sub-menu ul,
+#menu ul
+{
+ padding-top: 5px;
+ padding-bottom: 10px;
+}
+
+.sub-menu .active ul,
+#menu .active ul
+{
+ display: block;
+}
+
+#menu ul li
+{
+ border-bottom: 0;
+}
+
+#core-menu ul li a,
+#collection-menu ul li a,
+#menu ul li a
+{
+ background-position: 7px 50%;
+ border-bottom: 1px solid #f0f0f0;
+ margin-left: 15px;
+ padding-left: 26px;
+}
+
+.sub-menu ul li:last-child a,
+#menu ul li:last-child a
+{
+ border-bottom: 0;
+}
+
+.sub-menu ul li a:hover,
+#menu ul li a:hover
+{
+ background-color: #f0f0f0;
+ color: #333;
+}
+
+.sub-menu ul li.active a,
+#menu ul li.active a
+{
+ background-color: #d0d0d0;
+ border-color: #d0d0d0;
+ color: #FFF;
+}
+
+#menu #index.global p a { background-image: url( ../../img/ico/dashboard.png ); }
+
+#menu #login.global p a { background-image: url( ../../img/ico/users.png ); }
+
+#menu #logging.global p a { background-image: url( ../../img/ico/inbox-document-text.png ); }
+#menu #logging.global .level a { background-image: url( ../../img/ico/gear.png ); }
+
+#menu #java-properties.global p a { background-image: url( ../../img/ico/jar.png ); }
+
+#menu #threads.global p a { background-image: url( ../../img/ico/ui-accordion.png ); }
+
+#menu #collections.global p a { background-image: url( ../../img/ico/documents-stack.png ); }
+#menu #cores.global p a { background-image: url( ../../img/ico/databases.png ); }
+#menu #cluster-suggestions.global p a { background-image: url( ../../img/ico/idea.png ); }
+
+#menu #cloud.global p a { background-image: url( ../../img/ico/network-cloud.png ); }
+#menu #cloud.global .tree a { background-image: url( ../../img/ico/folder-tree.png ); }
+#menu #cloud.global .nodes a { background-image: url( ../../img/solr-ico.png ); }
+#menu #cloud.global .zkstatus a { background-image: url( ../../img/ico/node-master.png ); }
+#menu #cloud.global .graph a { background-image: url( ../../img/ico/molecule.png ); }
+
+.sub-menu .ping.error a
+{
+
+ background-color: #ffcccc;
+ background-image: url( ../../img/ico/system-monitor--exclamation.png );
+ border-color: #ffcccc;
+ cursor: help;
+}
+
+.sub-menu .overview a { background-image: url( ../../img/ico/home.png ); }
+.sub-menu .query a { background-image: url( ../../img/ico/magnifier.png ); }
+.sub-menu .stream a { background-image: url( ../../img/ico/node.png ); }
+.sub-menu .analysis a { background-image: url( ../../img/ico/funnel.png ); }
+.sub-menu .documents a { background-image: url( ../../img/ico/documents-stack.png ); }
+.sub-menu .files a { background-image: url( ../../img/ico/folder.png ); }
+.sub-menu .schema a { background-image: url( ../../img/ico/book-open-text.png ); }
+.sub-menu .replication a { background-image: url( ../../img/ico/node.png ); }
+.sub-menu .distribution a { background-image: url( ../../img/ico/node-select.png ); }
+.sub-menu .ping a { background-image: url( ../../img/ico/system-monitor.png ); }
+.sub-menu .logging a { background-image: url( ../../img/ico/inbox-document-text.png ); }
+.sub-menu .plugins a { background-image: url( ../../img/ico/block.png ); }
+.sub-menu .dataimport a { background-image: url( ../../img/ico/document-import.png ); }
+.sub-menu .segments a { background-image: url( ../../img/ico/construction.png ); }
+
+
+#content #navigation
+{
+ border-right: 1px solid #e0e0e0;
+}
+
+#content #navigation a
+{
+ display: block;
+ padding: 4px 2px;
+}
+
+#content #navigation .current
+{
+ border-color: #e0e0e0;
+}
+
+#content #navigation a
+{
+ background-position: 5px 50%;
+ padding-left: 26px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#content #navigation a:hover
+{
+ background-color: #f0f0f0;
+}
+
+#content #navigation .current a
+{
+ background-color: #e0e0e0;
+ font-weight: bold;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/plugins.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/plugins.css
new file mode 100644
index 000000000..e4398bda2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/plugins.css
@@ -0,0 +1,220 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #plugins #navigation
+{
+ width: 20%;
+}
+
+#content #plugins #navigation .cache a { background-image: url( ../../img/ico/disk-black.png ); }
+#content #plugins #navigation .core a { background-image: url( ../../img/ico/wooden-box.png ); }
+#content #plugins #navigation .other a { background-image: url( ../../img/ico/zone.png ); }
+#content #plugins #navigation .highlighting a { background-image: url( ../../img/ico/highlighter-text.png ); }
+#content #plugins #navigation .updatehandler a{ background-image: url( ../../img/ico/arrow-circle.png ); }
+#content #plugins #navigation .queryhandler a { background-image: url( ../../img/ico/magnifier.png ); }
+#content #plugins #navigation .queryparser a { background-image: url( ../../img/ico/asterisk.png ); }
+
+#content #plugins #navigation .PLUGINCHANGES { margin-top: 20px; }
+#content #plugins #navigation .PLUGINCHANGES a { background-image: url( ../../img/ico/eye.png ); }
+#content #plugins #navigation .RELOAD a { background-image: url( ../../img/ico/arrow-circle.png ); }
+#content #plugins #navigation .NOTE { margin-top: 20px; }
+#content #plugins #navigation .NOTE p { color: #4D4D4D; font-style: italic; }
+
+
+#content #plugins #navigation a
+{
+ position: relative;
+}
+
+#content #plugins #navigation a span
+{
+ background-color: #bba500;
+ border-radius: 5px;
+ color: #fff;
+ font-size: 10px;
+ font-weight: normal;
+ line-height: 1.4em;
+ padding-left: 4px;
+ padding-right: 4px;
+ position: absolute;
+ right: 5px;
+ top: 7px;
+}
+
+#content #plugins #frame
+{
+ float: right;
+ width: 78%;
+}
+
+#content #plugins #frame .entry
+{
+ margin-bottom: 10px;
+}
+
+#content #plugins #frame .entry:last-child
+{
+ margin-bottom: 0;
+}
+
+#content #plugins #frame .entry a
+{
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 0 50%;
+ display: block;
+ font-weight: bold;
+ padding-left: 21px;
+}
+
+#content #plugins #frame .entry.changed a span
+{
+ color: #bba500;
+}
+
+#content #plugins #frame .entry.expanded a
+{
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #plugins #frame .entry.expanded ul
+{
+ display: block;
+}
+
+#content #plugins #frame .entry ul
+{
+ border-left: 9px solid #f0f3ff;
+ margin-left: 3px;
+ padding-top: 5px;
+ padding-left: 10px;
+}
+
+#content #plugins #frame .entry li
+{
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+#content #plugins #frame .entry li.stats
+{
+ border-top: 1px solid #c0c0c0;
+ margin-top: 5px;
+ padding-top: 5px;
+}
+
+#content #plugins #frame .entry li.odd
+{
+ background-color: #f8f8f8;
+}
+
+#content #plugins #frame .entry dt,
+#content #plugins #frame .entry .stats span
+{
+ float: left;
+ width: 9%;
+}
+
+#content #plugins #frame .entry dd,
+#content #plugins #frame .entry .stats ul
+{
+ float: right;
+ width: 90%;
+}
+
+#content #plugins #frame .entry .stats ul
+{
+ border-left: 0;
+ margin: 0;
+ padding: 0;
+}
+
+#content #plugins #frame .entry .stats dt
+{
+ width: 40%;
+}
+
+#content #plugins #frame .entry .stats dd
+{
+ width: 59%;
+}
+
+#content #plugins #frame .entry.expanded a.linker {
+ background-image: none;
+ background-position: 0 0;
+ display: inline;
+ font-weight: normal;
+ padding:0px;
+}
+
+#content #plugins #frame .entry.expanded a.linker:hover {
+ background-color:#F0F3FF;
+}
+
+#content #plugins .active a
+{
+ background-color: #d0d0d0;
+ border-color: #d0d0d0;
+}
+
+#recording #blockUI
+{
+ position: absolute;
+ left:0;
+ top:0;
+ width: 100%;
+ height: 100%;
+ background-color: #000;
+ opacity: 0.6;
+ z-index:1000;
+ padding:0;
+}
+
+#recording .wrapper
+{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ padding: 30px;
+ width: 415px;
+ height: 100px;
+ border: 2px solid black;
+ background-color: #FFF;
+ opacity: 1;
+ z-index: 2000;
+ transform: translate(-50%, -50%);
+}
+
+#recording p
+{
+ background-position: 0 50%;
+ float: left;
+ padding-left: 21px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+}
+
+#recording button
+{
+ float: right;
+}
+
+#recording button span
+{
+ background-image: url( ../../img/ico/new-text.png );
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/query.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/query.css
new file mode 100644
index 000000000..be264bf9b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/query.css
@@ -0,0 +1,162 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #query
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 22% 0;
+ background-repeat: repeat-y;
+}
+
+#content #query #form
+{
+ float: left;
+ width: 21%;
+}
+
+#content #query #form label
+{
+ cursor: pointer;
+ display: block;
+ margin-top: 5px;
+}
+
+#content #query #form input,
+#content #query #form select,
+#content #query #form textarea
+{
+ margin-bottom: 2px;
+ width: 100%;
+}
+
+#content #query #form input,
+#content #query #form textarea
+{
+ width: 98%;
+}
+
+#content #query #form .multiple input
+{
+ float: left;
+ width: 80%
+}
+
+#content #query #form .multiple .buttons
+{
+ float: right;
+ width: 16%;
+}
+
+
+#content #query #form .multiple a
+{
+ background-position: 50% 50%;
+ display: block;
+ height: 25px;
+ width: 49%;
+}
+
+#content #query #form .multiple a.add
+{
+ background-image: url( ../../img/ico/plus-button.png );
+ float: right;
+}
+
+#content #query #form .multiple a.rem
+{
+ background-image: url( ../../img/ico/minus-button.png );
+ float: left;
+}
+
+#content #query #form #start
+{
+ float: left;
+ width: 45%;
+}
+
+#content #query #form #rows
+{
+ float: right;
+ width: 45%;
+}
+
+#content #query #form .checkbox input
+{
+ margin-bottom: 0;
+ width: auto;
+}
+
+#content #query #form fieldset,
+#content #query #form .optional.expanded
+{
+ border: 1px solid #fff;
+ border-top: 1px solid #c0c0c0;
+ margin-bottom: 5px;
+}
+
+#content #query #form fieldset.common
+{
+ margin-top: 10px;
+}
+
+#content #query #form fieldset legend,
+#content #query #form .optional.expanded legend
+{
+ display: block;
+ margin-left: 10px;
+ padding: 0px 5px;
+}
+
+#content #query #form fieldset legend label
+{
+ margin-top: 0;
+}
+
+#content #query #form fieldset .fieldset
+{
+ border-bottom: 1px solid #f0f0f0;
+ margin-bottom: 5px;
+ padding-bottom: 10px;
+}
+
+#content #query #form .optional
+{
+ border: 0;
+}
+
+#content #query #form .optional legend
+{
+ margin-left: 0;
+ padding-left: 0;
+}
+
+#content #query #form .optional.expanded .fieldset
+{
+ display: block;
+}
+
+#content #query #result
+{
+ float: right;
+ width: 77%;
+}
+
+#content #query #result #response
+{
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/replication.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/replication.css
new file mode 100644
index 000000000..4eb608878
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/replication.css
@@ -0,0 +1,500 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #replication
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 21% 0;
+ background-repeat: repeat-y;
+}
+
+#content #replication #frame
+{
+ float: right;
+ width: 78%;
+}
+
+#content #replication #navigation
+{
+ border-right: 0;
+ float: left;
+ width: 20%;
+}
+
+#content #replication #error
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 50%;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content #replication .block
+{
+ border-bottom: 1px solid #c0c0c0;
+ margin-bottom: 20px;
+ padding-bottom: 20px;
+}
+
+#content #replication .block.last
+{
+ border-bottom: 0;
+}
+
+#content #replication .masterOnly,
+#content #replication .slaveOnly
+{
+}
+
+#content #replication.master .masterOnly
+{
+ display: block;
+}
+
+#content #replication.slave .slaveOnly
+{
+ display: block;
+}
+
+#content #replication .replicating
+{
+}
+
+#content #replication.replicating .replicating
+{
+ display: block;
+}
+
+#content #replication #progress
+{
+ padding-bottom: 80px;
+ position: relative;
+}
+
+#content #replication #progress .info
+{
+ padding: 5px;
+}
+
+#content #replication #progress #start
+{
+ margin-left: 100px;
+ border-left: 1px solid #c0c0c0;
+}
+
+#content #replication #progress #bar
+{
+ background-color: #f0f0f0;
+ margin-left: 100px;
+ margin-right: 100px;
+ position: relative;
+}
+
+#content #replication #progress #bar #bar-info,
+#content #replication #progress #bar #eta
+{
+ position: absolute;
+ right: -100px;
+ width: 100px;
+}
+
+#content #replication #progress #bar #bar-info
+{
+ border-left: 1px solid #f0f0f0;
+ margin-top: 30px;
+}
+
+#content #replication #progress #eta .info
+{
+ color: #4D4D4D;
+ height: 30px;
+ line-height: 30px;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+#content #replication #progress #speed
+{
+ color: #4D4D4D;
+ position: absolute;
+ right: 100px;
+ top: 0;
+}
+
+#content #replication #progress #bar #done
+{
+ background-color: #4D4D4D;
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ height: 30px;
+ position: relative;
+}
+
+#content #replication #progress #bar #done .percent
+{
+ font-weight: bold;
+ height: 30px;
+ line-height: 30px;
+ padding-left: 5px;
+ padding-right: 5px;
+ position: absolute;
+ right: 0;
+ text-align: right;
+}
+
+#content #replication #progress #bar #done #done-info
+{
+ border-right: 1px solid #c0c0c0;
+ position: absolute;
+ right: 0;
+ margin-top: 30px;
+ text-align: right;
+ width: 100px;
+}
+
+#content #replication #progress #bar #done #done-info .percent
+{
+ font-weight: bold;
+}
+
+#content #replication .block .label,
+#content #replication #current-file .file,
+#content #replication #current-file .progress,
+#content #replication #iterations .iterations
+{
+ float: left;
+}
+
+#content #replication .block .label
+{
+ width: 100px;
+}
+
+#content #replication .block .label span
+{
+ display: block;
+ padding-left: 21px;
+}
+
+#content #replication #current-file
+{
+ border-top: 1px solid #f0f0f0;
+ margin-top: 10px;
+ padding-top: 10px;
+}
+
+#content #replication #current-file .progress
+{
+ color: #4D4D4D;
+ margin-left: 20px;
+}
+
+#content #replication #iterations .label span
+{
+ background-image: url( ../../img/ico/node-design.png );
+}
+
+#content #replication #iterations .iterations li
+{
+ background-position: 100% 50%;
+ padding-right: 21px;
+}
+
+#content #replication #iterations .iterations.expanded li
+{
+ display: block;
+}
+
+#content #replication #iterations .iterations .latest
+{
+ display: block;
+}
+
+#content #replication #iterations .iterations .replicated
+{
+ color: #80c480;
+}
+
+#content #replication #iterations .iterations ul:hover .replicated,
+#content #replication #iterations .iterations .replicated.latest
+{
+ color: #080;
+}
+
+#content #replication #iterations .iterations .replicated.latest
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #replication #iterations .iterations .failed
+{
+ color: #c48080;
+}
+
+#content #replication #iterations .iterations ul:hover .failed,
+#content #replication #iterations .iterations .failed.latest
+{
+ color: #800;
+}
+
+#content #replication #iterations .iterations .failed.latest
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #replication #iterations .iterations a
+{
+ border-top: 1px solid #f0f0f0;
+ margin-top: 2px;
+ padding-top: 2px;
+}
+
+#content #replication #iterations .iterations a span
+{
+ background-position: 0 50%;
+ color: #4D4D4D;
+ padding-left: 21px;
+}
+
+#content #replication #iterations .iterations a span.expand
+{
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ display: block;
+}
+
+#content #replication #iterations .iterations a span.collapse
+{
+ background-image: url( ../../img/ico/chevron-small.png );
+ display: block;
+}
+
+#content #replication #details table
+{
+ margin-left: 20px;
+ border-collapse: collapse;
+}
+
+#content #replication #details table th
+{
+ text-align: left;
+}
+
+#content #replication.slave #details table .slaveOnly
+{
+ display: table-row;
+}
+
+#content #replication #details table thead th
+{
+ color: #4D4D4D;
+}
+
+#content #replication #details table thead th,
+#content #replication #details table tbody td
+{
+ padding-right: 20px;
+}
+
+#content #replication #details table thead td,
+#content #replication #details table thead th,
+#content #replication #details table tbody th,
+#content #replication #details table tbody td div
+{
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+#content #replication #details table tbody td,
+#content #replication #details table tbody th
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+#content #replication #details table thead td
+{
+ width: 100px;
+}
+
+#content #replication #details table thead td span
+{
+ background-image: url( ../../img/ico/clipboard-list.png );
+ background-position: 0 50%;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #replication #details table tbody th
+{
+ padding-right: 10px;
+ text-align: right;
+ white-space: nowrap;
+}
+
+#content #replication #details table tbody .size
+{
+ text-align: right;
+ white-space: nowrap;
+}
+
+#content #replication #details table tbody .generation div
+{
+ text-align: center;
+}
+
+#content #replication #details table tbody .diff div
+{
+ background-color: #fcfcc9;
+ padding-left: 1px;
+ padding-right: 1px;
+}
+
+#content #replication .settings .label span
+{
+ background-image: url( ../../img/ico/hammer-screwdriver.png );
+}
+
+#content #replication .settings ul,
+#content #replication .settings dl dt,
+#content #replication .settings dl dd
+{
+ float: left;
+}
+
+#content #replication .settings ul li
+{
+ border-top: 1px solid #f0f0f0;
+ padding-top: 3px;
+ padding-top: 3px;
+}
+
+#content #replication .settings ul li:first-child
+{
+ border-top: 0;
+ padding-top: 0;
+}
+
+#content #replication .settings dl dt
+{
+ clear: left;
+ margin-right: 5px;
+ width: 120px;
+}
+
+#content #replication .settings dl .ico
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #replication .settings dl .ico.ico-0
+{
+ background-image: url( ../../img/ico/slash.png );
+}
+
+#content #replication .settings dl .ico.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #replication .timer
+{
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ margin-bottom: 20px;
+ padding: 10px;
+}
+
+#content #replication .timer p,
+#content #replication .timer small
+{
+ padding-left: 21px;
+}
+
+#content #replication .timer p
+{
+ background-image: url( ../../img/ico/clock-select-remain.png );
+ background-position: 0 50%;
+}
+
+#content #replication .timer p .approx
+{
+ color: #4D4D4D;
+ margin-right: 1px;
+}
+
+#content #replication .timer p .tick
+{
+ font-weight: bold;
+}
+
+#content #replication .timer small
+{
+ color: #4D4D4D;
+}
+
+#content #replication #navigation button
+{
+ display: block;
+ margin-bottom: 10px;
+}
+
+#content #replication #navigation button.optional
+{
+}
+
+#content #replication #navigation .replicate-now span
+{
+ background-image: url( ../../img/ico/document-convert.png );
+}
+
+#content #replication #navigation .abort-replication span
+{
+ background-image: url( ../../img/ico/hand.png );
+}
+
+#content #replication #navigation .disable-polling span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #replication #navigation .enable-polling span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #replication #navigation .disable-replication span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #replication #navigation .enable-replication span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #replication #navigation .refresh-status span
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/schema.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/schema.css
new file mode 100644
index 000000000..05d947890
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/schema.css
@@ -0,0 +1,727 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #schema .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #schema.loaded
+{
+ background-image: url( ../../img/div.gif );
+ background-position: 21% 0;
+ background-repeat: repeat-y;
+}
+
+#content #schema #data
+{
+ float: right;
+ width: 78%;
+}
+
+#content #schema #related
+{
+ float: left;
+ width: 20%;
+}
+
+#content #schema #related select
+{
+ width: 100%;
+}
+
+#content #schema #related select optgroup
+{
+ font-style: normal;
+ padding: 5px;
+}
+
+#content #schema #related select option
+{
+ padding-left: 10px;
+}
+
+#content #schema #related #f-df-t
+{
+ border-bottom: 1px solid #f0f0f0;
+ padding-bottom: 15px;
+}
+
+#content #schema #related .ukf-dsf dt
+{
+}
+
+#content #schema #related dl
+{
+ margin-top: 15px;
+}
+
+#content #schema #related dl dt,
+#content #schema #related dl dd a
+{
+ color: #4D4D4D;
+}
+
+#content #schema #related dl dt
+{
+ font-weight: bold;
+ margin-top: 5px;
+}
+
+#content #schema #related dl dd a
+{
+ display: block;
+ padding-left: 10px;
+}
+
+#content #schema #related dl dd a:hover
+{
+ background-color: #f8f8f8;
+}
+
+#content #schema #related .field .field,
+#content #schema #related .field .field a,
+#content #schema #related .dynamic-field .dynamic-field,
+#content #schema #related .dynamic-field .dynamic-field a,
+#content #schema #related .type .type,
+#content #schema #related .type .type a,
+#content #schema #related .active,
+#content #schema #related .active a
+{
+ color: #333;
+}
+
+#content #schema #related .copyfield,
+#content #schema #related .copyfield a
+{
+ color: #666;
+}
+
+#content #schema #data
+{
+}
+
+#content #schema #data #index dt
+{
+ float: left;
+ margin-right: 5px;
+ width: 150px;
+}
+
+#content #schema #data #field .field-options
+{
+ margin-bottom: 10px;
+}
+
+#content #schema #data #field .field-options .head h2
+{
+ padding-left: 5px;
+}
+
+#content #schema #data #field .partial
+{
+}
+
+#content #schema #data #field .partial p
+{
+ background-image: url( ../../img/ico/exclamation-button.png );
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #schema #data #field .field-options .options dt,
+#content #schema #data #field .field-options .options dd
+{
+ float: left;
+}
+
+#content #schema #data #field .field-options .options dt
+{
+ clear: left;
+ margin-right: 5px;
+ width: 100px;
+}
+
+#content #schema #data #field .field-options .flags
+{
+ margin-top: 10px;
+ margin-bottom: 20px;
+}
+
+#content #schema #data #field .field-options .flags thead td
+{
+ color: #4D4D4D;
+ padding-right: 5px;
+ width: 100px;
+}
+
+#content #schema #data #field .field-options .flags tbody td,
+#content #schema #data #field .field-options .flags th
+{
+ padding: 2px 5px;
+}
+
+#content #schema #data #field .field-options .flags thead td,
+#content #schema #data #field .field-options .flags tbody th
+{
+ padding-left: 0;
+}
+
+#content #schema #data #field .field-options .flags thead th,
+#content #schema #data #field .field-options .flags tbody td
+{
+ border-left: 1px solid #f0f0f0;
+}
+
+#content #schema #data #field .field-options .flags tbody th,
+#content #schema #data #field .field-options .flags tbody td
+{
+ border-top: 1px solid #f0f0f0;
+}
+
+#content #schema #data #field .field-options .flags tbody .check
+{
+ background-color: #fafdfa;
+ background-image: url( ../../img/ico/tick.png );
+ background-position: 50% 50%;
+ text-align: center;
+}
+
+#content #schema #data #field .field-options .flags tbody .check span
+{
+}
+
+#content #schema #data #field .field-options .flags tbody .text
+{
+ color: #4D4D4D;
+}
+
+#content #schema #data #field .field-options .analyzer,
+#content #schema #data #field .field-options .analyzer li,
+#content #schema #data #field .field-options .analyzer ul,
+#content #schema #data #field .field-options .analyzer ul li
+{
+}
+
+#content #schema #data #field .field-options .analyzer p,
+#content #schema #data #field .field-options .analyzer dl
+{
+ float: left;
+}
+
+#content #schema #data #field .field-options .analyzer p
+{
+ margin-right: 5px;
+ text-align: right;
+ width: 125px;
+ white-space: pre;
+}
+
+#content #schema #data #field .field-options .analyzer p a
+{
+ cursor: auto;
+}
+
+#content #schema #data #field .field-options .analyzer p a.analysis
+{
+ cursor: pointer;
+ display: block;
+}
+
+#content #schema #data #field .field-options .analyzer p a.analysis span
+{
+ background-image: url( ../../img/ico/question-white.png );
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #schema #data #field .field-options .analyzer p a.analysis:hover span
+{
+ background-image: url( ../../img/ico/question.png );
+ color: #008;
+}
+
+#content #schema #data #field .field-options .analyzer a
+{
+ cursor: auto;
+}
+
+#content #schema #data #field .field-options .analyzer .toggle
+{
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ display: block;
+ padding-right: 21px;
+}
+
+#content #schema #data #field .field-options .analyzer .open .toggle
+{
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #schema #data #field .field-options .analyzer li
+{
+ border-top: 1px solid #f0f0f0;
+ margin-top: 10px;
+ padding-top: 10px;
+}
+
+#content #schema #data #field .field-options .analyzer ul
+{
+ clear: left;
+ margin-left: 55px;
+ padding-top: 5px;
+}
+
+#content #schema #data #field .field-options .analyzer .open ul
+{
+ display: block;
+}
+
+#content #schema #data #field .field-options .analyzer ul li
+{
+ border-top: 1px solid #f8f8f8;
+ margin-top: 5px;
+ padding-top: 5px;
+}
+
+#content #schema #data #field .field-options .analyzer ul p
+{
+ color: #4D4D4D;
+ margin-right: 5px;
+ text-align: right;
+ width: 70px;
+}
+
+#content #schema #data #field .field-options .analyzer ul dd
+{
+ margin-left: 20px;
+}
+
+#content #schema #data #field .field-options .analyzer ul dd
+{
+ background-image: url( ../../img/ico/document-list.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ padding-left: 21px;
+}
+
+#content #schema #data #field .field-options .analyzer ul dd.ico-0
+{
+ background-image: url( ../../img/ico/slash.png );
+}
+
+#content #schema #data #field .field-options .analyzer ul dd.ico-1
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #schema #data #field .head
+{
+ margin-bottom: 5px;
+}
+
+#content #schema #data #field .terminfo-holder
+{
+ border-top: 1px solid #c0c0c0;
+ padding-top: 10px;
+}
+
+#content #schema #data #field .terminfo-holder .trigger
+{
+ float: left;
+ width: 140px;
+}
+
+#content #schema #data #field .terminfo-holder .trigger button span
+{
+ background-image: url( ../../img/ico/information.png );
+}
+
+#content #schema #data #field .terminfo-holder .status
+{
+ border-left: 1px solid #f0f0f0;
+ float: left;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+#content #schema #data #field .terminfo-holder.disabled .trigger button span
+{
+ background-image: url( ../../img/ico/prohibition.png );
+}
+
+#content #schema #data #field .terminfo-holder.disabled .status
+{
+ display: block;
+}
+
+#content #schema #data #field .terminfo-holder .trigger .autoload
+{
+}
+
+#content #schema #data #field .terminfo-holder.loaded .trigger .autoload
+{
+ background-image: url( ../../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #8D8D8D;
+ display: block;
+ margin-top: 10px;
+ padding-left: 21px;
+}
+
+#content #schema #data #field .terminfo-holder .trigger .autoload:hover
+{
+ color: #008;
+}
+
+#content #schema #data #field .terminfo-holder .trigger .autoload.on
+{
+ background-image: url( ../../img/ico/ui-check-box.png );
+ color: #333;
+}
+
+#content #schema #data #field .topterms-holder,
+#content #schema #data #field .histogram-holder
+{
+ border-left: 1px solid #f0f0f0;
+ float: left;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+#content #schema #data #field .topterms-holder .head input
+{
+ height: 18px;
+ line-height: 16px;
+ text-align: right;
+ width: 30px;
+}
+
+#content #schema #data #field .topterms-holder .head .max-holder
+{
+ color: #4D4D4D;
+}
+
+#content #schema #data #field .topterms-holder .head .max-holder:hover .max
+{
+ color: #008;
+}
+
+#content #schema #data #field .topterms-holder .head #query_link
+{
+ background-image: url( ../../img/ico/question-white.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ padding-left: 21px;
+ margin-left: 5px;
+}
+
+#content #schema #data #field .topterms-holder .head #query_link:hover
+{
+ background-image: url( ../../img/ico/question.png );
+}
+
+
+#content #schema #data #field .topterms-holder .head #query_link span
+{
+ visibility: hidden;
+}
+
+#content #schema #data #field .topterms-holder .head #query_link:hover span
+{
+ visibility: visible;
+}
+
+#content #schema .topterms-holder li
+{
+ border-top: 1px solid #999;
+ margin-bottom: 5px;
+}
+
+/* possible overwrite with inline style */
+#content #schema .topterms-holder li p
+{
+ background-color: #999;
+ color: #fff;
+ float: left;
+}
+
+#content #schema .topterms-holder li p span
+{
+ display: block;
+ padding-right: 2px;
+ text-align: right;
+}
+
+/* possible overwrite with inline style */
+#content #schema .topterms-holder li ul
+{
+ margin-left: 30px;
+}
+
+#content #schema .topterms-holder li li
+{
+ border-top: 0;
+ margin-bottom: 0;
+ white-space: nowrap;
+}
+
+#content #schema .topterms-holder li li.odd
+{
+ background-color: #f0f0f0;
+}
+
+#content #schema .topterms-holder li li a
+{
+ display: block;
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+#content #schema .topterms-holder li li a:hover
+{
+ background-color: #c0c0c0;
+}
+
+#content #schema #data #field .histogram-holder ul
+{
+ margin-left: 25px;
+}
+
+#content #schema #data #field .histogram-holder li
+{
+ margin-bottom: 2px;
+ position: relative;
+ width: 150px;
+}
+
+#content #schema #data #field .histogram-holder li.odd
+{
+ background-color: #f0f0f0;
+}
+
+#content #schema #data #field .histogram-holder li dl,
+#content #schema #data #field .histogram-holder li dt
+{
+ padding-top: 1px;
+ padding-bottom: 1px;
+}
+
+#content #schema #data #field .histogram-holder li dl
+{
+ background-color: #c0c0c0;
+ min-width: 1px;
+}
+
+#content #schema #data #field .histogram-holder li dt
+{
+ color: #a0a0a0;
+ position: absolute;
+ overflow: hidden;
+ left: -25px;
+ top: 0px;
+}
+
+#content #schema #data #field .histogram-holder li dt span
+{
+ display: block;
+ padding-right: 4px;
+ text-align: right;
+}
+
+#content #schema #data #field .histogram-holder li dd
+{
+ clear: left;
+ float: left;
+ margin-left: 2px;
+ white-space: nowrap;
+}
+
+#content #schema #data #field .histogram-holder li:hover dl
+{
+ background-color: #b0b0b0;
+}
+
+#content #schema #data #field .histogram-holder li:hover dt
+{
+ color: #333;
+}
+
+#content #schema #actions {
+ margin-bottom: 20px;
+ min-height: 30px;
+}
+
+#content #schema .actions #addField span { background-image: url( ../../img/ico/document-list.png ); }
+#content #schema .actions #addDynamicField span { background-image: url( ../../img/ico/documents-stack.png ); }
+#content #schema .actions #addCopyField span { background-image: url( ../../img/ico/document-import.png ); }
+
+#content #schema .actions div.action
+{
+ width: 320px;
+ background-color: #fff;
+ border: 1px solid #f0f0f0;
+ box-shadow: 5px 5px 10px #c0c0c0;
+ -moz-box-shadow: 5px 5px 10px #c0c0c0;
+ -webkit-box-shadow: 5px 5px 10px #c0c0c0;
+ position: absolute;
+ left: 160px;
+ top: 50px;
+ padding: 10px;
+ z-index: 2;
+}
+
+#content #schema .actions p
+{
+ padding-bottom: 8px;
+}
+
+#content #schema .actions label
+{
+ float: left;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ text-align: right;
+ width: 25%;
+}
+
+#content #schema .actions input,
+#content #schema .actions select,
+#content #schema .actions .buttons,
+#content #schema .actions .note span
+{
+ float: right;
+ width: 71%;
+}
+
+#content #schema .actions label.checkbox {
+ margin-left: 27%;
+ text-align: left;
+ width: 73%;
+ padding: 0px;
+ margin-top: 0px;
+}
+#content #schema .actions .checkbox input {
+ float: none;
+ width: auto;
+}
+
+#content #schema .add_showhide {
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+}
+
+#content #schema .add_showhide.open {
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #schema label
+{
+ cursor: pointer;
+ display: block;
+ margin-top: 5px;
+ width: 100%;
+}
+
+#content #schema .checkbox
+{
+ margin-bottom: 0;
+ width: auto;
+}
+
+#content #schema .chosen-container {
+ margin-left: 6px;
+ width: 100%;
+}
+#content #schema .chosen-drop input,
+#content #schema .chosen-results {
+ width: 100% !important;
+}
+
+#content #schema button span
+{
+ background-image: url( ../../img/ico/cross.png );
+}
+#content #schema button.submit span
+{
+ background-image: url( ../../img/ico/tick.png );
+}
+
+#content #schema .error
+{
+ background-image: url( ../../img/ico/cross-button.png );
+ background-position: 22% 1px;
+ color: #c00;
+ font-weight: bold;
+ margin-bottom: 10px;
+}
+
+#content #schema #actions .error span
+{
+ float: right;
+ width: 71%;
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+#content #schema .delete-field button span {
+ background-image: url( ../../img/ico/cross.png );
+}
+
+#content #schema span.rem {
+ background-image: url( ../../img/ico/cross.png );
+ background-position: 100% 50%;
+ cursor: pointer;
+ padding-right: 21px;
+ right:10px;
+ float:right;
+}
+
+#content #schema .copyfield .updatable a {
+ float:left;
+ width:80%;
+}
+
+#content #schema dd.similarity.ng-binding::after {
+ content: attr(data-tip) ;
+
+ font-size: 12px;
+ position: relative;
+ white-space: nowrap;
+ bottom: 9999px;
+ left: 0;
+ background: lightyellow;
+ color: black;
+ padding: 4px 7px;
+ line-height: 24px;
+ height: 24px;
+ border: 1px solid darkgray;
+ opacity: 0;
+ transition:opacity 0.4s ease-out;
+}
+
+#content #schema dd.similarity.ng-binding:hover::after {
+ opacity: 90;
+ bottom: -20px;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/segments.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/segments.css
new file mode 100644
index 000000000..05f5f7bbd
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/segments.css
@@ -0,0 +1,172 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #segments .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #segments .reload
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+ background-position: 50% 50%;
+ display: block;
+ height: 30px;
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ width: 30px;
+}
+
+#content #segments .reload.loader
+{
+ padding-left: 0;
+}
+
+#content #segments .reload span
+{
+ display: none;
+}
+
+#content #segments #result
+{
+ width: 77%;
+}
+
+#content #segments #result #response
+{
+ margin-left: 25px;
+}
+
+#content #segments .segments-holder ul {
+ margin-left: 25px;
+}
+#content #segments .segments-holder li {
+ margin-bottom: 2px;
+ position: relative;
+ width: 100%;
+}
+
+#content #segments .segments-holder li .tooltip {
+ display: none;
+ background: #f0f0f0;
+ position: absolute;
+ z-index: 1000;
+ width:220px;
+ height:120px;
+ margin-left: 100%;
+ opacity: .8;
+ padding: 5px;
+ border: 1px solid;
+ border-radius: 5px;
+}
+
+#content #segments .segments-holder li .tooltip .label {
+ float: left;
+ width: 20%;
+ opacity: 1;
+}
+
+#content #segments .segments-holder li:hover .tooltip {
+ display:block;
+}
+
+#content #segments .segments-holder li dl,
+#content #segments .segments-holder li dt {
+ padding-bottom: 1px;
+ padding-top: 1px;
+}
+#content #segments .segments-holder li dl {
+ min-width: 1px;
+}
+#content #segments .segments-holder li dt {
+ color: #4D4D4D;
+ left: -45px;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+}
+#content #segments .segments-holder li dt div {
+ display: block;
+ padding-right: 4px;
+ text-align: right;
+}
+#content #segments .segments-holder li dd {
+ clear: left;
+ float: left;
+ margin-left: 2px;
+ white-space: nowrap;
+ width: 100%;
+}
+
+#content #segments .segments-holder li dd div.deleted {
+ background-color: #808080;
+ padding-left: 5px;
+}
+
+#content #segments .segments-holder li dd div.live {
+ background-color: #DDDDDD;
+ float: left;
+}
+
+#content #segments .segments-holder li dd div.start {
+ float: left;
+ width: 20%;
+}
+
+#content #segments .segments-holder li dd div.end {
+ text-align: right;
+}
+
+.merge-candidate {
+ background-color: #FFC9F9 !important;
+}
+
+#content #segments .segments-holder li dd div.w5 {
+ width: 20%;
+ float: left;
+}
+
+#content #segments #auto-refresh {
+ margin-top: 4px;
+ background-position: 50% 50%;
+ display: block;
+ height: 30px;
+ position: absolute;
+ right: 50px;
+ top: 10px;
+}
+
+#content #segments #auto-refresh a {
+ background-image: url( ../../img/ico/ui-check-box-uncheck.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #segments #auto-refresh a.on,
+#content #segments #auto-refresh a:hover {
+ color: #333;
+}
+
+#content #segments #auto-refresh a.on {
+ background-image: url( ../../img/ico/ui-check-box.png );
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/stream.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/stream.css
new file mode 100644
index 000000000..0ebb59243
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/stream.css
@@ -0,0 +1,233 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #stream
+{
+}
+
+#content #stream #form
+{
+ float: top;
+}
+
+#content #stream #form label
+{
+ cursor: pointer;
+ display: inline;
+ margin-top: 5px;
+}
+
+#content #stream #form input,
+#content #stream #form select,
+#content #stream #form textarea
+{
+ margin-bottom: 2px;
+ width: 100%;
+}
+
+#content #stream #form textarea
+{
+ height: 125px;
+}
+
+#content #stream #form #start
+{
+ float: left;
+ width: 45%;
+}
+
+#content #stream #form #rows
+{
+ float: right;
+ width: 45%;
+}
+
+#content #stream #form input[type=checkbox]
+{
+ margin-bottom: 0;
+ margin-left: 5px;
+ margin-right: 0px;
+ width: 10px;
+ height: 10px;
+ display: inline;
+}
+
+#content #stream #form fieldset
+{
+ border: 1px solid #fff;
+ border-top: 1px solid #c0c0c0;
+ margin-bottom: 5px;
+}
+
+#content #stream #form fieldset.common
+{
+ margin-top: 10px;
+}
+
+#content #stream #form fieldset legend
+{
+ display: block;
+ margin-left: 10px;
+ padding: 0px 5px;
+}
+
+#content #stream #form fieldset legend label
+{
+ margin-top: 0;
+}
+
+#content #stream #form button
+{
+ margin-right: 10px;
+}
+
+#content #stream #form fieldset .fieldset
+{
+ border-bottom: 1px solid #f0f0f0;
+ margin-bottom: 5px;
+ padding-bottom: 10px;
+}
+
+#content #stream #result
+{
+ float: bottom;
+}
+
+#content #stream #result #response
+{
+}
+
+/************************/
+
+#content #stream #result #explanation
+{
+ border-top: 1px solid #f0f0f0;
+ border-bottom: 1px solid #f0f0f0;
+ border-left: 1px solid #f0f0f0;
+ border-right: 1px solid #f0f0f0;
+}
+
+#content #stream #result #explanation .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #stream #result #explanation #error
+{
+ background-color: #f00;
+ background-image: url( ../../img/ico/construction.png );
+ background-position: 10px 12px;
+ color: #fff;
+ font-weight: bold;
+ margin-bottom: 20px;
+ padding: 10px;
+ padding-left: 35px;
+}
+
+#content #stream #result #explanation #error .msg
+{
+ font-style: italic;
+ font-weight: normal;
+ margin-top: 10px;
+}
+
+#content #stream #result #explanation .content
+{
+ padding-left: 0;
+ padding-right: 0;
+}
+
+#content #stream #result #explanation .content.show
+{
+ background-image: url( ../../img/div.gif );
+ background-repeat: repeat-y;
+ background-position: 31% 0;
+}
+
+#content #stream #result #explanation #legend
+{
+ border: 1px solid #f0f0f0;
+ padding: 10px;
+ /*position: absolute;
+ right: 0;
+ bottom: 0;*/
+}
+
+#content #stream #result #explanation #legend li
+{
+ padding-left: 15px;
+ position: relative;
+ -webkit-box-sizing: border-box;
+}
+
+#content #stream #result #explanation #legend li svg
+{
+ position: absolute;
+ left: 0;
+ top: 2px;
+}
+
+#content #stream #result #explanation #explanation-content
+{
+ min-height: 50px;
+ width: 100%
+}
+
+#content #stream #result #explanation #explanation-content .node circle
+{
+ color: #c48f00;
+ stroke: #c48f00;
+ fill: #c48f00;
+}
+
+#content #stream #result #explanation #explanation-content .link
+{
+ fill: none;
+ stroke: #e0e0e0;
+ stroke-width: 1.5px;
+}
+
+#content #stream #result #explanation #legend .datastore circle,
+#content #stream #result #explanation #explanation-content .node.datastore circle
+{
+ stroke: #3800c4;
+ fill: #3800c4;
+}
+
+#content #stream #result #explanation #legend .stream-source circle,
+#content #stream #result #explanation #explanation-content .node.stream-source circle
+{
+ stroke: #21a9ec;
+ fill: #21a9ec;
+}
+
+#content #stream #result #explanation #legend .stream-decorator circle,
+#content #stream #result #explanation #explanation-content .node.stream-decorator circle
+{
+ stroke: #cb21ec;
+ fill: #cb21ec;
+}
+
+#content #stream #result #explanation #legend .graph-source circle,
+#content #stream #result #explanation #explanation-content .node.graph-source circle
+{
+ stroke: #21eca9;
+ fill: #21eca9;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/suggestions.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/suggestions.css
new file mode 100644
index 000000000..6d9fa6599
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/suggestions.css
@@ -0,0 +1,64 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+#cluster-suggestions
+.s-container{
+ text-align:center;
+}
+#cluster-suggestions
+.s-box1{
+ background-image: url( ../../img/ico/run.png );
+ background-color: transparent;
+ background-repeat: no-repeat;
+ border: none;
+ cursor: pointer;
+ vertical-align: middle;
+ display:inline-block;
+ width:20px;
+}
+#cluster-suggestions
+.s-box2{
+ display:inline-block;
+}
+#cluster-suggestions
+.s-box3{
+ display:inline-block;
+}
+#cluster-suggestions
+.s-box4{
+ display:inline-block;
+}
+#s-table {
+ border-collapse: collapse;
+ width: 60%;
+}
+
+#s-table td, #customers th {
+ border: 1px solid #ddd;
+ padding: 8px;
+}
+
+#cluster-suggestions #s-table tr:nth-child(even){background-color: #f2f2f2;}
+
+#cluster-suggestions #s-table th {
+ padding-top: 12px;
+ padding-bottom: 12px;
+ text-align: left;
+ background-color: #4CAF50;
+ color: white;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/css/angular/threads.css b/solr-8.1.1/server/solr-webapp/webapp/css/angular/threads.css
new file mode 100644
index 000000000..a457c8679
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/css/angular/threads.css
@@ -0,0 +1,160 @@
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #threads .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #threads #thread-dump table
+{
+ border-collapse: collapse;
+ width: 100%;
+}
+
+#content #threads #thread-dump table .spacer,
+#content #threads #thread-dump tbody .state
+{
+ background-color: #fff;
+}
+
+#content #threads #thread-dump table th,
+#content #threads #thread-dump table td
+{
+ padding: 5px 3px;
+ vertical-align: top;
+}
+
+#content #threads #thread-dump thead th
+{
+ background-color: #c8c8c8;
+ font-weight: bold;
+ text-align: left;
+}
+
+#content #threads #thread-dump thead th.name
+{
+ width: 85%;
+}
+
+#content #threads #thread-dump thead th.time
+{
+ text-align: right;
+ width: 15%;
+}
+
+#content #threads #thread-dump tbody .odd
+{
+ background-color: #f0f0f0;
+}
+
+#content #threads #thread-dump tbody .RUNNABLE a
+{
+ background-image: url( ../../img/ico/tick-circle.png );
+}
+
+#content #threads #thread-dump tbody .WAITING a,
+#content #threads #thread-dump tbody .TIMED_WAITING a
+{
+ background-image: url( ../../img/ico/hourglass.png );
+}
+
+#content #threads #thread-dump tbody .WAITING.lock a,
+#content #threads #thread-dump tbody .TIMED_WAITING.lock a
+{
+ background-image: url( ../../img/ico/hourglass--exclamation.png );
+}
+
+#content #threads #thread-dump tbody .name a
+{
+ background-position: 0 50%;
+ cursor: auto;
+ display: block;
+ padding-left: 21px;
+}
+
+#content #threads #thread-dump tbody .stacktrace .name a
+{
+ cursor: pointer;
+}
+
+#content #threads #thread-dump tbody .stacktrace .name a span
+{
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ background-position: 100% 50%;
+ padding-right: 21px;
+}
+
+#content #threads #thread-dump tbody .stacktrace.open .name a span
+{
+ background-image: url( ../../img/ico/chevron-small.png );
+}
+
+#content #threads #thread-dump tbody .name p
+{
+ background-image: url( ../../img/ico/arrow-000-small.png );
+ background-position: 0 50%;
+ color: #4D4D4D;
+ font-size: 11px;
+ margin-left: 21px;
+ padding-left: 21px;
+}
+
+#content #threads #thread-dump tbody .name div
+{
+ border-top: 1px solid #c0c0c0;
+ margin-left: 21px;
+ margin-top: 5px;
+ padding-top: 5px;
+}
+
+#content #threads #thread-dump tbody .open .name div
+{
+ display: block;
+}
+
+#content #threads #thread-dump tbody .name ul
+{
+ list-style-type: disc;
+ margin-left: 0.7em;
+ padding-left: 0.7em;
+}
+
+#content #threads #thread-dump tbody .time
+{
+ text-align: right;
+}
+
+#content #threads .controls
+{
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+#content #threads .controls a
+{
+ background-image: url( ../../img/ico/chevron-small-expand.png );
+ padding-left: 21px;
+}
+
+#content #threads.expanded .controls a
+{
+ background-image: url( ../../img/ico/chevron-small.png );
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/favicon.ico b/solr-8.1.1/server/solr-webapp/webapp/favicon.ico
new file mode 100644
index 000000000..e93104ccf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/favicon.ico
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite-2x.png b/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite-2x.png
new file mode 100644
index 000000000..6b5054520
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite-2x.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite.png b/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite.png
new file mode 100644
index 000000000..113dc9885
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/chosen-sprite.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/div.gif b/solr-8.1.1/server/solr-webapp/webapp/img/div.gif
new file mode 100644
index 000000000..963c9e97b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/div.gif
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/favicon.ico b/solr-8.1.1/server/solr-webapp/webapp/img/favicon.ico
new file mode 100644
index 000000000..e93104ccf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/favicon.ico
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/7z.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/7z.png
new file mode 100644
index 000000000..52f7d5d72
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/7z.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/README b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/README
new file mode 100644
index 000000000..f7a856071
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/README
@@ -0,0 +1,27 @@
+http://www.splitbrain.org/projects/file_icons
+
+Released to the Public Domain
+Free to use. Provided as is. No warranties.
+
+Note: The big majority of icons where created by the creators listed
+ below. Only a few ones where found on the net. They were too
+ widespread to determine the original author and thus were
+ considered public domain.
+ If you are the author of one of those icons just send a short
+ mail to either be included in the list below or have the icon
+ removed from the package.
+
+Creators:
+
+ Andreas Gohr <andi@splitbrain.org>
+ Michael Klier <chi@chimeric.de>
+ Andreas Barton <andreas.barton@web.de>
+ Hubert Chathi <hubert@uhoreg.ca>
+ Johan Koehne <johankohne@gmail.com>
+ Rudi von Staden <rudivs@iafrica.com>
+ Daniel Darvish <ddarvish@hibm.org>
+ Andy Pascall <apascall@engineering.ucsb.edu>
+ Seth <seth.holcomb@gmail.com>
+ David Carella <david.carella@gmail.com>
+ Tom N. Harris <telliamed@fastmail.us>
+ Brandon Carmon Colvin <b.carmon.colvin@gmail.com>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ai.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ai.png
new file mode 100644
index 000000000..a999762c8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ai.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/aiff.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/aiff.png
new file mode 100644
index 000000000..82d523fdb
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/aiff.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/asc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/asc.png
new file mode 100644
index 000000000..d9fa4a8aa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/asc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/audio.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/audio.png
new file mode 100644
index 000000000..98883256d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/audio.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bin.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bin.png
new file mode 100644
index 000000000..fbd174e2d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bin.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bz2.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bz2.png
new file mode 100644
index 000000000..d48cae038
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/bz2.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/c.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/c.png
new file mode 100644
index 000000000..efe18f439
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/c.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfc.png
new file mode 100644
index 000000000..09c149d64
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfm.png
new file mode 100644
index 000000000..d755f286f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cfm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/chm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/chm.png
new file mode 100644
index 000000000..53d48f3b5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/chm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/class.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/class.png
new file mode 100644
index 000000000..a39f70c16
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/class.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/conf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/conf.png
new file mode 100644
index 000000000..ddffe6fd1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/conf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cpp.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cpp.png
new file mode 100644
index 000000000..79464401b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cpp.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cs.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cs.png
new file mode 100644
index 000000000..d5db29ba5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/cs.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/css.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/css.png
new file mode 100644
index 000000000..04012041c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/css.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/csv.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/csv.png
new file mode 100644
index 000000000..3a8835360
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/csv.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/deb.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/deb.png
new file mode 100644
index 000000000..9229d8783
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/deb.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/divx.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/divx.png
new file mode 100644
index 000000000..98dab8f80
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/divx.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/doc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/doc.png
new file mode 100644
index 000000000..932567f8a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/doc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/dot.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/dot.png
new file mode 100644
index 000000000..9f2da1add
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/dot.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/eml.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/eml.png
new file mode 100644
index 000000000..02828e173
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/eml.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/enc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/enc.png
new file mode 100644
index 000000000..cb2d7d47e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/enc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/file.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/file.png
new file mode 100644
index 000000000..24d5f328c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/file.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gif.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gif.png
new file mode 100644
index 000000000..b4c07a912
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gif.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gz.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gz.png
new file mode 100644
index 000000000..2426bd169
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/gz.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/hlp.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/hlp.png
new file mode 100644
index 000000000..4417d8e2c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/hlp.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/htm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/htm.png
new file mode 100644
index 000000000..1a6812185
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/htm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/html.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/html.png
new file mode 100644
index 000000000..672cbce42
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/html.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/image.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/image.png
new file mode 100644
index 000000000..f83e2898d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/image.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/iso.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/iso.png
new file mode 100644
index 000000000..1b2ff19ca
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/iso.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jar.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jar.png
new file mode 100644
index 000000000..4db70a2c7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jar.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/java.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/java.png
new file mode 100644
index 000000000..7489b9721
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/java.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpeg.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpeg.png
new file mode 100644
index 000000000..aa4cc23a5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpeg.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpg.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpg.png
new file mode 100644
index 000000000..1fb6cc1fb
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/jpg.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/js.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/js.png
new file mode 100644
index 000000000..7db4de7e9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/js.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/lua.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/lua.png
new file mode 100644
index 000000000..7c07d023f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/lua.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/m.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/m.png
new file mode 100644
index 000000000..aa0cbae8b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/m.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mm.png
new file mode 100644
index 000000000..b737571c5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mov.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mov.png
new file mode 100644
index 000000000..7e7aa368f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mov.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mp3.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mp3.png
new file mode 100644
index 000000000..928705d7a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mp3.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mpg.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mpg.png
new file mode 100644
index 000000000..9a3f8ea51
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/mpg.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odc.png
new file mode 100644
index 000000000..47f65c84d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odf.png
new file mode 100644
index 000000000..a2fbc5195
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odg.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odg.png
new file mode 100644
index 000000000..434f18262
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odg.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odi.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odi.png
new file mode 100644
index 000000000..74f6303d3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odi.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odp.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odp.png
new file mode 100644
index 000000000..a5c77f845
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odp.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ods.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ods.png
new file mode 100644
index 000000000..2ab1273f0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ods.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odt.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odt.png
new file mode 100644
index 000000000..b0c21fc1f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/odt.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ogg.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ogg.png
new file mode 100644
index 000000000..62cea6aaa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ogg.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pdf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pdf.png
new file mode 100644
index 000000000..638066dea
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pdf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pgp.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pgp.png
new file mode 100644
index 000000000..e6b35f36e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pgp.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/php.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/php.png
new file mode 100644
index 000000000..44c0fe0a0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/php.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pl.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pl.png
new file mode 100644
index 000000000..ad2324e35
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/pl.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/png.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/png.png
new file mode 100644
index 000000000..f0b5b00ee
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/png.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ppt.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ppt.png
new file mode 100644
index 000000000..adaefc602
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ppt.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ps.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ps.png
new file mode 100644
index 000000000..487c3cb7c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ps.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/py.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/py.png
new file mode 100644
index 000000000..9e31edb55
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/py.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ram.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ram.png
new file mode 100644
index 000000000..1a54d7654
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/ram.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rar.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rar.png
new file mode 100644
index 000000000..a6af4d1ca
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rar.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rb.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rb.png
new file mode 100644
index 000000000..30670165f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rb.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rm.png
new file mode 100644
index 000000000..a2db68e32
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rpm.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rpm.png
new file mode 100644
index 000000000..22212eafa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rpm.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rtf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rtf.png
new file mode 100644
index 000000000..d8bada5fe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/rtf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sig.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sig.png
new file mode 100644
index 000000000..3d8b19d2b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sig.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sql.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sql.png
new file mode 100644
index 000000000..f60054a3a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sql.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/swf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/swf.png
new file mode 100644
index 000000000..0729ed020
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/swf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxc.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxc.png
new file mode 100644
index 000000000..419c183c1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxc.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxd.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxd.png
new file mode 100644
index 000000000..5801bb23a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxd.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxi.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxi.png
new file mode 100644
index 000000000..2a94290d7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxi.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxw.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxw.png
new file mode 100644
index 000000000..6da97beb3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/sxw.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tar.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tar.png
new file mode 100644
index 000000000..5a2f717fc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tar.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tex.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tex.png
new file mode 100644
index 000000000..e46a5166f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tex.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tgz.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tgz.png
new file mode 100644
index 000000000..141acf564
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/tgz.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/txt.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/txt.png
new file mode 100644
index 000000000..da20009c6
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/txt.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vcf.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vcf.png
new file mode 100644
index 000000000..195ab38bc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vcf.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/video.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/video.png
new file mode 100644
index 000000000..b89fc5299
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/video.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vsd.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vsd.png
new file mode 100644
index 000000000..d14b81d98
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/vsd.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wav.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wav.png
new file mode 100644
index 000000000..79e80760e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wav.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wma.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wma.png
new file mode 100644
index 000000000..6854de772
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wma.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wmv.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wmv.png
new file mode 100644
index 000000000..b26f45d5f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/wmv.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xls.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xls.png
new file mode 100644
index 000000000..e8cd58dc0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xls.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xml.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xml.png
new file mode 100644
index 000000000..eb4632397
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xml.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xpi.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xpi.png
new file mode 100644
index 000000000..5e537e237
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xpi.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xvid.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xvid.png
new file mode 100644
index 000000000..d8429dc1a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/xvid.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/zip.png b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/zip.png
new file mode 100644
index 000000000..999ffbe80
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/filetypes/zip.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-000-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-000-small.png
new file mode 100644
index 000000000..cfc2e2493
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-000-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-circle.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-circle.png
new file mode 100644
index 000000000..dda713275
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-circle.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-switch.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-switch.png
new file mode 100644
index 000000000..ab3dd3021
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/arrow-switch.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/asterisk.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/asterisk.png
new file mode 100644
index 000000000..c2fbed5a7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/asterisk.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/battery.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/battery.png
new file mode 100644
index 000000000..7a825b025
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/battery.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/block-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/block-small.png
new file mode 100644
index 000000000..7cc52813c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/block-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/block.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/block.png
new file mode 100644
index 000000000..ed7ec0e97
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/block.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/book-open-text.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/book-open-text.png
new file mode 100644
index 000000000..069fae7c9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/book-open-text.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/box.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/box.png
new file mode 100644
index 000000000..3ec0ceb13
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/box.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/bug.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/bug.png
new file mode 100644
index 000000000..242d5391c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/bug.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/chart.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chart.png
new file mode 100644
index 000000000..d3cb71d5c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chart.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small-expand.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small-expand.png
new file mode 100644
index 000000000..06a8eaca1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small-expand.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small.png
new file mode 100644
index 000000000..b54fd1c7c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/chevron-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-list.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-list.png
new file mode 100644
index 000000000..e98c56756
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-list.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste-document-text.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste-document-text.png
new file mode 100644
index 000000000..08647f1be
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste-document-text.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste.png
new file mode 100644
index 000000000..0cf888729
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clipboard-paste.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select-remain.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select-remain.png
new file mode 100644
index 000000000..8c665b812
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select-remain.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select.png
new file mode 100644
index 000000000..8c567916c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/clock-select.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/construction.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/construction.png
new file mode 100644
index 000000000..8347aa896
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/construction.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-0.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-0.png
new file mode 100644
index 000000000..04fef989e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-0.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-1.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-1.png
new file mode 100644
index 000000000..830879b61
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-1.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-button.png
new file mode 100644
index 000000000..933272b49
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross.png
new file mode 100644
index 000000000..6b9fa6dd3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/cross.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/dashboard.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/dashboard.png
new file mode 100644
index 000000000..ba03262f0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/dashboard.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/database--plus.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/database--plus.png
new file mode 100644
index 000000000..2558a7d6a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/database--plus.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/database.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/database.png
new file mode 100644
index 000000000..d588f422f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/database.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/databases.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/databases.png
new file mode 100644
index 000000000..11dcab4b1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/databases.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/disk-black.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/disk-black.png
new file mode 100644
index 000000000..61784784f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/disk-black.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-convert.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-convert.png
new file mode 100644
index 000000000..1ecdafb99
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-convert.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-import.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-import.png
new file mode 100644
index 000000000..5fae085f8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-import.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-list.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-list.png
new file mode 100644
index 000000000..2b4dde893
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-list.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-text.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-text.png
new file mode 100644
index 000000000..ed841a02a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/document-text.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/documents-stack.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/documents-stack.png
new file mode 100644
index 000000000..a397f60aa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/documents-stack.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/download-cloud.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/download-cloud.png
new file mode 100644
index 000000000..ba0f492fa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/download-cloud.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/drive-upload.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/drive-upload.png
new file mode 100644
index 000000000..93589e4da
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/drive-upload.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/exclamation-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/exclamation-button.png
new file mode 100644
index 000000000..e792fb01d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/exclamation-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/eye.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/eye.png
new file mode 100644
index 000000000..2aead17e0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/eye.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-export.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-export.png
new file mode 100644
index 000000000..86e0cd294
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-export.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-tree.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-tree.png
new file mode 100644
index 000000000..24218b6db
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder-tree.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder.png
new file mode 100644
index 000000000..ada85c48b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/folder.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel-small.png
new file mode 100644
index 000000000..96e9e28f2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel.png
new file mode 100644
index 000000000..1f6960452
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/funnel.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/gear.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/gear.png
new file mode 100644
index 000000000..efc599dcc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/gear.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe-network.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe-network.png
new file mode 100644
index 000000000..ec27fad42
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe-network.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe.png
new file mode 100644
index 000000000..48e5b6b30
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/globe.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer-screwdriver.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer-screwdriver.png
new file mode 100644
index 000000000..985d44c5e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer-screwdriver.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer.png
new file mode 100644
index 000000000..cf0ef85a7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hammer.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/hand.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hand.png
new file mode 100644
index 000000000..7b47be2dc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hand.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/highlighter-text.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/highlighter-text.png
new file mode 100644
index 000000000..719c537db
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/highlighter-text.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/home.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/home.png
new file mode 100644
index 000000000..622a2b736
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/home.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass--exclamation.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass--exclamation.png
new file mode 100644
index 000000000..67436681a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass--exclamation.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass.png
new file mode 100644
index 000000000..127c5d615
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/hourglass.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/idea.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/idea.png
new file mode 100644
index 000000000..8b3abbd5e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/idea.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/inbox-document-text.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/inbox-document-text.png
new file mode 100644
index 000000000..4b479cfef
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/inbox-document-text.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-button.png
new file mode 100644
index 000000000..4ecaf370b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-small.png
new file mode 100644
index 000000000..6db2d56e9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-white.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-white.png
new file mode 100644
index 000000000..bd4f552a8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information-white.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/information.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information.png
new file mode 100644
index 000000000..fa9a60b5a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/information.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/jar.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/jar.png
new file mode 100644
index 000000000..8711832ac
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/jar.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/magnifier.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/magnifier.png
new file mode 100644
index 000000000..7a5ae62e3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/magnifier.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/mail.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/mail.png
new file mode 100644
index 000000000..e708416da
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/mail.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/memory.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/memory.png
new file mode 100644
index 000000000..4c71a247d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/memory.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/minus-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/minus-button.png
new file mode 100644
index 000000000..6dc019a60
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/minus-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/molecule.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/molecule.png
new file mode 100644
index 000000000..c4eac4ef4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/molecule.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-cloud.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-cloud.png
new file mode 100644
index 000000000..0527a92ba
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-cloud.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-away.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-away.png
new file mode 100644
index 000000000..0defbb40d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-away.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-busy.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-busy.png
new file mode 100644
index 000000000..ba2c65473
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-busy.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-offline.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-offline.png
new file mode 100644
index 000000000..507ff0595
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status-offline.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status.png
new file mode 100644
index 000000000..12ccc6baf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network-status.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/network.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network.png
new file mode 100644
index 000000000..8224771b0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/network.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-design.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-design.png
new file mode 100644
index 000000000..fb2d4066c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-design.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-master.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-master.png
new file mode 100644
index 000000000..c40fcc3ee
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-master.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-select.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-select.png
new file mode 100644
index 000000000..d2aba04cc
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-select.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-slave.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-slave.png
new file mode 100644
index 000000000..78a41cd12
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node-slave.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/node.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node.png
new file mode 100644
index 000000000..88f1a2bbf
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/node.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil-small.png
new file mode 100644
index 000000000..3d81c2fb1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil.png
new file mode 100644
index 000000000..3ef2fa63e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/pencil.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/plus-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/plus-button.png
new file mode 100644
index 000000000..10d1f6003
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/plus-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/processor.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/processor.png
new file mode 100644
index 000000000..37e979422
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/processor.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/prohibition.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/prohibition.png
new file mode 100644
index 000000000..18f151071
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/prohibition.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/property.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/property.png
new file mode 100644
index 000000000..b0e549e45
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/property.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-small-white.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-small-white.png
new file mode 100644
index 000000000..132d3f5ba
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-small-white.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-white.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-white.png
new file mode 100644
index 000000000..f80646871
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question-white.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/question.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question.png
new file mode 100644
index 000000000..30a47032a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/question.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt-invoice.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt-invoice.png
new file mode 100644
index 000000000..fed614079
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt-invoice.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt.png
new file mode 100644
index 000000000..1548b0ac6
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/receipt.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/run.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/run.png
new file mode 100644
index 000000000..dc35fe3cb
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/run.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/script-code.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/script-code.png
new file mode 100644
index 000000000..d398622df
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/script-code.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/server-cast.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/server-cast.png
new file mode 100644
index 000000000..921386652
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/server-cast.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/server.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/server.png
new file mode 100644
index 000000000..ee0c77179
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/server.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/sitemap.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/sitemap.png
new file mode 100644
index 000000000..298343eea
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/sitemap.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/slash.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/slash.png
new file mode 100644
index 000000000..7af3a5189
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/slash.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-away.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-away.png
new file mode 100644
index 000000000..c7be0abbe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-away.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-busy.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-busy.png
new file mode 100644
index 000000000..a9d5f4db2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-busy.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-offline.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-offline.png
new file mode 100644
index 000000000..f148af498
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status-offline.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/status.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status.png
new file mode 100644
index 000000000..680bb8a6a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/status.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor--exclamation.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor--exclamation.png
new file mode 100644
index 000000000..c6f6a5f64
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor--exclamation.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor.png
new file mode 100644
index 000000000..a139103e1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/system-monitor.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/table.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/table.png
new file mode 100644
index 000000000..b0cd69fc5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/table.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/terminal.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/terminal.png
new file mode 100644
index 000000000..c18df24f9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/terminal.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-circle.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-circle.png
new file mode 100644
index 000000000..210b1a6c3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-circle.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-red.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-red.png
new file mode 100644
index 000000000..8ec99b4a6
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick-red.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick.png
new file mode 100644
index 000000000..2414885b8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/tick.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small-expand.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small-expand.png
new file mode 100644
index 000000000..79c5ff7e8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small-expand.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small.png
new file mode 100644
index 000000000..f783a6f2c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toggle-small.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/toolbox.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toolbox.png
new file mode 100644
index 000000000..b581d7794
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/toolbox.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-accordion.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-accordion.png
new file mode 100644
index 000000000..a9f1448e2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-accordion.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-address-bar.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-address-bar.png
new file mode 100644
index 000000000..1a96ac435
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-address-bar.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box-uncheck.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box-uncheck.png
new file mode 100644
index 000000000..ba447358c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box-uncheck.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box.png
new file mode 100644
index 000000000..07f3522a9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-check-box.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button-uncheck.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button-uncheck.png
new file mode 100644
index 000000000..ec7102b6e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button-uncheck.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button.png
new file mode 100644
index 000000000..f83a25496
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-radio-button.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-text-field-select.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-text-field-select.png
new file mode 100644
index 000000000..3cfe301ac
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/ui-text-field-select.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/users.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/users.png
new file mode 100644
index 000000000..a6aae0404
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/users.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/wooden-box.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/wooden-box.png
new file mode 100644
index 000000000..f64d76105
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/wooden-box.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/ico/zone.png b/solr-8.1.1/server/solr-webapp/webapp/img/ico/zone.png
new file mode 100644
index 000000000..80fc7be9e
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/ico/zone.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/loader-light.gif b/solr-8.1.1/server/solr-webapp/webapp/img/loader-light.gif
new file mode 100644
index 000000000..f578ca586
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/loader-light.gif
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/loader.gif b/solr-8.1.1/server/solr-webapp/webapp/img/loader.gif
new file mode 100644
index 000000000..085ccaeca
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/loader.gif
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/lucene-ico.png b/solr-8.1.1/server/solr-webapp/webapp/img/lucene-ico.png
new file mode 100644
index 000000000..43327dd5a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/lucene-ico.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/solr-ico.png b/solr-8.1.1/server/solr-webapp/webapp/img/solr-ico.png
new file mode 100644
index 000000000..91c35d846
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/solr-ico.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/solr.svg b/solr-8.1.1/server/solr-webapp/webapp/img/solr.svg
new file mode 100644
index 000000000..cb4ae64f8
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/solr.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="203.005pt" height="102.654pt" viewBox="0 0 203.005 102.654" version="1.1">
+<defs>
+<clipPath id="clip1">
+ <path d="M 0 36 L 49 36 L 49 102.652344 L 0 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip2">
+ <path d="M 53 53 L 100 53 L 100 102.652344 L 53 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip3">
+ <path d="M 106 35 L 123 35 L 123 102.652344 L 106 102.652344 Z "/>
+</clipPath>
+<clipPath id="clip4">
+ <path d="M 163 29 L 203.003906 29 L 203.003906 52 L 163 52 Z "/>
+</clipPath>
+</defs>
+<g id="surface1">
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 40.761719 70.890625 C 38.414062 69.644531 35.765625 68.765625 32.886719 68.277344 C 30.054688 67.800781 27.179688 67.5625 24.332031 67.5625 C 22.003906 67.5625 19.652344 67.359375 17.332031 66.964844 C 15.078125 66.578125 13.035156 65.871094 11.257812 64.859375 C 9.527344 63.875 8.097656 62.5 7.003906 60.765625 C 5.925781 59.058594 5.382812 56.796875 5.382812 54.066406 C 5.433594 51.65625 5.992188 49.597656 7.046875 47.9375 C 8.117188 46.253906 9.511719 44.886719 11.195312 43.871094 C 12.921875 42.832031 14.914062 42.066406 17.117188 41.597656 C 20.867188 40.800781 24.828125 40.652344 28.863281 41.214844 C 30.441406 41.4375 31.996094 41.832031 33.496094 42.382812 C 34.964844 42.929688 36.347656 43.675781 37.601562 44.601562 C 38.835938 45.515625 39.929688 46.664062 40.847656 48.011719 L 41.359375 48.765625 L 45.148438 47.171875 L 44.34375 46.039062 C 43.3125 44.582031 42.171875 43.269531 40.949219 42.140625 C 39.703125 40.988281 38.238281 40.007812 36.59375 39.234375 C 34.96875 38.46875 33.113281 37.878906 31.070312 37.480469 C 29.050781 37.089844 26.695312 36.890625 24.070312 36.890625 C 21.550781 36.890625 18.949219 37.179688 16.339844 37.75 C 13.691406 38.328125 11.234375 39.289062 9.039062 40.597656 C 6.796875 41.9375 4.949219 43.722656 3.542969 45.90625 C 2.121094 48.125 1.394531 50.863281 1.394531 54.042969 C 1.394531 57.382812 2.066406 60.226562 3.386719 62.492188 C 4.703125 64.746094 6.464844 66.570312 8.625 67.914062 C 10.742188 69.234375 13.210938 70.183594 15.964844 70.734375 C 18.652344 71.273438 21.46875 71.546875 24.332031 71.546875 C 26.609375 71.546875 29.019531 71.71875 31.496094 72.0625 C 33.90625 72.394531 36.152344 73.066406 38.164062 74.058594 C 40.125 75.027344 41.761719 76.375 43.023438 78.0625 C 44.242188 79.699219 44.859375 81.90625 44.859375 84.625 C 44.859375 87.066406 44.261719 89.148438 43.089844 90.820312 C 41.878906 92.542969 40.304688 93.964844 38.410156 95.046875 C 36.476562 96.152344 34.289062 96.96875 31.902344 97.464844 C 29.476562 97.972656 27.078125 98.230469 24.769531 98.230469 C 20.898438 98.230469 17.070312 97.492188 13.394531 96.03125 C 9.738281 94.578125 6.492188 92.398438 3.753906 89.550781 L 3.019531 88.785156 L 0 91.402344 L 0.847656 92.25 C 3.550781 94.953125 6.90625 97.308594 10.824219 99.25 C 14.785156 101.21875 19.480469 102.214844 24.769531 102.214844 C 27.285156 102.214844 29.957031 101.929688 32.707031 101.359375 C 35.496094 100.785156 38.117188 99.800781 40.488281 98.429688 C 42.898438 97.039062 44.902344 95.222656 46.449219 93.023438 C 48.039062 90.765625 48.84375 87.941406 48.84375 84.625 C 48.84375 81.265625 48.089844 78.417969 46.597656 76.167969 C 45.128906 73.945312 43.164062 72.171875 40.761719 70.890625 "/>
+</g>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 76.390625 98.667969 C 73.65625 98.667969 71.160156 98.105469 68.964844 96.992188 C 66.738281 95.867188 64.773438 94.335938 63.125 92.4375 C 61.464844 90.53125 60.148438 88.300781 59.207031 85.808594 C 58.261719 83.304688 57.722656 80.679688 57.613281 78.054688 C 57.613281 75.625 58.066406 73.144531 58.949219 70.675781 C 59.835938 68.214844 61.125 65.972656 62.785156 64.007812 C 64.4375 62.050781 66.449219 60.433594 68.769531 59.191406 C 71.046875 57.96875 73.609375 57.351562 76.390625 57.351562 C 79.003906 57.351562 81.472656 57.929688 83.726562 59.070312 C 86.015625 60.226562 88.023438 61.777344 89.707031 63.675781 C 91.390625 65.585938 92.738281 67.816406 93.707031 70.308594 C 94.675781 72.796875 95.164062 75.40625 95.164062 78.054688 C 95.164062 80.480469 94.714844 82.960938 93.828125 85.429688 C 92.941406 87.894531 91.652344 90.136719 89.996094 92.097656 C 88.34375 94.050781 86.335938 95.65625 84.019531 96.867188 C 81.742188 98.0625 79.175781 98.667969 76.390625 98.667969 M 92.96875 61.292969 C 90.984375 58.976562 88.574219 57.058594 85.804688 55.597656 C 82.996094 54.117188 79.828125 53.367188 76.390625 53.367188 C 73.257812 53.367188 70.265625 54.035156 67.496094 55.359375 C 64.746094 56.671875 62.316406 58.484375 60.273438 60.742188 C 58.234375 62.992188 56.601562 65.640625 55.417969 68.617188 C 54.230469 71.59375 53.628906 74.769531 53.628906 78.054688 C 53.628906 81.15625 54.183594 84.195312 55.28125 87.082031 C 56.371094 89.964844 57.929688 92.582031 59.90625 94.863281 C 61.890625 97.15625 64.304688 99.027344 67.078125 100.429688 C 69.875 101.84375 73.003906 102.59375 76.371094 102.652344 L 76.410156 102.652344 C 79.597656 102.59375 82.613281 101.875 85.378906 100.527344 C 88.121094 99.1875 90.550781 97.359375 92.597656 95.101562 C 94.632812 92.851562 96.25 90.230469 97.40625 87.316406 C 98.5625 84.390625 99.148438 81.273438 99.148438 78.054688 C 99.148438 75.136719 98.609375 72.164062 97.550781 69.21875 C 96.488281 66.273438 94.945312 63.605469 92.96875 61.292969 "/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 119.78125 97.5625 C 119.113281 97.730469 118.523438 97.855469 118.03125 97.9375 C 117.511719 98.027344 116.953125 98.113281 116.347656 98.199219 C 115.789062 98.277344 115.238281 98.320312 114.707031 98.320312 C 113.371094 98.320312 112.386719 97.875 111.699219 96.964844 C 110.9375 95.960938 110.566406 94.960938 110.566406 93.914062 L 110.566406 35.578125 L 106.582031 35.578125 L 106.582031 93.914062 C 106.582031 96.101562 107.273438 98.039062 108.636719 99.667969 C 110.050781 101.359375 112.0625 102.214844 114.621094 102.214844 C 115.421875 102.214844 116.21875 102.167969 116.988281 102.078125 C 117.730469 101.988281 118.394531 101.898438 118.992188 101.808594 C 119.601562 101.71875 120.308594 101.578125 121.09375 101.398438 L 122.445312 101.085938 L 120.671875 97.339844 Z "/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(14.048767%,12.319946%,16.685486%);fill-opacity:1;" d="M 136.976562 57.378906 C 134.90625 58.835938 133.074219 60.6875 131.507812 62.902344 L 131.507812 54.066406 L 127.523438 54.066406 L 127.523438 101.777344 L 131.507812 101.777344 L 131.507812 72.074219 C 132.058594 70.128906 132.820312 68.300781 133.769531 66.648438 C 134.726562 64.980469 135.914062 63.511719 137.304688 62.285156 C 138.695312 61.058594 140.3125 60.066406 142.117188 59.328125 C 143.914062 58.589844 145.945312 58.160156 148.148438 58.050781 L 149.207031 57.996094 L 149.207031 54.066406 L 148.09375 54.066406 C 143.84375 54.066406 140.105469 55.179688 136.976562 57.378906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 193.910156 10.613281 L 160.910156 46.289062 L 202.382812 27.15625 C 201.15625 20.824219 198.152344 15.132812 193.910156 10.613281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 169.425781 0 C 164.855469 0 160.5 0.917969 156.527344 2.574219 L 152.097656 39.886719 L 174.226562 0.347656 C 172.65625 0.121094 171.058594 0 169.425781 0 "/>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 202.714844 29.210938 L 163.414062 51.203125 L 200.285156 46.828125 C 202.035156 42.761719 203.003906 38.285156 203.003906 33.578125 C 203.003906 32.097656 202.898438 30.640625 202.714844 29.210938 "/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 188.226562 61.40625 C 192.617188 58.433594 196.261719 54.449219 198.835938 49.789062 L 164.277344 56.648438 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 176.25 0.695312 L 157.011719 42.390625 L 192.695312 9.382812 C 188.222656 5.078125 182.5625 2 176.25 0.695312 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 172.234375 67.03125 C 175.953125 66.722656 179.496094 65.816406 182.773438 64.394531 L 163.414062 62.097656 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 138.820312 19.773438 C 137.308594 23.117188 136.328125 26.75 135.988281 30.566406 L 141.203125 39.886719 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(85.639954%,20.640564%,13.365173%);fill-opacity:1;" d="M 153.617188 3.953125 C 148.878906 6.488281 144.824219 10.121094 141.785156 14.519531 L 146.652344 39.023438 Z "/>
+</g>
+</svg>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/img/tree.png b/solr-8.1.1/server/solr-webapp/webapp/img/tree.png
new file mode 100644
index 000000000..61b6b3ee1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/img/tree.png
Binary files differ
diff --git a/solr-8.1.1/server/solr-webapp/webapp/index.html b/solr-8.1.1/server/solr-webapp/webapp/index.html
new file mode 100644
index 000000000..fcf0f821a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/index.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html ng-app="solrAdminApp">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<head>
+ <title>Solr Admin</title>
+
+ <link rel="icon" type="image/x-icon" href="img/favicon.ico?_=${version}">
+ <link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico?_=${version}">
+
+ <link rel="stylesheet" type="text/css" href="css/angular/common.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/analysis.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/cloud.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/cores.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/collections.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/dashboard.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/dataimport.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/files.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/index.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/java-properties.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/logging.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/login.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/menu.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/plugins.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/documents.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/query.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/stream.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/replication.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/schema.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/suggestions.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/segments.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/threads.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/chosen.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/jquery-ui.min.css?_=${version}">
+ <link rel="stylesheet" type="text/css" href="css/angular/jquery-ui.structure.min.css?_=${version}">
+
+ <meta http-equiv="x-ua-compatible" content="IE=9">
+ <script src="libs/jquery-2.1.3.min.js"></script>
+ <script src="libs/chosen.jquery.js"></script>
+ <script src="libs/jquery.jstree.js"></script>
+ <script src="libs/angular.js"></script>
+ <script src="libs/angular-chosen.js"></script>
+ <script src="libs/angular-resource.min.js"></script>
+ <script src="libs/angular-route.min.js"></script>
+ <script src="libs/angular-cookies.min.js"></script>
+ <script src="libs/ngtimeago.js"></script>
+ <script src="libs/highlight.js"></script>
+ <script src="libs/d3.js"></script>
+ <script src="libs/jquery-ui.min.js"></script>
+ <script src="libs/angular-utf8-base64.min.js"></script>
+ <script src="js/angular/app.js"></script>
+ <script src="js/angular/services.js"></script>
+ <script src="js/angular/controllers/index.js"></script>
+ <script src="js/angular/controllers/login.js"></script>
+ <script src="js/angular/controllers/logging.js"></script>
+ <script src="js/angular/controllers/cloud.js"></script>
+ <script src="js/angular/controllers/collections.js"></script>
+ <script src="js/angular/controllers/cores.js"></script>
+ <script src="js/angular/controllers/threads.js"></script>
+ <script src="js/angular/controllers/java-properties.js"></script>
+ <script src="js/angular/controllers/core-overview.js"></script>
+ <script src="js/angular/controllers/collection-overview.js"></script>
+ <script src="js/angular/controllers/analysis.js"></script>
+ <script src="js/angular/controllers/dataimport.js"></script>
+ <script src="js/angular/controllers/documents.js"></script>
+ <script src="js/angular/controllers/files.js"></script>
+ <script src="js/angular/controllers/query.js"></script>
+ <script src="js/angular/controllers/stream.js"></script>
+ <script src="js/angular/controllers/plugins.js"></script>
+ <script src="js/angular/controllers/replication.js"></script>
+ <script src="js/angular/controllers/schema.js"></script>
+ <script src="js/angular/controllers/segments.js"></script>
+ <script src="js/angular/controllers/unknown.js"></script>
+ <script src="js/angular/controllers/cluster-suggestions.js"></script>
+
+
+</head>
+<body ng-controller="MainController">
+
+ <div id="wrapper" scrollable-when-small>
+
+ <div id="header">
+
+ <a href="#/" id="solr"><span>Apache SOLR</span></a>
+
+ <p id="environment">&nbsp;</p>
+
+ </div>
+
+ <div id="main" class="clearfix">
+
+ <div class="header-message" id="init-failures" ng-show="showInitFailures">
+
+ <h2>SolrCore Initialization Failures</h2>
+ <ul>
+ <li ng-repeat="(core,error) in initFailures"><strong>{{core}}:</strong> {{error}}</li>
+ </ul>
+ <p>Please check your logs for more information</p>
+
+ </div>
+
+ <div id="loading" class="loader universal-loader" loading-status-message>&nbsp;</div>
+
+ <div id="connection-box" connection-message>
+ <div id="connection-status-modal">
+ </div>
+
+ <div class="connection-status header-message">
+ <h2>Connection to Solr lost</h2>
+ <p>Please check the Solr instance.</p>
+ </div>
+ <div class="connection-status header-message" id="connection-status-recovered" ng-show="connectionRecovered">
+ <h2>Connection recovered...</h2>
+ <p>Continuing to load data...</p>
+ </div>
+ </div>
+ <div id="http-exception" class="header-message" ng-repeat="(url, exception) in exceptions">
+ <div class="exception">{{exception.msg}}</div>
+ </div>
+
+ <div id="content-wrapper">
+ <div ng-view id="content">
+
+ </div>
+ </div>
+
+ <div id="menu-wrapper">
+ <div>
+
+ <ul id="menu">
+ <li id="login" class="global" ng-class="{active:page=='login'}" ng-show="http401 || currentUser"><p><a href="#/login">{{http401 ? "Login" : "Logout " + currentUser}}</a></p></li>
+
+ <li id="index" class="global" ng-class="{active:page=='index'}"><p><a href="#/">Dashboard</a></p></li>
+
+ <div ng-show="!http401">
+ <li id="logging" class="global" ng-class="{active:page=='logging'}"><p><a href="#/~logging">Logging</a></p>
+ <ul ng-show="showingLogging">
+ <li class="level" ng-class="{active:page=='logging-levels'}"><a href="#/~logging/level">Level</a></li>
+ </ul>
+ </li>
+
+ <li id="cloud" class="global optional" ng-show="isCloudEnabled" ng-class="{active:showingCloud}"><p><a href="#/~cloud">Cloud</a></p>
+ <ul ng-show="showingCloud">
+ <li class="nodes" ng-class="{active:page=='cloud-nodes'}"><a href="#/~cloud?view=nodes">Nodes</a></li>
+ <li class="tree" ng-class="{active:page=='cloud-tree'}"><a href="#/~cloud?view=tree">Tree</a></li>
+ <li class="zkstatus" ng-class="{active:page=='cloud-zkstatus'}"><a href="#/~cloud?view=zkstatus">ZK Status</a></li>
+ <li class="graph" ng-class="{active:page=='cloud-graph'}"><a href="#/~cloud?view=graph">Graph</a></li>
+ </ul>
+ </li>
+
+ <li ng-show="isCloudEnabled" id="collections" class="global" ng-class="{active:page=='collections'}"><p><a href="#/~collections">Collections</a></p></li>
+ <li ng-hide="isCloudEnabled" id="cores" class="global" ng-class="{active:page=='cores'}"><p><a href="#/~cores">Core Admin</a></p></li>
+
+ <li id="java-properties" class="global" ng-class="{active:page=='java-props'}"><p><a href="#/~java-properties">Java Properties</a></li>
+
+ <li id="threads" class="global" ng-class="{active:page=='threads'}"><p><a href="#/~threads">Thread Dump</a></p></li>
+ <li ng-show="isCloudEnabled" id="cluster-suggestions" class="global" ng-class="{active:page=='cluster-suggestions'}"><p><a href="#/~cluster-suggestions">Suggestions</a></p></li>
+ </div>
+ </ul>
+
+ <div ng-show="!http401">
+ <div id="collection-selector" ng-show="isCloudEnabled">
+ <div id="has-collections" ng-show="collections.length!=0">
+ <select data-placeholder="Collection Selector"
+ ng-model="currentCollection"
+ chosen
+ ng-change="showCollection(currentCollection)"
+ ng-options="collection.name for collection in collections"></select>
+ </div>
+ <p id="has-no-collections" ng-show="collections.length==0"><a href="#/~collections">
+ No collections available
+ <span>Go and create one</span>
+ </a></p>
+ </div>
+ <div id="collection-menu" class="sub-menu" ng-show="currentCollection">
+ <ul>
+ <li class="overview" ng-class="{active:page=='collection-overview'}"><a href="#/{{currentCollection.name}}/collection-overview"><span>Overview</span></a></li>
+ <li class="analysis" ng-class="{active:page=='analysis'}"><a href="#/{{currentCollection.name}}/analysis"><span>Analysis</span></a></li>
+ <li class="dataimport" ng-class="{active:page=='dataimport'}"><a href="#/{{currentCollection.name}}/dataimport"><span>Dataimport</span></a></li>
+ <li class="documents" ng-class="{active:page=='documents'}"><a href="#/{{currentCollection.name}}/documents"><span>Documents</span></a></li>
+ <li class="files" ng-class="{active:page=='files'}"><a href="#/{{currentCollection.name}}/files"><span>Files</span></a></li>
+ <li class="query" ng-class="{active:page=='query'}"><a href="#/{{currentCollection.name}}/query"><span>Query</span></a></li>
+ <li class="stream" ng-class="{active:page=='stream'}"><a href="#/{{currentCollection.name}}/stream"><span>Stream</span></a></li>
+ <li class="schema" ng-class="{active:page=='schema'}"><a href="#/{{currentCollection.name}}/schema"><span>Schema</span></a></li>
+ </ul>
+ </div>
+ <div id="core-selector">
+ <div id="has-cores" ng-show="cores.length!=0">
+ <select data-placeholder="Core Selector"
+ ng-model="currentCore"
+ chosen
+ ng-change="showCore(currentCore)"
+ ng-options="core.name for core in cores"></select>
+ </div>
+ <p id="has-no-cores" ng-show="cores.length==0"><a href="#/~cores">
+ No cores available
+ <span>Go and create one</span>
+ </a></p>
+ </div>
+ <div id="core-menu" class="sub-menu" ng-show="currentCore">
+ <ul>
+ <li class="overview" ng-class="{active:page=='overview'}"><a href="#/{{currentCore.name}}/core-overview"><span>Overview</span></a></li>
+ <li ng-hide="isCloudEnabled" class="analysis" ng-class="{active:page=='analysis'}"><a href="#/{{currentCore.name}}/analysis"><span>Analysis</span></a></li>
+ <li ng-hide="isCloudEnabled" class="dataimport" ng-class="{active:page=='dataimport'}"><a href="#/{{currentCore.name}}/dataimport"><span>Dataimport</span></a></li>
+ <li ng-hide="isCloudEnabled" class="documents" ng-class="{active:page=='documents'}"><a href="#/{{currentCore.name}}/documents"><span>Documents</span></a></li>
+ <li ng-hide="isCloudEnabled" class="files" ng-class="{active:page=='files'}"><a href="#/{{currentCore.name}}/files"><span>Files</span></a></li>
+ <li class="ping" ng-class="{active:page=='ping'}"><a ng-click="ping()"><span>Ping</span><small class="qtime" ng-show="showPing"> (<span>{{pingMS}}ms</span>)</small></a></li>
+ <li class="plugins" ng-class="{active:page=='plugins'}"><a href="#/{{currentCore.name}}/plugins"><span>Plugins / Stats</span></a></li>
+ <li ng-hide="isCloudEnabled" class="query" ng-class="{active:page=='query'}"><a href="#/{{currentCore.name}}/query"><span>Query</span></a></li>
+ <li ng-hide="isCloudEnabled" class="replication" ng-class="{active:page=='replication'}"><a href="#/{{currentCore.name}}/replication"><span>Replication</span></a></li>
+ <li ng-hide="isCloudEnabled" class="schema" ng-class="{active:page=='schema'}"><a href="#/{{currentCore.name}}/schema"><span>Schema</span></a></li>
+ <li class="segments" ng-class="{active:page=='segments'}"><a href="#/{{currentCore.name}}/segments"><span>Segments info</span></a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div id="meta">
+
+ <ul>
+
+ <li class="documentation"><a href="http://lucene.apache.org/solr/"><span>Documentation</span></a></li>
+ <li class="issues"><a href="http://issues.apache.org/jira/browse/SOLR"><span>Issue Tracker</span></a></li>
+ <li class="irc"><a href="http://webchat.freenode.net/?channels=#solr"><span>IRC Channel</span></a></li>
+ <li class="mailinglist"><a href="http://wiki.apache.org/solr/UsingMailingLists"><span>Community forum</span></a></li>
+ <li class="wiki-query-syntax"><a href="https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html"><span>Solr Query Syntax</span></a></li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+
+</body>
+</html>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/app.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/app.js
new file mode 100644
index 000000000..9abacee46
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/app.js
@@ -0,0 +1,516 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var solrAdminApp = angular.module("solrAdminApp", [
+ "ngResource",
+ "ngRoute",
+ "ngCookies",
+ "ngtimeago",
+ "solrAdminServices",
+ "localytics.directives",
+ "ab-base64"
+]);
+
+solrAdminApp.config([
+ '$routeProvider', function($routeProvider) {
+ $routeProvider.
+ when('/', {
+ templateUrl: 'partials/index.html',
+ controller: 'IndexController'
+ }).
+ when('/unknown', {
+ templateUrl: 'partials/unknown.html',
+ controller: 'UnknownController'
+ }).
+ when('/login', {
+ templateUrl: 'partials/login.html',
+ controller: 'LoginController'
+ }).
+ when('/login/:route', {
+ templateUrl: 'partials/login.html',
+ controller: 'LoginController'
+ }).
+ when('/~logging', {
+ templateUrl: 'partials/logging.html',
+ controller: 'LoggingController'
+ }).
+ when('/~logging/level', {
+ templateUrl: 'partials/logging-levels.html',
+ controller: 'LoggingLevelController'
+ }).
+ when('/~cloud', {
+ templateUrl: 'partials/cloud.html',
+ controller: 'CloudController'
+ }).
+ when('/~cores', {
+ templateUrl: 'partials/cores.html',
+ controller: 'CoreAdminController'
+ }).
+ when('/~cores/:corename', {
+ templateUrl: 'partials/cores.html',
+ controller: 'CoreAdminController'
+ }).
+ when('/~collections', {
+ templateUrl: 'partials/collections.html',
+ controller: 'CollectionsController'
+ }).
+ when('/~collections/:collection', {
+ templateUrl: 'partials/collections.html',
+ controller: 'CollectionsController'
+ }).
+ when('/~threads', {
+ templateUrl: 'partials/threads.html',
+ controller: 'ThreadsController'
+ }).
+ when('/~java-properties', {
+ templateUrl: 'partials/java-properties.html',
+ controller: 'JavaPropertiesController'
+ }).
+ when('/~cluster-suggestions', {
+ templateUrl: 'partials/cluster_suggestions.html',
+ controller: 'ClusterSuggestionsController'
+ }).
+ when('/:core/core-overview', {
+ templateUrl: 'partials/core_overview.html',
+ controller: 'CoreOverviewController'
+ }).
+ when('/:core/collection-overview', {
+ templateUrl: 'partials/collection_overview.html',
+ controller: 'CollectionOverviewController'
+ }).
+ when('/:core/analysis', {
+ templateUrl: 'partials/analysis.html',
+ controller: 'AnalysisController'
+ }).
+ when('/:core/dataimport', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/dataimport/:handler*', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/documents', {
+ templateUrl: 'partials/documents.html',
+ controller: 'DocumentsController'
+ }).
+ when('/:core/files', {
+ templateUrl: 'partials/files.html',
+ controller: 'FilesController'
+ }).
+ when('/:core/plugins', {
+ templateUrl: 'partials/plugins.html',
+ controller: 'PluginsController',
+ reloadOnSearch: false
+ }).
+ when('/:core/plugins/:legacytype', {
+ templateUrl: 'partials/plugins.html',
+ controller: 'PluginsController',
+ reloadOnSearch: false
+ }).
+ when('/:core/query', {
+ templateUrl: 'partials/query.html',
+ controller: 'QueryController'
+ }).
+ when('/:core/stream', {
+ templateUrl: 'partials/stream.html',
+ controller: 'StreamController'
+ }).
+ when('/:core/replication', {
+ templateUrl: 'partials/replication.html',
+ controller: 'ReplicationController'
+ }).
+ when('/:core/dataimport', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/dataimport/:handler*', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/schema', {
+ templateUrl: 'partials/schema.html',
+ controller: 'SchemaController'
+ }).
+ when('/:core/segments', {
+ templateUrl: 'partials/segments.html',
+ controller: 'SegmentsController'
+ }).
+ otherwise({
+ templateUrl: 'partials/unknown.html',
+ controller: 'UnknownController'
+ });
+}])
+.constant('Constants', {
+ IS_ROOT_PAGE: 1,
+ IS_CORE_PAGE: 2,
+ IS_COLLECTION_PAGE: 3,
+ ROOT_URL: "/"
+})
+.filter('uriencode', function() {
+ return window.encodeURIComponent;
+})
+.filter('highlight', function($sce) {
+ return function(input, lang) {
+ if (lang && input && lang!="txt" && lang!="csv") return hljs.highlight(lang, input).value;
+ return input;
+ }
+})
+.filter('unsafe', function($sce) { return $sce.trustAsHtml; })
+.directive('loadingStatusMessage', function() {
+ return {
+ link: function($scope, $element, attrs) {
+ var show = function() {$element.css('display', 'block')};
+ var hide = function() {$element.css('display', 'none')};
+ $scope.$on('loadingStatusActive', show);
+ $scope.$on('loadingStatusInactive', hide);
+ }
+ };
+})
+.directive('escapePressed', function () {
+ return function (scope, element, attrs) {
+ element.bind("keydown keypress", function (event) {
+ if(event.which === 27) {
+ scope.$apply(function (){
+ scope.$eval(attrs.escapePressed);
+ });
+ event.preventDefault();
+ }
+ });
+ };
+})
+.directive('focusWhen', function($timeout) {
+ return {
+ link: function(scope, element, attrs) {
+ scope.$watch(attrs.focusWhen, function(value) {
+ if(value === true) {
+ $timeout(function() {
+ element[0].focus();
+ }, 100);
+ }
+ });
+ }
+ };
+})
+.directive('scrollableWhenSmall', function($window) {
+ return {
+ link: function(scope, element, attrs) {
+ var w = angular.element($window);
+
+ var checkFixedMenu = function() {
+ var shouldScroll = w.height() < (element.height() + $('#header').height() + 40);
+ element.toggleClass( 'scroll', shouldScroll);
+ };
+ w.bind('resize', checkFixedMenu);
+ w.bind('load', checkFixedMenu);
+ }
+ }
+})
+.filter('readableSeconds', function() {
+ return function(input) {
+ seconds = parseInt(input||0, 10);
+ var minutes = Math.floor( seconds / 60 );
+ var hours = Math.floor( minutes / 60 );
+
+ var text = [];
+ if( 0 !== hours ) {
+ text.push( hours + 'h' );
+ seconds -= hours * 60 * 60;
+ minutes -= hours * 60;
+ }
+
+ if( 0 !== minutes ) {
+ text.push( minutes + 'm' );
+ seconds -= minutes * 60;
+ }
+
+ if( 0 !== seconds ) {
+ text.push( ( '0' + seconds ).substr( -2 ) + 's' );
+ }
+ return text.join(' ');
+ };
+})
+.filter('number', function($locale) {
+ return function(input) {
+ var sep = {
+ 'de_CH' : '\'',
+ 'de' : '.',
+ 'en' : ',',
+ 'es' : '.',
+ 'it' : '.',
+ 'ja' : ',',
+ 'sv' : ' ',
+ 'tr' : '.',
+ '_' : '' // fallback
+ };
+
+ var browser = {};
+ var match = $locale.id.match( /^(\w{2})([-_](\w{2}))?$/ );
+ if (match[1]) {
+ browser.language = match[1].toLowerCase();
+ }
+ if (match[1] && match[3]) {
+ browser.locale = match[1] + '_' + match[3];
+ }
+
+ return ( input || 0 ).toString().replace(/\B(?=(\d{3})+(?!\d))/g,
+ sep[ browser.locale ] || sep[ browser.language ] || sep['_']);
+ };
+})
+.filter('orderObjectBy', function() {
+ return function(items, field, reverse) {
+ var filtered = [];
+ angular.forEach(items, function(item) {
+ filtered.push(item);
+ });
+ filtered.sort(function (a, b) {
+ return (a[field] > b[field] ? 1 : -1);
+ });
+ if(reverse) filtered.reverse();
+ return filtered;
+ };
+})
+.directive('jstree', function($parse) {
+ return {
+ restrict: 'EA',
+ scope: {
+ data: '=',
+ onSelect: '&'
+ },
+ link: function(scope, element, attrs) {
+ scope.$watch("data", function(newValue, oldValue) {
+ if (newValue) {
+ var treeConfig = {
+ "plugins" : [ "themes", "json_data", "ui" ],
+ "json_data" : {
+ "data" : scope.data,
+ "progressive_render" : true
+ },
+ "core" : {
+ "animation" : 0
+ }
+ };
+
+ var tree = $(element).jstree(treeConfig);
+ tree.jstree('open_node','li:first');
+ if (tree) {
+ element.bind("select_node.jstree", function (event, data) {
+ scope.$apply(function() {
+ scope.onSelect({url: data.args[0].href, data: data});
+ });
+ });
+ }
+ }
+ }, true);
+ }
+ };
+})
+.directive('connectionMessage', function() {
+ return {
+ link: function($scope, $element, attrs) {
+ var show = function() {$element.css('display', 'block')};
+ var hide = function() {$element.css('display', 'none')};
+ $scope.$on('connectionStatusActive', show);
+ $scope.$on('connectionStatusInactive', hide);
+ }
+ };
+})
+.factory('httpInterceptor', function($q, $rootScope, $location, $timeout, $injector) {
+ var activeRequests = 0;
+
+ var started = function(config) {
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusActive');
+ }
+ if ($rootScope.exceptions[config.url]) {
+ delete $rootScope.exceptions[config.url];
+ }
+ activeRequests++;
+ if (sessionStorage.getItem("auth.header")) {
+ config.headers['Authorization'] = sessionStorage.getItem("auth.header");
+ }
+ config.timeout = 10000;
+ return config || $q.when(config);
+ };
+
+ var ended = function(response) {
+ activeRequests--;
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusInactive');
+ }
+ if ($rootScope.retryCount>0) {
+ $rootScope.connectionRecovered = true;
+ $rootScope.retryCount=0;
+ $timeout(function() {
+ $rootScope.connectionRecovered=false;
+ $rootScope.$broadcast('connectionStatusInactive');
+ },2000);
+ }
+ if (!$location.path().startsWith('/login') && !$location.path().startsWith('/unknown')) {
+ sessionStorage.removeItem("http401");
+ sessionStorage.removeItem("auth.state");
+ sessionStorage.removeItem("auth.statusText");
+ }
+ return response || $q.when(response);
+ };
+
+ var failed = function(rejection) {
+ activeRequests--;
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusInactive');
+ }
+ if (rejection.config.headers.doNotIntercept) {
+ return rejection;
+ }
+ if (rejection.status === 0) {
+ $rootScope.$broadcast('connectionStatusActive');
+ if (!$rootScope.retryCount) $rootScope.retryCount=0;
+ $rootScope.retryCount ++;
+ var $http = $injector.get('$http');
+ var result = $http(rejection.config);
+ return result;
+ } else if (rejection.status === 401) {
+ // Authentication redirect
+ var headers = rejection.headers();
+ var wwwAuthHeader = headers['www-authenticate'];
+ sessionStorage.setItem("auth.wwwAuthHeader", wwwAuthHeader);
+ sessionStorage.setItem("auth.authDataHeader", headers['x-solr-authdata']);
+ sessionStorage.setItem("auth.statusText", rejection.statusText);
+ sessionStorage.setItem("http401", "true");
+ sessionStorage.removeItem("auth.scheme");
+ sessionStorage.removeItem("auth.realm");
+ sessionStorage.removeItem("auth.username");
+ sessionStorage.removeItem("auth.header");
+ sessionStorage.removeItem("auth.state");
+ if ($location.path().includes('/login')) {
+ if (!sessionStorage.getItem("auth.location")) {
+ sessionStorage.setItem("auth.location", "/");
+ }
+ } else {
+ sessionStorage.setItem("auth.location", $location.path());
+ $location.path('/login');
+ }
+ } else {
+ $rootScope.exceptions[rejection.config.url] = rejection.data.error;
+ }
+ return $q.reject(rejection);
+ };
+
+ return {request: started, response: ended, responseError: failed};
+})
+.config(function($httpProvider) {
+ $httpProvider.interceptors.push("httpInterceptor");
+ // Force BasicAuth plugin to serve us a 'Authorization: xBasic xxxx' header so browser will not pop up login dialogue
+ $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
+})
+.directive('fileModel', function ($parse) {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs) {
+ var model = $parse(attrs.fileModel);
+ var modelSetter = model.assign;
+
+ element.bind('change', function(){
+ scope.$apply(function(){
+ modelSetter(scope, element[0].files[0]);
+ });
+ });
+ }
+ };
+});
+
+solrAdminApp.controller('MainController', function($scope, $route, $rootScope, $location, Cores, Collections, System, Ping, Constants) {
+
+ $rootScope.exceptions={};
+
+ $rootScope.toggleException = function() {
+ $scope.showException=!$scope.showException;
+ };
+
+ $scope.refresh = function() {
+ $scope.cores = [];
+ $scope.collections = [];
+ }
+
+ $scope.refresh();
+ $scope.resetMenu = function(page, pageType) {
+ Cores.list(function(data) {
+ $scope.cores = [];
+ var currentCoreName = $route.current.params.core;
+ delete $scope.currentCore;
+ for (key in data.status) {
+ var core = data.status[key];
+ $scope.cores.push(core);
+ if ((!$scope.isSolrCloud || pageType == Constants.IS_CORE_PAGE) && core.name == currentCoreName) {
+ $scope.currentCore = core;
+ }
+ }
+ $scope.showInitFailures = Object.keys(data.initFailures).length>0;
+ $scope.initFailures = data.initFailures;
+ });
+
+ System.get(function(data) {
+ $scope.isCloudEnabled = data.mode.match( /solrcloud/i );
+
+ if ($scope.isCloudEnabled) {
+ Collections.list(function (data) {
+ $scope.collections = [];
+ var currentCollectionName = $route.current.params.core;
+ delete $scope.currentCollection;
+ for (key in data.collections) {
+ var collection = {name: data.collections[key]};
+ $scope.collections.push(collection);
+ if (pageType == Constants.IS_COLLECTION_PAGE && collection.name == currentCollectionName) {
+ $scope.currentCollection = collection;
+ }
+ }
+ })
+ }
+
+ });
+
+ $scope.showingLogging = page.lastIndexOf("logging", 0) === 0;
+ $scope.showingCloud = page.lastIndexOf("cloud", 0) === 0;
+ $scope.page = page;
+ $scope.currentUser = sessionStorage.getItem("auth.username");
+ $scope.http401 = sessionStorage.getItem("http401");
+ };
+
+ $scope.ping = function() {
+ Ping.ping({core: $scope.currentCore.name}, function(data) {
+ $scope.showPing = true;
+ $scope.pingMS = data.responseHeader.QTime;
+ });
+ // @todo .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
+ };
+
+ $scope.dumpCloud = function() {
+ $scope.$broadcast("cloud-dump");
+ }
+
+ $scope.showCore = function(core) {
+ $location.url("/" + core.name + "/core-overview");
+ }
+
+ $scope.showCollection = function(collection) {
+ $location.url("/" + collection.name + "/collection-overview")
+ }
+
+ $scope.$on('$routeChangeStart', function() {
+ $rootScope.exceptions = {};
+ });
+});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/analysis.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/analysis.js
new file mode 100644
index 000000000..5fff59caa
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/analysis.js
@@ -0,0 +1,201 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('AnalysisController',
+ function($scope, $location, $routeParams, Luke, Analysis, Constants) {
+ $scope.resetMenu("analysis", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function() {
+ Luke.schema({core: $routeParams.core}, function(data) {
+ $scope.fieldsAndTypes = [];
+ for (var field in data.schema.fields) {
+ $scope.fieldsAndTypes.push({
+ group: "Fields",
+ value: "fieldname=" + field,
+ label: field});
+ }
+ for (var type in data.schema.types) {
+ $scope.fieldsAndTypes.push({
+ group: "Types",
+ value: "fieldtype=" + type,
+ label: type});
+ }
+ $scope.core = $routeParams.core;
+ });
+
+ $scope.parseQueryString();
+ // @todo - set defaultSearchField either to context["analysis.fieldname"] or context["analysis.fieldtype"]
+
+ };
+ $scope.verbose = true;
+
+ var getShortComponentName = function(longname) {
+ var short = -1 !== longname.indexOf( '$' )
+ ? longname.split( '$' )[1]
+ : longname.split( '.' ).pop();
+ return short.match( /[A-Z]/g ).join( '' );
+ };
+
+ var getCaptionsForComponent = function(data) {
+ var captions = [];
+ for (var key in data[0]) {
+ key = key.replace(/.*#/,'');
+ if (key != "match" && key!="positionHistory") {
+ captions.push(key.replace(/.*#/,''));
+ }
+ }
+ return captions;
+ };
+
+ var getTokensForComponent = function(data) {
+ var tokens = [];
+ var previousPosition = 0;
+ var index=0;
+ for (var i in data) {
+ var tokenhash = data[i];
+ var positionDifference = tokenhash.position - previousPosition;
+ for (var j=positionDifference; j>1; j--) {
+ tokens.push({position: tokenhash.position - j+1, blank:true, index:index++});
+ }
+
+ var token = {position: tokenhash.position, keys:[], index:index++};
+
+ for (key in tokenhash) {
+ if (key == "match" || key=="positionHistory") {
+ //skip, to not display these keys in the UI
+ } else {
+ var tokenInfo = new Object();
+ tokenInfo.name = key;
+ tokenInfo.value = tokenhash[key];
+ if ('text' === key || 'raw_bytes' === key ) {
+ if (tokenhash.match) {
+ tokenInfo.extraclass = 'match'; //to highlight matching text strings
+ }
+ }
+ token.keys.push(tokenInfo);
+ }
+ }
+ tokens.push(token);
+ previousPosition = tokenhash.position;
+ }
+ return tokens;
+ };
+
+ var extractComponents = function(data, result, name) {
+ if (data) {
+ result[name] = [];
+ for (var i = 0; i < data.length; i += 2) {
+ var component = {
+ name: data[i],
+ short: getShortComponentName(data[i]),
+ captions: getCaptionsForComponent(data[i + 1]),
+ tokens: getTokensForComponent(data[i + 1])
+ };
+ result[name].push(component);
+ }
+ }
+ };
+
+ var processAnalysisData = function(analysis, fieldOrType) {
+ var fieldname;
+ for (fieldname in analysis[fieldOrType]) {console.log(fieldname);break;}
+ var response = {};
+ extractComponents(analysis[fieldOrType][fieldname].index, response, "index");
+ extractComponents(analysis[fieldOrType][fieldname].query, response, "query");
+ return response;
+ };
+
+ $scope.updateQueryString = function() {
+
+ var parts = $scope.fieldOrType.split("=");
+ var fieldOrType = parts[0];
+ var name = parts[1];
+
+ if ($scope.indexText) {
+ $location.search("analysis.fieldvalue", $scope.indexText);
+ } else if ($location.search()["analysis.fieldvalue"]) {
+ $location.search("analysis.fieldvalue", null);
+ }
+ if ($scope.queryText) {
+ $location.search("analysis.query", $scope.queryText);
+ } else if ($location.search()["analysis.query"]) {
+ $location.search("analysis.query", null);
+ }
+
+ if (fieldOrType == "fieldname") {
+ $location.search("analysis.fieldname", name);
+ $location.search("analysis.fieldtype", null);
+ } else {
+ $location.search("analysis.fieldtype", name);
+ $location.search("analysis.fieldname", null);
+ }
+ $location.search("verbose_output", $scope.verbose ? "1" : "0");
+ };
+
+ $scope.parseQueryString = function () {
+ var params = {};
+ var search = $location.search();
+
+ if (Object.keys(search).length == 0) {
+ return;
+ }
+ for (var key in search) {
+ params[key]=search[key];
+ }
+ $scope.indexText = search["analysis.fieldvalue"];
+ $scope.queryText = search["analysis.query"];
+ if (search["analysis.fieldname"]) {
+ $scope.fieldOrType = "fieldname=" + search["analysis.fieldname"];
+ $scope.schemaBrowserUrl = "field=" + search["analysis.fieldname"];
+ } else {
+ $scope.fieldOrType = "fieldtype=" + search["analysis.fieldtype"];
+ $scope.schemaBrowserUrl = "type=" + search["analysis.fieldtype"];
+ }
+ if (search["verbose_output"] == undefined) {
+ $scope.verbose = true;
+ } else {
+ $scope.verbose = search["verbose_output"] == "1";
+ }
+
+ if ($scope.fieldOrType || $scope.indexText || $scope.queryText) {
+ params.core = $routeParams.core;
+ var parts = $scope.fieldOrType.split("=");
+ var fieldOrType = parts[0] == "fieldname" ? "field_names" : "field_types";
+
+ Analysis.field(params, function(data) {
+ $scope.result = processAnalysisData(data.analysis, fieldOrType);
+ });
+ }
+ };
+
+ $scope.changeFieldOrType = function() {
+ var parts = $scope.fieldOrType.split("=");
+ if (parts[0]=='fieldname') {
+ $scope.schemaBrowserUrl = "field=" + parts[1];
+ } else {
+ $scope.schemaBrowserUrl = "type=" + parts[1];
+ }
+ };
+
+ $scope.toggleVerbose = function() {
+ $scope.verbose = !$scope.verbose;
+ $scope.updateQueryString();
+ };
+
+ $scope.refresh();
+ }
+);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cloud.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cloud.js
new file mode 100644
index 000000000..0d49df2db
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cloud.js
@@ -0,0 +1,983 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('CloudController',
+ function($scope, $location, Zookeeper, Constants, Collections, System, Metrics, ZookeeperStatus) {
+
+ $scope.showDebug = false;
+
+ $scope.$on("cloud-dump", function(event) {
+ $scope.showDebug = true;
+ });
+
+ $scope.closeDebug = function() {
+ $scope.showDebug = false;
+ };
+
+ var view = $location.search().view ? $location.search().view : "nodes";
+ if (view === "tree") {
+ $scope.resetMenu("cloud-tree", Constants.IS_ROOT_PAGE);
+ treeSubController($scope, Zookeeper);
+ } else if (view === "graph") {
+ $scope.resetMenu("cloud-graph", Constants.IS_ROOT_PAGE);
+ graphSubController($scope, Zookeeper, false);
+ } else if (view === "nodes") {
+ $scope.resetMenu("cloud-nodes", Constants.IS_ROOT_PAGE);
+ nodesSubController($scope, Collections, System, Metrics);
+ } else if (view === "zkstatus") {
+ $scope.resetMenu("cloud-zkstatus", Constants.IS_ROOT_PAGE);
+ zkStatusSubController($scope, ZookeeperStatus, false);
+ }
+ }
+);
+
+function getOrCreateObj(name, object) {
+ if (name in object) {
+ entry = object[name];
+ } else {
+ entry = {};
+ object[name] = entry;
+ }
+ return entry;
+}
+
+function getOrCreateList(name, object) {
+ if (name in object) {
+ entry = object[name];
+ } else {
+ entry = [];
+ object[name] = entry;
+ }
+ return entry;
+}
+
+function ensureInList(string, list) {
+ if (list.indexOf(string) === -1) {
+ list.push(string);
+ }
+}
+
+/* Puts a node name into the hosts structure */
+function ensureNodeInHosts(node_name, hosts) {
+ var hostName = node_name.split(":")[0];
+ var host = getOrCreateObj(hostName, hosts);
+ var hostNodes = getOrCreateList("nodes", host);
+ ensureInList(node_name, hostNodes);
+}
+
+// from http://scratch99.com/web-development/javascript/convert-bytes-to-mb-kb/
+function bytesToSize(bytes) {
+ var sizes = ['b', 'Kb', 'Mb', 'Gb', 'Tb'];
+ if (bytes === 0) return '0b';
+ var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
+ if (bytes === 0) return bytes + '' + sizes[i];
+ return (bytes / Math.pow(1024, i)).toFixed(1) + '' + sizes[i];
+}
+
+function numDocsHuman(docs) {
+ var sizes = ['', 'k', 'mn', 'bn', 'tn'];
+ if (docs === 0) return '0';
+ var i = parseInt(Math.floor(Math.log(docs) / Math.log(1000)));
+ if (i === 0) return docs + '' + sizes[i];
+ return (docs / Math.pow(1000, i)).toFixed(1) + '' + sizes[i];
+}
+
+/* Returns a style class depending on percentage */
+var styleForPct = function (pct) {
+ if (pct < 60) return "pct-normal";
+ if (pct < 80) return "pct-warn";
+ return "pct-critical"
+};
+
+function isNumeric(n) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+function coreNameToLabel(name) {
+ return name.replace(/(.*?)_shard((\d+_?)+)_replica_?[ntp]?(\d+)/, '\$1_s\$2r\$4');
+}
+
+var nodesSubController = function($scope, Collections, System, Metrics) {
+ $scope.pageSize = 10;
+ $scope.showNodes = true;
+ $scope.showTree = false;
+ $scope.showGraph = false;
+ $scope.showData = false;
+ $scope.showAllDetails = false;
+ $scope.showDetails = {};
+ $scope.from = 0;
+ $scope.to = $scope.pageSize - 1;
+ $scope.filterType = "node"; // Pre-initialize dropdown
+
+ $scope.toggleAllDetails = function() {
+ $scope.showAllDetails = !$scope.showAllDetails;
+ for (var node in $scope.nodes) {
+ $scope.showDetails[node] = $scope.showAllDetails;
+ }
+ for (var host in $scope.hosts) {
+ $scope.showDetails[host] = $scope.showAllDetails;
+ }
+ };
+
+ $scope.toggleDetails = function(key) {
+ $scope.showDetails[key] = !$scope.showDetails[key] === true;
+ };
+
+ $scope.toggleHostDetails = function(key) {
+ $scope.showDetails[key] = !$scope.showDetails[key] === true;
+ for (var nodeId in $scope.hosts[key].nodes) {
+ var node = $scope.hosts[key].nodes[nodeId];
+ $scope.showDetails[node] = $scope.showDetails[key];
+ }
+ };
+
+ $scope.nextPage = function() {
+ $scope.from += parseInt($scope.pageSize);
+ $scope.reload();
+ };
+
+ $scope.previousPage = function() {
+ $scope.from = Math.max(0, $scope.from - parseInt($scope.pageSize));
+ $scope.reload();
+ };
+
+ // Checks if this node is the first (alphabetically) for a given host. Used to decide rowspan in table
+ $scope.isFirstNodeForHost = function(node) {
+ var hostName = node.split(":")[0];
+ var nodesInHost = $scope.filteredNodes.filter(function (node) {
+ return node.startsWith(hostName);
+ });
+ return nodesInHost[0] === node;
+ };
+
+ // Returns the first live node for this host, to make sure we pick host-level metrics from a live node
+ $scope.firstLiveNodeForHost = function(key) {
+ var hostName = key.split(":")[0];
+ var liveNodesInHost = $scope.filteredNodes.filter(function (key) {
+ return key.startsWith(hostName);
+ }).filter(function (key) {
+ return $scope.live_nodes.includes(key);
+ });
+ return liveNodesInHost.length > 0 ? liveNodesInHost[0] : key;
+ };
+
+ // Initializes the cluster state, list of nodes, collections etc
+ $scope.initClusterState = function() {
+ var nodes = {};
+ var hosts = {};
+ var live_nodes = [];
+
+ // We build a node-centric view of the cluster state which we can easily consume to render the table
+ Collections.status(function (data) {
+ // Fetch cluster state from collections API and invert to a nodes structure
+ for (var name in data.cluster.collections) {
+ var collection = data.cluster.collections[name];
+ collection.name = name;
+ var shards = collection.shards;
+ collection.shards = [];
+ for (var shardName in shards) {
+ var shard = shards[shardName];
+ shard.name = shardName;
+ shard.collection = collection.name;
+ var replicas = shard.replicas;
+ shard.replicas = [];
+ for (var replicaName in replicas) {
+ var core = replicas[replicaName];
+ core.name = replicaName;
+ core.label = coreNameToLabel(core['core']);
+ core.collection = collection.name;
+ core.shard = shard.name;
+ core.shard_state = shard.state;
+
+ var node_name = core['node_name'];
+ var node = getOrCreateObj(node_name, nodes);
+ var cores = getOrCreateList("cores", node);
+ cores.push(core);
+ node['base_url'] = core.base_url;
+ node['id'] = core.base_url.replace(/[^\w\d]/g, '');
+ node['host'] = node_name.split(":")[0];
+ var collections = getOrCreateList("collections", node);
+ ensureInList(core.collection, collections);
+ ensureNodeInHosts(node_name, hosts);
+ }
+ }
+ }
+
+ live_nodes = data.cluster.live_nodes;
+ for (n in data.cluster.live_nodes) {
+ node = data.cluster.live_nodes[n];
+ if (!(node in nodes)) {
+ var hostName = node.split(":")[0];
+ nodes[node] = {};
+ nodes[node]['host'] = hostName;
+ }
+ ensureNodeInHosts(node, hosts);
+ }
+
+ // Make sure nodes are sorted alphabetically to align with rowspan in table
+ for (var host in hosts) {
+ hosts[host].nodes.sort();
+ }
+
+ $scope.nodes = nodes;
+ $scope.hosts = hosts;
+ $scope.live_nodes = live_nodes;
+
+ $scope.Math = window.Math;
+ $scope.reload();
+ });
+ };
+
+ $scope.filterInput = function() {
+ $scope.from = 0;
+ $scope.to = $scope.pageSize - 1;
+ $scope.reload();
+ };
+
+ /*
+ Reload will fetch data for the current page of the table and thus refresh numbers.
+ It is also called whenever a filter or paging action is executed
+ */
+ $scope.reload = function() {
+ var nodes = $scope.nodes;
+ var node_keys = Object.keys(nodes);
+ var hosts = $scope.hosts;
+ var live_nodes = $scope.live_nodes;
+ var hostNames = Object.keys(hosts);
+ hostNames.sort();
+ var pageSize = isNumeric($scope.pageSize) ? $scope.pageSize : 10;
+
+ // Calculate what nodes that will show on this page
+ var nodesToShow = [];
+ var nodesParam;
+ var hostsToShow = [];
+ var filteredNodes;
+ var filteredHosts;
+ var isFiltered = false;
+ switch ($scope.filterType) {
+ case "node": // Find what nodes match the node filter
+ if ($scope.nodeFilter) {
+ filteredNodes = node_keys.filter(function (node) {
+ return node.indexOf($scope.nodeFilter) !== -1;
+ });
+ }
+ break;
+
+ case "collection": // Find what collections match the collection filter and what nodes that have these collections
+ if ($scope.collectionFilter) {
+ candidateNodes = {};
+ nodesCollections = [];
+ for (var i = 0 ; i < node_keys.length ; i++) {
+ var node_name = node_keys[i];
+ var node = nodes[node_name];
+ nodeColl = {};
+ nodeColl['node'] = node_name;
+ collections = {};
+ node.cores.forEach(function(core) {
+ collections[core.collection] = true;
+ });
+ nodeColl['collections'] = Object.keys(collections);
+ nodesCollections.push(nodeColl);
+ }
+ nodesCollections.forEach(function(nc) {
+ matchingColls = nc['collections'].filter(function (collection) {
+ return collection.indexOf($scope.collectionFilter) !== -1;
+ });
+ if (matchingColls.length > 0) {
+ candidateNodes[nc.node] = true;
+ }
+ });
+ filteredNodes = Object.keys(candidateNodes);
+ }
+ break;
+
+ case "health":
+
+ }
+
+ if (filteredNodes) {
+ // If filtering is active, calculate what hosts contain the nodes that match the filters
+ isFiltered = true;
+ filteredHosts = filteredNodes.map(function (node) {
+ return node.split(":")[0];
+ }).filter(function (item, index, self) {
+ return self.indexOf(item) === index;
+ });
+ } else {
+ filteredNodes = node_keys;
+ filteredHosts = hostNames;
+ }
+ filteredNodes.sort();
+ filteredHosts.sort();
+
+ // Find what hosts & nodes (from the filtered set) that should be displayed on current page
+ for (var id = $scope.from ; id < $scope.from + pageSize && filteredHosts[id] ; id++) {
+ var hostName = filteredHosts[id];
+ hostsToShow.push(hostName);
+ if (isFiltered) { // Only show the nodes per host matching active filter
+ nodesToShow = nodesToShow.concat(filteredNodes.filter(function (node) {
+ return node.startsWith(hostName);
+ }));
+ } else {
+ nodesToShow = nodesToShow.concat(hosts[hostName]['nodes']);
+ }
+ }
+ nodesParam = nodesToShow.filter(function (node) {
+ return live_nodes.includes(node);
+ }).join(',');
+ var deadNodes = nodesToShow.filter(function (node) {
+ return !live_nodes.includes(node);
+ });
+ deadNodes.forEach(function (node) {
+ nodes[node]['dead'] = true;
+ });
+ $scope.nextEnabled = $scope.from + pageSize < filteredHosts.length;
+ $scope.prevEnabled = $scope.from - pageSize >= 0;
+ nodesToShow.sort();
+ hostsToShow.sort();
+
+ /*
+ Fetch system info for all selected nodes
+ Pick the data we want to display and add it to the node-centric data structure
+ */
+ System.get({"nodes": nodesParam}, function (systemResponse) {
+ for (var node in systemResponse) {
+ if (node in nodes) {
+ var s = systemResponse[node];
+ nodes[node]['system'] = s;
+ var memTotal = s.system.totalPhysicalMemorySize;
+ var memFree = s.system.freePhysicalMemorySize;
+ var memPercentage = Math.floor((memTotal - memFree) / memTotal * 100);
+ nodes[node]['memUsedPct'] = memPercentage;
+ nodes[node]['memUsedPctStyle'] = styleForPct(memPercentage);
+ nodes[node]['memTotal'] = bytesToSize(memTotal);
+ nodes[node]['memFree'] = bytesToSize(memFree);
+ nodes[node]['memUsed'] = bytesToSize(memTotal - memFree);
+
+ var heapTotal = s.jvm.memory.raw.total;
+ var heapFree = s.jvm.memory.raw.free;
+ var heapPercentage = Math.floor((heapTotal - heapFree) / heapTotal * 100);
+ nodes[node]['heapUsed'] = bytesToSize(heapTotal - heapFree);
+ nodes[node]['heapUsedPct'] = heapPercentage;
+ nodes[node]['heapUsedPctStyle'] = styleForPct(heapPercentage);
+ nodes[node]['heapTotal'] = bytesToSize(heapTotal);
+ nodes[node]['heapFree'] = bytesToSize(heapFree);
+
+ var jvmUptime = s.jvm.jmx.upTimeMS / 1000; // Seconds
+ nodes[node]['jvmUptime'] = secondsForHumans(jvmUptime);
+ nodes[node]['jvmUptimeSec'] = jvmUptime;
+
+ nodes[node]['uptime'] = s.system.uptime.replace(/.*up (.*?,.*?),.*/, "$1");
+ nodes[node]['loadAvg'] = Math.round(s.system.systemLoadAverage * 100) / 100;
+ nodes[node]['cpuPct'] = Math.ceil(s.system.processCpuLoad);
+ nodes[node]['cpuPctStyle'] = styleForPct(Math.ceil(s.system.processCpuLoad));
+ nodes[node]['maxFileDescriptorCount'] = s.system.maxFileDescriptorCount;
+ nodes[node]['openFileDescriptorCount'] = s.system.openFileDescriptorCount;
+ }
+ }
+ });
+
+ /*
+ Fetch metrics for all selected nodes. Only pull the metrics that we'll show to save bandwidth
+ Pick the data we want to display and add it to the node-centric data structure
+ */
+ Metrics.get({
+ "nodes": nodesParam,
+ "prefix": "CONTAINER.fs,org.eclipse.jetty.server.handler.DefaultHandler.get-requests,INDEX.sizeInBytes,SEARCHER.searcher.numDocs,SEARCHER.searcher.deletedDocs,SEARCHER.searcher.warmupTime"
+ },
+ function (metricsResponse) {
+ for (var node in metricsResponse) {
+ if (node in nodes) {
+ var m = metricsResponse[node];
+ nodes[node]['metrics'] = m;
+ var diskTotal = m.metrics['solr.node']['CONTAINER.fs.totalSpace'];
+ var diskFree = m.metrics['solr.node']['CONTAINER.fs.usableSpace'];
+ var diskPercentage = Math.floor((diskTotal - diskFree) / diskTotal * 100);
+ nodes[node]['diskUsedPct'] = diskPercentage;
+ nodes[node]['diskUsedPctStyle'] = styleForPct(diskPercentage);
+ nodes[node]['diskTotal'] = bytesToSize(diskTotal);
+ nodes[node]['diskFree'] = bytesToSize(diskFree);
+
+ var r = m.metrics['solr.jetty']['org.eclipse.jetty.server.handler.DefaultHandler.get-requests'];
+ nodes[node]['req'] = r.count;
+ nodes[node]['req1minRate'] = Math.floor(r['1minRate'] * 100) / 100;
+ nodes[node]['req5minRate'] = Math.floor(r['5minRate'] * 100) / 100;
+ nodes[node]['req15minRate'] = Math.floor(r['15minRate'] * 100) / 100;
+ nodes[node]['reqp75_ms'] = Math.floor(r['p75_ms']);
+ nodes[node]['reqp95_ms'] = Math.floor(r['p95_ms']);
+ nodes[node]['reqp99_ms'] = Math.floor(r['p99_ms']);
+
+ var cores = nodes[node]['cores'];
+ var indexSizeTotal = 0;
+ var docsTotal = 0;
+ var graphData = [];
+ if (cores) {
+ for (coreId in cores) {
+ var core = cores[coreId];
+ var keyName = "solr.core." + core['core'].replace(/(.*?)_(shard(\d+_?)+)_(replica.*?)/, '\$1.\$2.\$4');
+ var nodeMetric = m.metrics[keyName];
+ var size = nodeMetric['INDEX.sizeInBytes'];
+ size = (typeof size !== 'undefined') ? size : 0;
+ core['sizeInBytes'] = size;
+ core['size'] = bytesToSize(size);
+ if (core['shard_state'] !== 'active' || core['state'] !== 'active') {
+ // If core state is not active, display the real state, or if shard is inactive, display that
+ var labelState = (core['state'] !== 'active') ? core['state'] : core['shard_state'];
+ core['label'] += "_(" + labelState + ")";
+ }
+ indexSizeTotal += size;
+ var numDocs = nodeMetric['SEARCHER.searcher.numDocs'];
+ numDocs = (typeof numDocs !== 'undefined') ? numDocs : 0;
+ core['numDocs'] = numDocs;
+ core['numDocsHuman'] = numDocsHuman(numDocs);
+ core['avgSizePerDoc'] = bytesToSize(numDocs === 0 ? 0 : size / numDocs);
+ var deletedDocs = nodeMetric['SEARCHER.searcher.deletedDocs'];
+ deletedDocs = (typeof deletedDocs !== 'undefined') ? deletedDocs : 0;
+ core['deletedDocs'] = deletedDocs;
+ core['deletedDocsHuman'] = numDocsHuman(deletedDocs);
+ var warmupTime = nodeMetric['SEARCHER.searcher.warmupTime'];
+ warmupTime = (typeof warmupTime !== 'undefined') ? warmupTime : 0;
+ core['warmupTime'] = warmupTime;
+ docsTotal += core['numDocs'];
+ }
+ for (coreId in cores) {
+ core = cores[coreId];
+ var graphObj = {};
+ graphObj['label'] = core['label'];
+ graphObj['size'] = core['sizeInBytes'];
+ graphObj['sizeHuman'] = core['size'];
+ graphObj['pct'] = (core['sizeInBytes'] / indexSizeTotal) * 100;
+ graphData.push(graphObj);
+ }
+ cores.sort(function (a, b) {
+ return b.sizeInBytes - a.sizeInBytes
+ });
+ } else {
+ cores = {};
+ }
+ graphData.sort(function (a, b) {
+ return b.size - a.size
+ });
+ nodes[node]['graphData'] = graphData;
+ nodes[node]['numDocs'] = numDocsHuman(docsTotal);
+ nodes[node]['sizeInBytes'] = indexSizeTotal;
+ nodes[node]['size'] = bytesToSize(indexSizeTotal);
+ nodes[node]['sizePerDoc'] = docsTotal === 0 ? '0b' : bytesToSize(indexSizeTotal / docsTotal);
+
+ // Build the d3 powered bar chart
+ $('#chart' + nodes[node]['id']).empty();
+ var chart = d3.select('#chart' + nodes[node]['id']).append('div').attr('class', 'chart');
+
+ // Add one div per bar which will group together both labels and bars
+ var g = chart.selectAll('div')
+ .data(nodes[node]['graphData']).enter()
+ .append('div');
+
+ // Add the bars
+ var bars = g.append("div")
+ .attr("class", "rect")
+ .text(function (d) {
+ return d.label + ':\u00A0\u00A0' + d.sizeHuman;
+ });
+
+ // Execute the transition to show the bars
+ bars.transition()
+ .ease('elastic')
+ .style('width', function (d) {
+ return d.pct + '%';
+ });
+ }
+ }
+ });
+ $scope.nodes = nodes;
+ $scope.hosts = hosts;
+ $scope.live_nodes = live_nodes;
+ $scope.nodesToShow = nodesToShow;
+ $scope.hostsToShow = hostsToShow;
+ $scope.filteredNodes = filteredNodes;
+ $scope.filteredHosts = filteredHosts;
+ };
+ $scope.initClusterState();
+};
+
+var zkStatusSubController = function($scope, ZookeeperStatus) {
+ $scope.showZkStatus = true;
+ $scope.showNodes = false;
+ $scope.showTree = false;
+ $scope.showGraph = false;
+ $scope.tree = {};
+ $scope.showData = false;
+ $scope.showDetails = false;
+
+ $scope.toggleDetails = function() {
+ $scope.showDetails = !$scope.showDetails === true;
+ };
+
+ $scope.initZookeeper = function() {
+ ZookeeperStatus.monitor({}, function(data) {
+ $scope.zkState = data.zkStatus;
+ $scope.mainKeys = ["ok", "clientPort", "zk_server_state", "zk_version",
+ "zk_approximate_data_size", "zk_znode_count", "zk_num_alive_connections"];
+ $scope.detailKeys = ["dataDir", "dataLogDir",
+ "zk_avg_latency", "zk_max_file_descriptor_count", "zk_watch_count",
+ "zk_packets_sent", "zk_packets_received",
+ "tickTime", "maxClientCnxns", "minSessionTimeout", "maxSessionTimeout"];
+ $scope.ensembleMainKeys = ["serverId", "electionPort", "quorumPort"];
+ $scope.ensembleDetailKeys = ["peerType", "electionAlg", "initLimit", "syncLimit",
+ "zk_followers", "zk_synced_followers", "zk_pending_syncs"];
+ });
+ };
+
+ $scope.initZookeeper();
+};
+
+var treeSubController = function($scope, Zookeeper) {
+ $scope.showZkStatus = false;
+ $scope.showTree = true;
+ $scope.showGraph = false;
+ $scope.tree = {};
+ $scope.showData = false;
+
+ $scope.showTreeLink = function(link) {
+ var path = decodeURIComponent(link.replace(/.*[\\?&]path=([^&#]*).*/, "$1"));
+ Zookeeper.detail({path: path}, function(data) {
+ $scope.znode = data.znode;
+ var path = data.znode.path.split( '.' );
+ if(path.length >1) {
+ $scope.lang = path.pop();
+ } else {
+ var lastPathElement = data.znode.path.split( '/' ).pop();
+ if (lastPathElement == "managed-schema") {
+ $scope.lang = "xml";
+ }
+ }
+ $scope.showData = true;
+ });
+ };
+
+ $scope.hideData = function() {
+ $scope.showData = false;
+ };
+
+ $scope.initTree = function() {
+ Zookeeper.simple(function(data) {
+ $scope.tree = data.tree;
+ });
+ };
+
+ $scope.initTree();
+};
+
+/**
+ * Translates seconds into human readable format of seconds, minutes, hours, days, and years
+ *
+ * @param {number} seconds The number of seconds to be processed
+ * @return {string} The phrase describing the the amount of time
+ */
+function secondsForHumans ( seconds ) {
+ var levels = [
+ [Math.floor(seconds / 31536000), 'y'],
+ [Math.floor((seconds % 31536000) / 86400), 'd'],
+ [Math.floor(((seconds % 31536000) % 86400) / 3600), 'h'],
+ [Math.floor((((seconds % 31536000) % 86400) % 3600) / 60), 'm']
+ ];
+ var returntext = '';
+
+ for (var i = 0, max = levels.length; i < max; i++) {
+ if ( levels[i][0] === 0 ) continue;
+ returntext += ' ' + levels[i][0] + levels[i][1];
+ }
+ return returntext.trim() === '' ? '0m' : returntext.trim();
+}
+
+var graphSubController = function ($scope, Zookeeper) {
+ $scope.showZkStatus = false;
+ $scope.showTree = false;
+ $scope.showGraph = true;
+
+ $scope.filterType = "status";
+
+ $scope.helperData = {
+ protocol: [],
+ host: [],
+ hostname: [],
+ port: [],
+ pathname: [],
+ replicaType: [],
+ base_url: [],
+ core: [],
+ node_name: [],
+ state: [],
+ core_node: []
+ };
+
+ $scope.next = function() {
+ $scope.pos += $scope.rows;
+ $scope.initGraph();
+ };
+
+ $scope.previous = function() {
+ $scope.pos = Math.max(0, $scope.pos - $scope.rows);
+ $scope.initGraph();
+ };
+
+ $scope.resetGraph = function() {
+ $scope.pos = 0;
+ $scope.initGraph();
+ };
+
+ $scope.initGraph = function() {
+ Zookeeper.liveNodes(function (data) {
+ var live_nodes = {};
+ for (var c in data.tree[0].children) {
+ live_nodes[data.tree[0].children[c].data.title] = true;
+ }
+
+ var params = {view: "graph"};
+ if ($scope.rows) {
+ params.start = $scope.pos;
+ params.rows = $scope.rows;
+ }
+
+ var filter = ($scope.filterType=='status') ? $scope.pagingStatusFilter : $scope.pagingFilter;
+
+ if (filter) {
+ params.filterType = $scope.filterType;
+ params.filter = filter;
+ }
+
+ Zookeeper.clusterState(params, function (data) {
+ eval("var state=" + data.znode.data); // @todo fix horrid means to parse JSON
+
+ var leaf_count = 0;
+ var graph_data = {
+ name: null,
+ children: []
+ };
+
+ for (var c in state) {
+ var shards = [];
+ for (var s in state[c].shards) {
+ var shard_status = state[c].shards[s].state;
+ shard_status = shard_status == 'inactive' ? 'shard-inactive' : shard_status;
+ var nodes = [];
+ for (var n in state[c].shards[s].replicas) {
+ leaf_count++;
+ var replica = state[c].shards[s].replicas[n]
+
+ var uri = replica.base_url;
+ var parts = uri.match(/^(\w+:)\/\/(([\w\d\.-]+)(:(\d+))?)(.+)$/);
+ var uri_parts = {
+ protocol: parts[1],
+ host: parts[2],
+ hostname: parts[3],
+ port: parseInt(parts[5] || 80, 10),
+ pathname: parts[6],
+ replicaType: replica.type,
+ base_url: replica.base_url,
+ core: replica.core,
+ node_name: replica.node_name,
+ state: replica.state,
+ core_node: n
+ };
+
+ $scope.helperData.protocol.push(uri_parts.protocol);
+ $scope.helperData.host.push(uri_parts.host);
+ $scope.helperData.hostname.push(uri_parts.hostname);
+ $scope.helperData.port.push(uri_parts.port);
+ $scope.helperData.pathname.push(uri_parts.pathname);
+ $scope.helperData.replicaType.push(uri_parts.replicaType);
+ $scope.helperData.base_url.push(uri_parts.base_url);
+ $scope.helperData.core.push(uri_parts.core);
+ $scope.helperData.node_name.push(uri_parts.node_name);
+ $scope.helperData.state.push(uri_parts.state);
+ $scope.helperData.core_node.push(uri_parts.core_node);
+
+ var replica_status = replica.state;
+
+ if (!live_nodes[replica.node_name]) {
+ replica_status = 'gone';
+ } else if(shard_status=='shard-inactive') {
+ replica_status += ' ' + shard_status;
+ }
+
+ var node = {
+ name: uri,
+ data: {
+ type: 'node',
+ state: replica_status,
+ leader: 'true' === replica.leader,
+ uri: uri_parts
+ }
+ };
+ nodes.push(node);
+ }
+
+ var shard = {
+ name: shard_status == "shard-inactive" ? s + ' (inactive)' : s,
+ data: {
+ type: 'shard',
+ state: shard_status
+ },
+ children: nodes
+ };
+ shards.push(shard);
+ }
+
+ var collection = {
+ name: c,
+ data: {
+ type: 'collection'
+ },
+ children: shards
+ };
+ graph_data.children.push(collection);
+ }
+
+ $scope.helperData.protocol = $.unique($scope.helperData.protocol);
+ $scope.helperData.host = $.unique($scope.helperData.host);
+ $scope.helperData.hostname = $.unique($scope.helperData.hostname);
+ $scope.helperData.port = $.unique($scope.helperData.port);
+ $scope.helperData.pathname = $.unique($scope.helperData.pathname);
+ $scope.helperData.replicaType = $.unique($scope.helperData.replicaType);
+ $scope.helperData.base_url = $.unique($scope.helperData.base_url);
+ $scope.helperData.core = $.unique($scope.helperData.core);
+ $scope.helperData.node_name = $.unique($scope.helperData.node_name);
+ $scope.helperData.state = $.unique($scope.helperData.state);
+ $scope.helperData.core_node = $.unique($scope.helperData.core_node);
+
+ if (data.znode && data.znode.paging) {
+ $scope.showPaging = true;
+
+ var parr = data.znode.paging.split('|');
+ if (parr.length < 3) {
+ $scope.showPaging = false;
+ } else {
+ $scope.start = Math.max(parseInt(parr[0]), 0);
+ $scope.prevEnabled = ($scope.start > 0);
+ $scope.rows = parseInt(parr[1]);
+ $scope.total = parseInt(parr[2]);
+
+ if ($scope.rows == -1) {
+ $scope.showPaging = false;
+ } else {
+ var filterType = parr.length > 3 ? parr[3] : '';
+
+ if (filterType == '' || filterType == 'none') filterType = 'status';
+
+ +$('#cloudGraphPagingFilterType').val(filterType);
+
+ var filter = parr.length > 4 ? parr[4] : '';
+ var page = Math.floor($scope.start / $scope.rows) + 1;
+ var pages = Math.ceil($scope.total / $scope.rows);
+ $scope.last = Math.min($scope.start + $scope.rows, $scope.total);
+ $scope.nextEnabled = ($scope.last < $scope.total);
+ }
+ }
+ }
+ else {
+ $scope.showPaging = false;
+ }
+ $scope.graphData = graph_data;
+ $scope.leafCount = leaf_count;
+ });
+ });
+ };
+
+ $scope.initGraph();
+ $scope.pos = 0;
+};
+
+solrAdminApp.directive('graph', function(Constants) {
+ return {
+ restrict: 'EA',
+ scope: {
+ data: "=",
+ leafCount: "=",
+ helperData: "=",
+ },
+ link: function (scope, element, attrs) {
+ var helper_path_class = function (p) {
+ var classes = ['link'];
+ classes.push('lvl-' + p.target.depth);
+
+ if (p.target.data && p.target.data.leader) {
+ classes.push('leader');
+ }
+
+ if (p.target.data && p.target.data.state) {
+ classes.push(p.target.data.state);
+ }
+
+ return classes.join(' ');
+ };
+
+ var helper_node_class = function (d) {
+ var classes = ['node'];
+ classes.push('lvl-' + d.depth);
+
+ if (d.data && d.data.leader) {
+ classes.push('leader');
+ }
+
+ if (d.data && d.data.state) {
+ if(!(d.data.type=='shard' && d.data.state=='active')){
+ classes.push(d.data.state);
+ }
+ }
+
+ return classes.join(' ');
+ };
+
+ var helper_tooltip_text = function (d) {
+ if (!d.data || !d.data.uri) {
+ return tooltip;
+ }
+
+ var tooltip = d.data.uri.core_node + " {<br/>";
+
+ if (0 !== scope.helperData.core.length) {
+ tooltip += "core: [" + d.data.uri.core + "],<br/>";
+ }
+
+ if (0 !== scope.helperData.node_name.length) {
+ tooltip += "node_name: [" + d.data.uri.node_name + "],<br/>";
+ }
+
+ tooltip += "}";
+
+ return tooltip;
+ };
+
+ var helper_node_text = function (d) {
+ if (!d.data || !d.data.uri) {
+ return d.name;
+ }
+
+ var name = d.data.uri.hostname;
+
+ if (1 !== scope.helperData.protocol.length) {
+ name = d.data.uri.protocol + '//' + name;
+ }
+
+ if (1 !== scope.helperData.port.length) {
+ name += ':' + d.data.uri.port;
+ }
+
+ if (1 !== scope.helperData.pathname.length) {
+ name += d.data.uri.pathname;
+ }
+
+ if(0 !== scope.helperData.replicaType.length) {
+ name += ' (' + d.data.uri.replicaType[0] + ')';
+ }
+
+ return name;
+ };
+
+ scope.$watch("data", function(newValue, oldValue) {
+ if (newValue) {
+ flatGraph(element, scope.data, scope.leafCount);
+ }
+
+ $('text').tooltip({
+ content: function() {
+ return $(this).attr('title');
+ }
+ });
+ });
+
+
+ function setNodeNavigationBehavior(node, view){
+ node
+ .attr('data-href', function (d) {
+ if (d.type == "node"){
+ return getNodeUrl(d, view);
+ }
+ else{
+ return "";
+ }
+ })
+ .on('click', function(d) {
+ if (d.data.type == "node"){
+ location.href = getNodeUrl(d, view);
+ }
+ });
+ }
+
+ function getNodeUrl(d, view){
+ var url = d.name + Constants.ROOT_URL + "#/~cloud";
+ if (view != undefined){
+ url += "?view=" + view;
+ }
+ return url;
+ }
+
+ var flatGraph = function(element, graphData, leafCount) {
+ var w = element.width(),
+ h = leafCount * 20;
+
+ var tree = d3.layout.tree().size([h, w - 400]);
+
+ var diagonal = d3.svg.diagonal().projection(function (d) {
+ return [d.y, d.x];
+ });
+
+ d3.select('#canvas', element).html('');
+ var vis = d3.select('#canvas', element).append('svg')
+ .attr('width', w)
+ .attr('height', h)
+ .append('g')
+ .attr('transform', 'translate(100, 0)');
+
+ var nodes = tree.nodes(graphData);
+
+ var link = vis.selectAll('path.link')
+ .data(tree.links(nodes))
+ .enter().append('path')
+ .attr('class', helper_path_class)
+ .attr('d', diagonal);
+
+ var node = vis.selectAll('g.node')
+ .data(nodes)
+ .enter().append('g')
+ .attr('class', helper_node_class)
+ .attr('transform', function (d) {
+ return 'translate(' + d.y + ',' + d.x + ')';
+ })
+
+ node.append('circle')
+ .attr('r', 4.5);
+
+ node.append('text')
+ .attr('dx', function (d) {
+ return 0 === d.depth ? -8 : 8;
+ })
+ .attr('dy', function (d) {
+ return 5;
+ })
+ .attr('text-anchor', function (d) {
+ return 0 === d.depth ? 'end' : 'start';
+ })
+ .attr("title", helper_tooltip_text)
+ .text(helper_node_text);
+
+ setNodeNavigationBehavior(node);
+ };
+ }
+ };
+});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cluster-suggestions.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cluster-suggestions.js
new file mode 100644
index 000000000..01e1964e0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cluster-suggestions.js
@@ -0,0 +1,62 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+solrAdminApp.controller('ClusterSuggestionsController',
+function($scope, $http, Constants) {
+ $scope.resetMenu("cluster-suggestion", Constants.IS_COLLECTION_PAGE);
+ $scope.data={};
+ var dataArr =[];
+ var dataJson = {};
+ //function to display suggestion
+ $http({
+ method: 'GET',
+ url: '/api/cluster/autoscaling/suggestions'
+ }).then(function successCallback(response) {
+ $scope.data = response.data;
+ $scope.parsedData = $scope.data.suggestions;
+ }, function errorCallback(response) {
+ });
+ //function to perform operation
+ $scope.postdata = function (x) {
+ x.loading = true;
+ var path=x.operation.path;
+ var command=x.operation.command;
+ var fullPath='/api/'+path;
+ console.log(fullPath);
+ console.log(command);
+ $http.post(fullPath, JSON.stringify(command)).then(function (response) {
+ if (response.data)
+ console.log(response.data);
+ x.loading = false;
+ x.done = true;
+ x.run=true;
+ $scope.msg = "Command Submitted Successfully!";
+ }, function (response) {
+ x.failed=true;
+ $scope.msg = "Service does not exist";
+ $scope.statusval = response.status;
+ $scope.statustext = response.statusText;
+ $scope.headers = response.headers();
+ });
+ };
+ $scope.showPopover = function() {
+ $scope.popup = true;
+ };
+
+ $scope.hidePopover = function () {
+ $scope.popup = false;
+ };
+});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collection-overview.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collection-overview.js
new file mode 100644
index 000000000..d1834b2bd
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collection-overview.js
@@ -0,0 +1,39 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('CollectionOverviewController',
+function($scope, $routeParams, Collections, Constants) {
+ $scope.resetMenu("collection-overview", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function() {
+ Collections.status({}, function(data) {
+ $scope.selectedCollection = data.cluster.collections[$routeParams.core];
+ $scope.selectedCollection.name = $routeParams.core;
+ $scope.rootUrl = Constants.ROOT_URL;
+ });
+ };
+
+ $scope.showReplica = function(replica) {
+ replica.show = !replica.show;
+ }
+
+ $scope.hideShard = function(shard) {
+ shard.hide = !shard.hide;
+ }
+
+ $scope.refresh();
+});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collections.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collections.js
new file mode 100644
index 000000000..111d7ea56
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/collections.js
@@ -0,0 +1,274 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('CollectionsController',
+ function($scope, $routeParams, $location, $timeout, Collections, Zookeeper, Constants){
+ $scope.resetMenu("collections", Constants.IS_ROOT_PAGE);
+
+ $scope.refresh = function() {
+
+ $scope.rootUrl = Constants.ROOT_URL + "#/~collections/" + $routeParams.collection;
+
+ Collections.status(function (data) {
+ $scope.collections = [];
+ for (var name in data.cluster.collections) {
+ var collection = data.cluster.collections[name];
+ collection.name = name;
+ var shards = collection.shards;
+ collection.shards = [];
+ for (var shardName in shards) {
+ var shard = shards[shardName];
+ shard.name = shardName;
+ shard.collection = collection.name;
+ var replicas = shard.replicas;
+ shard.replicas = [];
+ for (var replicaName in replicas) {
+ var replica = replicas[replicaName];
+ replica.name = replicaName;
+ replica.collection = collection.name;
+ replica.shard = shard.name;
+ shard.replicas.push(replica);
+ }
+ collection.shards.push(shard);
+ }
+ $scope.collections.push(collection);
+ if ($routeParams.collection == name) {
+ $scope.collection = collection;
+ }
+ }
+ if ($routeParams.collection && !$scope.collection) {
+ alert("No collection called " + $routeParams.collection)
+ $location.path("/~collections");
+ }
+ $scope.liveNodes = data.cluster.liveNodes;
+ });
+ Zookeeper.configs(function(data) {
+ $scope.configs = [];
+ var items = data.tree[0].children;
+ for (var i in items) {
+ $scope.configs.push({name: items[i].data.title});
+ }
+ });
+ };
+
+ $scope.hideAll = function() {
+ $scope.showRename = false;
+ $scope.showAdd = false;
+ $scope.showDelete = false;
+ $scope.showSwap = false;
+ $scope.showCreateAlias = false;
+ $scope.showDeleteAlias = false;
+ };
+
+ $scope.showAddCollection = function() {
+ $scope.hideAll();
+ $scope.showAdd = true;
+ $scope.newCollection = {
+ name: "",
+ routerName: "compositeId",
+ numShards: 1,
+ configName: "",
+ replicationFactor: 1,
+ maxShardsPerNode: 1,
+ autoAddReplicas: 'false'
+ };
+ };
+
+ $scope.toggleCreateAlias = function() {
+ $scope.hideAll();
+ $scope.showCreateAlias = true;
+ }
+
+ $scope.toggleDeleteAlias = function() {
+ $scope.hideAll();
+ $scope.showDeleteAlias = true;
+ Zookeeper.aliases({}, function(data){
+ if (Object.keys(data.aliases).length == 0) {
+ delete $scope.aliases;
+ } else {
+ $scope.aliases = data.aliases;
+ }
+ });
+
+ }
+
+ $scope.cancelCreateAlias = $scope.cancelDeleteAlias = function() {
+ $scope.hideAll();
+ }
+
+ $scope.createAlias = function() {
+ var collections = [];
+ for (var i in $scope.aliasCollections) {
+ collections.push($scope.aliasCollections[i].name);
+ }
+ Collections.createAlias({name: $scope.aliasToCreate, collections: collections.join(",")}, function(data) {
+ $scope.hideAll();
+ });
+ }
+ $scope.deleteAlias = function() {
+ Collections.deleteAlias({name: $scope.aliasToDelete}, function(data) {
+ $scope.hideAll();
+ });
+
+ };
+ $scope.addCollection = function() {
+ if (!$scope.newCollection.name) {
+ $scope.addMessage = "Please provide a core name";
+ } else if (false) { //@todo detect whether core exists
+ $scope.AddMessage = "A core with that name already exists";
+ } else {
+ var coll = $scope.newCollection;
+ var params = {
+ name: coll.name,
+ "router.name": coll.routerName,
+ numShards: coll.numShards,
+ "collection.configName": coll.configName,
+ replicationFactor: coll.replicationFactor,
+ maxShardsPerNode: coll.maxShardsPerNode,
+ autoAddReplicas: coll.autoAddReplicas
+ };
+ if (coll.shards) params.shards = coll.shards;
+ if (coll.routerField) params["router.field"] = coll.routerField;
+ Collections.add(params, function(data) {
+ $scope.cancelAddCollection();
+ $scope.resetMenu("collections", Constants.IS_ROOT_PAGE);
+ $location.path("/~collections/" + $scope.newCollection.name);
+ });
+ }
+ };
+
+ $scope.cancelAddCollection = function() {
+ delete $scope.addMessage;
+ $scope.showAdd = false;
+ };
+
+ $scope.showDeleteCollection = function() {
+ $scope.hideAll();
+ if ($scope.collection) {
+ $scope.showDelete = true;
+ } else {
+ alert("No collection selected.");
+ }
+ };
+
+ $scope.deleteCollection = function() {
+ if ($scope.collection.name == $scope.collectionDeleteConfirm) {
+ Collections.delete({name: $scope.collection.name}, function (data) {
+ $location.path("/~collections");
+ });
+ } else {
+ $scope.deleteMessage = "Collection names do not match.";
+ }
+ };
+
+ $scope.reloadCollection = function() {
+ if (!$scope.collection) {
+ alert("No collection selected.");
+ return;
+ }
+ Collections.reload({name: $scope.collection.name},
+ function(successData) {
+ $scope.reloadSuccess = true;
+ $timeout(function() {$scope.reloadSuccess=false}, 1000);
+ },
+ function(failureData) {
+ $scope.reloadFailure = true;
+ $timeout(function() {$scope.reloadFailure=false}, 1000);
+ $location.path("/~collections");
+ });
+ };
+
+ $scope.toggleAddReplica = function(shard) {
+ $scope.hideAll();
+ shard.showAdd = !shard.showAdd;
+ delete $scope.addReplicaMessage;
+
+ Zookeeper.liveNodes({}, function(data) {
+ $scope.nodes = [];
+ var children = data.tree[0].children;
+ for (var child in children) {
+ $scope.nodes.push(children[child].data.title);
+ }
+ });
+ };
+
+ $scope.toggleRemoveReplica = function(replica) {
+ $scope.hideAll();
+ replica.showRemove = !replica.showRemove;
+ };
+
+ $scope.toggleRemoveShard = function(shard) {
+ $scope.hideAll();
+ shard.showRemove = !shard.showRemove;
+ };
+
+ $scope.deleteShard = function(shard) {
+ Collections.deleteShard({collection: shard.collection, shard:shard.name}, function(data) {
+ shard.deleted = true;
+ $timeout(function() {
+ $scope.refresh();
+ }, 2000);
+ });
+ }
+
+ $scope.deleteReplica = function(replica) {
+ Collections.deleteReplica({collection: replica.collection, shard:replica.shard, replica:replica.name}, function(data) {
+ replica.deleted = true;
+ $timeout(function() {
+ $scope.refresh();
+ }, 2000);
+ });
+ }
+ $scope.addReplica = function(shard) {
+ var params = {
+ collection: shard.collection,
+ shard: shard.name,
+ }
+ if (shard.replicaNodeName && shard.replicaNodeName != "") {
+ params.node = shard.replicaNodeName;
+ }
+ Collections.addReplica(params, function(data) {
+ shard.replicaAdded = true;
+ $timeout(function () {
+ shard.replicaAdded = false;
+ shard.showAdd = false;
+ $$scope.refresh();
+ }, 2000);
+ });
+ };
+
+ $scope.toggleShard = function(shard) {
+ shard.show = !shard.show;
+ }
+
+ $scope.toggleReplica = function(replica) {
+ replica.show = !replica.show;
+ }
+
+ $scope.refresh();
+ }
+);
+
+var flatten = function(data) {
+ var list = [];
+ for (var name in data) {
+ var entry = data[name];
+ entry.name = name;
+ list.push(entry);
+ }
+ return list;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/core-overview.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/core-overview.js
new file mode 100644
index 000000000..0e2b3d2a6
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/core-overview.js
@@ -0,0 +1,93 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('CoreOverviewController',
+function($scope, $rootScope, $routeParams, Luke, CoreSystem, Update, Replication, Ping, Constants) {
+ $scope.resetMenu("overview", Constants.IS_CORE_PAGE);
+ $scope.refreshIndex = function() {
+ Luke.index({core: $routeParams.core},
+ function(data) {
+ $scope.index = data.index;
+ delete $scope.statsMessage;
+ },
+ function(error) {
+ $scope.statsMessage = "Luke is not configured";
+ }
+ );
+ };
+
+ $scope.refreshReplication = function() {
+ Replication.details({core: $routeParams.core},
+ function(data) {
+ $scope.isSlave = data.details.isSlave == "true";
+ $scope.isMaster = data.details.isMaster == "true";
+ $scope.replication = data.details;
+ },
+ function(error) {
+ $scope.replicationMessage = "Replication is not configured";
+ });
+ };
+
+ $scope.refreshSystem = function() {
+ CoreSystem.get({core: $routeParams.core},
+ function(data) {
+ $scope.core = data.core;
+ delete $scope.systemMessage;
+ },
+ function(error) {
+ $scope.systemMessage = "/admin/system Handler is not configured";
+ }
+ );
+ };
+
+ $scope.refreshPing = function() {
+ Ping.status({core: $routeParams.core}, function(data) {
+ if (data.error) {
+ $scope.healthcheckStatus = false;
+ if (data.error.code == 503) {
+ $scope.healthcheckMessage = 'Ping request handler is not configured with a healthcheck file.';
+ }
+ } else {
+ $scope.healthcheckStatus = data.status == "enabled";
+ }
+ });
+ };
+
+ $scope.toggleHealthcheck = function() {
+ if ($scope.healthcheckStatus) {
+ Ping.disable(
+ function(data) {$scope.healthcheckStatus = false},
+ function(error) {$scope.healthcheckMessage = error}
+ );
+ } else {
+ Ping.enable(
+ function(data) {$scope.healthcheckStatus = true},
+ function(error) {$scope.healthcheckMessage = error}
+ );
+ }
+ };
+
+ $scope.refresh = function() {
+ $scope.refreshIndex();
+ $scope.refreshReplication();
+ $scope.refreshSystem();
+ $scope.refreshPing();
+ };
+
+ $scope.refresh();
+});
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cores.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cores.js
new file mode 100644
index 000000000..202b6224c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/cores.js
@@ -0,0 +1,180 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('CoreAdminController',
+ function($scope, $routeParams, $location, $timeout, $route, Cores, Update, Constants){
+ $scope.resetMenu("cores", Constants.IS_ROOT_PAGE);
+ $scope.selectedCore = $routeParams.corename; // use 'corename' not 'core' to distinguish from /solr/:core/
+ $scope.refresh = function() {
+ Cores.get(function(data) {
+ var coreCount = 0;
+ var cores = data.status;
+ for (_obj in cores) coreCount++;
+ $scope.hasCores = coreCount >0;
+ if (!$scope.selectedCore && coreCount==0) {
+ $scope.showAddCore();
+ return;
+ } else if (!$scope.selectedCore) {
+ for (firstCore in cores) break;
+ $scope.selectedCore = firstCore;
+ $location.path("/~cores/" + $scope.selectedCore).replace();
+ }
+ $scope.core = cores[$scope.selectedCore];
+ $scope.corelist = [];
+ $scope.swapCorelist = [];
+ for (var core in cores) {
+ $scope.corelist.push(cores[core]);
+ if (cores[core] != $scope.core) {
+ $scope.swapCorelist.push(cores[core]);
+ }
+ }
+ if ($scope.swapCorelist.length>0) {
+ $scope.swapOther = $scope.swapCorelist[0].name;
+ }
+ });
+ };
+ $scope.showAddCore = function() {
+ $scope.hideAll();
+ $scope.showAdd = true;
+ $scope.newCore = {
+ name: "new_core",
+ dataDir: "data",
+ instanceDir: "new_core",
+ config: "solrconfig.xml",
+ schema: "schema.xml",
+ collection: "",
+ shard: ""
+ };
+ };
+
+ $scope.addCore = function() {
+ if (!$scope.newCore.name) {
+ $scope.addMessage = "Please provide a core name";
+ } else if (false) { //@todo detect whether core exists
+ $scope.AddMessage = "A core with that name already exists";
+ } else {
+ var params = {
+ name: $scope.newCore.name,
+ instanceDir: $scope.newCore.instanceDir,
+ config: $scope.newCore.config,
+ schema: $scope.newCore.schema,
+ dataDir: $scope.newCore.dataDir
+ };
+ if ($scope.isCloud) {
+ params.collection = $scope.newCore.collection;
+ params.shard = $scope.newCore.shard;
+ }
+ Cores.add(params, function(data) {
+ $location.path("/~cores/" + $scope.newCore.name);
+ $scope.cancelAddCore();
+ });
+ }
+ };
+
+ $scope.cancelAddCore = function() {
+ delete $scope.addMessage;
+ $scope.showAdd = false
+ };
+
+ $scope.unloadCore = function() {
+ var answer = confirm( 'Do you really want to unload Core "' + $scope.selectedCore + '"?' );
+ if( !answer ) return;
+ Cores.unload({core: $scope.selectedCore}, function(data) {
+ $location.path("/~cores");
+ });
+ };
+
+ $scope.showRenameCore = function() {
+ $scope.hideAll();
+ $scope.showRename = true;
+ };
+
+ $scope.renameCore = function() {
+ if (!$scope.other) {
+ $scope.renameMessage = "Please provide a new name for the " + $scope.selectedCore + " core";
+ } else if ($scope.other == $scope.selectedCore) {
+ $scope.renameMessage = "New name must be different from the current one";
+ } else {
+ Cores.rename({core:$scope.selectedCore, other: $scope.other}, function(data) {
+ $location.path("/~cores/" + $scope.other);
+ $scope.cancelRename();
+ });
+ }
+ };
+
+ $scope.cancelRenameCore = function() {
+ $scope.showRename = false;
+ delete $scope.renameMessage;
+ $scope.other = "";
+ };
+
+ $scope.showSwapCores = function() {
+ $scope.hideAll();
+ $scope.showSwap = true;
+ };
+
+ $scope.swapCores = function() {
+ if (!$scope.swapOther) {
+ $scope.swapMessage = "Please select a core to swap with";
+ } else if ($scope.swapOther == $scope.selectedCore) {
+ $scope.swapMessage = "Cannot swap with the same core";
+ } else {
+ Cores.swap({core: $scope.selectedCore, other: $scope.swapOther}, function(data) {
+ $location.path("/~cores/" + $scope.swapOther);
+ delete $scope.swapOther;
+ $scope.cancelSwapCores();
+ });
+ }
+ };
+
+ $scope.cancelSwapCores = function() {
+ delete $scope.swapMessage;
+ $scope.showSwap = false;
+ }
+
+ $scope.reloadCore = function() {
+ if ($scope.initFailures[$scope.selectedCore]) {
+ delete $scope.initFailures[$scope.selectedCore];
+ $scope.showInitFailures = Object.keys(data.initFailures).length>0;
+ }
+ Cores.reload({core: $scope.selectedCore},
+ function(data) {
+ if (data.error) {
+ $scope.reloadFailure = true;
+ $timeout(function() {
+ $scope.reloadFailure = false;
+ $route.reload();
+ }, 1000);
+ } else {
+ $scope.reloadSuccess = true;
+ $timeout(function () {
+ $scope.reloadSuccess = false;
+ $route.reload();
+ }, 1000);
+ }
+ });
+ };
+
+ $scope.hideAll = function() {
+ $scope.showRename = false;
+ $scope.showAdd = false;
+ $scope.showSwap = false;
+ };
+
+ $scope.refresh();
+ }
+);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/dataimport.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/dataimport.js
new file mode 100644
index 000000000..c31b6f0fb
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/dataimport.js
@@ -0,0 +1,302 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var dataimport_timeout = 2000;
+
+solrAdminApp.controller('DataImportController',
+ function($scope, $rootScope, $routeParams, $location, $timeout, $interval, $cookies, Mbeans, DataImport, Constants) {
+ $scope.resetMenu("dataimport", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function () {
+ Mbeans.info({core: $routeParams.core, cat: 'QUERY'}, function (data) {
+ var mbeans = data['solr-mbeans'][1];
+ $scope.handlers = [];
+ for (var key in mbeans) {
+ if (mbeans[key]['class'] !== key && mbeans[key]['class'] === 'org.apache.solr.handler.dataimport.DataImportHandler') {
+ $scope.handlers.push(key);
+ }
+ }
+ $scope.hasHandlers = $scope.handlers.length > 0;
+
+ if (!$routeParams.handler) {
+ $location.path("/" + $routeParams.core + "/dataimport/" + $scope.handlers[0]);
+ } else {
+ $scope.currentHandler = $routeParams.handler;
+ }
+ });
+
+ $scope.handler = $routeParams.handler;
+ if ($scope.handler && $scope.handler[0]=="/") {
+ $scope.handler = $scope.handler.substr(1);
+ }
+ if ($scope.handler) {
+ DataImport.config({core: $routeParams.core, name: $scope.handler}, function (data) {
+ try {
+ $scope.config = data.config;
+ var xml = $.parseXML(data.config);
+ $scope.entities = [];
+ $('document > entity', xml).each(function (i, element) {
+ $scope.entities.push($(element).attr('name'));
+ });
+ $scope.refreshStatus();
+ } catch (err) {
+ console.log(err);
+ }
+ });
+ }
+ $scope.lastUpdate = "unknown";
+ $scope.lastUpdateUTC = "";
+ };
+
+ $scope.toggleDebug = function () {
+ $scope.isDebugMode = !$scope.isDebugMode;
+ if ($scope.isDebugMode) {
+ // also enable Debug checkbox
+ $scope.form.showDebug = true;
+ }
+ $scope.showConfiguration = true;
+ }
+
+ $scope.toggleConfiguration = function () {
+ $scope.showConfiguration = !$scope.showConfiguration;
+ }
+
+ $scope.toggleRawStatus = function () {
+ $scope.showRawStatus = !$scope.showRawStatus;
+ }
+
+ $scope.toggleRawDebug = function () {
+ $scope.showRawDebug = !$scope.showRawDebug;
+ }
+
+ $scope.reload = function () {
+ DataImport.reload({core: $routeParams.core, name: $scope.handler}, function () {
+ $scope.reloaded = true;
+ $timeout(function () {
+ $scope.reloaded = false;
+ }, 5000);
+ $scope.refresh();
+ });
+ }
+
+ $scope.form = {
+ command: "full-import",
+ verbose: false,
+ clean: false,
+ commit: true,
+ showDebug: false,
+ custom: "",
+ core: $routeParams.core
+ };
+
+ $scope.submit = function () {
+ var params = {};
+ for (var key in $scope.form) {
+ if (key == "showDebug") {
+ if ($scope.form.showDebug) {
+ params["debug"] = true;
+ }
+ } else {
+ params[key] = $scope.form[key];
+ }
+ }
+ if (params.custom.length) {
+ var customParams = $scope.form.custom.split("&");
+ for (var i in customParams) {
+ var parts = customParams[i].split("=");
+ params[parts[0]] = parts[1];
+ }
+ }
+ delete params.custom;
+
+ if ($scope.isDebugMode) {
+ params.dataConfig = $scope.config;
+ }
+
+ params.core = $routeParams.core;
+ params.name = $scope.handler;
+
+ DataImport.post(params, function (data) {
+ $scope.rawResponse = JSON.stringify(data, null, 2);
+ $scope.refreshStatus();
+ });
+ };
+
+ $scope.abort = function () {
+ $scope.isAborting = true;
+ DataImport.abort({core: $routeParams.core, name: $scope.handler}, function () {
+ $timeout(function () {
+ $scope.isAborting = false;
+ $scope.refreshStatus();
+ }, 4000);
+ });
+ }
+
+ $scope.refreshStatus = function () {
+
+ console.log("Refresh Status");
+
+ $scope.isStatusLoading = true;
+ DataImport.status({core: $routeParams.core, name: $scope.handler}, function (data) {
+ if (data[0] == "<") {
+ $scope.hasHandlers = false;
+ return;
+ }
+
+ var now = new Date();
+ $scope.lastUpdate = now.toTimeString().split(' ').shift();
+ $scope.lastUpdateUTC = now.toUTCString();
+ var messages = data.statusMessages;
+ var messagesCount = 0;
+ for( var key in messages ) { messagesCount++; }
+
+ if (data.status == 'busy') {
+ $scope.status = "indexing";
+
+ $scope.timeElapsed = data.statusMessages['Time Elapsed'];
+ $scope.elapsedSeconds = parseSeconds($scope.timeElapsed);
+
+ var info = $scope.timeElapsed ? 'Indexing since ' + $scope.timeElapsed : 'Indexing ...';
+ $scope.info = showInfo(messages, true, info, $scope.elapsedSeconds);
+
+ } else if (messages.RolledBack) {
+ $scope.status = "failure";
+ $scope.info = showInfo(messages, true);
+ } else if (messages.Aborted) {
+ $scope.status = "aborted";
+ $scope.info = showInfo(messages, true, 'Aborting current Import ...');
+ } else if (data.status == "idle" && messagesCount != 0) {
+ $scope.status = "success";
+ $scope.info = showInfo(messages, true);
+ } else {
+ $scope.status = "idle";
+ $scope.info = showInfo(messages, false, 'No information available (idle)');
+ }
+
+ delete data.$promise;
+ delete data.$resolved;
+
+ $scope.rawStatus = JSON.stringify(data, null, 2);
+
+ $scope.isStatusLoading = false;
+ $scope.statusUpdated = true;
+ $timeout(function () {
+ $scope.statusUpdated = false;
+ }, dataimport_timeout / 2);
+ });
+ };
+
+ $scope.updateAutoRefresh = function () {
+ $scope.autorefresh = !$scope.autorefresh;
+ $cookies.dataimport_autorefresh = $scope.autorefresh ? true : null;
+ if ($scope.autorefresh) {
+ $scope.refreshTimeout = $interval($scope.refreshStatus, dataimport_timeout);
+ var onRouteChangeOff = $scope.$on('$routeChangeStart', function() {
+ $interval.cancel($scope.refreshTimeout);
+ onRouteChangeOff();
+ });
+
+ } else if ($scope.refreshTimeout) {
+ $interval.cancel($scope.refreshTimeout);
+ }
+ $scope.refreshStatus();
+ };
+
+ $scope.refresh();
+
+});
+
+var showInfo = function (messages, showFull, info_text, elapsed_seconds) {
+
+ var info = {};
+ if (info_text) {
+ info.text = info_text;
+ } else {
+ info.text = messages[''] || '';
+ // format numbers included in status nicely
+ /* @todo this pretty printing is hard to work out how to do in an Angularesque way:
+ info.text = info.text.replace(/\d{4,}/g,
+ function (match, position, string) {
+ return app.format_number(parseInt(match, 10));
+ }
+ );
+ */
+
+ var time_taken_text = messages['Time taken'];
+ info.timeTaken = parseSeconds(time_taken_text);
+ }
+ info.showDetails = false;
+
+ if (showFull) {
+ if (!elapsed_seconds) {
+ var time_taken_text = messages['Time taken'];
+ elapsed_seconds = parseSeconds(time_taken_text);
+ }
+
+ info.showDetails = true;
+
+ var document_config = {
+ 'Requests': 'Total Requests made to DataSource',
+ 'Fetched': 'Total Rows Fetched',
+ 'Skipped': 'Total Documents Skipped',
+ 'Processed': 'Total Documents Processed'
+ };
+
+ info.docs = [];
+ for (var key in document_config) {
+ var value = parseInt(messages[document_config[key]], 10);
+ var doc = {desc: document_config[key], name: key, value: value};
+ if (elapsed_seconds && key != 'Skipped') {
+ doc.speed = Math.round(value / elapsed_seconds);
+ }
+ info.docs.push(doc);
+ }
+
+ var dates_config = {
+ 'Started': 'Full Dump Started',
+ 'Aborted': 'Aborted',
+ 'Rolledback': 'Rolledback'
+ };
+
+ info.dates = [];
+ for (var key in dates_config) {
+ var value = messages[dates_config[key]];
+ if (value) {
+ value = value.replace(" ", "T")+".000Z";
+ console.log(value);
+ var date = {desc: dates_config[key], name: key, value: value};
+ info.dates.push(date);
+ }
+ }
+ }
+ return info;
+}
+
+var parseSeconds = function(time) {
+ var seconds = 0;
+ var arr = new String(time || '').split('.');
+ var parts = arr[0].split(':').reverse();
+
+ for (var i = 0; i < parts.length; i++) {
+ seconds += ( parseInt(parts[i], 10) || 0 ) * Math.pow(60, i);
+ }
+
+ if (arr[1] && 5 <= parseInt(arr[1][0], 10)) {
+ seconds++; // treat more or equal than .5 as additional second
+ }
+ return seconds;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/documents.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/documents.js
new file mode 100644
index 000000000..d38265a05
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/documents.js
@@ -0,0 +1,137 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+//helper for formatting JSON and others
+
+var DOC_PLACEHOLDER = '<doc>\n' +
+ '<field name="id">change.me</field>' +
+ '<field name="title">change.me</field>' +
+ '</doc>';
+
+var ADD_PLACEHOLDER = '<add>\n' + DOC_PLACEHOLDER + '</add>\n';
+
+solrAdminApp.controller('DocumentsController',
+ function($scope, $rootScope, $routeParams, $location, Luke, Update, FileUpload, Constants) {
+ $scope.resetMenu("documents", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function () {
+ Luke.schema({core: $routeParams.core}, function(data) {
+ //TODO: handle dynamic fields
+ delete data.schema.fields._version_;
+ $scope.fields = Object.keys(data.schema.fields);
+ });
+ $scope.document = "";
+ $scope.handler = "/update";
+ $scope.type = "json";
+ $scope.commitWithin = 1000;
+ $scope.overwrite = true;
+ };
+
+ $scope.refresh();
+
+ $scope.changeDocumentType = function () {
+ $scope.placeholder = "";
+ if ($scope.type == 'json') {
+ $scope.placeholder = '{"id":"change.me","title":"change.me"}';
+ } else if ($scope.type == 'csv') {
+ $scope.placeholder = "id,title\nchange.me,change.me";
+ } else if ($scope.type == 'solr') {
+ $scope.placeholder = ADD_PLACEHOLDER;
+ } else if ($scope.type == 'xml') {
+ $scope.placeholder = DOC_PLACEHOLDER;
+ }
+ };
+
+ $scope.addWizardField = function () {
+ if ($scope.document == "") $scope.document = "{}";
+ var doc = JSON.parse($scope.document);
+ doc[$scope.fieldName] = $scope.fieldData;
+ $scope.document = JSON.stringify(doc, null, '\t');
+ $scope.fieldData = "";
+ };
+
+ $scope.submit = function () {
+ var contentType = "";
+ var postData = "";
+ var params = {};
+ var doingFileUpload = false;
+
+ if ($scope.handler[0] == '/') {
+ params.handler = $scope.handler.substring(1);
+ } else {
+ params.handler = 'update';
+ params.qt = $scope.handler;
+ }
+
+ params.commitWithin = $scope.commitWithin;
+ params.overwrite = $scope.overwrite;
+ params.core = $routeParams.core;
+ params.wt = "json";
+
+ if ($scope.type == "json" || $scope.type == "wizard") {
+ postData = "[" + $scope.document + "]";
+ contentType = "json";
+ } else if ($scope.type == "csv") {
+ postData = $scope.document;
+ contentType = "csv";
+ } else if ($scope.type == "xml") {
+ postData = "<add>" + $scope.document + "</add>";
+ contentType = "xml";
+ } else if ($scope.type == "upload") {
+ doingFileUpload = true;
+ params.raw = $scope.literalParams;
+ } else if ($scope.type == "solr") {
+ postData = $scope.document;
+ if (postData[0] == "<") {
+ contentType = "xml";
+ } else if (postData[0] == "{" || postData[0] == '[') {
+ contentType = "json";
+ } else {
+ alert("Cannot identify content type")
+ }
+ }
+ if (!doingFileUpload) {
+ var callback = function (success) {
+ $scope.responseStatus = "success";
+ delete success.$promise;
+ delete success.$resolved;
+ $scope.response = JSON.stringify(success, null, ' ');
+ };
+ var failure = function (failure) {
+ $scope.responseStatus = failure;
+ };
+ if (contentType == "json") {
+ Update.postJson(params, postData, callback, failure);
+ } else if (contentType == "xml") {
+ Update.postXml(params, postData, callback, failure);
+ } else if (contentType == "csv") {
+ Update.postCsv(params, postData, callback, failure);
+ }
+ } else {
+ var file = $scope.fileUpload;
+ console.log('file is ' + JSON.stringify(file));
+ var uploadUrl = "/fileUpload";
+ FileUpload.upload(params, $scope.fileUpload, function (success) {
+ $scope.responseStatus = "success";
+ $scope.response = JSON.stringify(success, null, ' ');
+ }, function (failure) {
+ $scope.responseStatus = "failure";
+ $scope.response = JSON.stringify(failure, null, ' ');
+ });
+ }
+ }
+ });
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/files.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/files.js
new file mode 100644
index 000000000..c1d7abfe2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/files.js
@@ -0,0 +1,100 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var contentTypeMap = { xml : 'text/xml', html : 'text/html', js : 'text/javascript', json : 'application/json', 'css' : 'text/css' };
+var languages = {js: "javascript", xml:"xml", xsl:"xml", vm: "xml", html: "xml", json: "json", css: "css"};
+
+solrAdminApp.controller('FilesController',
+ function($scope, $rootScope, $routeParams, $location, Files, Constants) {
+ $scope.resetMenu("files", Constants.IS_COLLECTION_PAGE);
+
+ $scope.file = $location.search().file;
+ $scope.content = null;
+
+ $scope.baseurl = $location.absUrl().substr(0,$location.absUrl().indexOf("#")); // Including /solr/ context
+
+ $scope.refresh = function () {
+
+ var process = function (path, tree) {
+ var params = {core: $routeParams.core};
+ if (path.slice(-1) == '/') {
+ params.file = path.slice(0, -1);
+ } else if (path!='') {
+ params.file = path;
+ }
+
+ Files.list(params, function (data) {
+ var filenames = Object.keys(data.files);
+ filenames.sort();
+ for (var i in filenames) {
+ var file = filenames[i];
+ var filedata = data.files[file];
+ var state = undefined;
+ var children = undefined;
+
+ if (filedata.directory) {
+ file = file + "/";
+ if ($scope.file && $scope.file.indexOf(path + file) == 0) {
+ state = "open";
+ } else {
+ state = "closed";
+ }
+ children = [];
+ process(path + file, children);
+ }
+ tree.push({
+ data: {
+ title: file,
+ attr: { id: path + file}
+ },
+ children: children,
+ state: state
+ });
+ }
+ });
+ }
+ $scope.tree = [];
+ process("", $scope.tree);
+
+ if ($scope.file && $scope.file != '' && $scope.file.split('').pop()!='/') {
+ var extension;
+ if ($scope.file == "managed-schema") {
+ extension = contentTypeMap['xml'];
+ } else {
+ extension = $scope.file.match( /\.(\w+)$/)[1] || '';
+ }
+ var contentType = (contentTypeMap[extension] || 'text/plain' ) + ';charset=utf-8';
+
+ Files.get({core: $routeParams.core, file: $scope.file, contentType: contentType}, function(data) {
+ $scope.content = data.data;
+ $scope.url = data.config.url + "?" + $.param(data.config.params); // relative URL
+ if (contentType.indexOf("text/plain") && (data.data.indexOf("<?xml")>=0) || data.data.indexOf("<!--")>=0) {
+ $scope.lang = "xml";
+ } else {
+ $scope.lang = languages[extension] || "txt";
+ }
+ });
+ }
+ };
+
+ $scope.showTreeLink = function(data) {
+ var file = data.args[0].id;
+ $location.search({file:file});
+ };
+
+ $scope.refresh();
+ });
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/index.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/index.js
new file mode 100644
index 000000000..f7ce5a8d2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/index.js
@@ -0,0 +1,97 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+solrAdminApp.controller('IndexController', function($scope, System, Cores, Constants) {
+ $scope.resetMenu("index", Constants.IS_ROOT_PAGE);
+ $scope.reload = function() {
+ System.get(function(data) {
+ $scope.system = data;
+
+ // load average
+ var load_average = ( data.system.uptime || '' ).match( /load averages?: (\d+[.,]\d\d),? (\d+[.,]\d\d),? (\d+[.,]\d\d)/ );
+ if (load_average) {
+ for (var i=0;i<2;i++) {
+ load_average[i]=load_average[i].replace(",","."); // for European users
+ }
+ $scope.load_average = load_average.slice(1);
+ }
+
+ // physical memory
+ var memoryMax = parse_memory_value(data.system.totalPhysicalMemorySize);
+ $scope.memoryTotal = parse_memory_value(data.system.totalPhysicalMemorySize - data.system.freePhysicalMemorySize);
+ $scope.memoryPercentage = ($scope.memoryTotal / memoryMax * 100).toFixed(1)+ "%";
+ $scope.memoryMax = pretty_print_bytes(memoryMax);
+ $scope.memoryTotalDisplay = pretty_print_bytes($scope.memoryTotal);
+
+ // swap space
+ var swapMax = parse_memory_value(data.system.totalSwapSpaceSize);
+ $scope.swapTotal = parse_memory_value(data.system.totalSwapSpaceSize - data.system.freeSwapSpaceSize);
+ $scope.swapPercentage = ($scope.swapTotal / swapMax * 100).toFixed(1)+ "%";
+ $scope.swapMax = pretty_print_bytes(swapMax);
+ $scope.swapTotalDisplay = pretty_print_bytes($scope.swapTotal);
+
+ // file handles
+ $scope.fileDescriptorPercentage = (data.system.openFileDescriptorCount / data.system.maxFileDescriptorCount *100).toFixed(1) + "%";
+
+ // java memory
+ var javaMemoryMax = parse_memory_value(data.jvm.memory.raw.max || data.jvm.memory.max);
+ $scope.javaMemoryTotal = parse_memory_value(data.jvm.memory.raw.total || data.jvm.memory.total);
+ $scope.javaMemoryUsed = parse_memory_value(data.jvm.memory.raw.used || data.jvm.memory.used);
+ $scope.javaMemoryTotalPercentage = ($scope.javaMemoryTotal / javaMemoryMax *100).toFixed(1) + "%";
+ $scope.javaMemoryUsedPercentage = ($scope.javaMemoryUsed / $scope.javaMemoryTotal *100).toFixed(1) + "%";
+ $scope.javaMemoryPercentage = ($scope.javaMemoryUsed / javaMemoryMax * 100).toFixed(1) + "%";
+ $scope.javaMemoryTotalDisplay = pretty_print_bytes($scope.javaMemoryTotal);
+ $scope.javaMemoryUsedDisplay = pretty_print_bytes($scope.javaMemoryUsed); // @todo These should really be an AngularJS Filter: {{ javaMemoryUsed | bytes }}
+ $scope.javaMemoryMax = pretty_print_bytes(javaMemoryMax);
+
+ // no info bar:
+ $scope.noInfo = !(
+ data.system.totalPhysicalMemorySize && data.system.freePhysicalMemorySize &&
+ data.system.totalSwapSpaceSize && data.system.freeSwapSpaceSize &&
+ data.system.openFileDescriptorCount && data.system.maxFileDescriptorCount);
+
+ // command line args:
+ $scope.commandLineArgs = data.jvm.jmx.commandLineArgs.sort();
+ });
+ };
+ $scope.reload();
+});
+
+var parse_memory_value = function( value ) {
+ if( value !== Number( value ) )
+ {
+ var units = 'BKMGTPEZY';
+ var match = value.match( /^(\d+([,\.]\d+)?) (\w).*$/ );
+ var value = parseFloat( match[1] ) * Math.pow( 1024, units.indexOf( match[3].toUpperCase() ) );
+ }
+
+ return value;
+};
+
+var pretty_print_bytes = function(byte_value) {
+ var unit = null;
+
+ byte_value /= 1024;
+ byte_value /= 1024;
+ unit = 'MB';
+
+ if( 1024 <= byte_value ) {
+ byte_value /= 1024;
+ unit = 'GB';
+ }
+ return byte_value.toFixed( 2 ) + ' ' + unit;
+};
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/java-properties.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/java-properties.js
new file mode 100644
index 000000000..001edfb1a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/java-properties.js
@@ -0,0 +1,45 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('JavaPropertiesController',
+ function($scope, Properties, Constants){
+ $scope.resetMenu("java-props", Constants.IS_ROOT_PAGE);
+ $scope.refresh = function() {
+ Properties.get(function(data) {
+ var sysprops = data["system.properties"];
+ var sep = sysprops["path.separator"]
+ var props = [];
+ for (var key in sysprops) {
+ var value = sysprops[key];
+ var key = key.replace(/\./g, '.&#8203;');
+ if (key.indexOf(".path")!=-1 || key.indexOf(".dirs")) {
+ var values = [];
+ var parts = value.split(sep);
+ for (var i in parts) {
+ values.push({pos:i, value:parts[i]})
+ }
+ props.push({name: key, values: values});
+ } else {
+ props.push({name: key, values: [value]});
+ }
+ }
+ $scope.props = props;
+ });
+ };
+
+ $scope.refresh();
+ });
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/logging.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/logging.js
new file mode 100644
index 000000000..585c90a21
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/logging.js
@@ -0,0 +1,158 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var format_time_content = function( time, timeZone ) {
+ var format_time_options = {};
+ if (timeZone && timeZone!="Local") {
+ format_time_options.timeZone = timeZone;
+ }
+ return time.toLocaleString( undefined, format_time_options );
+}
+
+solrAdminApp.controller('LoggingController',
+ function($scope, $timeout, $cookies, Logging, Constants){
+ $scope.resetMenu("logging", Constants.IS_ROOT_PAGE);
+ $scope.timezone = $cookies.logging_timezone || "Local";
+ $scope.refresh = function() {
+ Logging.events(function(data) {
+ $scope.since = new Date();
+ $scope.sinceDisplay = format_time_content($scope.since, "Local");
+ var events = data.history.docs;
+ for (var i=0; i<events.length; i++) {
+ var event = events[i];
+ var time = new Date(event.time);
+ event.local_time = format_time_content(time, "Local");
+ event.utc_time = format_time_content(time, "UTC");
+ event.loggerBase = event.logger.split( '.' ).pop();
+
+ if( !event.trace ) {
+ var lines = event.message.split( "\n" );
+ if( lines.length > 1) {
+ event.trace = event.message;
+ event.message = lines[0];
+ }
+ }
+ event.message = event.message.replace(/,/g, ',&#8203;');
+ event.showTrace = false;
+ }
+ $scope.events = events;
+ $scope.watcher = data.watcher;
+ /* @todo sticky_mode
+ // state element is in viewport
+ sticky_mode = ( state.position().top <= $( window ).scrollTop() + $( window ).height() - ( $( 'body' ).height() - state.position().top ) );
+ // initial request
+ if( 0 === since ) {
+ sticky_mode = true;
+ }
+ $scope.loggingEvents = events;
+
+ if( sticky_mode )
+ {
+ $( 'body' )
+ .animate
+ (
+ { scrollTop: state.position().top },
+ 1000
+ );
+ }
+ */
+ });
+ $scope.timeout = $timeout($scope.refresh, 10000);
+ var onRouteChangeOff = $scope.$on('$routeChangeStart', function() {
+ $timeout.cancel($scope.timeout);
+ onRouteChangeOff();
+ });
+ };
+ $scope.refresh();
+ $scope.toggleRefresh = function() {
+ if(!$scope.stopped) {
+ $scope.stopped = true;
+ $timeout.cancel($scope.timeout);
+ } else {
+ $scope.stopped = false;
+ $scope.timeout = $timeout($scope.refresh, 10000);
+ }
+ };
+ $scope.toggleTimezone = function() {
+ $scope.timezone = ($scope.timezone=="Local") ? "UTC":"Local";
+ $cookies.logging_timezone = $scope.timezone;
+ }
+ $scope.toggleRow = function(event) {
+ event.showTrace =! event.showTrace;
+ };
+ }
+)
+
+.controller('LoggingLevelController',
+ function($scope, Logging) {
+ $scope.resetMenu("logging-levels");
+
+ var packageOf = function(logger) {
+ var parts = logger.name.split(".");
+ return !parts.pop() ? "" : parts.join(".");
+ };
+
+ var shortNameOf = function(logger) {return logger.name.split(".").pop();}
+
+ var makeTree = function(loggers, packag) {
+ var tree = [];
+ for (var i=0; i<loggers.length; i++) {
+ var logger = loggers[i];
+ logger.packag = packageOf(logger);
+ logger.short = shortNameOf(logger);
+ if (logger.packag == packag) {
+ logger.children = makeTree(loggers, logger.name);
+ tree.push(logger);
+ }
+ }
+ return tree;
+ };
+
+ $scope.refresh = function() {
+ Logging.levels(function(data) {
+ $scope.logging = makeTree(data.loggers, "");
+ $scope.watcher = data.watcher;
+ $scope.levels = [];
+ for (level in data.levels) {
+ $scope.levels.push({name:data.levels[level], pos:level});
+ }
+ });
+ };
+
+ $scope.toggleOptions = function(logger) {
+ if (logger.showOptions) {
+ logger.showOptions = false;
+ delete $scope.currentLogger;
+ } else {
+ if ($scope.currentLogger) {
+ $scope.currentLogger.showOptions = false;
+ }
+ logger.showOptions = true;
+ $scope.currentLogger = logger;
+ }
+ };
+
+ $scope.setLevel = function(logger, newLevel) {
+ var setString = logger.name + ":" + newLevel;
+ logger.showOptions = false;
+ Logging.setLevel({set: setString}, function(data) {
+ $scope.refresh();
+ });
+ };
+
+ $scope.refresh();
+ });
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/login.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/login.js
new file mode 100644
index 000000000..8127c6fda
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/login.js
@@ -0,0 +1,317 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('LoginController',
+ ['$scope', '$routeParams', '$rootScope', '$location', '$window', 'AuthenticationService', 'Constants',
+ function ($scope, $routeParams, $rootScope, $location, $window, AuthenticationService, Constants) {
+ $scope.resetMenu("login", Constants.IS_ROOT_PAGE);
+ $scope.subPath = $routeParams.route;
+ $rootScope.exceptions = {};
+
+ // Session variables set in app.js 401 interceptor
+ var wwwAuthHeader = sessionStorage.getItem("auth.wwwAuthHeader");
+ var authScheme = sessionStorage.getItem("auth.scheme");
+ if (wwwAuthHeader) {
+ // Parse www-authenticate header
+ var wwwHeader = wwwAuthHeader.match(/(\w+)(\s+)?(.*)/);
+ authScheme = "unknown";
+ var authParams = {};
+ if (wwwHeader && wwwHeader.length >= 1)
+ authScheme = wwwHeader[1];
+ if (wwwHeader && wwwHeader.length >= 3)
+ authParams = www_auth_parse_params(wwwHeader[3]);
+ if (typeof authParams === 'string' || authParams instanceof String) {
+ $scope.authParamsError = authParams;
+ } else {
+ $scope.authParamsError = undefined;
+ }
+ var realm = authParams['realm'];
+ sessionStorage.setItem("auth.realm", realm);
+ if (authScheme === 'Basic' || authScheme === 'xBasic') {
+ authScheme = 'Basic';
+ }
+ sessionStorage.setItem("auth.scheme", authScheme);
+ }
+
+ var supportedSchemes = ['Basic', 'Bearer', 'Negotiate'];
+ $scope.authSchemeSupported = supportedSchemes.includes(authScheme);
+
+ if (authScheme === 'Bearer') {
+ // Check for OpenId redirect response
+ var errorText = "";
+ $scope.isCallback = false;
+ if ($scope.subPath === 'callback') {
+ $scope.isCallback = true;
+ var hash = $location.hash();
+ var hp = AuthenticationService.decodeHashParams(hash);
+ var expectedState = sessionStorage.getItem("auth.stateRandom") + "_" + sessionStorage.getItem("auth.location");
+ sessionStorage.setItem("auth.state", "error");
+ if (hp['access_token'] && hp['token_type'] && hp['state']) {
+ // Validate state
+ if (hp['state'] !== expectedState) {
+ $scope.error = "Problem with auth callback";
+ console.log("Expected state param " + expectedState + " but got " + hp['state']);
+ errorText += "Invalid values in state parameter. ";
+ }
+ // Validate token type
+ if (hp['token_type'].toLowerCase() !== "bearer") {
+ console.log("Expected token_type param 'bearer', but got " + hp['token_type']);
+ errorText += "Invalid values in token_type parameter. ";
+ }
+ // Unpack ID token and validate nonce, get username
+ if (hp['id_token']) {
+ var idToken = hp['id_token'].split(".");
+ if (idToken.length === 3) {
+ var payload = AuthenticationService.decodeJwtPart(idToken[1]);
+ if (!payload['nonce'] || payload['nonce'] !== sessionStorage.getItem("auth.nonce")) {
+ errorText += "Invalid 'nonce' value, possible attack detected. Please log in again. ";
+ }
+
+ if (errorText === "") {
+ sessionStorage.setItem("auth.username", payload['sub']);
+ sessionStorage.setItem("auth.header", "Bearer " + hp['access_token']);
+ sessionStorage.removeItem("auth.statusText");
+ sessionStorage.removeItem("auth.stateRandom");
+ sessionStorage.removeItem("auth.wwwAuthHeader");
+ console.log("User " + payload['sub'] + " is logged in");
+ var redirectTo = sessionStorage.getItem("auth.location");
+ console.log("Redirecting to stored location " + redirectTo);
+ sessionStorage.setItem("auth.state", "authenticated");
+ sessionStorage.removeItem("http401");
+ $location.path(redirectTo).hash("");
+ }
+ } else {
+ console.log("Expected JWT compact id_token param but got " + idToken);
+ errorText += "Invalid values in id_token parameter. ";
+ }
+ } else {
+ console.log("Callback was missing the id_token parameter, could not validate nonce.");
+ errorText += "Callback was missing the id_token parameter, could not validate nonce. ";
+ }
+ if (hp['access_token'].split(".").length !== 3) {
+ console.log("Expected JWT compact access_token param but got " + hp['access_token']);
+ errorText += "Invalid values in access_token parameter. ";
+ }
+ if (errorText !== "") {
+ $scope.error = "Problems with OpenID callback";
+ $scope.errorDescription = errorText;
+ $scope.http401 = "true";
+ }
+ // End callback processing
+ } else if (hp['error']) {
+ // The callback had errors
+ console.log("Error received from idp: " + hp['error']);
+ var errorDescriptions = {};
+ errorDescriptions['invalid_request'] = "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.";
+ errorDescriptions['unauthorized_client'] = "The client is not authorized to request an access token using this method.";
+ errorDescriptions['access_denied'] = "The resource owner or authorization server denied the request.";
+ errorDescriptions['unsupported_response_type'] = "The authorization server does not support obtaining an access token using this method.";
+ errorDescriptions['invalid_scope'] = "The requested scope is invalid, unknown, or malformed.";
+ errorDescriptions['server_error'] = "The authorization server encountered an unexpected condition that prevented it from fulfilling the request.";
+ errorDescriptions['temporarily_unavailable'] = "The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.";
+ $scope.error = "Callback from Id Provider contained error. ";
+ if (hp['error_description']) {
+ $scope.errorDescription = decodeURIComponent(hp['error_description']);
+ } else {
+ $scope.errorDescription = errorDescriptions[hp['error']];
+ }
+ if (hp['error_uri']) {
+ $scope.errorDescription += " More information at " + hp['error_uri'] + ". ";
+ }
+ if (hp['state'] !== expectedState) {
+ $scope.errorDescription += "The state parameter returned from ID Provider did not match the one we sent.";
+ }
+ sessionStorage.setItem("auth.state", "error");
+ }
+ }
+ }
+
+ if (errorText === "" && !$scope.error && authParams) {
+ $scope.error = authParams['error'];
+ $scope.errorDescription = authParams['error_description'];
+ $scope.authData = AuthenticationService.getAuthDataHeader();
+ }
+
+ $scope.authScheme = sessionStorage.getItem("auth.scheme");
+ $scope.authRealm = sessionStorage.getItem("auth.realm");
+ $scope.wwwAuthHeader = sessionStorage.getItem("auth.wwwAuthHeader");
+ $scope.statusText = sessionStorage.getItem("auth.statusText");
+ $scope.authLocation = sessionStorage.getItem("auth.location");
+ $scope.authLoggedinUser = sessionStorage.getItem("auth.username");
+ $scope.authHeader = sessionStorage.getItem("auth.header");
+
+ $scope.login = function () {
+ AuthenticationService.SetCredentials($scope.username, $scope.password);
+ $location.path($scope.authLocation); // Redirect to the location that caused the login prompt
+ };
+
+ $scope.logout = function() {
+ // reset login status
+ AuthenticationService.ClearCredentials();
+ $location.path("/");
+ };
+
+ $scope.jwtLogin = function () {
+ var stateRandom = Math.random().toString(36).substr(2);
+ sessionStorage.setItem("auth.stateRandom", stateRandom);
+ var authState = stateRandom + "_" + sessionStorage.getItem("auth.location");
+ var authNonce = Math.random().toString(36).substr(2) + Math.random().toString(36).substr(2) + Math.random().toString(36).substr(2);
+ sessionStorage.setItem("auth.nonce", authNonce);
+ var params = {
+ "response_type" : "id_token token",
+ "client_id" : $scope.authData['client_id'],
+ "redirect_uri" : $window.location.href.split('#')[0],
+ "scope" : "openid " + $scope.authData['scope'],
+ "state" : authState,
+ "nonce" : authNonce
+ };
+
+ var endpointBaseUrl = $scope.authData['authorizationEndpoint'];
+ var loc = endpointBaseUrl + "?" + paramsToString(params);
+ console.log("Redirecting to " + loc);
+ sessionStorage.setItem("auth.state", "expectCallback");
+ $window.location.href = loc;
+
+ function paramsToString(params) {
+ var arr = [];
+ for (var p in params) {
+ if( params.hasOwnProperty(p) ) {
+ arr.push(p + "=" + encodeURIComponent(params[p]));
+ }
+ }
+ return arr.join("&");
+ }
+ };
+
+ $scope.jwtIsLoginNode = function() {
+ var redirect = $scope.authData ? $scope.authData['redirect_uris'] : undefined;
+ if (redirect && Array.isArray(redirect) && redirect.length > 0) {
+ var isLoginNode = false;
+ redirect.forEach(function(uri) { // Check that current node URL is among the configured callback URIs
+ if ($window.location.href.startsWith(uri)) isLoginNode = true;
+ });
+ return isLoginNode;
+ } else {
+ return true; // no redirect UIRs configured, all nodes are potential login nodes
+ }
+ };
+
+ $scope.jwtFindLoginNode = function() {
+ var redirect = $scope.authData ? $scope.authData['redirect_uris'] : undefined;
+ if (redirect && Array.isArray(redirect) && redirect.length > 0) {
+ var loginNode = redirect[0];
+ redirect.forEach(function(uri) { // if current node is in list, return its callback uri
+ if ($window.location.href.startsWith(uri)) loginNode = uri;
+ });
+ return loginNode;
+ } else {
+ return $window.location.href.split('#')[0]; // Return base url of current URL as the url to use
+ }
+ };
+
+ // Redirect to login node if this is not a valid one
+ $scope.jwtGotoLoginNode = function() {
+ if (!$scope.jwtIsLoginNode()) {
+ $window.location.href = $scope.jwtFindLoginNode();
+ }
+ };
+
+ $scope.jwtLogout = function() {
+ // reset login status
+ AuthenticationService.ClearCredentials();
+ $location.path("/");
+ };
+
+ $scope.isLoggedIn = function() {
+ return (sessionStorage.getItem("auth.username") !== null);
+ };
+ }]);
+
+// This function is copied and adapted from MIT-licensed https://github.com/randymized/www-authenticate/blob/master/lib/parsers.js
+www_auth_parse_params= function (header) {
+ // This parser will definitely fail if there is more than one challenge
+ var params = {};
+ var tok, last_tok, _i, _len, key, value;
+ var state= 0; //0: token,
+ var m= header.split(/([",=])/);
+ for (_i = 0, _len = m.length; _i < _len; _i++) {
+ last_tok= tok;
+ tok = m[_i];
+ if (!tok.length) continue;
+ switch (state) {
+ case 0: // token
+ key= tok.trim();
+ state= 1; // expect equals
+ continue;
+ case 1: // expect equals
+ if ('=' != tok) return 'Equal sign was expected after '+key;
+ state= 2;
+ continue;
+ case 2: // expect value
+ if ('"' == tok) {
+ value= '';
+ state= 3; // expect quoted
+ continue;
+ }
+ else {
+ params[key]= value= tok.trim();
+ state= 9; // expect comma or end
+ continue;
+ }
+ case 3: // handling quoted string
+ if ('"' == tok) {
+ state= 8; // end quoted
+ continue;
+ }
+ else {
+ value+= tok;
+ state= 3; // continue accumulating quoted string
+ continue;
+ }
+ case 8: // end quote encountered
+ if ('"' == tok) {
+ // double quoted
+ value+= '"';
+ state= 3; // back to quoted string
+ continue;
+ }
+ if (',' == tok) {
+ params[key]= value;
+ state= 0;
+ continue;
+ }
+ else {
+ return 'Unexpected token ('+tok+') after '+value+'"';
+ }
+ continue;
+ case 9: // expect commma
+ if (',' != tok) return 'Comma expected after '+value;
+ state= 0;
+ continue;
+ }
+ }
+ switch (state) { // terminal state
+ case 0: // Empty or ignoring terminal comma
+ case 9: // Expecting comma or end of header
+ return params;
+ case 8: // Last token was end quote
+ params[key]= value;
+ return params;
+ default:
+ return 'Unexpected end of www-authenticate value.';
+ }
+};
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/plugins.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/plugins.js
new file mode 100644
index 000000000..a537b37d7
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/plugins.js
@@ -0,0 +1,167 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('PluginsController',
+ function($scope, $rootScope, $routeParams, $location, Mbeans, Constants) {
+ $scope.resetMenu("plugins", Constants.IS_CORE_PAGE);
+
+ if ($routeParams.legacytype) {
+ // support legacy URLs. Angular cannot change #path without reloading controller
+ $location.path("/"+$routeParams.core+"/plugins");
+ $location.search("type", $routeParams.legacytype);
+ return;
+ }
+
+ $scope.refresh = function() {
+ Mbeans.stats({core: $routeParams.core}, function (data) {
+ var type = $location.search().type;
+ $scope.types = getPluginTypes(data, type);
+ $scope.type = getSelectedType($scope.types, type);
+
+ if ($scope.type && $routeParams.entry) {
+ $scope.plugins = $routeParams.entry.split(",");
+ openPlugins($scope.type, $scope.plugins);
+ } else {
+ $scope.plugins = [];
+ }
+ });
+ };
+
+ $scope.selectPluginType = function(type) {
+ $location.search({entry:null, type: type.lower});
+ $scope.type = type;
+ };
+
+ $scope.selectPlugin = function(plugin) {
+ plugin.open = !plugin.open;
+
+ if (plugin.open) {
+ $scope.plugins.push(plugin.name);
+ } else {
+ $scope.plugins.splice($scope.plugins.indexOf(plugin.name), 1);
+ }
+
+ if ($scope.plugins.length==0) {
+ $location.search("entry", null);
+ } else {
+ $location.search("entry", $scope.plugins.join(','));
+ }
+ }
+
+ $scope.startRecording = function() {
+ $scope.isRecording = true;
+ Mbeans.reference({core: $routeParams.core}, function(data) {
+ $scope.reference = data.reference;
+ console.log($scope.reference);
+ })
+ }
+
+ $scope.stopRecording = function() {
+ $scope.isRecording = false;
+ console.log($scope.reference);
+ Mbeans.delta({core: $routeParams.core}, $scope.reference, function(data) {
+ parseDelta($scope.types, data);
+ });
+ }
+
+ $scope.refresh();
+ });
+
+var getPluginTypes = function(data, selected) {
+ var keys = [];
+ var mbeans = data["solr-mbeans"];
+ for (var i=0; i<mbeans.length; i+=2) {
+ var key = mbeans[i];
+ var lower = key.toLowerCase();
+ var plugins = getPlugins(mbeans[i+1]);
+ if (plugins.length == 0) continue;
+ keys.push({name: key,
+ selected: lower == selected,
+ changes: 0,
+ lower: lower,
+ plugins: plugins
+ });
+ }
+ keys.sort(function(a,b) {return a.name > b.name});
+ return keys;
+};
+
+var getPlugins = function(data) {
+ var plugins = [];
+ for (var key in data) {
+ var pluginProperties = data[key];
+ var stats = pluginProperties.stats;
+ delete pluginProperties.stats;
+ for (var stat in stats) {
+ // add breaking space after a bracket or @ to handle wrap long lines:
+ stats[stat] = new String(stats[stat]).replace( /([\(@])/g, '$1&#8203;');
+ }
+ plugin = {name: key, changed: false, stats: stats, open:false};
+ plugin.properties = pluginProperties;
+ plugins.push(plugin);
+ }
+ plugins.sort(function(a,b) {return a.name > b.name});
+ return plugins;
+};
+
+var getSelectedType = function(types, selected) {
+ if (selected) {
+ for (var i in types) {
+ if (types[i].lower == selected) {
+ return types[i];
+ }
+ }
+ }
+};
+
+var parseDelta = function(types, data) {
+
+ var getByName = function(list, name) {
+ for (var i in list) {
+ if (list[i].name == name) return list[i];
+ }
+ }
+
+ var mbeans = data["solr-mbeans"]
+ for (var i=0; i<mbeans.length; i+=2) {
+ var typeName = mbeans[i];
+ var type = getByName(types, typeName);
+ var plugins = mbeans[i+1];
+ for (var key in plugins) {
+ var changedPlugin = plugins[key];
+ if (changedPlugin._changed_) {
+ var plugin = getByName(type.plugins, key);
+ var stats = changedPlugin.stats;
+ delete changedPlugin.stats;
+ plugin.properties = changedPlugin;
+ for (var stat in stats) {
+ // add breaking space after a bracket or @ to handle wrap long lines:
+ plugin.stats[stat] = new String(stats[stat]).replace( /([\(@])/g, '$1&#8203;');
+ }
+ plugin.changed = true;
+ type.changes++;
+ }
+ }
+ }
+};
+
+var openPlugins = function(type, selected) {
+ for (var i in type.plugins) {
+ var plugin = type.plugins[i];
+ plugin.open = selected.indexOf(plugin.name)>=0;
+ }
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/query.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/query.js
new file mode 100644
index 000000000..7267b0009
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/query.js
@@ -0,0 +1,118 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('QueryController',
+ function($scope, $routeParams, $location, Query, Constants){
+ $scope.resetMenu("query", Constants.IS_COLLECTION_PAGE);
+
+ // @todo read URL parameters into scope
+ $scope.query = {q:'*:*'};
+ $scope.filters = [{fq:""}];
+ $scope.dismax = {defType: "dismax"};
+ $scope.edismax = {defType: "edismax", stopwords: true, lowercaseOperators: false};
+ $scope.hl = {hl:"on"};
+ $scope.facet = {facet: "on"};
+ $scope.spatial = {};
+ $scope.spellcheck = {spellcheck:"on"};
+ $scope.qt = "/select";
+
+ $scope.doQuery = function() {
+ var params = {};
+
+ var set = function(key, value) {
+ if (params[key]) {
+ params[key].push(value);
+ } else {
+ params[key] = [value];
+ }
+ }
+ var copy = function(params, query) {
+ for (var key in query) {
+ terms = query[key];
+ // Booleans have no length property - only set them if true
+ if (((typeof(terms) == typeof(true) && terms) || terms.length > 0) && key[0]!="$") {
+ set(key, terms);
+ }
+ }
+ };
+
+ copy(params, $scope.query);
+
+ if ($scope.isDismax) copy(params, $scope.dismax);
+ if ($scope.isEdismax) copy(params, $scope.edismax);
+ if ($scope.isHighlight) copy(params, $scope.hl);
+ if ($scope.isFacet) copy(params, $scope.facet);
+ if ($scope.isSpatial) copy(params, $scope.spatial);
+ if ($scope.isSpellcheck) copy(params, $scope.spellcheck);
+
+ if ($scope.rawParams) {
+ var rawParams = $scope.rawParams.split(/[&\n]/);
+ for (var i in rawParams) {
+ var param = rawParams[i];
+ var equalPos = param.indexOf("=");
+ if (equalPos > -1) {
+ set(param.substring(0, equalPos), param.substring(equalPos+1));
+ } else {
+ set(param, ""); // Use empty value for params without "="
+ }
+ }
+ }
+
+ var qt = $scope.qt ? $scope.qt : "/select";
+
+ for (var filter in $scope.filters) {
+ copy(params, $scope.filters[filter]);
+ }
+
+ params.core = $routeParams.core;
+ if (qt[0] == '/') {
+ params.handler = qt.substring(1);
+ } else { // Support legacy style handleSelect=true configs
+ params.handler = "select";
+ set("qt", qt);
+ }
+ var url = Query.url(params);
+ Query.query(params, function(data) {
+ $scope.lang = $scope.query.wt;
+ if ($scope.lang == undefined || $scope.lang == '') {
+ $scope.lang = "json";
+ }
+ $scope.response = data;
+ // Use relative URL to make it also work through proxies that may have a different host/port/context
+ $scope.url = url;
+ $scope.hostPortContext = $location.absUrl().substr(0,$location.absUrl().indexOf("#")); // For display only
+ });
+ };
+
+ if ($location.search().q) {
+ $scope.query.q = $location.search()["q"];
+ $scope.doQuery();
+ }
+
+ $scope.removeFilter = function(index) {
+ if ($scope.filters.length === 1) {
+ $scope.filters = [{fq: ""}];
+ } else {
+ $scope.filters.splice(index, 1);
+ }
+ };
+
+ $scope.addFilter = function(index) {
+ $scope.filters.splice(index+1, 0, {fq:""});
+ };
+ }
+);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/replication.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/replication.js
new file mode 100644
index 000000000..9f7ac3e41
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/replication.js
@@ -0,0 +1,235 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('ReplicationController',
+ function($scope, $rootScope, $routeParams, $interval, $timeout, Replication, Constants) {
+ $scope.resetMenu("replication", Constants.IS_CORE_PAGE);
+
+ $scope.iterationCount = 1;
+
+ $scope.refresh = function() {
+ Replication.details({core:$routeParams.core}, function(response) {
+ var timeout;
+ var interval;
+ if ($scope.interval) $interval.cancel($scope.interval);
+ $scope.isSlave = (response.details.isSlave === 'true');
+ if ($scope.isSlave) {
+ $scope.progress = getProgressDetails(response.details.slave);
+ $scope.iterations = getIterations(response.details.slave);
+ $scope.versions = getSlaveVersions(response.details);
+ $scope.settings = getSlaveSettings(response.details);
+ if ($scope.settings.isReplicating) {
+ timeout = $timeout($scope.refresh, 1000);
+ } else if(!$scope.settings.isPollingDisabled && $scope.settings.pollInterval) {
+ interval = $scope.interval = $interval(function() {
+ $scope.settings.tick--;
+ }, 1000, $scope.settings.tick);
+ timeout = $timeout($scope.refresh, 1000*(1+$scope.settings.tick));
+ }
+ } else {
+ $scope.versions = getMasterVersions(response.details);
+ }
+ $scope.master = getMasterSettings(response.details, $scope.isSlave);
+
+ var onRouteChangeOff = $scope.$on('$routeChangeStart', function() {
+ if (interval) $interval.cancel(interval);
+ if (timeout) $timeout.cancel(timeout);
+ onRouteChangeOff();
+ });
+ });
+
+ };
+
+ $scope.execute = function(command) {
+ Replication.command({core:$routeParams.core, command:command}, function(data){$scope.refresh()});
+ }
+
+ $scope.showIterations = function() { $scope.iterationCount = 100000}; // limitTo should accept undefined, but doesn't work.
+ $scope.hideIterations = function() { $scope.iterationCount = 1};
+
+ $scope.refresh();
+ });
+
+var getProgressDetails = function(progress) {
+
+ progress.timeRemaining = parseSeconds(progress.timeRemaining);
+ progress.totalPercent = parseInt(progress.totalPercent);
+ if (progress.totalPercent === 0) {
+ progress.totalPercentWidth = "1px";
+ } else {
+ progress.totalPercentWidth = progress.totalPercent + "%";
+ }
+ progress.currentFileSizePercent = parseInt(progress.currentFileSizePercent);
+
+ if (!progress.indexReplicatedAtList) {
+ progress.indexReplicatedAtList = [];
+ }
+
+ if (!progress.replicationFailedAtList) {
+ progress.replicationFailedAtList = [];
+ }
+ return progress;
+};
+
+var getIterations = function(slave) {
+
+ var iterations = [];
+
+ var find = function(list, date) {
+ return list.filter(function(e) {return e.date == date});
+ };
+
+ for (var i in slave.indexReplicatedAtList) {
+ var date = slave.indexReplicatedAtList[i];
+ var iteration = {date:date, status:"replicated", latest: false};
+ if (date == slave.indexReplicatedAt) {
+ iteration.latest = true;
+ }
+ iterations.push(iteration);
+ }
+
+ for (var i in slave.replicationFailedAtList) {
+ var failedDate = slave.replicationFailedAtList[i];
+ var matchingIterations = find(iterations, failedDate);
+ if (matchingIterations[0]) {
+ iteration = matchingIterations[0];
+ iteration.status = "failed";
+ } else {
+ iteration = {date: failedDate, status:"failed", latest:false};
+ iterations.push(iteration);
+ }
+ if (failedDate == slave.replicationFailedAt) {
+ iteration.latest = true;
+ }
+ }
+ iterations.sort(function(a,b){ return a.date> b.date;}).reverse();
+ return iterations;
+};
+
+var getMasterVersions = function(data) {
+ versions = {masterSearch:{}, master:{}};
+
+ versions.masterSearch.version = data.indexVersion;
+ versions.masterSearch.generation = data.generation;
+ versions.masterSearch.size = data.indexSize;
+
+ versions.master.version = data.master.replicableVersion || '-';
+ versions.master.generation = data.master.replicableGeneration || '-';
+ versions.master.size = '-';
+
+ return versions;
+};
+
+var getSlaveVersions = function(data) {
+ versions = {masterSearch: {}, master: {}, slave: {}};
+
+ versions.slave.version = data.indexVersion;
+ versions.slave.generation = data.generation;
+ versions.slave.size = data.indexSize;
+
+ versions.master.version = data.slave.masterDetails.replicableVersion || '-';
+ versions.master.generation = data.slave.masterDetails.replicableGeneration || '-';
+ versions.master.size = '-';
+
+ versions.masterSearch.version = data.slave.masterDetails.indexVersion;
+ versions.masterSearch.generation = data.slave.masterDetails.generation;
+ versions.masterSearch.size = data.slave.masterDetails.indexSize;
+
+ versions.changedVersion = data.indexVersion !== data.slave.masterDetails.indexVersion;
+ versions.changedGeneration = data.generation !== data.slave.masterDetails.generation;
+
+ return versions;
+};
+
+var parseDateToEpoch = function(date) {
+ // ["Sat Mar 03 11:00:00 CET 2012", "Sat", "Mar", "03", "11:00:00", "CET", "2012"]
+ var parts = date.match( /^(\w+)\s+(\w+)\s+(\d+)\s+(\d+\:\d+\:\d+)\s+(\w+)\s+(\d+)$/ );
+
+ // "Sat Mar 03 2012 10:37:33"
+ var d = new Date( parts[1] + ' ' + parts[2] + ' ' + parts[3] + ' ' + parts[6] + ' ' + parts[4] );
+ return d.getTime();
+}
+
+var parseSeconds = function(time) {
+ var seconds = 0;
+ var arr = new String(time || '').split('.');
+ var parts = arr[0].split(':').reverse();
+
+ for (var i = 0; i < parts.length; i++) {
+ seconds += ( parseInt(parts[i], 10) || 0 ) * Math.pow(60, i);
+ }
+
+ if (arr[1] && 5 <= parseInt(arr[1][0], 10)) {
+ seconds++; // treat more or equal than .5 as additional second
+
+ }
+
+ return seconds;
+}
+
+var getSlaveSettings = function(data) {
+ var settings = {};
+ settings.masterUrl = data.slave.masterUrl;
+ settings.isPollingDisabled = data.slave.isPollingDisabled == 'true';
+ settings.pollInterval = data.slave.pollInterval;
+ settings.isReplicating = data.slave.isReplicating == 'true';
+ settings.nextExecutionAt = data.slave.nextExecutionAt;
+
+ if(settings.isReplicating) {
+ settings.isApprox = true;
+ settings.tick = parseSeconds(settings.pollInterval);
+ } else if (!settings.isPollingDisabled && settings.pollInterval) {
+ if( settings.nextExecutionAt ) {
+ settings.nextExecutionAtEpoch = parseDateToEpoch(settings.nextExecutionAt);
+ settings.currentTime = parseDateToEpoch(data.slave.currentDate);
+
+ if( settings.nextExecutionAtEpoch > settings.currentTime) {
+ settings.isApprox = false;
+ settings.tick = ( settings.nextExecutionAtEpoch - settings.currentTime) / 1000;
+ }
+ }
+ }
+ return settings;
+};
+
+var getMasterSettings = function(details, isSlave) {
+ var master = {};
+ var masterData = isSlave ? details.slave.masterDetails.master : details.master;
+ master.replicationEnabled = masterData.replicationEnabled == "true";
+ master.replicateAfter = masterData.replicateAfter.join(", ");
+
+ if (masterData.confFiles) {
+ master.files = [];
+ var confFiles = masterData.confFiles.split(',');
+ for (var i=0; i<confFiles.length; i++) {
+ var file = confFiles[i];
+ var short = file;
+ var title = file;
+ if (file.indexOf(":")>=0) {
+ title = file.replace(':', ' » ');
+ var parts = file.split(':');
+ if (isSlave) {
+ short = parts[1];
+ } else {
+ short = parts[0];
+ }
+ }
+ master.files.push({title:title, name:short});
+ }
+ }
+ return master;
+}
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/schema.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/schema.js
new file mode 100644
index 000000000..8a80d4297
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/schema.js
@@ -0,0 +1,611 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var cookie_schema_browser_autoload = 'schema-browser_autoload';
+
+solrAdminApp.controller('SchemaController',
+ function($scope, $routeParams, $location, $cookies, $timeout, Luke, Constants, Schema, Config) {
+ $scope.resetMenu("schema", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function () {
+ Luke.schema({core: $routeParams.core}, function (schema) {
+ Luke.raw({core: $routeParams.core}, function (index) {
+ var data = mergeIndexAndSchemaData(index, schema.schema);
+
+ $scope.fieldsAndTypes = getFieldsAndTypes(data);
+ $scope.is = {};
+
+ var search = $location.search();
+ leftbar = {};
+ $scope.isField = $scope.isDynamicField = $scope.isType = false;
+ $scope.showing = true;
+ if (search.field) {
+ $scope.selectedType = "Field";
+ $scope.is.field = true;
+ $scope.name = search.field;
+ leftbar.fields = [$scope.name];
+ var field = data.fields[$scope.name];
+ leftbar.types = [field.type];
+ if (field.dynamicBase) leftbar.dynamicFields = [field.dynamicBase];
+ if (field.copySources && field.copySources.length>0) {
+ leftbar.copyFieldSources = sortedObjectArray(field.copySources.sort());
+ }
+ if (field.copyDests && field.copyDests.length>0) {
+ leftbar.copyFieldDests = sortedObjectArray(field.copyDests.sort());
+ }
+ $scope.fieldOrType = "field=" + $scope.name;
+ } else if (search["dynamic-field"]) {
+ $scope.selectedType = "Dynamic Field";
+ $scope.is.dynamicField = true;
+ $scope.name = search["dynamic-field"];
+ leftbar.dynamicFields = [$scope.name];
+ leftbar.types = [data.dynamic_fields[$scope.name].type];
+ $scope.fieldOrType = "dynamic-field=" + $scope.name;
+ } else if (search.type) {
+ $scope.selectedType = "Type";
+ $scope.is.type = true;
+ $scope.name = search.type;
+ leftbar.types = [$scope.name];
+ leftbar.fields = filterFields("fields", data, $scope.name);
+ leftbar.dynamicFields = filterFields("dynamic_fields", data, $scope.name);
+ $scope.fieldOrType = "type=" + $scope.name;
+ } else {
+ $scope.showing = false;
+ }
+ $scope.leftbar = leftbar;
+ $scope.core = $routeParams.core;
+ $scope.uniqueKeyField = data.unique_key_field;
+ $scope.similarity = data.similarity;
+ if ($scope.similarity && $scope.similarity.className) {
+ $scope.similarity.className = shortenPackages($scope.similarity.className);
+ }
+ $scope.isUniqueKeyField = ($scope.selectedType == "Field" && $scope.name == $scope.uniqueKeyField);
+
+ $scope.display = getFieldProperties(data, $routeParams.core, $scope.is, $scope.name);
+ $scope.analysis = getAnalysisInfo(data, $scope.is, $scope.name);
+
+ $scope.isAutoload = $cookies[cookie_schema_browser_autoload] == "true";
+ if ($scope.isAutoload) {
+ $scope.toggleTerms();
+ }
+
+ $scope.types = Object.keys(schema.schema.types);
+ });
+ });
+ Config.get({core: $routeParams.core}, function(data) {
+ $scope.isSchemaUpdatable = (data.config.hasOwnProperty('schemaFactory') == false || data.config.schemaFactory.class == "ManagedIndexSchemaFactory");
+ });
+ };
+ $scope.refresh();
+
+ $scope.selectFieldOrType = function() {
+ $location.search($scope.fieldOrType);
+ }
+
+ $scope.toggleAnalyzer = function(analyzer) {
+ analyzer.show = !analyzer.show;
+ }
+
+ $scope.loadTermInfo = function() {
+ var params = {fl: $scope.name, core: $routeParams.core};
+ if ($scope.topTermsCount) {
+ params.numTerms = $scope.topTermsCount;
+ }
+ $scope.isLoadingTerms = true;
+ Luke.field(params, function (data) {
+ $scope.isLoadingTerms = false;
+ $scope.termInfo = getTermInfo(data.fields[$scope.name]);
+ if (!$scope.topTermsCount) {
+ $scope.topTermsCount = $scope.termInfo.termCount;
+ }
+ });
+ }
+
+ $scope.toggleTerms = function() {
+ $scope.showTerms = !$scope.showTerms;
+
+ if ($scope.showTerms) {
+ $scope.loadTermInfo();
+ }
+ }
+
+ $scope.loadAllTerms = function() {
+ $scope.topTermsCount = $scope.termInfo.maxTerms;
+ $scope.loadTermInfo();
+ }
+
+ $scope.toggleAutoload = function() {
+ $scope.isAutoload = !$scope.isAutoload;
+ $cookies[cookie_schema_browser_autoload] = $scope.isAutoload;
+ console.log("cookie: " + $cookies[cookie_schema_browser_autoload]);
+ }
+
+ $scope.hideAll = function() {
+ $scope.showAddField = false;
+ $scope.showAddDynamicField = false;
+ $scope.showAddCopyField = false;
+ }
+
+ $scope.toggleAddField = function() {
+ if ($scope.showAddField && $scope.adding == "field") {
+ $scope.hideAll();
+ } else {
+ $scope.hideAll();
+ $scope.showAddField = true;
+ $scope.adding = "field";
+
+ $scope.newField = {
+ stored: "true",
+ indexed: "true",
+ uninvertible: "true"
+ }
+ delete $scope.addErrors;
+ }
+ }
+
+ $scope.addField = function() {
+ delete $scope.addErrors;
+ var data = {"add-field": $scope.newField};
+ Schema.post({core: $routeParams.core}, data, function(data) {
+ if (data.errors) {
+ $scope.addErrors = data.errors[0].errorMessages;
+ if (typeof $scope.addErrors === "string") {
+ $scope.addErrors = [$scope.addErrors];
+ }
+ } else {
+ $scope.added = true;
+ $timeout(function() {
+ $scope.showAddField = false;
+ $scope.added = false;
+ $scope.refresh();
+ }, 1500);
+ }
+ });
+ }
+
+ $scope.toggleAddDynamicField = function() {
+ if ($scope.showAddField && $scope.adding == "dynamicField") {
+ $scope.hideAll();
+ } else {
+ $scope.hideAll();
+ $scope.showAddField = true;
+ $scope.adding = "dynamicField";
+
+ $scope.newField = {
+ stored: "true",
+ indexed: "true"
+ }
+ delete $scope.addErrors;
+ }
+ }
+
+ $scope.addDynamicField = function() {
+ delete $scope.addErrors;
+ var data = {"add-dynamic-field": $scope.newField};
+ Schema.post({core: $routeParams.core}, data, function(data) {
+ if (data.errors) {
+ $scope.addErrors = data.errors[0].errorMessages;
+ if (typeof $scope.addErrors === "string") {
+ $scope.addErrors = [$scope.addErrors];
+ }
+ } else {
+ $scope.added = true;
+ $timeout(function() {
+ $scope.showAddField = false;
+ $scope.added = false;
+ $scope.refresh();
+ }, 1500);
+ }
+ });
+ }
+
+ $scope.toggleAddCopyField = function() {
+ if ($scope.showAddCopyField) {
+ $scope.hideAll();
+ } else {
+ $scope.hideAll();
+ $scope.showAddCopyField = true;
+
+ $scope.copyField = {};
+ delete $scope.addCopyFieldErrors;
+ }
+ }
+ $scope.addCopyField = function() {
+ delete $scope.addCopyFieldErrors;
+ var data = {"add-copy-field": $scope.copyField};
+ Schema.post({core: $routeParams.core}, data, function(data) {
+ if (data.errors) {
+ $scope.addCopyFieldErrors = data.errors[0].errorMessages;
+ if (typeof $scope.addCopyFieldErrors === "string") {
+ $scope.addCopyFieldErrors = [$scope.addCopyFieldErrors];
+ }
+ } else {
+ $scope.showAddCopyField = false;
+ $timeout($scope.refresh, 1500);
+ }
+ });
+ }
+
+ $scope.toggleDelete = function() {
+ if ($scope.showDelete) {
+ $scope.showDelete = false;
+ } else {
+ if ($scope.is.field) {
+ $scope.deleteData = {'delete-field': {name: $scope.name}};
+ } else if ($scope.is.dynamicField) {
+ $scope.deleteData = {'delete-dynamic-field': {name: $scope.name}};
+ } else {
+ alert("TYPE NOT KNOWN");
+ }
+ $scope.showDelete = true;
+ }
+ }
+
+ $scope.delete = function() {
+ Schema.post({core: $routeParams.core}, $scope.deleteData, function(data) {
+ if (data.errors) {
+ $scope.deleteErrors = data.errors[0].errorMessages;
+ if (typeof $scope.deleteErrors === "string") {
+ $scope.deleteErrors = [$scope.deleteErrors];
+ }
+ } else {
+ $scope.deleted = true;
+ $timeout(function() {
+ $location.search("");
+ }, 1500
+ );
+ }
+ });
+ }
+ $scope.toggleDeleteCopyField = function(field) {
+ field.show = !field.show;
+ delete field.errors;
+ }
+ $scope.deleteCopyField = function(field, source, dest) {
+ data = {'delete-copy-field': {source: source, dest: dest}};
+ Schema.post({core: $routeParams.core}, data, function(data) {
+ if (data.errors) {
+ field.errors = data.errors[0].errorMessages;
+ if (typeof $scope.deleteErrors === "string") {
+ field.errors = [field.errors];
+ }
+ } else {
+ field.deleted = true;
+ $timeout($scope.refresh, 1500);
+ }
+ });
+ }
+ }
+);
+
+var getFieldsAndTypes = function(data) {
+ var fieldsAndTypes = [];
+ var fields = Object.keys(data.fields).sort();
+ for (var i in fields) {
+ fieldsAndTypes.push({
+ group: "Fields",
+ value: "field=" + fields[i],
+ label: fields[i]
+ });
+ }
+ var dynamic_fields = Object.keys(data.dynamic_fields).sort();
+ for (var i in dynamic_fields) {
+ fieldsAndTypes.push({
+ group: "Dynamic Fields",
+ value: "dynamic-field=" + dynamic_fields[i],
+ label: dynamic_fields[i]
+ });
+ }
+ var types = Object.keys(data.types).sort();
+ for (var i in types) {
+ fieldsAndTypes.push({
+ group: "Types",
+ value: "type=" + types[i],
+ label: types[i]
+ });
+ }
+ return fieldsAndTypes;
+};
+
+var filterFields = function(type, data, name) {
+ var fields = [];
+ for (var i in data.types[name].fields) {
+ var field = data.types[name].fields[i];
+ if (data[type][field]) {
+ fields.push(field)
+ }
+ }
+ return fields.sort();
+}
+
+var mergeIndexAndSchemaData = function(index, schema) {
+
+ var data = {
+ unique_key_field: null,
+ similarity: null,
+ key: {},
+ fields: {},
+ dynamic_fields: {},
+ types: {},
+ relations: {
+ f_df: {},
+ f_t: {},
+ df_f: {},
+ df_t: {},
+ t_f: {},
+ t_df: {}
+ }
+ };
+
+ data.fields = index.fields;
+
+ data.key = index.info.key;
+
+ data.unique_key_field = schema.uniqueKeyField;
+ data.similarity = schema.similarity;
+
+ data.dynamic_fields = schema.dynamicFields;
+ data.types = schema.types;
+
+ for (var field in schema.fields) {
+ data.fields[field] =
+ $.extend({}, data.fields[field], schema.fields[field]);
+ }
+
+ for (var field in data.fields) {
+ var copy_dests = data.fields[field].copyDests;
+ for (var i in copy_dests) {
+ var copy_dest = copy_dests[i];
+ if (!data.fields[copy_dest]) {
+ data.fields[copy_dest] = {
+ partial: true,
+ copySources: []
+ };
+ }
+
+ if (data.fields[copy_dest].partial) {
+ data.fields[copy_dest].copySources.push(field);
+ }
+ }
+
+ var copy_sources = data.fields[field].copySources;
+ for (var i in copy_sources) {
+ var copy_source = copy_sources[i];
+ if (!data.fields[copy_source]) {
+ data.fields[copy_source] = {
+ partial: true,
+ copyDests: []
+ };
+ }
+
+ if (data.fields[copy_source].partial) {
+ data.fields[copy_source].copyDests.push(field);
+ }
+ }
+
+ data.relations.f_t[field] = data.fields[field].type;
+
+ if (!data.relations.t_f[data.fields[field].type]) {
+ data.relations.t_f[data.fields[field].type] = [];
+ }
+ data.relations.t_f[data.fields[field].type].push(field);
+
+ if (data.fields[field].dynamicBase) {
+ data.relations.f_df[field] = data.fields[field].dynamicBase;
+
+ if (!data.relations.df_f[data.fields[field].dynamicBase]) {
+ data.relations.df_f[data.fields[field].dynamicBase] = [];
+ }
+ data.relations.df_f[data.fields[field].dynamicBase].push(field);
+ }
+ }
+
+ for (var dynamic_field in data.dynamic_fields) {
+ data.relations.df_t[dynamic_field] = data.dynamic_fields[dynamic_field].type;
+
+ if (!data.relations.t_df[data.dynamic_fields[dynamic_field].type]) {
+ data.relations.t_df[data.dynamic_fields[dynamic_field].type] = [];
+ }
+ data.relations.t_df[data.dynamic_fields[dynamic_field].type].push(dynamic_field);
+ }
+ return data;
+};
+
+var getFieldProperties = function(data, core, is, name) {
+
+ var display = {};
+
+ display.partialState = is.field && !!data.fields[name].partial;
+
+ display.columns = [];
+ display.rows = [];
+ var allFlags = "";
+
+ var addRow = function(name, flags) {
+ if (flags[0]!='(') {
+ display.rows.push({name:name, flags:flags});
+ for (var i in flags) {
+ if (flags[i]!="-" && allFlags.indexOf(flags[i])<0) {
+ allFlags+=flags[i];
+ }
+ }
+ } else {
+ display.rows.push({name:name, comment:flags});
+ }
+ }
+
+ // Identify the rows for our field property table
+ if (is.field && data.fields[name]) {
+ if (data.fields[name].flags) {
+ addRow('Properties', data.fields[name].flags);
+ }
+ if (data.fields[name].schema) {
+ addRow('Schema', data.fields[name].schema);
+ }
+ if (data.fields[name].index) {
+ addRow('Index', data.fields[name].index);
+ }
+ display.docs = data.fields[name].docs;
+ display.docsUrl = "#/" + core + "/query?q=" + name + ":[* TO *]";
+ display.distinct = data.fields[name].distinct;
+ display.positionIncrementGap = data.fields[name].positionIncrementGap;
+ if (data.types[data.fields[name].type]) {
+ display.similarity = data.types[data.fields[name].type].similarity;
+ } else {
+ display.similarity = null;
+ }
+ } else if (is.dynamicField && data.dynamic_fields[name] && data.dynamic_fields[name].flags) {
+ addRow('Properties', data.dynamic_fields[name].flags);
+ display.similarity = data.types[data.dynamic_fields[name].type].similarity;
+ } else if (is.type && data.types[name]) {
+ display.similarity = data.types[name].similarity;
+ }
+ if (display.similarity && display.similarity.className) {
+ display.similarity.className = shortenPackages(display.similarity.className);
+ }
+
+ // identify columns in field property table:
+ for (var key in data.key) {
+ if (allFlags.indexOf(key)>=0) {
+ display.columns.push({key: key, name: data.key[key]});
+ }
+ }
+
+ // identify rows and cell values in field property table:
+ for (var i in display.rows) {
+ var row = display.rows[i];
+ row.cells = [];
+
+ if (!row.flags) {
+ continue; // Match the special case in the LukeRequestHandler
+ }
+
+ for (var j in display.columns) {
+ var flag = display.columns[j].key;
+ row.cells.push({key: flag, value: row.flags.indexOf(flag)>=0});
+ }
+ }
+
+ return display;
+};
+
+var getAnalysisInfo = function(data, is, name) {
+
+ var analysis = {};
+
+ if (is.field) {
+ var type = data.relations.f_t[name];
+ analysis.query = "analysis.fieldname=" + name;
+ }
+ else if (is.dynamicField) {
+ var type = data.relations.df_t[name];
+ analysis.query = "analysis.fieldtype=" + type;
+ }
+ else if (is.type) {
+ var type = name;
+ analysis.query = "analysis.fieldtype=" + name;
+ }
+
+ var processComponentType = function (label, key, componentTypeData) {
+ if (componentTypeData) {
+ var components = [];
+ for (var componentName in componentTypeData) {
+ var componentData = componentTypeData[componentName];
+ var component = {className: componentData.className, args:[]};
+ if (componentData.args) {
+ for (var argName in componentData.args) {
+ var argValue = componentData.args[argName];
+ if (argValue == "1" || argValue == "true") {
+ component.args.push({name: argName, booleanValue:true});
+ } else if (argValue == "0" || argValue == "false") {
+ component.args.push({name: argName, booleanValue:false});
+ } else {
+ component.args.push({name: argName, value:argValue});
+ }
+ }
+ }
+ components.push(component);
+ }
+ return {label: label, key: key, components: components};
+ } else {
+ return {label: label, key: key};
+ }
+ }
+
+ var buildAnalyzer = function (analyzerData) {
+ var analyzer = {};
+ analyzer.className = analyzerData.className;
+ analyzer.componentTypes = [];
+ if (analyzerData.tokenizer) {
+ analyzer.componentTypes.push(processComponentType("Char Filters", "charFilters", analyzerData.charFilters));
+ analyzer.componentTypes.push(processComponentType("Tokenizer", "tokenizer", {tokenizer: analyzerData.tokenizer}));
+ analyzer.componentTypes.push(processComponentType("Token Filters", "tokenFilters", analyzerData.filters));
+ }
+ return analyzer;
+ }
+
+ analysis.data = data.types[type];
+ if (analysis.data) {
+ analysis.analyzers = [
+ {key: "index", name: "Index", detail: buildAnalyzer(analysis.data.indexAnalyzer)},
+ {key: "query", name: "Query", detail: buildAnalyzer(analysis.data.queryAnalyzer)}
+ ];
+ }
+ return analysis;
+}
+
+var getTermInfo = function(data) {
+
+ var termInfo = {};
+ if (data && data.topTerms) {
+ termInfo.topTerms = [];
+
+ var currentGroup = {count: 0}
+ for (var i = 0; i < data.topTerms.length; i += 2) {
+ var count = data.topTerms[i + 1];
+ if (currentGroup.count != count) {
+ currentGroup = {count: count, terms: []};
+ termInfo.topTerms.push(currentGroup);
+ }
+ currentGroup.terms.push(data.topTerms[i]);
+ }
+ termInfo.termCount = data.topTerms.length / 2;
+ termInfo.maxTerms = data.distinct;
+ }
+
+ if(data && data.histogram) {
+ termInfo.histogram = [];
+ termInfo.histogramMax = 0;
+ for (var i = 0; i < data.histogram.length; i += 2) {
+ termInfo.histogram.push({key: data.histogram[i], value: data.histogram[i + 1]});
+ termInfo.histogramMax = Math.max(termInfo.histogramMax, data.histogram[i + 1]);
+ }
+ }
+ return termInfo;
+};
+
+var sortedObjectArray = function(list) {
+ var objarr = [];
+ for (var i in list) {
+ objarr.push({"name": list[i]});
+ }
+ return objarr;
+};
+
+var shortenPackages = function(className) {
+ return className.replace("org.apache.solr", "o.a.s").replace("org.apache.lucene", "o.a.l");
+};
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/segments.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/segments.js
new file mode 100644
index 000000000..e835cc084
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/segments.js
@@ -0,0 +1,99 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var MB_FACTOR = 1024*1024;
+
+solrAdminApp.controller('SegmentsController', function($scope, $routeParams, $interval, Segments, Constants) {
+ $scope.resetMenu("segments", Constants.IS_CORE_PAGE);
+
+ $scope.refresh = function() {
+
+ Segments.get({core: $routeParams.core}, function(data) {
+ var segments = data.segments;
+
+ var segmentSizeInBytesMax = getLargestSegmentSize(segments);
+ $scope.segmentMB = Math.floor(segmentSizeInBytesMax / MB_FACTOR);
+ $scope.xaxis = calculateXAxis(segmentSizeInBytesMax);
+
+ $scope.documentCount = 0;
+ $scope.deletionCount = 0;
+
+ $scope.segments = [];
+ for (var name in segments) {
+ var segment = segments[name];
+
+ var segmentSizeInBytesLog = Math.log(segment.sizeInBytes);
+ var segmentSizeInBytesMaxLog = Math.log(segmentSizeInBytesMax);
+
+ segment.totalSize = Math.floor((segmentSizeInBytesLog / segmentSizeInBytesMaxLog ) * 100);
+
+ segment.deletedDocSize = Math.floor((segment.delCount / segment.size) * segment.totalSize);
+ if (segment.delDocSize <= 0.001) delete segment.deletedDocSize;
+
+ segment.aliveDocSize = segment.totalSize - segment.deletedDocSize;
+
+ $scope.segments.push(segment);
+
+ $scope.documentCount += segment.size;
+ $scope.deletionCount += segment.delCount;
+ }
+ $scope.deletionsPercentage = calculateDeletionsPercentage($scope.documentCount, $scope.deletionCount);
+ });
+ };
+
+ $scope.toggleAutoRefresh = function() {
+ $scope.autorefresh = !$scope.autorefresh;
+ if ($scope.autorefresh) {
+ $scope.interval = $interval($scope.refresh, 1000);
+ var onRouteChangeOff = $scope.$on('$routeChangeStart', function() {
+ $interval.cancel($scope.interval);
+ onRouteChangeOff();
+ });
+
+ } else if ($scope.interval) {
+ $interval.cancel($scope.interval);
+ }
+ };
+ $scope.refresh();
+});
+
+var calculateXAxis = function(segmentInBytesMax) {
+ var steps = [];
+ var log = Math.log(segmentInBytesMax);
+
+ for (var j=0, step=log/4; j<3; j++, step+=log/4) {
+ steps.push({pos:j, value:Math.floor((Math.pow(Math.E, step))/MB_FACTOR)})
+ }
+ return steps;
+};
+
+var getLargestSegmentSize = function(segments) {
+ var max = 0;
+ for (var name in segments) {
+ max = Math.max(max, segments[name].sizeInBytes);
+ }
+ return max;
+};
+
+var calculateDeletionsPercentage = function(docCount, delCount) {
+ if (docCount == 0) {
+ return 0;
+ } else {
+ var percent = delCount / docCount * 100;
+ return Math.round(percent * 100) / 100;
+ }
+};
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js
new file mode 100644
index 000000000..92440c360
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js
@@ -0,0 +1,239 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+solrAdminApp.controller('StreamController',
+ function($scope, $routeParams, $location, Query, Constants) {
+
+ $scope.resetMenu("stream", Constants.IS_COLLECTION_PAGE);
+
+ $scope.stream = {
+ wt: 'json',
+ expr: $scope.expr,
+ indent: 'on'
+ };
+ $scope.qt = "stream";
+ $scope.doExplanation = false
+
+ $scope.doStream = function() {
+
+ var params = {};
+ params.core = $routeParams.core;
+ params.handler = $scope.qt;
+ params.expr = [$scope.expr]
+ if($scope.doExplanation){
+ params.explain = [$scope.doExplanation]
+ }
+
+ $scope.lang = "json";
+ $scope.response = null;
+ $scope.url = "";
+
+ var url = Query.url(params);
+
+ Query.query(params, function(data) {
+
+ var jsonData = JSON.parse(data.toJSON().data);
+ if (undefined != jsonData["explanation"]) {
+ $scope.showExplanation = true;
+
+ streamGraphSubController($scope, jsonData["explanation"])
+ delete jsonData["explanation"]
+ } else {
+ $scope.showExplanation = false;
+ }
+
+ data.data = JSON.stringify(jsonData,null,2);
+
+ $scope.lang = "json";
+ $scope.response = data;
+ $scope.url = url;
+ $scope.hostPortContext = $location.absUrl().substr(0,$location.absUrl().indexOf("#")); // For display only
+
+ });
+ };
+
+ if ($location.search().expr) {
+ $scope.expr = $location.search()["expr"];
+ $scope.doStream();
+ }
+
+ }
+);
+
+var streamGraphSubController = function($scope, explanation) {
+ $scope.showGraph = true;
+ $scope.pos = 0;
+ $scope.rows = 8;
+
+ $scope.resetGraph = function() {
+ $scope.pos = 0;
+ $scope.initGraph();
+ }
+
+ $scope.initGraph = function(explanation) {
+
+ data = explanation
+
+ var leafCount = 0;
+ var maxDepth = 0;
+ var rootNode = {};
+
+ leafCount = 0;
+
+ let recurse = function(dataNode, depth) {
+
+ if (depth > maxDepth) {
+ maxDepth = depth;
+ }
+
+ let graphNode = {
+ name: dataNode.expressionNodeId,
+ implementingClass: 'unknown',
+ data: {}
+ };
+
+ ["expressionNodeId", "expressionType", "functionName", "implementingClass", "expression", "note", "helpers"].forEach(function(key) {
+ graphNode.data[key] = dataNode[key];
+ });
+
+ if (dataNode.children && dataNode.children.length > 0) {
+ graphNode.children = [];
+ dataNode.children.forEach(function(n) {
+ graphNode.children.push(recurse(n, depth + 1));
+ });
+ } else {
+ ++leafCount;
+ }
+
+ return graphNode;
+ }
+
+ $scope.showPaging = false;
+ $scope.isRadial = false;
+ $scope.explanationData = recurse(data, 1);
+
+ $scope.depth = maxDepth + 1;
+ $scope.leafCount = leafCount;
+ };
+
+ $scope.initGraph(explanation);
+};
+
+solrAdminApp.directive('explanationGraph', function(Constants) {
+ return {
+ restrict: 'EA',
+ scope: {
+ data: "=",
+ leafCount: "=",
+ depth: "="
+ },
+ link: function(scope, element, attrs) {
+
+ var helper_path_class = function(p) {
+ var classes = ['link'];
+
+ return classes.join(' ');
+ };
+
+ var helper_node_class = function(d) {
+ var classes = ['node'];
+
+ if (d.data && d.data.expressionType) {
+ classes.push(d.data.expressionType);
+ }
+
+ return classes.join(' ');
+ };
+
+ var helper_node_text = function(d) {
+ if (d.data && d.data.functionName) {
+ return d.data.functionName;
+ }
+
+ return d.name
+ };
+
+ var helper_tooltip = function(d) {
+
+ return [
+ "Function: " + d.data.functionName,
+ "Type: " + d.data.expressionType,
+ "Class: " + d.data.implementingClass.replace("org.apache.solr.client.solrj.io", "o.a.s.c.s.i"),
+ "=============",
+ d.data.expression
+ ].join("\n");
+ }
+
+ scope.$watch("data", function(newValue, oldValue) {
+ if (newValue) {
+ flatGraph(element, scope.data, scope.depth, scope.leafCount);
+ }
+ });
+
+ var flatGraph = function(element, graphData, depth, leafCount) {
+ var w = 100 + (depth * 100),
+ h = leafCount * 40;
+
+ var tree = d3.layout.tree().size([h, w]);
+
+ var diagonal = d3.svg.diagonal().projection(function(d) {
+ return [d.y * .7, d.x];
+ });
+
+ d3.select('#canvas', element).html('');
+ var vis = d3.select('#canvas', element).append('svg')
+ .attr('width', w)
+ .attr('height', h)
+ .append('g')
+ .attr('transform', 'translate(25, 0)');
+
+ var nodes = tree.nodes(graphData);
+
+ var link = vis.selectAll('path.link')
+ .data(tree.links(nodes))
+ .enter().append('path')
+ .attr('class', helper_path_class)
+ .attr('d', diagonal);
+
+ var node = vis.selectAll('g.node')
+ .data(nodes)
+ .enter().append('g')
+ .attr('class', helper_node_class)
+ .attr('transform', function(d) {
+ return 'translate(' + d.y * .7 + ',' + d.x + ')';
+ })
+
+ node.append('circle')
+ .attr('r', 4.5);
+
+ node.append('title')
+ .text(helper_tooltip);
+
+ node.append('text')
+ .attr('dx', function(d) {
+ return 8;
+ })
+ .attr('dy', function(d) {
+ return 5;
+ })
+ .attr('text-anchor', function(d) {
+ return 'start';
+ })
+ .text(helper_node_text)
+ };
+ }
+ };
+})
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/threads.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/threads.js
new file mode 100644
index 000000000..22a900295
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/threads.js
@@ -0,0 +1,50 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('ThreadsController',
+ function($scope, Threads, Constants){
+ $scope.resetMenu("threads", Constants.IS_ROOT_PAGE);
+ $scope.refresh = function() {
+ Threads.get(function(data) {
+ var threadDump = data.system.threadDump;
+ var threads = [];
+ for (var i=1; i<threadDump.length; i+=2) {
+ var thread = threadDump[i];
+ if (!!thread.stackTrace) {
+ var stackTrace = [];
+ for (var j=0; j<thread.stackTrace.length; j++) {
+ var trace = thread.stackTrace[j].replace("(", "\u200B("); // allow wrapping to happen, \u200B is a zero-width space
+ stackTrace.push({id:thread.id + ":" + j, trace: trace});
+ }
+ thread.stackTrace = stackTrace;
+ }
+ threads.push(thread);
+ }
+ $scope.threads = threads;
+ });
+ };
+ $scope.toggleStacktrace = function(thread) {
+ thread.showStackTrace = !thread.showStackTrace;
+ };
+ $scope.toggleStacktraces = function() {
+ $scope.showAllStacktraces = !$scope.showAllStacktraces;
+ for (var i=0; i<$scope.threads.length; i++) {
+ $scope.threads[i].showStackTrace = $scope.showAllStacktraces;
+ }
+ };
+ $scope.refresh();
+});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/unknown.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/unknown.js
new file mode 100644
index 000000000..2d959e6ce
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/unknown.js
@@ -0,0 +1,37 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * This controller is called whenever no other routes match.
+ * It is a place to intercept to look for special flows such as authentication callbacks (that do not support fragment in URL).
+ * Normal action is to redirect to dashboard "/" if no login is in progress
+ */
+solrAdminApp.controller('UnknownController',
+ ['$scope', '$window', '$routeParams', '$location', 'Constants', 'AuthenticationService',
+ function($scope, $window, $routeParams, $location, Constants, AuthenticationService) {
+ var fragment = $window.location.hash.startsWith("#/") ? $window.location.hash.substring(2) : $window.location.hash;
+ // Check if the URL is actually a callback from Identiy provider
+ if (AuthenticationService.isJwtCallback(fragment)) {
+ console.log("Detected an authentication callback, redirecting to /#/login/callback");
+ $location.path("/login/callback").hash(fragment);
+ } else {
+ console.log("Redirecting from unknown path " + fragment + " to Dashboard");
+ $location.path("/").hash("");
+ }
+ }
+ ]
+);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/services.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/services.js
new file mode 100644
index 000000000..36556399c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/services.js
@@ -0,0 +1,333 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var solrAdminServices = angular.module('solrAdminServices', ['ngResource']);
+
+solrAdminServices.factory('System',
+ ['$resource', function($resource) {
+ return $resource('admin/info/system', {"wt":"json", "nodes": "@nodes", "_":Date.now()});
+ }])
+.factory('Metrics',
+ ['$resource', function($resource) {
+ return $resource('admin/metrics', {"wt":"json", "nodes": "@nodes", "prefix":"@prefix", "_":Date.now()});
+ }])
+.factory('Collections',
+ ['$resource', function($resource) {
+ return $resource('admin/collections',
+ {'wt':'json', '_':Date.now()}, {
+ "list": {params:{action: "LIST"}},
+ "status": {params:{action: "CLUSTERSTATUS"}},
+ "add": {params:{action: "CREATE"}},
+ "delete": {params:{action: "DELETE"}},
+ "rename": {params:{action: "RENAME"}},
+ "createAlias": {params:{action: "CREATEALIAS"}},
+ "deleteAlias": {params:{action: "DELETEALIAS"}},
+ "deleteReplica": {params:{action: "DELETEREPLICA"}},
+ "addReplica": {params:{action: "ADDREPLICA"}},
+ "deleteShard": {params:{action: "DELETESHARD"}},
+ "reload": {method: "GET", params:{action:"RELOAD", core: "@core"}}
+ });
+ }])
+.factory('Cores',
+ ['$resource', function($resource) {
+ return $resource('admin/cores',
+ {'wt':'json', '_':Date.now()}, {
+ "query": {},
+ "list": {params:{indexInfo: false}},
+ "add": {params:{action: "CREATE"}},
+ "unload": {params:{action: "UNLOAD", core: "@core"}},
+ "rename": {params:{action: "RENAME"}},
+ "swap": {params:{action: "SWAP"}},
+ "reload": {method: "GET", params:{action:"RELOAD", core: "@core"}, headers:{doNotIntercept: "true"}}
+ });
+ }])
+.factory('Logging',
+ ['$resource', function($resource) {
+ return $resource('admin/info/logging', {'wt':'json', '_':Date.now()}, {
+ "events": {params: {since:'0'}},
+ "levels": {},
+ "setLevel": {}
+ });
+ }])
+.factory('Zookeeper',
+ ['$resource', function($resource) {
+ return $resource('admin/zookeeper', {wt:'json', _:Date.now()}, {
+ "simple": {},
+ "liveNodes": {params: {path: '/live_nodes'}},
+ "clusterState": {params: {detail: "true", path: "/clusterstate.json"}},
+ "detail": {params: {detail: "true", path: "@path"}},
+ "configs": {params: {detail:false, path: "/configs/"}},
+ "aliases": {params: {detail: "true", path: "/aliases.json"}, transformResponse:function(data) {
+ var znode = $.parseJSON(data).znode;
+ if (znode.data) {
+ return {aliases: $.parseJSON(znode.data).collection};
+ } else {
+ return {aliases: {}};
+ }
+ }}
+ });
+ }])
+.factory('ZookeeperStatus',
+ ['$resource', function($resource) {
+ return $resource('admin/zookeeper/status', {wt:'json', _:Date.now()}, {
+ "monitor": {}
+ });
+ }])
+.factory('Properties',
+ ['$resource', function($resource) {
+ return $resource('admin/info/properties', {'wt':'json', '_':Date.now()});
+ }])
+.factory('Threads',
+ ['$resource', function($resource) {
+ return $resource('admin/info/threads', {'wt':'json', '_':Date.now()});
+ }])
+.factory('Properties',
+ ['$resource', function($resource) {
+ return $resource('admin/info/properties', {'wt':'json', '_':Date.now()});
+ }])
+.factory('Replication',
+ ['$resource', function($resource) {
+ return $resource(':core/replication', {'wt':'json', core: "@core", '_':Date.now()}, {
+ "details": {params: {command: "details"}},
+ "command": {params: {}}
+ });
+ }])
+.factory('CoreSystem',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/system', {wt:'json', core: "@core", _:Date.now()});
+ }])
+.factory('Update',
+ ['$resource', function($resource) {
+ return $resource(':core/:handler', {core: '@core', wt:'json', _:Date.now(), handler:'update'}, {
+ "commit": {params: {commit: "true"}},
+ "post": {headers: {'Content-type': 'application/json'}, method: "POST", params: {handler: '@handler'}},
+ "postJson": {headers: {'Content-type': 'application/json'}, method: "POST", params: {handler: '@handler'}},
+ "postXml": {headers: {'Content-type': 'text/xml'}, method: "POST", params: {handler: '@handler'}},
+ "postCsv": {headers: {'Content-type': 'application/csv'}, method: "POST", params: {handler: '@handler'}}
+ });
+ }])
+.service('FileUpload', function ($http) {
+ this.upload = function(params, file, success, error){
+ var url = "" + params.core + "/" + params.handler + "?";
+ raw = params.raw;
+ delete params.core;
+ delete params.handler;
+ delete params.raw;
+ url += $.param(params);
+ if (raw && raw.length>0) {
+ if (raw[0] != "&") raw = "&" + raw;
+ url += raw;
+ }
+ var fd = new FormData();
+ fd.append('file', file);
+ $http.post(url, fd, {
+ transformRequest: angular.identity,
+ headers: {'Content-Type': undefined}
+ }).success(success).error(error);
+ }
+})
+.factory('Luke',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/luke', {core: '@core', wt:'json', _:Date.now()}, {
+ "index": {params: {numTerms: 0, show: 'index'}},
+ "raw": {params: {numTerms: 0}},
+ "schema": {params: {show:'schema'}},
+ "field": {},
+ "fields": {params: {show:'schema'}, interceptor: {
+ response: function(response) {
+ var fieldsAndTypes = [];
+ for (var field in response.data.schema.fields) {
+ fieldsAndTypes.push({group: "Fields", label: field, value: "fieldname=" + field});
+ }
+ for (var type in response.data.schema.types) {
+ fieldsAndTypes.push({group: "Types", label: type, value: "fieldtype=" + type});
+ }
+ return fieldsAndTypes;
+ }
+ }}
+ });
+ }])
+.factory('Analysis',
+ ['$resource', function($resource) {
+ return $resource(':core/analysis/field', {core: '@core', wt:'json', _:Date.now()}, {
+ "field": {params: {"analysis.showmatch": true}}
+ });
+ }])
+.factory('DataImport',
+ ['$resource', function($resource) {
+ return $resource(':core/:name', {core: '@core', name: '@name', indent:'on', wt:'json', _:Date.now()}, {
+ "config": {params: {command: "show-config"}, headers: {doNotIntercept: "true"},
+ transformResponse: function(data) {
+ return {config: data};
+ }
+ },
+ "status": {params: {command: "status"}, headers: {doNotIntercept: "true"}},
+ "reload": {params: {command: "reload-config"}},
+ "post": {method: "POST",
+ headers: {'Content-type': 'application/x-www-form-urlencoded'},
+ transformRequest: function(data) { return $.param(data) }}
+ });
+ }])
+.factory('Ping',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/ping', {wt:'json', core: '@core', ts:Date.now(), _:Date.now()}, {
+ "ping": {},
+ "status": {params:{action:"status"}, headers: {doNotIntercept: "true"}
+ }});
+ }])
+.factory('Mbeans',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/mbeans', {'wt':'json', core: '@core', '_':Date.now()}, {
+ stats: {params: {stats: true}},
+ info: {},
+ reference: {
+ params: {wt: "xml", stats: true}, transformResponse: function (data) {
+ return {reference: data}
+ }
+ },
+ delta: {method: "POST",
+ params: {stats: true, diff:true},
+ headers: {'Content-type': 'application/x-www-form-urlencoded'},
+ transformRequest: function(data) {
+ return "stream.body=" + encodeURIComponent(data);
+ }
+ }
+ });
+ }])
+.factory('Files',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/file', {'wt':'json', core: '@core', '_':Date.now()}, {
+ "list": {},
+ "get": {method: "GET", interceptor: {
+ response: function(config) {return config;}
+ }, transformResponse: function(data) {
+ return data;
+ }}
+ });
+ }])
+.factory('Query',
+ ['$resource', function($resource) {
+ var resource = $resource(':core/:handler', {core: '@core', handler: '@handler', '_':Date.now()}, {
+ "query": {
+ method: "GET",
+ transformResponse: function (data) {
+ return {data: data}
+ },
+ headers: {doNotIntercept: "true"}
+ }
+ });
+ resource.url = function(params) {
+ var qs = [];
+ for (key in params) {
+ if (key != "core" && key != "handler") {
+ for (var i in params[key]) {
+ qs.push(key + "=" + encodeURIComponent(params[key][i]));
+ }
+ }
+ }
+ return "" + params.core + "/" + params.handler + "?" + qs.sort().join("&");
+ }
+ return resource;
+}])
+.factory('Segments',
+ ['$resource', function($resource) {
+ return $resource(':core/admin/segments', {'wt':'json', core: '@core', _:Date.now()}, {
+ get: {}
+ });
+}])
+.factory('Schema',
+ ['$resource', function($resource) {
+ return $resource(':core/schema', {wt: 'json', core: '@core', _:Date.now()}, {
+ get: {method: "GET"},
+ check: {method: "GET", headers: {doNotIntercept: "true"}},
+ post: {method: "POST"}
+ });
+}])
+.factory('Config',
+ ['$resource', function($resource) {
+ return $resource(':core/config', {wt: 'json', core: '@core', _:Date.now()}, {
+ get: {method: "GET"}
+ })
+}])
+.factory('AuthenticationService',
+ ['base64', function (base64) {
+ var service = {};
+
+ service.SetCredentials = function (username, password) {
+ var authdata = base64.encode(username + ':' + password);
+
+ sessionStorage.setItem("auth.header", "Basic " + authdata);
+ sessionStorage.setItem("auth.username", username);
+ };
+
+ service.ClearCredentials = function () {
+ sessionStorage.removeItem("auth.header");
+ sessionStorage.removeItem("auth.scheme");
+ sessionStorage.removeItem("auth.realm");
+ sessionStorage.removeItem("auth.username");
+ sessionStorage.removeItem("auth.wwwAuthHeader");
+ sessionStorage.removeItem("auth.statusText");
+ localStorage.removeItem("auth.stateRandom");
+ sessionStorage.removeItem("auth.nonce");
+ };
+
+ service.getAuthDataHeader = function () {
+ try {
+ var header64 = sessionStorage.getItem("auth.authDataHeader");
+ var headerJson = base64.decode(header64);
+ return JSON.parse(headerJson);
+ } catch (e) {
+ console.log("WARN: Wrong or missing X-Solr-AuthData header on 401 response " + e);
+ return null;
+ }
+ };
+
+ service.decodeJwtPart = function (jwtPart) {
+ try {
+ return JSON.parse(base64.urldecode(jwtPart));
+ } catch (e) {
+ console.log("WARN: Invalid format of JWT part: " + e);
+ return {};
+ }
+ };
+
+ service.isJwtCallback = function (hash) {
+ var hp = this.decodeHashParams(hash);
+ // console.log("Decoded hash as " + JSON.stringify(hp, undefined, 2)); // For debugging callbacks
+ return (hp['access_token'] && hp['token_type'] && hp['state']) || hp['error'];
+ };
+
+ service.decodeHashParams = function(hash) {
+ // access_token, token_type, expires_in, state
+ if (hash == null || hash.length === 0) {
+ return {};
+ }
+ var params = {};
+ var parts = hash.split("&");
+ for (var p in parts) {
+ var kv = parts[p].split("=");
+ if (kv.length === 2) {
+ params[kv[0]] = decodeURIComponent(kv[1]);
+ } else {
+ console.log("Invalid callback URI, got parameter " + parts[p] + " but expected key=value");
+ }
+ }
+ return params;
+ };
+
+ return service;
+ }]);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-chosen.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-chosen.js
new file mode 100644
index 000000000..760422ffe
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-chosen.js
@@ -0,0 +1,139 @@
+/*
+The MIT License
+
+Copyright (c) 2013 Localytics http://www.localytics.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.
+*/
+// Generated by CoffeeScript 1.8.0
+(function() {
+ var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ angular.module('localytics.directives', []);
+
+ angular.module('localytics.directives').directive('chosen', [
+ '$timeout', function($timeout) {
+ var CHOSEN_OPTION_WHITELIST, NG_OPTIONS_REGEXP, isEmpty, snakeCase;
+ NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;
+ CHOSEN_OPTION_WHITELIST = ['noResultsText', 'allowSingleDeselect', 'disableSearchThreshold', 'disableSearch', 'enableSplitWordSearch', 'inheritSelectClasses', 'maxSelectedOptions', 'placeholderTextMultiple', 'placeholderTextSingle', 'searchContains', 'singleBackstrokeDelete', 'displayDisabledOptions', 'displaySelectedOptions', 'width'];
+ snakeCase = function(input) {
+ return input.replace(/[A-Z]/g, function($1) {
+ return "_" + ($1.toLowerCase());
+ });
+ };
+ isEmpty = function(value) {
+ var key;
+ if (angular.isArray(value)) {
+ return value.length === 0;
+ } else if (angular.isObject(value)) {
+ for (key in value) {
+ if (value.hasOwnProperty(key)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+ return {
+ restrict: 'A',
+ require: '?ngModel',
+ terminal: true,
+ link: function(scope, element, attr, ngModel) {
+ var chosen, defaultText, disableWithMessage, empty, initOrUpdate, match, options, origRender, removeEmptyMessage, startLoading, stopLoading, valuesExpr, viewWatch;
+ element.addClass('localytics-chosen');
+ options = scope.$eval(attr.chosen) || {};
+ angular.forEach(attr, function(value, key) {
+ if (__indexOf.call(CHOSEN_OPTION_WHITELIST, key) >= 0) {
+ return options[snakeCase(key)] = scope.$eval(value);
+ }
+ });
+ startLoading = function() {
+ return element.addClass('loading').attr('disabled', true).trigger('chosen:updated');
+ };
+ stopLoading = function() {
+ return element.removeClass('loading').attr('disabled', false).trigger('chosen:updated');
+ };
+ chosen = null;
+ defaultText = null;
+ empty = false;
+ initOrUpdate = function() {
+ if (chosen) {
+ return element.trigger('chosen:updated');
+ } else {
+ chosen = element.chosen(options).data('chosen');
+ return defaultText = chosen.default_text;
+ }
+ };
+ removeEmptyMessage = function() {
+ empty = false;
+ return element.attr('data-placeholder', defaultText);
+ };
+ disableWithMessage = function() {
+ empty = true;
+ return element.attr('data-placeholder', chosen.results_none_found).attr('disabled', true).trigger('chosen:updated');
+ };
+ if (ngModel) {
+ origRender = ngModel.$render;
+ ngModel.$render = function() {
+ origRender();
+ return initOrUpdate();
+ };
+ if (attr.multiple) {
+ viewWatch = function() {
+ return ngModel.$viewValue;
+ };
+ scope.$watch(viewWatch, ngModel.$render, true);
+ }
+ } else {
+ initOrUpdate();
+ }
+ attr.$observe('disabled', function() {
+ return element.trigger('chosen:updated');
+ });
+ if (attr.ngOptions && ngModel) {
+ match = attr.ngOptions.match(NG_OPTIONS_REGEXP);
+ valuesExpr = match[7];
+ scope.$watchCollection(valuesExpr, function(newVal, oldVal) {
+ var timer;
+ return timer = $timeout(function() {
+ if (angular.isUndefined(newVal)) {
+ return startLoading();
+ } else {
+ if (empty) {
+ removeEmptyMessage();
+ }
+ stopLoading();
+ if (isEmpty(newVal)) {
+ return disableWithMessage();
+ }
+ }
+ });
+ });
+ return scope.$on('$destroy', function(event) {
+ if (typeof timer !== "undefined" && timer !== null) {
+ return $timeout.cancel(timer);
+ }
+ });
+ }
+ }
+ };
+ }
+ ]);
+
+}).call(this);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.js
new file mode 100644
index 000000000..6afabd6d1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.js
@@ -0,0 +1,229 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/**
+ * @license AngularJS v1.3.8
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} and
+ * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+ /**
+ * @ngdoc service
+ * @name $cookies
+ *
+ * @description
+ * Provides read/write access to browser's cookies.
+ *
+ * Only a simple Object is exposed and by adding or removing properties to/from this object, new
+ * cookies are created/deleted at the end of current $eval.
+ * The object's properties can only be strings.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookiesExample', ['ngCookies'])
+ * .controller('ExampleController', ['$cookies', function($cookies) {
+ * // Retrieving a cookie
+ * var favoriteCookie = $cookies.myFavorite;
+ * // Setting a cookie
+ * $cookies.myFavorite = 'oatmeal';
+ * }]);
+ * ```
+ */
+ factory('$cookies', ['$rootScope', '$browser', function($rootScope, $browser) {
+ var cookies = {},
+ lastCookies = {},
+ lastBrowserCookies,
+ runEval = false,
+ copy = angular.copy,
+ isUndefined = angular.isUndefined;
+
+ //creates a poller fn that copies all cookies from the $browser to service & inits the service
+ $browser.addPollFn(function() {
+ var currentCookies = $browser.cookies();
+ if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
+ lastBrowserCookies = currentCookies;
+ copy(currentCookies, lastCookies);
+ copy(currentCookies, cookies);
+ if (runEval) $rootScope.$apply();
+ }
+ })();
+
+ runEval = true;
+
+ //at the end of each eval, push cookies
+ //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
+ // strings or browser refuses to store some cookies, we update the model in the push fn.
+ $rootScope.$watch(push);
+
+ return cookies;
+
+
+ /**
+ * Pushes all the cookies from the service to the browser and verifies if all cookies were
+ * stored.
+ */
+ function push() {
+ var name,
+ value,
+ browserCookies,
+ updated;
+
+ //delete any cookies deleted in $cookies
+ for (name in lastCookies) {
+ if (isUndefined(cookies[name])) {
+ $browser.cookies(name, undefined);
+ }
+ }
+
+ //update all cookies updated in $cookies
+ for (name in cookies) {
+ value = cookies[name];
+ if (!angular.isString(value)) {
+ value = '' + value;
+ cookies[name] = value;
+ }
+ if (value !== lastCookies[name]) {
+ $browser.cookies(name, value);
+ updated = true;
+ }
+ }
+
+ //verify what was actually stored
+ if (updated) {
+ updated = false;
+ browserCookies = $browser.cookies();
+
+ for (name in cookies) {
+ if (cookies[name] !== browserCookies[name]) {
+ //delete or reset all cookies that the browser dropped from $cookies
+ if (isUndefined(browserCookies[name])) {
+ delete cookies[name];
+ } else {
+ cookies[name] = browserCookies[name];
+ }
+ updated = true;
+ }
+ }
+ }
+ }
+ }]).
+
+
+ /**
+ * @ngdoc service
+ * @name $cookieStore
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookieStoreExample', ['ngCookies'])
+ * .controller('ExampleController', ['$cookieStore', function($cookieStore) {
+ * // Put cookie
+ * $cookieStore.put('myFavorite','oatmeal');
+ * // Get cookie
+ * var favoriteCookie = $cookieStore.get('myFavorite');
+ * // Removing a cookie
+ * $cookieStore.remove('myFavorite');
+ * }]);
+ * ```
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+ return {
+ /**
+ * @ngdoc method
+ * @name $cookieStore#get
+ *
+ * @description
+ * Returns the value of given cookie key
+ *
+ * @param {string} key Id to use for lookup.
+ * @returns {Object} Deserialized cookie value.
+ */
+ get: function(key) {
+ var value = $cookies[key];
+ return value ? angular.fromJson(value) : value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cookieStore#put
+ *
+ * @description
+ * Sets a value for given cookie key
+ *
+ * @param {string} key Id for the `value`.
+ * @param {Object} value Value to be stored.
+ */
+ put: function(key, value) {
+ $cookies[key] = angular.toJson(value);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cookieStore#remove
+ *
+ * @description
+ * Remove given cookie
+ *
+ * @param {string} key Id of the key-value pair to delete.
+ */
+ remove: function(key) {
+ delete $cookies[key];
+ }
+ };
+
+ }]);
+
+
+})(window, window.angular);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.min.js
new file mode 100644
index 000000000..cb1fce672
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-cookies.min.js
@@ -0,0 +1,31 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore",
+["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular);
+//# sourceMappingURL=angular-cookies.min.js.map
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-resource.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-resource.min.js
new file mode 100644
index 000000000..05b6d4ce9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-resource.min.js
@@ -0,0 +1,36 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var w=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
+this.$get=["$http","$q",function(q,h){function t(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function v(x,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){u(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw w("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b||
+{},this)}var G=new t(x,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,y,m,x){var n={},f,l,z;switch(arguments.length){case 4:z=x,l=m;case 3:case 2:if(u(y)){if(u(a)){l=a;z=y;break}l=y;z=m}else{n=a;f=y;l=m;break}case 1:u(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw w("badargs",arguments.length);}var t=this instanceof e,p=t?f:b.isArray?[]:new e(f),
+A={},v=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(A[a]=H(b))});g&&(A.data=f);G.setUrlParams(A,s({},c(f,b.params||{}),n),b.url);n=q(A).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw w("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object");b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):(D(c,p),p.$promise=
+g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(z||E)(a);return h.reject(a)});n=n.then(function(a){var b=v(a);(l||E)(b,a.headers);return b},C);return t?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){u(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return v(x,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,u=d.isFunction;t.prototype={setUrlParams:function(f,g,l){var m=this,c=l||m.template,h,
+e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw w("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+
+k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return v}]})})(window,window.angular);
+//# sourceMappingURL=angular-resource.min.js.map
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.js
new file mode 100644
index 000000000..1846bcc8d
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.js
@@ -0,0 +1,1018 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/**
+ * @license AngularJS v1.3.8
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngRoute
+ * @description
+ *
+ * # ngRoute
+ *
+ * The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ *
+ * <div doc-module-components="ngRoute"></div>
+ */
+ /* global -ngRouteModule */
+var ngRouteModule = angular.module('ngRoute', ['ng']).
+ provider('$route', $RouteProvider),
+ $routeMinErr = angular.$$minErr('ngRoute');
+
+/**
+ * @ngdoc provider
+ * @name $routeProvider
+ *
+ * @description
+ *
+ * Used for configuring routes.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ * ## Dependencies
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ */
+function $RouteProvider() {
+ function inherit(parent, extra) {
+ return angular.extend(Object.create(parent), extra);
+ }
+
+ var routes = {};
+
+ /**
+ * @ngdoc method
+ * @name $routeProvider#when
+ *
+ * @param {string} path Route path (matched against `$location.path`). If `$location.path`
+ * contains redundant trailing slash or is missing one, the route will still match and the
+ * `$location.path` will be updated to add or drop the trailing slash to exactly match the
+ * route definition.
+ *
+ * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up
+ * to the next slash are matched and stored in `$routeParams` under the given `name`
+ * when the route matches.
+ * * `path` can contain named groups starting with a colon and ending with a star:
+ * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`
+ * when the route matches.
+ * * `path` can contain optional named groups with a question mark: e.g.`:name?`.
+ *
+ * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match
+ * `/color/brown/largecode/code/with/slashes/edit` and extract:
+ *
+ * * `color: brown`
+ * * `largecode: code/with/slashes`.
+ *
+ *
+ * @param {Object} route Mapping information to be assigned to `$route.current` on route
+ * match.
+ *
+ * Object properties:
+ *
+ * - `controller` – `{(string|function()=}` – Controller fn that should be associated with
+ * newly created scope or the name of a {@link angular.Module#controller registered
+ * controller} if passed as a string.
+ * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be
+ * published to scope under the `controllerAs` name.
+ * - `template` – `{string=|function()=}` – html template as a string or a function that
+ * returns an html template as a string which should be used by {@link
+ * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.
+ * This property takes precedence over `templateUrl`.
+ *
+ * If `template` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
+ * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html
+ * template that should be used by {@link ngRoute.directive:ngView ngView}.
+ *
+ * If `templateUrl` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
+ * - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
+ * be injected into the controller. If any of these dependencies are promises, the router
+ * will wait for them all to be resolved or one to be rejected before the controller is
+ * instantiated.
+ * If all the promises are resolved successfully, the values of the resolved promises are
+ * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is
+ * fired. If any of the promises are rejected the
+ * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object
+ * is:
+ *
+ * - `key` – `{string}`: a name of a dependency to be injected into the controller.
+ * - `factory` - `{string|function}`: If `string` then it is an alias for a service.
+ * Otherwise if function, then it is {@link auto.$injector#invoke injected}
+ * and the return value is treated as the dependency. If the result is a promise, it is
+ * resolved before its value is injected into the controller. Be aware that
+ * `ngRoute.$routeParams` will still refer to the previous route within these resolve
+ * functions. Use `$route.current.params` to access the new route parameters, instead.
+ *
+ * - `redirectTo` – {(string|function())=} – value to update
+ * {@link ng.$location $location} path with and trigger route redirection.
+ *
+ * If `redirectTo` is a function, it will be called with the following parameters:
+ *
+ * - `{Object.<string>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route templateUrl.
+ * - `{string}` - current `$location.path()`
+ * - `{Object}` - current `$location.search()`
+ *
+ * The custom `redirectTo` function is expected to return a string which will be used
+ * to update `$location.path()` and `$location.search()`.
+ *
+ * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()`
+ * or `$location.hash()` changes.
+ *
+ * If the option is set to `false` and url in the browser changes, then
+ * `$routeUpdate` event is broadcasted on the root scope.
+ *
+ * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive
+ *
+ * If the option is set to `true`, then the particular route can be matched without being
+ * case sensitive
+ *
+ * @returns {Object} self
+ *
+ * @description
+ * Adds a new route definition to the `$route` service.
+ */
+ this.when = function(path, route) {
+ //copy original route object to preserve params inherited from proto chain
+ var routeCopy = angular.copy(route);
+ if (angular.isUndefined(routeCopy.reloadOnSearch)) {
+ routeCopy.reloadOnSearch = true;
+ }
+ if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
+ routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
+ }
+ routes[path] = angular.extend(
+ routeCopy,
+ path && pathRegExp(path, routeCopy)
+ );
+
+ // create redirection for trailing slashes
+ if (path) {
+ var redirectPath = (path[path.length - 1] == '/')
+ ? path.substr(0, path.length - 1)
+ : path + '/';
+
+ routes[redirectPath] = angular.extend(
+ {redirectTo: path},
+ pathRegExp(redirectPath, routeCopy)
+ );
+ }
+
+ return this;
+ };
+
+ /**
+ * @ngdoc property
+ * @name $routeProvider#caseInsensitiveMatch
+ * @description
+ *
+ * A boolean property indicating if routes defined
+ * using this provider should be matched using a case insensitive
+ * algorithm. Defaults to `false`.
+ */
+ this.caseInsensitiveMatch = false;
+
+ /**
+ * @param path {string} path
+ * @param opts {Object} options
+ * @return {?Object}
+ *
+ * @description
+ * Normalizes the given path, returning a regular expression
+ * and the original path.
+ *
+ * Inspired by pathRexp in visionmedia/express/lib/utils.js.
+ */
+ function pathRegExp(path, opts) {
+ var insensitive = opts.caseInsensitiveMatch,
+ ret = {
+ originalPath: path,
+ regexp: path
+ },
+ keys = ret.keys = [];
+
+ path = path
+ .replace(/([().])/g, '\\$1')
+ .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option) {
+ var optional = option === '?' ? option : null;
+ var star = option === '*' ? option : null;
+ keys.push({ name: key, optional: !!optional });
+ slash = slash || '';
+ return ''
+ + (optional ? '' : slash)
+ + '(?:'
+ + (optional ? slash : '')
+ + (star && '(.+?)' || '([^/]+)')
+ + (optional || '')
+ + ')'
+ + (optional || '');
+ })
+ .replace(/([\/$\*])/g, '\\$1');
+
+ ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : '');
+ return ret;
+ }
+
+ /**
+ * @ngdoc method
+ * @name $routeProvider#otherwise
+ *
+ * @description
+ * Sets route definition that will be used on route change when no other route definition
+ * is matched.
+ *
+ * @param {Object|string} params Mapping information to be assigned to `$route.current`.
+ * If called with a string, the value maps to `redirectTo`.
+ * @returns {Object} self
+ */
+ this.otherwise = function(params) {
+ if (typeof params === 'string') {
+ params = {redirectTo: params};
+ }
+ this.when(null, params);
+ return this;
+ };
+
+
+ this.$get = ['$rootScope',
+ '$location',
+ '$routeParams',
+ '$q',
+ '$injector',
+ '$templateRequest',
+ '$sce',
+ function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce) {
+
+ /**
+ * @ngdoc service
+ * @name $route
+ * @requires $location
+ * @requires $routeParams
+ *
+ * @property {Object} current Reference to the current route definition.
+ * The route definition contains:
+ *
+ * - `controller`: The controller constructor as define in route definition.
+ * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
+ * controller instantiation. The `locals` contain
+ * the resolved values of the `resolve` map. Additionally the `locals` also contain:
+ *
+ * - `$scope` - The current route scope.
+ * - `$template` - The current route template HTML.
+ *
+ * @property {Object} routes Object with all route configuration Objects as its properties.
+ *
+ * @description
+ * `$route` is used for deep-linking URLs to controllers and views (HTML partials).
+ * It watches `$location.url()` and tries to map the path to an existing route definition.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
+ *
+ * The `$route` service is typically used in conjunction with the
+ * {@link ngRoute.directive:ngView `ngView`} directive and the
+ * {@link ngRoute.$routeParams `$routeParams`} service.
+ *
+ * @example
+ * This example shows how changing the URL hash causes the `$route` to match a route against the
+ * URL, and the `ngView` pulls in the partial.
+ *
+ * <example name="$route-service" module="ngRouteExample"
+ * deps="angular-route.js" fixBase="true">
+ * <file name="index.html">
+ * <div ng-controller="MainController">
+ * Choose:
+ * <a href="Book/Moby">Moby</a> |
+ * <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+ * <a href="Book/Gatsby">Gatsby</a> |
+ * <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+ * <a href="Book/Scarlet">Scarlet Letter</a><br/>
+ *
+ * <div ng-view></div>
+ *
+ * <hr />
+ *
+ * <pre>$location.path() = {{$location.path()}}</pre>
+ * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>
+ * <pre>$route.current.params = {{$route.current.params}}</pre>
+ * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>
+ * <pre>$routeParams = {{$routeParams}}</pre>
+ * </div>
+ * </file>
+ *
+ * <file name="book.html">
+ * controller: {{name}}<br />
+ * Book Id: {{params.bookId}}<br />
+ * </file>
+ *
+ * <file name="chapter.html">
+ * controller: {{name}}<br />
+ * Book Id: {{params.bookId}}<br />
+ * Chapter Id: {{params.chapterId}}
+ * </file>
+ *
+ * <file name="script.js">
+ * angular.module('ngRouteExample', ['ngRoute'])
+ *
+ * .controller('MainController', function($scope, $route, $routeParams, $location) {
+ * $scope.$route = $route;
+ * $scope.$location = $location;
+ * $scope.$routeParams = $routeParams;
+ * })
+ *
+ * .controller('BookController', function($scope, $routeParams) {
+ * $scope.name = "BookController";
+ * $scope.params = $routeParams;
+ * })
+ *
+ * .controller('ChapterController', function($scope, $routeParams) {
+ * $scope.name = "ChapterController";
+ * $scope.params = $routeParams;
+ * })
+ *
+ * .config(function($routeProvider, $locationProvider) {
+ * $routeProvider
+ * .when('/Book/:bookId', {
+ * templateUrl: 'book.html',
+ * controller: 'BookController',
+ * resolve: {
+ * // I will cause a 1 second delay
+ * delay: function($q, $timeout) {
+ * var delay = $q.defer();
+ * $timeout(delay.resolve, 1000);
+ * return delay.promise;
+ * }
+ * }
+ * })
+ * .when('/Book/:bookId/ch/:chapterId', {
+ * templateUrl: 'chapter.html',
+ * controller: 'ChapterController'
+ * });
+ *
+ * // configure html5 to get links working on jsfiddle
+ * $locationProvider.html5Mode(true);
+ * });
+ *
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ * it('should load and compile correct template', function() {
+ * element(by.linkText('Moby: Ch1')).click();
+ * var content = element(by.css('[ng-view]')).getText();
+ * expect(content).toMatch(/controller\: ChapterController/);
+ * expect(content).toMatch(/Book Id\: Moby/);
+ * expect(content).toMatch(/Chapter Id\: 1/);
+ *
+ * element(by.partialLinkText('Scarlet')).click();
+ *
+ * content = element(by.css('[ng-view]')).getText();
+ * expect(content).toMatch(/controller\: BookController/);
+ * expect(content).toMatch(/Book Id\: Scarlet/);
+ * });
+ * </file>
+ * </example>
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeStart
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted before a route change. At this point the route services starts
+ * resolving all of the dependencies needed for the route change to occur.
+ * Typically this involves fetching the view template as well as any dependencies
+ * defined in `resolve` route property. Once all of the dependencies are resolved
+ * `$routeChangeSuccess` is fired.
+ *
+ * The route change (and the `$location` change that triggered it) can be prevented
+ * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}
+ * for more details about event object.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {Route} next Future route information.
+ * @param {Route} current Current route information.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeSuccess
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted after a route dependencies are resolved.
+ * {@link ngRoute.directive:ngView ngView} listens for the directive
+ * to instantiate the controller and render the view.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {Route} current Current route information.
+ * @param {Route|Undefined} previous Previous route information, or undefined if current is
+ * first route entered.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeError
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted if any of the resolve promises are rejected.
+ *
+ * @param {Object} angularEvent Synthetic event object
+ * @param {Route} current Current route information.
+ * @param {Route} previous Previous route information.
+ * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeUpdate
+ * @eventType broadcast on root scope
+ * @description
+ *
+ * The `reloadOnSearch` property has been set to false, and we are reusing the same
+ * instance of the Controller.
+ */
+
+ var forceReload = false,
+ preparedRoute,
+ preparedRouteIsUpdateOnly,
+ $route = {
+ routes: routes,
+
+ /**
+ * @ngdoc method
+ * @name $route#reload
+ *
+ * @description
+ * Causes `$route` service to reload the current route even if
+ * {@link ng.$location $location} hasn't changed.
+ *
+ * As a result of that, {@link ngRoute.directive:ngView ngView}
+ * creates new scope and reinstantiates the controller.
+ */
+ reload: function() {
+ forceReload = true;
+ $rootScope.$evalAsync(function() {
+ // Don't support cancellation of a reload for now...
+ prepareRoute();
+ commitRoute();
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $route#updateParams
+ *
+ * @description
+ * Causes `$route` service to update the current URL, replacing
+ * current route parameters with those specified in `newParams`.
+ * Provided property names that match the route's path segment
+ * definitions will be interpolated into the location's path, while
+ * remaining properties will be treated as query params.
+ *
+ * @param {Object} newParams mapping of URL parameter names to values
+ */
+ updateParams: function(newParams) {
+ if (this.current && this.current.$$route) {
+ var searchParams = {}, self=this;
+
+ angular.forEach(Object.keys(newParams), function(key) {
+ if (!self.current.pathParams[key]) searchParams[key] = newParams[key];
+ });
+
+ newParams = angular.extend({}, this.current.params, newParams);
+ $location.path(interpolate(this.current.$$route.originalPath, newParams));
+ $location.search(angular.extend({}, $location.search(), searchParams));
+ }
+ else {
+ throw $routeMinErr('norout', 'Tried updating route when with no current route');
+ }
+ }
+ };
+
+ $rootScope.$on('$locationChangeStart', prepareRoute);
+ $rootScope.$on('$locationChangeSuccess', commitRoute);
+
+ return $route;
+
+ /////////////////////////////////////////////////////
+
+ /**
+ * @param on {string} current url
+ * @param route {Object} route regexp to match the url against
+ * @return {?Object}
+ *
+ * @description
+ * Check if the route matches the current url.
+ *
+ * Inspired by match in
+ * visionmedia/express/lib/router/router.js.
+ */
+ function switchRouteMatcher(on, route) {
+ var keys = route.keys,
+ params = {};
+
+ if (!route.regexp) return null;
+
+ var m = route.regexp.exec(on);
+ if (!m) return null;
+
+ for (var i = 1, len = m.length; i < len; ++i) {
+ var key = keys[i - 1];
+
+ var val = m[i];
+
+ if (key && val) {
+ params[key.name] = val;
+ }
+ }
+ return params;
+ }
+
+ function prepareRoute($locationEvent) {
+ var lastRoute = $route.current;
+
+ preparedRoute = parseRoute();
+ preparedRouteIsUpdateOnly = preparedRoute && lastRoute && preparedRoute.$$route === lastRoute.$$route
+ && angular.equals(preparedRoute.pathParams, lastRoute.pathParams)
+ && !preparedRoute.reloadOnSearch && !forceReload;
+
+ if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {
+ if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {
+ if ($locationEvent) {
+ $locationEvent.preventDefault();
+ }
+ }
+ }
+ }
+
+ function commitRoute() {
+ var lastRoute = $route.current;
+ var nextRoute = preparedRoute;
+
+ if (preparedRouteIsUpdateOnly) {
+ lastRoute.params = nextRoute.params;
+ angular.copy(lastRoute.params, $routeParams);
+ $rootScope.$broadcast('$routeUpdate', lastRoute);
+ } else if (nextRoute || lastRoute) {
+ forceReload = false;
+ $route.current = nextRoute;
+ if (nextRoute) {
+ if (nextRoute.redirectTo) {
+ if (angular.isString(nextRoute.redirectTo)) {
+ $location.path(interpolate(nextRoute.redirectTo, nextRoute.params)).search(nextRoute.params)
+ .replace();
+ } else {
+ $location.url(nextRoute.redirectTo(nextRoute.pathParams, $location.path(), $location.search()))
+ .replace();
+ }
+ }
+ }
+
+ $q.when(nextRoute).
+ then(function() {
+ if (nextRoute) {
+ var locals = angular.extend({}, nextRoute.resolve),
+ template, templateUrl;
+
+ angular.forEach(locals, function(value, key) {
+ locals[key] = angular.isString(value) ?
+ $injector.get(value) : $injector.invoke(value, null, null, key);
+ });
+
+ if (angular.isDefined(template = nextRoute.template)) {
+ if (angular.isFunction(template)) {
+ template = template(nextRoute.params);
+ }
+ } else if (angular.isDefined(templateUrl = nextRoute.templateUrl)) {
+ if (angular.isFunction(templateUrl)) {
+ templateUrl = templateUrl(nextRoute.params);
+ }
+ templateUrl = $sce.getTrustedResourceUrl(templateUrl);
+ if (angular.isDefined(templateUrl)) {
+ nextRoute.loadedTemplateUrl = templateUrl;
+ template = $templateRequest(templateUrl);
+ }
+ }
+ if (angular.isDefined(template)) {
+ locals['$template'] = template;
+ }
+ return $q.all(locals);
+ }
+ }).
+ // after route change
+ then(function(locals) {
+ if (nextRoute == $route.current) {
+ if (nextRoute) {
+ nextRoute.locals = locals;
+ angular.copy(nextRoute.params, $routeParams);
+ }
+ $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);
+ }
+ }, function(error) {
+ if (nextRoute == $route.current) {
+ $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);
+ }
+ });
+ }
+ }
+
+
+ /**
+ * @returns {Object} the current active route, by matching it against the URL
+ */
+ function parseRoute() {
+ // Match a route
+ var params, match;
+ angular.forEach(routes, function(route, path) {
+ if (!match && (params = switchRouteMatcher($location.path(), route))) {
+ match = inherit(route, {
+ params: angular.extend({}, $location.search(), params),
+ pathParams: params});
+ match.$$route = route;
+ }
+ });
+ // No route matched; fallback to "otherwise" route
+ return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});
+ }
+
+ /**
+ * @returns {string} interpolation of the redirect path with the parameters
+ */
+ function interpolate(string, params) {
+ var result = [];
+ angular.forEach((string || '').split(':'), function(segment, i) {
+ if (i === 0) {
+ result.push(segment);
+ } else {
+ var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/);
+ var key = segmentMatch[1];
+ result.push(params[key]);
+ result.push(segmentMatch[2] || '');
+ delete params[key];
+ }
+ });
+ return result.join('');
+ }
+ }];
+}
+
+ngRouteModule.provider('$routeParams', $RouteParamsProvider);
+
+
+/**
+ * @ngdoc service
+ * @name $routeParams
+ * @requires $route
+ *
+ * @description
+ * The `$routeParams` service allows you to retrieve the current set of route parameters.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * The route parameters are a combination of {@link ng.$location `$location`}'s
+ * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
+ * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
+ *
+ * In case of parameter name collision, `path` params take precedence over `search` params.
+ *
+ * The service guarantees that the identity of the `$routeParams` object will remain unchanged
+ * (but its properties will likely change) even when a route change occurs.
+ *
+ * Note that the `$routeParams` are only updated *after* a route change completes successfully.
+ * This means that you cannot rely on `$routeParams` being correct in route resolve functions.
+ * Instead you can use `$route.current.params` to access the new route's parameters.
+ *
+ * @example
+ * ```js
+ * // Given:
+ * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
+ * // Route: /Chapter/:chapterId/Section/:sectionId
+ * //
+ * // Then
+ * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}
+ * ```
+ */
+function $RouteParamsProvider() {
+ this.$get = function() { return {}; };
+}
+
+ngRouteModule.directive('ngView', ngViewFactory);
+ngRouteModule.directive('ngView', ngViewFillContentFactory);
+
+
+/**
+ * @ngdoc directive
+ * @name ngView
+ * @restrict ECA
+ *
+ * @description
+ * # Overview
+ * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by
+ * including the rendered template of the current route into the main layout (`index.html`) file.
+ * Every time the current route changes, the included view changes with it according to the
+ * configuration of the `$route` service.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * @animations
+ * enter - animation is used to bring new content into the browser.
+ * leave - animation is used to animate existing content away.
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ * @param {string=} onload Expression to evaluate whenever the view updates.
+ *
+ * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll
+ * $anchorScroll} to scroll the viewport after the view is updated.
+ *
+ * - If the attribute is not set, disable scrolling.
+ * - If the attribute is set without value, enable scrolling.
+ * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated
+ * as an expression yields a truthy value.
+ * @example
+ <example name="ngView-directive" module="ngViewExample"
+ deps="angular-route.js;angular-animate.js"
+ animations="true" fixBase="true">
+ <file name="index.html">
+ <div ng-controller="MainCtrl as main">
+ Choose:
+ <a href="Book/Moby">Moby</a> |
+ <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+ <a href="Book/Gatsby">Gatsby</a> |
+ <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+ <a href="Book/Scarlet">Scarlet Letter</a><br/>
+
+ <div class="view-animate-container">
+ <div ng-view class="view-animate"></div>
+ </div>
+ <hr />
+
+ <pre>$location.path() = {{main.$location.path()}}</pre>
+ <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>
+ <pre>$route.current.params = {{main.$route.current.params}}</pre>
+ <pre>$routeParams = {{main.$routeParams}}</pre>
+ </div>
+ </file>
+
+ <file name="book.html">
+ <div>
+ controller: {{book.name}}<br />
+ Book Id: {{book.params.bookId}}<br />
+ </div>
+ </file>
+
+ <file name="chapter.html">
+ <div>
+ controller: {{chapter.name}}<br />
+ Book Id: {{chapter.params.bookId}}<br />
+ Chapter Id: {{chapter.params.chapterId}}
+ </div>
+ </file>
+
+ <file name="animations.css">
+ .view-animate-container {
+ position:relative;
+ height:100px!important;
+ background:white;
+ border:1px solid black;
+ height:40px;
+ overflow:hidden;
+ }
+
+ .view-animate {
+ padding:10px;
+ }
+
+ .view-animate.ng-enter, .view-animate.ng-leave {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+
+ display:block;
+ width:100%;
+ border-left:1px solid black;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ padding:10px;
+ }
+
+ .view-animate.ng-enter {
+ left:100%;
+ }
+ .view-animate.ng-enter.ng-enter-active {
+ left:0;
+ }
+ .view-animate.ng-leave.ng-leave-active {
+ left:-100%;
+ }
+ </file>
+
+ <file name="script.js">
+ angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])
+ .config(['$routeProvider', '$locationProvider',
+ function($routeProvider, $locationProvider) {
+ $routeProvider
+ .when('/Book/:bookId', {
+ templateUrl: 'book.html',
+ controller: 'BookCtrl',
+ controllerAs: 'book'
+ })
+ .when('/Book/:bookId/ch/:chapterId', {
+ templateUrl: 'chapter.html',
+ controller: 'ChapterCtrl',
+ controllerAs: 'chapter'
+ });
+
+ $locationProvider.html5Mode(true);
+ }])
+ .controller('MainCtrl', ['$route', '$routeParams', '$location',
+ function($route, $routeParams, $location) {
+ this.$route = $route;
+ this.$location = $location;
+ this.$routeParams = $routeParams;
+ }])
+ .controller('BookCtrl', ['$routeParams', function($routeParams) {
+ this.name = "BookCtrl";
+ this.params = $routeParams;
+ }])
+ .controller('ChapterCtrl', ['$routeParams', function($routeParams) {
+ this.name = "ChapterCtrl";
+ this.params = $routeParams;
+ }]);
+
+ </file>
+
+ <file name="protractor.js" type="protractor">
+ it('should load and compile correct template', function() {
+ element(by.linkText('Moby: Ch1')).click();
+ var content = element(by.css('[ng-view]')).getText();
+ expect(content).toMatch(/controller\: ChapterCtrl/);
+ expect(content).toMatch(/Book Id\: Moby/);
+ expect(content).toMatch(/Chapter Id\: 1/);
+
+ element(by.partialLinkText('Scarlet')).click();
+
+ content = element(by.css('[ng-view]')).getText();
+ expect(content).toMatch(/controller\: BookCtrl/);
+ expect(content).toMatch(/Book Id\: Scarlet/);
+ });
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngView#$viewContentLoaded
+ * @eventType emit on the current ngView scope
+ * @description
+ * Emitted every time the ngView content is reloaded.
+ */
+ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
+function ngViewFactory($route, $anchorScroll, $animate) {
+ return {
+ restrict: 'ECA',
+ terminal: true,
+ priority: 400,
+ transclude: 'element',
+ link: function(scope, $element, attr, ctrl, $transclude) {
+ var currentScope,
+ currentElement,
+ previousLeaveAnimation,
+ autoScrollExp = attr.autoscroll,
+ onloadExp = attr.onload || '';
+
+ scope.$on('$routeChangeSuccess', update);
+ update();
+
+ function cleanupLastView() {
+ if (previousLeaveAnimation) {
+ $animate.cancel(previousLeaveAnimation);
+ previousLeaveAnimation = null;
+ }
+
+ if (currentScope) {
+ currentScope.$destroy();
+ currentScope = null;
+ }
+ if (currentElement) {
+ previousLeaveAnimation = $animate.leave(currentElement);
+ previousLeaveAnimation.then(function() {
+ previousLeaveAnimation = null;
+ });
+ currentElement = null;
+ }
+ }
+
+ function update() {
+ var locals = $route.current && $route.current.locals,
+ template = locals && locals.$template;
+
+ if (angular.isDefined(template)) {
+ var newScope = scope.$new();
+ var current = $route.current;
+
+ // Note: This will also link all children of ng-view that were contained in the original
+ // html. If that content contains controllers, ... they could pollute/change the scope.
+ // However, using ng-view on an element with additional content does not make sense...
+ // Note: We can't remove them in the cloneAttchFn of $transclude as that
+ // function is called before linking the content, which would apply child
+ // directives to non existing elements.
+ var clone = $transclude(newScope, function(clone) {
+ $animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter() {
+ if (angular.isDefined(autoScrollExp)
+ && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+ $anchorScroll();
+ }
+ });
+ cleanupLastView();
+ });
+
+ currentElement = clone;
+ currentScope = current.scope = newScope;
+ currentScope.$emit('$viewContentLoaded');
+ currentScope.$eval(onloadExp);
+ } else {
+ cleanupLastView();
+ }
+ }
+ }
+ };
+}
+
+// This directive is called during the $transclude call of the first `ngView` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngView
+// is called.
+ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];
+function ngViewFillContentFactory($compile, $controller, $route) {
+ return {
+ restrict: 'ECA',
+ priority: -400,
+ link: function(scope, $element) {
+ var current = $route.current,
+ locals = current.locals;
+
+ $element.html(locals.$template);
+
+ var link = $compile($element.contents());
+
+ if (current.controller) {
+ locals.$scope = scope;
+ var controller = $controller(current.controller, locals);
+ if (current.controllerAs) {
+ scope[current.controllerAs] = controller;
+ }
+ $element.data('$ngControllerController', controller);
+ $element.children().data('$ngControllerController', controller);
+ }
+
+ link(scope);
+ }
+ };
+}
+
+
+})(window, window.angular);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.min.js
new file mode 100644
index 000000000..b7f33a8b9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-route.min.js
@@ -0,0 +1,38 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(p,d,C){'use strict';function v(r,h,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,y){function z(){k&&(g.cancel(k),k=null);l&&(l.$destroy(),l=null);m&&(k=g.leave(m),k.then(function(){k=null}),m=null)}function x(){var b=r.current&&r.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),f=r.current;m=y(b,function(b){g.enter(b,null,m||c).then(function(){!d.isDefined(t)||t&&!a.$eval(t)||h()});z()});l=f.scope=b;l.$emit("$viewContentLoaded");
+l.$eval(w)}else z()}var l,m,k,t=b.autoscroll,w=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,h,g){return{restrict:"ECA",priority:-400,link:function(a,c){var b=g.current,f=b.locals;c.html(f.$template);var y=d(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));y(a)}}}p=d.module("ngRoute",["ng"]).provider("$route",function(){function r(a,c){return d.extend(Object.create(a),
+c)}function h(a,d){var b=d.caseInsensitiveMatch,f={originalPath:a,regexp:a},g=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,d,b,c){a="?"===c?c:null;c="*"===c?c:null;g.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=new RegExp("^"+a+"$",b?"i":"");return f}var g={};this.when=function(a,c){var b=d.copy(c);d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);
+d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&h(a,b));if(a){var f="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";g[f]=d.extend({redirectTo:a},h(f,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,c,b,f,h,p,x){function l(b){var e=s.current;
+(v=(n=k())&&e&&n.$$route===e.$$route&&d.equals(n.pathParams,e.pathParams)&&!n.reloadOnSearch&&!w)||!e&&!n||a.$broadcast("$routeChangeStart",n,e).defaultPrevented&&b&&b.preventDefault()}function m(){var u=s.current,e=n;if(v)u.params=e.params,d.copy(u.params,b),a.$broadcast("$routeUpdate",u);else if(e||u)w=!1,(s.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?c.path(t(e.redirectTo,e.params)).search(e.params).replace():c.url(e.redirectTo(e.pathParams,c.path(),c.search())).replace()),f.when(e).then(function(){if(e){var a=
+d.extend({},e.resolve),b,c;d.forEach(a,function(b,e){a[e]=d.isString(b)?h.get(b):h.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(c=e.templateUrl)&&(d.isFunction(c)&&(c=c(e.params)),c=x.getTrustedResourceUrl(c),d.isDefined(c)&&(e.loadedTemplateUrl=c,b=p(c)));d.isDefined(b)&&(a.$template=b);return f.all(a)}}).then(function(c){e==s.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,u))},function(b){e==s.current&&a.$broadcast("$routeChangeError",
+e,u,b)})}function k(){var a,b;d.forEach(g,function(f,g){var q;if(q=!b){var h=c.path();q=f.keys;var l={};if(f.regexp)if(h=f.regexp.exec(h)){for(var k=1,m=h.length;k<m;++k){var n=q[k-1],p=h[k];n&&p&&(l[n.name]=p)}q=l}else q=null;else q=null;q=a=q}q&&(b=r(f,{params:d.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||g[null]&&r(g[null],{params:{},pathParams:{}})}function t(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),
+g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var w=!1,n,v,s={routes:g,reload:function(){w=!0;a.$evalAsync(function(){l();m()})},updateParams:function(a){if(this.current&&this.current.$$route){var b={},f=this;d.forEach(Object.keys(a),function(c){f.current.pathParams[c]||(b[c]=a[c])});a=d.extend({},this.current.params,a);c.path(t(this.current.$$route.originalPath,a));c.search(d.extend({},c.search(),b))}else throw B("norout");}};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",
+m);return s}]});var B=d.$$minErr("ngRoute");p.provider("$routeParams",function(){this.$get=function(){return{}}});p.directive("ngView",v);p.directive("ngView",A);v.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
+//# sourceMappingURL=angular-route.min.js.map
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.js
new file mode 100644
index 000000000..5daf27dff
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.js
@@ -0,0 +1,703 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/**
+ * @license AngularJS v1.3.8
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+var $sanitizeMinErr = angular.$$minErr('$sanitize');
+
+/**
+ * @ngdoc module
+ * @name ngSanitize
+ * @description
+ *
+ * # ngSanitize
+ *
+ * The `ngSanitize` module provides functionality to sanitize HTML.
+ *
+ *
+ * <div doc-module-components="ngSanitize"></div>
+ *
+ * See {@link ngSanitize.$sanitize `$sanitize`} for usage.
+ */
+
+/*
+ * HTML Parser By Misko Hevery (misko@hevery.com)
+ * based on: HTML Parser By John Resig (ejohn.org)
+ * Original code by Erik Arvidsson, Mozilla Public License
+ * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
+ *
+ * // Use like so:
+ * htmlParser(htmlString, {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $sanitize
+ * @kind function
+ *
+ * @description
+ * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
+ * then serialized back to properly escaped html string. This means that no unsafe input can make
+ * it into the returned string, however, since our parser is more strict than a typical browser
+ * parser, it's possible that some obscure input, which would be recognized as valid HTML by a
+ * browser, won't make it through the sanitizer. The input may also contain SVG markup.
+ * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
+ * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
+ *
+ * @param {string} html HTML input.
+ * @returns {string} Sanitized HTML.
+ *
+ * @example
+ <example module="sanitizeExample" deps="angular-sanitize.js">
+ <file name="index.html">
+ <script>
+ angular.module('sanitizeExample', ['ngSanitize'])
+ .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
+ $scope.snippet =
+ '<p style="color:blue">an html\n' +
+ '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
+ 'snippet</p>';
+ $scope.deliberatelyTrustDangerousSnippet = function() {
+ return $sce.trustAsHtml($scope.snippet);
+ };
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+ <table>
+ <tr>
+ <td>Directive</td>
+ <td>How</td>
+ <td>Source</td>
+ <td>Rendered</td>
+ </tr>
+ <tr id="bind-html-with-sanitize">
+ <td>ng-bind-html</td>
+ <td>Automatically uses $sanitize</td>
+ <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+ <td><div ng-bind-html="snippet"></div></td>
+ </tr>
+ <tr id="bind-html-with-trust">
+ <td>ng-bind-html</td>
+ <td>Bypass $sanitize by explicitly trusting the dangerous value</td>
+ <td>
+ <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt;
+&lt;/div&gt;</pre>
+ </td>
+ <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
+ </tr>
+ <tr id="bind-default">
+ <td>ng-bind</td>
+ <td>Automatically escapes</td>
+ <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+ <td><div ng-bind="snippet"></div></td>
+ </tr>
+ </table>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should sanitize the html snippet by default', function() {
+ expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+ toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
+ });
+
+ it('should inline raw snippet if bound to a trusted value', function() {
+ expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
+ toBe("<p style=\"color:blue\">an html\n" +
+ "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
+ "snippet</p>");
+ });
+
+ it('should escape snippet without any filter', function() {
+ expect(element(by.css('#bind-default div')).getInnerHtml()).
+ toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
+ "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
+ "snippet&lt;/p&gt;");
+ });
+
+ it('should update', function() {
+ element(by.model('snippet')).clear();
+ element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
+ expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+ toBe('new <b>text</b>');
+ expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
+ 'new <b onclick="alert(1)">text</b>');
+ expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
+ "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
+ });
+ </file>
+ </example>
+ */
+function $SanitizeProvider() {
+ this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
+ return function(html) {
+ var buf = [];
+ htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
+ return !/^unsafe/.test($$sanitizeUri(uri, isImage));
+ }));
+ return buf.join('');
+ };
+ }];
+}
+
+function sanitizeText(chars) {
+ var buf = [];
+ var writer = htmlSanitizeWriter(buf, angular.noop);
+ writer.chars(chars);
+ return buf.join('');
+}
+
+
+// Regular Expressions for parsing tags and attributes
+var START_TAG_REGEXP =
+ /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
+ END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/,
+ ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
+ BEGIN_TAG_REGEXP = /^</,
+ BEGING_END_TAGE_REGEXP = /^<\//,
+ COMMENT_REGEXP = /<!--(.*?)-->/g,
+ DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,
+ CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
+ SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+ // Match everything outside of normal chars and " (quote character)
+ NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g;
+
+
+// Good source of info about elements and attributes
+// http://dev.w3.org/html5/spec/Overview.html#semantics
+// http://simon.html5.org/html-elements
+
+// Safe Void Elements - HTML5
+// http://dev.w3.org/html5/spec/Overview.html#void-elements
+var voidElements = makeMap("area,br,col,hr,img,wbr");
+
+// Elements that you can, intentionally, leave open (and which close themselves)
+// http://dev.w3.org/html5/spec/Overview.html#optional-tags
+var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
+ optionalEndTagInlineElements = makeMap("rp,rt"),
+ optionalEndTagElements = angular.extend({},
+ optionalEndTagInlineElements,
+ optionalEndTagBlockElements);
+
+// Safe Block Elements - HTML5
+var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," +
+ "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
+ "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
+
+// Inline Elements - HTML5
+var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," +
+ "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
+ "samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
+
+// SVG Elements
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
+var svgElements = makeMap("animate,animateColor,animateMotion,animateTransform,circle,defs," +
+ "desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient," +
+ "line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set," +
+ "stop,svg,switch,text,title,tspan,use");
+
+// Special Elements (can contain anything)
+var specialElements = makeMap("script,style");
+
+var validElements = angular.extend({},
+ voidElements,
+ blockElements,
+ inlineElements,
+ optionalEndTagElements,
+ svgElements);
+
+//Attributes that have href and hence need to be sanitized
+var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
+
+var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
+ 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
+ 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
+ 'scope,scrolling,shape,size,span,start,summary,target,title,type,' +
+ 'valign,value,vspace,width');
+
+// SVG attributes (without "id" and "name" attributes)
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
+var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
+ 'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,' +
+ 'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,' +
+ 'font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,' +
+ 'gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,' +
+ 'keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,' +
+ 'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,' +
+ 'overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,' +
+ 'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,' +
+ 'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,' +
+ 'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,' +
+ 'stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,' +
+ 'underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,' +
+ 'viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,' +
+ 'xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,' +
+ 'zoomAndPan');
+
+var validAttrs = angular.extend({},
+ uriAttrs,
+ svgAttrs,
+ htmlAttrs);
+
+function makeMap(str) {
+ var obj = {}, items = str.split(','), i;
+ for (i = 0; i < items.length; i++) obj[items[i]] = true;
+ return obj;
+}
+
+
+/**
+ * @example
+ * htmlParser(htmlString, {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ * @param {string} html string
+ * @param {object} handler
+ */
+function htmlParser(html, handler) {
+ if (typeof html !== 'string') {
+ if (html === null || typeof html === 'undefined') {
+ html = '';
+ } else {
+ html = '' + html;
+ }
+ }
+ var index, chars, match, stack = [], last = html, text;
+ stack.last = function() { return stack[ stack.length - 1 ]; };
+
+ while (html) {
+ text = '';
+ chars = true;
+
+ // Make sure we're not in a script or style element
+ if (!stack.last() || !specialElements[ stack.last() ]) {
+
+ // Comment
+ if (html.indexOf("<!--") === 0) {
+ // comments containing -- are not allowed unless they terminate the comment
+ index = html.indexOf("--", 4);
+
+ if (index >= 0 && html.lastIndexOf("-->", index) === index) {
+ if (handler.comment) handler.comment(html.substring(4, index));
+ html = html.substring(index + 3);
+ chars = false;
+ }
+ // DOCTYPE
+ } else if (DOCTYPE_REGEXP.test(html)) {
+ match = html.match(DOCTYPE_REGEXP);
+
+ if (match) {
+ html = html.replace(match[0], '');
+ chars = false;
+ }
+ // end tag
+ } else if (BEGING_END_TAGE_REGEXP.test(html)) {
+ match = html.match(END_TAG_REGEXP);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(END_TAG_REGEXP, parseEndTag);
+ chars = false;
+ }
+
+ // start tag
+ } else if (BEGIN_TAG_REGEXP.test(html)) {
+ match = html.match(START_TAG_REGEXP);
+
+ if (match) {
+ // We only have a valid start-tag if there is a '>'.
+ if (match[4]) {
+ html = html.substring(match[0].length);
+ match[0].replace(START_TAG_REGEXP, parseStartTag);
+ }
+ chars = false;
+ } else {
+ // no ending tag found --- this piece should be encoded as an entity.
+ text += '<';
+ html = html.substring(1);
+ }
+ }
+
+ if (chars) {
+ index = html.indexOf("<");
+
+ text += index < 0 ? html : html.substring(0, index);
+ html = index < 0 ? "" : html.substring(index);
+
+ if (handler.chars) handler.chars(decodeEntities(text));
+ }
+
+ } else {
+ html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
+ function(all, text) {
+ text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
+
+ if (handler.chars) handler.chars(decodeEntities(text));
+
+ return "";
+ });
+
+ parseEndTag("", stack.last());
+ }
+
+ if (html == last) {
+ throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
+ "of html: {0}", html);
+ }
+ last = html;
+ }
+
+ // Clean up any remaining tags
+ parseEndTag();
+
+ function parseStartTag(tag, tagName, rest, unary) {
+ tagName = angular.lowercase(tagName);
+ if (blockElements[ tagName ]) {
+ while (stack.last() && inlineElements[ stack.last() ]) {
+ parseEndTag("", stack.last());
+ }
+ }
+
+ if (optionalEndTagElements[ tagName ] && stack.last() == tagName) {
+ parseEndTag("", tagName);
+ }
+
+ unary = voidElements[ tagName ] || !!unary;
+
+ if (!unary)
+ stack.push(tagName);
+
+ var attrs = {};
+
+ rest.replace(ATTR_REGEXP,
+ function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {
+ var value = doubleQuotedValue
+ || singleQuotedValue
+ || unquotedValue
+ || '';
+
+ attrs[name] = decodeEntities(value);
+ });
+ if (handler.start) handler.start(tagName, attrs, unary);
+ }
+
+ function parseEndTag(tag, tagName) {
+ var pos = 0, i;
+ tagName = angular.lowercase(tagName);
+ if (tagName)
+ // Find the closest opened tag of the same type
+ for (pos = stack.length - 1; pos >= 0; pos--)
+ if (stack[ pos ] == tagName)
+ break;
+
+ if (pos >= 0) {
+ // Close all the open elements, up the stack
+ for (i = stack.length - 1; i >= pos; i--)
+ if (handler.end) handler.end(stack[ i ]);
+
+ // Remove the open elements from the stack
+ stack.length = pos;
+ }
+ }
+}
+
+var hiddenPre=document.createElement("pre");
+var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/;
+/**
+ * decodes all entities into regular string
+ * @param value
+ * @returns {string} A string with decoded entities.
+ */
+function decodeEntities(value) {
+ if (!value) { return ''; }
+
+ // Note: IE8 does not preserve spaces at the start/end of innerHTML
+ // so we must capture them and reattach them afterward
+ var parts = spaceRe.exec(value);
+ var spaceBefore = parts[1];
+ var spaceAfter = parts[3];
+ var content = parts[2];
+ if (content) {
+ hiddenPre.innerHTML=content.replace(/</g,"&lt;");
+ // innerText depends on styling as it doesn't display hidden elements.
+ // Therefore, it's better to use textContent not to cause unnecessary
+ // reflows. However, IE<9 don't support textContent so the innerText
+ // fallback is necessary.
+ content = 'textContent' in hiddenPre ?
+ hiddenPre.textContent : hiddenPre.innerText;
+ }
+ return spaceBefore + content + spaceAfter;
+}
+
+/**
+ * Escapes all potentially dangerous characters, so that the
+ * resulting string can be safely inserted into attribute or
+ * element text.
+ * @param value
+ * @returns {string} escaped text
+ */
+function encodeEntities(value) {
+ return value.
+ replace(/&/g, '&amp;').
+ replace(SURROGATE_PAIR_REGEXP, function(value) {
+ var hi = value.charCodeAt(0);
+ var low = value.charCodeAt(1);
+ return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
+ }).
+ replace(NON_ALPHANUMERIC_REGEXP, function(value) {
+ return '&#' + value.charCodeAt(0) + ';';
+ }).
+ replace(/</g, '&lt;').
+ replace(/>/g, '&gt;');
+}
+
+/**
+ * create an HTML/XML writer which writes to buffer
+ * @param {Array} buf use buf.jain('') to get out sanitized html string
+ * @returns {object} in the form of {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * }
+ */
+function htmlSanitizeWriter(buf, uriValidator) {
+ var ignore = false;
+ var out = angular.bind(buf, buf.push);
+ return {
+ start: function(tag, attrs, unary) {
+ tag = angular.lowercase(tag);
+ if (!ignore && specialElements[tag]) {
+ ignore = tag;
+ }
+ if (!ignore && validElements[tag] === true) {
+ out('<');
+ out(tag);
+ angular.forEach(attrs, function(value, key) {
+ var lkey=angular.lowercase(key);
+ var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
+ if (validAttrs[lkey] === true &&
+ (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
+ out(' ');
+ out(key);
+ out('="');
+ out(encodeEntities(value));
+ out('"');
+ }
+ });
+ out(unary ? '/>' : '>');
+ }
+ },
+ end: function(tag) {
+ tag = angular.lowercase(tag);
+ if (!ignore && validElements[tag] === true) {
+ out('</');
+ out(tag);
+ out('>');
+ }
+ if (tag == ignore) {
+ ignore = false;
+ }
+ },
+ chars: function(chars) {
+ if (!ignore) {
+ out(encodeEntities(chars));
+ }
+ }
+ };
+}
+
+
+// define ngSanitize module and register $sanitize service
+angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
+
+/* global sanitizeText: false */
+
+/**
+ * @ngdoc filter
+ * @name linky
+ * @kind function
+ *
+ * @description
+ * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
+ * plain email address links.
+ *
+ * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
+ *
+ * @param {string} text Input text.
+ * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
+ * @returns {string} Html-linkified text.
+ *
+ * @usage
+ <span ng-bind-html="linky_expression | linky"></span>
+ *
+ * @example
+ <example module="linkyExample" deps="angular-sanitize.js">
+ <file name="index.html">
+ <script>
+ angular.module('linkyExample', ['ngSanitize'])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.snippet =
+ 'Pretty text with some links:\n'+
+ 'http://angularjs.org/,\n'+
+ 'mailto:us@somewhere.org,\n'+
+ 'another@somewhere.org,\n'+
+ 'and one more: ftp://127.0.0.1/.';
+ $scope.snippetWithTarget = 'http://angularjs.org/';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+ <table>
+ <tr>
+ <td>Filter</td>
+ <td>Source</td>
+ <td>Rendered</td>
+ </tr>
+ <tr id="linky-filter">
+ <td>linky filter</td>
+ <td>
+ <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippet | linky"></div>
+ </td>
+ </tr>
+ <tr id="linky-target">
+ <td>linky target</td>
+ <td>
+ <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
+ </td>
+ </tr>
+ <tr id="escaped-html">
+ <td>no filter</td>
+ <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
+ <td><div ng-bind="snippet"></div></td>
+ </tr>
+ </table>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should linkify the snippet with urls', function() {
+ expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+ toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
+ 'another@somewhere.org, and one more: ftp://127.0.0.1/.');
+ expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
+ });
+
+ it('should not linkify snippet without the linky filter', function() {
+ expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
+ toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
+ 'another@somewhere.org, and one more: ftp://127.0.0.1/.');
+ expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
+ });
+
+ it('should update', function() {
+ element(by.model('snippet')).clear();
+ element(by.model('snippet')).sendKeys('new http://link.');
+ expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+ toBe('new http://link.');
+ expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
+ expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
+ .toBe('new http://link.');
+ });
+
+ it('should work with the target property', function() {
+ expect(element(by.id('linky-target')).
+ element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
+ toBe('http://angularjs.org/');
+ expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
+ });
+ </file>
+ </example>
+ */
+angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
+ var LINKY_URL_REGEXP =
+ /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"â€â€™]/,
+ MAILTO_REGEXP = /^mailto:/;
+
+ return function(text, target) {
+ if (!text) return text;
+ var match;
+ var raw = text;
+ var html = [];
+ var url;
+ var i;
+ while ((match = raw.match(LINKY_URL_REGEXP))) {
+ // We can not end in these as they are sometimes found at the end of the sentence
+ url = match[0];
+ // if we did not match ftp/http/www/mailto then assume mailto
+ if (!match[2] && !match[4]) {
+ url = (match[3] ? 'http://' : 'mailto:') + url;
+ }
+ i = match.index;
+ addText(raw.substr(0, i));
+ addLink(url, match[0].replace(MAILTO_REGEXP, ''));
+ raw = raw.substring(i + match[0].length);
+ }
+ addText(raw);
+ return $sanitize(html.join(''));
+
+ function addText(text) {
+ if (!text) {
+ return;
+ }
+ html.push(sanitizeText(text));
+ }
+
+ function addLink(url, text) {
+ html.push('<a ');
+ if (angular.isDefined(target)) {
+ html.push('target="',
+ target,
+ '" ');
+ }
+ html.push('href="',
+ url.replace(/"/g, '&quot;'),
+ '">');
+ addText(text);
+ html.push('</a>');
+ }
+ };
+}]);
+
+
+})(window, window.angular);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.min.js
new file mode 100644
index 000000000..e657c5b75
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-sanitize.min.js
@@ -0,0 +1,39 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(n,h,p){'use strict';function E(a){var d=[];s(d,h.noop).chars(a);return d.join("")}function g(a){var d={};a=a.split(",");var c;for(c=0;c<a.length;c++)d[a[c]]=!0;return d}function F(a,d){function c(a,b,c,l){b=h.lowercase(b);if(t[b])for(;f.last()&&u[f.last()];)e("",f.last());v[b]&&f.last()==b&&e("",b);(l=w[b]||!!l)||f.push(b);var m={};c.replace(G,function(a,b,d,c,e){m[b]=r(d||c||e||"")});d.start&&d.start(b,m,l)}function e(a,b){var c=0,e;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--);
+if(0<=c){for(e=f.length-1;e>=c;e--)d.end&&d.end(f[e]);f.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,f=[],m=a,l;for(f.last=function(){return f[f.length-1]};a;){l="";k=!0;if(f.last()&&x[f.last()])a=a.replace(new RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");d.chars&&d.chars(r(b));return""}),e("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(d.comment&&d.comment(a.substring(4,
+b)),a=a.substring(b+3),k=!1);else if(y.test(a)){if(b=a.match(y))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,e),k=!1}else K.test(a)&&((b=a.match(A))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(A,c)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),d.chars&&d.chars(r(l)))}if(a==m)throw L("badparse",a);m=a}e()}function r(a){if(!a)return"";var d=M.exec(a);a=d[1];var c=d[3];if(d=d[2])q.innerHTML=
+d.replace(/</g,"&lt;"),d="textContent"in q?q.textContent:q.innerText;return a+d+c}function B(a){return a.replace(/&/g,"&amp;").replace(N,function(a){var c=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(c-55296)+(a-56320)+65536)+";"}).replace(O,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function s(a,d){var c=!1,e=h.bind(a,a.push);return{start:function(a,k,f){a=h.lowercase(a);!c&&x[a]&&(c=a);c||!0!==C[a]||(e("<"),e(a),h.forEach(k,function(c,f){var k=
+h.lowercase(f),g="img"===a&&"src"===k||"background"===k;!0!==P[k]||!0===D[k]&&!d(c,g)||(e(" "),e(f),e('="'),e(B(c)),e('"'))}),e(f?"/>":">"))},end:function(a){a=h.lowercase(a);c||!0!==C[a]||(e("</"),e(a),e(">"));a==c&&(c=!1)},chars:function(a){c||e(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,z=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,
+J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,y=/<!DOCTYPE([^>]*?)>/i,I=/<!\[CDATA\[(.*?)]]\x3e/g,N=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O=/([^\#-~| |!])/g,w=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var v=h.extend({},p,n),t=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),u=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
+n=g("animate,animateColor,animateMotion,animateTransform,circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set,stop,svg,switch,text,title,tspan,use");var x=g("script,style"),C=h.extend({},w,t,u,v,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width");
+p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan");
+var P=h.extend({},D,p,n),q=document.createElement("pre"),M=/^(\s*)([\s\S]*?)(\s*)$/;h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(d){var c=[];F(d,s(c,function(c,b){return!/^unsafe/.test(a(c,b))}));return c.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var d=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/,c=/^mailto:/;return function(e,b){function k(a){a&&g.push(E(a))}
+function f(a,c){g.push("<a ");h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"&quot;"),'">');k(c);g.push("</a>")}if(!e)return e;for(var m,l=e,g=[],n,p;m=l.match(d);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),f(n,m[0].replace(c,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
+//# sourceMappingURL=angular-sanitize.min.js.map
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.js
new file mode 100644
index 000000000..a3a735869
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.js
@@ -0,0 +1,217 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2014 Andrey Bezyazychniy
+
+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.
+*/
+'use strict';
+
+angular.module('ab-base64',[]).constant('base64', (function() {
+
+ /*
+ * Encapsulation of Vassilis Petroulias's base64.js library for AngularJS
+ * Original notice included below
+ */
+
+ /*
+ Copyright Vassilis Petroulias [DRDigit]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+ var B64 = {
+ alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
+ lookup: null,
+ ie: /MSIE /.test(navigator.userAgent),
+ ieo: /MSIE [67]/.test(navigator.userAgent),
+ encode: function (s) {
+ /* jshint bitwise:false */
+ var buffer = B64.toUtf8(s),
+ position = -1,
+ result,
+ len = buffer.length,
+ nan0, nan1, nan2, enc = [, , , ];
+
+ if (B64.ie) {
+ result = [];
+ while (++position < len) {
+ nan0 = buffer[position];
+ nan1 = buffer[++position];
+ enc[0] = nan0 >> 2;
+ enc[1] = ((nan0 & 3) << 4) | (nan1 >> 4);
+ if (isNaN(nan1))
+ enc[2] = enc[3] = 64;
+ else {
+ nan2 = buffer[++position];
+ enc[2] = ((nan1 & 15) << 2) | (nan2 >> 6);
+ enc[3] = (isNaN(nan2)) ? 64 : nan2 & 63;
+ }
+ result.push(B64.alphabet.charAt(enc[0]), B64.alphabet.charAt(enc[1]), B64.alphabet.charAt(enc[2]), B64.alphabet.charAt(enc[3]));
+ }
+ return result.join('');
+ } else {
+ result = '';
+ while (++position < len) {
+ nan0 = buffer[position];
+ nan1 = buffer[++position];
+ enc[0] = nan0 >> 2;
+ enc[1] = ((nan0 & 3) << 4) | (nan1 >> 4);
+ if (isNaN(nan1))
+ enc[2] = enc[3] = 64;
+ else {
+ nan2 = buffer[++position];
+ enc[2] = ((nan1 & 15) << 2) | (nan2 >> 6);
+ enc[3] = (isNaN(nan2)) ? 64 : nan2 & 63;
+ }
+ result += B64.alphabet[enc[0]] + B64.alphabet[enc[1]] + B64.alphabet[enc[2]] + B64.alphabet[enc[3]];
+ }
+ return result;
+ }
+ },
+ decode: function (s) {
+ /* jshint bitwise:false */
+ s = s.replace(/\s/g, '');
+ if (s.length % 4)
+ throw new Error('InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.');
+ if(/[^A-Za-z0-9+\/=\s]/g.test(s))
+ throw new Error('InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string.');
+
+ var buffer = B64.fromUtf8(s),
+ position = 0,
+ result,
+ len = buffer.length;
+
+ if (B64.ieo) {
+ result = [];
+ while (position < len) {
+ if (buffer[position] < 128)
+ result.push(String.fromCharCode(buffer[position++]));
+ else if (buffer[position] > 191 && buffer[position] < 224)
+ result.push(String.fromCharCode(((buffer[position++] & 31) << 6) | (buffer[position++] & 63)));
+ else
+ result.push(String.fromCharCode(((buffer[position++] & 15) << 12) | ((buffer[position++] & 63) << 6) | (buffer[position++] & 63)));
+ }
+ return result.join('');
+ } else {
+ result = '';
+ while (position < len) {
+ if (buffer[position] < 128)
+ result += String.fromCharCode(buffer[position++]);
+ else if (buffer[position] > 191 && buffer[position] < 224)
+ result += String.fromCharCode(((buffer[position++] & 31) << 6) | (buffer[position++] & 63));
+ else
+ result += String.fromCharCode(((buffer[position++] & 15) << 12) | ((buffer[position++] & 63) << 6) | (buffer[position++] & 63));
+ }
+ return result;
+ }
+ },
+ toUtf8: function (s) {
+ /* jshint bitwise:false */
+ var position = -1,
+ len = s.length,
+ chr, buffer = [];
+ if (/^[\x00-\x7f]*$/.test(s)) while (++position < len)
+ buffer.push(s.charCodeAt(position));
+ else while (++position < len) {
+ chr = s.charCodeAt(position);
+ if (chr < 128)
+ buffer.push(chr);
+ else if (chr < 2048)
+ buffer.push((chr >> 6) | 192, (chr & 63) | 128);
+ else
+ buffer.push((chr >> 12) | 224, ((chr >> 6) & 63) | 128, (chr & 63) | 128);
+ }
+ return buffer;
+ },
+ fromUtf8: function (s) {
+ /* jshint bitwise:false */
+ var position = -1,
+ len, buffer = [],
+ enc = [, , , ];
+ if (!B64.lookup) {
+ len = B64.alphabet.length;
+ B64.lookup = {};
+ while (++position < len)
+ B64.lookup[B64.alphabet.charAt(position)] = position;
+ position = -1;
+ }
+ len = s.length;
+ while (++position < len) {
+ enc[0] = B64.lookup[s.charAt(position)];
+ enc[1] = B64.lookup[s.charAt(++position)];
+ buffer.push((enc[0] << 2) | (enc[1] >> 4));
+ enc[2] = B64.lookup[s.charAt(++position)];
+ if (enc[2] === 64)
+ break;
+ buffer.push(((enc[1] & 15) << 4) | (enc[2] >> 2));
+ enc[3] = B64.lookup[s.charAt(++position)];
+ if (enc[3] === 64)
+ break;
+ buffer.push(((enc[2] & 3) << 6) | enc[3]);
+ }
+ return buffer;
+ }
+ };
+
+ var B64url = {
+ decode: function(input) {
+ // Replace non-url compatible chars with base64 standard chars
+ input = input
+ .replace(/-/g, '+')
+ .replace(/_/g, '/');
+
+ // Pad out with standard base64 required padding characters
+ var pad = input.length % 4;
+ if(pad) {
+ if(pad === 1) {
+ throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding');
+ }
+ input += new Array(5-pad).join('=');
+ }
+
+ return B64.decode(input);
+ },
+
+ encode: function(input) {
+ var output = B64.encode(input);
+ return output
+ .replace(/\+/g, '-')
+ .replace(/\//g, '_')
+ .split('=', 1)[0];
+ }
+ };
+
+ return {
+ decode: B64.decode,
+ encode: B64.encode,
+ urldecode: B64url.decode,
+ urlencode: B64url.encode,
+ };
+})());
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.min.js
new file mode 100644
index 000000000..6246f9624
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular-utf8-base64.min.js
@@ -0,0 +1,45 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2014 Andrey Bezyazychniy
+
+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.
+*/
+
+/*
+ * Encapsulation of Vassilis Petroulias's base64.js library for AngularJS
+ * Original notice included below
+ */
+
+/*
+ Copyright Vassilis Petroulias [DRDigit]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+"use strict";angular.module("ab-base64",[]).constant("base64",function(){var a={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",lookup:null,ie:/MSIE /.test(navigator.userAgent),ieo:/MSIE [67]/.test(navigator.userAgent),encode:function(b){var c,d,e,f,g=a.toUtf8(b),h=-1,i=g.length,j=[,,,];if(a.ie){for(c=[];++h<i;)d=g[h],e=g[++h],j[0]=d>>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c.push(a.alphabet.charAt(j[0]),a.alphabet.charAt(j[1]),a.alphabet.charAt(j[2]),a.alphabet.charAt(j[3]));return c.join("")}for(c="";++h<i;)d=g[h],e=g[++h],j[0]=d>>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c+=a.alphabet[j[0]]+a.alphabet[j[1]]+a.alphabet[j[2]]+a.alphabet[j[3]];return c},decode:function(b){if(b=b.replace(/\s/g,""),b.length%4)throw new Error("InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.");if(/[^A-Za-z0-9+\/=\s]/g.test(b))throw new Error("InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string.");var c,d=a.fromUtf8(b),e=0,f=d.length;if(a.ieo){for(c=[];f>e;)c.push(d[e]<128?String.fromCharCode(d[e++]):d[e]>191&&d[e]<224?String.fromCharCode((31&d[e++])<<6|63&d[e++]):String.fromCharCode((15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]));return c.join("")}for(c="";f>e;)c+=String.fromCharCode(d[e]<128?d[e++]:d[e]>191&&d[e]<224?(31&d[e++])<<6|63&d[e++]:(15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]);return c},toUtf8:function(a){var b,c=-1,d=a.length,e=[];if(/^[\x00-\x7f]*$/.test(a))for(;++c<d;)e.push(a.charCodeAt(c));else for(;++c<d;)b=a.charCodeAt(c),128>b?e.push(b):2048>b?e.push(b>>6|192,63&b|128):e.push(b>>12|224,b>>6&63|128,63&b|128);return e},fromUtf8:function(b){var c,d=-1,e=[],f=[,,,];if(!a.lookup){for(c=a.alphabet.length,a.lookup={};++d<c;)a.lookup[a.alphabet.charAt(d)]=d;d=-1}for(c=b.length;++d<c&&(f[0]=a.lookup[b.charAt(d)],f[1]=a.lookup[b.charAt(++d)],e.push(f[0]<<2|f[1]>>4),f[2]=a.lookup[b.charAt(++d)],64!==f[2])&&(e.push((15&f[1])<<4|f[2]>>2),f[3]=a.lookup[b.charAt(++d)],64!==f[3]);)e.push((3&f[2])<<6|f[3]);return e}},b={decode:function(b){b=b.replace(/-/g,"+").replace(/_/g,"/");var c=b.length%4;if(c){if(1===c)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");b+=new Array(5-c).join("=")}return a.decode(b)},encode:function(b){var c=a.encode(b);return c.replace(/\+/g,"-").replace(/\//g,"_").split("=",1)[0]}};return{decode:a.decode,encode:a.encode,urldecode:b.decode,urlencode:b.encode}}());
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular.js
new file mode 100644
index 000000000..aebeef165
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular.js
@@ -0,0 +1,26093 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/**
+ * @license AngularJS v1.3.8
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, document, undefined) {'use strict';
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one. The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ * error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+ ErrorConstructor = ErrorConstructor || Error;
+ return function() {
+ var code = arguments[0],
+ prefix = '[' + (module ? module + ':' : '') + code + '] ',
+ template = arguments[1],
+ templateArgs = arguments,
+
+ message, i;
+
+ message = prefix + template.replace(/\{\d+\}/g, function(match) {
+ var index = +match.slice(1, -1), arg;
+
+ if (index + 2 < templateArgs.length) {
+ return toDebugString(templateArgs[index + 2]);
+ }
+ return match;
+ });
+
+ message = message + '\nhttp://errors.angularjs.org/1.3.8/' +
+ (module ? module + '/' : '') + code;
+ for (i = 2; i < arguments.length; i++) {
+ message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
+ encodeURIComponent(toDebugString(arguments[i]));
+ }
+ return new ErrorConstructor(message);
+ };
+}
+
+/* We need to tell jshint what variables are being exported */
+/* global angular: true,
+ msie: true,
+ jqLite: true,
+ jQuery: true,
+ slice: true,
+ splice: true,
+ push: true,
+ toString: true,
+ ngMinErr: true,
+ angularModule: true,
+ uid: true,
+ REGEX_STRING_REGEXP: true,
+ VALIDITY_STATE_PROPERTY: true,
+
+ lowercase: true,
+ uppercase: true,
+ manualLowercase: true,
+ manualUppercase: true,
+ nodeName_: true,
+ isArrayLike: true,
+ forEach: true,
+ sortedKeys: true,
+ forEachSorted: true,
+ reverseParams: true,
+ nextUid: true,
+ setHashKey: true,
+ extend: true,
+ int: true,
+ inherit: true,
+ noop: true,
+ identity: true,
+ valueFn: true,
+ isUndefined: true,
+ isDefined: true,
+ isObject: true,
+ isString: true,
+ isNumber: true,
+ isDate: true,
+ isArray: true,
+ isFunction: true,
+ isRegExp: true,
+ isWindow: true,
+ isScope: true,
+ isFile: true,
+ isFormData: true,
+ isBlob: true,
+ isBoolean: true,
+ isPromiseLike: true,
+ trim: true,
+ escapeForRegexp: true,
+ isElement: true,
+ makeMap: true,
+ includes: true,
+ arrayRemove: true,
+ copy: true,
+ shallowCopy: true,
+ equals: true,
+ csp: true,
+ concat: true,
+ sliceArgs: true,
+ bind: true,
+ toJsonReplacer: true,
+ toJson: true,
+ fromJson: true,
+ startingTag: true,
+ tryDecodeURIComponent: true,
+ parseKeyValue: true,
+ toKeyValue: true,
+ encodeUriSegment: true,
+ encodeUriQuery: true,
+ angularInit: true,
+ bootstrap: true,
+ getTestability: true,
+ snake_case: true,
+ bindJQuery: true,
+ assertArg: true,
+ assertArgFn: true,
+ assertNotHasOwnProperty: true,
+ getter: true,
+ getBlockNodes: true,
+ hasOwnProperty: true,
+ createMap: true,
+
+ NODE_TYPE_ELEMENT: true,
+ NODE_TYPE_TEXT: true,
+ NODE_TYPE_COMMENT: true,
+ NODE_TYPE_DOCUMENT: true,
+ NODE_TYPE_DOCUMENT_FRAGMENT: true,
+*/
+
+////////////////////////////////////
+
+/**
+ * @ngdoc module
+ * @name ng
+ * @module ng
+ * @description
+ *
+ * # ng (core module)
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
+ * contains the essential components for an AngularJS application to function. The table below
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
+ * components available within this core module.
+ *
+ * <div doc-module-components="ng"></div>
+ */
+
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
+
+// The name of a form control's ValidityState property.
+// This is used so that it's possible for internal tests to create mock ValidityStates.
+var VALIDITY_STATE_PROPERTY = 'validity';
+
+/**
+ * @ngdoc function
+ * @name angular.lowercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to lowercase.
+ * @param {string} string String to be converted to lowercase.
+ * @returns {string} Lowercased string.
+ */
+var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+/**
+ * @ngdoc function
+ * @name angular.uppercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to uppercase.
+ * @param {string} string String to be converted to uppercase.
+ * @returns {string} Uppercased string.
+ */
+var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
+
+
+var manualLowercase = function(s) {
+ /* jshint bitwise: false */
+ return isString(s)
+ ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
+ : s;
+};
+var manualUppercase = function(s) {
+ /* jshint bitwise: false */
+ return isString(s)
+ ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
+ : s;
+};
+
+
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
+// with correct but slower alternatives.
+if ('i' !== 'I'.toLowerCase()) {
+ lowercase = manualLowercase;
+ uppercase = manualUppercase;
+}
+
+
+var
+ msie, // holds major version number for IE, or NaN if UA is not IE.
+ jqLite, // delay binding since jQuery could be loaded after us.
+ jQuery, // delay binding
+ slice = [].slice,
+ splice = [].splice,
+ push = [].push,
+ toString = Object.prototype.toString,
+ ngMinErr = minErr('ng'),
+
+ /** @name angular */
+ angular = window.angular || (window.angular = {}),
+ angularModule,
+ uid = 0;
+
+/**
+ * documentMode is an IE-only property
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
+ */
+msie = document.documentMode;
+
+
+/**
+ * @private
+ * @param {*} obj
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
+ * String ...)
+ */
+function isArrayLike(obj) {
+ if (obj == null || isWindow(obj)) {
+ return false;
+ }
+
+ var length = obj.length;
+
+ if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
+ return true;
+ }
+
+ return isString(obj) || isArray(obj) || length === 0 ||
+ typeof length === 'number' && length > 0 && (length - 1) in obj;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.forEach
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
+ * is the value of an object property or an array element, `key` is the object property key or
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
+ *
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
+ * using the `hasOwnProperty` method.
+ *
+ * Unlike ES262's
+ * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
+ * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
+ * return the value provided.
+ *
+ ```js
+ var values = {name: 'misko', gender: 'male'};
+ var log = [];
+ angular.forEach(values, function(value, key) {
+ this.push(key + ': ' + value);
+ }, log);
+ expect(log).toEqual(['name: misko', 'gender: male']);
+ ```
+ *
+ * @param {Object|Array} obj Object to iterate over.
+ * @param {Function} iterator Iterator function.
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
+ * @returns {Object|Array} Reference to `obj`.
+ */
+
+function forEach(obj, iterator, context) {
+ var key, length;
+ if (obj) {
+ if (isFunction(obj)) {
+ for (key in obj) {
+ // Need to check if hasOwnProperty exists,
+ // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
+ if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ } else if (isArray(obj) || isArrayLike(obj)) {
+ var isPrimitive = typeof obj !== 'object';
+ for (key = 0, length = obj.length; key < length; key++) {
+ if (isPrimitive || key in obj) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ } else if (obj.forEach && obj.forEach !== forEach) {
+ obj.forEach(iterator, context, obj);
+ } else {
+ for (key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ }
+ }
+ return obj;
+}
+
+function sortedKeys(obj) {
+ return Object.keys(obj).sort();
+}
+
+function forEachSorted(obj, iterator, context) {
+ var keys = sortedKeys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ iterator.call(context, obj[keys[i]], keys[i]);
+ }
+ return keys;
+}
+
+
+/**
+ * when using forEach the params are value, key, but it is often useful to have key, value.
+ * @param {function(string, *)} iteratorFn
+ * @returns {function(*, string)}
+ */
+function reverseParams(iteratorFn) {
+ return function(value, key) { iteratorFn(key, value); };
+}
+
+/**
+ * A consistent way of creating unique IDs in angular.
+ *
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
+ * we hit number precision issues in JavaScript.
+ *
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
+ *
+ * @returns {number} an unique alpha-numeric string
+ */
+function nextUid() {
+ return ++uid;
+}
+
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+ if (h) {
+ obj.$$hashKey = h;
+ }
+ else {
+ delete obj.$$hashKey;
+ }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.extend
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+ * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+ * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
+ * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
+ *
+ * @param {Object} dst Destination object.
+ * @param {...Object} src Source object(s).
+ * @returns {Object} Reference to `dst`.
+ */
+function extend(dst) {
+ var h = dst.$$hashKey;
+
+ for (var i = 1, ii = arguments.length; i < ii; i++) {
+ var obj = arguments[i];
+ if (obj) {
+ var keys = Object.keys(obj);
+ for (var j = 0, jj = keys.length; j < jj; j++) {
+ var key = keys[j];
+ dst[key] = obj[key];
+ }
+ }
+ }
+
+ setHashKey(dst, h);
+ return dst;
+}
+
+function int(str) {
+ return parseInt(str, 10);
+}
+
+
+function inherit(parent, extra) {
+ return extend(Object.create(parent), extra);
+}
+
+/**
+ * @ngdoc function
+ * @name angular.noop
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that performs no operations. This function can be useful when writing code in the
+ * functional style.
+ ```js
+ function foo(callback) {
+ var result = calculateResult();
+ (callback || angular.noop)(result);
+ }
+ ```
+ */
+function noop() {}
+noop.$inject = [];
+
+
+/**
+ * @ngdoc function
+ * @name angular.identity
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that returns its first argument. This function is useful when writing code in the
+ * functional style.
+ *
+ ```js
+ function transformer(transformationFn, value) {
+ return (transformationFn || angular.identity)(value);
+ };
+ ```
+ * @param {*} value to be returned.
+ * @returns {*} the value passed in.
+ */
+function identity($) {return $;}
+identity.$inject = [];
+
+
+function valueFn(value) {return function() {return value;};}
+
+/**
+ * @ngdoc function
+ * @name angular.isUndefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is undefined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is undefined.
+ */
+function isUndefined(value) {return typeof value === 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is defined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is defined.
+ */
+function isDefined(value) {return typeof value !== 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isObject
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
+ * considered to be objects. Note that JavaScript arrays are objects.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
+ */
+function isObject(value) {
+ // http://jsperf.com/isobject4
+ return value !== null && typeof value === 'object';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isString
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `String`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `String`.
+ */
+function isString(value) {return typeof value === 'string';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isNumber
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Number`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Number`.
+ */
+function isNumber(value) {return typeof value === 'number';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDate
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a value is a date.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Date`.
+ */
+function isDate(value) {
+ return toString.call(value) === '[object Date]';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isArray
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Array`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Array`.
+ */
+var isArray = Array.isArray;
+
+/**
+ * @ngdoc function
+ * @name angular.isFunction
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Function`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Function`.
+ */
+function isFunction(value) {return typeof value === 'function';}
+
+
+/**
+ * Determines if a value is a regular expression object.
+ *
+ * @private
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `RegExp`.
+ */
+function isRegExp(value) {
+ return toString.call(value) === '[object RegExp]';
+}
+
+
+/**
+ * Checks if `obj` is a window object.
+ *
+ * @private
+ * @param {*} obj Object to check
+ * @returns {boolean} True if `obj` is a window obj.
+ */
+function isWindow(obj) {
+ return obj && obj.window === obj;
+}
+
+
+function isScope(obj) {
+ return obj && obj.$evalAsync && obj.$watch;
+}
+
+
+function isFile(obj) {
+ return toString.call(obj) === '[object File]';
+}
+
+
+function isFormData(obj) {
+ return toString.call(obj) === '[object FormData]';
+}
+
+
+function isBlob(obj) {
+ return toString.call(obj) === '[object Blob]';
+}
+
+
+function isBoolean(value) {
+ return typeof value === 'boolean';
+}
+
+
+function isPromiseLike(obj) {
+ return obj && isFunction(obj.then);
+}
+
+
+var trim = function(value) {
+ return isString(value) ? value.trim() : value;
+};
+
+// Copied from:
+// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
+// Prereq: s is a string.
+var escapeForRegexp = function(s) {
+ return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
+ replace(/\x08/g, '\\x08');
+};
+
+
+/**
+ * @ngdoc function
+ * @name angular.isElement
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a DOM element (or wrapped jQuery element).
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
+ */
+function isElement(node) {
+ return !!(node &&
+ (node.nodeName // we are a direct element
+ || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
+}
+
+/**
+ * @param str 'key1,key2,...'
+ * @returns {object} in the form of {key1:true, key2:true, ...}
+ */
+function makeMap(str) {
+ var obj = {}, items = str.split(","), i;
+ for (i = 0; i < items.length; i++)
+ obj[ items[i] ] = true;
+ return obj;
+}
+
+
+function nodeName_(element) {
+ return lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+function includes(array, obj) {
+ return Array.prototype.indexOf.call(array, obj) != -1;
+}
+
+function arrayRemove(array, value) {
+ var index = array.indexOf(value);
+ if (index >= 0)
+ array.splice(index, 1);
+ return value;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.copy
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Creates a deep copy of `source`, which should be an object or an array.
+ *
+ * * If no destination is supplied, a copy of the object or array is created.
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
+ * are deleted and then all elements/properties from the source are copied to it.
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
+ * * If `source` is identical to 'destination' an exception will be thrown.
+ *
+ * @param {*} source The source that will be used to make a copy.
+ * Can be any type, including primitives, `null`, and `undefined`.
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
+ * provided, must be of the same type as `source`.
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
+ *
+ * @example
+ <example module="copyExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate class="simple-form">
+ Name: <input type="text" ng-model="user.name" /><br />
+ E-mail: <input type="email" ng-model="user.email" /><br />
+ Gender: <input type="radio" ng-model="user.gender" value="male" />male
+ <input type="radio" ng-model="user.gender" value="female" />female<br />
+ <button ng-click="reset()">RESET</button>
+ <button ng-click="update(user)">SAVE</button>
+ </form>
+ <pre>form = {{user | json}}</pre>
+ <pre>master = {{master | json}}</pre>
+ </div>
+
+ <script>
+ angular.module('copyExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.master= {};
+
+ $scope.update = function(user) {
+ // Example with 1 argument
+ $scope.master= angular.copy(user);
+ };
+
+ $scope.reset = function() {
+ // Example with 2 arguments
+ angular.copy($scope.master, $scope.user);
+ };
+
+ $scope.reset();
+ }]);
+ </script>
+ </file>
+ </example>
+ */
+function copy(source, destination, stackSource, stackDest) {
+ if (isWindow(source) || isScope(source)) {
+ throw ngMinErr('cpws',
+ "Can't copy! Making copies of Window or Scope instances is not supported.");
+ }
+
+ if (!destination) {
+ destination = source;
+ if (source) {
+ if (isArray(source)) {
+ destination = copy(source, [], stackSource, stackDest);
+ } else if (isDate(source)) {
+ destination = new Date(source.getTime());
+ } else if (isRegExp(source)) {
+ destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
+ destination.lastIndex = source.lastIndex;
+ } else if (isObject(source)) {
+ var emptyObject = Object.create(Object.getPrototypeOf(source));
+ destination = copy(source, emptyObject, stackSource, stackDest);
+ }
+ }
+ } else {
+ if (source === destination) throw ngMinErr('cpi',
+ "Can't copy! Source and destination are identical.");
+
+ stackSource = stackSource || [];
+ stackDest = stackDest || [];
+
+ if (isObject(source)) {
+ var index = stackSource.indexOf(source);
+ if (index !== -1) return stackDest[index];
+
+ stackSource.push(source);
+ stackDest.push(destination);
+ }
+
+ var result;
+ if (isArray(source)) {
+ destination.length = 0;
+ for (var i = 0; i < source.length; i++) {
+ result = copy(source[i], null, stackSource, stackDest);
+ if (isObject(source[i])) {
+ stackSource.push(source[i]);
+ stackDest.push(result);
+ }
+ destination.push(result);
+ }
+ } else {
+ var h = destination.$$hashKey;
+ if (isArray(destination)) {
+ destination.length = 0;
+ } else {
+ forEach(destination, function(value, key) {
+ delete destination[key];
+ });
+ }
+ for (var key in source) {
+ if (source.hasOwnProperty(key)) {
+ result = copy(source[key], null, stackSource, stackDest);
+ if (isObject(source[key])) {
+ stackSource.push(source[key]);
+ stackDest.push(result);
+ }
+ destination[key] = result;
+ }
+ }
+ setHashKey(destination,h);
+ }
+
+ }
+ return destination;
+}
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+ if (isArray(src)) {
+ dst = dst || [];
+
+ for (var i = 0, ii = src.length; i < ii; i++) {
+ dst[i] = src[i];
+ }
+ } else if (isObject(src)) {
+ dst = dst || {};
+
+ for (var key in src) {
+ if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+ dst[key] = src[key];
+ }
+ }
+ }
+
+ return dst || src;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.equals
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if two objects or two values are equivalent. Supports value types, regular
+ * expressions, arrays and objects.
+ *
+ * Two objects or values are considered equivalent if at least one of the following is true:
+ *
+ * * Both objects or values pass `===` comparison.
+ * * Both objects or values are of the same type and all of their properties are equal by
+ * comparing them with `angular.equals`.
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
+ * * Both values represent the same regular expression (In JavaScript,
+ * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
+ * representation matches).
+ *
+ * During a property comparison, properties of `function` type and properties with names
+ * that begin with `$` are ignored.
+ *
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
+ *
+ * @param {*} o1 Object or value to compare.
+ * @param {*} o2 Object or value to compare.
+ * @returns {boolean} True if arguments are equal.
+ */
+function equals(o1, o2) {
+ if (o1 === o2) return true;
+ if (o1 === null || o2 === null) return false;
+ if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
+ var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
+ if (t1 == t2) {
+ if (t1 == 'object') {
+ if (isArray(o1)) {
+ if (!isArray(o2)) return false;
+ if ((length = o1.length) == o2.length) {
+ for (key = 0; key < length; key++) {
+ if (!equals(o1[key], o2[key])) return false;
+ }
+ return true;
+ }
+ } else if (isDate(o1)) {
+ if (!isDate(o2)) return false;
+ return equals(o1.getTime(), o2.getTime());
+ } else if (isRegExp(o1) && isRegExp(o2)) {
+ return o1.toString() == o2.toString();
+ } else {
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
+ keySet = {};
+ for (key in o1) {
+ if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+ if (!equals(o1[key], o2[key])) return false;
+ keySet[key] = true;
+ }
+ for (key in o2) {
+ if (!keySet.hasOwnProperty(key) &&
+ key.charAt(0) !== '$' &&
+ o2[key] !== undefined &&
+ !isFunction(o2[key])) return false;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+var csp = function() {
+ if (isDefined(csp.isActive_)) return csp.isActive_;
+
+ var active = !!(document.querySelector('[ng-csp]') ||
+ document.querySelector('[data-ng-csp]'));
+
+ if (!active) {
+ try {
+ /* jshint -W031, -W054 */
+ new Function('');
+ /* jshint +W031, +W054 */
+ } catch (e) {
+ active = true;
+ }
+ }
+
+ return (csp.isActive_ = active);
+};
+
+
+
+function concat(array1, array2, index) {
+ return array1.concat(slice.call(array2, index));
+}
+
+function sliceArgs(args, startIndex) {
+ return slice.call(args, startIndex || 0);
+}
+
+
+/* jshint -W101 */
+/**
+ * @ngdoc function
+ * @name angular.bind
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
+ *
+ * @param {Object} self Context which `fn` should be evaluated in.
+ * @param {function()} fn Function to be bound.
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
+ */
+/* jshint +W101 */
+function bind(self, fn) {
+ var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
+ if (isFunction(fn) && !(fn instanceof RegExp)) {
+ return curryArgs.length
+ ? function() {
+ return arguments.length
+ ? fn.apply(self, concat(curryArgs, arguments, 0))
+ : fn.apply(self, curryArgs);
+ }
+ : function() {
+ return arguments.length
+ ? fn.apply(self, arguments)
+ : fn.call(self);
+ };
+ } else {
+ // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+ return fn;
+ }
+}
+
+
+function toJsonReplacer(key, value) {
+ var val = value;
+
+ if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
+ val = undefined;
+ } else if (isWindow(value)) {
+ val = '$WINDOW';
+ } else if (value && document === value) {
+ val = '$DOCUMENT';
+ } else if (isScope(value)) {
+ val = '$SCOPE';
+ }
+
+ return val;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.toJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
+ * stripped since angular uses this notation internally.
+ *
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace.
+ * If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2).
+ * @returns {string|undefined} JSON-ified string representing `obj`.
+ */
+function toJson(obj, pretty) {
+ if (typeof obj === 'undefined') return undefined;
+ if (!isNumber(pretty)) {
+ pretty = pretty ? 2 : null;
+ }
+ return JSON.stringify(obj, toJsonReplacer, pretty);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.fromJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Deserializes a JSON string.
+ *
+ * @param {string} json JSON string to deserialize.
+ * @returns {Object|Array|string|number} Deserialized JSON string.
+ */
+function fromJson(json) {
+ return isString(json)
+ ? JSON.parse(json)
+ : json;
+}
+
+
+/**
+ * @returns {string} Returns the string representation of the element.
+ */
+function startingTag(element) {
+ element = jqLite(element).clone();
+ try {
+ // turns out IE does not let you set .html() on elements which
+ // are not allowed to have children. So we just ignore it.
+ element.empty();
+ } catch (e) {}
+ var elemHtml = jqLite('<div>').append(element).html();
+ try {
+ return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
+ elemHtml.
+ match(/^(<[^>]+>)/)[1].
+ replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
+ } catch (e) {
+ return lowercase(elemHtml);
+ }
+
+}
+
+
+/////////////////////////////////////////////////
+
+/**
+ * Tries to decode the URI component without throwing an exception.
+ *
+ * @private
+ * @param str value potential URI component to check.
+ * @returns {boolean} True if `value` can be decoded
+ * with the decodeURIComponent function.
+ */
+function tryDecodeURIComponent(value) {
+ try {
+ return decodeURIComponent(value);
+ } catch (e) {
+ // Ignore any invalid uri component
+ }
+}
+
+
+/**
+ * Parses an escaped url query string into key-value pairs.
+ * @returns {Object.<string,boolean|Array>}
+ */
+function parseKeyValue(/**string*/keyValue) {
+ var obj = {}, key_value, key;
+ forEach((keyValue || "").split('&'), function(keyValue) {
+ if (keyValue) {
+ key_value = keyValue.replace(/\+/g,'%20').split('=');
+ key = tryDecodeURIComponent(key_value[0]);
+ if (isDefined(key)) {
+ var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
+ if (!hasOwnProperty.call(obj, key)) {
+ obj[key] = val;
+ } else if (isArray(obj[key])) {
+ obj[key].push(val);
+ } else {
+ obj[key] = [obj[key],val];
+ }
+ }
+ }
+ });
+ return obj;
+}
+
+function toKeyValue(obj) {
+ var parts = [];
+ forEach(obj, function(value, key) {
+ if (isArray(value)) {
+ forEach(value, function(arrayValue) {
+ parts.push(encodeUriQuery(key, true) +
+ (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
+ });
+ } else {
+ parts.push(encodeUriQuery(key, true) +
+ (value === true ? '' : '=' + encodeUriQuery(value, true)));
+ }
+ });
+ return parts.length ? parts.join('&') : '';
+}
+
+
+/**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ * segment = *pchar
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriSegment(val) {
+ return encodeUriQuery(val, true).
+ replace(/%26/gi, '&').
+ replace(/%3D/gi, '=').
+ replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ * query = *( pchar / "/" / "?" )
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
+ return encodeURIComponent(val).
+ replace(/%40/gi, '@').
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%3B/gi, ';').
+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+}
+
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
+
+function getNgAttribute(element, ngAttr) {
+ var attr, i, ii = ngAttrPrefixes.length;
+ element = jqLite(element);
+ for (i = 0; i < ii; ++i) {
+ attr = ngAttrPrefixes[i] + ngAttr;
+ if (isString(attr = element.attr(attr))) {
+ return attr;
+ }
+ }
+ return null;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngApp
+ * @module ng
+ *
+ * @element ANY
+ * @param {angular.Module} ngApp an optional application
+ * {@link angular.module module} name to load.
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
+ * created in "strict-di" mode. This means that the application will fail to invoke functions which
+ * do not use explicit function annotation (and are thus unsuitable for minification), as described
+ * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
+ * tracking down the root of these bugs.
+ *
+ * @description
+ *
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
+ * designates the **root element** of the application and is typically placed near the root element
+ * of the page - e.g. on the `<body>` or `<html>` tags.
+ *
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ *
+ * You can specify an **AngularJS module** to be used as the root module for the application. This
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
+ * should contain the application code needed or have dependencies on other modules that will
+ * contain the code. See {@link angular.module} for more information.
+ *
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
+ * would not be resolved to `3`.
+ *
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
+ *
+ <example module="ngAppDemo">
+ <file name="index.html">
+ <div ng-controller="ngAppDemoController">
+ I can add: {{a}} + {{b}} = {{ a+b }}
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ });
+ </file>
+ </example>
+ *
+ * Using `ngStrictDi`, you would see something like this:
+ *
+ <example ng-app-included="true">
+ <file name="index.html">
+ <div ng-app="ngAppStrictDemo" ng-strict-di>
+ <div ng-controller="GoodController1">
+ I can add: {{a}} + {{b}} = {{ a+b }}
+
+ <p>This renders because the controller does not fail to
+ instantiate, by using explicit annotation style (see
+ script.js for details)
+ </p>
+ </div>
+
+ <div ng-controller="GoodController2">
+ Name: <input ng-model="name"><br />
+ Hello, {{name}}!
+
+ <p>This renders because the controller does not fail to
+ instantiate, by using explicit annotation style
+ (see script.js for details)
+ </p>
+ </div>
+
+ <div ng-controller="BadController">
+ I can add: {{a}} + {{b}} = {{ a+b }}
+
+ <p>The controller could not be instantiated, due to relying
+ on automatic function annotations (which are disabled in
+ strict mode). As such, the content of this section is not
+ interpolated, and there should be an error in your web console.
+ </p>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('ngAppStrictDemo', [])
+ // BadController will fail to instantiate, due to relying on automatic function annotation,
+ // rather than an explicit annotation
+ .controller('BadController', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ })
+ // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
+ // due to using explicit annotations using the array style and $inject property, respectively.
+ .controller('GoodController1', ['$scope', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ }])
+ .controller('GoodController2', GoodController2);
+ function GoodController2($scope) {
+ $scope.name = "World";
+ }
+ GoodController2.$inject = ['$scope'];
+ </file>
+ <file name="style.css">
+ div[ng-controller] {
+ margin-bottom: 1em;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ border: 1px solid;
+ padding: .5em;
+ }
+ div[ng-controller^=Good] {
+ border-color: #d6e9c6;
+ background-color: #dff0d8;
+ color: #3c763d;
+ }
+ div[ng-controller^=Bad] {
+ border-color: #ebccd1;
+ background-color: #f2dede;
+ color: #a94442;
+ margin-bottom: 0;
+ }
+ </file>
+ </example>
+ */
+function angularInit(element, bootstrap) {
+ var appElement,
+ module,
+ config = {};
+
+ // The element `element` has priority over any other element
+ forEach(ngAttrPrefixes, function(prefix) {
+ var name = prefix + 'app';
+
+ if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
+ appElement = element;
+ module = element.getAttribute(name);
+ }
+ });
+ forEach(ngAttrPrefixes, function(prefix) {
+ var name = prefix + 'app';
+ var candidate;
+
+ if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
+ appElement = candidate;
+ module = candidate.getAttribute(name);
+ }
+ });
+ if (appElement) {
+ config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+ bootstrap(appElement, module ? [module] : [], config);
+ }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.bootstrap
+ * @module ng
+ * @description
+ * Use this function to manually start up angular application.
+ *
+ * See: {@link guide/bootstrap Bootstrap}
+ *
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ *
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
+ * multiple instances of Angular try to work on the DOM.
+ *
+ * ```html
+ * <!doctype html>
+ * <html>
+ * <body>
+ * <div ng-controller="WelcomeController">
+ * {{greeting}}
+ * </div>
+ *
+ * <script src="angular.js"></script>
+ * <script>
+ * var app = angular.module('demo', [])
+ * .controller('WelcomeController', function($scope) {
+ * $scope.greeting = 'Welcome!';
+ * });
+ * angular.bootstrap(document, ['demo']);
+ * </script>
+ * </body>
+ * </html>
+ * ```
+ *
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
+ * Each item in the array should be the name of a predefined module or a (DI annotated)
+ * function that will be invoked by the injector as a run block.
+ * See: {@link angular.module modules}
+ * @param {Object=} config an object for defining configuration options for the application. The
+ * following keys are supported:
+ *
+ * * `strictDi` - disable automatic function annotation for the application. This is meant to
+ * assist in finding bugs which break minified code. Defaults to `false`.
+ *
+ * @returns {auto.$injector} Returns the newly created injector for this app.
+ */
+function bootstrap(element, modules, config) {
+ if (!isObject(config)) config = {};
+ var defaultConfig = {
+ strictDi: false
+ };
+ config = extend(defaultConfig, config);
+ var doBootstrap = function() {
+ element = jqLite(element);
+
+ if (element.injector()) {
+ var tag = (element[0] === document) ? 'document' : startingTag(element);
+ //Encode angle brackets to prevent input from being sanitized to empty string #8683
+ throw ngMinErr(
+ 'btstrpd',
+ "App Already Bootstrapped with this Element '{0}'",
+ tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
+ }
+
+ modules = modules || [];
+ modules.unshift(['$provide', function($provide) {
+ $provide.value('$rootElement', element);
+ }]);
+
+ if (config.debugInfoEnabled) {
+ // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
+ modules.push(['$compileProvider', function($compileProvider) {
+ $compileProvider.debugInfoEnabled(true);
+ }]);
+ }
+
+ modules.unshift('ng');
+ var injector = createInjector(modules, config.strictDi);
+ injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
+ function bootstrapApply(scope, element, compile, injector) {
+ scope.$apply(function() {
+ element.data('$injector', injector);
+ compile(element)(scope);
+ });
+ }]
+ );
+ return injector;
+ };
+
+ var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
+ var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
+
+ if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
+ config.debugInfoEnabled = true;
+ window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
+ }
+
+ if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
+ return doBootstrap();
+ }
+
+ window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
+ angular.resumeBootstrap = function(extraModules) {
+ forEach(extraModules, function(module) {
+ modules.push(module);
+ });
+ doBootstrap();
+ };
+}
+
+/**
+ * @ngdoc function
+ * @name angular.reloadWithDebugInfo
+ * @module ng
+ * @description
+ * Use this function to reload the current application with debug information turned on.
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
+ *
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
+ */
+function reloadWithDebugInfo() {
+ window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
+ window.location.reload();
+}
+
+/**
+ * @name angular.getTestability
+ * @module ng
+ * @description
+ * Get the testability service for the instance of Angular on the given
+ * element.
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ */
+function getTestability(rootElement) {
+ var injector = angular.element(rootElement).injector();
+ if (!injector) {
+ throw ngMinErr('test',
+ 'no injector found for element argument to getTestability');
+ }
+ return injector.get('$$testability');
+}
+
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
+function snake_case(name, separator) {
+ separator = separator || '_';
+ return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+ return (pos ? separator : '') + letter.toLowerCase();
+ });
+}
+
+var bindJQueryFired = false;
+var skipDestroyOnNextJQueryCleanData;
+function bindJQuery() {
+ var originalCleanData;
+
+ if (bindJQueryFired) {
+ return;
+ }
+
+ // bind to jQuery if present;
+ jQuery = window.jQuery;
+ // Use jQuery if it exists with proper functionality, otherwise default to us.
+ // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
+ // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
+ // versions. It will not work for sure with jQuery <1.7, though.
+ if (jQuery && jQuery.fn.on) {
+ jqLite = jQuery;
+ extend(jQuery.fn, {
+ scope: JQLitePrototype.scope,
+ isolateScope: JQLitePrototype.isolateScope,
+ controller: JQLitePrototype.controller,
+ injector: JQLitePrototype.injector,
+ inheritedData: JQLitePrototype.inheritedData
+ });
+
+ // All nodes removed from the DOM via various jQuery APIs like .remove()
+ // are passed through jQuery.cleanData. Monkey-patch this method to fire
+ // the $destroy event on all removed nodes.
+ originalCleanData = jQuery.cleanData;
+ jQuery.cleanData = function(elems) {
+ var events;
+ if (!skipDestroyOnNextJQueryCleanData) {
+ for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+ events = jQuery._data(elem, "events");
+ if (events && events.$destroy) {
+ jQuery(elem).triggerHandler('$destroy');
+ }
+ }
+ } else {
+ skipDestroyOnNextJQueryCleanData = false;
+ }
+ originalCleanData(elems);
+ };
+ } else {
+ jqLite = JQLite;
+ }
+
+ angular.element = jqLite;
+
+ // Prevent double-proxying.
+ bindJQueryFired = true;
+}
+
+/**
+ * throw error if the argument is falsy.
+ */
+function assertArg(arg, name, reason) {
+ if (!arg) {
+ throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+ }
+ return arg;
+}
+
+function assertArgFn(arg, name, acceptArrayAnnotation) {
+ if (acceptArrayAnnotation && isArray(arg)) {
+ arg = arg[arg.length - 1];
+ }
+
+ assertArg(isFunction(arg), name, 'not a function, got ' +
+ (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
+ return arg;
+}
+
+/**
+ * throw error if the name given is hasOwnProperty
+ * @param {String} name the name to test
+ * @param {String} context the context in which the name is used, such as module or directive
+ */
+function assertNotHasOwnProperty(name, context) {
+ if (name === 'hasOwnProperty') {
+ throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+ }
+}
+
+/**
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
+ * @param {Object} obj starting object
+ * @param {String} path path to traverse
+ * @param {boolean} [bindFnToScope=true]
+ * @returns {Object} value as accessible by path
+ */
+//TODO(misko): this function needs to be removed
+function getter(obj, path, bindFnToScope) {
+ if (!path) return obj;
+ var keys = path.split('.');
+ var key;
+ var lastInstance = obj;
+ var len = keys.length;
+
+ for (var i = 0; i < len; i++) {
+ key = keys[i];
+ if (obj) {
+ obj = (lastInstance = obj)[key];
+ }
+ }
+ if (!bindFnToScope && isFunction(obj)) {
+ return bind(lastInstance, obj);
+ }
+ return obj;
+}
+
+/**
+ * Return the DOM siblings between the first and last node in the given array.
+ * @param {Array} array like object
+ * @returns {jqLite} jqLite collection containing the nodes
+ */
+function getBlockNodes(nodes) {
+ // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
+ // collection, otherwise update the original collection.
+ var node = nodes[0];
+ var endNode = nodes[nodes.length - 1];
+ var blockNodes = [node];
+
+ do {
+ node = node.nextSibling;
+ if (!node) break;
+ blockNodes.push(node);
+ } while (node !== endNode);
+
+ return jqLite(blockNodes);
+}
+
+
+/**
+ * Creates a new object without a prototype. This object is useful for lookup without having to
+ * guard against prototypically inherited properties via hasOwnProperty.
+ *
+ * Related micro-benchmarks:
+ * - http://jsperf.com/object-create2
+ * - http://jsperf.com/proto-map-lookup/2
+ * - http://jsperf.com/for-in-vs-object-keys2
+ *
+ * @returns {Object}
+ */
+function createMap() {
+ return Object.create(null);
+}
+
+var NODE_TYPE_ELEMENT = 1;
+var NODE_TYPE_TEXT = 3;
+var NODE_TYPE_COMMENT = 8;
+var NODE_TYPE_DOCUMENT = 9;
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+ var $injectorMinErr = minErr('$injector');
+ var ngMinErr = minErr('ng');
+
+ function ensure(obj, name, factory) {
+ return obj[name] || (obj[name] = factory());
+ }
+
+ var angular = ensure(window, 'angular', Object);
+
+ // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+ angular.$$minErr = angular.$$minErr || minErr;
+
+ return ensure(angular, 'module', function() {
+ /** @type {Object.<string, angular.Module>} */
+ var modules = {};
+
+ /**
+ * @ngdoc function
+ * @name angular.module
+ * @module ng
+ * @description
+ *
+ * The `angular.module` is a global place for creating, registering and retrieving Angular
+ * modules.
+ * All modules (angular core or 3rd party) that should be available to an application must be
+ * registered using this mechanism.
+ *
+ * When passed two or more arguments, a new module is created. If passed only one argument, an
+ * existing module (the name passed as the first argument to `module`) is retrieved.
+ *
+ *
+ * # Module
+ *
+ * A module is a collection of services, directives, controllers, filters, and configuration information.
+ * `angular.module` is used to configure the {@link auto.$injector $injector}.
+ *
+ * ```js
+ * // Create a new module
+ * var myModule = angular.module('myModule', []);
+ *
+ * // register a new service
+ * myModule.value('appName', 'MyCoolApp');
+ *
+ * // configure existing services inside initialization blocks.
+ * myModule.config(['$locationProvider', function($locationProvider) {
+ * // Configure existing providers
+ * $locationProvider.hashPrefix('!');
+ * }]);
+ * ```
+ *
+ * Then you can create an injector and load your modules like this:
+ *
+ * ```js
+ * var injector = angular.injector(['ng', 'myModule'])
+ * ```
+ *
+ * However it's more likely that you'll just use
+ * {@link ng.directive:ngApp ngApp} or
+ * {@link angular.bootstrap} to simplify this process for you.
+ *
+ * @param {!string} name The name of the module to create or retrieve.
+ * @param {!Array.<string>=} requires If specified then new module is being created. If
+ * unspecified then the module is being retrieved for further configuration.
+ * @param {Function=} configFn Optional configuration function for the module. Same as
+ * {@link angular.Module#config Module#config()}.
+ * @returns {module} new module with the {@link angular.Module} api.
+ */
+ return function module(name, requires, configFn) {
+ var assertNotHasOwnProperty = function(name, context) {
+ if (name === 'hasOwnProperty') {
+ throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+ }
+ };
+
+ assertNotHasOwnProperty(name, 'module');
+ if (requires && modules.hasOwnProperty(name)) {
+ modules[name] = null;
+ }
+ return ensure(modules, name, function() {
+ if (!requires) {
+ throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+ "the module name or forgot to load it. If registering a module ensure that you " +
+ "specify the dependencies as the second argument.", name);
+ }
+
+ /** @type {!Array.<Array.<*>>} */
+ var invokeQueue = [];
+
+ /** @type {!Array.<Function>} */
+ var configBlocks = [];
+
+ /** @type {!Array.<Function>} */
+ var runBlocks = [];
+
+ var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+ /** @type {angular.Module} */
+ var moduleInstance = {
+ // Private state
+ _invokeQueue: invokeQueue,
+ _configBlocks: configBlocks,
+ _runBlocks: runBlocks,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#requires
+ * @module ng
+ *
+ * @description
+ * Holds the list of modules which the injector will load before the current module is
+ * loaded.
+ */
+ requires: requires,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#name
+ * @module ng
+ *
+ * @description
+ * Name of the module.
+ */
+ name: name,
+
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#provider
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} providerType Construction function for creating new instance of the
+ * service.
+ * @description
+ * See {@link auto.$provide#provider $provide.provider()}.
+ */
+ provider: invokeLater('$provide', 'provider'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#factory
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} providerFunction Function for creating new instance of the service.
+ * @description
+ * See {@link auto.$provide#factory $provide.factory()}.
+ */
+ factory: invokeLater('$provide', 'factory'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#service
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} constructor A constructor function that will be instantiated.
+ * @description
+ * See {@link auto.$provide#service $provide.service()}.
+ */
+ service: invokeLater('$provide', 'service'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#value
+ * @module ng
+ * @param {string} name service name
+ * @param {*} object Service instance object.
+ * @description
+ * See {@link auto.$provide#value $provide.value()}.
+ */
+ value: invokeLater('$provide', 'value'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#constant
+ * @module ng
+ * @param {string} name constant name
+ * @param {*} object Constant value.
+ * @description
+ * Because the constant are fixed, they get applied before other provide methods.
+ * See {@link auto.$provide#constant $provide.constant()}.
+ */
+ constant: invokeLater('$provide', 'constant', 'unshift'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#animation
+ * @module ng
+ * @param {string} name animation name
+ * @param {Function} animationFactory Factory function for creating new instance of an
+ * animation.
+ * @description
+ *
+ * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+ *
+ *
+ * Defines an animation hook that can be later used with
+ * {@link ngAnimate.$animate $animate} service and directives that use this service.
+ *
+ * ```js
+ * module.animation('.animation-name', function($inject1, $inject2) {
+ * return {
+ * eventName : function(element, done) {
+ * //code to run the animation
+ * //once complete, then run done()
+ * return function cancellationFunction(element) {
+ * //code to cancel the animation
+ * }
+ * }
+ * }
+ * })
+ * ```
+ *
+ * See {@link ng.$animateProvider#register $animateProvider.register()} and
+ * {@link ngAnimate ngAnimate module} for more information.
+ */
+ animation: invokeLater('$animateProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#filter
+ * @module ng
+ * @param {string} name Filter name.
+ * @param {Function} filterFactory Factory function for creating new instance of filter.
+ * @description
+ * See {@link ng.$filterProvider#register $filterProvider.register()}.
+ */
+ filter: invokeLater('$filterProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#controller
+ * @module ng
+ * @param {string|Object} name Controller name, or an object map of controllers where the
+ * keys are the names and the values are the constructors.
+ * @param {Function} constructor Controller constructor function.
+ * @description
+ * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+ */
+ controller: invokeLater('$controllerProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#directive
+ * @module ng
+ * @param {string|Object} name Directive name, or an object map of directives where the
+ * keys are the names and the values are the factories.
+ * @param {Function} directiveFactory Factory function for creating new instance of
+ * directives.
+ * @description
+ * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+ */
+ directive: invokeLater('$compileProvider', 'directive'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#config
+ * @module ng
+ * @param {Function} configFn Execute this function on module load. Useful for service
+ * configuration.
+ * @description
+ * Use this method to register work which needs to be performed on module loading.
+ * For more about how to configure services, see
+ * {@link providers#provider-recipe Provider Recipe}.
+ */
+ config: config,
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#run
+ * @module ng
+ * @param {Function} initializationFn Execute this function after injector creation.
+ * Useful for application initialization.
+ * @description
+ * Use this method to register work which should be performed when the injector is done
+ * loading all modules.
+ */
+ run: function(block) {
+ runBlocks.push(block);
+ return this;
+ }
+ };
+
+ if (configFn) {
+ config(configFn);
+ }
+
+ return moduleInstance;
+
+ /**
+ * @param {string} provider
+ * @param {string} method
+ * @param {String=} insertMethod
+ * @returns {angular.Module}
+ */
+ function invokeLater(provider, method, insertMethod, queue) {
+ if (!queue) queue = invokeQueue;
+ return function() {
+ queue[insertMethod || 'push']([provider, method, arguments]);
+ return moduleInstance;
+ };
+ }
+ });
+ };
+ });
+
+}
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+ var seen = [];
+
+ return JSON.stringify(obj, function(key, val) {
+ val = toJsonReplacer(key, val);
+ if (isObject(val)) {
+
+ if (seen.indexOf(val) >= 0) return '<<already seen>>';
+
+ seen.push(val);
+ }
+ return val;
+ });
+}
+
+function toDebugString(obj) {
+ if (typeof obj === 'function') {
+ return obj.toString().replace(/ \{[\s\S]*$/, '');
+ } else if (typeof obj === 'undefined') {
+ return 'undefined';
+ } else if (typeof obj !== 'string') {
+ return serializeObject(obj);
+ }
+ return obj;
+}
+
+/* global angularModule: true,
+ version: true,
+
+ $LocaleProvider,
+ $CompileProvider,
+
+ htmlAnchorDirective,
+ inputDirective,
+ inputDirective,
+ formDirective,
+ scriptDirective,
+ selectDirective,
+ styleDirective,
+ optionDirective,
+ ngBindDirective,
+ ngBindHtmlDirective,
+ ngBindTemplateDirective,
+ ngClassDirective,
+ ngClassEvenDirective,
+ ngClassOddDirective,
+ ngCspDirective,
+ ngCloakDirective,
+ ngControllerDirective,
+ ngFormDirective,
+ ngHideDirective,
+ ngIfDirective,
+ ngIncludeDirective,
+ ngIncludeFillContentDirective,
+ ngInitDirective,
+ ngNonBindableDirective,
+ ngPluralizeDirective,
+ ngRepeatDirective,
+ ngShowDirective,
+ ngStyleDirective,
+ ngSwitchDirective,
+ ngSwitchWhenDirective,
+ ngSwitchDefaultDirective,
+ ngOptionsDirective,
+ ngTranscludeDirective,
+ ngModelDirective,
+ ngListDirective,
+ ngChangeDirective,
+ patternDirective,
+ patternDirective,
+ requiredDirective,
+ requiredDirective,
+ minlengthDirective,
+ minlengthDirective,
+ maxlengthDirective,
+ maxlengthDirective,
+ ngValueDirective,
+ ngModelOptionsDirective,
+ ngAttributeAliasDirectives,
+ ngEventDirectives,
+
+ $AnchorScrollProvider,
+ $AnimateProvider,
+ $BrowserProvider,
+ $CacheFactoryProvider,
+ $ControllerProvider,
+ $DocumentProvider,
+ $ExceptionHandlerProvider,
+ $FilterProvider,
+ $InterpolateProvider,
+ $IntervalProvider,
+ $HttpProvider,
+ $HttpBackendProvider,
+ $LocationProvider,
+ $LogProvider,
+ $ParseProvider,
+ $RootScopeProvider,
+ $QProvider,
+ $$QProvider,
+ $$SanitizeUriProvider,
+ $SceProvider,
+ $SceDelegateProvider,
+ $SnifferProvider,
+ $TemplateCacheProvider,
+ $TemplateRequestProvider,
+ $$TestabilityProvider,
+ $TimeoutProvider,
+ $$RAFProvider,
+ $$AsyncCallbackProvider,
+ $WindowProvider,
+ $$jqLiteProvider
+*/
+
+
+/**
+ * @ngdoc object
+ * @name angular.version
+ * @module ng
+ * @description
+ * An object that contains information about the current AngularJS version. This object has the
+ * following properties:
+ *
+ * - `full` – `{string}` – Full version string, such as "0.9.18".
+ * - `major` – `{number}` – Major version number, such as "0".
+ * - `minor` – `{number}` – Minor version number, such as "9".
+ * - `dot` – `{number}` – Dot version number, such as "18".
+ * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
+ */
+var version = {
+ full: '1.3.8', // all of these placeholder strings will be replaced by grunt's
+ major: 1, // package task
+ minor: 3,
+ dot: 8,
+ codeName: 'prophetic-narwhal'
+};
+
+
+function publishExternalAPI(angular) {
+ extend(angular, {
+ 'bootstrap': bootstrap,
+ 'copy': copy,
+ 'extend': extend,
+ 'equals': equals,
+ 'element': jqLite,
+ 'forEach': forEach,
+ 'injector': createInjector,
+ 'noop': noop,
+ 'bind': bind,
+ 'toJson': toJson,
+ 'fromJson': fromJson,
+ 'identity': identity,
+ 'isUndefined': isUndefined,
+ 'isDefined': isDefined,
+ 'isString': isString,
+ 'isFunction': isFunction,
+ 'isObject': isObject,
+ 'isNumber': isNumber,
+ 'isElement': isElement,
+ 'isArray': isArray,
+ 'version': version,
+ 'isDate': isDate,
+ 'lowercase': lowercase,
+ 'uppercase': uppercase,
+ 'callbacks': {counter: 0},
+ 'getTestability': getTestability,
+ '$$minErr': minErr,
+ '$$csp': csp,
+ 'reloadWithDebugInfo': reloadWithDebugInfo
+ });
+
+ angularModule = setupModuleLoader(window);
+ try {
+ angularModule('ngLocale');
+ } catch (e) {
+ angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
+ }
+
+ angularModule('ng', ['ngLocale'], ['$provide',
+ function ngModule($provide) {
+ // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
+ $provide.provider({
+ $$sanitizeUri: $$SanitizeUriProvider
+ });
+ $provide.provider('$compile', $CompileProvider).
+ directive({
+ a: htmlAnchorDirective,
+ input: inputDirective,
+ textarea: inputDirective,
+ form: formDirective,
+ script: scriptDirective,
+ select: selectDirective,
+ style: styleDirective,
+ option: optionDirective,
+ ngBind: ngBindDirective,
+ ngBindHtml: ngBindHtmlDirective,
+ ngBindTemplate: ngBindTemplateDirective,
+ ngClass: ngClassDirective,
+ ngClassEven: ngClassEvenDirective,
+ ngClassOdd: ngClassOddDirective,
+ ngCloak: ngCloakDirective,
+ ngController: ngControllerDirective,
+ ngForm: ngFormDirective,
+ ngHide: ngHideDirective,
+ ngIf: ngIfDirective,
+ ngInclude: ngIncludeDirective,
+ ngInit: ngInitDirective,
+ ngNonBindable: ngNonBindableDirective,
+ ngPluralize: ngPluralizeDirective,
+ ngRepeat: ngRepeatDirective,
+ ngShow: ngShowDirective,
+ ngStyle: ngStyleDirective,
+ ngSwitch: ngSwitchDirective,
+ ngSwitchWhen: ngSwitchWhenDirective,
+ ngSwitchDefault: ngSwitchDefaultDirective,
+ ngOptions: ngOptionsDirective,
+ ngTransclude: ngTranscludeDirective,
+ ngModel: ngModelDirective,
+ ngList: ngListDirective,
+ ngChange: ngChangeDirective,
+ pattern: patternDirective,
+ ngPattern: patternDirective,
+ required: requiredDirective,
+ ngRequired: requiredDirective,
+ minlength: minlengthDirective,
+ ngMinlength: minlengthDirective,
+ maxlength: maxlengthDirective,
+ ngMaxlength: maxlengthDirective,
+ ngValue: ngValueDirective,
+ ngModelOptions: ngModelOptionsDirective
+ }).
+ directive({
+ ngInclude: ngIncludeFillContentDirective
+ }).
+ directive(ngAttributeAliasDirectives).
+ directive(ngEventDirectives);
+ $provide.provider({
+ $anchorScroll: $AnchorScrollProvider,
+ $animate: $AnimateProvider,
+ $browser: $BrowserProvider,
+ $cacheFactory: $CacheFactoryProvider,
+ $controller: $ControllerProvider,
+ $document: $DocumentProvider,
+ $exceptionHandler: $ExceptionHandlerProvider,
+ $filter: $FilterProvider,
+ $interpolate: $InterpolateProvider,
+ $interval: $IntervalProvider,
+ $http: $HttpProvider,
+ $httpBackend: $HttpBackendProvider,
+ $location: $LocationProvider,
+ $log: $LogProvider,
+ $parse: $ParseProvider,
+ $rootScope: $RootScopeProvider,
+ $q: $QProvider,
+ $$q: $$QProvider,
+ $sce: $SceProvider,
+ $sceDelegate: $SceDelegateProvider,
+ $sniffer: $SnifferProvider,
+ $templateCache: $TemplateCacheProvider,
+ $templateRequest: $TemplateRequestProvider,
+ $$testability: $$TestabilityProvider,
+ $timeout: $TimeoutProvider,
+ $window: $WindowProvider,
+ $$rAF: $$RAFProvider,
+ $$asyncCallback: $$AsyncCallbackProvider,
+ $$jqLite: $$jqLiteProvider
+ });
+ }
+ ]);
+}
+
+/* global JQLitePrototype: true,
+ addEventListenerFn: true,
+ removeEventListenerFn: true,
+ BOOLEAN_ATTR: true,
+ ALIASED_ATTR: true,
+*/
+
+//////////////////////////////////
+//JQLite
+//////////////////////////////////
+
+/**
+ * @ngdoc function
+ * @name angular.element
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
+ *
+ * If jQuery is available, `angular.element` is an alias for the
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
+ *
+ * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
+ * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
+ * commonly needed functionality with the goal of having a very small footprint.</div>
+ *
+ * To use jQuery, simply load it before `DOMContentLoaded` event fired.
+ *
+ * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
+ * jqLite; they are never raw DOM references.</div>
+ *
+ * ## Angular's jqLite
+ * jqLite provides only the following jQuery methods:
+ *
+ * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`after()`](http://api.jquery.com/after/)
+ * - [`append()`](http://api.jquery.com/append/)
+ * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
+ * - [`clone()`](http://api.jquery.com/clone/)
+ * - [`contents()`](http://api.jquery.com/contents/)
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`
+ * - [`data()`](http://api.jquery.com/data/)
+ * - [`detach()`](http://api.jquery.com/detach/)
+ * - [`empty()`](http://api.jquery.com/empty/)
+ * - [`eq()`](http://api.jquery.com/eq/)
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
+ * - [`html()`](http://api.jquery.com/html/)
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
+ * - [`prepend()`](http://api.jquery.com/prepend/)
+ * - [`prop()`](http://api.jquery.com/prop/)
+ * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`remove()`](http://api.jquery.com/remove/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeData()`](http://api.jquery.com/removeData/)
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
+ * - [`text()`](http://api.jquery.com/text/)
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
+ * - [`val()`](http://api.jquery.com/val/)
+ * - [`wrap()`](http://api.jquery.com/wrap/)
+ *
+ * ## jQuery/jqLite Extras
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
+ *
+ * ### Events
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
+ * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
+ * element before it is removed.
+ *
+ * ### Methods
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
+ * retrieves controller associated with the `ngController` directive. If `name` is provided as
+ * camelCase directive name, then the controller for this directive will be retrieved (e.g.
+ * `'ngModel'`).
+ * - `injector()` - retrieves the injector of the current element or its parent.
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
+ * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
+ * be enabled.
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
+ * current element. This getter should be used only on elements that contain a directive which starts a new isolate
+ * scope. Calling `scope()` on this element always returns the original non-isolate scope.
+ * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
+ * parent element is reached.
+ *
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
+ * @returns {Object} jQuery object.
+ */
+
+JQLite.expando = 'ng339';
+
+var jqCache = JQLite.cache = {},
+ jqId = 1,
+ addEventListenerFn = function(element, type, fn) {
+ element.addEventListener(type, fn, false);
+ },
+ removeEventListenerFn = function(element, type, fn) {
+ element.removeEventListener(type, fn, false);
+ };
+
+/*
+ * !!! This is an undocumented "private" function !!!
+ */
+JQLite._data = function(node) {
+ //jQuery always returns an object on cache miss
+ return this.cache[node[this.expando]] || {};
+};
+
+function jqNextId() { return ++jqId; }
+
+
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var jqLiteMinErr = minErr('jqLite');
+
+/**
+ * Converts snake_case to camelCase.
+ * Also there is special case for Moz prefix starting with upper case letter.
+ * @param name Name to normalize
+ */
+function camelCase(name) {
+ return name.
+ replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+ return offset ? letter.toUpperCase() : letter;
+ }).
+ replace(MOZ_HACK_REGEXP, 'Moz$1');
+}
+
+var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
+var HTML_REGEXP = /<|&#?\w+;/;
+var TAG_NAME_REGEXP = /<([\w:]+)/;
+var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
+
+var wrapMap = {
+ 'option': [1, '<select multiple="multiple">', '</select>'],
+
+ 'thead': [1, '<table>', '</table>'],
+ 'col': [2, '<table><colgroup>', '</colgroup></table>'],
+ 'tr': [2, '<table><tbody>', '</tbody></table>'],
+ 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
+ '_default': [0, "", ""]
+};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function jqLiteIsTextNode(html) {
+ return !HTML_REGEXP.test(html);
+}
+
+function jqLiteAcceptsData(node) {
+ // The window object can accept data but has no nodeType
+ // Otherwise we are only interested in elements (1) and documents (9)
+ var nodeType = node.nodeType;
+ return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
+}
+
+function jqLiteBuildFragment(html, context) {
+ var tmp, tag, wrap,
+ fragment = context.createDocumentFragment(),
+ nodes = [], i;
+
+ if (jqLiteIsTextNode(html)) {
+ // Convert non-html into a text node
+ nodes.push(context.createTextNode(html));
+ } else {
+ // Convert html into DOM nodes
+ tmp = tmp || fragment.appendChild(context.createElement("div"));
+ tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+ tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
+
+ // Descend through wrappers to the right content
+ i = wrap[0];
+ while (i--) {
+ tmp = tmp.lastChild;
+ }
+
+ nodes = concat(nodes, tmp.childNodes);
+
+ tmp = fragment.firstChild;
+ tmp.textContent = "";
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+ fragment.innerHTML = ""; // Clear inner HTML
+ forEach(nodes, function(node) {
+ fragment.appendChild(node);
+ });
+
+ return fragment;
+}
+
+function jqLiteParseHTML(html, context) {
+ context = context || document;
+ var parsed;
+
+ if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
+ return [context.createElement(parsed[1])];
+ }
+
+ if ((parsed = jqLiteBuildFragment(html, context))) {
+ return parsed.childNodes;
+ }
+
+ return [];
+}
+
+/////////////////////////////////////////////
+function JQLite(element) {
+ if (element instanceof JQLite) {
+ return element;
+ }
+
+ var argIsString;
+
+ if (isString(element)) {
+ element = trim(element);
+ argIsString = true;
+ }
+ if (!(this instanceof JQLite)) {
+ if (argIsString && element.charAt(0) != '<') {
+ throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
+ }
+ return new JQLite(element);
+ }
+
+ if (argIsString) {
+ jqLiteAddNodes(this, jqLiteParseHTML(element));
+ } else {
+ jqLiteAddNodes(this, element);
+ }
+}
+
+function jqLiteClone(element) {
+ return element.cloneNode(true);
+}
+
+function jqLiteDealoc(element, onlyDescendants) {
+ if (!onlyDescendants) jqLiteRemoveData(element);
+
+ if (element.querySelectorAll) {
+ var descendants = element.querySelectorAll('*');
+ for (var i = 0, l = descendants.length; i < l; i++) {
+ jqLiteRemoveData(descendants[i]);
+ }
+ }
+}
+
+function jqLiteOff(element, type, fn, unsupported) {
+ if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
+
+ var expandoStore = jqLiteExpandoStore(element);
+ var events = expandoStore && expandoStore.events;
+ var handle = expandoStore && expandoStore.handle;
+
+ if (!handle) return; //no listeners registered
+
+ if (!type) {
+ for (type in events) {
+ if (type !== '$destroy') {
+ removeEventListenerFn(element, type, handle);
+ }
+ delete events[type];
+ }
+ } else {
+ forEach(type.split(' '), function(type) {
+ if (isDefined(fn)) {
+ var listenerFns = events[type];
+ arrayRemove(listenerFns || [], fn);
+ if (listenerFns && listenerFns.length > 0) {
+ return;
+ }
+ }
+
+ removeEventListenerFn(element, type, handle);
+ delete events[type];
+ });
+ }
+}
+
+function jqLiteRemoveData(element, name) {
+ var expandoId = element.ng339;
+ var expandoStore = expandoId && jqCache[expandoId];
+
+ if (expandoStore) {
+ if (name) {
+ delete expandoStore.data[name];
+ return;
+ }
+
+ if (expandoStore.handle) {
+ if (expandoStore.events.$destroy) {
+ expandoStore.handle({}, '$destroy');
+ }
+ jqLiteOff(element);
+ }
+ delete jqCache[expandoId];
+ element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
+ }
+}
+
+
+function jqLiteExpandoStore(element, createIfNecessary) {
+ var expandoId = element.ng339,
+ expandoStore = expandoId && jqCache[expandoId];
+
+ if (createIfNecessary && !expandoStore) {
+ element.ng339 = expandoId = jqNextId();
+ expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
+ }
+
+ return expandoStore;
+}
+
+
+function jqLiteData(element, key, value) {
+ if (jqLiteAcceptsData(element)) {
+
+ var isSimpleSetter = isDefined(value);
+ var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
+ var massGetter = !key;
+ var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
+ var data = expandoStore && expandoStore.data;
+
+ if (isSimpleSetter) { // data('key', value)
+ data[key] = value;
+ } else {
+ if (massGetter) { // data()
+ return data;
+ } else {
+ if (isSimpleGetter) { // data('key')
+ // don't force creation of expandoStore if it doesn't exist yet
+ return data && data[key];
+ } else { // mass-setter: data({key1: val1, key2: val2})
+ extend(data, key);
+ }
+ }
+ }
+ }
+}
+
+function jqLiteHasClass(element, selector) {
+ if (!element.getAttribute) return false;
+ return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
+ indexOf(" " + selector + " ") > -1);
+}
+
+function jqLiteRemoveClass(element, cssClasses) {
+ if (cssClasses && element.setAttribute) {
+ forEach(cssClasses.split(' '), function(cssClass) {
+ element.setAttribute('class', trim(
+ (" " + (element.getAttribute('class') || '') + " ")
+ .replace(/[\n\t]/g, " ")
+ .replace(" " + trim(cssClass) + " ", " "))
+ );
+ });
+ }
+}
+
+function jqLiteAddClass(element, cssClasses) {
+ if (cssClasses && element.setAttribute) {
+ var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
+ .replace(/[\n\t]/g, " ");
+
+ forEach(cssClasses.split(' '), function(cssClass) {
+ cssClass = trim(cssClass);
+ if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
+ existingClasses += cssClass + ' ';
+ }
+ });
+
+ element.setAttribute('class', trim(existingClasses));
+ }
+}
+
+
+function jqLiteAddNodes(root, elements) {
+ // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
+
+ if (elements) {
+
+ // if a Node (the most common case)
+ if (elements.nodeType) {
+ root[root.length++] = elements;
+ } else {
+ var length = elements.length;
+
+ // if an Array or NodeList and not a Window
+ if (typeof length === 'number' && elements.window !== elements) {
+ if (length) {
+ for (var i = 0; i < length; i++) {
+ root[root.length++] = elements[i];
+ }
+ }
+ } else {
+ root[root.length++] = elements;
+ }
+ }
+ }
+}
+
+
+function jqLiteController(element, name) {
+ return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
+}
+
+function jqLiteInheritedData(element, name, value) {
+ // if element is the document object work with the html element instead
+ // this makes $(document).scope() possible
+ if (element.nodeType == NODE_TYPE_DOCUMENT) {
+ element = element.documentElement;
+ }
+ var names = isArray(name) ? name : [name];
+
+ while (element) {
+ for (var i = 0, ii = names.length; i < ii; i++) {
+ if ((value = jqLite.data(element, names[i])) !== undefined) return value;
+ }
+
+ // If dealing with a document fragment node with a host element, and no parent, use the host
+ // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
+ // to lookup parent controllers.
+ element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
+ }
+}
+
+function jqLiteEmpty(element) {
+ jqLiteDealoc(element, true);
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+}
+
+function jqLiteRemove(element, keepData) {
+ if (!keepData) jqLiteDealoc(element);
+ var parent = element.parentNode;
+ if (parent) parent.removeChild(element);
+}
+
+
+function jqLiteDocumentLoaded(action, win) {
+ win = win || window;
+ if (win.document.readyState === 'complete') {
+ // Force the action to be run async for consistent behaviour
+ // from the action's point of view
+ // i.e. it will definitely not be in a $apply
+ win.setTimeout(action);
+ } else {
+ // No need to unbind this handler as load is only ever called once
+ jqLite(win).on('load', action);
+ }
+}
+
+//////////////////////////////////////////
+// Functions which are declared directly.
+//////////////////////////////////////////
+var JQLitePrototype = JQLite.prototype = {
+ ready: function(fn) {
+ var fired = false;
+
+ function trigger() {
+ if (fired) return;
+ fired = true;
+ fn();
+ }
+
+ // check if document is already loaded
+ if (document.readyState === 'complete') {
+ setTimeout(trigger);
+ } else {
+ this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
+ // we can not use jqLite since we are not done loading and jQuery could be loaded later.
+ // jshint -W064
+ JQLite(window).on('load', trigger); // fallback to window.onload for others
+ // jshint +W064
+ }
+ },
+ toString: function() {
+ var value = [];
+ forEach(this, function(e) { value.push('' + e);});
+ return '[' + value.join(', ') + ']';
+ },
+
+ eq: function(index) {
+ return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
+ },
+
+ length: 0,
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+//////////////////////////////////////////
+// Functions iterating getter/setters.
+// these functions return self on setter and
+// value on get.
+//////////////////////////////////////////
+var BOOLEAN_ATTR = {};
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
+ BOOLEAN_ATTR[lowercase(value)] = value;
+});
+var BOOLEAN_ELEMENTS = {};
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
+ BOOLEAN_ELEMENTS[value] = true;
+});
+var ALIASED_ATTR = {
+ 'ngMinlength': 'minlength',
+ 'ngMaxlength': 'maxlength',
+ 'ngMin': 'min',
+ 'ngMax': 'max',
+ 'ngPattern': 'pattern'
+};
+
+function getBooleanAttrName(element, name) {
+ // check dom last since we will most likely fail on name
+ var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
+
+ // booleanAttr is here twice to minimize DOM access
+ return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
+}
+
+function getAliasedAttrName(element, name) {
+ var nodeName = element.nodeName;
+ return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
+}
+
+forEach({
+ data: jqLiteData,
+ removeData: jqLiteRemoveData
+}, function(fn, name) {
+ JQLite[name] = fn;
+});
+
+forEach({
+ data: jqLiteData,
+ inheritedData: jqLiteInheritedData,
+
+ scope: function(element) {
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
+ return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
+ },
+
+ isolateScope: function(element) {
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
+ return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
+ },
+
+ controller: jqLiteController,
+
+ injector: function(element) {
+ return jqLiteInheritedData(element, '$injector');
+ },
+
+ removeAttr: function(element, name) {
+ element.removeAttribute(name);
+ },
+
+ hasClass: jqLiteHasClass,
+
+ css: function(element, name, value) {
+ name = camelCase(name);
+
+ if (isDefined(value)) {
+ element.style[name] = value;
+ } else {
+ return element.style[name];
+ }
+ },
+
+ attr: function(element, name, value) {
+ var lowercasedName = lowercase(name);
+ if (BOOLEAN_ATTR[lowercasedName]) {
+ if (isDefined(value)) {
+ if (!!value) {
+ element[name] = true;
+ element.setAttribute(name, lowercasedName);
+ } else {
+ element[name] = false;
+ element.removeAttribute(lowercasedName);
+ }
+ } else {
+ return (element[name] ||
+ (element.attributes.getNamedItem(name) || noop).specified)
+ ? lowercasedName
+ : undefined;
+ }
+ } else if (isDefined(value)) {
+ element.setAttribute(name, value);
+ } else if (element.getAttribute) {
+ // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
+ // some elements (e.g. Document) don't have get attribute, so return undefined
+ var ret = element.getAttribute(name, 2);
+ // normalize non-existing attributes to undefined (as jQuery)
+ return ret === null ? undefined : ret;
+ }
+ },
+
+ prop: function(element, name, value) {
+ if (isDefined(value)) {
+ element[name] = value;
+ } else {
+ return element[name];
+ }
+ },
+
+ text: (function() {
+ getText.$dv = '';
+ return getText;
+
+ function getText(element, value) {
+ if (isUndefined(value)) {
+ var nodeType = element.nodeType;
+ return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
+ }
+ element.textContent = value;
+ }
+ })(),
+
+ val: function(element, value) {
+ if (isUndefined(value)) {
+ if (element.multiple && nodeName_(element) === 'select') {
+ var result = [];
+ forEach(element.options, function(option) {
+ if (option.selected) {
+ result.push(option.value || option.text);
+ }
+ });
+ return result.length === 0 ? null : result;
+ }
+ return element.value;
+ }
+ element.value = value;
+ },
+
+ html: function(element, value) {
+ if (isUndefined(value)) {
+ return element.innerHTML;
+ }
+ jqLiteDealoc(element, true);
+ element.innerHTML = value;
+ },
+
+ empty: jqLiteEmpty
+}, function(fn, name) {
+ /**
+ * Properties: writes return selection, reads return first value
+ */
+ JQLite.prototype[name] = function(arg1, arg2) {
+ var i, key;
+ var nodeCount = this.length;
+
+ // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
+ // in a way that survives minification.
+ // jqLiteEmpty takes no arguments but is a setter.
+ if (fn !== jqLiteEmpty &&
+ (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
+ if (isObject(arg1)) {
+
+ // we are a write, but the object properties are the key/values
+ for (i = 0; i < nodeCount; i++) {
+ if (fn === jqLiteData) {
+ // data() takes the whole object in jQuery
+ fn(this[i], arg1);
+ } else {
+ for (key in arg1) {
+ fn(this[i], key, arg1[key]);
+ }
+ }
+ }
+ // return self for chaining
+ return this;
+ } else {
+ // we are a read, so read the first child.
+ // TODO: do we still need this?
+ var value = fn.$dv;
+ // Only if we have $dv do we iterate over all, otherwise it is just the first element.
+ var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
+ for (var j = 0; j < jj; j++) {
+ var nodeValue = fn(this[j], arg1, arg2);
+ value = value ? value + nodeValue : nodeValue;
+ }
+ return value;
+ }
+ } else {
+ // we are a write, so apply to all children
+ for (i = 0; i < nodeCount; i++) {
+ fn(this[i], arg1, arg2);
+ }
+ // return self for chaining
+ return this;
+ }
+ };
+});
+
+function createEventHandler(element, events) {
+ var eventHandler = function(event, type) {
+ // jQuery specific api
+ event.isDefaultPrevented = function() {
+ return event.defaultPrevented;
+ };
+
+ var eventFns = events[type || event.type];
+ var eventFnsLength = eventFns ? eventFns.length : 0;
+
+ if (!eventFnsLength) return;
+
+ if (isUndefined(event.immediatePropagationStopped)) {
+ var originalStopImmediatePropagation = event.stopImmediatePropagation;
+ event.stopImmediatePropagation = function() {
+ event.immediatePropagationStopped = true;
+
+ if (event.stopPropagation) {
+ event.stopPropagation();
+ }
+
+ if (originalStopImmediatePropagation) {
+ originalStopImmediatePropagation.call(event);
+ }
+ };
+ }
+
+ event.isImmediatePropagationStopped = function() {
+ return event.immediatePropagationStopped === true;
+ };
+
+ // Copy event handlers in case event handlers array is modified during execution.
+ if ((eventFnsLength > 1)) {
+ eventFns = shallowCopy(eventFns);
+ }
+
+ for (var i = 0; i < eventFnsLength; i++) {
+ if (!event.isImmediatePropagationStopped()) {
+ eventFns[i].call(element, event);
+ }
+ }
+ };
+
+ // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
+ // events on `element`
+ eventHandler.elem = element;
+ return eventHandler;
+}
+
+//////////////////////////////////////////
+// Functions iterating traversal.
+// These functions chain results into a single
+// selector.
+//////////////////////////////////////////
+forEach({
+ removeData: jqLiteRemoveData,
+
+ on: function jqLiteOn(element, type, fn, unsupported) {
+ if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
+
+ // Do not add event handlers to non-elements because they will not be cleaned up.
+ if (!jqLiteAcceptsData(element)) {
+ return;
+ }
+
+ var expandoStore = jqLiteExpandoStore(element, true);
+ var events = expandoStore.events;
+ var handle = expandoStore.handle;
+
+ if (!handle) {
+ handle = expandoStore.handle = createEventHandler(element, events);
+ }
+
+ // http://jsperf.com/string-indexof-vs-split
+ var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
+ var i = types.length;
+
+ while (i--) {
+ type = types[i];
+ var eventFns = events[type];
+
+ if (!eventFns) {
+ events[type] = [];
+
+ if (type === 'mouseenter' || type === 'mouseleave') {
+ // Refer to jQuery's implementation of mouseenter & mouseleave
+ // Read about mouseenter and mouseleave:
+ // http://www.quirksmode.org/js/events_mouse.html#link8
+
+ jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
+ var target = this, related = event.relatedTarget;
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if (!related || (related !== target && !target.contains(related))) {
+ handle(event, type);
+ }
+ });
+
+ } else {
+ if (type !== '$destroy') {
+ addEventListenerFn(element, type, handle);
+ }
+ }
+ eventFns = events[type];
+ }
+ eventFns.push(fn);
+ }
+ },
+
+ off: jqLiteOff,
+
+ one: function(element, type, fn) {
+ element = jqLite(element);
+
+ //add the listener twice so that when it is called
+ //you can remove the original function and still be
+ //able to call element.off(ev, fn) normally
+ element.on(type, function onFn() {
+ element.off(type, fn);
+ element.off(type, onFn);
+ });
+ element.on(type, fn);
+ },
+
+ replaceWith: function(element, replaceNode) {
+ var index, parent = element.parentNode;
+ jqLiteDealoc(element);
+ forEach(new JQLite(replaceNode), function(node) {
+ if (index) {
+ parent.insertBefore(node, index.nextSibling);
+ } else {
+ parent.replaceChild(node, element);
+ }
+ index = node;
+ });
+ },
+
+ children: function(element) {
+ var children = [];
+ forEach(element.childNodes, function(element) {
+ if (element.nodeType === NODE_TYPE_ELEMENT)
+ children.push(element);
+ });
+ return children;
+ },
+
+ contents: function(element) {
+ return element.contentDocument || element.childNodes || [];
+ },
+
+ append: function(element, node) {
+ var nodeType = element.nodeType;
+ if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
+
+ node = new JQLite(node);
+
+ for (var i = 0, ii = node.length; i < ii; i++) {
+ var child = node[i];
+ element.appendChild(child);
+ }
+ },
+
+ prepend: function(element, node) {
+ if (element.nodeType === NODE_TYPE_ELEMENT) {
+ var index = element.firstChild;
+ forEach(new JQLite(node), function(child) {
+ element.insertBefore(child, index);
+ });
+ }
+ },
+
+ wrap: function(element, wrapNode) {
+ wrapNode = jqLite(wrapNode).eq(0).clone()[0];
+ var parent = element.parentNode;
+ if (parent) {
+ parent.replaceChild(wrapNode, element);
+ }
+ wrapNode.appendChild(element);
+ },
+
+ remove: jqLiteRemove,
+
+ detach: function(element) {
+ jqLiteRemove(element, true);
+ },
+
+ after: function(element, newElement) {
+ var index = element, parent = element.parentNode;
+ newElement = new JQLite(newElement);
+
+ for (var i = 0, ii = newElement.length; i < ii; i++) {
+ var node = newElement[i];
+ parent.insertBefore(node, index.nextSibling);
+ index = node;
+ }
+ },
+
+ addClass: jqLiteAddClass,
+ removeClass: jqLiteRemoveClass,
+
+ toggleClass: function(element, selector, condition) {
+ if (selector) {
+ forEach(selector.split(' '), function(className) {
+ var classCondition = condition;
+ if (isUndefined(classCondition)) {
+ classCondition = !jqLiteHasClass(element, className);
+ }
+ (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
+ });
+ }
+ },
+
+ parent: function(element) {
+ var parent = element.parentNode;
+ return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
+ },
+
+ next: function(element) {
+ return element.nextElementSibling;
+ },
+
+ find: function(element, selector) {
+ if (element.getElementsByTagName) {
+ return element.getElementsByTagName(selector);
+ } else {
+ return [];
+ }
+ },
+
+ clone: jqLiteClone,
+
+ triggerHandler: function(element, event, extraParameters) {
+
+ var dummyEvent, eventFnsCopy, handlerArgs;
+ var eventName = event.type || event;
+ var expandoStore = jqLiteExpandoStore(element);
+ var events = expandoStore && expandoStore.events;
+ var eventFns = events && events[eventName];
+
+ if (eventFns) {
+ // Create a dummy event to pass to the handlers
+ dummyEvent = {
+ preventDefault: function() { this.defaultPrevented = true; },
+ isDefaultPrevented: function() { return this.defaultPrevented === true; },
+ stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
+ isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
+ stopPropagation: noop,
+ type: eventName,
+ target: element
+ };
+
+ // If a custom event was provided then extend our dummy event with it
+ if (event.type) {
+ dummyEvent = extend(dummyEvent, event);
+ }
+
+ // Copy event handlers in case event handlers array is modified during execution.
+ eventFnsCopy = shallowCopy(eventFns);
+ handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
+
+ forEach(eventFnsCopy, function(fn) {
+ if (!dummyEvent.isImmediatePropagationStopped()) {
+ fn.apply(element, handlerArgs);
+ }
+ });
+ }
+ }
+}, function(fn, name) {
+ /**
+ * chaining functions
+ */
+ JQLite.prototype[name] = function(arg1, arg2, arg3) {
+ var value;
+
+ for (var i = 0, ii = this.length; i < ii; i++) {
+ if (isUndefined(value)) {
+ value = fn(this[i], arg1, arg2, arg3);
+ if (isDefined(value)) {
+ // any function which returns a value needs to be wrapped
+ value = jqLite(value);
+ }
+ } else {
+ jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
+ }
+ }
+ return isDefined(value) ? value : this;
+ };
+
+ // bind legacy bind/unbind to on/off
+ JQLite.prototype.bind = JQLite.prototype.on;
+ JQLite.prototype.unbind = JQLite.prototype.off;
+});
+
+
+// Provider for private $$jqLite service
+function $$jqLiteProvider() {
+ this.$get = function $$jqLite() {
+ return extend(JQLite, {
+ hasClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteHasClass(node, classes);
+ },
+ addClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteAddClass(node, classes);
+ },
+ removeClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteRemoveClass(node, classes);
+ }
+ });
+ };
+}
+
+/**
+ * Computes a hash of an 'obj'.
+ * Hash of a:
+ * string is string
+ * number is number as string
+ * object is either result of calling $$hashKey function on the object or uniquely generated id,
+ * that is also assigned to the $$hashKey property of the object.
+ *
+ * @param obj
+ * @returns {string} hash string such that the same input will have the same hash string.
+ * The resulting string key is in 'type:hashKey' format.
+ */
+function hashKey(obj, nextUidFn) {
+ var key = obj && obj.$$hashKey;
+
+ if (key) {
+ if (typeof key === 'function') {
+ key = obj.$$hashKey();
+ }
+ return key;
+ }
+
+ var objType = typeof obj;
+ if (objType == 'function' || (objType == 'object' && obj !== null)) {
+ key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
+ } else {
+ key = objType + ':' + obj;
+ }
+
+ return key;
+}
+
+/**
+ * HashMap which can use objects as keys
+ */
+function HashMap(array, isolatedUid) {
+ if (isolatedUid) {
+ var uid = 0;
+ this.nextUid = function() {
+ return ++uid;
+ };
+ }
+ forEach(array, this.put, this);
+}
+HashMap.prototype = {
+ /**
+ * Store key value pair
+ * @param key key to store can be any type
+ * @param value value to store can be any type
+ */
+ put: function(key, value) {
+ this[hashKey(key, this.nextUid)] = value;
+ },
+
+ /**
+ * @param key
+ * @returns {Object} the value for the key
+ */
+ get: function(key) {
+ return this[hashKey(key, this.nextUid)];
+ },
+
+ /**
+ * Remove the key/value pair
+ * @param key
+ */
+ remove: function(key) {
+ var value = this[key = hashKey(key, this.nextUid)];
+ delete this[key];
+ return value;
+ }
+};
+
+/**
+ * @ngdoc function
+ * @module ng
+ * @name angular.injector
+ * @kind function
+ *
+ * @description
+ * Creates an injector object that can be used for retrieving services as well as for
+ * dependency injection (see {@link guide/di dependency injection}).
+ *
+ * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
+ * {@link angular.module}. The `ng` module must be explicitly added.
+ * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
+ * disallows argument name annotation inference.
+ * @returns {injector} Injector object. See {@link auto.$injector $injector}.
+ *
+ * @example
+ * Typical usage
+ * ```js
+ * // create an injector
+ * var $injector = angular.injector(['ng']);
+ *
+ * // use the injector to kick off your application
+ * // use the type inference to auto inject arguments, or use implicit injection
+ * $injector.invoke(function($rootScope, $compile, $document) {
+ * $compile($document)($rootScope);
+ * $rootScope.$digest();
+ * });
+ * ```
+ *
+ * Sometimes you want to get access to the injector of a currently running Angular app
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
+ * application has been bootstrapped. You can do this using the extra `injector()` added
+ * to JQuery/jqLite elements. See {@link angular.element}.
+ *
+ * *This is fairly rare but could be the case if a third party library is injecting the
+ * markup.*
+ *
+ * In the following example a new block of HTML containing a `ng-controller`
+ * directive is added to the end of the document body by JQuery. We then compile and link
+ * it into the current AngularJS scope.
+ *
+ * ```js
+ * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
+ * $(document.body).append($div);
+ *
+ * angular.element(document).injector().invoke(function($compile) {
+ * var scope = angular.element($div).scope();
+ * $compile($div)(scope);
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc module
+ * @name auto
+ * @description
+ *
+ * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
+ */
+
+var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
+var FN_ARG_SPLIT = /,/;
+var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
+var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
+var $injectorMinErr = minErr('$injector');
+
+function anonFn(fn) {
+ // For anonymous functions, showing at the very least the function signature can help in
+ // debugging.
+ var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
+ args = fnText.match(FN_ARGS);
+ if (args) {
+ return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
+ }
+ return 'fn';
+}
+
+function annotate(fn, strictDi, name) {
+ var $inject,
+ fnText,
+ argDecl,
+ last;
+
+ if (typeof fn === 'function') {
+ if (!($inject = fn.$inject)) {
+ $inject = [];
+ if (fn.length) {
+ if (strictDi) {
+ if (!isString(name) || !name) {
+ name = fn.name || anonFn(fn);
+ }
+ throw $injectorMinErr('strictdi',
+ '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
+ }
+ fnText = fn.toString().replace(STRIP_COMMENTS, '');
+ argDecl = fnText.match(FN_ARGS);
+ forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
+ arg.replace(FN_ARG, function(all, underscore, name) {
+ $inject.push(name);
+ });
+ });
+ }
+ fn.$inject = $inject;
+ }
+ } else if (isArray(fn)) {
+ last = fn.length - 1;
+ assertArgFn(fn[last], 'fn');
+ $inject = fn.slice(0, last);
+ } else {
+ assertArgFn(fn, 'fn', true);
+ }
+ return $inject;
+}
+
+///////////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $injector
+ *
+ * @description
+ *
+ * `$injector` is used to retrieve object instances as defined by
+ * {@link auto.$provide provider}, instantiate types, invoke methods,
+ * and load modules.
+ *
+ * The following always holds true:
+ *
+ * ```js
+ * var $injector = angular.injector();
+ * expect($injector.get('$injector')).toBe($injector);
+ * expect($injector.invoke(function($injector) {
+ * return $injector;
+ * })).toBe($injector);
+ * ```
+ *
+ * # Injection Function Annotation
+ *
+ * JavaScript does not have annotations, and annotations are needed for dependency injection. The
+ * following are all valid ways of annotating function with injection arguments and are equivalent.
+ *
+ * ```js
+ * // inferred (only works if code not minified/obfuscated)
+ * $injector.invoke(function(serviceA){});
+ *
+ * // annotated
+ * function explicit(serviceA) {};
+ * explicit.$inject = ['serviceA'];
+ * $injector.invoke(explicit);
+ *
+ * // inline
+ * $injector.invoke(['serviceA', function(serviceA){}]);
+ * ```
+ *
+ * ## Inference
+ *
+ * In JavaScript calling `toString()` on a function returns the function definition. The definition
+ * can then be parsed and the function arguments can be extracted. This method of discovering
+ * annotations is disallowed when the injector is in strict mode.
+ * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
+ * argument names.
+ *
+ * ## `$inject` Annotation
+ * By adding an `$inject` property onto a function the injection parameters can be specified.
+ *
+ * ## Inline
+ * As an array of injection names, where the last item in the array is the function to call.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#get
+ *
+ * @description
+ * Return an instance of the service.
+ *
+ * @param {string} name The name of the instance to retrieve.
+ * @param {string} caller An optional string to provide the origin of the function call for error messages.
+ * @return {*} The instance.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#invoke
+ *
+ * @description
+ * Invoke the method and supply the method arguments from the `$injector`.
+ *
+ * @param {!Function} fn The function to invoke. Function parameters are injected according to the
+ * {@link guide/di $inject Annotation} rules.
+ * @param {Object=} self The `this` for the invoked method.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {*} the value returned by the invoked `fn` function.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#has
+ *
+ * @description
+ * Allows the user to query if the particular service exists.
+ *
+ * @param {string} name Name of the service to query.
+ * @returns {boolean} `true` if injector has given service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#instantiate
+ * @description
+ * Create a new instance of JS type. The method takes a constructor function, invokes the new
+ * operator, and supplies all of the arguments to the constructor function as specified by the
+ * constructor annotation.
+ *
+ * @param {Function} Type Annotated constructor function.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {Object} new instance of `Type`.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#annotate
+ *
+ * @description
+ * Returns an array of service names which the function is requesting for injection. This API is
+ * used by the injector to determine which services need to be injected into the function when the
+ * function is invoked. There are three ways in which the function can be annotated with the needed
+ * dependencies.
+ *
+ * # Argument names
+ *
+ * The simplest form is to extract the dependencies from the arguments of the function. This is done
+ * by converting the function into a string using `toString()` method and extracting the argument
+ * names.
+ * ```js
+ * // Given
+ * function MyController($scope, $route) {
+ * // ...
+ * }
+ *
+ * // Then
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * You can disallow this method by using strict injection mode.
+ *
+ * This method does not work with code minification / obfuscation. For this reason the following
+ * annotation strategies are supported.
+ *
+ * # The `$inject` property
+ *
+ * If a function has an `$inject` property and its value is an array of strings, then the strings
+ * represent names of services to be injected into the function.
+ * ```js
+ * // Given
+ * var MyController = function(obfuscatedScope, obfuscatedRoute) {
+ * // ...
+ * }
+ * // Define function dependencies
+ * MyController['$inject'] = ['$scope', '$route'];
+ *
+ * // Then
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * # The array notation
+ *
+ * It is often desirable to inline Injected functions and that's when setting the `$inject` property
+ * is very inconvenient. In these situations using the array notation to specify the dependencies in
+ * a way that survives minification is a better choice:
+ *
+ * ```js
+ * // We wish to write this (not minification / obfuscation safe)
+ * injector.invoke(function($compile, $rootScope) {
+ * // ...
+ * });
+ *
+ * // We are forced to write break inlining
+ * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
+ * // ...
+ * };
+ * tmpFn.$inject = ['$compile', '$rootScope'];
+ * injector.invoke(tmpFn);
+ *
+ * // To better support inline function the inline annotation is supported
+ * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
+ * // ...
+ * }]);
+ *
+ * // Therefore
+ * expect(injector.annotate(
+ * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
+ * ).toEqual(['$compile', '$rootScope']);
+ * ```
+ *
+ * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
+ * be retrieved as described above.
+ *
+ * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
+ *
+ * @returns {Array.<string>} The names of the services which the function requires.
+ */
+
+
+
+
+/**
+ * @ngdoc service
+ * @name $provide
+ *
+ * @description
+ *
+ * The {@link auto.$provide $provide} service has a number of methods for registering components
+ * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
+ * {@link angular.Module}.
+ *
+ * An Angular **service** is a singleton object created by a **service factory**. These **service
+ * factories** are functions which, in turn, are created by a **service provider**.
+ * The **service providers** are constructor functions. When instantiated they must contain a
+ * property called `$get`, which holds the **service factory** function.
+ *
+ * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
+ * correct **service provider**, instantiating it and then calling its `$get` **service factory**
+ * function to get the instance of the **service**.
+ *
+ * Often services have no configuration options and there is no need to add methods to the service
+ * provider. The provider will be no more than a constructor function with a `$get` property. For
+ * these cases the {@link auto.$provide $provide} service has additional helper methods to register
+ * services without specifying a provider.
+ *
+ * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
+ * {@link auto.$injector $injector}
+ * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
+ * providers and services.
+ * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
+ * services, not providers.
+ * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
+ * that will be wrapped in a **service provider** object, whose `$get` property will contain the
+ * given factory function.
+ * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
+ * that will be wrapped in a **service provider** object, whose `$get` property will instantiate
+ * a new object using the given constructor function.
+ *
+ * See the individual methods for more information and examples.
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#provider
+ * @description
+ *
+ * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
+ * are constructor functions, whose instances are responsible for "providing" a factory for a
+ * service.
+ *
+ * Service provider names start with the name of the service they provide followed by `Provider`.
+ * For example, the {@link ng.$log $log} service has a provider called
+ * {@link ng.$logProvider $logProvider}.
+ *
+ * Service provider objects can have additional methods which allow configuration of the provider
+ * and its service. Importantly, you can configure what kind of service is created by the `$get`
+ * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
+ * method {@link ng.$logProvider#debugEnabled debugEnabled}
+ * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
+ * console or not.
+ *
+ * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
+ 'Provider'` key.
+ * @param {(Object|function())} provider If the provider is:
+ *
+ * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
+ * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
+ * - `Constructor`: a new instance of the provider will be created using
+ * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
+ *
+ * @returns {Object} registered provider instance
+
+ * @example
+ *
+ * The following example shows how to create a simple event tracking service and register it using
+ * {@link auto.$provide#provider $provide.provider()}.
+ *
+ * ```js
+ * // Define the eventTracker provider
+ * function EventTrackerProvider() {
+ * var trackingUrl = '/track';
+ *
+ * // A provider method for configuring where the tracked events should been saved
+ * this.setTrackingUrl = function(url) {
+ * trackingUrl = url;
+ * };
+ *
+ * // The service factory function
+ * this.$get = ['$http', function($http) {
+ * var trackedEvents = {};
+ * return {
+ * // Call this to track an event
+ * event: function(event) {
+ * var count = trackedEvents[event] || 0;
+ * count += 1;
+ * trackedEvents[event] = count;
+ * return count;
+ * },
+ * // Call this to save the tracked events to the trackingUrl
+ * save: function() {
+ * $http.post(trackingUrl, trackedEvents);
+ * }
+ * };
+ * }];
+ * }
+ *
+ * describe('eventTracker', function() {
+ * var postSpy;
+ *
+ * beforeEach(module(function($provide) {
+ * // Register the eventTracker provider
+ * $provide.provider('eventTracker', EventTrackerProvider);
+ * }));
+ *
+ * beforeEach(module(function(eventTrackerProvider) {
+ * // Configure eventTracker provider
+ * eventTrackerProvider.setTrackingUrl('/custom-track');
+ * }));
+ *
+ * it('tracks events', inject(function(eventTracker) {
+ * expect(eventTracker.event('login')).toEqual(1);
+ * expect(eventTracker.event('login')).toEqual(2);
+ * }));
+ *
+ * it('saves to the tracking url', inject(function(eventTracker, $http) {
+ * postSpy = spyOn($http, 'post');
+ * eventTracker.event('login');
+ * eventTracker.save();
+ * expect(postSpy).toHaveBeenCalled();
+ * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
+ * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
+ * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
+ * }));
+ * });
+ * ```
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#factory
+ * @description
+ *
+ * Register a **service factory**, which will be called to return the service instance.
+ * This is short for registering a service where its provider consists of only a `$get` property,
+ * which is the given service factory function.
+ * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
+ * configure your service in a provider.
+ *
+ * @param {string} name The name of the instance.
+ * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand
+ * for `$provide.provider(name, {$get: $getFn})`.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service
+ * ```js
+ * $provide.factory('ping', ['$http', function($http) {
+ * return function ping() {
+ * return $http.send('/ping');
+ * };
+ * }]);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ * someModule.controller('Ctrl', ['ping', function(ping) {
+ * ping();
+ * }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#service
+ * @description
+ *
+ * Register a **service constructor**, which will be invoked with `new` to create the service
+ * instance.
+ * This is short for registering a service where its provider's `$get` property is the service
+ * constructor function that will be used to instantiate the service instance.
+ *
+ * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
+ * as a type/class.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function} constructor A class (constructor function) that will be instantiated.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service using
+ * {@link auto.$provide#service $provide.service(class)}.
+ * ```js
+ * var Ping = function($http) {
+ * this.$http = $http;
+ * };
+ *
+ * Ping.$inject = ['$http'];
+ *
+ * Ping.prototype.send = function() {
+ * return this.$http.get('/ping');
+ * };
+ * $provide.service('ping', Ping);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ * someModule.controller('Ctrl', ['ping', function(ping) {
+ * ping.send();
+ * }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#value
+ * @description
+ *
+ * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
+ * number, an array, an object or a function. This is short for registering a service where its
+ * provider's `$get` property is a factory function that takes no arguments and returns the **value
+ * service**.
+ *
+ * Value services are similar to constant services, except that they cannot be injected into a
+ * module configuration function (see {@link angular.Module#config}) but they can be overridden by
+ * an Angular
+ * {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the instance.
+ * @param {*} value The value.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here are some examples of creating value services.
+ * ```js
+ * $provide.value('ADMIN_USER', 'admin');
+ *
+ * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
+ *
+ * $provide.value('halfOf', function(value) {
+ * return value / 2;
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#constant
+ * @description
+ *
+ * Register a **constant service**, such as a string, a number, an array, an object or a function,
+ * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
+ * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
+ * be overridden by an Angular {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the constant.
+ * @param {*} value The constant value.
+ * @returns {Object} registered instance
+ *
+ * @example
+ * Here a some examples of creating constants:
+ * ```js
+ * $provide.constant('SHARD_HEIGHT', 306);
+ *
+ * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
+ *
+ * $provide.constant('double', function(value) {
+ * return value * 2;
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#decorator
+ * @description
+ *
+ * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
+ * intercepts the creation of a service, allowing it to override or modify the behaviour of the
+ * service. The object returned by the decorator may be the original service, or a new service
+ * object which replaces or wraps and delegates to the original service.
+ *
+ * @param {string} name The name of the service to decorate.
+ * @param {function()} decorator This function will be invoked when the service needs to be
+ * instantiated and should return the decorated service instance. The function is called using
+ * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
+ * Local injection arguments:
+ *
+ * * `$delegate` - The original service instance, which can be monkey patched, configured,
+ * decorated or delegated to.
+ *
+ * @example
+ * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
+ * calls to {@link ng.$log#error $log.warn()}.
+ * ```js
+ * $provide.decorator('$log', ['$delegate', function($delegate) {
+ * $delegate.warn = $delegate.error;
+ * return $delegate;
+ * }]);
+ * ```
+ */
+
+
+function createInjector(modulesToLoad, strictDi) {
+ strictDi = (strictDi === true);
+ var INSTANTIATING = {},
+ providerSuffix = 'Provider',
+ path = [],
+ loadedModules = new HashMap([], true),
+ providerCache = {
+ $provide: {
+ provider: supportObject(provider),
+ factory: supportObject(factory),
+ service: supportObject(service),
+ value: supportObject(value),
+ constant: supportObject(constant),
+ decorator: decorator
+ }
+ },
+ providerInjector = (providerCache.$injector =
+ createInternalInjector(providerCache, function(serviceName, caller) {
+ if (angular.isString(caller)) {
+ path.push(caller);
+ }
+ throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
+ })),
+ instanceCache = {},
+ instanceInjector = (instanceCache.$injector =
+ createInternalInjector(instanceCache, function(serviceName, caller) {
+ var provider = providerInjector.get(serviceName + providerSuffix, caller);
+ return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
+ }));
+
+
+ forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
+
+ return instanceInjector;
+
+ ////////////////////////////////////
+ // $provider
+ ////////////////////////////////////
+
+ function supportObject(delegate) {
+ return function(key, value) {
+ if (isObject(key)) {
+ forEach(key, reverseParams(delegate));
+ } else {
+ return delegate(key, value);
+ }
+ };
+ }
+
+ function provider(name, provider_) {
+ assertNotHasOwnProperty(name, 'service');
+ if (isFunction(provider_) || isArray(provider_)) {
+ provider_ = providerInjector.instantiate(provider_);
+ }
+ if (!provider_.$get) {
+ throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
+ }
+ return providerCache[name + providerSuffix] = provider_;
+ }
+
+ function enforceReturnValue(name, factory) {
+ return function enforcedReturnValue() {
+ var result = instanceInjector.invoke(factory, this);
+ if (isUndefined(result)) {
+ throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
+ }
+ return result;
+ };
+ }
+
+ function factory(name, factoryFn, enforce) {
+ return provider(name, {
+ $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
+ });
+ }
+
+ function service(name, constructor) {
+ return factory(name, ['$injector', function($injector) {
+ return $injector.instantiate(constructor);
+ }]);
+ }
+
+ function value(name, val) { return factory(name, valueFn(val), false); }
+
+ function constant(name, value) {
+ assertNotHasOwnProperty(name, 'constant');
+ providerCache[name] = value;
+ instanceCache[name] = value;
+ }
+
+ function decorator(serviceName, decorFn) {
+ var origProvider = providerInjector.get(serviceName + providerSuffix),
+ orig$get = origProvider.$get;
+
+ origProvider.$get = function() {
+ var origInstance = instanceInjector.invoke(orig$get, origProvider);
+ return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
+ };
+ }
+
+ ////////////////////////////////////
+ // Module Loading
+ ////////////////////////////////////
+ function loadModules(modulesToLoad) {
+ var runBlocks = [], moduleFn;
+ forEach(modulesToLoad, function(module) {
+ if (loadedModules.get(module)) return;
+ loadedModules.put(module, true);
+
+ function runInvokeQueue(queue) {
+ var i, ii;
+ for (i = 0, ii = queue.length; i < ii; i++) {
+ var invokeArgs = queue[i],
+ provider = providerInjector.get(invokeArgs[0]);
+
+ provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
+ }
+ }
+
+ try {
+ if (isString(module)) {
+ moduleFn = angularModule(module);
+ runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
+ runInvokeQueue(moduleFn._invokeQueue);
+ runInvokeQueue(moduleFn._configBlocks);
+ } else if (isFunction(module)) {
+ runBlocks.push(providerInjector.invoke(module));
+ } else if (isArray(module)) {
+ runBlocks.push(providerInjector.invoke(module));
+ } else {
+ assertArgFn(module, 'module');
+ }
+ } catch (e) {
+ if (isArray(module)) {
+ module = module[module.length - 1];
+ }
+ if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
+ // Safari & FF's stack traces don't contain error.message content
+ // unlike those of Chrome and IE
+ // So if stack doesn't contain message, we create a new string that contains both.
+ // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
+ /* jshint -W022 */
+ e = e.message + '\n' + e.stack;
+ }
+ throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
+ module, e.stack || e.message || e);
+ }
+ });
+ return runBlocks;
+ }
+
+ ////////////////////////////////////
+ // internal Injector
+ ////////////////////////////////////
+
+ function createInternalInjector(cache, factory) {
+
+ function getService(serviceName, caller) {
+ if (cache.hasOwnProperty(serviceName)) {
+ if (cache[serviceName] === INSTANTIATING) {
+ throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
+ serviceName + ' <- ' + path.join(' <- '));
+ }
+ return cache[serviceName];
+ } else {
+ try {
+ path.unshift(serviceName);
+ cache[serviceName] = INSTANTIATING;
+ return cache[serviceName] = factory(serviceName, caller);
+ } catch (err) {
+ if (cache[serviceName] === INSTANTIATING) {
+ delete cache[serviceName];
+ }
+ throw err;
+ } finally {
+ path.shift();
+ }
+ }
+ }
+
+ function invoke(fn, self, locals, serviceName) {
+ if (typeof locals === 'string') {
+ serviceName = locals;
+ locals = null;
+ }
+
+ var args = [],
+ $inject = annotate(fn, strictDi, serviceName),
+ length, i,
+ key;
+
+ for (i = 0, length = $inject.length; i < length; i++) {
+ key = $inject[i];
+ if (typeof key !== 'string') {
+ throw $injectorMinErr('itkn',
+ 'Incorrect injection token! Expected service name as string, got {0}', key);
+ }
+ args.push(
+ locals && locals.hasOwnProperty(key)
+ ? locals[key]
+ : getService(key, serviceName)
+ );
+ }
+ if (isArray(fn)) {
+ fn = fn[length];
+ }
+
+ // http://jsperf.com/angularjs-invoke-apply-vs-switch
+ // #5388
+ return fn.apply(self, args);
+ }
+
+ function instantiate(Type, locals, serviceName) {
+ // Check if Type is annotated and use just the given function at n-1 as parameter
+ // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
+ // Object creation: http://jsperf.com/create-constructor/2
+ var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
+ var returnedValue = invoke(Type, instance, locals, serviceName);
+
+ return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
+ }
+
+ return {
+ invoke: invoke,
+ instantiate: instantiate,
+ get: getService,
+ annotate: annotate,
+ has: function(name) {
+ return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
+ }
+ };
+ }
+}
+
+createInjector.$$annotate = annotate;
+
+/**
+ * @ngdoc provider
+ * @name $anchorScrollProvider
+ *
+ * @description
+ * Use `$anchorScrollProvider` to disable automatic scrolling whenever
+ * {@link ng.$location#hash $location.hash()} changes.
+ */
+function $AnchorScrollProvider() {
+
+ var autoScrollingEnabled = true;
+
+ /**
+ * @ngdoc method
+ * @name $anchorScrollProvider#disableAutoScrolling
+ *
+ * @description
+ * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
+ * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />
+ * Use this method to disable automatic scrolling.
+ *
+ * If automatic scrolling is disabled, one must explicitly call
+ * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
+ * current hash.
+ */
+ this.disableAutoScrolling = function() {
+ autoScrollingEnabled = false;
+ };
+
+ /**
+ * @ngdoc service
+ * @name $anchorScroll
+ * @kind function
+ * @requires $window
+ * @requires $location
+ * @requires $rootScope
+ *
+ * @description
+ * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and
+ * scrolls to the related element, according to the rules specified in the
+ * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
+ *
+ * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
+ * match any anchor whenever it changes. This can be disabled by calling
+ * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
+ *
+ * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
+ * vertical scroll-offset (either fixed or dynamic).
+ *
+ * @property {(number|function|jqLite)} yOffset
+ * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
+ * positioned elements at the top of the page, such as navbars, headers etc.
+ *
+ * `yOffset` can be specified in various ways:
+ * - **number**: A fixed number of pixels to be used as offset.<br /><br />
+ * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
+ * a number representing the offset (in pixels).<br /><br />
+ * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
+ * the top of the page to the element's bottom will be used as offset.<br />
+ * **Note**: The element will be taken into account only as long as its `position` is set to
+ * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
+ * their height and/or positioning according to the viewport's size.
+ *
+ * <br />
+ * <div class="alert alert-warning">
+ * In order for `yOffset` to work properly, scrolling should take place on the document's root and
+ * not some child element.
+ * </div>
+ *
+ * @example
+ <example module="anchorScrollExample">
+ <file name="index.html">
+ <div id="scrollArea" ng-controller="ScrollController">
+ <a ng-click="gotoBottom()">Go to bottom</a>
+ <a id="bottom"></a> You're at the bottom!
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('anchorScrollExample', [])
+ .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
+ function ($scope, $location, $anchorScroll) {
+ $scope.gotoBottom = function() {
+ // set the location.hash to the id of
+ // the element you wish to scroll to.
+ $location.hash('bottom');
+
+ // call $anchorScroll()
+ $anchorScroll();
+ };
+ }]);
+ </file>
+ <file name="style.css">
+ #scrollArea {
+ height: 280px;
+ overflow: auto;
+ }
+
+ #bottom {
+ display: block;
+ margin-top: 2000px;
+ }
+ </file>
+ </example>
+ *
+ * <hr />
+ * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
+ * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
+ *
+ * @example
+ <example module="anchorScrollOffsetExample">
+ <file name="index.html">
+ <div class="fixed-header" ng-controller="headerCtrl">
+ <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
+ Go to anchor {{x}}
+ </a>
+ </div>
+ <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]">
+ Anchor {{x}} of 5
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('anchorScrollOffsetExample', [])
+ .run(['$anchorScroll', function($anchorScroll) {
+ $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
+ }])
+ .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
+ function ($anchorScroll, $location, $scope) {
+ $scope.gotoAnchor = function(x) {
+ var newHash = 'anchor' + x;
+ if ($location.hash() !== newHash) {
+ // set the $location.hash to `newHash` and
+ // $anchorScroll will automatically scroll to it
+ $location.hash('anchor' + x);
+ } else {
+ // call $anchorScroll() explicitly,
+ // since $location.hash hasn't changed
+ $anchorScroll();
+ }
+ };
+ }
+ ]);
+ </file>
+ <file name="style.css">
+ body {
+ padding-top: 50px;
+ }
+
+ .anchor {
+ border: 2px dashed DarkOrchid;
+ padding: 10px 10px 200px 10px;
+ }
+
+ .fixed-header {
+ background-color: rgba(0, 0, 0, 0.2);
+ height: 50px;
+ position: fixed;
+ top: 0; left: 0; right: 0;
+ }
+
+ .fixed-header > a {
+ display: inline-block;
+ margin: 5px 15px;
+ }
+ </file>
+ </example>
+ */
+ this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
+ var document = $window.document;
+
+ // Helper function to get first anchor from a NodeList
+ // (using `Array#some()` instead of `angular#forEach()` since it's more performant
+ // and working in all supported browsers.)
+ function getFirstAnchor(list) {
+ var result = null;
+ Array.prototype.some.call(list, function(element) {
+ if (nodeName_(element) === 'a') {
+ result = element;
+ return true;
+ }
+ });
+ return result;
+ }
+
+ function getYOffset() {
+
+ var offset = scroll.yOffset;
+
+ if (isFunction(offset)) {
+ offset = offset();
+ } else if (isElement(offset)) {
+ var elem = offset[0];
+ var style = $window.getComputedStyle(elem);
+ if (style.position !== 'fixed') {
+ offset = 0;
+ } else {
+ offset = elem.getBoundingClientRect().bottom;
+ }
+ } else if (!isNumber(offset)) {
+ offset = 0;
+ }
+
+ return offset;
+ }
+
+ function scrollTo(elem) {
+ if (elem) {
+ elem.scrollIntoView();
+
+ var offset = getYOffset();
+
+ if (offset) {
+ // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
+ // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
+ // top of the viewport.
+ //
+ // IF the number of pixels from the top of `elem` to the end of the page's content is less
+ // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
+ // way down the page.
+ //
+ // This is often the case for elements near the bottom of the page.
+ //
+ // In such cases we do not need to scroll the whole `offset` up, just the difference between
+ // the top of the element and the offset, which is enough to align the top of `elem` at the
+ // desired position.
+ var elemTop = elem.getBoundingClientRect().top;
+ $window.scrollBy(0, elemTop - offset);
+ }
+ } else {
+ $window.scrollTo(0, 0);
+ }
+ }
+
+ function scroll() {
+ var hash = $location.hash(), elm;
+
+ // empty hash, scroll to the top of the page
+ if (!hash) scrollTo(null);
+
+ // element with given id
+ else if ((elm = document.getElementById(hash))) scrollTo(elm);
+
+ // first anchor with given name :-D
+ else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
+
+ // no element and hash == 'top', scroll to the top of the page
+ else if (hash === 'top') scrollTo(null);
+ }
+
+ // does not scroll when user clicks on anchor link that is currently on
+ // (no url change, no $location.hash() change), browser native does scroll
+ if (autoScrollingEnabled) {
+ $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
+ function autoScrollWatchAction(newVal, oldVal) {
+ // skip the initial scroll if $location.hash is empty
+ if (newVal === oldVal && newVal === '') return;
+
+ jqLiteDocumentLoaded(function() {
+ $rootScope.$evalAsync(scroll);
+ });
+ });
+ }
+
+ return scroll;
+ }];
+}
+
+var $animateMinErr = minErr('$animate');
+
+/**
+ * @ngdoc provider
+ * @name $animateProvider
+ *
+ * @description
+ * Default implementation of $animate that doesn't perform any animations, instead just
+ * synchronously performs DOM
+ * updates and calls done() callbacks.
+ *
+ * In order to enable animations the ngAnimate module has to be loaded.
+ *
+ * To see the functional implementation check out src/ngAnimate/animate.js
+ */
+var $AnimateProvider = ['$provide', function($provide) {
+
+
+ this.$$selectors = {};
+
+
+ /**
+ * @ngdoc method
+ * @name $animateProvider#register
+ *
+ * @description
+ * Registers a new injectable animation factory function. The factory function produces the
+ * animation object which contains callback functions for each event that is expected to be
+ * animated.
+ *
+ * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`
+ * must be called once the element animation is complete. If a function is returned then the
+ * animation service will use this function to cancel the animation whenever a cancel event is
+ * triggered.
+ *
+ *
+ * ```js
+ * return {
+ * eventFn : function(element, done) {
+ * //code to run the animation
+ * //once complete, then run done()
+ * return function cancellationFunction() {
+ * //code to cancel the animation
+ * }
+ * }
+ * }
+ * ```
+ *
+ * @param {string} name The name of the animation.
+ * @param {Function} factory The factory function that will be executed to return the animation
+ * object.
+ */
+ this.register = function(name, factory) {
+ var key = name + '-animation';
+ if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',
+ "Expecting class selector starting with '.' got '{0}'.", name);
+ this.$$selectors[name.substr(1)] = key;
+ $provide.factory(key, factory);
+ };
+
+ /**
+ * @ngdoc method
+ * @name $animateProvider#classNameFilter
+ *
+ * @description
+ * Sets and/or returns the CSS class regular expression that is checked when performing
+ * an animation. Upon bootstrap the classNameFilter value is not set at all and will
+ * therefore enable $animate to attempt to perform an animation on any element.
+ * When setting the classNameFilter value, animations will only be performed on elements
+ * that successfully match the filter expression. This in turn can boost performance
+ * for low-powered devices as well as applications containing a lot of structural operations.
+ * @param {RegExp=} expression The className expression which will be checked against all animations
+ * @return {RegExp} The current CSS className expression value. If null then there is no expression value
+ */
+ this.classNameFilter = function(expression) {
+ if (arguments.length === 1) {
+ this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
+ }
+ return this.$$classNameFilter;
+ };
+
+ this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {
+
+ var currentDefer;
+
+ function runAnimationPostDigest(fn) {
+ var cancelFn, defer = $$q.defer();
+ defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {
+ cancelFn && cancelFn();
+ };
+
+ $rootScope.$$postDigest(function ngAnimatePostDigest() {
+ cancelFn = fn(function ngAnimateNotifyComplete() {
+ defer.resolve();
+ });
+ });
+
+ return defer.promise;
+ }
+
+ function resolveElementClasses(element, classes) {
+ var toAdd = [], toRemove = [];
+
+ var hasClasses = createMap();
+ forEach((element.attr('class') || '').split(/\s+/), function(className) {
+ hasClasses[className] = true;
+ });
+
+ forEach(classes, function(status, className) {
+ var hasClass = hasClasses[className];
+
+ // If the most recent class manipulation (via $animate) was to remove the class, and the
+ // element currently has the class, the class is scheduled for removal. Otherwise, if
+ // the most recent class manipulation (via $animate) was to add the class, and the
+ // element does not currently have the class, the class is scheduled to be added.
+ if (status === false && hasClass) {
+ toRemove.push(className);
+ } else if (status === true && !hasClass) {
+ toAdd.push(className);
+ }
+ });
+
+ return (toAdd.length + toRemove.length) > 0 &&
+ [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null];
+ }
+
+ function cachedClassManipulation(cache, classes, op) {
+ for (var i=0, ii = classes.length; i < ii; ++i) {
+ var className = classes[i];
+ cache[className] = op;
+ }
+ }
+
+ function asyncPromise() {
+ // only serve one instance of a promise in order to save CPU cycles
+ if (!currentDefer) {
+ currentDefer = $$q.defer();
+ $$asyncCallback(function() {
+ currentDefer.resolve();
+ currentDefer = null;
+ });
+ }
+ return currentDefer.promise;
+ }
+
+ function applyStyles(element, options) {
+ if (angular.isObject(options)) {
+ var styles = extend(options.from || {}, options.to || {});
+ element.css(styles);
+ }
+ }
+
+ /**
+ *
+ * @ngdoc service
+ * @name $animate
+ * @description The $animate service provides rudimentary DOM manipulation functions to
+ * insert, remove and move elements within the DOM, as well as adding and removing classes.
+ * This service is the core service used by the ngAnimate $animator service which provides
+ * high-level animation hooks for CSS and JavaScript.
+ *
+ * $animate is available in the AngularJS core, however, the ngAnimate module must be included
+ * to enable full out animation support. Otherwise, $animate will only perform simple DOM
+ * manipulation operations.
+ *
+ * To learn more about enabling animation support, click here to visit the {@link ngAnimate
+ * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service
+ * page}.
+ */
+ return {
+ animate: function(element, from, to) {
+ applyStyles(element, { from: from, to: to });
+ return asyncPromise();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#enter
+ * @kind function
+ * @description Inserts the element into the DOM either after the `after` element or
+ * as the first child within the `parent` element. When the function is called a promise
+ * is returned that will be resolved at a later time.
+ * @param {DOMElement} element the element which will be inserted into the DOM
+ * @param {DOMElement} parent the parent element which will append the element as
+ * a child (if the after element is not present)
+ * @param {DOMElement} after the sibling element which will append the element
+ * after itself
+ * @param {object=} options an optional collection of styles that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ enter: function(element, parent, after, options) {
+ applyStyles(element, options);
+ after ? after.after(element)
+ : parent.prepend(element);
+ return asyncPromise();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#leave
+ * @kind function
+ * @description Removes the element from the DOM. When the function is called a promise
+ * is returned that will be resolved at a later time.
+ * @param {DOMElement} element the element which will be removed from the DOM
+ * @param {object=} options an optional collection of options that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ leave: function(element, options) {
+ element.remove();
+ return asyncPromise();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#move
+ * @kind function
+ * @description Moves the position of the provided element within the DOM to be placed
+ * either after the `after` element or inside of the `parent` element. When the function
+ * is called a promise is returned that will be resolved at a later time.
+ *
+ * @param {DOMElement} element the element which will be moved around within the
+ * DOM
+ * @param {DOMElement} parent the parent element where the element will be
+ * inserted into (if the after element is not present)
+ * @param {DOMElement} after the sibling element where the element will be
+ * positioned next to
+ * @param {object=} options an optional collection of options that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ move: function(element, parent, after, options) {
+ // Do not remove element before insert. Removing will cause data associated with the
+ // element to be dropped. Insert will implicitly do the remove.
+ return this.enter(element, parent, after, options);
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#addClass
+ * @kind function
+ * @description Adds the provided className CSS class value to the provided element.
+ * When the function is called a promise is returned that will be resolved at a later time.
+ * @param {DOMElement} element the element which will have the className value
+ * added to it
+ * @param {string} className the CSS class which will be added to the element
+ * @param {object=} options an optional collection of options that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ addClass: function(element, className, options) {
+ return this.setClass(element, className, [], options);
+ },
+
+ $$addClassImmediately: function(element, className, options) {
+ element = jqLite(element);
+ className = !isString(className)
+ ? (isArray(className) ? className.join(' ') : '')
+ : className;
+ forEach(element, function(element) {
+ jqLiteAddClass(element, className);
+ });
+ applyStyles(element, options);
+ return asyncPromise();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#removeClass
+ * @kind function
+ * @description Removes the provided className CSS class value from the provided element.
+ * When the function is called a promise is returned that will be resolved at a later time.
+ * @param {DOMElement} element the element which will have the className value
+ * removed from it
+ * @param {string} className the CSS class which will be removed from the element
+ * @param {object=} options an optional collection of options that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ removeClass: function(element, className, options) {
+ return this.setClass(element, [], className, options);
+ },
+
+ $$removeClassImmediately: function(element, className, options) {
+ element = jqLite(element);
+ className = !isString(className)
+ ? (isArray(className) ? className.join(' ') : '')
+ : className;
+ forEach(element, function(element) {
+ jqLiteRemoveClass(element, className);
+ });
+ applyStyles(element, options);
+ return asyncPromise();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#setClass
+ * @kind function
+ * @description Adds and/or removes the given CSS classes to and from the element.
+ * When the function is called a promise is returned that will be resolved at a later time.
+ * @param {DOMElement} element the element which will have its CSS classes changed
+ * removed from it
+ * @param {string} add the CSS classes which will be added to the element
+ * @param {string} remove the CSS class which will be removed from the element
+ * @param {object=} options an optional collection of options that will be applied to the element.
+ * @return {Promise} the animation callback promise
+ */
+ setClass: function(element, add, remove, options) {
+ var self = this;
+ var STORAGE_KEY = '$$animateClasses';
+ var createdCache = false;
+ element = jqLite(element);
+
+ var cache = element.data(STORAGE_KEY);
+ if (!cache) {
+ cache = {
+ classes: {},
+ options: options
+ };
+ createdCache = true;
+ } else if (options && cache.options) {
+ cache.options = angular.extend(cache.options || {}, options);
+ }
+
+ var classes = cache.classes;
+
+ add = isArray(add) ? add : add.split(' ');
+ remove = isArray(remove) ? remove : remove.split(' ');
+ cachedClassManipulation(classes, add, true);
+ cachedClassManipulation(classes, remove, false);
+
+ if (createdCache) {
+ cache.promise = runAnimationPostDigest(function(done) {
+ var cache = element.data(STORAGE_KEY);
+ element.removeData(STORAGE_KEY);
+
+ // in the event that the element is removed before postDigest
+ // is run then the cache will be undefined and there will be
+ // no need anymore to add or remove and of the element classes
+ if (cache) {
+ var classes = resolveElementClasses(element, cache.classes);
+ if (classes) {
+ self.$$setClassImmediately(element, classes[0], classes[1], cache.options);
+ }
+ }
+
+ done();
+ });
+ element.data(STORAGE_KEY, cache);
+ }
+
+ return cache.promise;
+ },
+
+ $$setClassImmediately: function(element, add, remove, options) {
+ add && this.$$addClassImmediately(element, add);
+ remove && this.$$removeClassImmediately(element, remove);
+ applyStyles(element, options);
+ return asyncPromise();
+ },
+
+ enabled: noop,
+ cancel: noop
+ };
+ }];
+}];
+
+function $$AsyncCallbackProvider() {
+ this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
+ return $$rAF.supported
+ ? function(fn) { return $$rAF(fn); }
+ : function(fn) {
+ return $timeout(fn, 0, false);
+ };
+ }];
+}
+
+/* global stripHash: true */
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ * @requires $log
+ * @description
+ * This object has two goals:
+ *
+ * - hide all the global state in the browser caused by the window object
+ * - abstract away all the browser specific features and inconsistencies
+ *
+ * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
+ * service, which can be used for convenient testing of the application without the interaction with
+ * the real browser apis.
+ */
+/**
+ * @param {object} window The global window object.
+ * @param {object} document jQuery wrapped document.
+ * @param {object} $log window.console or an object with the same interface.
+ * @param {object} $sniffer $sniffer service
+ */
+function Browser(window, document, $log, $sniffer) {
+ var self = this,
+ rawDocument = document[0],
+ location = window.location,
+ history = window.history,
+ setTimeout = window.setTimeout,
+ clearTimeout = window.clearTimeout,
+ pendingDeferIds = {};
+
+ self.isMock = false;
+
+ var outstandingRequestCount = 0;
+ var outstandingRequestCallbacks = [];
+
+ // TODO(vojta): remove this temporary api
+ self.$$completeOutstandingRequest = completeOutstandingRequest;
+ self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
+
+ /**
+ * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
+ * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
+ */
+ function completeOutstandingRequest(fn) {
+ try {
+ fn.apply(null, sliceArgs(arguments, 1));
+ } finally {
+ outstandingRequestCount--;
+ if (outstandingRequestCount === 0) {
+ while (outstandingRequestCallbacks.length) {
+ try {
+ outstandingRequestCallbacks.pop()();
+ } catch (e) {
+ $log.error(e);
+ }
+ }
+ }
+ }
+ }
+
+ function getHash(url) {
+ var index = url.indexOf('#');
+ return index === -1 ? '' : url.substr(index + 1);
+ }
+
+ /**
+ * @private
+ * Note: this method is used only by scenario runner
+ * TODO(vojta): prefix this method with $$ ?
+ * @param {function()} callback Function that will be called when no outstanding request
+ */
+ self.notifyWhenNoOutstandingRequests = function(callback) {
+ // force browser to execute all pollFns - this is needed so that cookies and other pollers fire
+ // at some deterministic time in respect to the test runner's actions. Leaving things up to the
+ // regular poller would result in flaky tests.
+ forEach(pollFns, function(pollFn) { pollFn(); });
+
+ if (outstandingRequestCount === 0) {
+ callback();
+ } else {
+ outstandingRequestCallbacks.push(callback);
+ }
+ };
+
+ //////////////////////////////////////////////////////////////
+ // Poll Watcher API
+ //////////////////////////////////////////////////////////////
+ var pollFns = [],
+ pollTimeout;
+
+ /**
+ * @name $browser#addPollFn
+ *
+ * @param {function()} fn Poll function to add
+ *
+ * @description
+ * Adds a function to the list of functions that poller periodically executes,
+ * and starts polling if not started yet.
+ *
+ * @returns {function()} the added function
+ */
+ self.addPollFn = function(fn) {
+ if (isUndefined(pollTimeout)) startPoller(100, setTimeout);
+ pollFns.push(fn);
+ return fn;
+ };
+
+ /**
+ * @param {number} interval How often should browser call poll functions (ms)
+ * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.
+ *
+ * @description
+ * Configures the poller to run in the specified intervals, using the specified
+ * setTimeout fn and kicks it off.
+ */
+ function startPoller(interval, setTimeout) {
+ (function check() {
+ forEach(pollFns, function(pollFn) { pollFn(); });
+ pollTimeout = setTimeout(check, interval);
+ })();
+ }
+
+ //////////////////////////////////////////////////////////////
+ // URL API
+ //////////////////////////////////////////////////////////////
+
+ var cachedState, lastHistoryState,
+ lastBrowserUrl = location.href,
+ baseElement = document.find('base'),
+ reloadLocation = null;
+
+ cacheState();
+ lastHistoryState = cachedState;
+
+ /**
+ * @name $browser#url
+ *
+ * @description
+ * GETTER:
+ * Without any argument, this method just returns current value of location.href.
+ *
+ * SETTER:
+ * With at least one argument, this method sets url to new value.
+ * If html5 history api supported, pushState/replaceState is used, otherwise
+ * location.href/location.replace is used.
+ * Returns its own instance to allow chaining
+ *
+ * NOTE: this api is intended for use only by the $location service. Please use the
+ * {@link ng.$location $location service} to change url.
+ *
+ * @param {string} url New url (when used as setter)
+ * @param {boolean=} replace Should new url replace current history record?
+ * @param {object=} state object to use with pushState/replaceState
+ */
+ self.url = function(url, replace, state) {
+ // In modern browsers `history.state` is `null` by default; treating it separately
+ // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
+ // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
+ if (isUndefined(state)) {
+ state = null;
+ }
+
+ // Android Browser BFCache causes location, history reference to become stale.
+ if (location !== window.location) location = window.location;
+ if (history !== window.history) history = window.history;
+
+ // setter
+ if (url) {
+ var sameState = lastHistoryState === state;
+
+ // Don't change anything if previous and current URLs and states match. This also prevents
+ // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
+ // See https://github.com/angular/angular.js/commit/ffb2701
+ if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
+ return self;
+ }
+ var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
+ lastBrowserUrl = url;
+ lastHistoryState = state;
+ // Don't use history API if only the hash changed
+ // due to a bug in IE10/IE11 which leads
+ // to not firing a `hashchange` nor `popstate` event
+ // in some cases (see #9143).
+ if ($sniffer.history && (!sameBase || !sameState)) {
+ history[replace ? 'replaceState' : 'pushState'](state, '', url);
+ cacheState();
+ // Do the assignment again so that those two variables are referentially identical.
+ lastHistoryState = cachedState;
+ } else {
+ if (!sameBase) {
+ reloadLocation = url;
+ }
+ if (replace) {
+ location.replace(url);
+ } else if (!sameBase) {
+ location.href = url;
+ } else {
+ location.hash = getHash(url);
+ }
+ }
+ return self;
+ // getter
+ } else {
+ // - reloadLocation is needed as browsers don't allow to read out
+ // the new location.href if a reload happened.
+ // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
+ return reloadLocation || location.href.replace(/%27/g,"'");
+ }
+ };
+
+ /**
+ * @name $browser#state
+ *
+ * @description
+ * This method is a getter.
+ *
+ * Return history.state or null if history.state is undefined.
+ *
+ * @returns {object} state
+ */
+ self.state = function() {
+ return cachedState;
+ };
+
+ var urlChangeListeners = [],
+ urlChangeInit = false;
+
+ function cacheStateAndFireUrlChange() {
+ cacheState();
+ fireUrlChange();
+ }
+
+ // This variable should be used *only* inside the cacheState function.
+ var lastCachedState = null;
+ function cacheState() {
+ // This should be the only place in $browser where `history.state` is read.
+ cachedState = window.history.state;
+ cachedState = isUndefined(cachedState) ? null : cachedState;
+
+ // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
+ if (equals(cachedState, lastCachedState)) {
+ cachedState = lastCachedState;
+ }
+ lastCachedState = cachedState;
+ }
+
+ function fireUrlChange() {
+ if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
+ return;
+ }
+
+ lastBrowserUrl = self.url();
+ lastHistoryState = cachedState;
+ forEach(urlChangeListeners, function(listener) {
+ listener(self.url(), cachedState);
+ });
+ }
+
+ /**
+ * @name $browser#onUrlChange
+ *
+ * @description
+ * Register callback function that will be called, when url changes.
+ *
+ * It's only called when the url is changed from outside of angular:
+ * - user types different url into address bar
+ * - user clicks on history (forward/back) button
+ * - user clicks on a link
+ *
+ * It's not called when url is changed by $browser.url() method
+ *
+ * The listener gets called with new url as parameter.
+ *
+ * NOTE: this api is intended for use only by the $location service. Please use the
+ * {@link ng.$location $location service} to monitor url changes in angular apps.
+ *
+ * @param {function(string)} listener Listener function to be called when url changes.
+ * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
+ */
+ self.onUrlChange = function(callback) {
+ // TODO(vojta): refactor to use node's syntax for events
+ if (!urlChangeInit) {
+ // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
+ // don't fire popstate when user change the address bar and don't fire hashchange when url
+ // changed by push/replaceState
+
+ // html5 history api - popstate event
+ if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
+ // hashchange event
+ jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
+
+ urlChangeInit = true;
+ }
+
+ urlChangeListeners.push(callback);
+ return callback;
+ };
+
+ /**
+ * Checks whether the url has changed outside of Angular.
+ * Needs to be exported to be able to check for changes that have been done in sync,
+ * as hashchange/popstate events fire in async.
+ */
+ self.$$checkUrlChange = fireUrlChange;
+
+ //////////////////////////////////////////////////////////////
+ // Misc API
+ //////////////////////////////////////////////////////////////
+
+ /**
+ * @name $browser#baseHref
+ *
+ * @description
+ * Returns current <base href>
+ * (always relative - without domain)
+ *
+ * @returns {string} The current base href
+ */
+ self.baseHref = function() {
+ var href = baseElement.attr('href');
+ return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
+ };
+
+ //////////////////////////////////////////////////////////////
+ // Cookies API
+ //////////////////////////////////////////////////////////////
+ var lastCookies = {};
+ var lastCookieString = '';
+ var cookiePath = self.baseHref();
+
+ function safeDecodeURIComponent(str) {
+ try {
+ return decodeURIComponent(str);
+ } catch (e) {
+ return str;
+ }
+ }
+
+ /**
+ * @name $browser#cookies
+ *
+ * @param {string=} name Cookie name
+ * @param {string=} value Cookie value
+ *
+ * @description
+ * The cookies method provides a 'private' low level access to browser cookies.
+ * It is not meant to be used directly, use the $cookie service instead.
+ *
+ * The return values vary depending on the arguments that the method was called with as follows:
+ *
+ * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
+ * it
+ * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
+ * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
+ * way)
+ *
+ * @returns {Object} Hash of all cookies (if called without any parameter)
+ */
+ self.cookies = function(name, value) {
+ var cookieLength, cookieArray, cookie, i, index;
+
+ if (name) {
+ if (value === undefined) {
+ rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath +
+ ";expires=Thu, 01 Jan 1970 00:00:00 GMT";
+ } else {
+ if (isString(value)) {
+ cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
+ ';path=' + cookiePath).length + 1;
+
+ // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
+ // - 300 cookies
+ // - 20 cookies per unique domain
+ // - 4096 bytes per cookie
+ if (cookieLength > 4096) {
+ $log.warn("Cookie '" + name +
+ "' possibly not set or overflowed because it was too large (" +
+ cookieLength + " > 4096 bytes)!");
+ }
+ }
+ }
+ } else {
+ if (rawDocument.cookie !== lastCookieString) {
+ lastCookieString = rawDocument.cookie;
+ cookieArray = lastCookieString.split("; ");
+ lastCookies = {};
+
+ for (i = 0; i < cookieArray.length; i++) {
+ cookie = cookieArray[i];
+ index = cookie.indexOf('=');
+ if (index > 0) { //ignore nameless cookies
+ name = safeDecodeURIComponent(cookie.substring(0, index));
+ // the first value that is seen for a cookie is the most
+ // specific one. values for the same cookie name that
+ // follow are for less specific paths.
+ if (lastCookies[name] === undefined) {
+ lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
+ }
+ }
+ }
+ }
+ return lastCookies;
+ }
+ };
+
+
+ /**
+ * @name $browser#defer
+ * @param {function()} fn A function, who's execution should be deferred.
+ * @param {number=} [delay=0] of milliseconds to defer the function execution.
+ * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
+ *
+ * @description
+ * Executes a fn asynchronously via `setTimeout(fn, delay)`.
+ *
+ * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
+ * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
+ * via `$browser.defer.flush()`.
+ *
+ */
+ self.defer = function(fn, delay) {
+ var timeoutId;
+ outstandingRequestCount++;
+ timeoutId = setTimeout(function() {
+ delete pendingDeferIds[timeoutId];
+ completeOutstandingRequest(fn);
+ }, delay || 0);
+ pendingDeferIds[timeoutId] = true;
+ return timeoutId;
+ };
+
+
+ /**
+ * @name $browser#defer.cancel
+ *
+ * @description
+ * Cancels a deferred task identified with `deferId`.
+ *
+ * @param {*} deferId Token returned by the `$browser.defer` function.
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+ * canceled.
+ */
+ self.defer.cancel = function(deferId) {
+ if (pendingDeferIds[deferId]) {
+ delete pendingDeferIds[deferId];
+ clearTimeout(deferId);
+ completeOutstandingRequest(noop);
+ return true;
+ }
+ return false;
+ };
+
+}
+
+function $BrowserProvider() {
+ this.$get = ['$window', '$log', '$sniffer', '$document',
+ function($window, $log, $sniffer, $document) {
+ return new Browser($window, $document, $log, $sniffer);
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $cacheFactory
+ *
+ * @description
+ * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
+ * them.
+ *
+ * ```js
+ *
+ * var cache = $cacheFactory('cacheId');
+ * expect($cacheFactory.get('cacheId')).toBe(cache);
+ * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ * cache.put("key", "value");
+ * cache.put("another key", "another value");
+ *
+ * // We've specified no options on creation
+ * expect(cache.info()).toEqual({id: 'cacheId', size: 2});
+ *
+ * ```
+ *
+ *
+ * @param {string} cacheId Name or id of the newly created cache.
+ * @param {object=} options Options object that specifies the cache behavior. Properties:
+ *
+ * - `{number=}` `capacity` — turns the cache into LRU cache.
+ *
+ * @returns {object} Newly created cache object with the following set of methods:
+ *
+ * - `{object}` `info()` — Returns id, size, and options of cache.
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
+ * it.
+ * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
+ * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
+ * - `{void}` `removeAll()` — Removes all cached values.
+ * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
+ *
+ * @example
+ <example module="cacheExampleApp">
+ <file name="index.html">
+ <div ng-controller="CacheController">
+ <input ng-model="newCacheKey" placeholder="Key">
+ <input ng-model="newCacheValue" placeholder="Value">
+ <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
+
+ <p ng-if="keys.length">Cached Values</p>
+ <div ng-repeat="key in keys">
+ <span ng-bind="key"></span>
+ <span>: </span>
+ <b ng-bind="cache.get(key)"></b>
+ </div>
+
+ <p>Cache Info</p>
+ <div ng-repeat="(key, value) in cache.info()">
+ <span ng-bind="key"></span>
+ <span>: </span>
+ <b ng-bind="value"></b>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('cacheExampleApp', []).
+ controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
+ $scope.keys = [];
+ $scope.cache = $cacheFactory('cacheId');
+ $scope.put = function(key, value) {
+ if ($scope.cache.get(key) === undefined) {
+ $scope.keys.push(key);
+ }
+ $scope.cache.put(key, value === undefined ? null : value);
+ };
+ }]);
+ </file>
+ <file name="style.css">
+ p {
+ margin: 10px 0 3px;
+ }
+ </file>
+ </example>
+ */
+function $CacheFactoryProvider() {
+
+ this.$get = function() {
+ var caches = {};
+
+ function cacheFactory(cacheId, options) {
+ if (cacheId in caches) {
+ throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
+ }
+
+ var size = 0,
+ stats = extend({}, options, {id: cacheId}),
+ data = {},
+ capacity = (options && options.capacity) || Number.MAX_VALUE,
+ lruHash = {},
+ freshEnd = null,
+ staleEnd = null;
+
+ /**
+ * @ngdoc type
+ * @name $cacheFactory.Cache
+ *
+ * @description
+ * A cache object used to store and retrieve data, primarily used by
+ * {@link $http $http} and the {@link ng.directive:script script} directive to cache
+ * templates and other data.
+ *
+ * ```js
+ * angular.module('superCache')
+ * .factory('superCache', ['$cacheFactory', function($cacheFactory) {
+ * return $cacheFactory('super-cache');
+ * }]);
+ * ```
+ *
+ * Example test:
+ *
+ * ```js
+ * it('should behave like a cache', inject(function(superCache) {
+ * superCache.put('key', 'value');
+ * superCache.put('another key', 'another value');
+ *
+ * expect(superCache.info()).toEqual({
+ * id: 'super-cache',
+ * size: 2
+ * });
+ *
+ * superCache.remove('another key');
+ * expect(superCache.get('another key')).toBeUndefined();
+ *
+ * superCache.removeAll();
+ * expect(superCache.info()).toEqual({
+ * id: 'super-cache',
+ * size: 0
+ * });
+ * }));
+ * ```
+ */
+ return caches[cacheId] = {
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#put
+ * @kind function
+ *
+ * @description
+ * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
+ * retrieved later, and incrementing the size of the cache if the key was not already
+ * present in the cache. If behaving like an LRU cache, it will also remove stale
+ * entries from the set.
+ *
+ * It will not insert undefined values into the cache.
+ *
+ * @param {string} key the key under which the cached data is stored.
+ * @param {*} value the value to store alongside the key. If it is undefined, the key
+ * will not be stored.
+ * @returns {*} the value stored.
+ */
+ put: function(key, value) {
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
+
+ refresh(lruEntry);
+ }
+
+ if (isUndefined(value)) return;
+ if (!(key in data)) size++;
+ data[key] = value;
+
+ if (size > capacity) {
+ this.remove(staleEnd.key);
+ }
+
+ return value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#get
+ * @kind function
+ *
+ * @description
+ * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
+ *
+ * @param {string} key the key of the data to be retrieved
+ * @returns {*} the value stored.
+ */
+ get: function(key) {
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key];
+
+ if (!lruEntry) return;
+
+ refresh(lruEntry);
+ }
+
+ return data[key];
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#remove
+ * @kind function
+ *
+ * @description
+ * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
+ *
+ * @param {string} key the key of the entry to be removed
+ */
+ remove: function(key) {
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key];
+
+ if (!lruEntry) return;
+
+ if (lruEntry == freshEnd) freshEnd = lruEntry.p;
+ if (lruEntry == staleEnd) staleEnd = lruEntry.n;
+ link(lruEntry.n,lruEntry.p);
+
+ delete lruHash[key];
+ }
+
+ delete data[key];
+ size--;
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#removeAll
+ * @kind function
+ *
+ * @description
+ * Clears the cache object of any entries.
+ */
+ removeAll: function() {
+ data = {};
+ size = 0;
+ lruHash = {};
+ freshEnd = staleEnd = null;
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#destroy
+ * @kind function
+ *
+ * @description
+ * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
+ * removing it from the {@link $cacheFactory $cacheFactory} set.
+ */
+ destroy: function() {
+ data = null;
+ stats = null;
+ lruHash = null;
+ delete caches[cacheId];
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#info
+ * @kind function
+ *
+ * @description
+ * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
+ *
+ * @returns {object} an object with the following properties:
+ * <ul>
+ * <li>**id**: the id of the cache instance</li>
+ * <li>**size**: the number of entries kept in the cache instance</li>
+ * <li>**...**: any additional properties from the options object when creating the
+ * cache.</li>
+ * </ul>
+ */
+ info: function() {
+ return extend({}, stats, {size: size});
+ }
+ };
+
+
+ /**
+ * makes the `entry` the freshEnd of the LRU linked list
+ */
+ function refresh(entry) {
+ if (entry != freshEnd) {
+ if (!staleEnd) {
+ staleEnd = entry;
+ } else if (staleEnd == entry) {
+ staleEnd = entry.n;
+ }
+
+ link(entry.n, entry.p);
+ link(entry, freshEnd);
+ freshEnd = entry;
+ freshEnd.n = null;
+ }
+ }
+
+
+ /**
+ * bidirectionally links two entries of the LRU linked list
+ */
+ function link(nextEntry, prevEntry) {
+ if (nextEntry != prevEntry) {
+ if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
+ if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
+ }
+ }
+ }
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory#info
+ *
+ * @description
+ * Get information about all the caches that have been created
+ *
+ * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
+ */
+ cacheFactory.info = function() {
+ var info = {};
+ forEach(caches, function(cache, cacheId) {
+ info[cacheId] = cache.info();
+ });
+ return info;
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory#get
+ *
+ * @description
+ * Get access to a cache object by the `cacheId` used when it was created.
+ *
+ * @param {string} cacheId Name or id of a cache to access.
+ * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
+ */
+ cacheFactory.get = function(cacheId) {
+ return caches[cacheId];
+ };
+
+
+ return cacheFactory;
+ };
+}
+
+/**
+ * @ngdoc service
+ * @name $templateCache
+ *
+ * @description
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You
+ * can load templates directly into the cache in a `script` tag, or by consuming the
+ * `$templateCache` service directly.
+ *
+ * Adding via the `script` tag:
+ *
+ * ```html
+ * <script type="text/ng-template" id="templateId.html">
+ * <p>This is the content of the template</p>
+ * </script>
+ * ```
+ *
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of
+ * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
+ * element with ng-app attribute), otherwise the template will be ignored.
+ *
+ * Adding via the $templateCache service:
+ *
+ * ```js
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ * $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * ```
+ *
+ * To retrieve the template later, simply use it in your HTML:
+ * ```html
+ * <div ng-include=" 'templateId.html' "></div>
+ * ```
+ *
+ * or get it via Javascript:
+ * ```js
+ * $templateCache.get('templateId.html')
+ * ```
+ *
+ * See {@link ng.$cacheFactory $cacheFactory}.
+ *
+ */
+function $TemplateCacheProvider() {
+ this.$get = ['$cacheFactory', function($cacheFactory) {
+ return $cacheFactory('templates');
+ }];
+}
+
+/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
+ *
+ * DOM-related variables:
+ *
+ * - "node" - DOM Node
+ * - "element" - DOM Element or Node
+ * - "$node" or "$element" - jqLite-wrapped node or element
+ *
+ *
+ * Compiler related stuff:
+ *
+ * - "linkFn" - linking fn of a single directive
+ * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
+ * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
+ * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $compile
+ * @kind function
+ *
+ * @description
+ * Compiles an HTML string or DOM into a template and produces a template function, which
+ * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
+ *
+ * The compilation is a process of walking the DOM tree and matching DOM elements to
+ * {@link ng.$compileProvider#directive directives}.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** This document is an in-depth reference of all directive options.
+ * For a gentle introduction to directives with examples of common use cases,
+ * see the {@link guide/directive directive guide}.
+ * </div>
+ *
+ * ## Comprehensive Directive API
+ *
+ * There are many different options for a directive.
+ *
+ * The difference resides in the return value of the factory function.
+ * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
+ * or just the `postLink` function (all other properties will have the default values).
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's recommended to use the "directive definition object" form.
+ * </div>
+ *
+ * Here's an example directive declared with a Directive Definition Object:
+ *
+ * ```js
+ * var myModule = angular.module(...);
+ *
+ * myModule.directive('directiveName', function factory(injectables) {
+ * var directiveDefinitionObject = {
+ * priority: 0,
+ * template: '<div></div>', // or // function(tElement, tAttrs) { ... },
+ * // or
+ * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
+ * transclude: false,
+ * restrict: 'A',
+ * templateNamespace: 'html',
+ * scope: false,
+ * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
+ * controllerAs: 'stringAlias',
+ * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
+ * compile: function compile(tElement, tAttrs, transclude) {
+ * return {
+ * pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ * post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ * }
+ * // or
+ * // return function postLink( ... ) { ... }
+ * },
+ * // or
+ * // link: {
+ * // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ * // post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ * // }
+ * // or
+ * // link: function postLink( ... ) { ... }
+ * };
+ * return directiveDefinitionObject;
+ * });
+ * ```
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Any unspecified options will use the default value. You can see the default values below.
+ * </div>
+ *
+ * Therefore the above can be simplified as:
+ *
+ * ```js
+ * var myModule = angular.module(...);
+ *
+ * myModule.directive('directiveName', function factory(injectables) {
+ * var directiveDefinitionObject = {
+ * link: function postLink(scope, iElement, iAttrs) { ... }
+ * };
+ * return directiveDefinitionObject;
+ * // or
+ * // return function postLink(scope, iElement, iAttrs) { ... }
+ * });
+ * ```
+ *
+ *
+ *
+ * ### Directive Definition Object
+ *
+ * The directive definition object provides instructions to the {@link ng.$compile
+ * compiler}. The attributes are:
+ *
+ * #### `multiElement`
+ * When this property is set to true, the HTML compiler will collect DOM nodes between
+ * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
+ * together as the directive elements. It is recommended that this feature be used on directives
+ * which are not strictly behavioural (such as {@link ngClick}), and which
+ * do not manipulate or replace child nodes (such as {@link ngInclude}).
+ *
+ * #### `priority`
+ * When there are multiple directives defined on a single DOM element, sometimes it
+ * is necessary to specify the order in which the directives are applied. The `priority` is used
+ * to sort the directives before their `compile` functions get called. Priority is defined as a
+ * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
+ * are also run in priority order, but post-link functions are run in reverse order. The order
+ * of directives with the same priority is undefined. The default priority is `0`.
+ *
+ * #### `terminal`
+ * If set to true then the current `priority` will be the last set of directives
+ * which will execute (any directives at the current priority will still execute
+ * as the order of execution on same `priority` is undefined). Note that expressions
+ * and other directives used in the directive's template will also be excluded from execution.
+ *
+ * #### `scope`
+ * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
+ * same element request a new scope, only one new scope is created. The new scope rule does not
+ * apply for the root of the template since the root of the template always gets a new scope.
+ *
+ * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
+ * normal scope in that it does not prototypically inherit from the parent scope. This is useful
+ * when creating reusable components, which should not accidentally read or modify data in the
+ * parent scope.
+ *
+ * The 'isolate' scope takes an object hash which defines a set of local scope properties
+ * derived from the parent scope. These local properties are useful for aliasing values for
+ * templates. Locals definition is a hash of local scope property to its source:
+ *
+ * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
+ * always a string since DOM attributes are strings. If no `attr` name is specified then the
+ * attribute name is assumed to be the same as the local name.
+ * Given `<widget my-attr="hello {{name}}">` and widget definition
+ * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
+ * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
+ * `localName` property on the widget scope. The `name` is read from the parent scope (not
+ * component scope).
+ *
+ * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
+ * parent scope property of name defined via the value of the `attr` attribute. If no `attr`
+ * name is specified then the attribute name is assumed to be the same as the local name.
+ * Given `<widget my-attr="parentModel">` and widget definition of
+ * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
+ * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
+ * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
+ * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
+ * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
+ * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
+ * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
+ *
+ * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
+ * If no `attr` name is specified then the attribute name is assumed to be the same as the
+ * local name. Given `<widget my-attr="count = count + value">` and widget definition of
+ * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
+ * a function wrapper for the `count = count + value` expression. Often it's desirable to
+ * pass data from the isolated scope via an expression to the parent scope, this can be
+ * done by passing a map of local variable names and values into the expression wrapper fn.
+ * For example, if the expression is `increment(amount)` then we can specify the amount value
+ * by calling the `localFn` as `localFn({amount: 22})`.
+ *
+ *
+ * #### `bindToController`
+ * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
+ * allow a component to have its properties bound to the controller, rather than to scope. When the controller
+ * is instantiated, the initial values of the isolate scope bindings are already available.
+ *
+ * #### `controller`
+ * Controller constructor function. The controller is instantiated before the
+ * pre-linking phase and it is shared with other directives (see
+ * `require` attribute). This allows the directives to communicate with each other and augment
+ * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
+ *
+ * * `$scope` - Current scope associated with the element
+ * * `$element` - Current element
+ * * `$attrs` - Current attributes object for the element
+ * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
+ * `function([scope], cloneLinkingFn, futureParentElement)`.
+ * * `scope`: optional argument to override the scope.
+ * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
+ * * `futureParentElement`:
+ * * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
+ * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
+ * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
+ * and when the `cloneLinkinFn` is passed,
+ * as those elements need to created and cloned in a special way when they are defined outside their
+ * usual containers (e.g. like `<svg>`).
+ * * See also the `directive.templateNamespace` property.
+ *
+ *
+ * #### `require`
+ * Require another directive and inject its controller as the fourth argument to the linking function. The
+ * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
+ * injected argument will be an array in corresponding order. If no such directive can be
+ * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:
+ *
+ * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
+ * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
+ * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
+ * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
+ * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
+ * `null` to the `link` fn if not found.
+ * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
+ * `null` to the `link` fn if not found.
+ *
+ *
+ * #### `controllerAs`
+ * Controller alias at the directive scope. An alias for the controller so it
+ * can be referenced at the directive template. The directive needs to define a scope for this
+ * configuration to be used. Useful in the case when directive is used as component.
+ *
+ *
+ * #### `restrict`
+ * String of subset of `EACM` which restricts the directive to a specific directive
+ * declaration style. If omitted, the defaults (elements and attributes) are used.
+ *
+ * * `E` - Element name (default): `<my-directive></my-directive>`
+ * * `A` - Attribute (default): `<div my-directive="exp"></div>`
+ * * `C` - Class: `<div class="my-directive: exp;"></div>`
+ * * `M` - Comment: `<!-- directive: my-directive exp -->`
+ *
+ *
+ * #### `templateNamespace`
+ * String representing the document type used by the markup in the template.
+ * AngularJS needs this information as those elements need to be created and cloned
+ * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
+ *
+ * * `html` - All root nodes in the template are HTML. Root nodes may also be
+ * top-level elements such as `<svg>` or `<math>`.
+ * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
+ * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
+ *
+ * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
+ *
+ * #### `template`
+ * HTML markup that may:
+ * * Replace the contents of the directive's element (default).
+ * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
+ * * Wrap the contents of the directive's element (if `transclude` is true).
+ *
+ * Value may be:
+ *
+ * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
+ * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
+ * function api below) and returns a string value.
+ *
+ *
+ * #### `templateUrl`
+ * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
+ *
+ * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
+ * for later when the template has been resolved. In the meantime it will continue to compile and link
+ * sibling and parent elements as though this element had not contained any directives.
+ *
+ * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
+ * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
+ * case when only one deeply nested directive has `templateUrl`.
+ *
+ * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
+ *
+ * You can specify `templateUrl` as a string representing the URL or as a function which takes two
+ * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
+ * a string value representing the url. In either case, the template URL is passed through {@link
+ * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
+ *
+ *
+ * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
+ * specify what the template should replace. Defaults to `false`.
+ *
+ * * `true` - the template will replace the directive's element.
+ * * `false` - the template will replace the contents of the directive's element.
+ *
+ * The replacement process migrates all of the attributes / classes from the old element to the new
+ * one. See the {@link guide/directive#template-expanding-directive
+ * Directives Guide} for an example.
+ *
+ * There are very few scenarios where element replacement is required for the application function,
+ * the main one being reusable custom components that are used within SVG contexts
+ * (because SVG doesn't work with custom elements in the DOM tree).
+ *
+ * #### `transclude`
+ * Extract the contents of the element where the directive appears and make it available to the directive.
+ * The contents are compiled and provided to the directive as a **transclusion function**. See the
+ * {@link $compile#transclusion Transclusion} section below.
+ *
+ * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
+ * directive's element or the entire element:
+ *
+ * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
+ * * `'element'` - transclude the whole of the directive's element including any directives on this
+ * element that defined at a lower priority than this directive. When used, the `template`
+ * property is ignored.
+ *
+ *
+ * #### `compile`
+ *
+ * ```js
+ * function compile(tElement, tAttrs, transclude) { ... }
+ * ```
+ *
+ * The compile function deals with transforming the template DOM. Since most directives do not do
+ * template transformation, it is not used often. The compile function takes the following arguments:
+ *
+ * * `tElement` - template element - The element where the directive has been declared. It is
+ * safe to do template transformation on the element and child elements only.
+ *
+ * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
+ * between all directive compile functions.
+ *
+ * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
+ *
+ * <div class="alert alert-warning">
+ * **Note:** The template instance and the link instance may be different objects if the template has
+ * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
+ * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
+ * should be done in a linking function rather than in a compile function.
+ * </div>
+
+ * <div class="alert alert-warning">
+ * **Note:** The compile function cannot handle directives that recursively use themselves in their
+ * own templates or compile functions. Compiling these directives results in an infinite loop and a
+ * stack overflow errors.
+ *
+ * This can be avoided by manually using $compile in the postLink function to imperatively compile
+ * a directive's template instead of relying on automatic template compilation via `template` or
+ * `templateUrl` declaration or manual compilation inside the compile function.
+ * </div>
+ *
+ * <div class="alert alert-error">
+ * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
+ * e.g. does not know about the right outer scope. Please use the transclude function that is passed
+ * to the link function instead.
+ * </div>
+
+ * A compile function can have a return value which can be either a function or an object.
+ *
+ * * returning a (post-link) function - is equivalent to registering the linking function via the
+ * `link` property of the config object when the compile function is empty.
+ *
+ * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
+ * control when a linking function should be called during the linking phase. See info about
+ * pre-linking and post-linking functions below.
+ *
+ *
+ * #### `link`
+ * This property is used only if the `compile` property is not defined.
+ *
+ * ```js
+ * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
+ * ```
+ *
+ * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
+ * executed after the template has been cloned. This is where most of the directive logic will be
+ * put.
+ *
+ * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
+ * directive for registering {@link ng.$rootScope.Scope#$watch watches}.
+ *
+ * * `iElement` - instance element - The element where the directive is to be used. It is safe to
+ * manipulate the children of the element only in `postLink` function since the children have
+ * already been linked.
+ *
+ * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
+ * between all directive linking functions.
+ *
+ * * `controller` - a controller instance - A controller instance if at least one directive on the
+ * element defines a controller. The controller is shared among all the directives, which allows
+ * the directives to use the controllers as a communication channel.
+ *
+ * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
+ * This is the same as the `$transclude`
+ * parameter of directive controllers, see there for details.
+ * `function([scope], cloneLinkingFn, futureParentElement)`.
+ *
+ * #### Pre-linking function
+ *
+ * Executed before the child elements are linked. Not safe to do DOM transformation since the
+ * compiler linking function will fail to locate the correct elements for linking.
+ *
+ * #### Post-linking function
+ *
+ * Executed after the child elements are linked.
+ *
+ * Note that child elements that contain `templateUrl` directives will not have been compiled
+ * and linked since they are waiting for their template to load asynchronously and their own
+ * compilation and linking has been suspended until that occurs.
+ *
+ * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
+ * for their async templates to be resolved.
+ *
+ *
+ * ### Transclusion
+ *
+ * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and
+ * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
+ * scope from where they were taken.
+ *
+ * Transclusion is used (often with {@link ngTransclude}) to insert the
+ * original contents of a directive's element into a specified place in the template of the directive.
+ * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
+ * content has access to the properties on the scope from which it was taken, even if the directive
+ * has isolated scope.
+ * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
+ *
+ * This makes it possible for the widget to have private state for its template, while the transcluded
+ * content has access to its originating scope.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** When testing an element transclude directive you must not place the directive at the root of the
+ * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
+ * Testing Transclusion Directives}.
+ * </div>
+ *
+ * #### Transclusion Functions
+ *
+ * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
+ * function** to the directive's `link` function and `controller`. This transclusion function is a special
+ * **linking function** that will return the compiled contents linked to a new transclusion scope.
+ *
+ * <div class="alert alert-info">
+ * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
+ * ngTransclude will deal with it for us.
+ * </div>
+ *
+ * If you want to manually control the insertion and removal of the transcluded content in your directive
+ * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
+ * object that contains the compiled DOM, which is linked to the correct transclusion scope.
+ *
+ * When you call a transclusion function you can pass in a **clone attach function**. This function accepts
+ * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
+ * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
+ * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
+ * </div>
+ *
+ * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
+ * attach function**:
+ *
+ * ```js
+ * var transcludedContent, transclusionScope;
+ *
+ * $transclude(function(clone, scope) {
+ * element.append(clone);
+ * transcludedContent = clone;
+ * transclusionScope = scope;
+ * });
+ * ```
+ *
+ * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
+ * associated transclusion scope:
+ *
+ * ```js
+ * transcludedContent.remove();
+ * transclusionScope.$destroy();
+ * ```
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
+ * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it),
+ * then you are also responsible for calling `$destroy` on the transclusion scope.
+ * </div>
+ *
+ * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
+ * automatically destroy their transluded clones as necessary so you do not need to worry about this if
+ * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
+ *
+ *
+ * #### Transclusion Scopes
+ *
+ * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
+ * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
+ * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
+ * was taken.
+ *
+ * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
+ * like this:
+ *
+ * ```html
+ * <div ng-app>
+ * <div isolate>
+ * <div transclusion>
+ * </div>
+ * </div>
+ * </div>
+ * ```
+ *
+ * The `$parent` scope hierarchy will look like this:
+ *
+ * ```
+ * - $rootScope
+ * - isolate
+ * - transclusion
+ * ```
+ *
+ * but the scopes will inherit prototypically from different scopes to their `$parent`.
+ *
+ * ```
+ * - $rootScope
+ * - transclusion
+ * - isolate
+ * ```
+ *
+ *
+ * ### Attributes
+ *
+ * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
+ * `link()` or `compile()` functions. It has a variety of uses.
+ *
+ * accessing *Normalized attribute names:*
+ * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
+ * the attributes object allows for normalized access to
+ * the attributes.
+ *
+ * * *Directive inter-communication:* All directives share the same instance of the attributes
+ * object which allows the directives to use the attributes object as inter directive
+ * communication.
+ *
+ * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
+ * allowing other directives to read the interpolated value.
+ *
+ * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
+ * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
+ * the only way to easily get the actual value because during the linking phase the interpolation
+ * hasn't been evaluated yet and so the value is at this time set to `undefined`.
+ *
+ * ```js
+ * function linkingFn(scope, elm, attrs, ctrl) {
+ * // get the attribute value
+ * console.log(attrs.ngModel);
+ *
+ * // change the attribute
+ * attrs.$set('ngModel', 'new value');
+ *
+ * // observe changes to interpolated attribute
+ * attrs.$observe('ngModel', function(value) {
+ * console.log('ngModel has changed value to ' + value);
+ * });
+ * }
+ * ```
+ *
+ * ## Example
+ *
+ * <div class="alert alert-warning">
+ * **Note**: Typically directives are registered with `module.directive`. The example below is
+ * to illustrate how `$compile` works.
+ * </div>
+ *
+ <example module="compileExample">
+ <file name="index.html">
+ <script>
+ angular.module('compileExample', [], function($compileProvider) {
+ // configure new 'compile' directive by passing a directive
+ // factory function. The factory function injects the '$compile'
+ $compileProvider.directive('compile', function($compile) {
+ // directive factory creates a link function
+ return function(scope, element, attrs) {
+ scope.$watch(
+ function(scope) {
+ // watch the 'compile' expression for changes
+ return scope.$eval(attrs.compile);
+ },
+ function(value) {
+ // when the 'compile' expression changes
+ // assign it into the current DOM
+ element.html(value);
+
+ // compile the new DOM and link it to the current
+ // scope.
+ // NOTE: we only compile .childNodes so that
+ // we don't get into infinite loop compiling ourselves
+ $compile(element.contents())(scope);
+ }
+ );
+ };
+ });
+ })
+ .controller('GreeterController', ['$scope', function($scope) {
+ $scope.name = 'Angular';
+ $scope.html = 'Hello {{name}}';
+ }]);
+ </script>
+ <div ng-controller="GreeterController">
+ <input ng-model="name"> <br>
+ <textarea ng-model="html"></textarea> <br>
+ <div compile="html"></div>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should auto compile', function() {
+ var textarea = $('textarea');
+ var output = $('div[compile]');
+ // The initial state reads 'Hello Angular'.
+ expect(output.getText()).toBe('Hello Angular');
+ textarea.clear();
+ textarea.sendKeys('{{name}}!');
+ expect(output.getText()).toBe('Angular!');
+ });
+ </file>
+ </example>
+
+ *
+ *
+ * @param {string|DOMElement} element Element or HTML string to compile into a template function.
+ * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
+ *
+ * <div class="alert alert-error">
+ * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
+ * e.g. will not use the right outer scope. Please pass the transclude function as a
+ * `parentBoundTranscludeFn` to the link function instead.
+ * </div>
+ *
+ * @param {number} maxPriority only apply directives lower than given priority (Only effects the
+ * root element(s), not their children)
+ * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
+ * (a DOM element/tree) to a scope. Where:
+ *
+ * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
+ * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
+ * `template` and call the `cloneAttachFn` function allowing the caller to attach the
+ * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
+ * called as: <br> `cloneAttachFn(clonedElement, scope)` where:
+ *
+ * * `clonedElement` - is a clone of the original `element` passed into the compiler.
+ * * `scope` - is the current scope with which the linking function is working with.
+ *
+ * * `options` - An optional object hash with linking options. If `options` is provided, then the following
+ * keys may be used to control linking behavior:
+ *
+ * * `parentBoundTranscludeFn` - the transclude function made available to
+ * directives; if given, it will be passed through to the link functions of
+ * directives found in `element` during compilation.
+ * * `transcludeControllers` - an object hash with keys that map controller names
+ * to controller instances; if given, it will make the controllers
+ * available to directives.
+ * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
+ * the cloned elements; only needed for transcludes that are allowed to contain non html
+ * elements (e.g. SVG elements). See also the directive.controller property.
+ *
+ * Calling the linking function returns the element of the template. It is either the original
+ * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
+ *
+ * After linking the view is not updated until after a call to $digest which typically is done by
+ * Angular automatically.
+ *
+ * If you need access to the bound view, there are two ways to do it:
+ *
+ * - If you are not asking the linking function to clone the template, create the DOM element(s)
+ * before you send them to the compiler and keep this reference around.
+ * ```js
+ * var element = $compile('<p>{{total}}</p>')(scope);
+ * ```
+ *
+ * - if on the other hand, you need the element to be cloned, the view reference from the original
+ * example would not point to the clone, but rather to the original template that was cloned. In
+ * this case, you can access the clone via the cloneAttachFn:
+ * ```js
+ * var templateElement = angular.element('<p>{{total}}</p>'),
+ * scope = ....;
+ *
+ * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
+ * //attach the clone to DOM document at the right place
+ * });
+ *
+ * //now we have reference to the cloned DOM via `clonedElement`
+ * ```
+ *
+ *
+ * For information on how the compiler works, see the
+ * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
+ */
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc provider
+ * @name $compileProvider
+ *
+ * @description
+ */
+$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
+function $CompileProvider($provide, $$sanitizeUriProvider) {
+ var hasDirectives = {},
+ Suffix = 'Directive',
+ COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
+ CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
+ ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
+ REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
+
+ // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
+ // The assumption is that future DOM event attribute names will begin with
+ // 'on' and be composed of only English letters.
+ var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
+
+ function parseIsolateBindings(scope, directiveName) {
+ var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
+
+ var bindings = {};
+
+ forEach(scope, function(definition, scopeName) {
+ var match = definition.match(LOCAL_REGEXP);
+
+ if (!match) {
+ throw $compileMinErr('iscp',
+ "Invalid isolate scope definition for directive '{0}'." +
+ " Definition: {... {1}: '{2}' ...}",
+ directiveName, scopeName, definition);
+ }
+
+ bindings[scopeName] = {
+ mode: match[1][0],
+ collection: match[2] === '*',
+ optional: match[3] === '?',
+ attrName: match[4] || scopeName
+ };
+ });
+
+ return bindings;
+ }
+
+ /**
+ * @ngdoc method
+ * @name $compileProvider#directive
+ * @kind function
+ *
+ * @description
+ * Register a new directive with the compiler.
+ *
+ * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
+ * will match as <code>ng-bind</code>), or an object map of directives where the keys are the
+ * names and the values are the factories.
+ * @param {Function|Array} directiveFactory An injectable directive factory function. See
+ * {@link guide/directive} for more info.
+ * @returns {ng.$compileProvider} Self for chaining.
+ */
+ this.directive = function registerDirective(name, directiveFactory) {
+ assertNotHasOwnProperty(name, 'directive');
+ if (isString(name)) {
+ assertArg(directiveFactory, 'directiveFactory');
+ if (!hasDirectives.hasOwnProperty(name)) {
+ hasDirectives[name] = [];
+ $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
+ function($injector, $exceptionHandler) {
+ var directives = [];
+ forEach(hasDirectives[name], function(directiveFactory, index) {
+ try {
+ var directive = $injector.invoke(directiveFactory);
+ if (isFunction(directive)) {
+ directive = { compile: valueFn(directive) };
+ } else if (!directive.compile && directive.link) {
+ directive.compile = valueFn(directive.link);
+ }
+ directive.priority = directive.priority || 0;
+ directive.index = index;
+ directive.name = directive.name || name;
+ directive.require = directive.require || (directive.controller && directive.name);
+ directive.restrict = directive.restrict || 'EA';
+ if (isObject(directive.scope)) {
+ directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name);
+ }
+ directives.push(directive);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ });
+ return directives;
+ }]);
+ }
+ hasDirectives[name].push(directiveFactory);
+ } else {
+ forEach(name, reverseParams(registerDirective));
+ }
+ return this;
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name $compileProvider#aHrefSanitizationWhitelist
+ * @kind function
+ *
+ * @description
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+ * urls during a[href] sanitization.
+ *
+ * The sanitization is a security measure aimed at preventing XSS attacks via html links.
+ *
+ * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+ * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+ *
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+ * chaining otherwise.
+ */
+ this.aHrefSanitizationWhitelist = function(regexp) {
+ if (isDefined(regexp)) {
+ $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
+ return this;
+ } else {
+ return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
+ }
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name $compileProvider#imgSrcSanitizationWhitelist
+ * @kind function
+ *
+ * @description
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+ * urls during img[src] sanitization.
+ *
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+ *
+ * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+ * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+ *
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+ * chaining otherwise.
+ */
+ this.imgSrcSanitizationWhitelist = function(regexp) {
+ if (isDefined(regexp)) {
+ $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
+ return this;
+ } else {
+ return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $compileProvider#debugInfoEnabled
+ *
+ * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
+ * current debugInfoEnabled state
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
+ *
+ * @kind function
+ *
+ * @description
+ * Call this method to enable/disable various debug runtime information in the compiler such as adding
+ * binding information and a reference to the current scope on to DOM elements.
+ * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
+ * * `ng-binding` CSS class
+ * * `$binding` data property containing an array of the binding expressions
+ *
+ * You may want to disable this in production for a significant performance boost. See
+ * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
+ *
+ * The default value is true.
+ */
+ var debugInfoEnabled = true;
+ this.debugInfoEnabled = function(enabled) {
+ if (isDefined(enabled)) {
+ debugInfoEnabled = enabled;
+ return this;
+ }
+ return debugInfoEnabled;
+ };
+
+ this.$get = [
+ '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
+ '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
+ function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,
+ $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) {
+
+ var Attributes = function(element, attributesToCopy) {
+ if (attributesToCopy) {
+ var keys = Object.keys(attributesToCopy);
+ var i, l, key;
+
+ for (i = 0, l = keys.length; i < l; i++) {
+ key = keys[i];
+ this[key] = attributesToCopy[key];
+ }
+ } else {
+ this.$attr = {};
+ }
+
+ this.$$element = element;
+ };
+
+ Attributes.prototype = {
+ /**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$normalize
+ * @kind function
+ *
+ * @description
+ * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or
+ * `data-`) to its normalized, camelCase form.
+ *
+ * Also there is special case for Moz prefix starting with upper case letter.
+ *
+ * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}
+ *
+ * @param {string} name Name to normalize
+ */
+ $normalize: directiveNormalize,
+
+
+ /**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$addClass
+ * @kind function
+ *
+ * @description
+ * Adds the CSS class value specified by the classVal parameter to the element. If animations
+ * are enabled then an animation will be triggered for the class addition.
+ *
+ * @param {string} classVal The className value that will be added to the element
+ */
+ $addClass: function(classVal) {
+ if (classVal && classVal.length > 0) {
+ $animate.addClass(this.$$element, classVal);
+ }
+ },
+
+ /**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$removeClass
+ * @kind function
+ *
+ * @description
+ * Removes the CSS class value specified by the classVal parameter from the element. If
+ * animations are enabled then an animation will be triggered for the class removal.
+ *
+ * @param {string} classVal The className value that will be removed from the element
+ */
+ $removeClass: function(classVal) {
+ if (classVal && classVal.length > 0) {
+ $animate.removeClass(this.$$element, classVal);
+ }
+ },
+
+ /**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$updateClass
+ * @kind function
+ *
+ * @description
+ * Adds and removes the appropriate CSS class values to the element based on the difference
+ * between the new and old CSS class values (specified as newClasses and oldClasses).
+ *
+ * @param {string} newClasses The current CSS className value
+ * @param {string} oldClasses The former CSS className value
+ */
+ $updateClass: function(newClasses, oldClasses) {
+ var toAdd = tokenDifference(newClasses, oldClasses);
+ if (toAdd && toAdd.length) {
+ $animate.addClass(this.$$element, toAdd);
+ }
+
+ var toRemove = tokenDifference(oldClasses, newClasses);
+ if (toRemove && toRemove.length) {
+ $animate.removeClass(this.$$element, toRemove);
+ }
+ },
+
+ /**
+ * Set a normalized attribute on the element in a way such that all directives
+ * can share the attribute. This function properly handles boolean attributes.
+ * @param {string} key Normalized key. (ie ngAttribute)
+ * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
+ * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
+ * Defaults to true.
+ * @param {string=} attrName Optional none normalized name. Defaults to key.
+ */
+ $set: function(key, value, writeAttr, attrName) {
+ // TODO: decide whether or not to throw an error if "class"
+ //is set through this function since it may cause $updateClass to
+ //become unstable.
+
+ var node = this.$$element[0],
+ booleanKey = getBooleanAttrName(node, key),
+ aliasedKey = getAliasedAttrName(node, key),
+ observer = key,
+ nodeName;
+
+ if (booleanKey) {
+ this.$$element.prop(key, value);
+ attrName = booleanKey;
+ } else if (aliasedKey) {
+ this[aliasedKey] = value;
+ observer = aliasedKey;
+ }
+
+ this[key] = value;
+
+ // translate normalized key to actual key
+ if (attrName) {
+ this.$attr[key] = attrName;
+ } else {
+ attrName = this.$attr[key];
+ if (!attrName) {
+ this.$attr[key] = attrName = snake_case(key, '-');
+ }
+ }
+
+ nodeName = nodeName_(this.$$element);
+
+ if ((nodeName === 'a' && key === 'href') ||
+ (nodeName === 'img' && key === 'src')) {
+ // sanitize a[href] and img[src] values
+ this[key] = value = $$sanitizeUri(value, key === 'src');
+ } else if (nodeName === 'img' && key === 'srcset') {
+ // sanitize img[srcset] values
+ var result = "";
+
+ // first check if there are spaces because it's not the same pattern
+ var trimmedSrcset = trim(value);
+ // ( 999x ,| 999w ,| ,|, )
+ var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
+ var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
+
+ // split srcset into tuple of uri and descriptor except for the last item
+ var rawUris = trimmedSrcset.split(pattern);
+
+ // for each tuples
+ var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
+ for (var i = 0; i < nbrUrisWith2parts; i++) {
+ var innerIdx = i * 2;
+ // sanitize the uri
+ result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
+ // add the descriptor
+ result += (" " + trim(rawUris[innerIdx + 1]));
+ }
+
+ // split the last item into uri and descriptor
+ var lastTuple = trim(rawUris[i * 2]).split(/\s/);
+
+ // sanitize the last uri
+ result += $$sanitizeUri(trim(lastTuple[0]), true);
+
+ // and add the last descriptor if any
+ if (lastTuple.length === 2) {
+ result += (" " + trim(lastTuple[1]));
+ }
+ this[key] = value = result;
+ }
+
+ if (writeAttr !== false) {
+ if (value === null || value === undefined) {
+ this.$$element.removeAttr(attrName);
+ } else {
+ this.$$element.attr(attrName, value);
+ }
+ }
+
+ // fire observers
+ var $$observers = this.$$observers;
+ $$observers && forEach($$observers[observer], function(fn) {
+ try {
+ fn(value);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ });
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$observe
+ * @kind function
+ *
+ * @description
+ * Observes an interpolated attribute.
+ *
+ * The observer function will be invoked once during the next `$digest` following
+ * compilation. The observer is then invoked whenever the interpolated value
+ * changes.
+ *
+ * @param {string} key Normalized key. (ie ngAttribute) .
+ * @param {function(interpolatedValue)} fn Function that will be called whenever
+ the interpolated value of the attribute changes.
+ * See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.
+ * @returns {function()} Returns a deregistration function for this observer.
+ */
+ $observe: function(key, fn) {
+ var attrs = this,
+ $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
+ listeners = ($$observers[key] || ($$observers[key] = []));
+
+ listeners.push(fn);
+ $rootScope.$evalAsync(function() {
+ if (!listeners.$$inter && attrs.hasOwnProperty(key)) {
+ // no one registered attribute interpolation function, so lets call it manually
+ fn(attrs[key]);
+ }
+ });
+
+ return function() {
+ arrayRemove(listeners, fn);
+ };
+ }
+ };
+
+
+ function safeAddClass($element, className) {
+ try {
+ $element.addClass(className);
+ } catch (e) {
+ // ignore, since it means that we are trying to set class on
+ // SVG element, where class name is read-only.
+ }
+ }
+
+
+ var startSymbol = $interpolate.startSymbol(),
+ endSymbol = $interpolate.endSymbol(),
+ denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}')
+ ? identity
+ : function denormalizeTemplate(template) {
+ return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
+ },
+ NG_ATTR_BINDING = /^ngAttr[A-Z]/;
+
+ compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
+ var bindings = $element.data('$binding') || [];
+
+ if (isArray(binding)) {
+ bindings = bindings.concat(binding);
+ } else {
+ bindings.push(binding);
+ }
+
+ $element.data('$binding', bindings);
+ } : noop;
+
+ compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
+ safeAddClass($element, 'ng-binding');
+ } : noop;
+
+ compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
+ var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
+ $element.data(dataName, scope);
+ } : noop;
+
+ compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
+ safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
+ } : noop;
+
+ return compile;
+
+ //================================
+
+ function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
+ previousCompileContext) {
+ if (!($compileNodes instanceof jqLite)) {
+ // jquery always rewraps, whereas we need to preserve the original selector so that we can
+ // modify it.
+ $compileNodes = jqLite($compileNodes);
+ }
+ // We can not compile top level text elements since text nodes can be merged and we will
+ // not be able to attach scope data to them, so we will wrap them in <span>
+ forEach($compileNodes, function(node, index) {
+ if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
+ $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
+ }
+ });
+ var compositeLinkFn =
+ compileNodes($compileNodes, transcludeFn, $compileNodes,
+ maxPriority, ignoreDirective, previousCompileContext);
+ compile.$$addScopeClass($compileNodes);
+ var namespace = null;
+ return function publicLinkFn(scope, cloneConnectFn, options) {
+ assertArg(scope, 'scope');
+
+ options = options || {};
+ var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
+ transcludeControllers = options.transcludeControllers,
+ futureParentElement = options.futureParentElement;
+
+ // When `parentBoundTranscludeFn` is passed, it is a
+ // `controllersBoundTransclude` function (it was previously passed
+ // as `transclude` to directive.link) so we must unwrap it to get
+ // its `boundTranscludeFn`
+ if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
+ parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
+ }
+
+ if (!namespace) {
+ namespace = detectNamespaceForChildElements(futureParentElement);
+ }
+ var $linkNode;
+ if (namespace !== 'html') {
+ // When using a directive with replace:true and templateUrl the $compileNodes
+ // (or a child element inside of them)
+ // might change, so we need to recreate the namespace adapted compileNodes
+ // for call to the link function.
+ // Note: This will already clone the nodes...
+ $linkNode = jqLite(
+ wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
+ );
+ } else if (cloneConnectFn) {
+ // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
+ // and sometimes changes the structure of the DOM.
+ $linkNode = JQLitePrototype.clone.call($compileNodes);
+ } else {
+ $linkNode = $compileNodes;
+ }
+
+ if (transcludeControllers) {
+ for (var controllerName in transcludeControllers) {
+ $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
+ }
+ }
+
+ compile.$$addScopeInfo($linkNode, scope);
+
+ if (cloneConnectFn) cloneConnectFn($linkNode, scope);
+ if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
+ return $linkNode;
+ };
+ }
+
+ function detectNamespaceForChildElements(parentElement) {
+ // TODO: Make this detect MathML as well...
+ var node = parentElement && parentElement[0];
+ if (!node) {
+ return 'html';
+ } else {
+ return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
+ }
+ }
+
+ /**
+ * Compile function matches each node in nodeList against the directives. Once all directives
+ * for a particular node are collected their compile functions are executed. The compile
+ * functions return values - the linking functions - are combined into a composite linking
+ * function, which is the a linking function for the node.
+ *
+ * @param {NodeList} nodeList an array of nodes or NodeList to compile
+ * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+ * scope argument is auto-generated to the new child of the transcluded parent scope.
+ * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
+ * the rootElement must be set the jqLite collection of the compile root. This is
+ * needed so that the jqLite collection items can be replaced with widgets.
+ * @param {number=} maxPriority Max directive priority.
+ * @returns {Function} A composite linking function of all of the matched directives or null.
+ */
+ function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
+ previousCompileContext) {
+ var linkFns = [],
+ attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
+
+ for (var i = 0; i < nodeList.length; i++) {
+ attrs = new Attributes();
+
+ // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
+ directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
+ ignoreDirective);
+
+ nodeLinkFn = (directives.length)
+ ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
+ null, [], [], previousCompileContext)
+ : null;
+
+ if (nodeLinkFn && nodeLinkFn.scope) {
+ compile.$$addScopeClass(attrs.$$element);
+ }
+
+ childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
+ !(childNodes = nodeList[i].childNodes) ||
+ !childNodes.length)
+ ? null
+ : compileNodes(childNodes,
+ nodeLinkFn ? (
+ (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
+ && nodeLinkFn.transclude) : transcludeFn);
+
+ if (nodeLinkFn || childLinkFn) {
+ linkFns.push(i, nodeLinkFn, childLinkFn);
+ linkFnFound = true;
+ nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
+ }
+
+ //use the previous context only for the first element in the virtual group
+ previousCompileContext = null;
+ }
+
+ // return a linking function if we have found anything, null otherwise
+ return linkFnFound ? compositeLinkFn : null;
+
+ function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
+ var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
+ var stableNodeList;
+
+
+ if (nodeLinkFnFound) {
+ // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
+ // offsets don't get screwed up
+ var nodeListLength = nodeList.length;
+ stableNodeList = new Array(nodeListLength);
+
+ // create a sparse array by only copying the elements which have a linkFn
+ for (i = 0; i < linkFns.length; i+=3) {
+ idx = linkFns[i];
+ stableNodeList[idx] = nodeList[idx];
+ }
+ } else {
+ stableNodeList = nodeList;
+ }
+
+ for (i = 0, ii = linkFns.length; i < ii;) {
+ node = stableNodeList[linkFns[i++]];
+ nodeLinkFn = linkFns[i++];
+ childLinkFn = linkFns[i++];
+
+ if (nodeLinkFn) {
+ if (nodeLinkFn.scope) {
+ childScope = scope.$new();
+ compile.$$addScopeInfo(jqLite(node), childScope);
+ } else {
+ childScope = scope;
+ }
+
+ if (nodeLinkFn.transcludeOnThisElement) {
+ childBoundTranscludeFn = createBoundTranscludeFn(
+ scope, nodeLinkFn.transclude, parentBoundTranscludeFn,
+ nodeLinkFn.elementTranscludeOnThisElement);
+
+ } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
+ childBoundTranscludeFn = parentBoundTranscludeFn;
+
+ } else if (!parentBoundTranscludeFn && transcludeFn) {
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
+
+ } else {
+ childBoundTranscludeFn = null;
+ }
+
+ nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
+
+ } else if (childLinkFn) {
+ childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
+ }
+ }
+ }
+ }
+
+ function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) {
+
+ var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
+
+ if (!transcludedScope) {
+ transcludedScope = scope.$new(false, containingScope);
+ transcludedScope.$$transcluded = true;
+ }
+
+ return transcludeFn(transcludedScope, cloneFn, {
+ parentBoundTranscludeFn: previousBoundTranscludeFn,
+ transcludeControllers: controllers,
+ futureParentElement: futureParentElement
+ });
+ };
+
+ return boundTranscludeFn;
+ }
+
+ /**
+ * Looks for directives on the given node and adds them to the directive collection which is
+ * sorted.
+ *
+ * @param node Node to search.
+ * @param directives An array to which the directives are added to. This array is sorted before
+ * the function returns.
+ * @param attrs The shared attrs object which is used to populate the normalized attributes.
+ * @param {number=} maxPriority Max directive priority.
+ */
+ function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
+ var nodeType = node.nodeType,
+ attrsMap = attrs.$attr,
+ match,
+ className;
+
+ switch (nodeType) {
+ case NODE_TYPE_ELEMENT: /* Element */
+ // use the node name: <directive>
+ addDirective(directives,
+ directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
+
+ // iterate over the attributes
+ for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
+ j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
+ var attrStartName = false;
+ var attrEndName = false;
+
+ attr = nAttrs[j];
+ name = attr.name;
+ value = trim(attr.value);
+
+ // support ngAttr attribute binding
+ ngAttrName = directiveNormalize(name);
+ if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
+ name = name.replace(PREFIX_REGEXP, '')
+ .substr(8).replace(/_(.)/g, function(match, letter) {
+ return letter.toUpperCase();
+ });
+ }
+
+ var directiveNName = ngAttrName.replace(/(Start|End)$/, '');
+ if (directiveIsMultiElement(directiveNName)) {
+ if (ngAttrName === directiveNName + 'Start') {
+ attrStartName = name;
+ attrEndName = name.substr(0, name.length - 5) + 'end';
+ name = name.substr(0, name.length - 6);
+ }
+ }
+
+ nName = directiveNormalize(name.toLowerCase());
+ attrsMap[nName] = name;
+ if (isNgAttr || !attrs.hasOwnProperty(nName)) {
+ attrs[nName] = value;
+ if (getBooleanAttrName(node, nName)) {
+ attrs[nName] = true; // presence means true
+ }
+ }
+ addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
+ addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
+ attrEndName);
+ }
+
+ // use class as directive
+ className = node.className;
+ if (isString(className) && className !== '') {
+ while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
+ nName = directiveNormalize(match[2]);
+ if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
+ attrs[nName] = trim(match[3]);
+ }
+ className = className.substr(match.index + match[0].length);
+ }
+ }
+ break;
+ case NODE_TYPE_TEXT: /* Text Node */
+ addTextInterpolateDirective(directives, node.nodeValue);
+ break;
+ case NODE_TYPE_COMMENT: /* Comment */
+ try {
+ match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
+ if (match) {
+ nName = directiveNormalize(match[1]);
+ if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
+ attrs[nName] = trim(match[2]);
+ }
+ }
+ } catch (e) {
+ // turns out that under some circumstances IE9 throws errors when one attempts to read
+ // comment's node value.
+ // Just ignore it and continue. (Can't seem to reproduce in test case.)
+ }
+ break;
+ }
+
+ directives.sort(byPriority);
+ return directives;
+ }
+
+ /**
+ * Given a node with an directive-start it collects all of the siblings until it finds
+ * directive-end.
+ * @param node
+ * @param attrStart
+ * @param attrEnd
+ * @returns {*}
+ */
+ function groupScan(node, attrStart, attrEnd) {
+ var nodes = [];
+ var depth = 0;
+ if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
+ do {
+ if (!node) {
+ throw $compileMinErr('uterdir',
+ "Unterminated attribute, found '{0}' but no matching '{1}' found.",
+ attrStart, attrEnd);
+ }
+ if (node.nodeType == NODE_TYPE_ELEMENT) {
+ if (node.hasAttribute(attrStart)) depth++;
+ if (node.hasAttribute(attrEnd)) depth--;
+ }
+ nodes.push(node);
+ node = node.nextSibling;
+ } while (depth > 0);
+ } else {
+ nodes.push(node);
+ }
+
+ return jqLite(nodes);
+ }
+
+ /**
+ * Wrapper for linking function which converts normal linking function into a grouped
+ * linking function.
+ * @param linkFn
+ * @param attrStart
+ * @param attrEnd
+ * @returns {Function}
+ */
+ function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
+ return function(scope, element, attrs, controllers, transcludeFn) {
+ element = groupScan(element[0], attrStart, attrEnd);
+ return linkFn(scope, element, attrs, controllers, transcludeFn);
+ };
+ }
+
+ /**
+ * Once the directives have been collected, their compile functions are executed. This method
+ * is responsible for inlining directive templates as well as terminating the application
+ * of the directives if the terminal directive has been reached.
+ *
+ * @param {Array} directives Array of collected directives to execute their compile function.
+ * this needs to be pre-sorted by priority order.
+ * @param {Node} compileNode The raw DOM node to apply the compile functions to
+ * @param {Object} templateAttrs The shared attribute function
+ * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+ * scope argument is auto-generated to the new
+ * child of the transcluded parent scope.
+ * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
+ * argument has the root jqLite array so that we can replace nodes
+ * on it.
+ * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
+ * compiling the transclusion.
+ * @param {Array.<Function>} preLinkFns
+ * @param {Array.<Function>} postLinkFns
+ * @param {Object} previousCompileContext Context used for previous compilation of the current
+ * node
+ * @returns {Function} linkFn
+ */
+ function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
+ jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
+ previousCompileContext) {
+ previousCompileContext = previousCompileContext || {};
+
+ var terminalPriority = -Number.MAX_VALUE,
+ newScopeDirective,
+ controllerDirectives = previousCompileContext.controllerDirectives,
+ controllers,
+ newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
+ templateDirective = previousCompileContext.templateDirective,
+ nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
+ hasTranscludeDirective = false,
+ hasTemplate = false,
+ hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
+ $compileNode = templateAttrs.$$element = jqLite(compileNode),
+ directive,
+ directiveName,
+ $template,
+ replaceDirective = originalReplaceDirective,
+ childTranscludeFn = transcludeFn,
+ linkFn,
+ directiveValue;
+
+ // executes all directives on the current element
+ for (var i = 0, ii = directives.length; i < ii; i++) {
+ directive = directives[i];
+ var attrStart = directive.$$start;
+ var attrEnd = directive.$$end;
+
+ // collect multiblock sections
+ if (attrStart) {
+ $compileNode = groupScan(compileNode, attrStart, attrEnd);
+ }
+ $template = undefined;
+
+ if (terminalPriority > directive.priority) {
+ break; // prevent further processing of directives
+ }
+
+ if (directiveValue = directive.scope) {
+
+ // skip the check for directives with async templates, we'll check the derived sync
+ // directive when the template arrives
+ if (!directive.templateUrl) {
+ if (isObject(directiveValue)) {
+ // This directive is trying to add an isolated scope.
+ // Check that there is no scope of any kind already
+ assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
+ directive, $compileNode);
+ newIsolateScopeDirective = directive;
+ } else {
+ // This directive is trying to add a child scope.
+ // Check that there is no isolated scope already
+ assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
+ $compileNode);
+ }
+ }
+
+ newScopeDirective = newScopeDirective || directive;
+ }
+
+ directiveName = directive.name;
+
+ if (!directive.templateUrl && directive.controller) {
+ directiveValue = directive.controller;
+ controllerDirectives = controllerDirectives || {};
+ assertNoDuplicate("'" + directiveName + "' controller",
+ controllerDirectives[directiveName], directive, $compileNode);
+ controllerDirectives[directiveName] = directive;
+ }
+
+ if (directiveValue = directive.transclude) {
+ hasTranscludeDirective = true;
+
+ // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
+ // This option should only be used by directives that know how to safely handle element transclusion,
+ // where the transcluded nodes are added or replaced after linking.
+ if (!directive.$$tlb) {
+ assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
+ nonTlbTranscludeDirective = directive;
+ }
+
+ if (directiveValue == 'element') {
+ hasElementTranscludeDirective = true;
+ terminalPriority = directive.priority;
+ $template = $compileNode;
+ $compileNode = templateAttrs.$$element =
+ jqLite(document.createComment(' ' + directiveName + ': ' +
+ templateAttrs[directiveName] + ' '));
+ compileNode = $compileNode[0];
+ replaceWith(jqCollection, sliceArgs($template), compileNode);
+
+ childTranscludeFn = compile($template, transcludeFn, terminalPriority,
+ replaceDirective && replaceDirective.name, {
+ // Don't pass in:
+ // - controllerDirectives - otherwise we'll create duplicates controllers
+ // - newIsolateScopeDirective or templateDirective - combining templates with
+ // element transclusion doesn't make sense.
+ //
+ // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
+ // on the same element more than once.
+ nonTlbTranscludeDirective: nonTlbTranscludeDirective
+ });
+ } else {
+ $template = jqLite(jqLiteClone(compileNode)).contents();
+ $compileNode.empty(); // clear contents
+ childTranscludeFn = compile($template, transcludeFn);
+ }
+ }
+
+ if (directive.template) {
+ hasTemplate = true;
+ assertNoDuplicate('template', templateDirective, directive, $compileNode);
+ templateDirective = directive;
+
+ directiveValue = (isFunction(directive.template))
+ ? directive.template($compileNode, templateAttrs)
+ : directive.template;
+
+ directiveValue = denormalizeTemplate(directiveValue);
+
+ if (directive.replace) {
+ replaceDirective = directive;
+ if (jqLiteIsTextNode(directiveValue)) {
+ $template = [];
+ } else {
+ $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
+ }
+ compileNode = $template[0];
+
+ if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+ throw $compileMinErr('tplrt',
+ "Template for directive '{0}' must have exactly one root element. {1}",
+ directiveName, '');
+ }
+
+ replaceWith(jqCollection, $compileNode, compileNode);
+
+ var newTemplateAttrs = {$attr: {}};
+
+ // combine directives from the original node and from the template:
+ // - take the array of directives for this element
+ // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
+ // - collect directives from the template and sort them by priority
+ // - combine directives as: processed + template + unprocessed
+ var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
+ var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
+
+ if (newIsolateScopeDirective) {
+ markDirectivesAsIsolate(templateDirectives);
+ }
+ directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
+ mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
+
+ ii = directives.length;
+ } else {
+ $compileNode.html(directiveValue);
+ }
+ }
+
+ if (directive.templateUrl) {
+ hasTemplate = true;
+ assertNoDuplicate('template', templateDirective, directive, $compileNode);
+ templateDirective = directive;
+
+ if (directive.replace) {
+ replaceDirective = directive;
+ }
+
+ nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
+ templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
+ controllerDirectives: controllerDirectives,
+ newIsolateScopeDirective: newIsolateScopeDirective,
+ templateDirective: templateDirective,
+ nonTlbTranscludeDirective: nonTlbTranscludeDirective
+ });
+ ii = directives.length;
+ } else if (directive.compile) {
+ try {
+ linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
+ if (isFunction(linkFn)) {
+ addLinkFns(null, linkFn, attrStart, attrEnd);
+ } else if (linkFn) {
+ addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
+ }
+ } catch (e) {
+ $exceptionHandler(e, startingTag($compileNode));
+ }
+ }
+
+ if (directive.terminal) {
+ nodeLinkFn.terminal = true;
+ terminalPriority = Math.max(terminalPriority, directive.priority);
+ }
+
+ }
+
+ nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
+ nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
+ nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective;
+ nodeLinkFn.templateOnThisElement = hasTemplate;
+ nodeLinkFn.transclude = childTranscludeFn;
+
+ previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
+
+ // might be normal or delayed nodeLinkFn depending on if templateUrl is present
+ return nodeLinkFn;
+
+ ////////////////////
+
+ function addLinkFns(pre, post, attrStart, attrEnd) {
+ if (pre) {
+ if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
+ pre.require = directive.require;
+ pre.directiveName = directiveName;
+ if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+ pre = cloneAndAnnotateFn(pre, {isolateScope: true});
+ }
+ preLinkFns.push(pre);
+ }
+ if (post) {
+ if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
+ post.require = directive.require;
+ post.directiveName = directiveName;
+ if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+ post = cloneAndAnnotateFn(post, {isolateScope: true});
+ }
+ postLinkFns.push(post);
+ }
+ }
+
+
+ function getControllers(directiveName, require, $element, elementControllers) {
+ var value, retrievalMethod = 'data', optional = false;
+ var $searchElement = $element;
+ var match;
+ if (isString(require)) {
+ match = require.match(REQUIRE_PREFIX_REGEXP);
+ require = require.substring(match[0].length);
+
+ if (match[3]) {
+ if (match[1]) match[3] = null;
+ else match[1] = match[3];
+ }
+ if (match[1] === '^') {
+ retrievalMethod = 'inheritedData';
+ } else if (match[1] === '^^') {
+ retrievalMethod = 'inheritedData';
+ $searchElement = $element.parent();
+ }
+ if (match[2] === '?') {
+ optional = true;
+ }
+
+ value = null;
+
+ if (elementControllers && retrievalMethod === 'data') {
+ if (value = elementControllers[require]) {
+ value = value.instance;
+ }
+ }
+ value = value || $searchElement[retrievalMethod]('$' + require + 'Controller');
+
+ if (!value && !optional) {
+ throw $compileMinErr('ctreq',
+ "Controller '{0}', required by directive '{1}', can't be found!",
+ require, directiveName);
+ }
+ return value || null;
+ } else if (isArray(require)) {
+ value = [];
+ forEach(require, function(require) {
+ value.push(getControllers(directiveName, require, $element, elementControllers));
+ });
+ }
+ return value;
+ }
+
+
+ function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
+ var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element,
+ attrs;
+
+ if (compileNode === linkNode) {
+ attrs = templateAttrs;
+ $element = templateAttrs.$$element;
+ } else {
+ $element = jqLite(linkNode);
+ attrs = new Attributes($element, templateAttrs);
+ }
+
+ if (newIsolateScopeDirective) {
+ isolateScope = scope.$new(true);
+ }
+
+ if (boundTranscludeFn) {
+ // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
+ // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
+ transcludeFn = controllersBoundTransclude;
+ transcludeFn.$$boundTransclude = boundTranscludeFn;
+ }
+
+ if (controllerDirectives) {
+ // TODO: merge `controllers` and `elementControllers` into single object.
+ controllers = {};
+ elementControllers = {};
+ forEach(controllerDirectives, function(directive) {
+ var locals = {
+ $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
+ $element: $element,
+ $attrs: attrs,
+ $transclude: transcludeFn
+ }, controllerInstance;
+
+ controller = directive.controller;
+ if (controller == '@') {
+ controller = attrs[directive.name];
+ }
+
+ controllerInstance = $controller(controller, locals, true, directive.controllerAs);
+
+ // For directives with element transclusion the element is a comment,
+ // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
+ // clean up (http://bugs.jquery.com/ticket/8335).
+ // Instead, we save the controllers for the element in a local hash and attach to .data
+ // later, once we have the actual element.
+ elementControllers[directive.name] = controllerInstance;
+ if (!hasElementTranscludeDirective) {
+ $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
+ }
+
+ controllers[directive.name] = controllerInstance;
+ });
+ }
+
+ if (newIsolateScopeDirective) {
+ compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
+ templateDirective === newIsolateScopeDirective.$$originalDirective)));
+ compile.$$addScopeClass($element, true);
+
+ var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name];
+ var isolateBindingContext = isolateScope;
+ if (isolateScopeController && isolateScopeController.identifier &&
+ newIsolateScopeDirective.bindToController === true) {
+ isolateBindingContext = isolateScopeController.instance;
+ }
+
+ forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) {
+ var attrName = definition.attrName,
+ optional = definition.optional,
+ mode = definition.mode, // @, =, or &
+ lastValue,
+ parentGet, parentSet, compare;
+
+ switch (mode) {
+
+ case '@':
+ attrs.$observe(attrName, function(value) {
+ isolateBindingContext[scopeName] = value;
+ });
+ attrs.$$observers[attrName].$$scope = scope;
+ if (attrs[attrName]) {
+ // If the attribute has been provided then we trigger an interpolation to ensure
+ // the value is there for use in the link fn
+ isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);
+ }
+ break;
+
+ case '=':
+ if (optional && !attrs[attrName]) {
+ return;
+ }
+ parentGet = $parse(attrs[attrName]);
+ if (parentGet.literal) {
+ compare = equals;
+ } else {
+ compare = function(a, b) { return a === b || (a !== a && b !== b); };
+ }
+ parentSet = parentGet.assign || function() {
+ // reset the change, or we will throw this exception on every $digest
+ lastValue = isolateBindingContext[scopeName] = parentGet(scope);
+ throw $compileMinErr('nonassign',
+ "Expression '{0}' used with directive '{1}' is non-assignable!",
+ attrs[attrName], newIsolateScopeDirective.name);
+ };
+ lastValue = isolateBindingContext[scopeName] = parentGet(scope);
+ var parentValueWatch = function parentValueWatch(parentValue) {
+ if (!compare(parentValue, isolateBindingContext[scopeName])) {
+ // we are out of sync and need to copy
+ if (!compare(parentValue, lastValue)) {
+ // parent changed and it has precedence
+ isolateBindingContext[scopeName] = parentValue;
+ } else {
+ // if the parent can be assigned then do so
+ parentSet(scope, parentValue = isolateBindingContext[scopeName]);
+ }
+ }
+ return lastValue = parentValue;
+ };
+ parentValueWatch.$stateful = true;
+ var unwatch;
+ if (definition.collection) {
+ unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
+ } else {
+ unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
+ }
+ isolateScope.$on('$destroy', unwatch);
+ break;
+
+ case '&':
+ parentGet = $parse(attrs[attrName]);
+ isolateBindingContext[scopeName] = function(locals) {
+ return parentGet(scope, locals);
+ };
+ break;
+ }
+ });
+ }
+ if (controllers) {
+ forEach(controllers, function(controller) {
+ controller();
+ });
+ controllers = null;
+ }
+
+ // PRELINKING
+ for (i = 0, ii = preLinkFns.length; i < ii; i++) {
+ linkFn = preLinkFns[i];
+ invokeLinkFn(linkFn,
+ linkFn.isolateScope ? isolateScope : scope,
+ $element,
+ attrs,
+ linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+ transcludeFn
+ );
+ }
+
+ // RECURSION
+ // We only pass the isolate scope, if the isolate directive has a template,
+ // otherwise the child elements do not belong to the isolate directive.
+ var scopeToChild = scope;
+ if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
+ scopeToChild = isolateScope;
+ }
+ childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
+
+ // POSTLINKING
+ for (i = postLinkFns.length - 1; i >= 0; i--) {
+ linkFn = postLinkFns[i];
+ invokeLinkFn(linkFn,
+ linkFn.isolateScope ? isolateScope : scope,
+ $element,
+ attrs,
+ linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+ transcludeFn
+ );
+ }
+
+ // This is the function that is injected as `$transclude`.
+ // Note: all arguments are optional!
+ function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
+ var transcludeControllers;
+
+ // No scope passed in:
+ if (!isScope(scope)) {
+ futureParentElement = cloneAttachFn;
+ cloneAttachFn = scope;
+ scope = undefined;
+ }
+
+ if (hasElementTranscludeDirective) {
+ transcludeControllers = elementControllers;
+ }
+ if (!futureParentElement) {
+ futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
+ }
+ return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+ }
+ }
+ }
+
+ function markDirectivesAsIsolate(directives) {
+ // mark all directives as needing isolate scope.
+ for (var j = 0, jj = directives.length; j < jj; j++) {
+ directives[j] = inherit(directives[j], {$$isolateScope: true});
+ }
+ }
+
+ /**
+ * looks up the directive and decorates it with exception handling and proper parameters. We
+ * call this the boundDirective.
+ *
+ * @param {string} name name of the directive to look up.
+ * @param {string} location The directive must be found in specific format.
+ * String containing any of theses characters:
+ *
+ * * `E`: element name
+ * * `A': attribute
+ * * `C`: class
+ * * `M`: comment
+ * @returns {boolean} true if directive was added.
+ */
+ function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
+ endAttrName) {
+ if (name === ignoreDirective) return null;
+ var match = null;
+ if (hasDirectives.hasOwnProperty(name)) {
+ for (var directive, directives = $injector.get(name + Suffix),
+ i = 0, ii = directives.length; i < ii; i++) {
+ try {
+ directive = directives[i];
+ if ((maxPriority === undefined || maxPriority > directive.priority) &&
+ directive.restrict.indexOf(location) != -1) {
+ if (startAttrName) {
+ directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
+ }
+ tDirectives.push(directive);
+ match = directive;
+ }
+ } catch (e) { $exceptionHandler(e); }
+ }
+ }
+ return match;
+ }
+
+
+ /**
+ * looks up the directive and returns true if it is a multi-element directive,
+ * and therefore requires DOM nodes between -start and -end markers to be grouped
+ * together.
+ *
+ * @param {string} name name of the directive to look up.
+ * @returns true if directive was registered as multi-element.
+ */
+ function directiveIsMultiElement(name) {
+ if (hasDirectives.hasOwnProperty(name)) {
+ for (var directive, directives = $injector.get(name + Suffix),
+ i = 0, ii = directives.length; i < ii; i++) {
+ directive = directives[i];
+ if (directive.multiElement) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * When the element is replaced with HTML template then the new attributes
+ * on the template need to be merged with the existing attributes in the DOM.
+ * The desired effect is to have both of the attributes present.
+ *
+ * @param {object} dst destination attributes (original DOM)
+ * @param {object} src source attributes (from the directive template)
+ */
+ function mergeTemplateAttributes(dst, src) {
+ var srcAttr = src.$attr,
+ dstAttr = dst.$attr,
+ $element = dst.$$element;
+
+ // reapply the old attributes to the new element
+ forEach(dst, function(value, key) {
+ if (key.charAt(0) != '$') {
+ if (src[key] && src[key] !== value) {
+ value += (key === 'style' ? ';' : ' ') + src[key];
+ }
+ dst.$set(key, value, true, srcAttr[key]);
+ }
+ });
+
+ // copy the new attributes on the old attrs object
+ forEach(src, function(value, key) {
+ if (key == 'class') {
+ safeAddClass($element, value);
+ dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
+ } else if (key == 'style') {
+ $element.attr('style', $element.attr('style') + ';' + value);
+ dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
+ // `dst` will never contain hasOwnProperty as DOM parser won't let it.
+ // You will get an "InvalidCharacterError: DOM Exception 5" error if you
+ // have an attribute like "has-own-property" or "data-has-own-property", etc.
+ } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
+ dst[key] = value;
+ dstAttr[key] = srcAttr[key];
+ }
+ });
+ }
+
+
+ function compileTemplateUrl(directives, $compileNode, tAttrs,
+ $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
+ var linkQueue = [],
+ afterTemplateNodeLinkFn,
+ afterTemplateChildLinkFn,
+ beforeTemplateCompileNode = $compileNode[0],
+ origAsyncDirective = directives.shift(),
+ // The fact that we have to copy and patch the directive seems wrong!
+ derivedSyncDirective = extend({}, origAsyncDirective, {
+ templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
+ }),
+ templateUrl = (isFunction(origAsyncDirective.templateUrl))
+ ? origAsyncDirective.templateUrl($compileNode, tAttrs)
+ : origAsyncDirective.templateUrl,
+ templateNamespace = origAsyncDirective.templateNamespace;
+
+ $compileNode.empty();
+
+ $templateRequest($sce.getTrustedResourceUrl(templateUrl))
+ .then(function(content) {
+ var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
+
+ content = denormalizeTemplate(content);
+
+ if (origAsyncDirective.replace) {
+ if (jqLiteIsTextNode(content)) {
+ $template = [];
+ } else {
+ $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
+ }
+ compileNode = $template[0];
+
+ if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+ throw $compileMinErr('tplrt',
+ "Template for directive '{0}' must have exactly one root element. {1}",
+ origAsyncDirective.name, templateUrl);
+ }
+
+ tempTemplateAttrs = {$attr: {}};
+ replaceWith($rootElement, $compileNode, compileNode);
+ var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
+
+ if (isObject(origAsyncDirective.scope)) {
+ markDirectivesAsIsolate(templateDirectives);
+ }
+ directives = templateDirectives.concat(directives);
+ mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
+ } else {
+ compileNode = beforeTemplateCompileNode;
+ $compileNode.html(content);
+ }
+
+ directives.unshift(derivedSyncDirective);
+
+ afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
+ childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
+ previousCompileContext);
+ forEach($rootElement, function(node, i) {
+ if (node == compileNode) {
+ $rootElement[i] = $compileNode[0];
+ }
+ });
+ afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
+
+ while (linkQueue.length) {
+ var scope = linkQueue.shift(),
+ beforeTemplateLinkNode = linkQueue.shift(),
+ linkRootElement = linkQueue.shift(),
+ boundTranscludeFn = linkQueue.shift(),
+ linkNode = $compileNode[0];
+
+ if (scope.$$destroyed) continue;
+
+ if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
+ var oldClasses = beforeTemplateLinkNode.className;
+
+ if (!(previousCompileContext.hasElementTranscludeDirective &&
+ origAsyncDirective.replace)) {
+ // it was cloned therefore we have to clone as well.
+ linkNode = jqLiteClone(compileNode);
+ }
+ replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
+
+ // Copy in CSS classes from original node
+ safeAddClass(jqLite(linkNode), oldClasses);
+ }
+ if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+ } else {
+ childBoundTranscludeFn = boundTranscludeFn;
+ }
+ afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
+ childBoundTranscludeFn);
+ }
+ linkQueue = null;
+ });
+
+ return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
+ var childBoundTranscludeFn = boundTranscludeFn;
+ if (scope.$$destroyed) return;
+ if (linkQueue) {
+ linkQueue.push(scope,
+ node,
+ rootElement,
+ childBoundTranscludeFn);
+ } else {
+ if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+ }
+ afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
+ }
+ };
+ }
+
+
+ /**
+ * Sorting function for bound directives.
+ */
+ function byPriority(a, b) {
+ var diff = b.priority - a.priority;
+ if (diff !== 0) return diff;
+ if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
+ return a.index - b.index;
+ }
+
+
+ function assertNoDuplicate(what, previousDirective, directive, element) {
+ if (previousDirective) {
+ throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
+ previousDirective.name, directive.name, what, startingTag(element));
+ }
+ }
+
+
+ function addTextInterpolateDirective(directives, text) {
+ var interpolateFn = $interpolate(text, true);
+ if (interpolateFn) {
+ directives.push({
+ priority: 0,
+ compile: function textInterpolateCompileFn(templateNode) {
+ var templateNodeParent = templateNode.parent(),
+ hasCompileParent = !!templateNodeParent.length;
+
+ // When transcluding a template that has bindings in the root
+ // we don't have a parent and thus need to add the class during linking fn.
+ if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
+
+ return function textInterpolateLinkFn(scope, node) {
+ var parent = node.parent();
+ if (!hasCompileParent) compile.$$addBindingClass(parent);
+ compile.$$addBindingInfo(parent, interpolateFn.expressions);
+ scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
+ node[0].nodeValue = value;
+ });
+ };
+ }
+ });
+ }
+ }
+
+
+ function wrapTemplate(type, template) {
+ type = lowercase(type || 'html');
+ switch (type) {
+ case 'svg':
+ case 'math':
+ var wrapper = document.createElement('div');
+ wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
+ return wrapper.childNodes[0].childNodes;
+ default:
+ return template;
+ }
+ }
+
+
+ function getTrustedContext(node, attrNormalizedName) {
+ if (attrNormalizedName == "srcdoc") {
+ return $sce.HTML;
+ }
+ var tag = nodeName_(node);
+ // maction[xlink:href] can source SVG. It's not limited to <maction>.
+ if (attrNormalizedName == "xlinkHref" ||
+ (tag == "form" && attrNormalizedName == "action") ||
+ (tag != "img" && (attrNormalizedName == "src" ||
+ attrNormalizedName == "ngSrc"))) {
+ return $sce.RESOURCE_URL;
+ }
+ }
+
+
+ function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
+ var trustedContext = getTrustedContext(node, name);
+ allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;
+
+ var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);
+
+ // no interpolation found -> ignore
+ if (!interpolateFn) return;
+
+
+ if (name === "multiple" && nodeName_(node) === "select") {
+ throw $compileMinErr("selmulti",
+ "Binding to the 'multiple' attribute is not supported. Element: {0}",
+ startingTag(node));
+ }
+
+ directives.push({
+ priority: 100,
+ compile: function() {
+ return {
+ pre: function attrInterpolatePreLinkFn(scope, element, attr) {
+ var $$observers = (attr.$$observers || (attr.$$observers = {}));
+
+ if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
+ throw $compileMinErr('nodomevents',
+ "Interpolations for HTML DOM event attributes are disallowed. Please use the " +
+ "ng- versions (such as ng-click instead of onclick) instead.");
+ }
+
+ // If the attribute has changed since last $interpolate()ed
+ var newValue = attr[name];
+ if (newValue !== value) {
+ // we need to interpolate again since the attribute value has been updated
+ // (e.g. by another directive's compile function)
+ // ensure unset/empty values make interpolateFn falsy
+ interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing);
+ value = newValue;
+ }
+
+ // if attribute was updated so that there is no interpolation going on we don't want to
+ // register any observers
+ if (!interpolateFn) return;
+
+ // initialize attr object so that it's ready in case we need the value for isolate
+ // scope initialization, otherwise the value would not be available from isolate
+ // directive's linking fn during linking phase
+ attr[name] = interpolateFn(scope);
+
+ ($$observers[name] || ($$observers[name] = [])).$$inter = true;
+ (attr.$$observers && attr.$$observers[name].$$scope || scope).
+ $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
+ //special case for class attribute addition + removal
+ //so that class changes can tap into the animation
+ //hooks provided by the $animate service. Be sure to
+ //skip animations when the first digest occurs (when
+ //both the new and the old values are the same) since
+ //the CSS classes are the non-interpolated values
+ if (name === 'class' && newValue != oldValue) {
+ attr.$updateClass(newValue, oldValue);
+ } else {
+ attr.$set(name, newValue);
+ }
+ });
+ }
+ };
+ }
+ });
+ }
+
+
+ /**
+ * This is a special jqLite.replaceWith, which can replace items which
+ * have no parents, provided that the containing jqLite collection is provided.
+ *
+ * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
+ * in the root of the tree.
+ * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
+ * the shell, but replace its DOM node reference.
+ * @param {Node} newNode The new DOM node.
+ */
+ function replaceWith($rootElement, elementsToRemove, newNode) {
+ var firstElementToRemove = elementsToRemove[0],
+ removeCount = elementsToRemove.length,
+ parent = firstElementToRemove.parentNode,
+ i, ii;
+
+ if ($rootElement) {
+ for (i = 0, ii = $rootElement.length; i < ii; i++) {
+ if ($rootElement[i] == firstElementToRemove) {
+ $rootElement[i++] = newNode;
+ for (var j = i, j2 = j + removeCount - 1,
+ jj = $rootElement.length;
+ j < jj; j++, j2++) {
+ if (j2 < jj) {
+ $rootElement[j] = $rootElement[j2];
+ } else {
+ delete $rootElement[j];
+ }
+ }
+ $rootElement.length -= removeCount - 1;
+
+ // If the replaced element is also the jQuery .context then replace it
+ // .context is a deprecated jQuery api, so we should set it only when jQuery set it
+ // http://api.jquery.com/context/
+ if ($rootElement.context === firstElementToRemove) {
+ $rootElement.context = newNode;
+ }
+ break;
+ }
+ }
+ }
+
+ if (parent) {
+ parent.replaceChild(newNode, firstElementToRemove);
+ }
+
+ // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild(firstElementToRemove);
+
+ // Copy over user data (that includes Angular's $scope etc.). Don't copy private
+ // data here because there's no public interface in jQuery to do that and copying over
+ // event listeners (which is the main use of private data) wouldn't work anyway.
+ jqLite(newNode).data(jqLite(firstElementToRemove).data());
+
+ // Remove data of the replaced element. We cannot just call .remove()
+ // on the element it since that would deallocate scope that is needed
+ // for the new node. Instead, remove the data "manually".
+ if (!jQuery) {
+ delete jqLite.cache[firstElementToRemove[jqLite.expando]];
+ } else {
+ // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
+ // the replaced element. The cleanData version monkey-patched by Angular would cause
+ // the scope to be trashed and we do need the very same scope to work with the new
+ // element. However, we cannot just cache the non-patched version and use it here as
+ // that would break if another library patches the method after Angular does (one
+ // example is jQuery UI). Instead, set a flag indicating scope destroying should be
+ // skipped this one time.
+ skipDestroyOnNextJQueryCleanData = true;
+ jQuery.cleanData([firstElementToRemove]);
+ }
+
+ for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
+ var element = elementsToRemove[k];
+ jqLite(element).remove(); // must do this way to clean up expando
+ fragment.appendChild(element);
+ delete elementsToRemove[k];
+ }
+
+ elementsToRemove[0] = newNode;
+ elementsToRemove.length = 1;
+ }
+
+
+ function cloneAndAnnotateFn(fn, annotation) {
+ return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
+ }
+
+
+ function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
+ try {
+ linkFn(scope, $element, attrs, controllers, transcludeFn);
+ } catch (e) {
+ $exceptionHandler(e, startingTag($element));
+ }
+ }
+ }];
+}
+
+var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
+/**
+ * Converts all accepted directives format into proper directive name.
+ * @param name Name to normalize
+ */
+function directiveNormalize(name) {
+ return camelCase(name.replace(PREFIX_REGEXP, ''));
+}
+
+/**
+ * @ngdoc type
+ * @name $compile.directive.Attributes
+ *
+ * @description
+ * A shared object between directive compile / linking functions which contains normalized DOM
+ * element attributes. The values reflect current binding state `{{ }}`. The normalization is
+ * needed since all of these are treated as equivalent in Angular:
+ *
+ * ```
+ * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
+ * ```
+ */
+
+/**
+ * @ngdoc property
+ * @name $compile.directive.Attributes#$attr
+ *
+ * @description
+ * A map of DOM element attribute names to the normalized name. This is
+ * needed to do reverse lookup from normalized name back to actual name.
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$set
+ * @kind function
+ *
+ * @description
+ * Set DOM element attribute value.
+ *
+ *
+ * @param {string} name Normalized element attribute name of the property to modify. The name is
+ * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
+ * property to the original name.
+ * @param {string} value Value to set the attribute to. The value can be an interpolated string.
+ */
+
+
+
+/**
+ * Closure compiler type information
+ */
+
+function nodesetLinkingFn(
+ /* angular.Scope */ scope,
+ /* NodeList */ nodeList,
+ /* Element */ rootElement,
+ /* function(Function) */ boundTranscludeFn
+) {}
+
+function directiveLinkingFn(
+ /* nodesetLinkingFn */ nodesetLinkingFn,
+ /* angular.Scope */ scope,
+ /* Node */ node,
+ /* Element */ rootElement,
+ /* function(Function) */ boundTranscludeFn
+) {}
+
+function tokenDifference(str1, str2) {
+ var values = '',
+ tokens1 = str1.split(/\s+/),
+ tokens2 = str2.split(/\s+/);
+
+ outer:
+ for (var i = 0; i < tokens1.length; i++) {
+ var token = tokens1[i];
+ for (var j = 0; j < tokens2.length; j++) {
+ if (token == tokens2[j]) continue outer;
+ }
+ values += (values.length > 0 ? ' ' : '') + token;
+ }
+ return values;
+}
+
+function removeComments(jqNodes) {
+ jqNodes = jqLite(jqNodes);
+ var i = jqNodes.length;
+
+ if (i <= 1) {
+ return jqNodes;
+ }
+
+ while (i--) {
+ var node = jqNodes[i];
+ if (node.nodeType === NODE_TYPE_COMMENT) {
+ splice.call(jqNodes, i, 1);
+ }
+ }
+ return jqNodes;
+}
+
+/**
+ * @ngdoc provider
+ * @name $controllerProvider
+ * @description
+ * The {@link ng.$controller $controller service} is used by Angular to create new
+ * controllers.
+ *
+ * This provider allows controller registration via the
+ * {@link ng.$controllerProvider#register register} method.
+ */
+function $ControllerProvider() {
+ var controllers = {},
+ globals = false,
+ CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
+
+
+ /**
+ * @ngdoc method
+ * @name $controllerProvider#register
+ * @param {string|Object} name Controller name, or an object map of controllers where the keys are
+ * the names and the values are the constructors.
+ * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
+ * annotations in the array notation).
+ */
+ this.register = function(name, constructor) {
+ assertNotHasOwnProperty(name, 'controller');
+ if (isObject(name)) {
+ extend(controllers, name);
+ } else {
+ controllers[name] = constructor;
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $controllerProvider#allowGlobals
+ * @description If called, allows `$controller` to find controller constructors on `window`
+ */
+ this.allowGlobals = function() {
+ globals = true;
+ };
+
+
+ this.$get = ['$injector', '$window', function($injector, $window) {
+
+ /**
+ * @ngdoc service
+ * @name $controller
+ * @requires $injector
+ *
+ * @param {Function|string} constructor If called with a function then it's considered to be the
+ * controller constructor function. Otherwise it's considered to be a string which is used
+ * to retrieve the controller constructor using the following steps:
+ *
+ * * check if a controller with given name is registered via `$controllerProvider`
+ * * check if evaluating the string on the current scope returns a constructor
+ * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
+ * `window` object (not recommended)
+ *
+ * The string can use the `controller as property` syntax, where the controller instance is published
+ * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
+ * to work correctly.
+ *
+ * @param {Object} locals Injection locals for Controller.
+ * @return {Object} Instance of given controller.
+ *
+ * @description
+ * `$controller` service is responsible for instantiating controllers.
+ *
+ * It's just a simple call to {@link auto.$injector $injector}, but extracted into
+ * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
+ */
+ return function(expression, locals, later, ident) {
+ // PRIVATE API:
+ // param `later` --- indicates that the controller's constructor is invoked at a later time.
+ // If true, $controller will allocate the object with the correct
+ // prototype chain, but will not invoke the controller until a returned
+ // callback is invoked.
+ // param `ident` --- An optional label which overrides the label parsed from the controller
+ // expression, if any.
+ var instance, match, constructor, identifier;
+ later = later === true;
+ if (ident && isString(ident)) {
+ identifier = ident;
+ }
+
+ if (isString(expression)) {
+ match = expression.match(CNTRL_REG),
+ constructor = match[1],
+ identifier = identifier || match[3];
+ expression = controllers.hasOwnProperty(constructor)
+ ? controllers[constructor]
+ : getter(locals.$scope, constructor, true) ||
+ (globals ? getter($window, constructor, true) : undefined);
+
+ assertArgFn(expression, constructor, true);
+ }
+
+ if (later) {
+ // Instantiate controller later:
+ // This machinery is used to create an instance of the object before calling the
+ // controller's constructor itself.
+ //
+ // This allows properties to be added to the controller before the constructor is
+ // invoked. Primarily, this is used for isolate scope bindings in $compile.
+ //
+ // This feature is not intended for use by applications, and is thus not documented
+ // publicly.
+ // Object creation: http://jsperf.com/create-constructor/2
+ var controllerPrototype = (isArray(expression) ?
+ expression[expression.length - 1] : expression).prototype;
+ instance = Object.create(controllerPrototype);
+
+ if (identifier) {
+ addIdentifier(locals, identifier, instance, constructor || expression.name);
+ }
+
+ return extend(function() {
+ $injector.invoke(expression, instance, locals, constructor);
+ return instance;
+ }, {
+ instance: instance,
+ identifier: identifier
+ });
+ }
+
+ instance = $injector.instantiate(expression, locals, constructor);
+
+ if (identifier) {
+ addIdentifier(locals, identifier, instance, constructor || expression.name);
+ }
+
+ return instance;
+ };
+
+ function addIdentifier(locals, identifier, instance, name) {
+ if (!(locals && isObject(locals.$scope))) {
+ throw minErr('$controller')('noscp',
+ "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
+ name, identifier);
+ }
+
+ locals.$scope[identifier] = instance;
+ }
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $document
+ * @requires $window
+ *
+ * @description
+ * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
+ *
+ * @example
+ <example module="documentExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <p>$document title: <b ng-bind="title"></b></p>
+ <p>window.document title: <b ng-bind="windowTitle"></b></p>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('documentExample', [])
+ .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
+ $scope.title = $document[0].title;
+ $scope.windowTitle = angular.element(window.document)[0].title;
+ }]);
+ </file>
+ </example>
+ */
+function $DocumentProvider() {
+ this.$get = ['$window', function(window) {
+ return jqLite(window.document);
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $exceptionHandler
+ * @requires ng.$log
+ *
+ * @description
+ * Any uncaught exception in angular expressions is delegated to this service.
+ * The default implementation simply delegates to `$log.error` which logs it into
+ * the browser console.
+ *
+ * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
+ * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
+ *
+ * ## Example:
+ *
+ * ```js
+ * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
+ * return function(exception, cause) {
+ * exception.message += ' (caused by "' + cause + '")';
+ * throw exception;
+ * };
+ * });
+ * ```
+ *
+ * This example will override the normal action of `$exceptionHandler`, to make angular
+ * exceptions fail hard when they happen, instead of just logging to the console.
+ *
+ * <hr />
+ * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
+ * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
+ * (unless executed during a digest).
+ *
+ * If you wish, you can manually delegate exceptions, e.g.
+ * `try { ... } catch(e) { $exceptionHandler(e); }`
+ *
+ * @param {Error} exception Exception associated with the error.
+ * @param {string=} cause optional information about the context in which
+ * the error was thrown.
+ *
+ */
+function $ExceptionHandlerProvider() {
+ this.$get = ['$log', function($log) {
+ return function(exception, cause) {
+ $log.error.apply($log, arguments);
+ };
+ }];
+}
+
+var APPLICATION_JSON = 'application/json';
+var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
+var JSON_START = /^\[|^\{(?!\{)/;
+var JSON_ENDS = {
+ '[': /]$/,
+ '{': /}$/
+};
+var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
+
+function defaultHttpResponseTransform(data, headers) {
+ if (isString(data)) {
+ // Strip json vulnerability protection prefix and trim whitespace
+ var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim();
+
+ if (tempData) {
+ var contentType = headers('Content-Type');
+ if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {
+ data = fromJson(tempData);
+ }
+ }
+ }
+
+ return data;
+}
+
+function isJsonLike(str) {
+ var jsonStart = str.match(JSON_START);
+ return jsonStart && JSON_ENDS[jsonStart[0]].test(str);
+}
+
+/**
+ * Parse headers into key value object
+ *
+ * @param {string} headers Raw headers as a string
+ * @returns {Object} Parsed headers as key value object
+ */
+function parseHeaders(headers) {
+ var parsed = createMap(), key, val, i;
+
+ if (!headers) return parsed;
+
+ forEach(headers.split('\n'), function(line) {
+ i = line.indexOf(':');
+ key = lowercase(trim(line.substr(0, i)));
+ val = trim(line.substr(i + 1));
+
+ if (key) {
+ parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+ }
+ });
+
+ return parsed;
+}
+
+
+/**
+ * Returns a function that provides access to parsed headers.
+ *
+ * Headers are lazy parsed when first requested.
+ * @see parseHeaders
+ *
+ * @param {(string|Object)} headers Headers to provide access to.
+ * @returns {function(string=)} Returns a getter function which if called with:
+ *
+ * - if called with single an argument returns a single header value or null
+ * - if called with no arguments returns an object containing all headers.
+ */
+function headersGetter(headers) {
+ var headersObj = isObject(headers) ? headers : undefined;
+
+ return function(name) {
+ if (!headersObj) headersObj = parseHeaders(headers);
+
+ if (name) {
+ var value = headersObj[lowercase(name)];
+ if (value === void 0) {
+ value = null;
+ }
+ return value;
+ }
+
+ return headersObj;
+ };
+}
+
+
+/**
+ * Chain all given functions
+ *
+ * This function is used for both request and response transforming
+ *
+ * @param {*} data Data to transform.
+ * @param {function(string=)} headers HTTP headers getter fn.
+ * @param {number} status HTTP status code of the response.
+ * @param {(Function|Array.<Function>)} fns Function or an array of functions.
+ * @returns {*} Transformed data.
+ */
+function transformData(data, headers, status, fns) {
+ if (isFunction(fns))
+ return fns(data, headers, status);
+
+ forEach(fns, function(fn) {
+ data = fn(data, headers, status);
+ });
+
+ return data;
+}
+
+
+function isSuccess(status) {
+ return 200 <= status && status < 300;
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $httpProvider
+ * @description
+ * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
+ * */
+function $HttpProvider() {
+ /**
+ * @ngdoc property
+ * @name $httpProvider#defaults
+ * @description
+ *
+ * Object containing default values for all {@link ng.$http $http} requests.
+ *
+ * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
+ * that will provide the cache for all requests who set their `cache` property to `true`.
+ * If you set the `default.cache = false` then only requests that specify their own custom
+ * cache object will be cached. See {@link $http#caching $http Caching} for more information.
+ *
+ * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
+ * Defaults value is `'XSRF-TOKEN'`.
+ *
+ * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
+ * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
+ *
+ * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
+ * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
+ * setting default headers.
+ * - **`defaults.headers.common`**
+ * - **`defaults.headers.post`**
+ * - **`defaults.headers.put`**
+ * - **`defaults.headers.patch`**
+ *
+ **/
+ var defaults = this.defaults = {
+ // transform incoming response data
+ transformResponse: [defaultHttpResponseTransform],
+
+ // transform outgoing request data
+ transformRequest: [function(d) {
+ return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d;
+ }],
+
+ // default headers
+ headers: {
+ common: {
+ 'Accept': 'application/json, text/plain, */*'
+ },
+ post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+ put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+ patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
+ },
+
+ xsrfCookieName: 'XSRF-TOKEN',
+ xsrfHeaderName: 'X-XSRF-TOKEN'
+ };
+
+ var useApplyAsync = false;
+ /**
+ * @ngdoc method
+ * @name $httpProvider#useApplyAsync
+ * @description
+ *
+ * Configure $http service to combine processing of multiple http responses received at around
+ * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in
+ * significant performance improvement for bigger applications that make many HTTP requests
+ * concurrently (common during application bootstrap).
+ *
+ * Defaults to false. If no value is specifed, returns the current configured value.
+ *
+ * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
+ * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
+ * to load and share the same digest cycle.
+ *
+ * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
+ * otherwise, returns the current configured value.
+ **/
+ this.useApplyAsync = function(value) {
+ if (isDefined(value)) {
+ useApplyAsync = !!value;
+ return this;
+ }
+ return useApplyAsync;
+ };
+
+ /**
+ * @ngdoc property
+ * @name $httpProvider#interceptors
+ * @description
+ *
+ * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
+ * pre-processing of request or postprocessing of responses.
+ *
+ * These service factories are ordered by request, i.e. they are applied in the same order as the
+ * array, on request, but reverse order, on response.
+ *
+ * {@link ng.$http#interceptors Interceptors detailed info}
+ **/
+ var interceptorFactories = this.interceptors = [];
+
+ this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
+ function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {
+
+ var defaultCache = $cacheFactory('$http');
+
+ /**
+ * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
+ * The reversal is needed so that we can build up the interception chain around the
+ * server request.
+ */
+ var reversedInterceptors = [];
+
+ forEach(interceptorFactories, function(interceptorFactory) {
+ reversedInterceptors.unshift(isString(interceptorFactory)
+ ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
+ });
+
+ /**
+ * @ngdoc service
+ * @kind function
+ * @name $http
+ * @requires ng.$httpBackend
+ * @requires $cacheFactory
+ * @requires $rootScope
+ * @requires $q
+ * @requires $injector
+ *
+ * @description
+ * The `$http` service is a core Angular service that facilitates communication with the remote
+ * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
+ * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
+ *
+ * For unit testing applications that use `$http` service, see
+ * {@link ngMock.$httpBackend $httpBackend mock}.
+ *
+ * For a higher level of abstraction, please check out the {@link ngResource.$resource
+ * $resource} service.
+ *
+ * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
+ * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
+ * it is important to familiarize yourself with these APIs and the guarantees they provide.
+ *
+ *
+ * ## General usage
+ * The `$http` service is a function which takes a single argument — a configuration object —
+ * that is used to generate an HTTP request and returns a {@link ng.$q promise}
+ * with two $http specific methods: `success` and `error`.
+ *
+ * ```js
+ * // Simple GET request example :
+ * $http.get('/someUrl').
+ * success(function(data, status, headers, config) {
+ * // this callback will be called asynchronously
+ * // when the response is available
+ * }).
+ * error(function(data, status, headers, config) {
+ * // called asynchronously if an error occurs
+ * // or server returns response with an error status.
+ * });
+ * ```
+ *
+ * ```js
+ * // Simple POST request example (passing data) :
+ * $http.post('/someUrl', {msg:'hello word!'}).
+ * success(function(data, status, headers, config) {
+ * // this callback will be called asynchronously
+ * // when the response is available
+ * }).
+ * error(function(data, status, headers, config) {
+ * // called asynchronously if an error occurs
+ * // or server returns response with an error status.
+ * });
+ * ```
+ *
+ *
+ * Since the returned value of calling the $http function is a `promise`, you can also use
+ * the `then` method to register callbacks, and these callbacks will receive a single argument –
+ * an object representing the response. See the API signature and type info below for more
+ * details.
+ *
+ * A response status code between 200 and 299 is considered a success status and
+ * will result in the success callback being called. Note that if the response is a redirect,
+ * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
+ * called for such responses.
+ *
+ * ## Writing Unit Tests that use $http
+ * When unit testing (using {@link ngMock ngMock}), it is necessary to call
+ * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
+ * request using trained responses.
+ *
+ * ```
+ * $httpBackend.expectGET(...);
+ * $http.get(...);
+ * $httpBackend.flush();
+ * ```
+ *
+ * ## Shortcut methods
+ *
+ * Shortcut methods are also available. All shortcut methods require passing in the URL, and
+ * request data must be passed in for POST/PUT requests.
+ *
+ * ```js
+ * $http.get('/someUrl').success(successCallback);
+ * $http.post('/someUrl', data).success(successCallback);
+ * ```
+ *
+ * Complete list of shortcut methods:
+ *
+ * - {@link ng.$http#get $http.get}
+ * - {@link ng.$http#head $http.head}
+ * - {@link ng.$http#post $http.post}
+ * - {@link ng.$http#put $http.put}
+ * - {@link ng.$http#delete $http.delete}
+ * - {@link ng.$http#jsonp $http.jsonp}
+ * - {@link ng.$http#patch $http.patch}
+ *
+ *
+ * ## Setting HTTP Headers
+ *
+ * The $http service will automatically add certain HTTP headers to all requests. These defaults
+ * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
+ * object, which currently contains this default configuration:
+ *
+ * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
+ * - `Accept: application/json, text/plain, * / *`
+ * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
+ * - `Content-Type: application/json`
+ * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
+ * - `Content-Type: application/json`
+ *
+ * To add or overwrite these defaults, simply add or remove a property from these configuration
+ * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
+ * with the lowercased HTTP method name as the key, e.g.
+ * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
+ *
+ * The defaults can also be set at runtime via the `$http.defaults` object in the same
+ * fashion. For example:
+ *
+ * ```
+ * module.run(function($http) {
+ * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
+ * });
+ * ```
+ *
+ * In addition, you can supply a `headers` property in the config object passed when
+ * calling `$http(config)`, which overrides the defaults without changing them globally.
+ *
+ * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
+ * Use the `headers` property, setting the desired header to `undefined`. For example:
+ *
+ * ```js
+ * var req = {
+ * method: 'POST',
+ * url: 'http://example.com',
+ * headers: {
+ * 'Content-Type': undefined
+ * },
+ * data: { test: 'test' },
+ * }
+ *
+ * $http(req).success(function(){...}).error(function(){...});
+ * ```
+ *
+ * ## Transforming Requests and Responses
+ *
+ * Both requests and responses can be transformed using transformation functions: `transformRequest`
+ * and `transformResponse`. These properties can be a single function that returns
+ * the transformed value (`{function(data, headersGetter, status)`) or an array of such transformation functions,
+ * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
+ *
+ * ### Default Transformations
+ *
+ * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
+ * `defaults.transformResponse` properties. If a request does not provide its own transformations
+ * then these will be applied.
+ *
+ * You can augment or replace the default transformations by modifying these properties by adding to or
+ * replacing the array.
+ *
+ * Angular provides the following default transformations:
+ *
+ * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
+ *
+ * - If the `data` property of the request configuration object contains an object, serialize it
+ * into JSON format.
+ *
+ * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
+ *
+ * - If XSRF prefix is detected, strip it (see Security Considerations section below).
+ * - If JSON response is detected, deserialize it using a JSON parser.
+ *
+ *
+ * ### Overriding the Default Transformations Per Request
+ *
+ * If you wish override the request/response transformations only for a single request then provide
+ * `transformRequest` and/or `transformResponse` properties on the configuration object passed
+ * into `$http`.
+ *
+ * Note that if you provide these properties on the config object the default transformations will be
+ * overwritten. If you wish to augment the default transformations then you must include them in your
+ * local transformation array.
+ *
+ * The following code demonstrates adding a new response transformation to be run after the default response
+ * transformations have been run.
+ *
+ * ```js
+ * function appendTransform(defaults, transform) {
+ *
+ * // We can't guarantee that the default transformation is an array
+ * defaults = angular.isArray(defaults) ? defaults : [defaults];
+ *
+ * // Append the new transformation to the defaults
+ * return defaults.concat(transform);
+ * }
+ *
+ * $http({
+ * url: '...',
+ * method: 'GET',
+ * transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
+ * return doTransform(value);
+ * })
+ * });
+ * ```
+ *
+ *
+ * ## Caching
+ *
+ * To enable caching, set the request configuration `cache` property to `true` (to use default
+ * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
+ * When the cache is enabled, `$http` stores the response from the server in the specified
+ * cache. The next time the same request is made, the response is served from the cache without
+ * sending a request to the server.
+ *
+ * Note that even if the response is served from cache, delivery of the data is asynchronous in
+ * the same way that real requests are.
+ *
+ * If there are multiple GET requests for the same URL that should be cached using the same
+ * cache, but the cache is not populated yet, only one request to the server will be made and
+ * the remaining requests will be fulfilled using the response from the first request.
+ *
+ * You can change the default cache to a new object (built with
+ * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
+ * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set
+ * their `cache` property to `true` will now use this cache object.
+ *
+ * If you set the default cache to `false` then only requests that specify their own custom
+ * cache object will be cached.
+ *
+ * ## Interceptors
+ *
+ * Before you start creating interceptors, be sure to understand the
+ * {@link ng.$q $q and deferred/promise APIs}.
+ *
+ * For purposes of global error handling, authentication, or any kind of synchronous or
+ * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
+ * able to intercept requests before they are handed to the server and
+ * responses before they are handed over to the application code that
+ * initiated these requests. The interceptors leverage the {@link ng.$q
+ * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
+ *
+ * The interceptors are service factories that are registered with the `$httpProvider` by
+ * adding them to the `$httpProvider.interceptors` array. The factory is called and
+ * injected with dependencies (if specified) and returns the interceptor.
+ *
+ * There are two kinds of interceptors (and two kinds of rejection interceptors):
+ *
+ * * `request`: interceptors get called with a http `config` object. The function is free to
+ * modify the `config` object or create a new one. The function needs to return the `config`
+ * object directly, or a promise containing the `config` or a new `config` object.
+ * * `requestError`: interceptor gets called when a previous interceptor threw an error or
+ * resolved with a rejection.
+ * * `response`: interceptors get called with http `response` object. The function is free to
+ * modify the `response` object or create a new one. The function needs to return the `response`
+ * object directly, or as a promise containing the `response` or a new `response` object.
+ * * `responseError`: interceptor gets called when a previous interceptor threw an error or
+ * resolved with a rejection.
+ *
+ *
+ * ```js
+ * // register the interceptor as a service
+ * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+ * return {
+ * // optional method
+ * 'request': function(config) {
+ * // do something on success
+ * return config;
+ * },
+ *
+ * // optional method
+ * 'requestError': function(rejection) {
+ * // do something on error
+ * if (canRecover(rejection)) {
+ * return responseOrNewPromise
+ * }
+ * return $q.reject(rejection);
+ * },
+ *
+ *
+ *
+ * // optional method
+ * 'response': function(response) {
+ * // do something on success
+ * return response;
+ * },
+ *
+ * // optional method
+ * 'responseError': function(rejection) {
+ * // do something on error
+ * if (canRecover(rejection)) {
+ * return responseOrNewPromise
+ * }
+ * return $q.reject(rejection);
+ * }
+ * };
+ * });
+ *
+ * $httpProvider.interceptors.push('myHttpInterceptor');
+ *
+ *
+ * // alternatively, register the interceptor via an anonymous factory
+ * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
+ * return {
+ * 'request': function(config) {
+ * // same as above
+ * },
+ *
+ * 'response': function(response) {
+ * // same as above
+ * }
+ * };
+ * });
+ * ```
+ *
+ * ## Security Considerations
+ *
+ * When designing web applications, consider security threats from:
+ *
+ * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+ * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
+ *
+ * Both server and the client must cooperate in order to eliminate these threats. Angular comes
+ * pre-configured with strategies that address these issues, but for this to work backend server
+ * cooperation is required.
+ *
+ * ### JSON Vulnerability Protection
+ *
+ * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+ * allows third party website to turn your JSON resource URL into
+ * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
+ * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
+ * Angular will automatically strip the prefix before processing it as JSON.
+ *
+ * For example if your server needs to return:
+ * ```js
+ * ['one','two']
+ * ```
+ *
+ * which is vulnerable to attack, your server can return:
+ * ```js
+ * )]}',
+ * ['one','two']
+ * ```
+ *
+ * Angular will strip the prefix, before processing the JSON.
+ *
+ *
+ * ### Cross Site Request Forgery (XSRF) Protection
+ *
+ * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
+ * an unauthorized site can gain your user's private data. Angular provides a mechanism
+ * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
+ * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
+ * JavaScript that runs on your domain could read the cookie, your server can be assured that
+ * the XHR came from JavaScript running on your domain. The header will not be set for
+ * cross-domain requests.
+ *
+ * To take advantage of this, your server needs to set a token in a JavaScript readable session
+ * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
+ * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
+ * that only JavaScript running on your domain could have sent the request. The token must be
+ * unique for each user and must be verifiable by the server (to prevent the JavaScript from
+ * making up its own tokens). We recommend that the token is a digest of your site's
+ * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
+ * for added security.
+ *
+ * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
+ * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
+ * or the per-request config object.
+ *
+ *
+ * @param {object} config Object describing the request to be made and how it should be
+ * processed. The object has following properties:
+ *
+ * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
+ * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
+ * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned
+ * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be
+ * JSONified.
+ * - **data** – `{string|Object}` – Data to be sent as the request message data.
+ * - **headers** – `{Object}` – Map of strings or functions which return strings representing
+ * HTTP headers to send to the server. If the return value of a function is null, the
+ * header will not be sent.
+ * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
+ * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
+ * - **transformRequest** –
+ * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+ * transform function or an array of such functions. The transform function takes the http
+ * request body and headers and returns its transformed (typically serialized) version.
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
+ * Overriding the Default Transformations}
+ * - **transformResponse** –
+ * `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` –
+ * transform function or an array of such functions. The transform function takes the http
+ * response body, headers and status and returns its transformed (typically deserialized) version.
+ * See {@link ng.$http#overriding-the-default-transformations-per-request
+ * Overriding the Default Transformations}
+ * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
+ * GET request, otherwise if a cache instance built with
+ * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+ * caching.
+ * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
+ * that should abort the request when resolved.
+ * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
+ * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
+ * for more information.
+ * - **responseType** - `{string}` - see
+ * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
+ *
+ * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the
+ * standard `then` method and two http specific methods: `success` and `error`. The `then`
+ * method takes two arguments a success and an error callback which will be called with a
+ * response object. The `success` and `error` methods take a single argument - a function that
+ * will be called when the request succeeds or fails respectively. The arguments passed into
+ * these functions are destructured representation of the response object passed into the
+ * `then` method. The response object has these properties:
+ *
+ * - **data** – `{string|Object}` – The response body transformed with the transform
+ * functions.
+ * - **status** – `{number}` – HTTP status code of the response.
+ * - **headers** – `{function([headerName])}` – Header getter function.
+ * - **config** – `{Object}` – The configuration object that was used to generate the request.
+ * - **statusText** – `{string}` – HTTP status text of the response.
+ *
+ * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
+ * requests. This is primarily meant to be used for debugging purposes.
+ *
+ *
+ * @example
+<example module="httpExample">
+<file name="index.html">
+ <div ng-controller="FetchController">
+ <select ng-model="method">
+ <option>GET</option>
+ <option>JSONP</option>
+ </select>
+ <input type="text" ng-model="url" size="80"/>
+ <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
+ <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
+ <button id="samplejsonpbtn"
+ ng-click="updateModel('JSONP',
+ 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
+ Sample JSONP
+ </button>
+ <button id="invalidjsonpbtn"
+ ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
+ Invalid JSONP
+ </button>
+ <pre>http status code: {{status}}</pre>
+ <pre>http response data: {{data}}</pre>
+ </div>
+</file>
+<file name="script.js">
+ angular.module('httpExample', [])
+ .controller('FetchController', ['$scope', '$http', '$templateCache',
+ function($scope, $http, $templateCache) {
+ $scope.method = 'GET';
+ $scope.url = 'http-hello.html';
+
+ $scope.fetch = function() {
+ $scope.code = null;
+ $scope.response = null;
+
+ $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
+ success(function(data, status) {
+ $scope.status = status;
+ $scope.data = data;
+ }).
+ error(function(data, status) {
+ $scope.data = data || "Request failed";
+ $scope.status = status;
+ });
+ };
+
+ $scope.updateModel = function(method, url) {
+ $scope.method = method;
+ $scope.url = url;
+ };
+ }]);
+</file>
+<file name="http-hello.html">
+ Hello, $http!
+</file>
+<file name="protractor.js" type="protractor">
+ var status = element(by.binding('status'));
+ var data = element(by.binding('data'));
+ var fetchBtn = element(by.id('fetchbtn'));
+ var sampleGetBtn = element(by.id('samplegetbtn'));
+ var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
+ var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
+
+ it('should make an xhr GET request', function() {
+ sampleGetBtn.click();
+ fetchBtn.click();
+ expect(status.getText()).toMatch('200');
+ expect(data.getText()).toMatch(/Hello, \$http!/);
+ });
+
+// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
+// it('should make a JSONP request to angularjs.org', function() {
+// sampleJsonpBtn.click();
+// fetchBtn.click();
+// expect(status.getText()).toMatch('200');
+// expect(data.getText()).toMatch(/Super Hero!/);
+// });
+
+ it('should make JSONP request to invalid URL and invoke the error handler',
+ function() {
+ invalidJsonpBtn.click();
+ fetchBtn.click();
+ expect(status.getText()).toMatch('0');
+ expect(data.getText()).toMatch('Request failed');
+ });
+</file>
+</example>
+ */
+ function $http(requestConfig) {
+
+ if (!angular.isObject(requestConfig)) {
+ throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);
+ }
+
+ var config = extend({
+ method: 'get',
+ transformRequest: defaults.transformRequest,
+ transformResponse: defaults.transformResponse
+ }, requestConfig);
+
+ config.headers = mergeHeaders(requestConfig);
+ config.method = uppercase(config.method);
+
+ var serverRequest = function(config) {
+ var headers = config.headers;
+ var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);
+
+ // strip content-type if data is undefined
+ if (isUndefined(reqData)) {
+ forEach(headers, function(value, header) {
+ if (lowercase(header) === 'content-type') {
+ delete headers[header];
+ }
+ });
+ }
+
+ if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
+ config.withCredentials = defaults.withCredentials;
+ }
+
+ // send request
+ return sendReq(config, reqData).then(transformResponse, transformResponse);
+ };
+
+ var chain = [serverRequest, undefined];
+ var promise = $q.when(config);
+
+ // apply interceptors
+ forEach(reversedInterceptors, function(interceptor) {
+ if (interceptor.request || interceptor.requestError) {
+ chain.unshift(interceptor.request, interceptor.requestError);
+ }
+ if (interceptor.response || interceptor.responseError) {
+ chain.push(interceptor.response, interceptor.responseError);
+ }
+ });
+
+ while (chain.length) {
+ var thenFn = chain.shift();
+ var rejectFn = chain.shift();
+
+ promise = promise.then(thenFn, rejectFn);
+ }
+
+ promise.success = function(fn) {
+ promise.then(function(response) {
+ fn(response.data, response.status, response.headers, config);
+ });
+ return promise;
+ };
+
+ promise.error = function(fn) {
+ promise.then(null, function(response) {
+ fn(response.data, response.status, response.headers, config);
+ });
+ return promise;
+ };
+
+ return promise;
+
+ function transformResponse(response) {
+ // make a copy since the response must be cacheable
+ var resp = extend({}, response);
+ if (!response.data) {
+ resp.data = response.data;
+ } else {
+ resp.data = transformData(response.data, response.headers, response.status, config.transformResponse);
+ }
+ return (isSuccess(response.status))
+ ? resp
+ : $q.reject(resp);
+ }
+
+ function executeHeaderFns(headers) {
+ var headerContent, processedHeaders = {};
+
+ forEach(headers, function(headerFn, header) {
+ if (isFunction(headerFn)) {
+ headerContent = headerFn();
+ if (headerContent != null) {
+ processedHeaders[header] = headerContent;
+ }
+ } else {
+ processedHeaders[header] = headerFn;
+ }
+ });
+
+ return processedHeaders;
+ }
+
+ function mergeHeaders(config) {
+ var defHeaders = defaults.headers,
+ reqHeaders = extend({}, config.headers),
+ defHeaderName, lowercaseDefHeaderName, reqHeaderName;
+
+ defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
+
+ // using for-in instead of forEach to avoid unecessary iteration after header has been found
+ defaultHeadersIteration:
+ for (defHeaderName in defHeaders) {
+ lowercaseDefHeaderName = lowercase(defHeaderName);
+
+ for (reqHeaderName in reqHeaders) {
+ if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
+ continue defaultHeadersIteration;
+ }
+ }
+
+ reqHeaders[defHeaderName] = defHeaders[defHeaderName];
+ }
+
+ // execute if header value is a function for merged headers
+ return executeHeaderFns(reqHeaders);
+ }
+ }
+
+ $http.pendingRequests = [];
+
+ /**
+ * @ngdoc method
+ * @name $http#get
+ *
+ * @description
+ * Shortcut method to perform `GET` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+
+ /**
+ * @ngdoc method
+ * @name $http#delete
+ *
+ * @description
+ * Shortcut method to perform `DELETE` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+
+ /**
+ * @ngdoc method
+ * @name $http#head
+ *
+ * @description
+ * Shortcut method to perform `HEAD` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+
+ /**
+ * @ngdoc method
+ * @name $http#jsonp
+ *
+ * @description
+ * Shortcut method to perform `JSONP` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request.
+ * The name of the callback should be the string `JSON_CALLBACK`.
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+ createShortMethods('get', 'delete', 'head', 'jsonp');
+
+ /**
+ * @ngdoc method
+ * @name $http#post
+ *
+ * @description
+ * Shortcut method to perform `POST` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {*} data Request content
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+
+ /**
+ * @ngdoc method
+ * @name $http#put
+ *
+ * @description
+ * Shortcut method to perform `PUT` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {*} data Request content
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+
+ /**
+ * @ngdoc method
+ * @name $http#patch
+ *
+ * @description
+ * Shortcut method to perform `PATCH` request.
+ *
+ * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {*} data Request content
+ * @param {Object=} config Optional configuration object
+ * @returns {HttpPromise} Future object
+ */
+ createShortMethodsWithData('post', 'put', 'patch');
+
+ /**
+ * @ngdoc property
+ * @name $http#defaults
+ *
+ * @description
+ * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
+ * default headers, withCredentials as well as request and response transformations.
+ *
+ * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
+ */
+ $http.defaults = defaults;
+
+
+ return $http;
+
+
+ function createShortMethods(names) {
+ forEach(arguments, function(name) {
+ $http[name] = function(url, config) {
+ return $http(extend(config || {}, {
+ method: name,
+ url: url
+ }));
+ };
+ });
+ }
+
+
+ function createShortMethodsWithData(name) {
+ forEach(arguments, function(name) {
+ $http[name] = function(url, data, config) {
+ return $http(extend(config || {}, {
+ method: name,
+ url: url,
+ data: data
+ }));
+ };
+ });
+ }
+
+
+ /**
+ * Makes the request.
+ *
+ * !!! ACCESSES CLOSURE VARS:
+ * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
+ */
+ function sendReq(config, reqData) {
+ var deferred = $q.defer(),
+ promise = deferred.promise,
+ cache,
+ cachedResp,
+ reqHeaders = config.headers,
+ url = buildUrl(config.url, config.params);
+
+ $http.pendingRequests.push(config);
+ promise.then(removePendingReq, removePendingReq);
+
+
+ if ((config.cache || defaults.cache) && config.cache !== false &&
+ (config.method === 'GET' || config.method === 'JSONP')) {
+ cache = isObject(config.cache) ? config.cache
+ : isObject(defaults.cache) ? defaults.cache
+ : defaultCache;
+ }
+
+ if (cache) {
+ cachedResp = cache.get(url);
+ if (isDefined(cachedResp)) {
+ if (isPromiseLike(cachedResp)) {
+ // cached request has already been sent, but there is no response yet
+ cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);
+ } else {
+ // serving from cache
+ if (isArray(cachedResp)) {
+ resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
+ } else {
+ resolvePromise(cachedResp, 200, {}, 'OK');
+ }
+ }
+ } else {
+ // put the promise for the non-transformed response into cache as a placeholder
+ cache.put(url, promise);
+ }
+ }
+
+
+ // if we won't have the response in cache, set the xsrf headers and
+ // send the request to the backend
+ if (isUndefined(cachedResp)) {
+ var xsrfValue = urlIsSameOrigin(config.url)
+ ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
+ : undefined;
+ if (xsrfValue) {
+ reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
+ }
+
+ $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
+ config.withCredentials, config.responseType);
+ }
+
+ return promise;
+
+
+ /**
+ * Callback registered to $httpBackend():
+ * - caches the response if desired
+ * - resolves the raw $http promise
+ * - calls $apply
+ */
+ function done(status, response, headersString, statusText) {
+ if (cache) {
+ if (isSuccess(status)) {
+ cache.put(url, [status, response, parseHeaders(headersString), statusText]);
+ } else {
+ // remove promise from the cache
+ cache.remove(url);
+ }
+ }
+
+ function resolveHttpPromise() {
+ resolvePromise(response, status, headersString, statusText);
+ }
+
+ if (useApplyAsync) {
+ $rootScope.$applyAsync(resolveHttpPromise);
+ } else {
+ resolveHttpPromise();
+ if (!$rootScope.$$phase) $rootScope.$apply();
+ }
+ }
+
+
+ /**
+ * Resolves the raw $http promise.
+ */
+ function resolvePromise(response, status, headers, statusText) {
+ // normalize internal statuses to 0
+ status = Math.max(status, 0);
+
+ (isSuccess(status) ? deferred.resolve : deferred.reject)({
+ data: response,
+ status: status,
+ headers: headersGetter(headers),
+ config: config,
+ statusText: statusText
+ });
+ }
+
+ function resolvePromiseWithResult(result) {
+ resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);
+ }
+
+ function removePendingReq() {
+ var idx = $http.pendingRequests.indexOf(config);
+ if (idx !== -1) $http.pendingRequests.splice(idx, 1);
+ }
+ }
+
+
+ function buildUrl(url, params) {
+ if (!params) return url;
+ var parts = [];
+ forEachSorted(params, function(value, key) {
+ if (value === null || isUndefined(value)) return;
+ if (!isArray(value)) value = [value];
+
+ forEach(value, function(v) {
+ if (isObject(v)) {
+ if (isDate(v)) {
+ v = v.toISOString();
+ } else {
+ v = toJson(v);
+ }
+ }
+ parts.push(encodeUriQuery(key) + '=' +
+ encodeUriQuery(v));
+ });
+ });
+ if (parts.length > 0) {
+ url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
+ }
+ return url;
+ }
+ }];
+}
+
+function createXhr() {
+ return new window.XMLHttpRequest();
+}
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @requires $window
+ * @requires $document
+ *
+ * @description
+ * HTTP backend used by the {@link ng.$http service} that delegates to
+ * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
+ *
+ * You should never need to use this service directly, instead use the higher-level abstractions:
+ * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
+ *
+ * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
+ * $httpBackend} which can be trained with responses.
+ */
+function $HttpBackendProvider() {
+ this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
+ return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
+ }];
+}
+
+function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
+ // TODO(vojta): fix the signature
+ return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
+ $browser.$$incOutstandingRequestCount();
+ url = url || $browser.url();
+
+ if (lowercase(method) == 'jsonp') {
+ var callbackId = '_' + (callbacks.counter++).toString(36);
+ callbacks[callbackId] = function(data) {
+ callbacks[callbackId].data = data;
+ callbacks[callbackId].called = true;
+ };
+
+ var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
+ callbackId, function(status, text) {
+ completeRequest(callback, status, callbacks[callbackId].data, "", text);
+ callbacks[callbackId] = noop;
+ });
+ } else {
+
+ var xhr = createXhr();
+
+ xhr.open(method, url, true);
+ forEach(headers, function(value, key) {
+ if (isDefined(value)) {
+ xhr.setRequestHeader(key, value);
+ }
+ });
+
+ xhr.onload = function requestLoaded() {
+ var statusText = xhr.statusText || '';
+
+ // responseText is the old-school way of retrieving response (supported by IE8 & 9)
+ // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
+ var response = ('response' in xhr) ? xhr.response : xhr.responseText;
+
+ // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
+ var status = xhr.status === 1223 ? 204 : xhr.status;
+
+ // fix status code when it is 0 (0 status is undocumented).
+ // Occurs when accessing file resources or on Android 4.1 stock browser
+ // while retrieving files from application cache.
+ if (status === 0) {
+ status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
+ }
+
+ completeRequest(callback,
+ status,
+ response,
+ xhr.getAllResponseHeaders(),
+ statusText);
+ };
+
+ var requestError = function() {
+ // The response is always empty
+ // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
+ completeRequest(callback, -1, null, null, '');
+ };
+
+ xhr.onerror = requestError;
+ xhr.onabort = requestError;
+
+ if (withCredentials) {
+ xhr.withCredentials = true;
+ }
+
+ if (responseType) {
+ try {
+ xhr.responseType = responseType;
+ } catch (e) {
+ // WebKit added support for the json responseType value on 09/03/2013
+ // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
+ // known to throw when setting the value "json" as the response type. Other older
+ // browsers implementing the responseType
+ //
+ // The json response type can be ignored if not supported, because JSON payloads are
+ // parsed on the client-side regardless.
+ if (responseType !== 'json') {
+ throw e;
+ }
+ }
+ }
+
+ xhr.send(post || null);
+ }
+
+ if (timeout > 0) {
+ var timeoutId = $browserDefer(timeoutRequest, timeout);
+ } else if (isPromiseLike(timeout)) {
+ timeout.then(timeoutRequest);
+ }
+
+
+ function timeoutRequest() {
+ jsonpDone && jsonpDone();
+ xhr && xhr.abort();
+ }
+
+ function completeRequest(callback, status, response, headersString, statusText) {
+ // cancel timeout and subsequent timeout promise resolution
+ if (timeoutId !== undefined) {
+ $browserDefer.cancel(timeoutId);
+ }
+ jsonpDone = xhr = null;
+
+ callback(status, response, headersString, statusText);
+ $browser.$$completeOutstandingRequest(noop);
+ }
+ };
+
+ function jsonpReq(url, callbackId, done) {
+ // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:
+ // - fetches local scripts via XHR and evals them
+ // - adds and immediately removes script elements from the document
+ var script = rawDocument.createElement('script'), callback = null;
+ script.type = "text/javascript";
+ script.src = url;
+ script.async = true;
+
+ callback = function(event) {
+ removeEventListenerFn(script, "load", callback);
+ removeEventListenerFn(script, "error", callback);
+ rawDocument.body.removeChild(script);
+ script = null;
+ var status = -1;
+ var text = "unknown";
+
+ if (event) {
+ if (event.type === "load" && !callbacks[callbackId].called) {
+ event = { type: "error" };
+ }
+ text = event.type;
+ status = event.type === "error" ? 404 : 200;
+ }
+
+ if (done) {
+ done(status, text);
+ }
+ };
+
+ addEventListenerFn(script, "load", callback);
+ addEventListenerFn(script, "error", callback);
+ rawDocument.body.appendChild(script);
+ return callback;
+ }
+}
+
+var $interpolateMinErr = minErr('$interpolate');
+
+/**
+ * @ngdoc provider
+ * @name $interpolateProvider
+ *
+ * @description
+ *
+ * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
+ *
+ * @example
+<example module="customInterpolationApp">
+<file name="index.html">
+<script>
+ var customInterpolationApp = angular.module('customInterpolationApp', []);
+
+ customInterpolationApp.config(function($interpolateProvider) {
+ $interpolateProvider.startSymbol('//');
+ $interpolateProvider.endSymbol('//');
+ });
+
+
+ customInterpolationApp.controller('DemoController', function() {
+ this.label = "This binding is brought you by // interpolation symbols.";
+ });
+</script>
+<div ng-app="App" ng-controller="DemoController as demo">
+ //demo.label//
+</div>
+</file>
+<file name="protractor.js" type="protractor">
+ it('should interpolate binding with custom symbols', function() {
+ expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
+ });
+</file>
+</example>
+ */
+function $InterpolateProvider() {
+ var startSymbol = '{{';
+ var endSymbol = '}}';
+
+ /**
+ * @ngdoc method
+ * @name $interpolateProvider#startSymbol
+ * @description
+ * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
+ *
+ * @param {string=} value new value to set the starting symbol to.
+ * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+ */
+ this.startSymbol = function(value) {
+ if (value) {
+ startSymbol = value;
+ return this;
+ } else {
+ return startSymbol;
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $interpolateProvider#endSymbol
+ * @description
+ * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+ *
+ * @param {string=} value new value to set the ending symbol to.
+ * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+ */
+ this.endSymbol = function(value) {
+ if (value) {
+ endSymbol = value;
+ return this;
+ } else {
+ return endSymbol;
+ }
+ };
+
+
+ this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
+ var startSymbolLength = startSymbol.length,
+ endSymbolLength = endSymbol.length,
+ escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
+ escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
+
+ function escape(ch) {
+ return '\\\\\\' + ch;
+ }
+
+ /**
+ * @ngdoc service
+ * @name $interpolate
+ * @kind function
+ *
+ * @requires $parse
+ * @requires $sce
+ *
+ * @description
+ *
+ * Compiles a string with markup into an interpolation function. This service is used by the
+ * HTML {@link ng.$compile $compile} service for data binding. See
+ * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
+ * interpolation markup.
+ *
+ *
+ * ```js
+ * var $interpolate = ...; // injected
+ * var exp = $interpolate('Hello {{name | uppercase}}!');
+ * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');
+ * ```
+ *
+ * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
+ * `true`, the interpolation function will return `undefined` unless all embedded expressions
+ * evaluate to a value other than `undefined`.
+ *
+ * ```js
+ * var $interpolate = ...; // injected
+ * var context = {greeting: 'Hello', name: undefined };
+ *
+ * // default "forgiving" mode
+ * var exp = $interpolate('{{greeting}} {{name}}!');
+ * expect(exp(context)).toEqual('Hello !');
+ *
+ * // "allOrNothing" mode
+ * exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
+ * expect(exp(context)).toBeUndefined();
+ * context.name = 'Angular';
+ * expect(exp(context)).toEqual('Hello Angular!');
+ * ```
+ *
+ * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
+ *
+ * ####Escaped Interpolation
+ * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
+ * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
+ * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
+ * or binding.
+ *
+ * This enables web-servers to prevent script injection attacks and defacing attacks, to some
+ * degree, while also enabling code examples to work without relying on the
+ * {@link ng.directive:ngNonBindable ngNonBindable} directive.
+ *
+ * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
+ * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
+ * interpolation start/end markers with their escaped counterparts.**
+ *
+ * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
+ * output when the $interpolate service processes the text. So, for HTML elements interpolated
+ * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
+ * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
+ * this is typically useful only when user-data is used in rendering a template from the server, or
+ * when otherwise untrusted data is used by a directive.
+ *
+ * <example>
+ * <file name="index.html">
+ * <div ng-init="username='A user'">
+ * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
+ * </p>
+ * <p><strong>{{username}}</strong> attempts to inject code which will deface the
+ * application, but fails to accomplish their task, because the server has correctly
+ * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
+ * characters.</p>
+ * <p>Instead, the result of the attempted script injection is visible, and can be removed
+ * from the database by an administrator.</p>
+ * </div>
+ * </file>
+ * </example>
+ *
+ * @param {string} text The text with markup to interpolate.
+ * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
+ * embedded expression in order to return an interpolation function. Strings with no
+ * embedded expression will return null for the interpolation function.
+ * @param {string=} trustedContext when provided, the returned function passes the interpolated
+ * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
+ * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that
+ * provides Strict Contextual Escaping for details.
+ * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
+ * unless all embedded expressions evaluate to a value other than `undefined`.
+ * @returns {function(context)} an interpolation function which is used to compute the
+ * interpolated string. The function has these parameters:
+ *
+ * - `context`: evaluation context for all expressions embedded in the interpolated text
+ */
+ function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
+ allOrNothing = !!allOrNothing;
+ var startIndex,
+ endIndex,
+ index = 0,
+ expressions = [],
+ parseFns = [],
+ textLength = text.length,
+ exp,
+ concat = [],
+ expressionPositions = [];
+
+ while (index < textLength) {
+ if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
+ ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
+ if (index !== startIndex) {
+ concat.push(unescapeText(text.substring(index, startIndex)));
+ }
+ exp = text.substring(startIndex + startSymbolLength, endIndex);
+ expressions.push(exp);
+ parseFns.push($parse(exp, parseStringifyInterceptor));
+ index = endIndex + endSymbolLength;
+ expressionPositions.push(concat.length);
+ concat.push('');
+ } else {
+ // we did not find an interpolation, so we have to add the remainder to the separators array
+ if (index !== textLength) {
+ concat.push(unescapeText(text.substring(index)));
+ }
+ break;
+ }
+ }
+
+ // Concatenating expressions makes it hard to reason about whether some combination of
+ // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a
+ // single expression be used for iframe[src], object[src], etc., we ensure that the value
+ // that's used is assigned or constructed by some JS code somewhere that is more testable or
+ // make it obvious that you bound the value to some user controlled value. This helps reduce
+ // the load when auditing for XSS issues.
+ if (trustedContext && concat.length > 1) {
+ throw $interpolateMinErr('noconcat',
+ "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
+ "interpolations that concatenate multiple expressions when a trusted value is " +
+ "required. See http://docs.angularjs.org/api/ng.$sce", text);
+ }
+
+ if (!mustHaveExpression || expressions.length) {
+ var compute = function(values) {
+ for (var i = 0, ii = expressions.length; i < ii; i++) {
+ if (allOrNothing && isUndefined(values[i])) return;
+ concat[expressionPositions[i]] = values[i];
+ }
+ return concat.join('');
+ };
+
+ var getValue = function(value) {
+ return trustedContext ?
+ $sce.getTrusted(trustedContext, value) :
+ $sce.valueOf(value);
+ };
+
+ var stringify = function(value) {
+ if (value == null) { // null || undefined
+ return '';
+ }
+ switch (typeof value) {
+ case 'string':
+ break;
+ case 'number':
+ value = '' + value;
+ break;
+ default:
+ value = toJson(value);
+ }
+
+ return value;
+ };
+
+ return extend(function interpolationFn(context) {
+ var i = 0;
+ var ii = expressions.length;
+ var values = new Array(ii);
+
+ try {
+ for (; i < ii; i++) {
+ values[i] = parseFns[i](context);
+ }
+
+ return compute(values);
+ } catch (err) {
+ var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
+ err.toString());
+ $exceptionHandler(newErr);
+ }
+
+ }, {
+ // all of these properties are undocumented for now
+ exp: text, //just for compatibility with regular watchers created via $watch
+ expressions: expressions,
+ $$watchDelegate: function(scope, listener, objectEquality) {
+ var lastValue;
+ return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
+ var currValue = compute(values);
+ if (isFunction(listener)) {
+ listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
+ }
+ lastValue = currValue;
+ }, objectEquality);
+ }
+ });
+ }
+
+ function unescapeText(text) {
+ return text.replace(escapedStartRegexp, startSymbol).
+ replace(escapedEndRegexp, endSymbol);
+ }
+
+ function parseStringifyInterceptor(value) {
+ try {
+ value = getValue(value);
+ return allOrNothing && !isDefined(value) ? value : stringify(value);
+ } catch (err) {
+ var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
+ err.toString());
+ $exceptionHandler(newErr);
+ }
+ }
+ }
+
+
+ /**
+ * @ngdoc method
+ * @name $interpolate#startSymbol
+ * @description
+ * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
+ *
+ * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
+ * the symbol.
+ *
+ * @returns {string} start symbol.
+ */
+ $interpolate.startSymbol = function() {
+ return startSymbol;
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name $interpolate#endSymbol
+ * @description
+ * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+ *
+ * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
+ * the symbol.
+ *
+ * @returns {string} end symbol.
+ */
+ $interpolate.endSymbol = function() {
+ return endSymbol;
+ };
+
+ return $interpolate;
+ }];
+}
+
+function $IntervalProvider() {
+ this.$get = ['$rootScope', '$window', '$q', '$$q',
+ function($rootScope, $window, $q, $$q) {
+ var intervals = {};
+
+
+ /**
+ * @ngdoc service
+ * @name $interval
+ *
+ * @description
+ * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
+ * milliseconds.
+ *
+ * The return value of registering an interval function is a promise. This promise will be
+ * notified upon each tick of the interval, and will be resolved after `count` iterations, or
+ * run indefinitely if `count` is not defined. The value of the notification will be the
+ * number of iterations that have run.
+ * To cancel an interval, call `$interval.cancel(promise)`.
+ *
+ * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
+ * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
+ * time.
+ *
+ * <div class="alert alert-warning">
+ * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
+ * with them. In particular they are not automatically destroyed when a controller's scope or a
+ * directive's element are destroyed.
+ * You should take this into consideration and make sure to always cancel the interval at the
+ * appropriate moment. See the example below for more details on how and when to do this.
+ * </div>
+ *
+ * @param {function()} fn A function that should be called repeatedly.
+ * @param {number} delay Number of milliseconds between each function call.
+ * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
+ * indefinitely.
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+ * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+ * @returns {promise} A promise which will be notified on each iteration.
+ *
+ * @example
+ * <example module="intervalExample">
+ * <file name="index.html">
+ * <script>
+ * angular.module('intervalExample', [])
+ * .controller('ExampleController', ['$scope', '$interval',
+ * function($scope, $interval) {
+ * $scope.format = 'M/d/yy h:mm:ss a';
+ * $scope.blood_1 = 100;
+ * $scope.blood_2 = 120;
+ *
+ * var stop;
+ * $scope.fight = function() {
+ * // Don't start a new fight if we are already fighting
+ * if ( angular.isDefined(stop) ) return;
+ *
+ * stop = $interval(function() {
+ * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
+ * $scope.blood_1 = $scope.blood_1 - 3;
+ * $scope.blood_2 = $scope.blood_2 - 4;
+ * } else {
+ * $scope.stopFight();
+ * }
+ * }, 100);
+ * };
+ *
+ * $scope.stopFight = function() {
+ * if (angular.isDefined(stop)) {
+ * $interval.cancel(stop);
+ * stop = undefined;
+ * }
+ * };
+ *
+ * $scope.resetFight = function() {
+ * $scope.blood_1 = 100;
+ * $scope.blood_2 = 120;
+ * };
+ *
+ * $scope.$on('$destroy', function() {
+ * // Make sure that the interval is destroyed too
+ * $scope.stopFight();
+ * });
+ * }])
+ * // Register the 'myCurrentTime' directive factory method.
+ * // We inject $interval and dateFilter service since the factory method is DI.
+ * .directive('myCurrentTime', ['$interval', 'dateFilter',
+ * function($interval, dateFilter) {
+ * // return the directive link function. (compile function not needed)
+ * return function(scope, element, attrs) {
+ * var format, // date format
+ * stopTime; // so that we can cancel the time updates
+ *
+ * // used to update the UI
+ * function updateTime() {
+ * element.text(dateFilter(new Date(), format));
+ * }
+ *
+ * // watch the expression, and update the UI on change.
+ * scope.$watch(attrs.myCurrentTime, function(value) {
+ * format = value;
+ * updateTime();
+ * });
+ *
+ * stopTime = $interval(updateTime, 1000);
+ *
+ * // listen on DOM destroy (removal) event, and cancel the next UI update
+ * // to prevent updating time after the DOM element was removed.
+ * element.on('$destroy', function() {
+ * $interval.cancel(stopTime);
+ * });
+ * }
+ * }]);
+ * </script>
+ *
+ * <div>
+ * <div ng-controller="ExampleController">
+ * Date format: <input ng-model="format"> <hr/>
+ * Current time is: <span my-current-time="format"></span>
+ * <hr/>
+ * Blood 1 : <font color='red'>{{blood_1}}</font>
+ * Blood 2 : <font color='red'>{{blood_2}}</font>
+ * <button type="button" data-ng-click="fight()">Fight</button>
+ * <button type="button" data-ng-click="stopFight()">StopFight</button>
+ * <button type="button" data-ng-click="resetFight()">resetFight</button>
+ * </div>
+ * </div>
+ *
+ * </file>
+ * </example>
+ */
+ function interval(fn, delay, count, invokeApply) {
+ var setInterval = $window.setInterval,
+ clearInterval = $window.clearInterval,
+ iteration = 0,
+ skipApply = (isDefined(invokeApply) && !invokeApply),
+ deferred = (skipApply ? $$q : $q).defer(),
+ promise = deferred.promise;
+
+ count = isDefined(count) ? count : 0;
+
+ promise.then(null, null, fn);
+
+ promise.$$intervalId = setInterval(function tick() {
+ deferred.notify(iteration++);
+
+ if (count > 0 && iteration >= count) {
+ deferred.resolve(iteration);
+ clearInterval(promise.$$intervalId);
+ delete intervals[promise.$$intervalId];
+ }
+
+ if (!skipApply) $rootScope.$apply();
+
+ }, delay);
+
+ intervals[promise.$$intervalId] = deferred;
+
+ return promise;
+ }
+
+
+ /**
+ * @ngdoc method
+ * @name $interval#cancel
+ *
+ * @description
+ * Cancels a task associated with the `promise`.
+ *
+ * @param {promise} promise returned by the `$interval` function.
+ * @returns {boolean} Returns `true` if the task was successfully canceled.
+ */
+ interval.cancel = function(promise) {
+ if (promise && promise.$$intervalId in intervals) {
+ intervals[promise.$$intervalId].reject('canceled');
+ $window.clearInterval(promise.$$intervalId);
+ delete intervals[promise.$$intervalId];
+ return true;
+ }
+ return false;
+ };
+
+ return interval;
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $locale
+ *
+ * @description
+ * $locale service provides localization rules for various Angular components. As of right now the
+ * only public api is:
+ *
+ * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
+ */
+function $LocaleProvider() {
+ this.$get = function() {
+ return {
+ id: 'en-us',
+
+ NUMBER_FORMATS: {
+ DECIMAL_SEP: '.',
+ GROUP_SEP: ',',
+ PATTERNS: [
+ { // Decimal Pattern
+ minInt: 1,
+ minFrac: 0,
+ maxFrac: 3,
+ posPre: '',
+ posSuf: '',
+ negPre: '-',
+ negSuf: '',
+ gSize: 3,
+ lgSize: 3
+ },{ //Currency Pattern
+ minInt: 1,
+ minFrac: 2,
+ maxFrac: 2,
+ posPre: '\u00A4',
+ posSuf: '',
+ negPre: '(\u00A4',
+ negSuf: ')',
+ gSize: 3,
+ lgSize: 3
+ }
+ ],
+ CURRENCY_SYM: '$'
+ },
+
+ DATETIME_FORMATS: {
+ MONTH:
+ 'January,February,March,April,May,June,July,August,September,October,November,December'
+ .split(','),
+ SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
+ DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
+ SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
+ AMPMS: ['AM','PM'],
+ medium: 'MMM d, y h:mm:ss a',
+ 'short': 'M/d/yy h:mm a',
+ fullDate: 'EEEE, MMMM d, y',
+ longDate: 'MMMM d, y',
+ mediumDate: 'MMM d, y',
+ shortDate: 'M/d/yy',
+ mediumTime: 'h:mm:ss a',
+ shortTime: 'h:mm a'
+ },
+
+ pluralCat: function(num) {
+ if (num === 1) {
+ return 'one';
+ }
+ return 'other';
+ }
+ };
+ };
+}
+
+var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+ DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
+var $locationMinErr = minErr('$location');
+
+
+/**
+ * Encode path using encodeUriSegment, ignoring forward slashes
+ *
+ * @param {string} path Path to encode
+ * @returns {string}
+ */
+function encodePath(path) {
+ var segments = path.split('/'),
+ i = segments.length;
+
+ while (i--) {
+ segments[i] = encodeUriSegment(segments[i]);
+ }
+
+ return segments.join('/');
+}
+
+function parseAbsoluteUrl(absoluteUrl, locationObj) {
+ var parsedUrl = urlResolve(absoluteUrl);
+
+ locationObj.$$protocol = parsedUrl.protocol;
+ locationObj.$$host = parsedUrl.hostname;
+ locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
+}
+
+
+function parseAppUrl(relativeUrl, locationObj) {
+ var prefixed = (relativeUrl.charAt(0) !== '/');
+ if (prefixed) {
+ relativeUrl = '/' + relativeUrl;
+ }
+ var match = urlResolve(relativeUrl);
+ locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
+ match.pathname.substring(1) : match.pathname);
+ locationObj.$$search = parseKeyValue(match.search);
+ locationObj.$$hash = decodeURIComponent(match.hash);
+
+ // make sure path starts with '/';
+ if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
+ locationObj.$$path = '/' + locationObj.$$path;
+ }
+}
+
+
+/**
+ *
+ * @param {string} begin
+ * @param {string} whole
+ * @returns {string} returns text from whole after begin or undefined if it does not begin with
+ * expected string.
+ */
+function beginsWith(begin, whole) {
+ if (whole.indexOf(begin) === 0) {
+ return whole.substr(begin.length);
+ }
+}
+
+
+function stripHash(url) {
+ var index = url.indexOf('#');
+ return index == -1 ? url : url.substr(0, index);
+}
+
+function trimEmptyHash(url) {
+ return url.replace(/(#.+)|#$/, '$1');
+}
+
+
+function stripFile(url) {
+ return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
+}
+
+/* return the server only (scheme://host:port) */
+function serverBase(url) {
+ return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
+}
+
+
+/**
+ * LocationHtml5Url represents an url
+ * This object is exposed as $location service when HTML5 mode is enabled and supported
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} basePrefix url path prefix
+ */
+function LocationHtml5Url(appBase, basePrefix) {
+ this.$$html5 = true;
+ basePrefix = basePrefix || '';
+ var appBaseNoFile = stripFile(appBase);
+ parseAbsoluteUrl(appBase, this);
+
+
+ /**
+ * Parse given html5 (regular) url string into properties
+ * @param {string} url HTML5 url
+ * @private
+ */
+ this.$$parse = function(url) {
+ var pathUrl = beginsWith(appBaseNoFile, url);
+ if (!isString(pathUrl)) {
+ throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
+ appBaseNoFile);
+ }
+
+ parseAppUrl(pathUrl, this);
+
+ if (!this.$$path) {
+ this.$$path = '/';
+ }
+
+ this.$$compose();
+ };
+
+ /**
+ * Compose url and update `absUrl` property
+ * @private
+ */
+ this.$$compose = function() {
+ var search = toKeyValue(this.$$search),
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+ this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
+ };
+
+ this.$$parseLinkUrl = function(url, relHref) {
+ if (relHref && relHref[0] === '#') {
+ // special case for links to hash fragments:
+ // keep the old url and only replace the hash fragment
+ this.hash(relHref.slice(1));
+ return true;
+ }
+ var appUrl, prevAppUrl;
+ var rewrittenUrl;
+
+ if ((appUrl = beginsWith(appBase, url)) !== undefined) {
+ prevAppUrl = appUrl;
+ if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {
+ rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
+ } else {
+ rewrittenUrl = appBase + prevAppUrl;
+ }
+ } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {
+ rewrittenUrl = appBaseNoFile + appUrl;
+ } else if (appBaseNoFile == url + '/') {
+ rewrittenUrl = appBaseNoFile;
+ }
+ if (rewrittenUrl) {
+ this.$$parse(rewrittenUrl);
+ }
+ return !!rewrittenUrl;
+ };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when developer doesn't opt into html5 mode.
+ * It also serves as the base class for html5 mode fallback on legacy browsers.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangUrl(appBase, hashPrefix) {
+ var appBaseNoFile = stripFile(appBase);
+
+ parseAbsoluteUrl(appBase, this);
+
+
+ /**
+ * Parse given hashbang url into properties
+ * @param {string} url Hashbang url
+ * @private
+ */
+ this.$$parse = function(url) {
+ var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
+ var withoutHashUrl;
+
+ if (withoutBaseUrl.charAt(0) === '#') {
+
+ // The rest of the url starts with a hash so we have
+ // got either a hashbang path or a plain hash fragment
+ withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);
+ if (isUndefined(withoutHashUrl)) {
+ // There was no hashbang prefix so we just have a hash fragment
+ withoutHashUrl = withoutBaseUrl;
+ }
+
+ } else {
+ // There was no hashbang path nor hash fragment:
+ // If we are in HTML5 mode we use what is left as the path;
+ // Otherwise we ignore what is left
+ withoutHashUrl = this.$$html5 ? withoutBaseUrl : '';
+ }
+
+ parseAppUrl(withoutHashUrl, this);
+
+ this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
+
+ this.$$compose();
+
+ /*
+ * In Windows, on an anchor node on documents loaded from
+ * the filesystem, the browser will return a pathname
+ * prefixed with the drive name ('/C:/path') when a
+ * pathname without a drive is set:
+ * * a.setAttribute('href', '/foo')
+ * * a.pathname === '/C:/foo' //true
+ *
+ * Inside of Angular, we're always using pathnames that
+ * do not include drive names for routing.
+ */
+ function removeWindowsDriveName(path, url, base) {
+ /*
+ Matches paths for file protocol on windows,
+ such as /C:/foo/bar, and captures only /foo/bar.
+ */
+ var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
+
+ var firstPathSegmentMatch;
+
+ //Get the relative path from the input URL.
+ if (url.indexOf(base) === 0) {
+ url = url.replace(base, '');
+ }
+
+ // The input URL intentionally contains a first path segment that ends with a colon.
+ if (windowsFilePathExp.exec(url)) {
+ return path;
+ }
+
+ firstPathSegmentMatch = windowsFilePathExp.exec(path);
+ return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
+ }
+ };
+
+ /**
+ * Compose hashbang url and update `absUrl` property
+ * @private
+ */
+ this.$$compose = function() {
+ var search = toKeyValue(this.$$search),
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+ this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
+ };
+
+ this.$$parseLinkUrl = function(url, relHref) {
+ if (stripHash(appBase) == stripHash(url)) {
+ this.$$parse(url);
+ return true;
+ }
+ return false;
+ };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when html5 history api is enabled but the browser
+ * does not support it.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangInHtml5Url(appBase, hashPrefix) {
+ this.$$html5 = true;
+ LocationHashbangUrl.apply(this, arguments);
+
+ var appBaseNoFile = stripFile(appBase);
+
+ this.$$parseLinkUrl = function(url, relHref) {
+ if (relHref && relHref[0] === '#') {
+ // special case for links to hash fragments:
+ // keep the old url and only replace the hash fragment
+ this.hash(relHref.slice(1));
+ return true;
+ }
+
+ var rewrittenUrl;
+ var appUrl;
+
+ if (appBase == stripHash(url)) {
+ rewrittenUrl = url;
+ } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
+ rewrittenUrl = appBase + hashPrefix + appUrl;
+ } else if (appBaseNoFile === url + '/') {
+ rewrittenUrl = appBaseNoFile;
+ }
+ if (rewrittenUrl) {
+ this.$$parse(rewrittenUrl);
+ }
+ return !!rewrittenUrl;
+ };
+
+ this.$$compose = function() {
+ var search = toKeyValue(this.$$search),
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+ // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'
+ this.$$absUrl = appBase + hashPrefix + this.$$url;
+ };
+
+}
+
+
+var locationPrototype = {
+
+ /**
+ * Are we in html5 mode?
+ * @private
+ */
+ $$html5: false,
+
+ /**
+ * Has any change been replacing?
+ * @private
+ */
+ $$replace: false,
+
+ /**
+ * @ngdoc method
+ * @name $location#absUrl
+ *
+ * @description
+ * This method is getter only.
+ *
+ * Return full url representation with all segments encoded according to rules specified in
+ * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var absUrl = $location.absUrl();
+ * // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
+ * ```
+ *
+ * @return {string} full url
+ */
+ absUrl: locationGetter('$$absUrl'),
+
+ /**
+ * @ngdoc method
+ * @name $location#url
+ *
+ * @description
+ * This method is getter / setter.
+ *
+ * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
+ *
+ * Change path, search and hash, when called with parameter and return `$location`.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var url = $location.url();
+ * // => "/some/path?foo=bar&baz=xoxo"
+ * ```
+ *
+ * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
+ * @return {string} url
+ */
+ url: function(url) {
+ if (isUndefined(url))
+ return this.$$url;
+
+ var match = PATH_MATCH.exec(url);
+ if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
+ if (match[2] || match[1] || url === '') this.search(match[3] || '');
+ this.hash(match[5] || '');
+
+ return this;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $location#protocol
+ *
+ * @description
+ * This method is getter only.
+ *
+ * Return protocol of current url.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var protocol = $location.protocol();
+ * // => "http"
+ * ```
+ *
+ * @return {string} protocol of current url
+ */
+ protocol: locationGetter('$$protocol'),
+
+ /**
+ * @ngdoc method
+ * @name $location#host
+ *
+ * @description
+ * This method is getter only.
+ *
+ * Return host of current url.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var host = $location.host();
+ * // => "example.com"
+ * ```
+ *
+ * @return {string} host of current url.
+ */
+ host: locationGetter('$$host'),
+
+ /**
+ * @ngdoc method
+ * @name $location#port
+ *
+ * @description
+ * This method is getter only.
+ *
+ * Return port of current url.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var port = $location.port();
+ * // => 80
+ * ```
+ *
+ * @return {Number} port
+ */
+ port: locationGetter('$$port'),
+
+ /**
+ * @ngdoc method
+ * @name $location#path
+ *
+ * @description
+ * This method is getter / setter.
+ *
+ * Return path of current url when called without any parameter.
+ *
+ * Change path when called with parameter and return `$location`.
+ *
+ * Note: Path should always begin with forward slash (/), this method will add the forward slash
+ * if it is missing.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var path = $location.path();
+ * // => "/some/path"
+ * ```
+ *
+ * @param {(string|number)=} path New path
+ * @return {string} path
+ */
+ path: locationGetterSetter('$$path', function(path) {
+ path = path !== null ? path.toString() : '';
+ return path.charAt(0) == '/' ? path : '/' + path;
+ }),
+
+ /**
+ * @ngdoc method
+ * @name $location#search
+ *
+ * @description
+ * This method is getter / setter.
+ *
+ * Return search part (as object) of current url when called without any parameter.
+ *
+ * Change search part when called with parameter and return `$location`.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * var searchObject = $location.search();
+ * // => {foo: 'bar', baz: 'xoxo'}
+ *
+ * // set foo to 'yipee'
+ * $location.search('foo', 'yipee');
+ * // $location.search() => {foo: 'yipee', baz: 'xoxo'}
+ * ```
+ *
+ * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
+ * hash object.
+ *
+ * When called with a single argument the method acts as a setter, setting the `search` component
+ * of `$location` to the specified value.
+ *
+ * If the argument is a hash object containing an array of values, these values will be encoded
+ * as duplicate search parameters in the url.
+ *
+ * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
+ * will override only a single search property.
+ *
+ * If `paramValue` is an array, it will override the property of the `search` component of
+ * `$location` specified via the first argument.
+ *
+ * If `paramValue` is `null`, the property specified via the first argument will be deleted.
+ *
+ * If `paramValue` is `true`, the property specified via the first argument will be added with no
+ * value nor trailing equal sign.
+ *
+ * @return {Object} If called with no arguments returns the parsed `search` object. If called with
+ * one or more arguments returns `$location` object itself.
+ */
+ search: function(search, paramValue) {
+ switch (arguments.length) {
+ case 0:
+ return this.$$search;
+ case 1:
+ if (isString(search) || isNumber(search)) {
+ search = search.toString();
+ this.$$search = parseKeyValue(search);
+ } else if (isObject(search)) {
+ search = copy(search, {});
+ // remove object undefined or null properties
+ forEach(search, function(value, key) {
+ if (value == null) delete search[key];
+ });
+
+ this.$$search = search;
+ } else {
+ throw $locationMinErr('isrcharg',
+ 'The first argument of the `$location#search()` call must be a string or an object.');
+ }
+ break;
+ default:
+ if (isUndefined(paramValue) || paramValue === null) {
+ delete this.$$search[search];
+ } else {
+ this.$$search[search] = paramValue;
+ }
+ }
+
+ this.$$compose();
+ return this;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $location#hash
+ *
+ * @description
+ * This method is getter / setter.
+ *
+ * Return hash fragment when called without any parameter.
+ *
+ * Change hash fragment when called with parameter and return `$location`.
+ *
+ *
+ * ```js
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
+ * var hash = $location.hash();
+ * // => "hashValue"
+ * ```
+ *
+ * @param {(string|number)=} hash New hash fragment
+ * @return {string} hash
+ */
+ hash: locationGetterSetter('$$hash', function(hash) {
+ return hash !== null ? hash.toString() : '';
+ }),
+
+ /**
+ * @ngdoc method
+ * @name $location#replace
+ *
+ * @description
+ * If called, all changes to $location during current `$digest` will be replacing current history
+ * record, instead of adding new one.
+ */
+ replace: function() {
+ this.$$replace = true;
+ return this;
+ }
+};
+
+forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
+ Location.prototype = Object.create(locationPrototype);
+
+ /**
+ * @ngdoc method
+ * @name $location#state
+ *
+ * @description
+ * This method is getter / setter.
+ *
+ * Return the history state object when called without any parameter.
+ *
+ * Change the history state object when called with one parameter and return `$location`.
+ * The state object is later passed to `pushState` or `replaceState`.
+ *
+ * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
+ * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
+ * older browsers (like IE9 or Android < 4.0), don't use this method.
+ *
+ * @param {object=} state State object for pushState or replaceState
+ * @return {object} state
+ */
+ Location.prototype.state = function(state) {
+ if (!arguments.length)
+ return this.$$state;
+
+ if (Location !== LocationHtml5Url || !this.$$html5) {
+ throw $locationMinErr('nostate', 'History API state support is available only ' +
+ 'in HTML5 mode and only in browsers supporting HTML5 History API');
+ }
+ // The user might modify `stateObject` after invoking `$location.state(stateObject)`
+ // but we're changing the $$state reference to $browser.state() during the $digest
+ // so the modification window is narrow.
+ this.$$state = isUndefined(state) ? null : state;
+
+ return this;
+ };
+});
+
+
+function locationGetter(property) {
+ return function() {
+ return this[property];
+ };
+}
+
+
+function locationGetterSetter(property, preprocess) {
+ return function(value) {
+ if (isUndefined(value))
+ return this[property];
+
+ this[property] = preprocess(value);
+ this.$$compose();
+
+ return this;
+ };
+}
+
+
+/**
+ * @ngdoc service
+ * @name $location
+ *
+ * @requires $rootElement
+ *
+ * @description
+ * The $location service parses the URL in the browser address bar (based on the
+ * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
+ * available to your application. Changes to the URL in the address bar are reflected into
+ * $location service and changes to $location are reflected into the browser address bar.
+ *
+ * **The $location service:**
+ *
+ * - Exposes the current URL in the browser address bar, so you can
+ * - Watch and observe the URL.
+ * - Change the URL.
+ * - Synchronizes the URL with the browser when the user
+ * - Changes the address bar.
+ * - Clicks the back or forward button (or clicks a History link).
+ * - Clicks on a link.
+ * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
+ *
+ * For more information see {@link guide/$location Developer Guide: Using $location}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $locationProvider
+ * @description
+ * Use the `$locationProvider` to configure how the application deep linking paths are stored.
+ */
+function $LocationProvider() {
+ var hashPrefix = '',
+ html5Mode = {
+ enabled: false,
+ requireBase: true,
+ rewriteLinks: true
+ };
+
+ /**
+ * @ngdoc method
+ * @name $locationProvider#hashPrefix
+ * @description
+ * @param {string=} prefix Prefix for hash part (containing path and search)
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
+ */
+ this.hashPrefix = function(prefix) {
+ if (isDefined(prefix)) {
+ hashPrefix = prefix;
+ return this;
+ } else {
+ return hashPrefix;
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $locationProvider#html5Mode
+ * @description
+ * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
+ * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
+ * properties:
+ * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
+ * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
+ * support `pushState`.
+ * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
+ * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
+ * true, and a base tag is not present, an error will be thrown when `$location` is injected.
+ * See the {@link guide/$location $location guide for more information}
+ * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
+ * enables/disables url rewriting for relative links.
+ *
+ * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
+ */
+ this.html5Mode = function(mode) {
+ if (isBoolean(mode)) {
+ html5Mode.enabled = mode;
+ return this;
+ } else if (isObject(mode)) {
+
+ if (isBoolean(mode.enabled)) {
+ html5Mode.enabled = mode.enabled;
+ }
+
+ if (isBoolean(mode.requireBase)) {
+ html5Mode.requireBase = mode.requireBase;
+ }
+
+ if (isBoolean(mode.rewriteLinks)) {
+ html5Mode.rewriteLinks = mode.rewriteLinks;
+ }
+
+ return this;
+ } else {
+ return html5Mode;
+ }
+ };
+
+ /**
+ * @ngdoc event
+ * @name $location#$locationChangeStart
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted before a URL will change.
+ *
+ * This change can be prevented by calling
+ * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
+ * details about event object. Upon successful change
+ * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.
+ *
+ * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+ * the browser supports the HTML5 History API.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {string} newUrl New URL
+ * @param {string=} oldUrl URL that was before it was changed.
+ * @param {string=} newState New history state object
+ * @param {string=} oldState History state object that was before it was changed.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $location#$locationChangeSuccess
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted after a URL was changed.
+ *
+ * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+ * the browser supports the HTML5 History API.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {string} newUrl New URL
+ * @param {string=} oldUrl URL that was before it was changed.
+ * @param {string=} newState New history state object
+ * @param {string=} oldState History state object that was before it was changed.
+ */
+
+ this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window',
+ function($rootScope, $browser, $sniffer, $rootElement, $window) {
+ var $location,
+ LocationMode,
+ baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
+ initialUrl = $browser.url(),
+ appBase;
+
+ if (html5Mode.enabled) {
+ if (!baseHref && html5Mode.requireBase) {
+ throw $locationMinErr('nobase',
+ "$location in HTML5 mode requires a <base> tag to be present!");
+ }
+ appBase = serverBase(initialUrl) + (baseHref || '/');
+ LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
+ } else {
+ appBase = stripHash(initialUrl);
+ LocationMode = LocationHashbangUrl;
+ }
+ $location = new LocationMode(appBase, '#' + hashPrefix);
+ $location.$$parseLinkUrl(initialUrl, initialUrl);
+
+ $location.$$state = $browser.state();
+
+ var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
+
+ function setBrowserUrlWithFallback(url, replace, state) {
+ var oldUrl = $location.url();
+ var oldState = $location.$$state;
+ try {
+ $browser.url(url, replace, state);
+
+ // Make sure $location.state() returns referentially identical (not just deeply equal)
+ // state object; this makes possible quick checking if the state changed in the digest
+ // loop. Checking deep equality would be too expensive.
+ $location.$$state = $browser.state();
+ } catch (e) {
+ // Restore old values if pushState fails
+ $location.url(oldUrl);
+ $location.$$state = oldState;
+
+ throw e;
+ }
+ }
+
+ $rootElement.on('click', function(event) {
+ // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
+ // currently we open nice url link and redirect then
+
+ if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.which == 2) return;
+
+ var elm = jqLite(event.target);
+
+ // traverse the DOM up to find first A tag
+ while (nodeName_(elm[0]) !== 'a') {
+ // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
+ if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
+ }
+
+ var absHref = elm.prop('href');
+ // get the actual href attribute - see
+ // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
+ var relHref = elm.attr('href') || elm.attr('xlink:href');
+
+ if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
+ // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
+ // an animation.
+ absHref = urlResolve(absHref.animVal).href;
+ }
+
+ // Ignore when url is started with javascript: or mailto:
+ if (IGNORE_URI_REGEXP.test(absHref)) return;
+
+ if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
+ if ($location.$$parseLinkUrl(absHref, relHref)) {
+ // We do a preventDefault for all urls that are part of the angular application,
+ // in html5mode and also without, so that we are able to abort navigation without
+ // getting double entries in the location history.
+ event.preventDefault();
+ // update location manually
+ if ($location.absUrl() != $browser.url()) {
+ $rootScope.$apply();
+ // hack to work around FF6 bug 684208 when scenario runner clicks on links
+ $window.angular['ff-684208-preventDefault'] = true;
+ }
+ }
+ }
+ });
+
+
+ // rewrite hashbang url <> html5 url
+ if ($location.absUrl() != initialUrl) {
+ $browser.url($location.absUrl(), true);
+ }
+
+ var initializing = true;
+
+ // update $location when $browser url changes
+ $browser.onUrlChange(function(newUrl, newState) {
+ $rootScope.$evalAsync(function() {
+ var oldUrl = $location.absUrl();
+ var oldState = $location.$$state;
+ var defaultPrevented;
+
+ $location.$$parse(newUrl);
+ $location.$$state = newState;
+
+ defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+ newState, oldState).defaultPrevented;
+
+ // if the location was changed by a `$locationChangeStart` handler then stop
+ // processing this location change
+ if ($location.absUrl() !== newUrl) return;
+
+ if (defaultPrevented) {
+ $location.$$parse(oldUrl);
+ $location.$$state = oldState;
+ setBrowserUrlWithFallback(oldUrl, false, oldState);
+ } else {
+ initializing = false;
+ afterLocationChange(oldUrl, oldState);
+ }
+ });
+ if (!$rootScope.$$phase) $rootScope.$digest();
+ });
+
+ // update browser
+ $rootScope.$watch(function $locationWatch() {
+ var oldUrl = trimEmptyHash($browser.url());
+ var newUrl = trimEmptyHash($location.absUrl());
+ var oldState = $browser.state();
+ var currentReplace = $location.$$replace;
+ var urlOrStateChanged = oldUrl !== newUrl ||
+ ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
+
+ if (initializing || urlOrStateChanged) {
+ initializing = false;
+
+ $rootScope.$evalAsync(function() {
+ var newUrl = $location.absUrl();
+ var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+ $location.$$state, oldState).defaultPrevented;
+
+ // if the location was changed by a `$locationChangeStart` handler then stop
+ // processing this location change
+ if ($location.absUrl() !== newUrl) return;
+
+ if (defaultPrevented) {
+ $location.$$parse(oldUrl);
+ $location.$$state = oldState;
+ } else {
+ if (urlOrStateChanged) {
+ setBrowserUrlWithFallback(newUrl, currentReplace,
+ oldState === $location.$$state ? null : $location.$$state);
+ }
+ afterLocationChange(oldUrl, oldState);
+ }
+ });
+ }
+
+ $location.$$replace = false;
+
+ // we don't need to return anything because $evalAsync will make the digest loop dirty when
+ // there is a change
+ });
+
+ return $location;
+
+ function afterLocationChange(oldUrl, oldState) {
+ $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
+ $location.$$state, oldState);
+ }
+}];
+}
+
+/**
+ * @ngdoc service
+ * @name $log
+ * @requires $window
+ *
+ * @description
+ * Simple service for logging. Default implementation safely writes the message
+ * into the browser's console (if present).
+ *
+ * The main purpose of this service is to simplify debugging and troubleshooting.
+ *
+ * The default is to log `debug` messages. You can use
+ * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
+ *
+ * @example
+ <example module="logExample">
+ <file name="script.js">
+ angular.module('logExample', [])
+ .controller('LogController', ['$scope', '$log', function($scope, $log) {
+ $scope.$log = $log;
+ $scope.message = 'Hello World!';
+ }]);
+ </file>
+ <file name="index.html">
+ <div ng-controller="LogController">
+ <p>Reload this page with open console, enter text and hit the log button...</p>
+ Message:
+ <input type="text" ng-model="message"/>
+ <button ng-click="$log.log(message)">log</button>
+ <button ng-click="$log.warn(message)">warn</button>
+ <button ng-click="$log.info(message)">info</button>
+ <button ng-click="$log.error(message)">error</button>
+ </div>
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc provider
+ * @name $logProvider
+ * @description
+ * Use the `$logProvider` to configure how the application logs messages
+ */
+function $LogProvider() {
+ var debug = true,
+ self = this;
+
+ /**
+ * @ngdoc method
+ * @name $logProvider#debugEnabled
+ * @description
+ * @param {boolean=} flag enable or disable debug level messages
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
+ */
+ this.debugEnabled = function(flag) {
+ if (isDefined(flag)) {
+ debug = flag;
+ return this;
+ } else {
+ return debug;
+ }
+ };
+
+ this.$get = ['$window', function($window) {
+ return {
+ /**
+ * @ngdoc method
+ * @name $log#log
+ *
+ * @description
+ * Write a log message
+ */
+ log: consoleLog('log'),
+
+ /**
+ * @ngdoc method
+ * @name $log#info
+ *
+ * @description
+ * Write an information message
+ */
+ info: consoleLog('info'),
+
+ /**
+ * @ngdoc method
+ * @name $log#warn
+ *
+ * @description
+ * Write a warning message
+ */
+ warn: consoleLog('warn'),
+
+ /**
+ * @ngdoc method
+ * @name $log#error
+ *
+ * @description
+ * Write an error message
+ */
+ error: consoleLog('error'),
+
+ /**
+ * @ngdoc method
+ * @name $log#debug
+ *
+ * @description
+ * Write a debug message
+ */
+ debug: (function() {
+ var fn = consoleLog('debug');
+
+ return function() {
+ if (debug) {
+ fn.apply(self, arguments);
+ }
+ };
+ }())
+ };
+
+ function formatError(arg) {
+ if (arg instanceof Error) {
+ if (arg.stack) {
+ arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
+ ? 'Error: ' + arg.message + '\n' + arg.stack
+ : arg.stack;
+ } else if (arg.sourceURL) {
+ arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
+ }
+ }
+ return arg;
+ }
+
+ function consoleLog(type) {
+ var console = $window.console || {},
+ logFn = console[type] || console.log || noop,
+ hasApply = false;
+
+ // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
+ // The reason behind this is that console.log has type "object" in IE8...
+ try {
+ hasApply = !!logFn.apply;
+ } catch (e) {}
+
+ if (hasApply) {
+ return function() {
+ var args = [];
+ forEach(arguments, function(arg) {
+ args.push(formatError(arg));
+ });
+ return logFn.apply(console, args);
+ };
+ }
+
+ // we are IE which either doesn't have window.console => this is noop and we do nothing,
+ // or we are IE where console.log doesn't have apply so we log at least first 2 args
+ return function(arg1, arg2) {
+ logFn(arg1, arg2 == null ? '' : arg2);
+ };
+ }
+ }];
+}
+
+var $parseMinErr = minErr('$parse');
+
+// Sandboxing Angular Expressions
+// ------------------------------
+// Angular expressions are generally considered safe because these expressions only have direct
+// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
+// obtaining a reference to native JS functions such as the Function constructor.
+//
+// As an example, consider the following Angular expression:
+//
+// {}.toString.constructor('alert("evil JS code")')
+//
+// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
+// against the expression language, but not to prevent exploits that were enabled by exposing
+// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
+// practice and therefore we are not even trying to protect against interaction with an object
+// explicitly exposed in this way.
+//
+// In general, it is not possible to access a Window object from an angular expression unless a
+// window or some DOM object that has a reference to window is published onto a Scope.
+// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
+// native objects.
+//
+// See https://docs.angularjs.org/guide/security
+
+
+function ensureSafeMemberName(name, fullExpression) {
+ if (name === "__defineGetter__" || name === "__defineSetter__"
+ || name === "__lookupGetter__" || name === "__lookupSetter__"
+ || name === "__proto__") {
+ throw $parseMinErr('isecfld',
+ 'Attempting to access a disallowed field in Angular expressions! '
+ + 'Expression: {0}', fullExpression);
+ }
+ return name;
+}
+
+function ensureSafeObject(obj, fullExpression) {
+ // nifty check if obj is Function that is fast and works across iframes and other contexts
+ if (obj) {
+ if (obj.constructor === obj) {
+ throw $parseMinErr('isecfn',
+ 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ } else if (// isWindow(obj)
+ obj.window === obj) {
+ throw $parseMinErr('isecwindow',
+ 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ } else if (// isElement(obj)
+ obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
+ throw $parseMinErr('isecdom',
+ 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ } else if (// block Object so that we can't get hold of dangerous Object.* methods
+ obj === Object) {
+ throw $parseMinErr('isecobj',
+ 'Referencing Object in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ }
+ }
+ return obj;
+}
+
+var CALL = Function.prototype.call;
+var APPLY = Function.prototype.apply;
+var BIND = Function.prototype.bind;
+
+function ensureSafeFunction(obj, fullExpression) {
+ if (obj) {
+ if (obj.constructor === obj) {
+ throw $parseMinErr('isecfn',
+ 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ } else if (obj === CALL || obj === APPLY || obj === BIND) {
+ throw $parseMinErr('isecff',
+ 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
+ fullExpression);
+ }
+ }
+}
+
+//Keyword constants
+var CONSTANTS = createMap();
+forEach({
+ 'null': function() { return null; },
+ 'true': function() { return true; },
+ 'false': function() { return false; },
+ 'undefined': function() {}
+}, function(constantGetter, name) {
+ constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true;
+ CONSTANTS[name] = constantGetter;
+});
+
+//Not quite a constant, but can be lex/parsed the same
+CONSTANTS['this'] = function(self) { return self; };
+CONSTANTS['this'].sharedGetter = true;
+
+
+//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter
+var OPERATORS = extend(createMap(), {
+ '+':function(self, locals, a, b) {
+ a=a(self, locals); b=b(self, locals);
+ if (isDefined(a)) {
+ if (isDefined(b)) {
+ return a + b;
+ }
+ return a;
+ }
+ return isDefined(b) ? b : undefined;},
+ '-':function(self, locals, a, b) {
+ a=a(self, locals); b=b(self, locals);
+ return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0);
+ },
+ '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);},
+ '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);},
+ '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);},
+ '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);},
+ '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);},
+ '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);},
+ '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);},
+ '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);},
+ '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);},
+ '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);},
+ '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);},
+ '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);},
+ '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);},
+ '!':function(self, locals, a) {return !a(self, locals);},
+
+ //Tokenized as operators but parsed as assignment/filters
+ '=':true,
+ '|':true
+});
+var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
+
+
+/////////////////////////////////////////
+
+
+/**
+ * @constructor
+ */
+var Lexer = function(options) {
+ this.options = options;
+};
+
+Lexer.prototype = {
+ constructor: Lexer,
+
+ lex: function(text) {
+ this.text = text;
+ this.index = 0;
+ this.tokens = [];
+
+ while (this.index < this.text.length) {
+ var ch = this.text.charAt(this.index);
+ if (ch === '"' || ch === "'") {
+ this.readString(ch);
+ } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
+ this.readNumber();
+ } else if (this.isIdent(ch)) {
+ this.readIdent();
+ } else if (this.is(ch, '(){}[].,;:?')) {
+ this.tokens.push({index: this.index, text: ch});
+ this.index++;
+ } else if (this.isWhitespace(ch)) {
+ this.index++;
+ } else {
+ var ch2 = ch + this.peek();
+ var ch3 = ch2 + this.peek(2);
+ var op1 = OPERATORS[ch];
+ var op2 = OPERATORS[ch2];
+ var op3 = OPERATORS[ch3];
+ if (op1 || op2 || op3) {
+ var token = op3 ? ch3 : (op2 ? ch2 : ch);
+ this.tokens.push({index: this.index, text: token, operator: true});
+ this.index += token.length;
+ } else {
+ this.throwError('Unexpected next character ', this.index, this.index + 1);
+ }
+ }
+ }
+ return this.tokens;
+ },
+
+ is: function(ch, chars) {
+ return chars.indexOf(ch) !== -1;
+ },
+
+ peek: function(i) {
+ var num = i || 1;
+ return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
+ },
+
+ isNumber: function(ch) {
+ return ('0' <= ch && ch <= '9') && typeof ch === "string";
+ },
+
+ isWhitespace: function(ch) {
+ // IE treats non-breaking space as \u00A0
+ return (ch === ' ' || ch === '\r' || ch === '\t' ||
+ ch === '\n' || ch === '\v' || ch === '\u00A0');
+ },
+
+ isIdent: function(ch) {
+ return ('a' <= ch && ch <= 'z' ||
+ 'A' <= ch && ch <= 'Z' ||
+ '_' === ch || ch === '$');
+ },
+
+ isExpOperator: function(ch) {
+ return (ch === '-' || ch === '+' || this.isNumber(ch));
+ },
+
+ throwError: function(error, start, end) {
+ end = end || this.index;
+ var colStr = (isDefined(start)
+ ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']'
+ : ' ' + end);
+ throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
+ error, colStr, this.text);
+ },
+
+ readNumber: function() {
+ var number = '';
+ var start = this.index;
+ while (this.index < this.text.length) {
+ var ch = lowercase(this.text.charAt(this.index));
+ if (ch == '.' || this.isNumber(ch)) {
+ number += ch;
+ } else {
+ var peekCh = this.peek();
+ if (ch == 'e' && this.isExpOperator(peekCh)) {
+ number += ch;
+ } else if (this.isExpOperator(ch) &&
+ peekCh && this.isNumber(peekCh) &&
+ number.charAt(number.length - 1) == 'e') {
+ number += ch;
+ } else if (this.isExpOperator(ch) &&
+ (!peekCh || !this.isNumber(peekCh)) &&
+ number.charAt(number.length - 1) == 'e') {
+ this.throwError('Invalid exponent');
+ } else {
+ break;
+ }
+ }
+ this.index++;
+ }
+ this.tokens.push({
+ index: start,
+ text: number,
+ constant: true,
+ value: Number(number)
+ });
+ },
+
+ readIdent: function() {
+ var start = this.index;
+ while (this.index < this.text.length) {
+ var ch = this.text.charAt(this.index);
+ if (!(this.isIdent(ch) || this.isNumber(ch))) {
+ break;
+ }
+ this.index++;
+ }
+ this.tokens.push({
+ index: start,
+ text: this.text.slice(start, this.index),
+ identifier: true
+ });
+ },
+
+ readString: function(quote) {
+ var start = this.index;
+ this.index++;
+ var string = '';
+ var rawString = quote;
+ var escape = false;
+ while (this.index < this.text.length) {
+ var ch = this.text.charAt(this.index);
+ rawString += ch;
+ if (escape) {
+ if (ch === 'u') {
+ var hex = this.text.substring(this.index + 1, this.index + 5);
+ if (!hex.match(/[\da-f]{4}/i))
+ this.throwError('Invalid unicode escape [\\u' + hex + ']');
+ this.index += 4;
+ string += String.fromCharCode(parseInt(hex, 16));
+ } else {
+ var rep = ESCAPE[ch];
+ string = string + (rep || ch);
+ }
+ escape = false;
+ } else if (ch === '\\') {
+ escape = true;
+ } else if (ch === quote) {
+ this.index++;
+ this.tokens.push({
+ index: start,
+ text: rawString,
+ constant: true,
+ value: string
+ });
+ return;
+ } else {
+ string += ch;
+ }
+ this.index++;
+ }
+ this.throwError('Unterminated quote', start);
+ }
+};
+
+
+function isConstant(exp) {
+ return exp.constant;
+}
+
+/**
+ * @constructor
+ */
+var Parser = function(lexer, $filter, options) {
+ this.lexer = lexer;
+ this.$filter = $filter;
+ this.options = options;
+};
+
+Parser.ZERO = extend(function() {
+ return 0;
+}, {
+ sharedGetter: true,
+ constant: true
+});
+
+Parser.prototype = {
+ constructor: Parser,
+
+ parse: function(text) {
+ this.text = text;
+ this.tokens = this.lexer.lex(text);
+
+ var value = this.statements();
+
+ if (this.tokens.length !== 0) {
+ this.throwError('is an unexpected token', this.tokens[0]);
+ }
+
+ value.literal = !!value.literal;
+ value.constant = !!value.constant;
+
+ return value;
+ },
+
+ primary: function() {
+ var primary;
+ if (this.expect('(')) {
+ primary = this.filterChain();
+ this.consume(')');
+ } else if (this.expect('[')) {
+ primary = this.arrayDeclaration();
+ } else if (this.expect('{')) {
+ primary = this.object();
+ } else if (this.peek().identifier && this.peek().text in CONSTANTS) {
+ primary = CONSTANTS[this.consume().text];
+ } else if (this.peek().identifier) {
+ primary = this.identifier();
+ } else if (this.peek().constant) {
+ primary = this.constant();
+ } else {
+ this.throwError('not a primary expression', this.peek());
+ }
+
+ var next, context;
+ while ((next = this.expect('(', '[', '.'))) {
+ if (next.text === '(') {
+ primary = this.functionCall(primary, context);
+ context = null;
+ } else if (next.text === '[') {
+ context = primary;
+ primary = this.objectIndex(primary);
+ } else if (next.text === '.') {
+ context = primary;
+ primary = this.fieldAccess(primary);
+ } else {
+ this.throwError('IMPOSSIBLE');
+ }
+ }
+ return primary;
+ },
+
+ throwError: function(msg, token) {
+ throw $parseMinErr('syntax',
+ 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
+ token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
+ },
+
+ peekToken: function() {
+ if (this.tokens.length === 0)
+ throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+ return this.tokens[0];
+ },
+
+ peek: function(e1, e2, e3, e4) {
+ return this.peekAhead(0, e1, e2, e3, e4);
+ },
+ peekAhead: function(i, e1, e2, e3, e4) {
+ if (this.tokens.length > i) {
+ var token = this.tokens[i];
+ var t = token.text;
+ if (t === e1 || t === e2 || t === e3 || t === e4 ||
+ (!e1 && !e2 && !e3 && !e4)) {
+ return token;
+ }
+ }
+ return false;
+ },
+
+ expect: function(e1, e2, e3, e4) {
+ var token = this.peek(e1, e2, e3, e4);
+ if (token) {
+ this.tokens.shift();
+ return token;
+ }
+ return false;
+ },
+
+ consume: function(e1) {
+ if (this.tokens.length === 0) {
+ throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+ }
+
+ var token = this.expect(e1);
+ if (!token) {
+ this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
+ }
+ return token;
+ },
+
+ unaryFn: function(op, right) {
+ var fn = OPERATORS[op];
+ return extend(function $parseUnaryFn(self, locals) {
+ return fn(self, locals, right);
+ }, {
+ constant:right.constant,
+ inputs: [right]
+ });
+ },
+
+ binaryFn: function(left, op, right, isBranching) {
+ var fn = OPERATORS[op];
+ return extend(function $parseBinaryFn(self, locals) {
+ return fn(self, locals, left, right);
+ }, {
+ constant: left.constant && right.constant,
+ inputs: !isBranching && [left, right]
+ });
+ },
+
+ identifier: function() {
+ var id = this.consume().text;
+
+ //Continue reading each `.identifier` unless it is a method invocation
+ while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) {
+ id += this.consume().text + this.consume().text;
+ }
+
+ return getterFn(id, this.options, this.text);
+ },
+
+ constant: function() {
+ var value = this.consume().value;
+
+ return extend(function $parseConstant() {
+ return value;
+ }, {
+ constant: true,
+ literal: true
+ });
+ },
+
+ statements: function() {
+ var statements = [];
+ while (true) {
+ if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
+ statements.push(this.filterChain());
+ if (!this.expect(';')) {
+ // optimize for the common case where there is only one statement.
+ // TODO(size): maybe we should not support multiple statements?
+ return (statements.length === 1)
+ ? statements[0]
+ : function $parseStatements(self, locals) {
+ var value;
+ for (var i = 0, ii = statements.length; i < ii; i++) {
+ value = statements[i](self, locals);
+ }
+ return value;
+ };
+ }
+ }
+ },
+
+ filterChain: function() {
+ var left = this.expression();
+ var token;
+ while ((token = this.expect('|'))) {
+ left = this.filter(left);
+ }
+ return left;
+ },
+
+ filter: function(inputFn) {
+ var fn = this.$filter(this.consume().text);
+ var argsFn;
+ var args;
+
+ if (this.peek(':')) {
+ argsFn = [];
+ args = []; // we can safely reuse the array
+ while (this.expect(':')) {
+ argsFn.push(this.expression());
+ }
+ }
+
+ var inputs = [inputFn].concat(argsFn || []);
+
+ return extend(function $parseFilter(self, locals) {
+ var input = inputFn(self, locals);
+ if (args) {
+ args[0] = input;
+
+ var i = argsFn.length;
+ while (i--) {
+ args[i + 1] = argsFn[i](self, locals);
+ }
+
+ return fn.apply(undefined, args);
+ }
+
+ return fn(input);
+ }, {
+ constant: !fn.$stateful && inputs.every(isConstant),
+ inputs: !fn.$stateful && inputs
+ });
+ },
+
+ expression: function() {
+ return this.assignment();
+ },
+
+ assignment: function() {
+ var left = this.ternary();
+ var right;
+ var token;
+ if ((token = this.expect('='))) {
+ if (!left.assign) {
+ this.throwError('implies assignment but [' +
+ this.text.substring(0, token.index) + '] can not be assigned to', token);
+ }
+ right = this.ternary();
+ return extend(function $parseAssignment(scope, locals) {
+ return left.assign(scope, right(scope, locals), locals);
+ }, {
+ inputs: [left, right]
+ });
+ }
+ return left;
+ },
+
+ ternary: function() {
+ var left = this.logicalOR();
+ var middle;
+ var token;
+ if ((token = this.expect('?'))) {
+ middle = this.assignment();
+ if (this.consume(':')) {
+ var right = this.assignment();
+
+ return extend(function $parseTernary(self, locals) {
+ return left(self, locals) ? middle(self, locals) : right(self, locals);
+ }, {
+ constant: left.constant && middle.constant && right.constant
+ });
+ }
+ }
+
+ return left;
+ },
+
+ logicalOR: function() {
+ var left = this.logicalAND();
+ var token;
+ while ((token = this.expect('||'))) {
+ left = this.binaryFn(left, token.text, this.logicalAND(), true);
+ }
+ return left;
+ },
+
+ logicalAND: function() {
+ var left = this.equality();
+ var token;
+ while ((token = this.expect('&&'))) {
+ left = this.binaryFn(left, token.text, this.equality(), true);
+ }
+ return left;
+ },
+
+ equality: function() {
+ var left = this.relational();
+ var token;
+ while ((token = this.expect('==','!=','===','!=='))) {
+ left = this.binaryFn(left, token.text, this.relational());
+ }
+ return left;
+ },
+
+ relational: function() {
+ var left = this.additive();
+ var token;
+ while ((token = this.expect('<', '>', '<=', '>='))) {
+ left = this.binaryFn(left, token.text, this.additive());
+ }
+ return left;
+ },
+
+ additive: function() {
+ var left = this.multiplicative();
+ var token;
+ while ((token = this.expect('+','-'))) {
+ left = this.binaryFn(left, token.text, this.multiplicative());
+ }
+ return left;
+ },
+
+ multiplicative: function() {
+ var left = this.unary();
+ var token;
+ while ((token = this.expect('*','/','%'))) {
+ left = this.binaryFn(left, token.text, this.unary());
+ }
+ return left;
+ },
+
+ unary: function() {
+ var token;
+ if (this.expect('+')) {
+ return this.primary();
+ } else if ((token = this.expect('-'))) {
+ return this.binaryFn(Parser.ZERO, token.text, this.unary());
+ } else if ((token = this.expect('!'))) {
+ return this.unaryFn(token.text, this.unary());
+ } else {
+ return this.primary();
+ }
+ },
+
+ fieldAccess: function(object) {
+ var getter = this.identifier();
+
+ return extend(function $parseFieldAccess(scope, locals, self) {
+ var o = self || object(scope, locals);
+ return (o == null) ? undefined : getter(o);
+ }, {
+ assign: function(scope, value, locals) {
+ var o = object(scope, locals);
+ if (!o) object.assign(scope, o = {});
+ return getter.assign(o, value);
+ }
+ });
+ },
+
+ objectIndex: function(obj) {
+ var expression = this.text;
+
+ var indexFn = this.expression();
+ this.consume(']');
+
+ return extend(function $parseObjectIndex(self, locals) {
+ var o = obj(self, locals),
+ i = indexFn(self, locals),
+ v;
+
+ ensureSafeMemberName(i, expression);
+ if (!o) return undefined;
+ v = ensureSafeObject(o[i], expression);
+ return v;
+ }, {
+ assign: function(self, value, locals) {
+ var key = ensureSafeMemberName(indexFn(self, locals), expression);
+ // prevent overwriting of Function.constructor which would break ensureSafeObject check
+ var o = ensureSafeObject(obj(self, locals), expression);
+ if (!o) obj.assign(self, o = {});
+ return o[key] = value;
+ }
+ });
+ },
+
+ functionCall: function(fnGetter, contextGetter) {
+ var argsFn = [];
+ if (this.peekToken().text !== ')') {
+ do {
+ argsFn.push(this.expression());
+ } while (this.expect(','));
+ }
+ this.consume(')');
+
+ var expressionText = this.text;
+ // we can safely reuse the array across invocations
+ var args = argsFn.length ? [] : null;
+
+ return function $parseFunctionCall(scope, locals) {
+ var context = contextGetter ? contextGetter(scope, locals) : isDefined(contextGetter) ? undefined : scope;
+ var fn = fnGetter(scope, locals, context) || noop;
+
+ if (args) {
+ var i = argsFn.length;
+ while (i--) {
+ args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText);
+ }
+ }
+
+ ensureSafeObject(context, expressionText);
+ ensureSafeFunction(fn, expressionText);
+
+ // IE doesn't have apply for some native functions
+ var v = fn.apply
+ ? fn.apply(context, args)
+ : fn(args[0], args[1], args[2], args[3], args[4]);
+
+ return ensureSafeObject(v, expressionText);
+ };
+ },
+
+ // This is used with json array declaration
+ arrayDeclaration: function() {
+ var elementFns = [];
+ if (this.peekToken().text !== ']') {
+ do {
+ if (this.peek(']')) {
+ // Support trailing commas per ES5.1.
+ break;
+ }
+ elementFns.push(this.expression());
+ } while (this.expect(','));
+ }
+ this.consume(']');
+
+ return extend(function $parseArrayLiteral(self, locals) {
+ var array = [];
+ for (var i = 0, ii = elementFns.length; i < ii; i++) {
+ array.push(elementFns[i](self, locals));
+ }
+ return array;
+ }, {
+ literal: true,
+ constant: elementFns.every(isConstant),
+ inputs: elementFns
+ });
+ },
+
+ object: function() {
+ var keys = [], valueFns = [];
+ if (this.peekToken().text !== '}') {
+ do {
+ if (this.peek('}')) {
+ // Support trailing commas per ES5.1.
+ break;
+ }
+ var token = this.consume();
+ if (token.constant) {
+ keys.push(token.value);
+ } else if (token.identifier) {
+ keys.push(token.text);
+ } else {
+ this.throwError("invalid key", token);
+ }
+ this.consume(':');
+ valueFns.push(this.expression());
+ } while (this.expect(','));
+ }
+ this.consume('}');
+
+ return extend(function $parseObjectLiteral(self, locals) {
+ var object = {};
+ for (var i = 0, ii = valueFns.length; i < ii; i++) {
+ object[keys[i]] = valueFns[i](self, locals);
+ }
+ return object;
+ }, {
+ literal: true,
+ constant: valueFns.every(isConstant),
+ inputs: valueFns
+ });
+ }
+};
+
+
+//////////////////////////////////////////////////
+// Parser helper functions
+//////////////////////////////////////////////////
+
+function setter(obj, path, setValue, fullExp) {
+ ensureSafeObject(obj, fullExp);
+
+ var element = path.split('.'), key;
+ for (var i = 0; element.length > 1; i++) {
+ key = ensureSafeMemberName(element.shift(), fullExp);
+ var propertyObj = ensureSafeObject(obj[key], fullExp);
+ if (!propertyObj) {
+ propertyObj = {};
+ obj[key] = propertyObj;
+ }
+ obj = propertyObj;
+ }
+ key = ensureSafeMemberName(element.shift(), fullExp);
+ ensureSafeObject(obj[key], fullExp);
+ obj[key] = setValue;
+ return setValue;
+}
+
+var getterFnCacheDefault = createMap();
+var getterFnCacheExpensive = createMap();
+
+function isPossiblyDangerousMemberName(name) {
+ return name == 'constructor';
+}
+
+/**
+ * Implementation of the "Black Hole" variant from:
+ * - http://jsperf.com/angularjs-parse-getter/4
+ * - http://jsperf.com/path-evaluation-simplified/7
+ */
+function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) {
+ ensureSafeMemberName(key0, fullExp);
+ ensureSafeMemberName(key1, fullExp);
+ ensureSafeMemberName(key2, fullExp);
+ ensureSafeMemberName(key3, fullExp);
+ ensureSafeMemberName(key4, fullExp);
+ var eso = function(o) {
+ return ensureSafeObject(o, fullExp);
+ };
+ var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity;
+ var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity;
+ var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity;
+ var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity;
+ var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity;
+
+ return function cspSafeGetter(scope, locals) {
+ var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;
+
+ if (pathVal == null) return pathVal;
+ pathVal = eso0(pathVal[key0]);
+
+ if (!key1) return pathVal;
+ if (pathVal == null) return undefined;
+ pathVal = eso1(pathVal[key1]);
+
+ if (!key2) return pathVal;
+ if (pathVal == null) return undefined;
+ pathVal = eso2(pathVal[key2]);
+
+ if (!key3) return pathVal;
+ if (pathVal == null) return undefined;
+ pathVal = eso3(pathVal[key3]);
+
+ if (!key4) return pathVal;
+ if (pathVal == null) return undefined;
+ pathVal = eso4(pathVal[key4]);
+
+ return pathVal;
+ };
+}
+
+function getterFnWithEnsureSafeObject(fn, fullExpression) {
+ return function(s, l) {
+ return fn(s, l, ensureSafeObject, fullExpression);
+ };
+}
+
+function getterFn(path, options, fullExp) {
+ var expensiveChecks = options.expensiveChecks;
+ var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault);
+ var fn = getterFnCache[path];
+ if (fn) return fn;
+
+
+ var pathKeys = path.split('.'),
+ pathKeysLength = pathKeys.length;
+
+ // http://jsperf.com/angularjs-parse-getter/6
+ if (options.csp) {
+ if (pathKeysLength < 6) {
+ fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks);
+ } else {
+ fn = function cspSafeGetter(scope, locals) {
+ var i = 0, val;
+ do {
+ val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],
+ pathKeys[i++], fullExp, expensiveChecks)(scope, locals);
+
+ locals = undefined; // clear after first iteration
+ scope = val;
+ } while (i < pathKeysLength);
+ return val;
+ };
+ }
+ } else {
+ var code = '';
+ if (expensiveChecks) {
+ code += 's = eso(s, fe);\nl = eso(l, fe);\n';
+ }
+ var needsEnsureSafeObject = expensiveChecks;
+ forEach(pathKeys, function(key, index) {
+ ensureSafeMemberName(key, fullExp);
+ var lookupJs = (index
+ // we simply dereference 's' on any .dot notation
+ ? 's'
+ // but if we are first then we check locals first, and if so read it first
+ : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key;
+ if (expensiveChecks || isPossiblyDangerousMemberName(key)) {
+ lookupJs = 'eso(' + lookupJs + ', fe)';
+ needsEnsureSafeObject = true;
+ }
+ code += 'if(s == null) return undefined;\n' +
+ 's=' + lookupJs + ';\n';
+ });
+ code += 'return s;';
+
+ /* jshint -W054 */
+ var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject
+ /* jshint +W054 */
+ evaledFnGetter.toString = valueFn(code);
+ if (needsEnsureSafeObject) {
+ evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp);
+ }
+ fn = evaledFnGetter;
+ }
+
+ fn.sharedGetter = true;
+ fn.assign = function(self, value) {
+ return setter(self, path, value, path);
+ };
+ getterFnCache[path] = fn;
+ return fn;
+}
+
+var objectValueOf = Object.prototype.valueOf;
+
+function getValueOf(value) {
+ return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
+}
+
+///////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $parse
+ * @kind function
+ *
+ * @description
+ *
+ * Converts Angular {@link guide/expression expression} into a function.
+ *
+ * ```js
+ * var getter = $parse('user.name');
+ * var setter = getter.assign;
+ * var context = {user:{name:'angular'}};
+ * var locals = {user:{name:'local'}};
+ *
+ * expect(getter(context)).toEqual('angular');
+ * setter(context, 'newValue');
+ * expect(context.user.name).toEqual('newValue');
+ * expect(getter(context, locals)).toEqual('local');
+ * ```
+ *
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ *
+ * The returned function also has the following properties:
+ * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
+ * literal.
+ * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
+ * constant literals.
+ * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
+ * set to a function to change its value on the given context.
+ *
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $parseProvider
+ *
+ * @description
+ * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
+ * service.
+ */
+function $ParseProvider() {
+ var cacheDefault = createMap();
+ var cacheExpensive = createMap();
+
+
+
+ this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {
+ var $parseOptions = {
+ csp: $sniffer.csp,
+ expensiveChecks: false
+ },
+ $parseOptionsExpensive = {
+ csp: $sniffer.csp,
+ expensiveChecks: true
+ };
+
+ function wrapSharedExpression(exp) {
+ var wrapped = exp;
+
+ if (exp.sharedGetter) {
+ wrapped = function $parseWrapper(self, locals) {
+ return exp(self, locals);
+ };
+ wrapped.literal = exp.literal;
+ wrapped.constant = exp.constant;
+ wrapped.assign = exp.assign;
+ }
+
+ return wrapped;
+ }
+
+ return function $parse(exp, interceptorFn, expensiveChecks) {
+ var parsedExpression, oneTime, cacheKey;
+
+ switch (typeof exp) {
+ case 'string':
+ cacheKey = exp = exp.trim();
+
+ var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
+ parsedExpression = cache[cacheKey];
+
+ if (!parsedExpression) {
+ if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
+ oneTime = true;
+ exp = exp.substring(2);
+ }
+
+ var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
+ var lexer = new Lexer(parseOptions);
+ var parser = new Parser(lexer, $filter, parseOptions);
+ parsedExpression = parser.parse(exp);
+
+ if (parsedExpression.constant) {
+ parsedExpression.$$watchDelegate = constantWatchDelegate;
+ } else if (oneTime) {
+ //oneTime is not part of the exp passed to the Parser so we may have to
+ //wrap the parsedExpression before adding a $$watchDelegate
+ parsedExpression = wrapSharedExpression(parsedExpression);
+ parsedExpression.$$watchDelegate = parsedExpression.literal ?
+ oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
+ } else if (parsedExpression.inputs) {
+ parsedExpression.$$watchDelegate = inputsWatchDelegate;
+ }
+
+ cache[cacheKey] = parsedExpression;
+ }
+ return addInterceptor(parsedExpression, interceptorFn);
+
+ case 'function':
+ return addInterceptor(exp, interceptorFn);
+
+ default:
+ return addInterceptor(noop, interceptorFn);
+ }
+ };
+
+ function collectExpressionInputs(inputs, list) {
+ for (var i = 0, ii = inputs.length; i < ii; i++) {
+ var input = inputs[i];
+ if (!input.constant) {
+ if (input.inputs) {
+ collectExpressionInputs(input.inputs, list);
+ } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better?
+ list.push(input);
+ }
+ }
+ }
+
+ return list;
+ }
+
+ function expressionInputDirtyCheck(newValue, oldValueOfValue) {
+
+ if (newValue == null || oldValueOfValue == null) { // null/undefined
+ return newValue === oldValueOfValue;
+ }
+
+ if (typeof newValue === 'object') {
+
+ // attempt to convert the value to a primitive type
+ // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
+ // be cheaply dirty-checked
+ newValue = getValueOf(newValue);
+
+ if (typeof newValue === 'object') {
+ // objects/arrays are not supported - deep-watching them would be too expensive
+ return false;
+ }
+
+ // fall-through to the primitive equality check
+ }
+
+ //Primitive or NaN
+ return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
+ }
+
+ function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+ var inputExpressions = parsedExpression.$$inputs ||
+ (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, []));
+
+ var lastResult;
+
+ if (inputExpressions.length === 1) {
+ var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails
+ inputExpressions = inputExpressions[0];
+ return scope.$watch(function expressionInputWatch(scope) {
+ var newInputValue = inputExpressions(scope);
+ if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {
+ lastResult = parsedExpression(scope);
+ oldInputValue = newInputValue && getValueOf(newInputValue);
+ }
+ return lastResult;
+ }, listener, objectEquality);
+ }
+
+ var oldInputValueOfValues = [];
+ for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+ oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
+ }
+
+ return scope.$watch(function expressionInputsWatch(scope) {
+ var changed = false;
+
+ for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+ var newInputValue = inputExpressions[i](scope);
+ if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
+ oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
+ }
+ }
+
+ if (changed) {
+ lastResult = parsedExpression(scope);
+ }
+
+ return lastResult;
+ }, listener, objectEquality);
+ }
+
+ function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+ var unwatch, lastValue;
+ return unwatch = scope.$watch(function oneTimeWatch(scope) {
+ return parsedExpression(scope);
+ }, function oneTimeListener(value, old, scope) {
+ lastValue = value;
+ if (isFunction(listener)) {
+ listener.apply(this, arguments);
+ }
+ if (isDefined(value)) {
+ scope.$$postDigest(function() {
+ if (isDefined(lastValue)) {
+ unwatch();
+ }
+ });
+ }
+ }, objectEquality);
+ }
+
+ function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+ var unwatch, lastValue;
+ return unwatch = scope.$watch(function oneTimeWatch(scope) {
+ return parsedExpression(scope);
+ }, function oneTimeListener(value, old, scope) {
+ lastValue = value;
+ if (isFunction(listener)) {
+ listener.call(this, value, old, scope);
+ }
+ if (isAllDefined(value)) {
+ scope.$$postDigest(function() {
+ if (isAllDefined(lastValue)) unwatch();
+ });
+ }
+ }, objectEquality);
+
+ function isAllDefined(value) {
+ var allDefined = true;
+ forEach(value, function(val) {
+ if (!isDefined(val)) allDefined = false;
+ });
+ return allDefined;
+ }
+ }
+
+ function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+ var unwatch;
+ return unwatch = scope.$watch(function constantWatch(scope) {
+ return parsedExpression(scope);
+ }, function constantListener(value, old, scope) {
+ if (isFunction(listener)) {
+ listener.apply(this, arguments);
+ }
+ unwatch();
+ }, objectEquality);
+ }
+
+ function addInterceptor(parsedExpression, interceptorFn) {
+ if (!interceptorFn) return parsedExpression;
+ var watchDelegate = parsedExpression.$$watchDelegate;
+
+ var regularWatch =
+ watchDelegate !== oneTimeLiteralWatchDelegate &&
+ watchDelegate !== oneTimeWatchDelegate;
+
+ var fn = regularWatch ? function regularInterceptedExpression(scope, locals) {
+ var value = parsedExpression(scope, locals);
+ return interceptorFn(value, scope, locals);
+ } : function oneTimeInterceptedExpression(scope, locals) {
+ var value = parsedExpression(scope, locals);
+ var result = interceptorFn(value, scope, locals);
+ // we only return the interceptor's result if the
+ // initial value is defined (for bind-once)
+ return isDefined(value) ? result : value;
+ };
+
+ // Propagate $$watchDelegates other then inputsWatchDelegate
+ if (parsedExpression.$$watchDelegate &&
+ parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
+ fn.$$watchDelegate = parsedExpression.$$watchDelegate;
+ } else if (!interceptorFn.$stateful) {
+ // If there is an interceptor, but no watchDelegate then treat the interceptor like
+ // we treat filters - it is assumed to be a pure function unless flagged with $stateful
+ fn.$$watchDelegate = inputsWatchDelegate;
+ fn.inputs = [parsedExpression];
+ }
+
+ return fn;
+ }
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $q
+ * @requires $rootScope
+ *
+ * @description
+ * A service that helps you run functions asynchronously, and use their return values (or exceptions)
+ * when they are done processing.
+ *
+ * This is an implementation of promises/deferred objects inspired by
+ * [Kris Kowal's Q](https://github.com/kriskowal/q).
+ *
+ * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
+ * implementations, and the other which resembles ES6 promises to some degree.
+ *
+ * # $q constructor
+ *
+ * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
+ * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
+ * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
+ *
+ * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
+ * available yet.
+ *
+ * It can be used like so:
+ *
+ * ```js
+ * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ * // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ * function asyncGreet(name) {
+ * // perform some asynchronous operation, resolve or reject the promise when appropriate.
+ * return $q(function(resolve, reject) {
+ * setTimeout(function() {
+ * if (okToGreet(name)) {
+ * resolve('Hello, ' + name + '!');
+ * } else {
+ * reject('Greeting ' + name + ' is not allowed.');
+ * }
+ * }, 1000);
+ * });
+ * }
+ *
+ * var promise = asyncGreet('Robin Hood');
+ * promise.then(function(greeting) {
+ * alert('Success: ' + greeting);
+ * }, function(reason) {
+ * alert('Failed: ' + reason);
+ * });
+ * ```
+ *
+ * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
+ *
+ * However, the more traditional CommonJS-style usage is still available, and documented below.
+ *
+ * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
+ * interface for interacting with an object that represents the result of an action that is
+ * performed asynchronously, and may or may not be finished at any given point in time.
+ *
+ * From the perspective of dealing with error handling, deferred and promise APIs are to
+ * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
+ *
+ * ```js
+ * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ * // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ * function asyncGreet(name) {
+ * var deferred = $q.defer();
+ *
+ * setTimeout(function() {
+ * deferred.notify('About to greet ' + name + '.');
+ *
+ * if (okToGreet(name)) {
+ * deferred.resolve('Hello, ' + name + '!');
+ * } else {
+ * deferred.reject('Greeting ' + name + ' is not allowed.');
+ * }
+ * }, 1000);
+ *
+ * return deferred.promise;
+ * }
+ *
+ * var promise = asyncGreet('Robin Hood');
+ * promise.then(function(greeting) {
+ * alert('Success: ' + greeting);
+ * }, function(reason) {
+ * alert('Failed: ' + reason);
+ * }, function(update) {
+ * alert('Got notification: ' + update);
+ * });
+ * ```
+ *
+ * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
+ * comes in the way of guarantees that promise and deferred APIs make, see
+ * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
+ *
+ * Additionally the promise api allows for composition that is very hard to do with the
+ * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
+ * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
+ * section on serial or parallel joining of promises.
+ *
+ * # The Deferred API
+ *
+ * A new instance of deferred is constructed by calling `$q.defer()`.
+ *
+ * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
+ * that can be used for signaling the successful or unsuccessful completion, as well as the status
+ * of the task.
+ *
+ * **Methods**
+ *
+ * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
+ * constructed via `$q.reject`, the promise will be rejected instead.
+ * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
+ * resolving it with a rejection constructed via `$q.reject`.
+ * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
+ * multiple times before the promise is either resolved or rejected.
+ *
+ * **Properties**
+ *
+ * - promise – `{Promise}` – promise object associated with this deferred.
+ *
+ *
+ * # The Promise API
+ *
+ * A new promise instance is created when a deferred instance is created and can be retrieved by
+ * calling `deferred.promise`.
+ *
+ * The purpose of the promise object is to allow for interested parties to get access to the result
+ * of the deferred task when it completes.
+ *
+ * **Methods**
+ *
+ * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
+ * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
+ * as soon as the result is available. The callbacks are called with a single argument: the result
+ * or rejection reason. Additionally, the notify callback may be called zero or more times to
+ * provide a progress indication, before the promise is resolved or rejected.
+ *
+ * This method *returns a new promise* which is resolved or rejected via the return value of the
+ * `successCallback`, `errorCallback`. It also notifies via the return value of the
+ * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback
+ * method.
+ *
+ * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
+ *
+ * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,
+ * but to do so without modifying the final value. This is useful to release resources or do some
+ * clean-up that needs to be done whether the promise was rejected or resolved. See the [full
+ * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
+ * more information.
+ *
+ * # Chaining promises
+ *
+ * Because calling the `then` method of a promise returns a new derived promise, it is easily
+ * possible to create a chain of promises:
+ *
+ * ```js
+ * promiseB = promiseA.then(function(result) {
+ * return result + 1;
+ * });
+ *
+ * // promiseB will be resolved immediately after promiseA is resolved and its value
+ * // will be the result of promiseA incremented by 1
+ * ```
+ *
+ * It is possible to create chains of any length and since a promise can be resolved with another
+ * promise (which will defer its resolution further), it is possible to pause/defer resolution of
+ * the promises at any point in the chain. This makes it possible to implement powerful APIs like
+ * $http's response interceptors.
+ *
+ *
+ * # Differences between Kris Kowal's Q and $q
+ *
+ * There are two main differences:
+ *
+ * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
+ * mechanism in angular, which means faster propagation of resolution or rejection into your
+ * models and avoiding unnecessary browser repaints, which would result in flickering UI.
+ * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
+ * all the important functionality needed for common async tasks.
+ *
+ * # Testing
+ *
+ * ```js
+ * it('should simulate promise', inject(function($q, $rootScope) {
+ * var deferred = $q.defer();
+ * var promise = deferred.promise;
+ * var resolvedValue;
+ *
+ * promise.then(function(value) { resolvedValue = value; });
+ * expect(resolvedValue).toBeUndefined();
+ *
+ * // Simulate resolving of promise
+ * deferred.resolve(123);
+ * // Note that the 'then' function does not get called synchronously.
+ * // This is because we want the promise API to always be async, whether or not
+ * // it got called synchronously or asynchronously.
+ * expect(resolvedValue).toBeUndefined();
+ *
+ * // Propagate promise resolution to 'then' functions using $apply().
+ * $rootScope.$apply();
+ * expect(resolvedValue).toEqual(123);
+ * }));
+ * ```
+ *
+ * @param {function(function, function)} resolver Function which is responsible for resolving or
+ * rejecting the newly created promise. The first parameter is a function which resolves the
+ * promise, the second parameter is a function which rejects the promise.
+ *
+ * @returns {Promise} The newly created promise.
+ */
+function $QProvider() {
+
+ this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
+ return qFactory(function(callback) {
+ $rootScope.$evalAsync(callback);
+ }, $exceptionHandler);
+ }];
+}
+
+function $$QProvider() {
+ this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
+ return qFactory(function(callback) {
+ $browser.defer(callback);
+ }, $exceptionHandler);
+ }];
+}
+
+/**
+ * Constructs a promise manager.
+ *
+ * @param {function(function)} nextTick Function for executing functions in the next turn.
+ * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
+ * debugging purposes.
+ * @returns {object} Promise manager.
+ */
+function qFactory(nextTick, exceptionHandler) {
+ var $qMinErr = minErr('$q', TypeError);
+ function callOnce(self, resolveFn, rejectFn) {
+ var called = false;
+ function wrap(fn) {
+ return function(value) {
+ if (called) return;
+ called = true;
+ fn.call(self, value);
+ };
+ }
+
+ return [wrap(resolveFn), wrap(rejectFn)];
+ }
+
+ /**
+ * @ngdoc method
+ * @name ng.$q#defer
+ * @kind function
+ *
+ * @description
+ * Creates a `Deferred` object which represents a task which will finish in the future.
+ *
+ * @returns {Deferred} Returns a new instance of deferred.
+ */
+ var defer = function() {
+ return new Deferred();
+ };
+
+ function Promise() {
+ this.$$state = { status: 0 };
+ }
+
+ Promise.prototype = {
+ then: function(onFulfilled, onRejected, progressBack) {
+ var result = new Deferred();
+
+ this.$$state.pending = this.$$state.pending || [];
+ this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
+ if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
+
+ return result.promise;
+ },
+
+ "catch": function(callback) {
+ return this.then(null, callback);
+ },
+
+ "finally": function(callback, progressBack) {
+ return this.then(function(value) {
+ return handleCallback(value, true, callback);
+ }, function(error) {
+ return handleCallback(error, false, callback);
+ }, progressBack);
+ }
+ };
+
+ //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
+ function simpleBind(context, fn) {
+ return function(value) {
+ fn.call(context, value);
+ };
+ }
+
+ function processQueue(state) {
+ var fn, promise, pending;
+
+ pending = state.pending;
+ state.processScheduled = false;
+ state.pending = undefined;
+ for (var i = 0, ii = pending.length; i < ii; ++i) {
+ promise = pending[i][0];
+ fn = pending[i][state.status];
+ try {
+ if (isFunction(fn)) {
+ promise.resolve(fn(state.value));
+ } else if (state.status === 1) {
+ promise.resolve(state.value);
+ } else {
+ promise.reject(state.value);
+ }
+ } catch (e) {
+ promise.reject(e);
+ exceptionHandler(e);
+ }
+ }
+ }
+
+ function scheduleProcessQueue(state) {
+ if (state.processScheduled || !state.pending) return;
+ state.processScheduled = true;
+ nextTick(function() { processQueue(state); });
+ }
+
+ function Deferred() {
+ this.promise = new Promise();
+ //Necessary to support unbound execution :/
+ this.resolve = simpleBind(this, this.resolve);
+ this.reject = simpleBind(this, this.reject);
+ this.notify = simpleBind(this, this.notify);
+ }
+
+ Deferred.prototype = {
+ resolve: function(val) {
+ if (this.promise.$$state.status) return;
+ if (val === this.promise) {
+ this.$$reject($qMinErr(
+ 'qcycle',
+ "Expected promise to be resolved with value other than itself '{0}'",
+ val));
+ }
+ else {
+ this.$$resolve(val);
+ }
+
+ },
+
+ $$resolve: function(val) {
+ var then, fns;
+
+ fns = callOnce(this, this.$$resolve, this.$$reject);
+ try {
+ if ((isObject(val) || isFunction(val))) then = val && val.then;
+ if (isFunction(then)) {
+ this.promise.$$state.status = -1;
+ then.call(val, fns[0], fns[1], this.notify);
+ } else {
+ this.promise.$$state.value = val;
+ this.promise.$$state.status = 1;
+ scheduleProcessQueue(this.promise.$$state);
+ }
+ } catch (e) {
+ fns[1](e);
+ exceptionHandler(e);
+ }
+ },
+
+ reject: function(reason) {
+ if (this.promise.$$state.status) return;
+ this.$$reject(reason);
+ },
+
+ $$reject: function(reason) {
+ this.promise.$$state.value = reason;
+ this.promise.$$state.status = 2;
+ scheduleProcessQueue(this.promise.$$state);
+ },
+
+ notify: function(progress) {
+ var callbacks = this.promise.$$state.pending;
+
+ if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
+ nextTick(function() {
+ var callback, result;
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
+ result = callbacks[i][0];
+ callback = callbacks[i][3];
+ try {
+ result.notify(isFunction(callback) ? callback(progress) : progress);
+ } catch (e) {
+ exceptionHandler(e);
+ }
+ }
+ });
+ }
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $q#reject
+ * @kind function
+ *
+ * @description
+ * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
+ * used to forward rejection in a chain of promises. If you are dealing with the last promise in
+ * a promise chain, you don't need to worry about it.
+ *
+ * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
+ * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
+ * a promise error callback and you want to forward the error to the promise derived from the
+ * current promise, you have to "rethrow" the error by returning a rejection constructed via
+ * `reject`.
+ *
+ * ```js
+ * promiseB = promiseA.then(function(result) {
+ * // success: do something and resolve promiseB
+ * // with the old or a new result
+ * return result;
+ * }, function(reason) {
+ * // error: handle the error if possible and
+ * // resolve promiseB with newPromiseOrValue,
+ * // otherwise forward the rejection to promiseB
+ * if (canHandle(reason)) {
+ * // handle the error and recover
+ * return newPromiseOrValue;
+ * }
+ * return $q.reject(reason);
+ * });
+ * ```
+ *
+ * @param {*} reason Constant, message, exception or an object representing the rejection reason.
+ * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
+ */
+ var reject = function(reason) {
+ var result = new Deferred();
+ result.reject(reason);
+ return result.promise;
+ };
+
+ var makePromise = function makePromise(value, resolved) {
+ var result = new Deferred();
+ if (resolved) {
+ result.resolve(value);
+ } else {
+ result.reject(value);
+ }
+ return result.promise;
+ };
+
+ var handleCallback = function handleCallback(value, isResolved, callback) {
+ var callbackOutput = null;
+ try {
+ if (isFunction(callback)) callbackOutput = callback();
+ } catch (e) {
+ return makePromise(e, false);
+ }
+ if (isPromiseLike(callbackOutput)) {
+ return callbackOutput.then(function() {
+ return makePromise(value, isResolved);
+ }, function(error) {
+ return makePromise(error, false);
+ });
+ } else {
+ return makePromise(value, isResolved);
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $q#when
+ * @kind function
+ *
+ * @description
+ * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
+ * This is useful when you are dealing with an object that might or might not be a promise, or if
+ * the promise comes from a source that can't be trusted.
+ *
+ * @param {*} value Value or a promise
+ * @returns {Promise} Returns a promise of the passed value or promise
+ */
+
+
+ var when = function(value, callback, errback, progressBack) {
+ var result = new Deferred();
+ result.resolve(value);
+ return result.promise.then(callback, errback, progressBack);
+ };
+
+ /**
+ * @ngdoc method
+ * @name $q#all
+ * @kind function
+ *
+ * @description
+ * Combines multiple promises into a single promise that is resolved when all of the input
+ * promises are resolved.
+ *
+ * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
+ * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
+ * each value corresponding to the promise at the same index/key in the `promises` array/hash.
+ * If any of the promises is resolved with a rejection, this resulting promise will be rejected
+ * with the same rejection value.
+ */
+
+ function all(promises) {
+ var deferred = new Deferred(),
+ counter = 0,
+ results = isArray(promises) ? [] : {};
+
+ forEach(promises, function(promise, key) {
+ counter++;
+ when(promise).then(function(value) {
+ if (results.hasOwnProperty(key)) return;
+ results[key] = value;
+ if (!(--counter)) deferred.resolve(results);
+ }, function(reason) {
+ if (results.hasOwnProperty(key)) return;
+ deferred.reject(reason);
+ });
+ });
+
+ if (counter === 0) {
+ deferred.resolve(results);
+ }
+
+ return deferred.promise;
+ }
+
+ var $Q = function Q(resolver) {
+ if (!isFunction(resolver)) {
+ throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
+ }
+
+ if (!(this instanceof Q)) {
+ // More useful when $Q is the Promise itself.
+ return new Q(resolver);
+ }
+
+ var deferred = new Deferred();
+
+ function resolveFn(value) {
+ deferred.resolve(value);
+ }
+
+ function rejectFn(reason) {
+ deferred.reject(reason);
+ }
+
+ resolver(resolveFn, rejectFn);
+
+ return deferred.promise;
+ };
+
+ $Q.defer = defer;
+ $Q.reject = reject;
+ $Q.when = when;
+ $Q.all = all;
+
+ return $Q;
+}
+
+function $$RAFProvider() { //rAF
+ this.$get = ['$window', '$timeout', function($window, $timeout) {
+ var requestAnimationFrame = $window.requestAnimationFrame ||
+ $window.webkitRequestAnimationFrame;
+
+ var cancelAnimationFrame = $window.cancelAnimationFrame ||
+ $window.webkitCancelAnimationFrame ||
+ $window.webkitCancelRequestAnimationFrame;
+
+ var rafSupported = !!requestAnimationFrame;
+ var raf = rafSupported
+ ? function(fn) {
+ var id = requestAnimationFrame(fn);
+ return function() {
+ cancelAnimationFrame(id);
+ };
+ }
+ : function(fn) {
+ var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
+ return function() {
+ $timeout.cancel(timer);
+ };
+ };
+
+ raf.supported = rafSupported;
+
+ return raf;
+ }];
+}
+
+/**
+ * DESIGN NOTES
+ *
+ * The design decisions behind the scope are heavily favored for speed and memory consumption.
+ *
+ * The typical use of scope is to watch the expressions, which most of the time return the same
+ * value as last time so we optimize the operation.
+ *
+ * Closures construction is expensive in terms of speed as well as memory:
+ * - No closures, instead use prototypical inheritance for API
+ * - Internal state needs to be stored on scope directly, which means that private state is
+ * exposed as $$____ properties
+ *
+ * Loop operations are optimized by using while(count--) { ... }
+ * - this means that in order to keep the same order of execution as addition we have to add
+ * items to the array at the beginning (unshift) instead of at the end (push)
+ *
+ * Child scopes are created and removed often
+ * - Using an array would be slow since inserts in middle are expensive so we use linked list
+ *
+ * There are few watches then a lot of observers. This is why you don't want the observer to be
+ * implemented in the same way as watch. Watch requires return of initialization function which
+ * are expensive to construct.
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $rootScopeProvider
+ * @description
+ *
+ * Provider for the $rootScope service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $rootScopeProvider#digestTtl
+ * @description
+ *
+ * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
+ * assuming that the model is unstable.
+ *
+ * The current default is 10 iterations.
+ *
+ * In complex applications it's possible that the dependencies between `$watch`s will result in
+ * several digest iterations. However if an application needs more than the default 10 digest
+ * iterations for its model to stabilize then you should investigate what is causing the model to
+ * continuously change during the digest.
+ *
+ * Increasing the TTL could have performance implications, so you should not change it without
+ * proper justification.
+ *
+ * @param {number} limit The number of digest iterations.
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $rootScope
+ * @description
+ *
+ * Every application has a single root {@link ng.$rootScope.Scope scope}.
+ * All other scopes are descendant scopes of the root scope. Scopes provide separation
+ * between the model and the view, via a mechanism for watching the model for changes.
+ * They also provide an event emission/broadcast and subscription facility. See the
+ * {@link guide/scope developer guide on scopes}.
+ */
+function $RootScopeProvider() {
+ var TTL = 10;
+ var $rootScopeMinErr = minErr('$rootScope');
+ var lastDirtyWatch = null;
+ var applyAsyncId = null;
+
+ this.digestTtl = function(value) {
+ if (arguments.length) {
+ TTL = value;
+ }
+ return TTL;
+ };
+
+ this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
+ function($injector, $exceptionHandler, $parse, $browser) {
+
+ /**
+ * @ngdoc type
+ * @name $rootScope.Scope
+ *
+ * @description
+ * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
+ * {@link auto.$injector $injector}. Child scopes are created using the
+ * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
+ * compiled HTML template is executed.)
+ *
+ * Here is a simple scope snippet to show how you can interact with the scope.
+ * ```html
+ * <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
+ * ```
+ *
+ * # Inheritance
+ * A scope can inherit from a parent scope, as in this example:
+ * ```js
+ var parent = $rootScope;
+ var child = parent.$new();
+
+ parent.salutation = "Hello";
+ expect(child.salutation).toEqual('Hello');
+
+ child.salutation = "Welcome";
+ expect(child.salutation).toEqual('Welcome');
+ expect(parent.salutation).toEqual('Hello');
+ * ```
+ *
+ * When interacting with `Scope` in tests, additional helper methods are available on the
+ * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
+ * details.
+ *
+ *
+ * @param {Object.<string, function()>=} providers Map of service factory which need to be
+ * provided for the current scope. Defaults to {@link ng}.
+ * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
+ * append/override services provided by `providers`. This is handy
+ * when unit-testing and having the need to override a default
+ * service.
+ * @returns {Object} Newly created scope.
+ *
+ */
+ function Scope() {
+ this.$id = nextUid();
+ this.$$phase = this.$parent = this.$$watchers =
+ this.$$nextSibling = this.$$prevSibling =
+ this.$$childHead = this.$$childTail = null;
+ this.$root = this;
+ this.$$destroyed = false;
+ this.$$listeners = {};
+ this.$$listenerCount = {};
+ this.$$isolateBindings = null;
+ }
+
+ /**
+ * @ngdoc property
+ * @name $rootScope.Scope#$id
+ *
+ * @description
+ * Unique scope ID (monotonically increasing) useful for debugging.
+ */
+
+ /**
+ * @ngdoc property
+ * @name $rootScope.Scope#$parent
+ *
+ * @description
+ * Reference to the parent scope.
+ */
+
+ /**
+ * @ngdoc property
+ * @name $rootScope.Scope#$root
+ *
+ * @description
+ * Reference to the root scope.
+ */
+
+ Scope.prototype = {
+ constructor: Scope,
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$new
+ * @kind function
+ *
+ * @description
+ * Creates a new child {@link ng.$rootScope.Scope scope}.
+ *
+ * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
+ * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
+ *
+ * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
+ * desired for the scope and its child scopes to be permanently detached from the parent and
+ * thus stop participating in model change detection and listener notification by invoking.
+ *
+ * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
+ * parent scope. The scope is isolated, as it can not see parent scope properties.
+ * When creating widgets, it is useful for the widget to not accidentally read parent
+ * state.
+ *
+ * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
+ * of the newly created scope. Defaults to `this` scope if not provided.
+ * This is used when creating a transclude scope to correctly place it
+ * in the scope hierarchy while maintaining the correct prototypical
+ * inheritance.
+ *
+ * @returns {Object} The newly created child scope.
+ *
+ */
+ $new: function(isolate, parent) {
+ var child;
+
+ parent = parent || this;
+
+ if (isolate) {
+ child = new Scope();
+ child.$root = this.$root;
+ } else {
+ // Only create a child scope class if somebody asks for one,
+ // but cache it to allow the VM to optimize lookups.
+ if (!this.$$ChildScope) {
+ this.$$ChildScope = function ChildScope() {
+ this.$$watchers = this.$$nextSibling =
+ this.$$childHead = this.$$childTail = null;
+ this.$$listeners = {};
+ this.$$listenerCount = {};
+ this.$id = nextUid();
+ this.$$ChildScope = null;
+ };
+ this.$$ChildScope.prototype = this;
+ }
+ child = new this.$$ChildScope();
+ }
+ child.$parent = parent;
+ child.$$prevSibling = parent.$$childTail;
+ if (parent.$$childHead) {
+ parent.$$childTail.$$nextSibling = child;
+ parent.$$childTail = child;
+ } else {
+ parent.$$childHead = parent.$$childTail = child;
+ }
+
+ // When the new scope is not isolated or we inherit from `this`, and
+ // the parent scope is destroyed, the property `$$destroyed` is inherited
+ // prototypically. In all other cases, this property needs to be set
+ // when the parent scope is destroyed.
+ // The listener needs to be added after the parent is set
+ if (isolate || parent != this) child.$on('$destroy', destroyChild);
+
+ return child;
+
+ function destroyChild() {
+ child.$$destroyed = true;
+ }
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$watch
+ * @kind function
+ *
+ * @description
+ * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
+ *
+ * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
+ * $digest()} and should return the value that will be watched. (Since
+ * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the
+ * `watchExpression` can execute multiple times per
+ * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)
+ * - The `listener` is called only when the value from the current `watchExpression` and the
+ * previous call to `watchExpression` are not equal (with the exception of the initial run,
+ * see below). Inequality is determined according to reference inequality,
+ * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
+ * via the `!==` Javascript operator, unless `objectEquality == true`
+ * (see next point)
+ * - When `objectEquality == true`, inequality of the `watchExpression` is determined
+ * according to the {@link angular.equals} function. To save the value of the object for
+ * later comparison, the {@link angular.copy} function is used. This therefore means that
+ * watching complex objects will have adverse memory and performance implications.
+ * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
+ * This is achieved by rerunning the watchers until no changes are detected. The rerun
+ * iteration limit is 10 to prevent an infinite loop deadlock.
+ *
+ *
+ * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
+ * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`
+ * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a
+ * change is detected, be prepared for multiple calls to your listener.)
+ *
+ * After a watcher is registered with the scope, the `listener` fn is called asynchronously
+ * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
+ * watcher. In rare cases, this is undesirable because the listener is called when the result
+ * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
+ * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
+ * listener was called due to initialization.
+ *
+ *
+ *
+ * # Example
+ * ```js
+ // let's assume that scope was dependency injected as the $rootScope
+ var scope = $rootScope;
+ scope.name = 'misko';
+ scope.counter = 0;
+
+ expect(scope.counter).toEqual(0);
+ scope.$watch('name', function(newValue, oldValue) {
+ scope.counter = scope.counter + 1;
+ });
+ expect(scope.counter).toEqual(0);
+
+ scope.$digest();
+ // the listener is always called during the first $digest loop after it was registered
+ expect(scope.counter).toEqual(1);
+
+ scope.$digest();
+ // but now it will not be called unless the value changes
+ expect(scope.counter).toEqual(1);
+
+ scope.name = 'adam';
+ scope.$digest();
+ expect(scope.counter).toEqual(2);
+
+
+
+ // Using a function as a watchExpression
+ var food;
+ scope.foodCounter = 0;
+ expect(scope.foodCounter).toEqual(0);
+ scope.$watch(
+ // This function returns the value being watched. It is called for each turn of the $digest loop
+ function() { return food; },
+ // This is the change listener, called when the value returned from the above function changes
+ function(newValue, oldValue) {
+ if ( newValue !== oldValue ) {
+ // Only increment the counter if the value changed
+ scope.foodCounter = scope.foodCounter + 1;
+ }
+ }
+ );
+ // No digest has been run so the counter will be zero
+ expect(scope.foodCounter).toEqual(0);
+
+ // Run the digest but since food has not changed count will still be zero
+ scope.$digest();
+ expect(scope.foodCounter).toEqual(0);
+
+ // Update food and run digest. Now the counter will increment
+ food = 'cheeseburger';
+ scope.$digest();
+ expect(scope.foodCounter).toEqual(1);
+
+ * ```
+ *
+ *
+ *
+ * @param {(function()|string)} watchExpression Expression that is evaluated on each
+ * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
+ * a call to the `listener`.
+ *
+ * - `string`: Evaluated as {@link guide/expression expression}
+ * - `function(scope)`: called with current `scope` as a parameter.
+ * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
+ * of `watchExpression` changes.
+ *
+ * - `newVal` contains the current value of the `watchExpression`
+ * - `oldVal` contains the previous value of the `watchExpression`
+ * - `scope` refers to the current scope
+ * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
+ * comparing for reference equality.
+ * @returns {function()} Returns a deregistration function for this listener.
+ */
+ $watch: function(watchExp, listener, objectEquality) {
+ var get = $parse(watchExp);
+
+ if (get.$$watchDelegate) {
+ return get.$$watchDelegate(this, listener, objectEquality, get);
+ }
+ var scope = this,
+ array = scope.$$watchers,
+ watcher = {
+ fn: listener,
+ last: initWatchVal,
+ get: get,
+ exp: watchExp,
+ eq: !!objectEquality
+ };
+
+ lastDirtyWatch = null;
+
+ if (!isFunction(listener)) {
+ watcher.fn = noop;
+ }
+
+ if (!array) {
+ array = scope.$$watchers = [];
+ }
+ // we use unshift since we use a while loop in $digest for speed.
+ // the while loop reads in reverse order.
+ array.unshift(watcher);
+
+ return function deregisterWatch() {
+ arrayRemove(array, watcher);
+ lastDirtyWatch = null;
+ };
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$watchGroup
+ * @kind function
+ *
+ * @description
+ * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
+ * If any one expression in the collection changes the `listener` is executed.
+ *
+ * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
+ * call to $digest() to see if any items changes.
+ * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
+ *
+ * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
+ * watched using {@link ng.$rootScope.Scope#$watch $watch()}
+ *
+ * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
+ * expression in `watchExpressions` changes
+ * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
+ * those of `watchExpression`
+ * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
+ * those of `watchExpression`
+ * The `scope` refers to the current scope.
+ * @returns {function()} Returns a de-registration function for all listeners.
+ */
+ $watchGroup: function(watchExpressions, listener) {
+ var oldValues = new Array(watchExpressions.length);
+ var newValues = new Array(watchExpressions.length);
+ var deregisterFns = [];
+ var self = this;
+ var changeReactionScheduled = false;
+ var firstRun = true;
+
+ if (!watchExpressions.length) {
+ // No expressions means we call the listener ASAP
+ var shouldCall = true;
+ self.$evalAsync(function() {
+ if (shouldCall) listener(newValues, newValues, self);
+ });
+ return function deregisterWatchGroup() {
+ shouldCall = false;
+ };
+ }
+
+ if (watchExpressions.length === 1) {
+ // Special case size of one
+ return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
+ newValues[0] = value;
+ oldValues[0] = oldValue;
+ listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
+ });
+ }
+
+ forEach(watchExpressions, function(expr, i) {
+ var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
+ newValues[i] = value;
+ oldValues[i] = oldValue;
+ if (!changeReactionScheduled) {
+ changeReactionScheduled = true;
+ self.$evalAsync(watchGroupAction);
+ }
+ });
+ deregisterFns.push(unwatchFn);
+ });
+
+ function watchGroupAction() {
+ changeReactionScheduled = false;
+
+ if (firstRun) {
+ firstRun = false;
+ listener(newValues, newValues, self);
+ } else {
+ listener(newValues, oldValues, self);
+ }
+ }
+
+ return function deregisterWatchGroup() {
+ while (deregisterFns.length) {
+ deregisterFns.shift()();
+ }
+ };
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$watchCollection
+ * @kind function
+ *
+ * @description
+ * Shallow watches the properties of an object and fires whenever any of the properties change
+ * (for arrays, this implies watching the array items; for object maps, this implies watching
+ * the properties). If a change is detected, the `listener` callback is fired.
+ *
+ * - The `obj` collection is observed via standard $watch operation and is examined on every
+ * call to $digest() to see if any items have been added, removed, or moved.
+ * - The `listener` is called whenever anything within the `obj` has changed. Examples include
+ * adding, removing, and moving items belonging to an object or array.
+ *
+ *
+ * # Example
+ * ```js
+ $scope.names = ['igor', 'matias', 'misko', 'james'];
+ $scope.dataCount = 4;
+
+ $scope.$watchCollection('names', function(newNames, oldNames) {
+ $scope.dataCount = newNames.length;
+ });
+
+ expect($scope.dataCount).toEqual(4);
+ $scope.$digest();
+
+ //still at 4 ... no changes
+ expect($scope.dataCount).toEqual(4);
+
+ $scope.names.pop();
+ $scope.$digest();
+
+ //now there's been a change
+ expect($scope.dataCount).toEqual(3);
+ * ```
+ *
+ *
+ * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
+ * expression value should evaluate to an object or an array which is observed on each
+ * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
+ * collection will trigger a call to the `listener`.
+ *
+ * @param {function(newCollection, oldCollection, scope)} listener a callback function called
+ * when a change is detected.
+ * - The `newCollection` object is the newly modified data obtained from the `obj` expression
+ * - The `oldCollection` object is a copy of the former collection data.
+ * Due to performance considerations, the`oldCollection` value is computed only if the
+ * `listener` function declares two or more arguments.
+ * - The `scope` argument refers to the current scope.
+ *
+ * @returns {function()} Returns a de-registration function for this listener. When the
+ * de-registration function is executed, the internal watch operation is terminated.
+ */
+ $watchCollection: function(obj, listener) {
+ $watchCollectionInterceptor.$stateful = true;
+
+ var self = this;
+ // the current value, updated on each dirty-check run
+ var newValue;
+ // a shallow copy of the newValue from the last dirty-check run,
+ // updated to match newValue during dirty-check run
+ var oldValue;
+ // a shallow copy of the newValue from when the last change happened
+ var veryOldValue;
+ // only track veryOldValue if the listener is asking for it
+ var trackVeryOldValue = (listener.length > 1);
+ var changeDetected = 0;
+ var changeDetector = $parse(obj, $watchCollectionInterceptor);
+ var internalArray = [];
+ var internalObject = {};
+ var initRun = true;
+ var oldLength = 0;
+
+ function $watchCollectionInterceptor(_value) {
+ newValue = _value;
+ var newLength, key, bothNaN, newItem, oldItem;
+
+ // If the new value is undefined, then return undefined as the watch may be a one-time watch
+ if (isUndefined(newValue)) return;
+
+ if (!isObject(newValue)) { // if primitive
+ if (oldValue !== newValue) {
+ oldValue = newValue;
+ changeDetected++;
+ }
+ } else if (isArrayLike(newValue)) {
+ if (oldValue !== internalArray) {
+ // we are transitioning from something which was not an array into array.
+ oldValue = internalArray;
+ oldLength = oldValue.length = 0;
+ changeDetected++;
+ }
+
+ newLength = newValue.length;
+
+ if (oldLength !== newLength) {
+ // if lengths do not match we need to trigger change notification
+ changeDetected++;
+ oldValue.length = oldLength = newLength;
+ }
+ // copy the items to oldValue and look for changes.
+ for (var i = 0; i < newLength; i++) {
+ oldItem = oldValue[i];
+ newItem = newValue[i];
+
+ bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+ if (!bothNaN && (oldItem !== newItem)) {
+ changeDetected++;
+ oldValue[i] = newItem;
+ }
+ }
+ } else {
+ if (oldValue !== internalObject) {
+ // we are transitioning from something which was not an object into object.
+ oldValue = internalObject = {};
+ oldLength = 0;
+ changeDetected++;
+ }
+ // copy the items to oldValue and look for changes.
+ newLength = 0;
+ for (key in newValue) {
+ if (newValue.hasOwnProperty(key)) {
+ newLength++;
+ newItem = newValue[key];
+ oldItem = oldValue[key];
+
+ if (key in oldValue) {
+ bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+ if (!bothNaN && (oldItem !== newItem)) {
+ changeDetected++;
+ oldValue[key] = newItem;
+ }
+ } else {
+ oldLength++;
+ oldValue[key] = newItem;
+ changeDetected++;
+ }
+ }
+ }
+ if (oldLength > newLength) {
+ // we used to have more keys, need to find them and destroy them.
+ changeDetected++;
+ for (key in oldValue) {
+ if (!newValue.hasOwnProperty(key)) {
+ oldLength--;
+ delete oldValue[key];
+ }
+ }
+ }
+ }
+ return changeDetected;
+ }
+
+ function $watchCollectionAction() {
+ if (initRun) {
+ initRun = false;
+ listener(newValue, newValue, self);
+ } else {
+ listener(newValue, veryOldValue, self);
+ }
+
+ // make a copy for the next time a collection is changed
+ if (trackVeryOldValue) {
+ if (!isObject(newValue)) {
+ //primitive
+ veryOldValue = newValue;
+ } else if (isArrayLike(newValue)) {
+ veryOldValue = new Array(newValue.length);
+ for (var i = 0; i < newValue.length; i++) {
+ veryOldValue[i] = newValue[i];
+ }
+ } else { // if object
+ veryOldValue = {};
+ for (var key in newValue) {
+ if (hasOwnProperty.call(newValue, key)) {
+ veryOldValue[key] = newValue[key];
+ }
+ }
+ }
+ }
+ }
+
+ return this.$watch(changeDetector, $watchCollectionAction);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$digest
+ * @kind function
+ *
+ * @description
+ * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
+ * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
+ * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
+ * until no more listeners are firing. This means that it is possible to get into an infinite
+ * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
+ * iterations exceeds 10.
+ *
+ * Usually, you don't call `$digest()` directly in
+ * {@link ng.directive:ngController controllers} or in
+ * {@link ng.$compileProvider#directive directives}.
+ * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
+ * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
+ *
+ * If you want to be notified whenever `$digest()` is called,
+ * you can register a `watchExpression` function with
+ * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
+ *
+ * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
+ *
+ * # Example
+ * ```js
+ var scope = ...;
+ scope.name = 'misko';
+ scope.counter = 0;
+
+ expect(scope.counter).toEqual(0);
+ scope.$watch('name', function(newValue, oldValue) {
+ scope.counter = scope.counter + 1;
+ });
+ expect(scope.counter).toEqual(0);
+
+ scope.$digest();
+ // the listener is always called during the first $digest loop after it was registered
+ expect(scope.counter).toEqual(1);
+
+ scope.$digest();
+ // but now it will not be called unless the value changes
+ expect(scope.counter).toEqual(1);
+
+ scope.name = 'adam';
+ scope.$digest();
+ expect(scope.counter).toEqual(2);
+ * ```
+ *
+ */
+ $digest: function() {
+ var watch, value, last,
+ watchers,
+ length,
+ dirty, ttl = TTL,
+ next, current, target = this,
+ watchLog = [],
+ logIdx, logMsg, asyncTask;
+
+ beginPhase('$digest');
+ // Check for changes to browser url that happened in sync before the call to $digest
+ $browser.$$checkUrlChange();
+
+ if (this === $rootScope && applyAsyncId !== null) {
+ // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
+ // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
+ $browser.defer.cancel(applyAsyncId);
+ flushApplyAsync();
+ }
+
+ lastDirtyWatch = null;
+
+ do { // "while dirty" loop
+ dirty = false;
+ current = target;
+
+ while (asyncQueue.length) {
+ try {
+ asyncTask = asyncQueue.shift();
+ asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ lastDirtyWatch = null;
+ }
+
+ traverseScopesLoop:
+ do { // "traverse the scopes" loop
+ if ((watchers = current.$$watchers)) {
+ // process our watches
+ length = watchers.length;
+ while (length--) {
+ try {
+ watch = watchers[length];
+ // Most common watches are on primitives, in which case we can short
+ // circuit it with === operator, only when === fails do we use .equals
+ if (watch) {
+ if ((value = watch.get(current)) !== (last = watch.last) &&
+ !(watch.eq
+ ? equals(value, last)
+ : (typeof value === 'number' && typeof last === 'number'
+ && isNaN(value) && isNaN(last)))) {
+ dirty = true;
+ lastDirtyWatch = watch;
+ watch.last = watch.eq ? copy(value, null) : value;
+ watch.fn(value, ((last === initWatchVal) ? value : last), current);
+ if (ttl < 5) {
+ logIdx = 4 - ttl;
+ if (!watchLog[logIdx]) watchLog[logIdx] = [];
+ watchLog[logIdx].push({
+ msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,
+ newVal: value,
+ oldVal: last
+ });
+ }
+ } else if (watch === lastDirtyWatch) {
+ // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
+ // have already been tested.
+ dirty = false;
+ break traverseScopesLoop;
+ }
+ }
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ }
+
+ // Insanity Warning: scope depth-first traversal
+ // yes, this code is a bit crazy, but it works and we have tests to prove it!
+ // this piece should be kept in sync with the traversal in $broadcast
+ if (!(next = (current.$$childHead ||
+ (current !== target && current.$$nextSibling)))) {
+ while (current !== target && !(next = current.$$nextSibling)) {
+ current = current.$parent;
+ }
+ }
+ } while ((current = next));
+
+ // `break traverseScopesLoop;` takes us to here
+
+ if ((dirty || asyncQueue.length) && !(ttl--)) {
+ clearPhase();
+ throw $rootScopeMinErr('infdig',
+ '{0} $digest() iterations reached. Aborting!\n' +
+ 'Watchers fired in the last 5 iterations: {1}',
+ TTL, watchLog);
+ }
+
+ } while (dirty || asyncQueue.length);
+
+ clearPhase();
+
+ while (postDigestQueue.length) {
+ try {
+ postDigestQueue.shift()();
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ },
+
+
+ /**
+ * @ngdoc event
+ * @name $rootScope.Scope#$destroy
+ * @eventType broadcast on scope being destroyed
+ *
+ * @description
+ * Broadcasted when a scope and its children are being destroyed.
+ *
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+ * clean up DOM bindings before an element is removed from the DOM.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$destroy
+ * @kind function
+ *
+ * @description
+ * Removes the current scope (and all of its children) from the parent scope. Removal implies
+ * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
+ * propagate to the current scope and its children. Removal also implies that the current
+ * scope is eligible for garbage collection.
+ *
+ * The `$destroy()` is usually used by directives such as
+ * {@link ng.directive:ngRepeat ngRepeat} for managing the
+ * unrolling of the loop.
+ *
+ * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
+ * Application code can register a `$destroy` event handler that will give it a chance to
+ * perform any necessary cleanup.
+ *
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+ * clean up DOM bindings before an element is removed from the DOM.
+ */
+ $destroy: function() {
+ // we can't destroy the root scope or a scope that has been already destroyed
+ if (this.$$destroyed) return;
+ var parent = this.$parent;
+
+ this.$broadcast('$destroy');
+ this.$$destroyed = true;
+ if (this === $rootScope) return;
+
+ for (var eventName in this.$$listenerCount) {
+ decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
+ }
+
+ // sever all the references to parent scopes (after this cleanup, the current scope should
+ // not be retained by any of our references and should be eligible for garbage collection)
+ if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
+ if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
+ if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
+ if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
+
+ // Disable listeners, watchers and apply/digest methods
+ this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
+ this.$on = this.$watch = this.$watchGroup = function() { return noop; };
+ this.$$listeners = {};
+
+ // All of the code below is bogus code that works around V8's memory leak via optimized code
+ // and inline caches.
+ //
+ // see:
+ // - https://code.google.com/p/v8/issues/detail?id=2073#c26
+ // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
+ // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
+
+ this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
+ this.$$childTail = this.$root = this.$$watchers = null;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$eval
+ * @kind function
+ *
+ * @description
+ * Executes the `expression` on the current scope and returns the result. Any exceptions in
+ * the expression are propagated (uncaught). This is useful when evaluating Angular
+ * expressions.
+ *
+ * # Example
+ * ```js
+ var scope = ng.$rootScope.Scope();
+ scope.a = 1;
+ scope.b = 2;
+
+ expect(scope.$eval('a+b')).toEqual(3);
+ expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
+ * ```
+ *
+ * @param {(string|function())=} expression An angular expression to be executed.
+ *
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
+ * - `function(scope)`: execute the function with the current `scope` parameter.
+ *
+ * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+ * @returns {*} The result of evaluating the expression.
+ */
+ $eval: function(expr, locals) {
+ return $parse(expr)(this, locals);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$evalAsync
+ * @kind function
+ *
+ * @description
+ * Executes the expression on the current scope at a later point in time.
+ *
+ * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
+ * that:
+ *
+ * - it will execute after the function that scheduled the evaluation (preferably before DOM
+ * rendering).
+ * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
+ * `expression` execution.
+ *
+ * Any exceptions from the execution of the expression are forwarded to the
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
+ *
+ * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
+ * will be scheduled. However, it is encouraged to always call code that changes the model
+ * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
+ *
+ * @param {(string|function())=} expression An angular expression to be executed.
+ *
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
+ * - `function(scope)`: execute the function with the current `scope` parameter.
+ *
+ * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+ */
+ $evalAsync: function(expr, locals) {
+ // if we are outside of an $digest loop and this is the first time we are scheduling async
+ // task also schedule async auto-flush
+ if (!$rootScope.$$phase && !asyncQueue.length) {
+ $browser.defer(function() {
+ if (asyncQueue.length) {
+ $rootScope.$digest();
+ }
+ });
+ }
+
+ asyncQueue.push({scope: this, expression: expr, locals: locals});
+ },
+
+ $$postDigest: function(fn) {
+ postDigestQueue.push(fn);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$apply
+ * @kind function
+ *
+ * @description
+ * `$apply()` is used to execute an expression in angular from outside of the angular
+ * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
+ * Because we are calling into the angular framework we need to perform proper scope life
+ * cycle of {@link ng.$exceptionHandler exception handling},
+ * {@link ng.$rootScope.Scope#$digest executing watches}.
+ *
+ * ## Life cycle
+ *
+ * # Pseudo-Code of `$apply()`
+ * ```js
+ function $apply(expr) {
+ try {
+ return $eval(expr);
+ } catch (e) {
+ $exceptionHandler(e);
+ } finally {
+ $root.$digest();
+ }
+ }
+ * ```
+ *
+ *
+ * Scope's `$apply()` method transitions through the following stages:
+ *
+ * 1. The {@link guide/expression expression} is executed using the
+ * {@link ng.$rootScope.Scope#$eval $eval()} method.
+ * 2. Any exceptions from the execution of the expression are forwarded to the
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
+ * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
+ * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
+ *
+ *
+ * @param {(string|function())=} exp An angular expression to be executed.
+ *
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
+ * - `function(scope)`: execute the function with current `scope` parameter.
+ *
+ * @returns {*} The result of evaluating the expression.
+ */
+ $apply: function(expr) {
+ try {
+ beginPhase('$apply');
+ return this.$eval(expr);
+ } catch (e) {
+ $exceptionHandler(e);
+ } finally {
+ clearPhase();
+ try {
+ $rootScope.$digest();
+ } catch (e) {
+ $exceptionHandler(e);
+ throw e;
+ }
+ }
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$applyAsync
+ * @kind function
+ *
+ * @description
+ * Schedule the invokation of $apply to occur at a later time. The actual time difference
+ * varies across browsers, but is typically around ~10 milliseconds.
+ *
+ * This can be used to queue up multiple expressions which need to be evaluated in the same
+ * digest.
+ *
+ * @param {(string|function())=} exp An angular expression to be executed.
+ *
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
+ * - `function(scope)`: execute the function with current `scope` parameter.
+ */
+ $applyAsync: function(expr) {
+ var scope = this;
+ expr && applyAsyncQueue.push($applyAsyncExpression);
+ scheduleApplyAsync();
+
+ function $applyAsyncExpression() {
+ scope.$eval(expr);
+ }
+ },
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$on
+ * @kind function
+ *
+ * @description
+ * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
+ * discussion of event life cycle.
+ *
+ * The event listener function format is: `function(event, args...)`. The `event` object
+ * passed into the listener has the following attributes:
+ *
+ * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
+ * `$broadcast`-ed.
+ * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
+ * event propagates through the scope hierarchy, this property is set to null.
+ * - `name` - `{string}`: name of the event.
+ * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
+ * further event propagation (available only for events that were `$emit`-ed).
+ * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
+ * to true.
+ * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
+ *
+ * @param {string} name Event name to listen on.
+ * @param {function(event, ...args)} listener Function to call when the event is emitted.
+ * @returns {function()} Returns a deregistration function for this listener.
+ */
+ $on: function(name, listener) {
+ var namedListeners = this.$$listeners[name];
+ if (!namedListeners) {
+ this.$$listeners[name] = namedListeners = [];
+ }
+ namedListeners.push(listener);
+
+ var current = this;
+ do {
+ if (!current.$$listenerCount[name]) {
+ current.$$listenerCount[name] = 0;
+ }
+ current.$$listenerCount[name]++;
+ } while ((current = current.$parent));
+
+ var self = this;
+ return function() {
+ var indexOfListener = namedListeners.indexOf(listener);
+ if (indexOfListener !== -1) {
+ namedListeners[indexOfListener] = null;
+ decrementListenerCount(self, 1, name);
+ }
+ };
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$emit
+ * @kind function
+ *
+ * @description
+ * Dispatches an event `name` upwards through the scope hierarchy notifying the
+ * registered {@link ng.$rootScope.Scope#$on} listeners.
+ *
+ * The event life cycle starts at the scope on which `$emit` was called. All
+ * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+ * notified. Afterwards, the event traverses upwards toward the root scope and calls all
+ * registered listeners along the way. The event will stop propagating if one of the listeners
+ * cancels it.
+ *
+ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+ * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+ *
+ * @param {string} name Event name to emit.
+ * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+ * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
+ */
+ $emit: function(name, args) {
+ var empty = [],
+ namedListeners,
+ scope = this,
+ stopPropagation = false,
+ event = {
+ name: name,
+ targetScope: scope,
+ stopPropagation: function() {stopPropagation = true;},
+ preventDefault: function() {
+ event.defaultPrevented = true;
+ },
+ defaultPrevented: false
+ },
+ listenerArgs = concat([event], arguments, 1),
+ i, length;
+
+ do {
+ namedListeners = scope.$$listeners[name] || empty;
+ event.currentScope = scope;
+ for (i = 0, length = namedListeners.length; i < length; i++) {
+
+ // if listeners were deregistered, defragment the array
+ if (!namedListeners[i]) {
+ namedListeners.splice(i, 1);
+ i--;
+ length--;
+ continue;
+ }
+ try {
+ //allow all listeners attached to the current scope to run
+ namedListeners[i].apply(null, listenerArgs);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ //if any listener on the current scope stops propagation, prevent bubbling
+ if (stopPropagation) {
+ event.currentScope = null;
+ return event;
+ }
+ //traverse upwards
+ scope = scope.$parent;
+ } while (scope);
+
+ event.currentScope = null;
+
+ return event;
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $rootScope.Scope#$broadcast
+ * @kind function
+ *
+ * @description
+ * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
+ * registered {@link ng.$rootScope.Scope#$on} listeners.
+ *
+ * The event life cycle starts at the scope on which `$broadcast` was called. All
+ * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+ * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
+ * scope and calls all registered listeners along the way. The event cannot be canceled.
+ *
+ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+ * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+ *
+ * @param {string} name Event name to broadcast.
+ * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+ * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
+ */
+ $broadcast: function(name, args) {
+ var target = this,
+ current = target,
+ next = target,
+ event = {
+ name: name,
+ targetScope: target,
+ preventDefault: function() {
+ event.defaultPrevented = true;
+ },
+ defaultPrevented: false
+ };
+
+ if (!target.$$listenerCount[name]) return event;
+
+ var listenerArgs = concat([event], arguments, 1),
+ listeners, i, length;
+
+ //down while you can, then up and next sibling or up and next sibling until back at root
+ while ((current = next)) {
+ event.currentScope = current;
+ listeners = current.$$listeners[name] || [];
+ for (i = 0, length = listeners.length; i < length; i++) {
+ // if listeners were deregistered, defragment the array
+ if (!listeners[i]) {
+ listeners.splice(i, 1);
+ i--;
+ length--;
+ continue;
+ }
+
+ try {
+ listeners[i].apply(null, listenerArgs);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+
+ // Insanity Warning: scope depth-first traversal
+ // yes, this code is a bit crazy, but it works and we have tests to prove it!
+ // this piece should be kept in sync with the traversal in $digest
+ // (though it differs due to having the extra check for $$listenerCount)
+ if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
+ (current !== target && current.$$nextSibling)))) {
+ while (current !== target && !(next = current.$$nextSibling)) {
+ current = current.$parent;
+ }
+ }
+ }
+
+ event.currentScope = null;
+ return event;
+ }
+ };
+
+ var $rootScope = new Scope();
+
+ //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
+ var asyncQueue = $rootScope.$$asyncQueue = [];
+ var postDigestQueue = $rootScope.$$postDigestQueue = [];
+ var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
+
+ return $rootScope;
+
+
+ function beginPhase(phase) {
+ if ($rootScope.$$phase) {
+ throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
+ }
+
+ $rootScope.$$phase = phase;
+ }
+
+ function clearPhase() {
+ $rootScope.$$phase = null;
+ }
+
+
+ function decrementListenerCount(current, count, name) {
+ do {
+ current.$$listenerCount[name] -= count;
+
+ if (current.$$listenerCount[name] === 0) {
+ delete current.$$listenerCount[name];
+ }
+ } while ((current = current.$parent));
+ }
+
+ /**
+ * function used as an initial value for watchers.
+ * because it's unique we can easily tell it apart from other values
+ */
+ function initWatchVal() {}
+
+ function flushApplyAsync() {
+ while (applyAsyncQueue.length) {
+ try {
+ applyAsyncQueue.shift()();
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ applyAsyncId = null;
+ }
+
+ function scheduleApplyAsync() {
+ if (applyAsyncId === null) {
+ applyAsyncId = $browser.defer(function() {
+ $rootScope.$apply(flushApplyAsync);
+ });
+ }
+ }
+ }];
+}
+
+/**
+ * @description
+ * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
+ */
+function $$SanitizeUriProvider() {
+ var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
+ imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
+
+ /**
+ * @description
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+ * urls during a[href] sanitization.
+ *
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+ *
+ * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+ * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+ *
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+ * chaining otherwise.
+ */
+ this.aHrefSanitizationWhitelist = function(regexp) {
+ if (isDefined(regexp)) {
+ aHrefSanitizationWhitelist = regexp;
+ return this;
+ }
+ return aHrefSanitizationWhitelist;
+ };
+
+
+ /**
+ * @description
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+ * urls during img[src] sanitization.
+ *
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+ *
+ * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+ * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+ *
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+ * chaining otherwise.
+ */
+ this.imgSrcSanitizationWhitelist = function(regexp) {
+ if (isDefined(regexp)) {
+ imgSrcSanitizationWhitelist = regexp;
+ return this;
+ }
+ return imgSrcSanitizationWhitelist;
+ };
+
+ this.$get = function() {
+ return function sanitizeUri(uri, isImage) {
+ var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
+ var normalizedVal;
+ normalizedVal = urlResolve(uri).href;
+ if (normalizedVal !== '' && !normalizedVal.match(regex)) {
+ return 'unsafe:' + normalizedVal;
+ }
+ return uri;
+ };
+ };
+}
+
+var $sceMinErr = minErr('$sce');
+
+var SCE_CONTEXTS = {
+ HTML: 'html',
+ CSS: 'css',
+ URL: 'url',
+ // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
+ // url. (e.g. ng-include, script src, templateUrl)
+ RESOURCE_URL: 'resourceUrl',
+ JS: 'js'
+};
+
+// Helper functions follow.
+
+function adjustMatcher(matcher) {
+ if (matcher === 'self') {
+ return matcher;
+ } else if (isString(matcher)) {
+ // Strings match exactly except for 2 wildcards - '*' and '**'.
+ // '*' matches any character except those from the set ':/.?&'.
+ // '**' matches any character (like .* in a RegExp).
+ // More than 2 *'s raises an error as it's ill defined.
+ if (matcher.indexOf('***') > -1) {
+ throw $sceMinErr('iwcard',
+ 'Illegal sequence *** in string matcher. String: {0}', matcher);
+ }
+ matcher = escapeForRegexp(matcher).
+ replace('\\*\\*', '.*').
+ replace('\\*', '[^:/.?&;]*');
+ return new RegExp('^' + matcher + '$');
+ } else if (isRegExp(matcher)) {
+ // The only other type of matcher allowed is a Regexp.
+ // Match entire URL / disallow partial matches.
+ // Flags are reset (i.e. no global, ignoreCase or multiline)
+ return new RegExp('^' + matcher.source + '$');
+ } else {
+ throw $sceMinErr('imatcher',
+ 'Matchers may only be "self", string patterns or RegExp objects');
+ }
+}
+
+
+function adjustMatchers(matchers) {
+ var adjustedMatchers = [];
+ if (isDefined(matchers)) {
+ forEach(matchers, function(matcher) {
+ adjustedMatchers.push(adjustMatcher(matcher));
+ });
+ }
+ return adjustedMatchers;
+}
+
+
+/**
+ * @ngdoc service
+ * @name $sceDelegate
+ * @kind function
+ *
+ * @description
+ *
+ * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
+ * Contextual Escaping (SCE)} services to AngularJS.
+ *
+ * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
+ * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is
+ * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
+ * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
+ * work because `$sce` delegates to `$sceDelegate` for these operations.
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
+ *
+ * The default instance of `$sceDelegate` should work out of the box with little pain. While you
+ * can override it completely to change the behavior of `$sce`, the common case would
+ * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
+ * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
+ * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
+ * $sceDelegateProvider.resourceUrlWhitelist} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $sceDelegateProvider
+ * @description
+ *
+ * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
+ * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure
+ * that the URLs used for sourcing Angular templates are safe. Refer {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
+ * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ *
+ * For the general details about this service in Angular, read the main page for {@link ng.$sce
+ * Strict Contextual Escaping (SCE)}.
+ *
+ * **Example**: Consider the following case. <a name="example"></a>
+ *
+ * - your app is hosted at url `http://myapp.example.com/`
+ * - but some of your templates are hosted on other domains you control such as
+ * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
+ * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
+ *
+ * Here is what a secure configuration for this scenario might look like:
+ *
+ * ```
+ * angular.module('myApp', []).config(function($sceDelegateProvider) {
+ * $sceDelegateProvider.resourceUrlWhitelist([
+ * // Allow same origin resource loads.
+ * 'self',
+ * // Allow loading from our assets domain. Notice the difference between * and **.
+ * 'http://srv*.assets.example.com/**'
+ * ]);
+ *
+ * // The blacklist overrides the whitelist so the open redirect here is blocked.
+ * $sceDelegateProvider.resourceUrlBlacklist([
+ * 'http://myapp.example.com/clickThru**'
+ * ]);
+ * });
+ * ```
+ */
+
+function $SceDelegateProvider() {
+ this.SCE_CONTEXTS = SCE_CONTEXTS;
+
+ // Resource URLs can also be trusted by policy.
+ var resourceUrlWhitelist = ['self'],
+ resourceUrlBlacklist = [];
+
+ /**
+ * @ngdoc method
+ * @name $sceDelegateProvider#resourceUrlWhitelist
+ * @kind function
+ *
+ * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
+ * provided. This must be an array or null. A snapshot of this array is used so further
+ * changes to the array are ignored.
+ *
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+ * allowed in this array.
+ *
+ * Note: **an empty whitelist array will block all URLs**!
+ *
+ * @return {Array} the currently set whitelist array.
+ *
+ * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
+ * same origin resource requests.
+ *
+ * @description
+ * Sets/Gets the whitelist of trusted resource URLs.
+ */
+ this.resourceUrlWhitelist = function(value) {
+ if (arguments.length) {
+ resourceUrlWhitelist = adjustMatchers(value);
+ }
+ return resourceUrlWhitelist;
+ };
+
+ /**
+ * @ngdoc method
+ * @name $sceDelegateProvider#resourceUrlBlacklist
+ * @kind function
+ *
+ * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
+ * provided. This must be an array or null. A snapshot of this array is used so further
+ * changes to the array are ignored.
+ *
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+ * allowed in this array.
+ *
+ * The typical usage for the blacklist is to **block
+ * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
+ * these would otherwise be trusted but actually return content from the redirected domain.
+ *
+ * Finally, **the blacklist overrides the whitelist** and has the final say.
+ *
+ * @return {Array} the currently set blacklist array.
+ *
+ * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
+ * is no blacklist.)
+ *
+ * @description
+ * Sets/Gets the blacklist of trusted resource URLs.
+ */
+
+ this.resourceUrlBlacklist = function(value) {
+ if (arguments.length) {
+ resourceUrlBlacklist = adjustMatchers(value);
+ }
+ return resourceUrlBlacklist;
+ };
+
+ this.$get = ['$injector', function($injector) {
+
+ var htmlSanitizer = function htmlSanitizer(html) {
+ throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+ };
+
+ if ($injector.has('$sanitize')) {
+ htmlSanitizer = $injector.get('$sanitize');
+ }
+
+
+ function matchUrl(matcher, parsedUrl) {
+ if (matcher === 'self') {
+ return urlIsSameOrigin(parsedUrl);
+ } else {
+ // definitely a regex. See adjustMatchers()
+ return !!matcher.exec(parsedUrl.href);
+ }
+ }
+
+ function isResourceUrlAllowedByPolicy(url) {
+ var parsedUrl = urlResolve(url.toString());
+ var i, n, allowed = false;
+ // Ensure that at least one item from the whitelist allows this url.
+ for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
+ if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
+ allowed = true;
+ break;
+ }
+ }
+ if (allowed) {
+ // Ensure that no item from the blacklist blocked this url.
+ for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
+ if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
+ allowed = false;
+ break;
+ }
+ }
+ }
+ return allowed;
+ }
+
+ function generateHolderType(Base) {
+ var holderType = function TrustedValueHolderType(trustedValue) {
+ this.$$unwrapTrustedValue = function() {
+ return trustedValue;
+ };
+ };
+ if (Base) {
+ holderType.prototype = new Base();
+ }
+ holderType.prototype.valueOf = function sceValueOf() {
+ return this.$$unwrapTrustedValue();
+ };
+ holderType.prototype.toString = function sceToString() {
+ return this.$$unwrapTrustedValue().toString();
+ };
+ return holderType;
+ }
+
+ var trustedValueHolderBase = generateHolderType(),
+ byType = {};
+
+ byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
+ byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
+ byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
+ byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
+ byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
+
+ /**
+ * @ngdoc method
+ * @name $sceDelegate#trustAs
+ *
+ * @description
+ * Returns an object that is trusted by angular for use in specified strict
+ * contextual escaping contexts (such as ng-bind-html, ng-include, any src
+ * attribute interpolation, any dom event binding attribute interpolation
+ * such as for onclick, etc.) that uses the provided value.
+ * See {@link ng.$sce $sce} for enabling strict contextual escaping.
+ *
+ * @param {string} type The kind of context in which this value is safe for use. e.g. url,
+ * resourceUrl, html, js and css.
+ * @param {*} value The value that that should be considered trusted/safe.
+ * @returns {*} A value that can be used to stand in for the provided `value` in places
+ * where Angular expects a $sce.trustAs() return value.
+ */
+ function trustAs(type, trustedValue) {
+ var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+ if (!Constructor) {
+ throw $sceMinErr('icontext',
+ 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
+ type, trustedValue);
+ }
+ if (trustedValue === null || trustedValue === undefined || trustedValue === '') {
+ return trustedValue;
+ }
+ // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting
+ // mutable objects, we ensure here that the value passed in is actually a string.
+ if (typeof trustedValue !== 'string') {
+ throw $sceMinErr('itype',
+ 'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
+ type);
+ }
+ return new Constructor(trustedValue);
+ }
+
+ /**
+ * @ngdoc method
+ * @name $sceDelegate#valueOf
+ *
+ * @description
+ * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
+ * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
+ *
+ * If the passed parameter is not a value that had been returned by {@link
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
+ *
+ * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
+ * call or anything else.
+ * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
+ * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
+ * `value` unchanged.
+ */
+ function valueOf(maybeTrusted) {
+ if (maybeTrusted instanceof trustedValueHolderBase) {
+ return maybeTrusted.$$unwrapTrustedValue();
+ } else {
+ return maybeTrusted;
+ }
+ }
+
+ /**
+ * @ngdoc method
+ * @name $sceDelegate#getTrusted
+ *
+ * @description
+ * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
+ * returns the originally supplied value if the queried context type is a supertype of the
+ * created type. If this condition isn't satisfied, throws an exception.
+ *
+ * @param {string} type The kind of context in which this value is to be used.
+ * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
+ * `$sceDelegate.trustAs`} call.
+ * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
+ * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.
+ */
+ function getTrusted(type, maybeTrusted) {
+ if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {
+ return maybeTrusted;
+ }
+ var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+ if (constructor && maybeTrusted instanceof constructor) {
+ return maybeTrusted.$$unwrapTrustedValue();
+ }
+ // If we get here, then we may only take one of two actions.
+ // 1. sanitize the value for the requested type, or
+ // 2. throw an exception.
+ if (type === SCE_CONTEXTS.RESOURCE_URL) {
+ if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
+ return maybeTrusted;
+ } else {
+ throw $sceMinErr('insecurl',
+ 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}',
+ maybeTrusted.toString());
+ }
+ } else if (type === SCE_CONTEXTS.HTML) {
+ return htmlSanitizer(maybeTrusted);
+ }
+ throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+ }
+
+ return { trustAs: trustAs,
+ getTrusted: getTrusted,
+ valueOf: valueOf };
+ }];
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $sceProvider
+ * @description
+ *
+ * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
+ * - enable/disable Strict Contextual Escaping (SCE) in a module
+ * - override the default implementation with a custom delegate
+ *
+ * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
+ */
+
+/* jshint maxlen: false*/
+
+/**
+ * @ngdoc service
+ * @name $sce
+ * @kind function
+ *
+ * @description
+ *
+ * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
+ *
+ * # Strict Contextual Escaping
+ *
+ * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
+ * contexts to result in a value that is marked as safe to use for that context. One example of
+ * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer
+ * to these contexts as privileged or SCE contexts.
+ *
+ * As of version 1.2, Angular ships with SCE enabled by default.
+ *
+ * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow
+ * one to execute arbitrary javascript by the use of the expression() syntax. Refer
+ * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
+ * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
+ * to the top of your HTML document.
+ *
+ * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
+ * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
+ *
+ * Here's an example of a binding in a privileged context:
+ *
+ * ```
+ * <input ng-model="userHtml">
+ * <div ng-bind-html="userHtml"></div>
+ * ```
+ *
+ * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE
+ * disabled, this application allows the user to render arbitrary HTML into the DIV.
+ * In a more realistic example, one may be rendering user comments, blog articles, etc. via
+ * bindings. (HTML is just one example of a context where rendering user controlled input creates
+ * security vulnerabilities.)
+ *
+ * For the case of HTML, you might use a library, either on the client side, or on the server side,
+ * to sanitize unsafe HTML before binding to the value and rendering it in the document.
+ *
+ * How would you ensure that every place that used these types of bindings was bound to a value that
+ * was sanitized by your library (or returned as safe for rendering by your server?) How can you
+ * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
+ * properties/fields and forgot to update the binding to the sanitized value?
+ *
+ * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
+ * determine that something explicitly says it's safe to use a value for binding in that
+ * context. You can then audit your code (a simple grep would do) to ensure that this is only done
+ * for those values that you can easily tell are safe - because they were received from your server,
+ * sanitized by your library, etc. You can organize your codebase to help with this - perhaps
+ * allowing only the files in a specific directory to do this. Ensuring that the internal API
+ * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
+ *
+ * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
+ * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
+ * obtain values that will be accepted by SCE / privileged contexts.
+ *
+ *
+ * ## How does it work?
+ *
+ * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
+ * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link
+ * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
+ * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
+ *
+ * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
+ * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
+ * simplified):
+ *
+ * ```
+ * var ngBindHtmlDirective = ['$sce', function($sce) {
+ * return function(scope, element, attr) {
+ * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
+ * element.html(value || '');
+ * });
+ * };
+ * }];
+ * ```
+ *
+ * ## Impact on loading templates
+ *
+ * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
+ * `templateUrl`'s specified by {@link guide/directive directives}.
+ *
+ * By default, Angular only loads templates from the same domain and protocol as the application
+ * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or
+ * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
+ * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
+ *
+ * *Please note*:
+ * The browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy apply in addition to this and may further restrict whether the template is successfully
+ * loaded. This means that without the right CORS policy, loading templates from a different domain
+ * won't work on all browsers. Also, loading templates from `file://` URL does not work on some
+ * browsers.
+ *
+ * ## This feels like too much overhead
+ *
+ * It's important to remember that SCE only applies to interpolation expressions.
+ *
+ * If your expressions are constant literals, they're automatically trusted and you don't need to
+ * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
+ * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
+ *
+ * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
+ * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.
+ *
+ * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
+ * templates in `ng-include` from your application's domain without having to even know about SCE.
+ * It blocks loading templates from other domains or loading templates over http from an https
+ * served document. You can change these by setting your own custom {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
+ *
+ * This significantly reduces the overhead. It is far easier to pay the small overhead and have an
+ * application that's secure and can be audited to verify that with much more ease than bolting
+ * security onto an application later.
+ *
+ * <a name="contexts"></a>
+ * ## What trusted context types are supported?
+ *
+ * | Context | Notes |
+ * |---------------------|----------------|
+ * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
+ * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
+ * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
+ * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
+ * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
+ *
+ * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
+ *
+ * Each element in these arrays must be one of the following:
+ *
+ * - **'self'**
+ * - The special **string**, `'self'`, can be used to match against all URLs of the **same
+ * domain** as the application document using the **same protocol**.
+ * - **String** (except the special value `'self'`)
+ * - The string is matched against the full *normalized / absolute URL* of the resource
+ * being tested (substring matches are not good enough.)
+ * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters
+ * match themselves.
+ * - `*`: matches zero or more occurrences of any character other than one of the following 6
+ * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use
+ * in a whitelist.
+ * - `**`: matches zero or more occurrences of *any* character. As such, it's not
+ * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g.
+ * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
+ * not have been the intention.) Its usage at the very end of the path is ok. (e.g.
+ * http://foo.example.com/templates/**).
+ * - **RegExp** (*see caveat below*)
+ * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax
+ * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to
+ * accidentally introduce a bug when one updates a complex expression (imho, all regexes should
+ * have good test coverage.). For instance, the use of `.` in the regex is correct only in a
+ * small number of cases. A `.` character in the regex used when matching the scheme or a
+ * subdomain could be matched against a `:` or literal `.` that was likely not intended. It
+ * is highly recommended to use the string patterns and only fall back to regular expressions
+ * if they as a last resort.
+ * - The regular expression must be an instance of RegExp (i.e. not a string.) It is
+ * matched against the **entire** *normalized / absolute URL* of the resource being tested
+ * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags
+ * present on the RegExp (such as multiline, global, ignoreCase) are ignored.
+ * - If you are generating your JavaScript from some other templating engine (not
+ * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
+ * remember to escape your regular expression (and be aware that you might need more than
+ * one level of escaping depending on your templating engine and the way you interpolated
+ * the value.) Do make use of your platform's escaping mechanism as it might be good
+ * enough before coding your own. e.g. Ruby has
+ * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
+ * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
+ * Javascript lacks a similar built in function for escaping. Take a look at Google
+ * Closure library's [goog.string.regExpEscape(s)](
+ * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
+ *
+ * ## Show me an example using SCE.
+ *
+ * <example module="mySceApp" deps="angular-sanitize.js">
+ * <file name="index.html">
+ * <div ng-controller="AppController as myCtrl">
+ * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
+ * <b>User comments</b><br>
+ * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
+ * $sanitize is available. If $sanitize isn't available, this results in an error instead of an
+ * exploit.
+ * <div class="well">
+ * <div ng-repeat="userComment in myCtrl.userComments">
+ * <b>{{userComment.name}}</b>:
+ * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
+ * <br>
+ * </div>
+ * </div>
+ * </div>
+ * </file>
+ *
+ * <file name="script.js">
+ * angular.module('mySceApp', ['ngSanitize'])
+ * .controller('AppController', ['$http', '$templateCache', '$sce',
+ * function($http, $templateCache, $sce) {
+ * var self = this;
+ * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
+ * self.userComments = userComments;
+ * });
+ * self.explicitlyTrustedHtml = $sce.trustAsHtml(
+ * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ * 'sanitization.&quot;">Hover over this text.</span>');
+ * }]);
+ * </file>
+ *
+ * <file name="test_data.json">
+ * [
+ * { "name": "Alice",
+ * "htmlComment":
+ * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
+ * },
+ * { "name": "Bob",
+ * "htmlComment": "<i>Yes!</i> Am I the only other one?"
+ * }
+ * ]
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ * describe('SCE doc demo', function() {
+ * it('should sanitize untrusted values', function() {
+ * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
+ * .toBe('<span>Is <i>anyone</i> reading this?</span>');
+ * });
+ *
+ * it('should NOT sanitize explicitly trusted values', function() {
+ * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
+ * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ * 'sanitization.&quot;">Hover over this text.</span>');
+ * });
+ * });
+ * </file>
+ * </example>
+ *
+ *
+ *
+ * ## Can I disable SCE completely?
+ *
+ * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits
+ * for little coding overhead. It will be much harder to take an SCE disabled application and
+ * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE
+ * for cases where you have a lot of existing code that was written before SCE was introduced and
+ * you're migrating them a module at a time.
+ *
+ * That said, here's how you can completely disable SCE:
+ *
+ * ```
+ * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
+ * // Completely disable SCE. For demonstration purposes only!
+ * // Do not use in new projects.
+ * $sceProvider.enabled(false);
+ * });
+ * ```
+ *
+ */
+/* jshint maxlen: 100 */
+
+function $SceProvider() {
+ var enabled = true;
+
+ /**
+ * @ngdoc method
+ * @name $sceProvider#enabled
+ * @kind function
+ *
+ * @param {boolean=} value If provided, then enables/disables SCE.
+ * @return {boolean} true if SCE is enabled, false otherwise.
+ *
+ * @description
+ * Enables/disables SCE and returns the current value.
+ */
+ this.enabled = function(value) {
+ if (arguments.length) {
+ enabled = !!value;
+ }
+ return enabled;
+ };
+
+
+ /* Design notes on the default implementation for SCE.
+ *
+ * The API contract for the SCE delegate
+ * -------------------------------------
+ * The SCE delegate object must provide the following 3 methods:
+ *
+ * - trustAs(contextEnum, value)
+ * This method is used to tell the SCE service that the provided value is OK to use in the
+ * contexts specified by contextEnum. It must return an object that will be accepted by
+ * getTrusted() for a compatible contextEnum and return this value.
+ *
+ * - valueOf(value)
+ * For values that were not produced by trustAs(), return them as is. For values that were
+ * produced by trustAs(), return the corresponding input value to trustAs. Basically, if
+ * trustAs is wrapping the given values into some type, this operation unwraps it when given
+ * such a value.
+ *
+ * - getTrusted(contextEnum, value)
+ * This function should return the a value that is safe to use in the context specified by
+ * contextEnum or throw and exception otherwise.
+ *
+ * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
+ * opaque or wrapped in some holder object. That happens to be an implementation detail. For
+ * instance, an implementation could maintain a registry of all trusted objects by context. In
+ * such a case, trustAs() would return the same object that was passed in. getTrusted() would
+ * return the same object passed in if it was found in the registry under a compatible context or
+ * throw an exception otherwise. An implementation might only wrap values some of the time based
+ * on some criteria. getTrusted() might return a value and not throw an exception for special
+ * constants or objects even if not wrapped. All such implementations fulfill this contract.
+ *
+ *
+ * A note on the inheritance model for SCE contexts
+ * ------------------------------------------------
+ * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This
+ * is purely an implementation details.
+ *
+ * The contract is simply this:
+ *
+ * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
+ * will also succeed.
+ *
+ * Inheritance happens to capture this in a natural way. In some future, we
+ * may not use inheritance anymore. That is OK because no code outside of
+ * sce.js and sceSpecs.js would need to be aware of this detail.
+ */
+
+ this.$get = ['$parse', '$sceDelegate', function(
+ $parse, $sceDelegate) {
+ // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow
+ // the "expression(javascript expression)" syntax which is insecure.
+ if (enabled && msie < 8) {
+ throw $sceMinErr('iequirks',
+ 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
+ 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
+ 'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
+ }
+
+ var sce = shallowCopy(SCE_CONTEXTS);
+
+ /**
+ * @ngdoc method
+ * @name $sce#isEnabled
+ * @kind function
+ *
+ * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you
+ * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
+ *
+ * @description
+ * Returns a boolean indicating if SCE is enabled.
+ */
+ sce.isEnabled = function() {
+ return enabled;
+ };
+ sce.trustAs = $sceDelegate.trustAs;
+ sce.getTrusted = $sceDelegate.getTrusted;
+ sce.valueOf = $sceDelegate.valueOf;
+
+ if (!enabled) {
+ sce.trustAs = sce.getTrusted = function(type, value) { return value; };
+ sce.valueOf = identity;
+ }
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAs
+ *
+ * @description
+ * Converts Angular {@link guide/expression expression} into a function. This is like {@link
+ * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it
+ * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
+ * *result*)}
+ *
+ * @param {string} type The kind of SCE context in which this result will be used.
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+ sce.parseAs = function sceParseAs(type, expr) {
+ var parsed = $parse(expr);
+ if (parsed.literal && parsed.constant) {
+ return parsed;
+ } else {
+ return $parse(expr, function(value) {
+ return sce.getTrusted(type, value);
+ });
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAs
+ *
+ * @description
+ * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,
+ * returns an object that is trusted by angular for use in specified strict contextual
+ * escaping contexts (such as ng-bind-html, ng-include, any src attribute
+ * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)
+ * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual
+ * escaping.
+ *
+ * @param {string} type The kind of context in which this value is safe for use. e.g. url,
+ * resource_url, html, js and css.
+ * @param {*} value The value that that should be considered trusted/safe.
+ * @returns {*} A value that can be used to stand in for the provided `value` in places
+ * where Angular expects a $sce.trustAs() return value.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAsHtml
+ *
+ * @description
+ * Shorthand method. `$sce.trustAsHtml(value)` →
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
+ *
+ * @param {*} value The value to trustAs.
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
+ * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives
+ * only accept expressions that are either literal constants or are the
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAsUrl
+ *
+ * @description
+ * Shorthand method. `$sce.trustAsUrl(value)` →
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
+ *
+ * @param {*} value The value to trustAs.
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
+ * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives
+ * only accept expressions that are either literal constants or are the
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAsResourceUrl
+ *
+ * @description
+ * Shorthand method. `$sce.trustAsResourceUrl(value)` →
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
+ *
+ * @param {*} value The value to trustAs.
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives
+ * only accept expressions that are either literal constants or are the return
+ * value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAsJs
+ *
+ * @description
+ * Shorthand method. `$sce.trustAsJs(value)` →
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
+ *
+ * @param {*} value The value to trustAs.
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
+ * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives
+ * only accept expressions that are either literal constants or are the
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrusted
+ *
+ * @description
+ * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,
+ * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
+ * originally supplied value if the queried context type is a supertype of the created type.
+ * If this condition isn't satisfied, throws an exception.
+ *
+ * @param {string} type The kind of context in which this value is to be used.
+ * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
+ * call.
+ * @returns {*} The value the was originally provided to
+ * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
+ * Otherwise, throws an exception.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrustedHtml
+ *
+ * @description
+ * Shorthand method. `$sce.getTrustedHtml(value)` →
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
+ *
+ * @param {*} value The value to pass to `$sce.getTrusted`.
+ * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrustedCss
+ *
+ * @description
+ * Shorthand method. `$sce.getTrustedCss(value)` →
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
+ *
+ * @param {*} value The value to pass to `$sce.getTrusted`.
+ * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrustedUrl
+ *
+ * @description
+ * Shorthand method. `$sce.getTrustedUrl(value)` →
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
+ *
+ * @param {*} value The value to pass to `$sce.getTrusted`.
+ * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrustedResourceUrl
+ *
+ * @description
+ * Shorthand method. `$sce.getTrustedResourceUrl(value)` →
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
+ *
+ * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
+ * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#getTrustedJs
+ *
+ * @description
+ * Shorthand method. `$sce.getTrustedJs(value)` →
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
+ *
+ * @param {*} value The value to pass to `$sce.getTrusted`.
+ * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAsHtml
+ *
+ * @description
+ * Shorthand method. `$sce.parseAsHtml(expression string)` →
+ * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAsCss
+ *
+ * @description
+ * Shorthand method. `$sce.parseAsCss(value)` →
+ * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAsUrl
+ *
+ * @description
+ * Shorthand method. `$sce.parseAsUrl(value)` →
+ * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAsResourceUrl
+ *
+ * @description
+ * Shorthand method. `$sce.parseAsResourceUrl(value)` →
+ * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#parseAsJs
+ *
+ * @description
+ * Shorthand method. `$sce.parseAsJs(value)` →
+ * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
+ * are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ * `context`.
+ */
+
+ // Shorthand delegations.
+ var parse = sce.parseAs,
+ getTrusted = sce.getTrusted,
+ trustAs = sce.trustAs;
+
+ forEach(SCE_CONTEXTS, function(enumValue, name) {
+ var lName = lowercase(name);
+ sce[camelCase("parse_as_" + lName)] = function(expr) {
+ return parse(enumValue, expr);
+ };
+ sce[camelCase("get_trusted_" + lName)] = function(value) {
+ return getTrusted(enumValue, value);
+ };
+ sce[camelCase("trust_as_" + lName)] = function(value) {
+ return trustAs(enumValue, value);
+ };
+ });
+
+ return sce;
+ }];
+}
+
+/**
+ * !!! This is an undocumented "private" service !!!
+ *
+ * @name $sniffer
+ * @requires $window
+ * @requires $document
+ *
+ * @property {boolean} history Does the browser support html5 history api ?
+ * @property {boolean} transitions Does the browser support CSS transition events ?
+ * @property {boolean} animations Does the browser support CSS animation events ?
+ *
+ * @description
+ * This is very simple implementation of testing browser's features.
+ */
+function $SnifferProvider() {
+ this.$get = ['$window', '$document', function($window, $document) {
+ var eventSupport = {},
+ android =
+ int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
+ boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
+ document = $document[0] || {},
+ vendorPrefix,
+ vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
+ bodyStyle = document.body && document.body.style,
+ transitions = false,
+ animations = false,
+ match;
+
+ if (bodyStyle) {
+ for (var prop in bodyStyle) {
+ if (match = vendorRegex.exec(prop)) {
+ vendorPrefix = match[0];
+ vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
+ break;
+ }
+ }
+
+ if (!vendorPrefix) {
+ vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
+ }
+
+ transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
+ animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
+
+ if (android && (!transitions || !animations)) {
+ transitions = isString(document.body.style.webkitTransition);
+ animations = isString(document.body.style.webkitAnimation);
+ }
+ }
+
+
+ return {
+ // Android has history.pushState, but it does not update location correctly
+ // so let's not use the history API at all.
+ // http://code.google.com/p/android/issues/detail?id=17471
+ // https://github.com/angular/angular.js/issues/904
+
+ // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
+ // so let's not use the history API also
+ // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
+ // jshint -W018
+ history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
+ // jshint +W018
+ hasEvent: function(event) {
+ // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
+ // it. In particular the event is not fired when backspace or delete key are pressed or
+ // when cut operation is performed.
+ // IE10+ implements 'input' event but it erroneously fires under various situations,
+ // e.g. when placeholder changes, or a form is focused.
+ if (event === 'input' && msie <= 11) return false;
+
+ if (isUndefined(eventSupport[event])) {
+ var divElm = document.createElement('div');
+ eventSupport[event] = 'on' + event in divElm;
+ }
+
+ return eventSupport[event];
+ },
+ csp: csp(),
+ vendorPrefix: vendorPrefix,
+ transitions: transitions,
+ animations: animations,
+ android: android
+ };
+ }];
+}
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc service
+ * @name $templateRequest
+ *
+ * @description
+ * The `$templateRequest` service downloads the provided template using `$http` and, upon success,
+ * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data
+ * of the HTTP request is empty, a `$compile` error will be thrown (the exception can be thwarted
+ * by setting the 2nd parameter of the function to true).
+ *
+ * @param {string} tpl The HTTP request template URL
+ * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
+ *
+ * @return {Promise} the HTTP Promise for the given.
+ *
+ * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
+ */
+function $TemplateRequestProvider() {
+ this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
+ function handleRequestFn(tpl, ignoreRequestError) {
+ var self = handleRequestFn;
+ self.totalPendingRequests++;
+
+ var transformResponse = $http.defaults && $http.defaults.transformResponse;
+
+ if (isArray(transformResponse)) {
+ transformResponse = transformResponse.filter(function(transformer) {
+ return transformer !== defaultHttpResponseTransform;
+ });
+ } else if (transformResponse === defaultHttpResponseTransform) {
+ transformResponse = null;
+ }
+
+ var httpOptions = {
+ cache: $templateCache,
+ transformResponse: transformResponse
+ };
+
+ return $http.get(tpl, httpOptions)
+ .then(function(response) {
+ self.totalPendingRequests--;
+ return response.data;
+ }, handleError);
+
+ function handleError(resp) {
+ self.totalPendingRequests--;
+ if (!ignoreRequestError) {
+ throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
+ }
+ return $q.reject(resp);
+ }
+ }
+
+ handleRequestFn.totalPendingRequests = 0;
+
+ return handleRequestFn;
+ }];
+}
+
+function $$TestabilityProvider() {
+ this.$get = ['$rootScope', '$browser', '$location',
+ function($rootScope, $browser, $location) {
+
+ /**
+ * @name $testability
+ *
+ * @description
+ * The private $$testability service provides a collection of methods for use when debugging
+ * or by automated test and debugging tools.
+ */
+ var testability = {};
+
+ /**
+ * @name $$testability#findBindings
+ *
+ * @description
+ * Returns an array of elements that are bound (via ng-bind or {{}})
+ * to expressions matching the input.
+ *
+ * @param {Element} element The element root to search from.
+ * @param {string} expression The binding expression to match.
+ * @param {boolean} opt_exactMatch If true, only returns exact matches
+ * for the expression. Filters and whitespace are ignored.
+ */
+ testability.findBindings = function(element, expression, opt_exactMatch) {
+ var bindings = element.getElementsByClassName('ng-binding');
+ var matches = [];
+ forEach(bindings, function(binding) {
+ var dataBinding = angular.element(binding).data('$binding');
+ if (dataBinding) {
+ forEach(dataBinding, function(bindingName) {
+ if (opt_exactMatch) {
+ var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
+ if (matcher.test(bindingName)) {
+ matches.push(binding);
+ }
+ } else {
+ if (bindingName.indexOf(expression) != -1) {
+ matches.push(binding);
+ }
+ }
+ });
+ }
+ });
+ return matches;
+ };
+
+ /**
+ * @name $$testability#findModels
+ *
+ * @description
+ * Returns an array of elements that are two-way found via ng-model to
+ * expressions matching the input.
+ *
+ * @param {Element} element The element root to search from.
+ * @param {string} expression The model expression to match.
+ * @param {boolean} opt_exactMatch If true, only returns exact matches
+ * for the expression.
+ */
+ testability.findModels = function(element, expression, opt_exactMatch) {
+ var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
+ for (var p = 0; p < prefixes.length; ++p) {
+ var attributeEquals = opt_exactMatch ? '=' : '*=';
+ var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
+ var elements = element.querySelectorAll(selector);
+ if (elements.length) {
+ return elements;
+ }
+ }
+ };
+
+ /**
+ * @name $$testability#getLocation
+ *
+ * @description
+ * Shortcut for getting the location in a browser agnostic way. Returns
+ * the path, search, and hash. (e.g. /path?a=b#hash)
+ */
+ testability.getLocation = function() {
+ return $location.url();
+ };
+
+ /**
+ * @name $$testability#setLocation
+ *
+ * @description
+ * Shortcut for navigating to a location without doing a full page reload.
+ *
+ * @param {string} url The location url (path, search and hash,
+ * e.g. /path?a=b#hash) to go to.
+ */
+ testability.setLocation = function(url) {
+ if (url !== $location.url()) {
+ $location.url(url);
+ $rootScope.$digest();
+ }
+ };
+
+ /**
+ * @name $$testability#whenStable
+ *
+ * @description
+ * Calls the callback when $timeout and $http requests are completed.
+ *
+ * @param {function} callback
+ */
+ testability.whenStable = function(callback) {
+ $browser.notifyWhenNoOutstandingRequests(callback);
+ };
+
+ return testability;
+ }];
+}
+
+function $TimeoutProvider() {
+ this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
+ function($rootScope, $browser, $q, $$q, $exceptionHandler) {
+ var deferreds = {};
+
+
+ /**
+ * @ngdoc service
+ * @name $timeout
+ *
+ * @description
+ * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
+ * block and delegates any exceptions to
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
+ *
+ * The return value of registering a timeout function is a promise, which will be resolved when
+ * the timeout is reached and the timeout function is executed.
+ *
+ * To cancel a timeout request, call `$timeout.cancel(promise)`.
+ *
+ * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
+ * synchronously flush the queue of deferred functions.
+ *
+ * @param {function()} fn A function, whose execution should be delayed.
+ * @param {number=} [delay=0] Delay in milliseconds.
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+ * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+ * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
+ * promise will be resolved with is the return value of the `fn` function.
+ *
+ */
+ function timeout(fn, delay, invokeApply) {
+ var skipApply = (isDefined(invokeApply) && !invokeApply),
+ deferred = (skipApply ? $$q : $q).defer(),
+ promise = deferred.promise,
+ timeoutId;
+
+ timeoutId = $browser.defer(function() {
+ try {
+ deferred.resolve(fn());
+ } catch (e) {
+ deferred.reject(e);
+ $exceptionHandler(e);
+ }
+ finally {
+ delete deferreds[promise.$$timeoutId];
+ }
+
+ if (!skipApply) $rootScope.$apply();
+ }, delay);
+
+ promise.$$timeoutId = timeoutId;
+ deferreds[timeoutId] = deferred;
+
+ return promise;
+ }
+
+
+ /**
+ * @ngdoc method
+ * @name $timeout#cancel
+ *
+ * @description
+ * Cancels a task associated with the `promise`. As a result of this, the promise will be
+ * resolved with a rejection.
+ *
+ * @param {Promise=} promise Promise returned by the `$timeout` function.
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+ * canceled.
+ */
+ timeout.cancel = function(promise) {
+ if (promise && promise.$$timeoutId in deferreds) {
+ deferreds[promise.$$timeoutId].reject('canceled');
+ delete deferreds[promise.$$timeoutId];
+ return $browser.defer.cancel(promise.$$timeoutId);
+ }
+ return false;
+ };
+
+ return timeout;
+ }];
+}
+
+// NOTE: The usage of window and document instead of $window and $document here is
+// deliberate. This service depends on the specific behavior of anchor nodes created by the
+// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
+// cause us to break tests. In addition, when the browser resolves a URL for XHR, it
+// doesn't know about mocked locations and resolves URLs to the real document - which is
+// exactly the behavior needed here. There is little value is mocking these out for this
+// service.
+var urlParsingNode = document.createElement("a");
+var originUrl = urlResolve(window.location.href);
+
+
+/**
+ *
+ * Implementation Notes for non-IE browsers
+ * ----------------------------------------
+ * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
+ * results both in the normalizing and parsing of the URL. Normalizing means that a relative
+ * URL will be resolved into an absolute URL in the context of the application document.
+ * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
+ * properties are all populated to reflect the normalized URL. This approach has wide
+ * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ *
+ * Implementation Notes for IE
+ * ---------------------------
+ * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other
+ * browsers. However, the parsed components will not be set if the URL assigned did not specify
+ * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We
+ * work around that by performing the parsing in a 2nd step by taking a previously normalized
+ * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the
+ * properties such as protocol, hostname, port, etc.
+ *
+ * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one
+ * uses the inner HTML approach to assign the URL as part of an HTML snippet -
+ * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.
+ * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception.
+ * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that
+ * method and IE < 8 is unsupported.
+ *
+ * References:
+ * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ * http://url.spec.whatwg.org/#urlutils
+ * https://github.com/angular/angular.js/pull/2902
+ * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
+ *
+ * @kind function
+ * @param {string} url The URL to be parsed.
+ * @description Normalizes and parses a URL.
+ * @returns {object} Returns the normalized URL as a dictionary.
+ *
+ * | member name | Description |
+ * |---------------|----------------|
+ * | href | A normalized version of the provided URL if it was not an absolute URL |
+ * | protocol | The protocol including the trailing colon |
+ * | host | The host and port (if the port is non-default) of the normalizedUrl |
+ * | search | The search params, minus the question mark |
+ * | hash | The hash string, minus the hash symbol
+ * | hostname | The hostname
+ * | port | The port, without ":"
+ * | pathname | The pathname, beginning with "/"
+ *
+ */
+function urlResolve(url) {
+ var href = url;
+
+ if (msie) {
+ // Normalize before parse. Refer Implementation Notes on why this is
+ // done in two steps on IE.
+ urlParsingNode.setAttribute("href", href);
+ href = urlParsingNode.href;
+ }
+
+ urlParsingNode.setAttribute('href', href);
+
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+ return {
+ href: urlParsingNode.href,
+ protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+ host: urlParsingNode.host,
+ search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+ hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+ hostname: urlParsingNode.hostname,
+ port: urlParsingNode.port,
+ pathname: (urlParsingNode.pathname.charAt(0) === '/')
+ ? urlParsingNode.pathname
+ : '/' + urlParsingNode.pathname
+ };
+}
+
+/**
+ * Parse a request URL and determine whether this is a same-origin request as the application document.
+ *
+ * @param {string|object} requestUrl The url of the request as a string that will be resolved
+ * or a parsed URL object.
+ * @returns {boolean} Whether the request is for the same origin as the application document.
+ */
+function urlIsSameOrigin(requestUrl) {
+ var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
+ return (parsed.protocol === originUrl.protocol &&
+ parsed.host === originUrl.host);
+}
+
+/**
+ * @ngdoc service
+ * @name $window
+ *
+ * @description
+ * A reference to the browser's `window` object. While `window`
+ * is globally available in JavaScript, it causes testability problems, because
+ * it is a global variable. In angular we always refer to it through the
+ * `$window` service, so it may be overridden, removed or mocked for testing.
+ *
+ * Expressions, like the one defined for the `ngClick` directive in the example
+ * below, are evaluated with respect to the current scope. Therefore, there is
+ * no risk of inadvertently coding in a dependency on a global value in such an
+ * expression.
+ *
+ * @example
+ <example module="windowExample">
+ <file name="index.html">
+ <script>
+ angular.module('windowExample', [])
+ .controller('ExampleController', ['$scope', '$window', function($scope, $window) {
+ $scope.greeting = 'Hello, World!';
+ $scope.doGreeting = function(greeting) {
+ $window.alert(greeting);
+ };
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <input type="text" ng-model="greeting" />
+ <button ng-click="doGreeting(greeting)">ALERT</button>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should display the greeting in the input box', function() {
+ element(by.model('greeting')).sendKeys('Hello, E2E Tests');
+ // If we click the button it will block the test runner
+ // element(':button').click();
+ });
+ </file>
+ </example>
+ */
+function $WindowProvider() {
+ this.$get = valueFn(window);
+}
+
+/* global currencyFilter: true,
+ dateFilter: true,
+ filterFilter: true,
+ jsonFilter: true,
+ limitToFilter: true,
+ lowercaseFilter: true,
+ numberFilter: true,
+ orderByFilter: true,
+ uppercaseFilter: true,
+ */
+
+/**
+ * @ngdoc provider
+ * @name $filterProvider
+ * @description
+ *
+ * Filters are just functions which transform input to an output. However filters need to be
+ * Dependency Injected. To achieve this a filter definition consists of a factory function which is
+ * annotated with dependencies and is responsible for creating a filter function.
+ *
+ * ```js
+ * // Filter registration
+ * function MyModule($provide, $filterProvider) {
+ * // create a service to demonstrate injection (not always needed)
+ * $provide.value('greet', function(name){
+ * return 'Hello ' + name + '!';
+ * });
+ *
+ * // register a filter factory which uses the
+ * // greet service to demonstrate DI.
+ * $filterProvider.register('greet', function(greet){
+ * // return the filter function which uses the greet service
+ * // to generate salutation
+ * return function(text) {
+ * // filters need to be forgiving so check input validity
+ * return text && greet(text) || text;
+ * };
+ * });
+ * }
+ * ```
+ *
+ * The filter function is registered with the `$injector` under the filter name suffix with
+ * `Filter`.
+ *
+ * ```js
+ * it('should be the same instance', inject(
+ * function($filterProvider) {
+ * $filterProvider.register('reverse', function(){
+ * return ...;
+ * });
+ * },
+ * function($filter, reverseFilter) {
+ * expect($filter('reverse')).toBe(reverseFilter);
+ * });
+ * ```
+ *
+ *
+ * For more information about how angular filters work, and how to create your own filters, see
+ * {@link guide/filter Filters} in the Angular Developer Guide.
+ */
+
+/**
+ * @ngdoc service
+ * @name $filter
+ * @kind function
+ * @description
+ * Filters are used for formatting data displayed to the user.
+ *
+ * The general syntax in templates is as follows:
+ *
+ * {{ expression [| filter_name[:parameter_value] ... ] }}
+ *
+ * @param {String} name Name of the filter function to retrieve
+ * @return {Function} the filter function
+ * @example
+ <example name="$filter" module="filterExample">
+ <file name="index.html">
+ <div ng-controller="MainCtrl">
+ <h3>{{ originalText }}</h3>
+ <h3>{{ filteredText }}</h3>
+ </div>
+ </file>
+
+ <file name="script.js">
+ angular.module('filterExample', [])
+ .controller('MainCtrl', function($scope, $filter) {
+ $scope.originalText = 'hello';
+ $scope.filteredText = $filter('uppercase')($scope.originalText);
+ });
+ </file>
+ </example>
+ */
+$FilterProvider.$inject = ['$provide'];
+function $FilterProvider($provide) {
+ var suffix = 'Filter';
+
+ /**
+ * @ngdoc method
+ * @name $filterProvider#register
+ * @param {string|Object} name Name of the filter function, or an object map of filters where
+ * the keys are the filter names and the values are the filter factories.
+ * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
+ * of the registered filter instances.
+ */
+ function register(name, factory) {
+ if (isObject(name)) {
+ var filters = {};
+ forEach(name, function(filter, key) {
+ filters[key] = register(key, filter);
+ });
+ return filters;
+ } else {
+ return $provide.factory(name + suffix, factory);
+ }
+ }
+ this.register = register;
+
+ this.$get = ['$injector', function($injector) {
+ return function(name) {
+ return $injector.get(name + suffix);
+ };
+ }];
+
+ ////////////////////////////////////////
+
+ /* global
+ currencyFilter: false,
+ dateFilter: false,
+ filterFilter: false,
+ jsonFilter: false,
+ limitToFilter: false,
+ lowercaseFilter: false,
+ numberFilter: false,
+ orderByFilter: false,
+ uppercaseFilter: false,
+ */
+
+ register('currency', currencyFilter);
+ register('date', dateFilter);
+ register('filter', filterFilter);
+ register('json', jsonFilter);
+ register('limitTo', limitToFilter);
+ register('lowercase', lowercaseFilter);
+ register('number', numberFilter);
+ register('orderBy', orderByFilter);
+ register('uppercase', uppercaseFilter);
+}
+
+/**
+ * @ngdoc filter
+ * @name filter
+ * @kind function
+ *
+ * @description
+ * Selects a subset of items from `array` and returns it as a new array.
+ *
+ * @param {Array} array The source array.
+ * @param {string|Object|function()} expression The predicate to be used for selecting items from
+ * `array`.
+ *
+ * Can be one of:
+ *
+ * - `string`: The string is used for matching against the contents of the `array`. All strings or
+ * objects with string properties in `array` that match this string will be returned. This also
+ * applies to nested object properties.
+ * The predicate can be negated by prefixing the string with `!`.
+ *
+ * - `Object`: A pattern object can be used to filter specific properties on objects contained
+ * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
+ * which have property `name` containing "M" and property `phone` containing "1". A special
+ * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
+ * property of the object or its nested object properties. That's equivalent to the simple
+ * substring match with a `string` as described above. The predicate can be negated by prefixing
+ * the string with `!`.
+ * For example `{name: "!M"}` predicate will return an array of items which have property `name`
+ * not containing "M".
+ *
+ * Note that a named property will match properties on the same level only, while the special
+ * `$` property will match properties on the same level or deeper. E.g. an array item like
+ * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but
+ * **will** be matched by `{$: 'John'}`.
+ *
+ * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The
+ * function is called for each element of `array`. The final result is an array of those
+ * elements that the predicate returned true for.
+ *
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
+ * determining if the expected value (from the filter expression) and actual value (from
+ * the object in the array) should be considered a match.
+ *
+ * Can be one of:
+ *
+ * - `function(actual, expected)`:
+ * The function will be given the object value and the predicate value to compare and
+ * should return true if both values should be considered equal.
+ *
+ * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.
+ * This is essentially strict comparison of expected and actual.
+ *
+ * - `false|undefined`: A short hand for a function which will look for a substring match in case
+ * insensitive way.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <div ng-init="friends = [{name:'John', phone:'555-1276'},
+ {name:'Mary', phone:'800-BIG-MARY'},
+ {name:'Mike', phone:'555-4321'},
+ {name:'Adam', phone:'555-5678'},
+ {name:'Julie', phone:'555-8765'},
+ {name:'Juliette', phone:'555-5678'}]"></div>
+
+ Search: <input ng-model="searchText">
+ <table id="searchTextResults">
+ <tr><th>Name</th><th>Phone</th></tr>
+ <tr ng-repeat="friend in friends | filter:searchText">
+ <td>{{friend.name}}</td>
+ <td>{{friend.phone}}</td>
+ </tr>
+ </table>
+ <hr>
+ Any: <input ng-model="search.$"> <br>
+ Name only <input ng-model="search.name"><br>
+ Phone only <input ng-model="search.phone"><br>
+ Equality <input type="checkbox" ng-model="strict"><br>
+ <table id="searchObjResults">
+ <tr><th>Name</th><th>Phone</th></tr>
+ <tr ng-repeat="friendObj in friends | filter:search:strict">
+ <td>{{friendObj.name}}</td>
+ <td>{{friendObj.phone}}</td>
+ </tr>
+ </table>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var expectFriendNames = function(expectedNames, key) {
+ element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
+ arr.forEach(function(wd, i) {
+ expect(wd.getText()).toMatch(expectedNames[i]);
+ });
+ });
+ };
+
+ it('should search across all fields when filtering with a string', function() {
+ var searchText = element(by.model('searchText'));
+ searchText.clear();
+ searchText.sendKeys('m');
+ expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
+
+ searchText.clear();
+ searchText.sendKeys('76');
+ expectFriendNames(['John', 'Julie'], 'friend');
+ });
+
+ it('should search in specific fields when filtering with a predicate object', function() {
+ var searchAny = element(by.model('search.$'));
+ searchAny.clear();
+ searchAny.sendKeys('i');
+ expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
+ });
+ it('should use a equal comparison when comparator is true', function() {
+ var searchName = element(by.model('search.name'));
+ var strict = element(by.model('strict'));
+ searchName.clear();
+ searchName.sendKeys('Julie');
+ strict.click();
+ expectFriendNames(['Julie'], 'friendObj');
+ });
+ </file>
+ </example>
+ */
+function filterFilter() {
+ return function(array, expression, comparator) {
+ if (!isArray(array)) return array;
+
+ var predicateFn;
+ var matchAgainstAnyProp;
+
+ switch (typeof expression) {
+ case 'function':
+ predicateFn = expression;
+ break;
+ case 'boolean':
+ case 'number':
+ case 'string':
+ matchAgainstAnyProp = true;
+ //jshint -W086
+ case 'object':
+ //jshint +W086
+ predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);
+ break;
+ default:
+ return array;
+ }
+
+ return array.filter(predicateFn);
+ };
+}
+
+// Helper functions for `filterFilter`
+function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
+ var shouldMatchPrimitives = isObject(expression) && ('$' in expression);
+ var predicateFn;
+
+ if (comparator === true) {
+ comparator = equals;
+ } else if (!isFunction(comparator)) {
+ comparator = function(actual, expected) {
+ if (isObject(actual) || isObject(expected)) {
+ // Prevent an object to be considered equal to a string like `'[object'`
+ return false;
+ }
+
+ actual = lowercase('' + actual);
+ expected = lowercase('' + expected);
+ return actual.indexOf(expected) !== -1;
+ };
+ }
+
+ predicateFn = function(item) {
+ if (shouldMatchPrimitives && !isObject(item)) {
+ return deepCompare(item, expression.$, comparator, false);
+ }
+ return deepCompare(item, expression, comparator, matchAgainstAnyProp);
+ };
+
+ return predicateFn;
+}
+
+function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
+ var actualType = typeof actual;
+ var expectedType = typeof expected;
+
+ if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
+ return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
+ } else if (actualType === 'array') {
+ // In case `actual` is an array, consider it a match
+ // if ANY of it's items matches `expected`
+ return actual.some(function(item) {
+ return deepCompare(item, expected, comparator, matchAgainstAnyProp);
+ });
+ }
+
+ switch (actualType) {
+ case 'object':
+ var key;
+ if (matchAgainstAnyProp) {
+ for (key in actual) {
+ if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {
+ return true;
+ }
+ }
+ return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);
+ } else if (expectedType === 'object') {
+ for (key in expected) {
+ var expectedVal = expected[key];
+ if (isFunction(expectedVal)) {
+ continue;
+ }
+
+ var matchAnyProperty = key === '$';
+ var actualVal = matchAnyProperty ? actual : actual[key];
+ if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return comparator(actual, expected);
+ }
+ break;
+ case 'function':
+ return false;
+ default:
+ return comparator(actual, expected);
+ }
+}
+
+/**
+ * @ngdoc filter
+ * @name currency
+ * @kind function
+ *
+ * @description
+ * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
+ * symbol for current locale is used.
+ *
+ * @param {number} amount Input to filter.
+ * @param {string=} symbol Currency symbol or identifier to be displayed.
+ * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
+ * @returns {string} Formatted number.
+ *
+ *
+ * @example
+ <example module="currencyExample">
+ <file name="index.html">
+ <script>
+ angular.module('currencyExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.amount = 1234.56;
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <input type="number" ng-model="amount"> <br>
+ default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
+ custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
+ no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should init with 1234.56', function() {
+ expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
+ expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');
+ expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
+ });
+ it('should update', function() {
+ if (browser.params.browser == 'safari') {
+ // Safari does not understand the minus key. See
+ // https://github.com/angular/protractor/issues/481
+ return;
+ }
+ element(by.model('amount')).clear();
+ element(by.model('amount')).sendKeys('-1234');
+ expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
+ expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)');
+ expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)');
+ });
+ </file>
+ </example>
+ */
+currencyFilter.$inject = ['$locale'];
+function currencyFilter($locale) {
+ var formats = $locale.NUMBER_FORMATS;
+ return function(amount, currencySymbol, fractionSize) {
+ if (isUndefined(currencySymbol)) {
+ currencySymbol = formats.CURRENCY_SYM;
+ }
+
+ if (isUndefined(fractionSize)) {
+ fractionSize = formats.PATTERNS[1].maxFrac;
+ }
+
+ // if null or undefined pass it through
+ return (amount == null)
+ ? amount
+ : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).
+ replace(/\u00A4/g, currencySymbol);
+ };
+}
+
+/**
+ * @ngdoc filter
+ * @name number
+ * @kind function
+ *
+ * @description
+ * Formats a number as text.
+ *
+ * If the input is not a number an empty string is returned.
+ *
+ * @param {number|string} number Number to format.
+ * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
+ * If this is not provided then the fraction size is computed from the current locale's number
+ * formatting pattern. In the case of the default locale, it will be 3.
+ * @returns {string} Number rounded to decimalPlaces and places a “,†after each third digit.
+ *
+ * @example
+ <example module="numberFilterExample">
+ <file name="index.html">
+ <script>
+ angular.module('numberFilterExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.val = 1234.56789;
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Enter number: <input ng-model='val'><br>
+ Default formatting: <span id='number-default'>{{val | number}}</span><br>
+ No fractions: <span>{{val | number:0}}</span><br>
+ Negative number: <span>{{-val | number:4}}</span>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should format numbers', function() {
+ expect(element(by.id('number-default')).getText()).toBe('1,234.568');
+ expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
+ expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
+ });
+
+ it('should update', function() {
+ element(by.model('val')).clear();
+ element(by.model('val')).sendKeys('3374.333');
+ expect(element(by.id('number-default')).getText()).toBe('3,374.333');
+ expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
+ expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
+ });
+ </file>
+ </example>
+ */
+
+
+numberFilter.$inject = ['$locale'];
+function numberFilter($locale) {
+ var formats = $locale.NUMBER_FORMATS;
+ return function(number, fractionSize) {
+
+ // if null or undefined pass it through
+ return (number == null)
+ ? number
+ : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
+ fractionSize);
+ };
+}
+
+var DECIMAL_SEP = '.';
+function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
+ if (!isFinite(number) || isObject(number)) return '';
+
+ var isNegative = number < 0;
+ number = Math.abs(number);
+ var numStr = number + '',
+ formatedText = '',
+ parts = [];
+
+ var hasExponent = false;
+ if (numStr.indexOf('e') !== -1) {
+ var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
+ if (match && match[2] == '-' && match[3] > fractionSize + 1) {
+ number = 0;
+ } else {
+ formatedText = numStr;
+ hasExponent = true;
+ }
+ }
+
+ if (!hasExponent) {
+ var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
+
+ // determine fractionSize if it is not specified
+ if (isUndefined(fractionSize)) {
+ fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
+ }
+
+ // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
+ // inspired by:
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+ number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
+
+ var fraction = ('' + number).split(DECIMAL_SEP);
+ var whole = fraction[0];
+ fraction = fraction[1] || '';
+
+ var i, pos = 0,
+ lgroup = pattern.lgSize,
+ group = pattern.gSize;
+
+ if (whole.length >= (lgroup + group)) {
+ pos = whole.length - lgroup;
+ for (i = 0; i < pos; i++) {
+ if ((pos - i) % group === 0 && i !== 0) {
+ formatedText += groupSep;
+ }
+ formatedText += whole.charAt(i);
+ }
+ }
+
+ for (i = pos; i < whole.length; i++) {
+ if ((whole.length - i) % lgroup === 0 && i !== 0) {
+ formatedText += groupSep;
+ }
+ formatedText += whole.charAt(i);
+ }
+
+ // format fraction part.
+ while (fraction.length < fractionSize) {
+ fraction += '0';
+ }
+
+ if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
+ } else {
+ if (fractionSize > 0 && number < 1) {
+ formatedText = number.toFixed(fractionSize);
+ number = parseFloat(formatedText);
+ }
+ }
+
+ if (number === 0) {
+ isNegative = false;
+ }
+
+ parts.push(isNegative ? pattern.negPre : pattern.posPre,
+ formatedText,
+ isNegative ? pattern.negSuf : pattern.posSuf);
+ return parts.join('');
+}
+
+function padNumber(num, digits, trim) {
+ var neg = '';
+ if (num < 0) {
+ neg = '-';
+ num = -num;
+ }
+ num = '' + num;
+ while (num.length < digits) num = '0' + num;
+ if (trim)
+ num = num.substr(num.length - digits);
+ return neg + num;
+}
+
+
+function dateGetter(name, size, offset, trim) {
+ offset = offset || 0;
+ return function(date) {
+ var value = date['get' + name]();
+ if (offset > 0 || value > -offset)
+ value += offset;
+ if (value === 0 && offset == -12) value = 12;
+ return padNumber(value, size, trim);
+ };
+}
+
+function dateStrGetter(name, shortForm) {
+ return function(date, formats) {
+ var value = date['get' + name]();
+ var get = uppercase(shortForm ? ('SHORT' + name) : name);
+
+ return formats[get][value];
+ };
+}
+
+function timeZoneGetter(date) {
+ var zone = -1 * date.getTimezoneOffset();
+ var paddedZone = (zone >= 0) ? "+" : "";
+
+ paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
+ padNumber(Math.abs(zone % 60), 2);
+
+ return paddedZone;
+}
+
+function getFirstThursdayOfYear(year) {
+ // 0 = index of January
+ var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
+ // 4 = index of Thursday (+1 to account for 1st = 5)
+ // 11 = index of *next* Thursday (+1 account for 1st = 12)
+ return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
+}
+
+function getThursdayThisWeek(datetime) {
+ return new Date(datetime.getFullYear(), datetime.getMonth(),
+ // 4 = index of Thursday
+ datetime.getDate() + (4 - datetime.getDay()));
+}
+
+function weekGetter(size) {
+ return function(date) {
+ var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
+ thisThurs = getThursdayThisWeek(date);
+
+ var diff = +thisThurs - +firstThurs,
+ result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
+
+ return padNumber(result, size);
+ };
+}
+
+function ampmGetter(date, formats) {
+ return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
+}
+
+var DATE_FORMATS = {
+ yyyy: dateGetter('FullYear', 4),
+ yy: dateGetter('FullYear', 2, 0, true),
+ y: dateGetter('FullYear', 1),
+ MMMM: dateStrGetter('Month'),
+ MMM: dateStrGetter('Month', true),
+ MM: dateGetter('Month', 2, 1),
+ M: dateGetter('Month', 1, 1),
+ dd: dateGetter('Date', 2),
+ d: dateGetter('Date', 1),
+ HH: dateGetter('Hours', 2),
+ H: dateGetter('Hours', 1),
+ hh: dateGetter('Hours', 2, -12),
+ h: dateGetter('Hours', 1, -12),
+ mm: dateGetter('Minutes', 2),
+ m: dateGetter('Minutes', 1),
+ ss: dateGetter('Seconds', 2),
+ s: dateGetter('Seconds', 1),
+ // while ISO 8601 requires fractions to be prefixed with `.` or `,`
+ // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
+ sss: dateGetter('Milliseconds', 3),
+ EEEE: dateStrGetter('Day'),
+ EEE: dateStrGetter('Day', true),
+ a: ampmGetter,
+ Z: timeZoneGetter,
+ ww: weekGetter(2),
+ w: weekGetter(1)
+};
+
+var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
+ NUMBER_STRING = /^\-?\d+$/;
+
+/**
+ * @ngdoc filter
+ * @name date
+ * @kind function
+ *
+ * @description
+ * Formats `date` to a string based on the requested `format`.
+ *
+ * `format` string can be composed of the following elements:
+ *
+ * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
+ * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
+ * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
+ * * `'MMMM'`: Month in year (January-December)
+ * * `'MMM'`: Month in year (Jan-Dec)
+ * * `'MM'`: Month in year, padded (01-12)
+ * * `'M'`: Month in year (1-12)
+ * * `'dd'`: Day in month, padded (01-31)
+ * * `'d'`: Day in month (1-31)
+ * * `'EEEE'`: Day in Week,(Sunday-Saturday)
+ * * `'EEE'`: Day in Week, (Sun-Sat)
+ * * `'HH'`: Hour in day, padded (00-23)
+ * * `'H'`: Hour in day (0-23)
+ * * `'hh'`: Hour in AM/PM, padded (01-12)
+ * * `'h'`: Hour in AM/PM, (1-12)
+ * * `'mm'`: Minute in hour, padded (00-59)
+ * * `'m'`: Minute in hour (0-59)
+ * * `'ss'`: Second in minute, padded (00-59)
+ * * `'s'`: Second in minute (0-59)
+ * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
+ * * `'a'`: AM/PM marker
+ * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
+ * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year
+ * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year
+ *
+ * `format` string can also be one of the following predefined
+ * {@link guide/i18n localizable formats}:
+ *
+ * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
+ * (e.g. Sep 3, 2010 12:05:08 PM)
+ * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM)
+ * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale
+ * (e.g. Friday, September 3, 2010)
+ * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
+ * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
+ * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
+ * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
+ * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
+ *
+ * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
+ * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
+ * (e.g. `"h 'o''clock'"`).
+ *
+ * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
+ * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
+ * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
+ * specified in the string input, the time is considered to be in the local timezone.
+ * @param {string=} format Formatting rules (see Description). If not specified,
+ * `mediumDate` is used.
+ * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported.
+ * If not specified, the timezone of the browser will be used.
+ * @returns {string} Formatted string or the input if input is not recognized as date/millis.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
+ <span>{{1288323623006 | date:'medium'}}</span><br>
+ <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
+ <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
+ <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
+ <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
+ <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
+ <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should format date', function() {
+ expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
+ toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
+ expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
+ toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
+ expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
+ toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
+ expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
+ toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
+ });
+ </file>
+ </example>
+ */
+dateFilter.$inject = ['$locale'];
+function dateFilter($locale) {
+
+
+ var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+ // 1 2 3 4 5 6 7 8 9 10 11
+ function jsonStringToDate(string) {
+ var match;
+ if (match = string.match(R_ISO8601_STR)) {
+ var date = new Date(0),
+ tzHour = 0,
+ tzMin = 0,
+ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+ timeSetter = match[8] ? date.setUTCHours : date.setHours;
+
+ if (match[9]) {
+ tzHour = int(match[9] + match[10]);
+ tzMin = int(match[9] + match[11]);
+ }
+ dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
+ var h = int(match[4] || 0) - tzHour;
+ var m = int(match[5] || 0) - tzMin;
+ var s = int(match[6] || 0);
+ var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
+ timeSetter.call(date, h, m, s, ms);
+ return date;
+ }
+ return string;
+ }
+
+
+ return function(date, format, timezone) {
+ var text = '',
+ parts = [],
+ fn, match;
+
+ format = format || 'mediumDate';
+ format = $locale.DATETIME_FORMATS[format] || format;
+ if (isString(date)) {
+ date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);
+ }
+
+ if (isNumber(date)) {
+ date = new Date(date);
+ }
+
+ if (!isDate(date)) {
+ return date;
+ }
+
+ while (format) {
+ match = DATE_FORMATS_SPLIT.exec(format);
+ if (match) {
+ parts = concat(parts, match, 1);
+ format = parts.pop();
+ } else {
+ parts.push(format);
+ format = null;
+ }
+ }
+
+ if (timezone && timezone === 'UTC') {
+ date = new Date(date.getTime());
+ date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
+ }
+ forEach(parts, function(value) {
+ fn = DATE_FORMATS[value];
+ text += fn ? fn(date, $locale.DATETIME_FORMATS)
+ : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
+ });
+
+ return text;
+ };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name json
+ * @kind function
+ *
+ * @description
+ * Allows you to convert a JavaScript object into JSON string.
+ *
+ * This filter is mostly useful for debugging. When using the double curly {{value}} notation
+ * the binding is automatically converted to JSON.
+ *
+ * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
+ * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.
+ * @returns {string} JSON string.
+ *
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
+ <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should jsonify filtered objects', function() {
+ expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
+ expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
+ });
+ </file>
+ </example>
+ *
+ */
+function jsonFilter() {
+ return function(object, spacing) {
+ if (isUndefined(spacing)) {
+ spacing = 2;
+ }
+ return toJson(object, spacing);
+ };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name lowercase
+ * @kind function
+ * @description
+ * Converts string to lowercase.
+ * @see angular.lowercase
+ */
+var lowercaseFilter = valueFn(lowercase);
+
+
+/**
+ * @ngdoc filter
+ * @name uppercase
+ * @kind function
+ * @description
+ * Converts string to uppercase.
+ * @see angular.uppercase
+ */
+var uppercaseFilter = valueFn(uppercase);
+
+/**
+ * @ngdoc filter
+ * @name limitTo
+ * @kind function
+ *
+ * @description
+ * Creates a new array or string containing only a specified number of elements. The elements
+ * are taken from either the beginning or the end of the source array, string or number, as specified by
+ * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
+ * converted to a string.
+ *
+ * @param {Array|string|number} input Source array, string or number to be limited.
+ * @param {string|number} limit The length of the returned array or string. If the `limit` number
+ * is positive, `limit` number of items from the beginning of the source array/string are copied.
+ * If the number is negative, `limit` number of items from the end of the source array/string
+ * are copied. The `limit` will be trimmed if it exceeds `array.length`
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
+ * had less than `limit` elements.
+ *
+ * @example
+ <example module="limitToExample">
+ <file name="index.html">
+ <script>
+ angular.module('limitToExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.numbers = [1,2,3,4,5,6,7,8,9];
+ $scope.letters = "abcdefghi";
+ $scope.longNumber = 2345432342;
+ $scope.numLimit = 3;
+ $scope.letterLimit = 3;
+ $scope.longNumberLimit = 3;
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
+ <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
+ Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
+ <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
+ Limit {{longNumber}} to: <input type="number" step="1" ng-model="longNumberLimit">
+ <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var numLimitInput = element(by.model('numLimit'));
+ var letterLimitInput = element(by.model('letterLimit'));
+ var longNumberLimitInput = element(by.model('longNumberLimit'));
+ var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
+ var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
+ var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
+
+ it('should limit the number array to first three items', function() {
+ expect(numLimitInput.getAttribute('value')).toBe('3');
+ expect(letterLimitInput.getAttribute('value')).toBe('3');
+ expect(longNumberLimitInput.getAttribute('value')).toBe('3');
+ expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
+ expect(limitedLetters.getText()).toEqual('Output letters: abc');
+ expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
+ });
+
+ // There is a bug in safari and protractor that doesn't like the minus key
+ // it('should update the output when -3 is entered', function() {
+ // numLimitInput.clear();
+ // numLimitInput.sendKeys('-3');
+ // letterLimitInput.clear();
+ // letterLimitInput.sendKeys('-3');
+ // longNumberLimitInput.clear();
+ // longNumberLimitInput.sendKeys('-3');
+ // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
+ // expect(limitedLetters.getText()).toEqual('Output letters: ghi');
+ // expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
+ // });
+
+ it('should not exceed the maximum size of input array', function() {
+ numLimitInput.clear();
+ numLimitInput.sendKeys('100');
+ letterLimitInput.clear();
+ letterLimitInput.sendKeys('100');
+ longNumberLimitInput.clear();
+ longNumberLimitInput.sendKeys('100');
+ expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
+ expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
+ expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
+ });
+ </file>
+ </example>
+*/
+function limitToFilter() {
+ return function(input, limit) {
+ if (isNumber(input)) input = input.toString();
+ if (!isArray(input) && !isString(input)) return input;
+
+ if (Math.abs(Number(limit)) === Infinity) {
+ limit = Number(limit);
+ } else {
+ limit = int(limit);
+ }
+
+ if (isString(input)) {
+ //NaN check on limit
+ if (limit) {
+ return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);
+ } else {
+ return "";
+ }
+ }
+
+ var i, n;
+
+ // if abs(limit) exceeds maximum length, trim it
+ if (limit > input.length)
+ limit = input.length;
+ else if (limit < -input.length)
+ limit = -input.length;
+
+ if (limit > 0) {
+ i = 0;
+ n = limit;
+ } else {
+ // zero and NaN check on limit - return empty array
+ if (!limit) return [];
+
+ i = input.length + limit;
+ n = input.length;
+ }
+
+ return input.slice(i, n);
+ };
+}
+
+/**
+ * @ngdoc filter
+ * @name orderBy
+ * @kind function
+ *
+ * @description
+ * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
+ * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
+ * correctly, make sure they are actually being saved as numbers and not strings.
+ *
+ * @param {Array} array The array to sort.
+ * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
+ * used by the comparator to determine the order of elements.
+ *
+ * Can be one of:
+ *
+ * - `function`: Getter function. The result of this function will be sorted using the
+ * `<`, `=`, `>` operator.
+ * - `string`: An Angular expression. The result of this expression is used to compare elements
+ * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
+ * 3 first characters of a property called `name`). The result of a constant expression
+ * is interpreted as a property name to be used in comparisons (for example `"special name"`
+ * to sort object by the value of their `special name` property). An expression can be
+ * optionally prefixed with `+` or `-` to control ascending or descending sort order
+ * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
+ * element itself is used to compare where sorting.
+ * - `Array`: An array of function or string predicates. The first predicate in the array
+ * is used for sorting, but when two items are equivalent, the next predicate is used.
+ *
+ * If the predicate is missing or empty then it defaults to `'+'`.
+ *
+ * @param {boolean=} reverse Reverse the order of the array.
+ * @returns {Array} Sorted copy of the source array.
+ *
+ * @example
+ <example module="orderByExample">
+ <file name="index.html">
+ <script>
+ angular.module('orderByExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.friends =
+ [{name:'John', phone:'555-1212', age:10},
+ {name:'Mary', phone:'555-9876', age:19},
+ {name:'Mike', phone:'555-4321', age:21},
+ {name:'Adam', phone:'555-5678', age:35},
+ {name:'Julie', phone:'555-8765', age:29}];
+ $scope.predicate = '-age';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
+ <hr/>
+ [ <a href="" ng-click="predicate=''">unsorted</a> ]
+ <table class="friend">
+ <tr>
+ <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
+ (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th>
+ <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th>
+ <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th>
+ </tr>
+ <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
+ <td>{{friend.name}}</td>
+ <td>{{friend.phone}}</td>
+ <td>{{friend.age}}</td>
+ </tr>
+ </table>
+ </div>
+ </file>
+ </example>
+ *
+ * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
+ * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
+ * desired parameters.
+ *
+ * Example:
+ *
+ * @example
+ <example module="orderByExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <table class="friend">
+ <tr>
+ <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
+ (<a href="" ng-click="order('-name',false)">^</a>)</th>
+ <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
+ <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
+ </tr>
+ <tr ng-repeat="friend in friends">
+ <td>{{friend.name}}</td>
+ <td>{{friend.phone}}</td>
+ <td>{{friend.age}}</td>
+ </tr>
+ </table>
+ </div>
+ </file>
+
+ <file name="script.js">
+ angular.module('orderByExample', [])
+ .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
+ var orderBy = $filter('orderBy');
+ $scope.friends = [
+ { name: 'John', phone: '555-1212', age: 10 },
+ { name: 'Mary', phone: '555-9876', age: 19 },
+ { name: 'Mike', phone: '555-4321', age: 21 },
+ { name: 'Adam', phone: '555-5678', age: 35 },
+ { name: 'Julie', phone: '555-8765', age: 29 }
+ ];
+ $scope.order = function(predicate, reverse) {
+ $scope.friends = orderBy($scope.friends, predicate, reverse);
+ };
+ $scope.order('-age',false);
+ }]);
+ </file>
+</example>
+ */
+orderByFilter.$inject = ['$parse'];
+function orderByFilter($parse) {
+ return function(array, sortPredicate, reverseOrder) {
+ if (!(isArrayLike(array))) return array;
+ sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate];
+ if (sortPredicate.length === 0) { sortPredicate = ['+']; }
+ sortPredicate = sortPredicate.map(function(predicate) {
+ var descending = false, get = predicate || identity;
+ if (isString(predicate)) {
+ if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
+ descending = predicate.charAt(0) == '-';
+ predicate = predicate.substring(1);
+ }
+ if (predicate === '') {
+ // Effectively no predicate was passed so we compare identity
+ return reverseComparator(compare, descending);
+ }
+ get = $parse(predicate);
+ if (get.constant) {
+ var key = get();
+ return reverseComparator(function(a, b) {
+ return compare(a[key], b[key]);
+ }, descending);
+ }
+ }
+ return reverseComparator(function(a, b) {
+ return compare(get(a),get(b));
+ }, descending);
+ });
+ return slice.call(array).sort(reverseComparator(comparator, reverseOrder));
+
+ function comparator(o1, o2) {
+ for (var i = 0; i < sortPredicate.length; i++) {
+ var comp = sortPredicate[i](o1, o2);
+ if (comp !== 0) return comp;
+ }
+ return 0;
+ }
+ function reverseComparator(comp, descending) {
+ return descending
+ ? function(a, b) {return comp(b,a);}
+ : comp;
+ }
+
+ function isPrimitive(value) {
+ switch (typeof value) {
+ case 'number': /* falls through */
+ case 'boolean': /* falls through */
+ case 'string':
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ function objectToString(value) {
+ if (value === null) return 'null';
+ if (typeof value.valueOf === 'function') {
+ value = value.valueOf();
+ if (isPrimitive(value)) return value;
+ }
+ if (typeof value.toString === 'function') {
+ value = value.toString();
+ if (isPrimitive(value)) return value;
+ }
+ return '';
+ }
+
+ function compare(v1, v2) {
+ var t1 = typeof v1;
+ var t2 = typeof v2;
+ if (t1 === t2 && t1 === "object") {
+ v1 = objectToString(v1);
+ v2 = objectToString(v2);
+ }
+ if (t1 === t2) {
+ if (t1 === "string") {
+ v1 = v1.toLowerCase();
+ v2 = v2.toLowerCase();
+ }
+ if (v1 === v2) return 0;
+ return v1 < v2 ? -1 : 1;
+ } else {
+ return t1 < t2 ? -1 : 1;
+ }
+ }
+ };
+}
+
+function ngDirective(directive) {
+ if (isFunction(directive)) {
+ directive = {
+ link: directive
+ };
+ }
+ directive.restrict = directive.restrict || 'AC';
+ return valueFn(directive);
+}
+
+/**
+ * @ngdoc directive
+ * @name a
+ * @restrict E
+ *
+ * @description
+ * Modifies the default behavior of the html A tag so that the default action is prevented when
+ * the href attribute is empty.
+ *
+ * This change permits the easy creation of action links with the `ngClick` directive
+ * without changing the location or causing page reloads, e.g.:
+ * `<a href="" ng-click="list.addItem()">Add Item</a>`
+ */
+var htmlAnchorDirective = valueFn({
+ restrict: 'E',
+ compile: function(element, attr) {
+ if (!attr.href && !attr.xlinkHref && !attr.name) {
+ return function(scope, element) {
+ // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
+ var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
+ 'xlink:href' : 'href';
+ element.on('click', function(event) {
+ // if we have no href url, then don't navigate anywhere.
+ if (!element.attr(href)) {
+ event.preventDefault();
+ }
+ });
+ };
+ }
+ }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngHref
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in an href attribute will
+ * make the link go to the wrong URL if the user clicks it before
+ * Angular has a chance to replace the `{{hash}}` markup with its
+ * value. Until Angular replaces the markup the link will be broken
+ * and will most likely return a 404 error. The `ngHref` directive
+ * solves this problem.
+ *
+ * The wrong way to write it:
+ * ```html
+ * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * @element A
+ * @param {template} ngHref any string which can contain `{{}}` markup.
+ *
+ * @example
+ * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
+ * in links and their different behaviors:
+ <example>
+ <file name="index.html">
+ <input ng-model="value" /><br />
+ <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
+ <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
+ <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
+ <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
+ <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
+ <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should execute ng-click but not reload when href without value', function() {
+ element(by.id('link-1')).click();
+ expect(element(by.model('value')).getAttribute('value')).toEqual('1');
+ expect(element(by.id('link-1')).getAttribute('href')).toBe('');
+ });
+
+ it('should execute ng-click but not reload when href empty string', function() {
+ element(by.id('link-2')).click();
+ expect(element(by.model('value')).getAttribute('value')).toEqual('2');
+ expect(element(by.id('link-2')).getAttribute('href')).toBe('');
+ });
+
+ it('should execute ng-click and change url when ng-href specified', function() {
+ expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
+
+ element(by.id('link-3')).click();
+
+ // At this point, we navigate away from an Angular page, so we need
+ // to use browser.driver to get the base webdriver.
+
+ browser.wait(function() {
+ return browser.driver.getCurrentUrl().then(function(url) {
+ return url.match(/\/123$/);
+ });
+ }, 5000, 'page should navigate to /123');
+ });
+
+ xit('should execute ng-click but not reload when href empty string and name specified', function() {
+ element(by.id('link-4')).click();
+ expect(element(by.model('value')).getAttribute('value')).toEqual('4');
+ expect(element(by.id('link-4')).getAttribute('href')).toBe('');
+ });
+
+ it('should execute ng-click but not reload when no href but name specified', function() {
+ element(by.id('link-5')).click();
+ expect(element(by.model('value')).getAttribute('value')).toEqual('5');
+ expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
+ });
+
+ it('should only change url when only ng-href', function() {
+ element(by.model('value')).clear();
+ element(by.model('value')).sendKeys('6');
+ expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
+
+ element(by.id('link-6')).click();
+
+ // At this point, we navigate away from an Angular page, so we need
+ // to use browser.driver to get the base webdriver.
+ browser.wait(function() {
+ return browser.driver.getCurrentUrl().then(function(url) {
+ return url.match(/\/6$/);
+ });
+ }, 5000, 'page should navigate to /6');
+ });
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrc
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrc` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img src="http://www.gravatar.com/avatar/{{hash}}"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/>
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrc any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrcset
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrcset` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrcset any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngDisabled
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ *
+ * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:
+ * ```html
+ * <div ng-init="scope = { isDisabled: false }">
+ * <button disabled="{{scope.isDisabled}}">Disabled</button>
+ * </div>
+ * ```
+ *
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as disabled. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngDisabled` directive solves this problem for the `disabled` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ Click me to toggle: <input type="checkbox" ng-model="checked"><br/>
+ <button ng-model="button" ng-disabled="checked">Button</button>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should toggle button', function() {
+ expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
+ element(by.model('checked')).click();
+ expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
+ });
+ </file>
+ </example>
+ *
+ * @element INPUT
+ * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
+ * then special attribute "disabled" will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngChecked
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as checked. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngChecked` directive solves this problem for the `checked` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+ <example>
+ <file name="index.html">
+ Check me to check both: <input type="checkbox" ng-model="master"><br/>
+ <input id="checkSlave" type="checkbox" ng-checked="master">
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check both checkBoxes', function() {
+ expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
+ element(by.model('master')).click();
+ expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
+ });
+ </file>
+ </example>
+ *
+ * @element INPUT
+ * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
+ * then special attribute "checked" will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngReadonly
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as readonly. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngReadonly` directive solves this problem for the `readonly` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+ <example>
+ <file name="index.html">
+ Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
+ <input type="text" ng-readonly="checked" value="I'm Angular"/>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should toggle readonly attr', function() {
+ expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
+ element(by.model('checked')).click();
+ expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
+ });
+ </file>
+ </example>
+ *
+ * @element INPUT
+ * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
+ * then special attribute "readonly" will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSelected
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as selected. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngSelected` directive solves this problem for the `selected` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ Check me to select: <input type="checkbox" ng-model="selected"><br/>
+ <select>
+ <option>Hello!</option>
+ <option id="greet" ng-selected="selected">Greetings!</option>
+ </select>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should select Greetings!', function() {
+ expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
+ element(by.model('selected')).click();
+ expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
+ });
+ </file>
+ </example>
+ *
+ * @element OPTION
+ * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
+ * then special attribute "selected" will be set on the element
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngOpen
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as open. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngOpen` directive solves this problem for the `open` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+ <example>
+ <file name="index.html">
+ Check me check multiple: <input type="checkbox" ng-model="open"><br/>
+ <details id="details" ng-open="open">
+ <summary>Show/Hide me</summary>
+ </details>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should toggle open', function() {
+ expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
+ element(by.model('open')).click();
+ expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
+ });
+ </file>
+ </example>
+ *
+ * @element DETAILS
+ * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
+ * then special attribute "open" will be set on the element
+ */
+
+var ngAttributeAliasDirectives = {};
+
+
+// boolean attrs are evaluated
+forEach(BOOLEAN_ATTR, function(propName, attrName) {
+ // binding to multiple is not supported
+ if (propName == "multiple") return;
+
+ var normalized = directiveNormalize('ng-' + attrName);
+ ngAttributeAliasDirectives[normalized] = function() {
+ return {
+ restrict: 'A',
+ priority: 100,
+ link: function(scope, element, attr) {
+ scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
+ attr.$set(attrName, !!value);
+ });
+ }
+ };
+ };
+});
+
+// aliased input attrs are evaluated
+forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
+ ngAttributeAliasDirectives[ngAttr] = function() {
+ return {
+ priority: 100,
+ link: function(scope, element, attr) {
+ //special case ngPattern when a literal regular expression value
+ //is used as the expression (this way we don't have to watch anything).
+ if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
+ var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
+ if (match) {
+ attr.$set("ngPattern", new RegExp(match[1], match[2]));
+ return;
+ }
+ }
+
+ scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
+ attr.$set(ngAttr, value);
+ });
+ }
+ };
+ };
+});
+
+// ng-src, ng-srcset, ng-href are interpolated
+forEach(['src', 'srcset', 'href'], function(attrName) {
+ var normalized = directiveNormalize('ng-' + attrName);
+ ngAttributeAliasDirectives[normalized] = function() {
+ return {
+ priority: 99, // it needs to run after the attributes are interpolated
+ link: function(scope, element, attr) {
+ var propName = attrName,
+ name = attrName;
+
+ if (attrName === 'href' &&
+ toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
+ name = 'xlinkHref';
+ attr.$attr[name] = 'xlink:href';
+ propName = null;
+ }
+
+ attr.$observe(normalized, function(value) {
+ if (!value) {
+ if (attrName === 'href') {
+ attr.$set(name, null);
+ }
+ return;
+ }
+
+ attr.$set(name, value);
+
+ // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
+ // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
+ // to set the property as well to achieve the desired effect.
+ // we use attr[attrName] value since $set can sanitize the url.
+ if (msie && propName) element.prop(propName, attr[name]);
+ });
+ }
+ };
+ };
+});
+
+/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
+ */
+var nullFormCtrl = {
+ $addControl: noop,
+ $$renameControl: nullFormRenameControl,
+ $removeControl: noop,
+ $setValidity: noop,
+ $setDirty: noop,
+ $setPristine: noop,
+ $setSubmitted: noop
+},
+SUBMITTED_CLASS = 'ng-submitted';
+
+function nullFormRenameControl(control, name) {
+ control.$name = name;
+}
+
+/**
+ * @ngdoc type
+ * @name form.FormController
+ *
+ * @property {boolean} $pristine True if user has not interacted with the form yet.
+ * @property {boolean} $dirty True if user has already interacted with the form.
+ * @property {boolean} $valid True if all of the containing forms and controls are valid.
+ * @property {boolean} $invalid True if at least one containing control or form is invalid.
+ * @property {boolean} $submitted True if user has submitted the form even if its invalid.
+ *
+ * @property {Object} $error Is an object hash, containing references to controls or
+ * forms with failing validators, where:
+ *
+ * - keys are validation tokens (error names),
+ * - values are arrays of controls or forms that have a failing validator for given error name.
+ *
+ * Built-in validation tokens:
+ *
+ * - `email`
+ * - `max`
+ * - `maxlength`
+ * - `min`
+ * - `minlength`
+ * - `number`
+ * - `pattern`
+ * - `required`
+ * - `url`
+ * - `date`
+ * - `datetimelocal`
+ * - `time`
+ * - `week`
+ * - `month`
+ *
+ * @description
+ * `FormController` keeps track of all its controls and nested forms as well as the state of them,
+ * such as being valid/invalid or dirty/pristine.
+ *
+ * Each {@link ng.directive:form form} directive creates an instance
+ * of `FormController`.
+ *
+ */
+//asks for $scope to fool the BC controller module
+FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
+function FormController(element, attrs, $scope, $animate, $interpolate) {
+ var form = this,
+ controls = [];
+
+ var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl;
+
+ // init state
+ form.$error = {};
+ form.$$success = {};
+ form.$pending = undefined;
+ form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
+ form.$dirty = false;
+ form.$pristine = true;
+ form.$valid = true;
+ form.$invalid = false;
+ form.$submitted = false;
+
+ parentForm.$addControl(form);
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$rollbackViewValue
+ *
+ * @description
+ * Rollback all form controls pending updates to the `$modelValue`.
+ *
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
+ * event defined in `ng-model-options`. This method is typically needed by the reset button of
+ * a form that uses `ng-model-options` to pend updates.
+ */
+ form.$rollbackViewValue = function() {
+ forEach(controls, function(control) {
+ control.$rollbackViewValue();
+ });
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$commitViewValue
+ *
+ * @description
+ * Commit all form controls pending updates to the `$modelValue`.
+ *
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
+ * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
+ * usually handles calling this in response to input events.
+ */
+ form.$commitViewValue = function() {
+ forEach(controls, function(control) {
+ control.$commitViewValue();
+ });
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$addControl
+ *
+ * @description
+ * Register a control with the form.
+ *
+ * Input elements using ngModelController do this automatically when they are linked.
+ */
+ form.$addControl = function(control) {
+ // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
+ // and not added to the scope. Now we throw an error.
+ assertNotHasOwnProperty(control.$name, 'input');
+ controls.push(control);
+
+ if (control.$name) {
+ form[control.$name] = control;
+ }
+ };
+
+ // Private API: rename a form control
+ form.$$renameControl = function(control, newName) {
+ var oldName = control.$name;
+
+ if (form[oldName] === control) {
+ delete form[oldName];
+ }
+ form[newName] = control;
+ control.$name = newName;
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$removeControl
+ *
+ * @description
+ * Deregister a control from the form.
+ *
+ * Input elements using ngModelController do this automatically when they are destroyed.
+ */
+ form.$removeControl = function(control) {
+ if (control.$name && form[control.$name] === control) {
+ delete form[control.$name];
+ }
+ forEach(form.$pending, function(value, name) {
+ form.$setValidity(name, null, control);
+ });
+ forEach(form.$error, function(value, name) {
+ form.$setValidity(name, null, control);
+ });
+
+ arrayRemove(controls, control);
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$setValidity
+ *
+ * @description
+ * Sets the validity of a form control.
+ *
+ * This method will also propagate to parent forms.
+ */
+ addSetValidityMethod({
+ ctrl: this,
+ $element: element,
+ set: function(object, property, control) {
+ var list = object[property];
+ if (!list) {
+ object[property] = [control];
+ } else {
+ var index = list.indexOf(control);
+ if (index === -1) {
+ list.push(control);
+ }
+ }
+ },
+ unset: function(object, property, control) {
+ var list = object[property];
+ if (!list) {
+ return;
+ }
+ arrayRemove(list, control);
+ if (list.length === 0) {
+ delete object[property];
+ }
+ },
+ parentForm: parentForm,
+ $animate: $animate
+ });
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$setDirty
+ *
+ * @description
+ * Sets the form to a dirty state.
+ *
+ * This method can be called to add the 'ng-dirty' class and set the form to a dirty
+ * state (ng-dirty class). This method will also propagate to parent forms.
+ */
+ form.$setDirty = function() {
+ $animate.removeClass(element, PRISTINE_CLASS);
+ $animate.addClass(element, DIRTY_CLASS);
+ form.$dirty = true;
+ form.$pristine = false;
+ parentForm.$setDirty();
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$setPristine
+ *
+ * @description
+ * Sets the form to its pristine state.
+ *
+ * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
+ * state (ng-pristine class). This method will also propagate to all the controls contained
+ * in this form.
+ *
+ * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
+ * saving or resetting it.
+ */
+ form.$setPristine = function() {
+ $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
+ form.$dirty = false;
+ form.$pristine = true;
+ form.$submitted = false;
+ forEach(controls, function(control) {
+ control.$setPristine();
+ });
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$setUntouched
+ *
+ * @description
+ * Sets the form to its untouched state.
+ *
+ * This method can be called to remove the 'ng-touched' class and set the form controls to their
+ * untouched state (ng-untouched class).
+ *
+ * Setting a form controls back to their untouched state is often useful when setting the form
+ * back to its pristine state.
+ */
+ form.$setUntouched = function() {
+ forEach(controls, function(control) {
+ control.$setUntouched();
+ });
+ };
+
+ /**
+ * @ngdoc method
+ * @name form.FormController#$setSubmitted
+ *
+ * @description
+ * Sets the form to its submitted state.
+ */
+ form.$setSubmitted = function() {
+ $animate.addClass(element, SUBMITTED_CLASS);
+ form.$submitted = true;
+ parentForm.$setSubmitted();
+ };
+}
+
+/**
+ * @ngdoc directive
+ * @name ngForm
+ * @restrict EAC
+ *
+ * @description
+ * Nestable alias of {@link ng.directive:form `form`} directive. HTML
+ * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
+ * sub-group of controls needs to be determined.
+ *
+ * Note: the purpose of `ngForm` is to group controls,
+ * but not to be a replacement for the `<form>` tag with all of its capabilities
+ * (e.g. posting to the server, ...).
+ *
+ * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
+ * related scope, under this name.
+ *
+ */
+
+ /**
+ * @ngdoc directive
+ * @name form
+ * @restrict E
+ *
+ * @description
+ * Directive that instantiates
+ * {@link form.FormController FormController}.
+ *
+ * If the `name` attribute is specified, the form controller is published onto the current scope under
+ * this name.
+ *
+ * # Alias: {@link ng.directive:ngForm `ngForm`}
+ *
+ * In Angular forms can be nested. This means that the outer form is valid when all of the child
+ * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
+ * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
+ * `<form>` but can be nested. This allows you to have nested forms, which is very useful when
+ * using Angular validation directives in forms that are dynamically generated using the
+ * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
+ * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
+ * `ngForm` directive and nest these in an outer `form` element.
+ *
+ *
+ * # CSS classes
+ * - `ng-valid` is set if the form is valid.
+ * - `ng-invalid` is set if the form is invalid.
+ * - `ng-pristine` is set if the form is pristine.
+ * - `ng-dirty` is set if the form is dirty.
+ * - `ng-submitted` is set if the form was submitted.
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ *
+ * # Submitting a form and preventing the default action
+ *
+ * Since the role of forms in client-side Angular applications is different than in classical
+ * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
+ * page reload that sends the data to the server. Instead some javascript logic should be triggered
+ * to handle the form submission in an application-specific way.
+ *
+ * For this reason, Angular prevents the default action (form submission to the server) unless the
+ * `<form>` element has an `action` attribute specified.
+ *
+ * You can use one of the following two ways to specify what javascript method should be called when
+ * a form is submitted:
+ *
+ * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
+ * - {@link ng.directive:ngClick ngClick} directive on the first
+ * button or input field of type submit (input[type=submit])
+ *
+ * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
+ * or {@link ng.directive:ngClick ngClick} directives.
+ * This is because of the following form submission rules in the HTML specification:
+ *
+ * - If a form has only one input field then hitting enter in this field triggers form submit
+ * (`ngSubmit`)
+ * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
+ * doesn't trigger submit
+ * - if a form has one or more input fields and one or more buttons or input[type=submit] then
+ * hitting enter in any of the input fields will trigger the click handler on the *first* button or
+ * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
+ *
+ * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
+ * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * ## Animation Hooks
+ *
+ * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
+ * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
+ * other validations that are performed within the form. Animations in ngForm are similar to how
+ * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
+ * as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style a form element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-form {
+ * transition:0.5s linear all;
+ * background: white;
+ * }
+ * .my-form.ng-invalid {
+ * background: red;
+ * color:white;
+ * }
+ * </pre>
+ *
+ * @example
+ <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
+ <file name="index.html">
+ <script>
+ angular.module('formExample', [])
+ .controller('FormController', ['$scope', function($scope) {
+ $scope.userType = 'guest';
+ }]);
+ </script>
+ <style>
+ .my-form {
+ -webkit-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+ background: transparent;
+ }
+ .my-form.ng-invalid {
+ background: red;
+ }
+ </style>
+ <form name="myForm" ng-controller="FormController" class="my-form">
+ userType: <input name="input" ng-model="userType" required>
+ <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
+ <tt>userType = {{userType}}</tt><br>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should initialize to model', function() {
+ var userType = element(by.binding('userType'));
+ var valid = element(by.binding('myForm.input.$valid'));
+
+ expect(userType.getText()).toContain('guest');
+ expect(valid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty', function() {
+ var userType = element(by.binding('userType'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var userInput = element(by.model('userType'));
+
+ userInput.clear();
+ userInput.sendKeys('');
+
+ expect(userType.getText()).toEqual('userType =');
+ expect(valid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ *
+ * @param {string=} name Name of the form. If specified, the form controller will be published into
+ * related scope, under this name.
+ */
+var formDirectiveFactory = function(isNgForm) {
+ return ['$timeout', function($timeout) {
+ var formDirective = {
+ name: 'form',
+ restrict: isNgForm ? 'EAC' : 'E',
+ controller: FormController,
+ compile: function ngFormCompile(formElement) {
+ // Setup initial state of the control
+ formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
+
+ return {
+ pre: function ngFormPreLink(scope, formElement, attr, controller) {
+ // if `action` attr is not present on the form, prevent the default action (submission)
+ if (!('action' in attr)) {
+ // we can't use jq events because if a form is destroyed during submission the default
+ // action is not prevented. see #1238
+ //
+ // IE 9 is not affected because it doesn't fire a submit event and try to do a full
+ // page reload if the form was destroyed by submission of the form via a click handler
+ // on a button in the form. Looks like an IE9 specific bug.
+ var handleFormSubmission = function(event) {
+ scope.$apply(function() {
+ controller.$commitViewValue();
+ controller.$setSubmitted();
+ });
+
+ event.preventDefault();
+ };
+
+ addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+
+ // unregister the preventDefault listener so that we don't not leak memory but in a
+ // way that will achieve the prevention of the default action.
+ formElement.on('$destroy', function() {
+ $timeout(function() {
+ removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+ }, 0, false);
+ });
+ }
+
+ var parentFormCtrl = controller.$$parentForm,
+ alias = controller.$name;
+
+ if (alias) {
+ setter(scope, alias, controller, alias);
+ attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) {
+ if (alias === newValue) return;
+ setter(scope, alias, undefined, alias);
+ alias = newValue;
+ setter(scope, alias, controller, alias);
+ parentFormCtrl.$$renameControl(controller, alias);
+ });
+ }
+ formElement.on('$destroy', function() {
+ parentFormCtrl.$removeControl(controller);
+ if (alias) {
+ setter(scope, alias, undefined, alias);
+ }
+ extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
+ });
+ }
+ };
+ }
+ };
+
+ return formDirective;
+ }];
+};
+
+var formDirective = formDirectiveFactory();
+var ngFormDirective = formDirectiveFactory(true);
+
+/* global VALID_CLASS: true,
+ INVALID_CLASS: true,
+ PRISTINE_CLASS: true,
+ DIRTY_CLASS: true,
+ UNTOUCHED_CLASS: true,
+ TOUCHED_CLASS: true,
+*/
+
+// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
+var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
+var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
+var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
+var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
+var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
+var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
+var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
+var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
+
+var $ngModelMinErr = new minErr('ngModel');
+
+var inputType = {
+
+ /**
+ * @ngdoc input
+ * @name input[text]
+ *
+ * @description
+ * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Adds `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+ * any length.
+ * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+ * that contains the regular expression body that will be converted to a regular expression
+ * as in the ngPattern directive.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * If the expression evaluates to a RegExp object then this is used directly.
+ * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
+ * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ * This parameter is ignored for input[type=password] controls, which will never trim the
+ * input.
+ *
+ * @example
+ <example name="text-input-directive" module="textInputExample">
+ <file name="index.html">
+ <script>
+ angular.module('textInputExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.text = 'guest';
+ $scope.word = /^\s*\w*\s*$/;
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ Single word: <input type="text" name="input" ng-model="text"
+ ng-pattern="word" required ng-trim="false">
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.pattern">
+ Single word only!</span>
+
+ <tt>text = {{text}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var text = element(by.binding('text'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('text'));
+
+ it('should initialize to model', function() {
+ expect(text.getText()).toContain('guest');
+ expect(valid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty', function() {
+ input.clear();
+ input.sendKeys('');
+
+ expect(text.getText()).toEqual('text =');
+ expect(valid.getText()).toContain('false');
+ });
+
+ it('should be invalid if multi word', function() {
+ input.clear();
+ input.sendKeys('hello world');
+
+ expect(valid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ */
+ 'text': textInputType,
+
+ /**
+ * @ngdoc input
+ * @name input[date]
+ *
+ * @description
+ * Input with date validation and transformation. In browsers that do not yet support
+ * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
+ * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
+ * modern browsers do not yet support this input type, it is important to provide cues to users on the
+ * expected input format via a placeholder or label.
+ *
+ * The model must always be a Date object, otherwise Angular will throw an error.
+ * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+ *
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+ * valid ISO date string (yyyy-MM-dd).
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
+ * a valid ISO date string (yyyy-MM-dd).
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="date-input-directive" module="dateInputExample">
+ <file name="index.html">
+ <script>
+ angular.module('dateInputExample', [])
+ .controller('DateController', ['$scope', function($scope) {
+ $scope.value = new Date(2013, 9, 22);
+ }]);
+ </script>
+ <form name="myForm" ng-controller="DateController as dateCtrl">
+ Pick a date in 2013:
+ <input type="date" id="exampleInput" name="input" ng-model="value"
+ placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.date">
+ Not a valid date!</span>
+ <tt>value = {{value | date: "yyyy-MM-dd"}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value | date: "yyyy-MM-dd"'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ // currently protractor/webdriver does not support
+ // sending keys to all known HTML5 input controls
+ // for various browsers (see https://github.com/angular/protractor/issues/562).
+ function setInput(val) {
+ // set the value of the element and force validation.
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
+ "ipt.value = '" + val + "';" +
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+ browser.executeScript(scr);
+ }
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('2013-10-22');
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
+ });
+
+ it('should be invalid if empty', function() {
+ setInput('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+
+ it('should be invalid if over max', function() {
+ setInput('2015-01-01');
+ expect(value.getText()).toContain('');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+ </file>
+ </example>
+ */
+ 'date': createDateInputType('date', DATE_REGEXP,
+ createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
+ 'yyyy-MM-dd'),
+
+ /**
+ * @ngdoc input
+ * @name input[datetime-local]
+ *
+ * @description
+ * Input with datetime validation and transformation. In browsers that do not yet support
+ * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+ * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
+ *
+ * The model must always be a Date object, otherwise Angular will throw an error.
+ * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+ *
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+ * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
+ * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="datetimelocal-input-directive" module="dateExample">
+ <file name="index.html">
+ <script>
+ angular.module('dateExample', [])
+ .controller('DateController', ['$scope', function($scope) {
+ $scope.value = new Date(2010, 11, 28, 14, 57);
+ }]);
+ </script>
+ <form name="myForm" ng-controller="DateController as dateCtrl">
+ Pick a date between in 2013:
+ <input type="datetime-local" id="exampleInput" name="input" ng-model="value"
+ placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.datetimelocal">
+ Not a valid date!</span>
+ <tt>value = {{value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value | date: "yyyy-MM-ddTHH:mm:ss"'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ // currently protractor/webdriver does not support
+ // sending keys to all known HTML5 input controls
+ // for various browsers (https://github.com/angular/protractor/issues/562).
+ function setInput(val) {
+ // set the value of the element and force validation.
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
+ "ipt.value = '" + val + "';" +
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+ browser.executeScript(scr);
+ }
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('2010-12-28T14:57:00');
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
+ });
+
+ it('should be invalid if empty', function() {
+ setInput('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+
+ it('should be invalid if over max', function() {
+ setInput('2015-01-01T23:59:00');
+ expect(value.getText()).toContain('');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+ </file>
+ </example>
+ */
+ 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
+ createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
+ 'yyyy-MM-ddTHH:mm:ss.sss'),
+
+ /**
+ * @ngdoc input
+ * @name input[time]
+ *
+ * @description
+ * Input with time validation and transformation. In browsers that do not yet support
+ * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+ * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
+ * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
+ *
+ * The model must always be a Date object, otherwise Angular will throw an error.
+ * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+ *
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+ * valid ISO time format (HH:mm:ss).
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a
+ * valid ISO time format (HH:mm:ss).
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="time-input-directive" module="timeExample">
+ <file name="index.html">
+ <script>
+ angular.module('timeExample', [])
+ .controller('DateController', ['$scope', function($scope) {
+ $scope.value = new Date(1970, 0, 1, 14, 57, 0);
+ }]);
+ </script>
+ <form name="myForm" ng-controller="DateController as dateCtrl">
+ Pick a between 8am and 5pm:
+ <input type="time" id="exampleInput" name="input" ng-model="value"
+ placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.time">
+ Not a valid date!</span>
+ <tt>value = {{value | date: "HH:mm:ss"}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value | date: "HH:mm:ss"'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ // currently protractor/webdriver does not support
+ // sending keys to all known HTML5 input controls
+ // for various browsers (https://github.com/angular/protractor/issues/562).
+ function setInput(val) {
+ // set the value of the element and force validation.
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
+ "ipt.value = '" + val + "';" +
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+ browser.executeScript(scr);
+ }
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('14:57:00');
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
+ });
+
+ it('should be invalid if empty', function() {
+ setInput('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+
+ it('should be invalid if over max', function() {
+ setInput('23:59:00');
+ expect(value.getText()).toContain('');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+ </file>
+ </example>
+ */
+ 'time': createDateInputType('time', TIME_REGEXP,
+ createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
+ 'HH:mm:ss.sss'),
+
+ /**
+ * @ngdoc input
+ * @name input[week]
+ *
+ * @description
+ * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
+ * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+ * week format (yyyy-W##), for example: `2013-W02`.
+ *
+ * The model must always be a Date object, otherwise Angular will throw an error.
+ * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+ *
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+ * valid ISO week format (yyyy-W##).
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
+ * a valid ISO week format (yyyy-W##).
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="week-input-directive" module="weekExample">
+ <file name="index.html">
+ <script>
+ angular.module('weekExample', [])
+ .controller('DateController', ['$scope', function($scope) {
+ $scope.value = new Date(2013, 0, 3);
+ }]);
+ </script>
+ <form name="myForm" ng-controller="DateController as dateCtrl">
+ Pick a date between in 2013:
+ <input id="exampleInput" type="week" name="input" ng-model="value"
+ placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required />
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.week">
+ Not a valid date!</span>
+ <tt>value = {{value | date: "yyyy-Www"}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value | date: "yyyy-Www"'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ // currently protractor/webdriver does not support
+ // sending keys to all known HTML5 input controls
+ // for various browsers (https://github.com/angular/protractor/issues/562).
+ function setInput(val) {
+ // set the value of the element and force validation.
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
+ "ipt.value = '" + val + "';" +
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+ browser.executeScript(scr);
+ }
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('2013-W01');
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
+ });
+
+ it('should be invalid if empty', function() {
+ setInput('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+
+ it('should be invalid if over max', function() {
+ setInput('2015-W01');
+ expect(value.getText()).toContain('');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+ </file>
+ </example>
+ */
+ 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
+
+ /**
+ * @ngdoc input
+ * @name input[month]
+ *
+ * @description
+ * Input with month validation and transformation. In browsers that do not yet support
+ * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+ * month format (yyyy-MM), for example: `2009-01`.
+ *
+ * The model must always be a Date object, otherwise Angular will throw an error.
+ * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+ * If the model is not set to the first of the month, the next view to model update will set it
+ * to the first of the month.
+ *
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be
+ * a valid ISO month format (yyyy-MM).
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must
+ * be a valid ISO month format (yyyy-MM).
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="month-input-directive" module="monthExample">
+ <file name="index.html">
+ <script>
+ angular.module('monthExample', [])
+ .controller('DateController', ['$scope', function($scope) {
+ $scope.value = new Date(2013, 9, 1);
+ }]);
+ </script>
+ <form name="myForm" ng-controller="DateController as dateCtrl">
+ Pick a month int 2013:
+ <input id="exampleInput" type="month" name="input" ng-model="value"
+ placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.month">
+ Not a valid month!</span>
+ <tt>value = {{value | date: "yyyy-MM"}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value | date: "yyyy-MM"'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ // currently protractor/webdriver does not support
+ // sending keys to all known HTML5 input controls
+ // for various browsers (https://github.com/angular/protractor/issues/562).
+ function setInput(val) {
+ // set the value of the element and force validation.
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
+ "ipt.value = '" + val + "';" +
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+ browser.executeScript(scr);
+ }
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('2013-10');
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
+ });
+
+ it('should be invalid if empty', function() {
+ setInput('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+
+ it('should be invalid if over max', function() {
+ setInput('2015-01');
+ expect(value.getText()).toContain('');
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
+ });
+ </file>
+ </example>
+ */
+ 'month': createDateInputType('month', MONTH_REGEXP,
+ createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
+ 'yyyy-MM'),
+
+ /**
+ * @ngdoc input
+ * @name input[number]
+ *
+ * @description
+ * Text input with number validation and transformation. Sets the `number` validation
+ * error if not a valid number.
+ *
+ * The model must always be a number, otherwise Angular will throw an error.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+ * any length.
+ * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+ * that contains the regular expression body that will be converted to a regular expression
+ * as in the ngPattern directive.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * If the expression evaluates to a RegExp object then this is used directly.
+ * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
+ * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="number-input-directive" module="numberExample">
+ <file name="index.html">
+ <script>
+ angular.module('numberExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.value = 12;
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ Number: <input type="number" name="input" ng-model="value"
+ min="0" max="99" required>
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.number">
+ Not valid number!</span>
+ <tt>value = {{value}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var value = element(by.binding('value'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('value'));
+
+ it('should initialize to model', function() {
+ expect(value.getText()).toContain('12');
+ expect(valid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty', function() {
+ input.clear();
+ input.sendKeys('');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('false');
+ });
+
+ it('should be invalid if over max', function() {
+ input.clear();
+ input.sendKeys('123');
+ expect(value.getText()).toEqual('value =');
+ expect(valid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ */
+ 'number': numberInputType,
+
+
+ /**
+ * @ngdoc input
+ * @name input[url]
+ *
+ * @description
+ * Text input with URL validation. Sets the `url` validation error key if the content is not a
+ * valid URL.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
+ * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
+ * the built-in validators (see the {@link guide/forms Forms guide})
+ * </div>
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+ * any length.
+ * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+ * that contains the regular expression body that will be converted to a regular expression
+ * as in the ngPattern directive.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * If the expression evaluates to a RegExp object then this is used directly.
+ * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
+ * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="url-input-directive" module="urlExample">
+ <file name="index.html">
+ <script>
+ angular.module('urlExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.text = 'http://google.com';
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ URL: <input type="url" name="input" ng-model="text" required>
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.url">
+ Not valid url!</span>
+ <tt>text = {{text}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var text = element(by.binding('text'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('text'));
+
+ it('should initialize to model', function() {
+ expect(text.getText()).toContain('http://google.com');
+ expect(valid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty', function() {
+ input.clear();
+ input.sendKeys('');
+
+ expect(text.getText()).toEqual('text =');
+ expect(valid.getText()).toContain('false');
+ });
+
+ it('should be invalid if not url', function() {
+ input.clear();
+ input.sendKeys('box');
+
+ expect(valid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ */
+ 'url': urlInputType,
+
+
+ /**
+ * @ngdoc input
+ * @name input[email]
+ *
+ * @description
+ * Text input with email validation. Sets the `email` validation error key if not a valid email
+ * address.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
+ * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
+ * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
+ * </div>
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+ * any length.
+ * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+ * that contains the regular expression body that will be converted to a regular expression
+ * as in the ngPattern directive.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * If the expression evaluates to a RegExp object then this is used directly.
+ * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
+ * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="email-input-directive" module="emailExample">
+ <file name="index.html">
+ <script>
+ angular.module('emailExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.text = 'me@example.com';
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ Email: <input type="email" name="input" ng-model="text" required>
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span>
+ <span class="error" ng-show="myForm.input.$error.email">
+ Not valid email!</span>
+ <tt>text = {{text}}</tt><br/>
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var text = element(by.binding('text'));
+ var valid = element(by.binding('myForm.input.$valid'));
+ var input = element(by.model('text'));
+
+ it('should initialize to model', function() {
+ expect(text.getText()).toContain('me@example.com');
+ expect(valid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty', function() {
+ input.clear();
+ input.sendKeys('');
+ expect(text.getText()).toEqual('text =');
+ expect(valid.getText()).toContain('false');
+ });
+
+ it('should be invalid if not email', function() {
+ input.clear();
+ input.sendKeys('xxx');
+
+ expect(valid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ */
+ 'email': emailInputType,
+
+
+ /**
+ * @ngdoc input
+ * @name input[radio]
+ *
+ * @description
+ * HTML radio button.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string} value The value to which the expression should be set when selected.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ * @param {string} ngValue Angular expression which sets the value to which the expression should
+ * be set when selected.
+ *
+ * @example
+ <example name="radio-input-directive" module="radioExample">
+ <file name="index.html">
+ <script>
+ angular.module('radioExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.color = 'blue';
+ $scope.specialValue = {
+ "id": "12345",
+ "value": "green"
+ };
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ <input type="radio" ng-model="color" value="red"> Red <br/>
+ <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/>
+ <input type="radio" ng-model="color" value="blue"> Blue <br/>
+ <tt>color = {{color | json}}</tt><br/>
+ </form>
+ Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should change state', function() {
+ var color = element(by.binding('color'));
+
+ expect(color.getText()).toContain('blue');
+
+ element.all(by.model('color')).get(0).click();
+
+ expect(color.getText()).toContain('red');
+ });
+ </file>
+ </example>
+ */
+ 'radio': radioInputType,
+
+
+ /**
+ * @ngdoc input
+ * @name input[checkbox]
+ *
+ * @description
+ * HTML checkbox.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
+ * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ *
+ * @example
+ <example name="checkbox-input-directive" module="checkboxExample">
+ <file name="index.html">
+ <script>
+ angular.module('checkboxExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.value1 = true;
+ $scope.value2 = 'YES'
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ Value1: <input type="checkbox" ng-model="value1"> <br/>
+ Value2: <input type="checkbox" ng-model="value2"
+ ng-true-value="'YES'" ng-false-value="'NO'"> <br/>
+ <tt>value1 = {{value1}}</tt><br/>
+ <tt>value2 = {{value2}}</tt><br/>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should change state', function() {
+ var value1 = element(by.binding('value1'));
+ var value2 = element(by.binding('value2'));
+
+ expect(value1.getText()).toContain('true');
+ expect(value2.getText()).toContain('YES');
+
+ element(by.model('value1')).click();
+ element(by.model('value2')).click();
+
+ expect(value1.getText()).toContain('false');
+ expect(value2.getText()).toContain('NO');
+ });
+ </file>
+ </example>
+ */
+ 'checkbox': checkboxInputType,
+
+ 'hidden': noop,
+ 'button': noop,
+ 'submit': noop,
+ 'reset': noop,
+ 'file': noop
+};
+
+function stringBasedInputType(ctrl) {
+ ctrl.$formatters.push(function(value) {
+ return ctrl.$isEmpty(value) ? value : value.toString();
+ });
+}
+
+function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+ stringBasedInputType(ctrl);
+}
+
+function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ var type = lowercase(element[0].type);
+
+ // In composition mode, users are still inputing intermediate text buffer,
+ // hold the listener until composition is done.
+ // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
+ if (!$sniffer.android) {
+ var composing = false;
+
+ element.on('compositionstart', function(data) {
+ composing = true;
+ });
+
+ element.on('compositionend', function() {
+ composing = false;
+ listener();
+ });
+ }
+
+ var listener = function(ev) {
+ if (timeout) {
+ $browser.defer.cancel(timeout);
+ timeout = null;
+ }
+ if (composing) return;
+ var value = element.val(),
+ event = ev && ev.type;
+
+ // By default we will trim the value
+ // If the attribute ng-trim exists we will avoid trimming
+ // If input type is 'password', the value is never trimmed
+ if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
+ value = trim(value);
+ }
+
+ // If a control is suffering from bad input (due to native validators), browsers discard its
+ // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
+ // control's value is the same empty value twice in a row.
+ if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
+ ctrl.$setViewValue(value, event);
+ }
+ };
+
+ // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
+ // input event on backspace, delete or cut
+ if ($sniffer.hasEvent('input')) {
+ element.on('input', listener);
+ } else {
+ var timeout;
+
+ var deferListener = function(ev, input, origValue) {
+ if (!timeout) {
+ timeout = $browser.defer(function() {
+ timeout = null;
+ if (!input || input.value !== origValue) {
+ listener(ev);
+ }
+ });
+ }
+ };
+
+ element.on('keydown', function(event) {
+ var key = event.keyCode;
+
+ // ignore
+ // command modifiers arrows
+ if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
+
+ deferListener(event, this, this.value);
+ });
+
+ // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
+ if ($sniffer.hasEvent('paste')) {
+ element.on('paste cut', deferListener);
+ }
+ }
+
+ // if user paste into input using mouse on older browser
+ // or form autocomplete on newer browser, we need "change" event to catch it
+ element.on('change', listener);
+
+ ctrl.$render = function() {
+ element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);
+ };
+}
+
+function weekParser(isoWeek, existingDate) {
+ if (isDate(isoWeek)) {
+ return isoWeek;
+ }
+
+ if (isString(isoWeek)) {
+ WEEK_REGEXP.lastIndex = 0;
+ var parts = WEEK_REGEXP.exec(isoWeek);
+ if (parts) {
+ var year = +parts[1],
+ week = +parts[2],
+ hours = 0,
+ minutes = 0,
+ seconds = 0,
+ milliseconds = 0,
+ firstThurs = getFirstThursdayOfYear(year),
+ addDays = (week - 1) * 7;
+
+ if (existingDate) {
+ hours = existingDate.getHours();
+ minutes = existingDate.getMinutes();
+ seconds = existingDate.getSeconds();
+ milliseconds = existingDate.getMilliseconds();
+ }
+
+ return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
+ }
+ }
+
+ return NaN;
+}
+
+function createDateParser(regexp, mapping) {
+ return function(iso, date) {
+ var parts, map;
+
+ if (isDate(iso)) {
+ return iso;
+ }
+
+ if (isString(iso)) {
+ // When a date is JSON'ified to wraps itself inside of an extra
+ // set of double quotes. This makes the date parsing code unable
+ // to match the date string and parse it as a date.
+ if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
+ iso = iso.substring(1, iso.length - 1);
+ }
+ if (ISO_DATE_REGEXP.test(iso)) {
+ return new Date(iso);
+ }
+ regexp.lastIndex = 0;
+ parts = regexp.exec(iso);
+
+ if (parts) {
+ parts.shift();
+ if (date) {
+ map = {
+ yyyy: date.getFullYear(),
+ MM: date.getMonth() + 1,
+ dd: date.getDate(),
+ HH: date.getHours(),
+ mm: date.getMinutes(),
+ ss: date.getSeconds(),
+ sss: date.getMilliseconds() / 1000
+ };
+ } else {
+ map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
+ }
+
+ forEach(parts, function(part, index) {
+ if (index < mapping.length) {
+ map[mapping[index]] = +part;
+ }
+ });
+ return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
+ }
+ }
+
+ return NaN;
+ };
+}
+
+function createDateInputType(type, regexp, parseDate, format) {
+ return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
+ badInputChecker(scope, element, attr, ctrl);
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+ var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
+ var previousDate;
+
+ ctrl.$$parserName = type;
+ ctrl.$parsers.push(function(value) {
+ if (ctrl.$isEmpty(value)) return null;
+ if (regexp.test(value)) {
+ // Note: We cannot read ctrl.$modelValue, as there might be a different
+ // parser/formatter in the processing chain so that the model
+ // contains some different data format!
+ var parsedDate = parseDate(value, previousDate);
+ if (timezone === 'UTC') {
+ parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset());
+ }
+ return parsedDate;
+ }
+ return undefined;
+ });
+
+ ctrl.$formatters.push(function(value) {
+ if (value && !isDate(value)) {
+ throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
+ }
+ if (isValidDate(value)) {
+ previousDate = value;
+ if (previousDate && timezone === 'UTC') {
+ var timezoneOffset = 60000 * previousDate.getTimezoneOffset();
+ previousDate = new Date(previousDate.getTime() + timezoneOffset);
+ }
+ return $filter('date')(value, format, timezone);
+ } else {
+ previousDate = null;
+ return '';
+ }
+ });
+
+ if (isDefined(attr.min) || attr.ngMin) {
+ var minVal;
+ ctrl.$validators.min = function(value) {
+ return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
+ };
+ attr.$observe('min', function(val) {
+ minVal = parseObservedDateValue(val);
+ ctrl.$validate();
+ });
+ }
+
+ if (isDefined(attr.max) || attr.ngMax) {
+ var maxVal;
+ ctrl.$validators.max = function(value) {
+ return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
+ };
+ attr.$observe('max', function(val) {
+ maxVal = parseObservedDateValue(val);
+ ctrl.$validate();
+ });
+ }
+
+ function isValidDate(value) {
+ // Invalid Date: getTime() returns NaN
+ return value && !(value.getTime && value.getTime() !== value.getTime());
+ }
+
+ function parseObservedDateValue(val) {
+ return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;
+ }
+ };
+}
+
+function badInputChecker(scope, element, attr, ctrl) {
+ var node = element[0];
+ var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
+ if (nativeValidation) {
+ ctrl.$parsers.push(function(value) {
+ var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
+ // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
+ // - also sets validity.badInput (should only be validity.typeMismatch).
+ // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
+ // - can ignore this case as we can still read out the erroneous email...
+ return validity.badInput && !validity.typeMismatch ? undefined : value;
+ });
+ }
+}
+
+function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ badInputChecker(scope, element, attr, ctrl);
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+
+ ctrl.$$parserName = 'number';
+ ctrl.$parsers.push(function(value) {
+ if (ctrl.$isEmpty(value)) return null;
+ if (NUMBER_REGEXP.test(value)) return parseFloat(value);
+ return undefined;
+ });
+
+ ctrl.$formatters.push(function(value) {
+ if (!ctrl.$isEmpty(value)) {
+ if (!isNumber(value)) {
+ throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
+ }
+ value = value.toString();
+ }
+ return value;
+ });
+
+ if (attr.min || attr.ngMin) {
+ var minVal;
+ ctrl.$validators.min = function(value) {
+ return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
+ };
+
+ attr.$observe('min', function(val) {
+ if (isDefined(val) && !isNumber(val)) {
+ val = parseFloat(val, 10);
+ }
+ minVal = isNumber(val) && !isNaN(val) ? val : undefined;
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ });
+ }
+
+ if (attr.max || attr.ngMax) {
+ var maxVal;
+ ctrl.$validators.max = function(value) {
+ return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
+ };
+
+ attr.$observe('max', function(val) {
+ if (isDefined(val) && !isNumber(val)) {
+ val = parseFloat(val, 10);
+ }
+ maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ });
+ }
+}
+
+function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ // Note: no badInputChecker here by purpose as `url` is only a validation
+ // in browsers, i.e. we can always read out input.value even if it is not valid!
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+ stringBasedInputType(ctrl);
+
+ ctrl.$$parserName = 'url';
+ ctrl.$validators.url = function(modelValue, viewValue) {
+ var value = modelValue || viewValue;
+ return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
+ };
+}
+
+function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ // Note: no badInputChecker here by purpose as `url` is only a validation
+ // in browsers, i.e. we can always read out input.value even if it is not valid!
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+ stringBasedInputType(ctrl);
+
+ ctrl.$$parserName = 'email';
+ ctrl.$validators.email = function(modelValue, viewValue) {
+ var value = modelValue || viewValue;
+ return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
+ };
+}
+
+function radioInputType(scope, element, attr, ctrl) {
+ // make the name unique, if not defined
+ if (isUndefined(attr.name)) {
+ element.attr('name', nextUid());
+ }
+
+ var listener = function(ev) {
+ if (element[0].checked) {
+ ctrl.$setViewValue(attr.value, ev && ev.type);
+ }
+ };
+
+ element.on('click', listener);
+
+ ctrl.$render = function() {
+ var value = attr.value;
+ element[0].checked = (value == ctrl.$viewValue);
+ };
+
+ attr.$observe('value', ctrl.$render);
+}
+
+function parseConstantExpr($parse, context, name, expression, fallback) {
+ var parseFn;
+ if (isDefined(expression)) {
+ parseFn = $parse(expression);
+ if (!parseFn.constant) {
+ throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' +
+ '`{1}`.', name, expression);
+ }
+ return parseFn(context);
+ }
+ return fallback;
+}
+
+function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
+ var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
+ var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
+
+ var listener = function(ev) {
+ ctrl.$setViewValue(element[0].checked, ev && ev.type);
+ };
+
+ element.on('click', listener);
+
+ ctrl.$render = function() {
+ element[0].checked = ctrl.$viewValue;
+ };
+
+ // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
+ // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
+ // it to a boolean.
+ ctrl.$isEmpty = function(value) {
+ return value === false;
+ };
+
+ ctrl.$formatters.push(function(value) {
+ return equals(value, trueValue);
+ });
+
+ ctrl.$parsers.push(function(value) {
+ return value ? trueValue : falseValue;
+ });
+}
+
+
+/**
+ * @ngdoc directive
+ * @name textarea
+ * @restrict E
+ *
+ * @description
+ * HTML textarea element control with angular data-binding. The data-binding and validation
+ * properties of this element are exactly the same as those of the
+ * {@link ng.directive:input input element}.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ * length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
+ * patterns defined as scope expressions.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name input
+ * @restrict E
+ *
+ * @description
+ * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
+ * input state control, and validation.
+ * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Not every feature offered is available for all input types.
+ * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
+ * </div>
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {boolean=} ngRequired Sets `required` attribute if set to true
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ * minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ * length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
+ * patterns defined as scope expressions.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ * interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ * This parameter is ignored for input[type=password] controls, which will never trim the
+ * input.
+ *
+ * @example
+ <example name="input-directive" module="inputExample">
+ <file name="index.html">
+ <script>
+ angular.module('inputExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.user = {name: 'guest', last: 'visitor'};
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <form name="myForm">
+ User name: <input type="text" name="userName" ng-model="user.name" required>
+ <span class="error" ng-show="myForm.userName.$error.required">
+ Required!</span><br>
+ Last name: <input type="text" name="lastName" ng-model="user.last"
+ ng-minlength="3" ng-maxlength="10">
+ <span class="error" ng-show="myForm.lastName.$error.minlength">
+ Too short!</span>
+ <span class="error" ng-show="myForm.lastName.$error.maxlength">
+ Too long!</span><br>
+ </form>
+ <hr>
+ <tt>user = {{user}}</tt><br/>
+ <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>
+ <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>
+ <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>
+ <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
+ <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>
+ <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var user = element(by.exactBinding('user'));
+ var userNameValid = element(by.binding('myForm.userName.$valid'));
+ var lastNameValid = element(by.binding('myForm.lastName.$valid'));
+ var lastNameError = element(by.binding('myForm.lastName.$error'));
+ var formValid = element(by.binding('myForm.$valid'));
+ var userNameInput = element(by.model('user.name'));
+ var userLastInput = element(by.model('user.last'));
+
+ it('should initialize to model', function() {
+ expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
+ expect(userNameValid.getText()).toContain('true');
+ expect(formValid.getText()).toContain('true');
+ });
+
+ it('should be invalid if empty when required', function() {
+ userNameInput.clear();
+ userNameInput.sendKeys('');
+
+ expect(user.getText()).toContain('{"last":"visitor"}');
+ expect(userNameValid.getText()).toContain('false');
+ expect(formValid.getText()).toContain('false');
+ });
+
+ it('should be valid if empty when min length is set', function() {
+ userLastInput.clear();
+ userLastInput.sendKeys('');
+
+ expect(user.getText()).toContain('{"name":"guest","last":""}');
+ expect(lastNameValid.getText()).toContain('true');
+ expect(formValid.getText()).toContain('true');
+ });
+
+ it('should be invalid if less than required min length', function() {
+ userLastInput.clear();
+ userLastInput.sendKeys('xx');
+
+ expect(user.getText()).toContain('{"name":"guest"}');
+ expect(lastNameValid.getText()).toContain('false');
+ expect(lastNameError.getText()).toContain('minlength');
+ expect(formValid.getText()).toContain('false');
+ });
+
+ it('should be invalid if longer than max length', function() {
+ userLastInput.clear();
+ userLastInput.sendKeys('some ridiculously long name');
+
+ expect(user.getText()).toContain('{"name":"guest"}');
+ expect(lastNameValid.getText()).toContain('false');
+ expect(lastNameError.getText()).toContain('maxlength');
+ expect(formValid.getText()).toContain('false');
+ });
+ </file>
+ </example>
+ */
+var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
+ function($browser, $sniffer, $filter, $parse) {
+ return {
+ restrict: 'E',
+ require: ['?ngModel'],
+ link: {
+ pre: function(scope, element, attr, ctrls) {
+ if (ctrls[0]) {
+ (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
+ $browser, $filter, $parse);
+ }
+ }
+ }
+ };
+}];
+
+var VALID_CLASS = 'ng-valid',
+ INVALID_CLASS = 'ng-invalid',
+ PRISTINE_CLASS = 'ng-pristine',
+ DIRTY_CLASS = 'ng-dirty',
+ UNTOUCHED_CLASS = 'ng-untouched',
+ TOUCHED_CLASS = 'ng-touched',
+ PENDING_CLASS = 'ng-pending';
+
+/**
+ * @ngdoc type
+ * @name ngModel.NgModelController
+ *
+ * @property {string} $viewValue Actual string value in the view.
+ * @property {*} $modelValue The value in the model that the control is bound to.
+ * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
+ the control reads value from the DOM. The functions are called in array order, each passing
+ its return value through to the next. The last return value is forwarded to the
+ {@link ngModel.NgModelController#$validators `$validators`} collection.
+
+Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
+`$viewValue`}.
+
+Returning `undefined` from a parser means a parse error occurred. In that case,
+no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
+will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
+is set to `true`. The parse error is stored in `ngModel.$error.parse`.
+
+ *
+ * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
+ the model value changes. The functions are called in reverse array order, each passing the value through to the
+ next. The last return value is used as the actual DOM value.
+ Used to format / convert values for display in the control.
+ * ```js
+ * function formatter(value) {
+ * if (value) {
+ * return value.toUpperCase();
+ * }
+ * }
+ * ngModel.$formatters.push(formatter);
+ * ```
+ *
+ * @property {Object.<string, function>} $validators A collection of validators that are applied
+ * whenever the model value changes. The key value within the object refers to the name of the
+ * validator while the function refers to the validation operation. The validation operation is
+ * provided with the model value as an argument and must return a true or false value depending
+ * on the response of that validation.
+ *
+ * ```js
+ * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
+ * var value = modelValue || viewValue;
+ * return /[0-9]+/.test(value) &&
+ * /[a-z]+/.test(value) &&
+ * /[A-Z]+/.test(value) &&
+ * /\W+/.test(value);
+ * };
+ * ```
+ *
+ * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
+ * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
+ * is expected to return a promise when it is run during the model validation process. Once the promise
+ * is delivered then the validation status will be set to true when fulfilled and false when rejected.
+ * When the asynchronous validators are triggered, each of the validators will run in parallel and the model
+ * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
+ * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
+ * will only run once all synchronous validators have passed.
+ *
+ * Please note that if $http is used then it is important that the server returns a success HTTP response code
+ * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
+ *
+ * ```js
+ * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
+ * var value = modelValue || viewValue;
+ *
+ * // Lookup user by username
+ * return $http.get('/api/users/' + value).
+ * then(function resolved() {
+ * //username exists, this means validation fails
+ * return $q.reject('exists');
+ * }, function rejected() {
+ * //username does not exist, therefore this validation passes
+ * return true;
+ * });
+ * };
+ * ```
+ *
+ * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
+ * view value has changed. It is called with no arguments, and its return value is ignored.
+ * This can be used in place of additional $watches against the model value.
+ *
+ * @property {Object} $error An object hash with all failing validator ids as keys.
+ * @property {Object} $pending An object hash with all pending validator ids as keys.
+ *
+ * @property {boolean} $untouched True if control has not lost focus yet.
+ * @property {boolean} $touched True if control has lost focus.
+ * @property {boolean} $pristine True if user has not interacted with the control yet.
+ * @property {boolean} $dirty True if user has already interacted with the control.
+ * @property {boolean} $valid True if there is no error.
+ * @property {boolean} $invalid True if at least one error on the control.
+ * @property {string} $name The name attribute of the control.
+ *
+ * @description
+ *
+ * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
+ * The controller contains services for data-binding, validation, CSS updates, and value formatting
+ * and parsing. It purposefully does not contain any logic which deals with DOM rendering or
+ * listening to DOM events.
+ * Such DOM related logic should be provided by other directives which make use of
+ * `NgModelController` for data-binding to control elements.
+ * Angular provides this DOM logic for most {@link input `input`} elements.
+ * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
+ * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
+ *
+ * @example
+ * ### Custom Control Example
+ * This example shows how to use `NgModelController` with a custom control to achieve
+ * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
+ * collaborate together to achieve the desired result.
+ *
+ * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element
+ * contents be edited in place by the user. This will not work on older browsers.
+ *
+ * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
+ * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
+ * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
+ * that content using the `$sce` service.
+ *
+ * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
+ <file name="style.css">
+ [contenteditable] {
+ border: 1px solid black;
+ background-color: white;
+ min-height: 20px;
+ }
+
+ .ng-invalid {
+ border: 1px solid red;
+ }
+
+ </file>
+ <file name="script.js">
+ angular.module('customControl', ['ngSanitize']).
+ directive('contenteditable', ['$sce', function($sce) {
+ return {
+ restrict: 'A', // only activate on element attribute
+ require: '?ngModel', // get a hold of NgModelController
+ link: function(scope, element, attrs, ngModel) {
+ if (!ngModel) return; // do nothing if no ng-model
+
+ // Specify how UI should be updated
+ ngModel.$render = function() {
+ element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
+ };
+
+ // Listen for change events to enable binding
+ element.on('blur keyup change', function() {
+ scope.$evalAsync(read);
+ });
+ read(); // initialize
+
+ // Write data to the model
+ function read() {
+ var html = element.html();
+ // When we clear the content editable the browser leaves a <br> behind
+ // If strip-br attribute is provided then we strip this out
+ if ( attrs.stripBr && html == '<br>' ) {
+ html = '';
+ }
+ ngModel.$setViewValue(html);
+ }
+ }
+ };
+ }]);
+ </file>
+ <file name="index.html">
+ <form name="myForm">
+ <div contenteditable
+ name="myWidget" ng-model="userContent"
+ strip-br="true"
+ required>Change me!</div>
+ <span ng-show="myForm.myWidget.$error.required">Required!</span>
+ <hr>
+ <textarea ng-model="userContent"></textarea>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should data-bind and become invalid', function() {
+ if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
+ // SafariDriver can't handle contenteditable
+ // and Firefox driver can't clear contenteditables very well
+ return;
+ }
+ var contentEditable = element(by.css('[contenteditable]'));
+ var content = 'Change me!';
+
+ expect(contentEditable.getText()).toEqual(content);
+
+ contentEditable.clear();
+ contentEditable.sendKeys(protractor.Key.BACK_SPACE);
+ expect(contentEditable.getText()).toEqual('');
+ expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
+ });
+ </file>
+ * </example>
+ *
+ *
+ */
+var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
+ function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
+ this.$viewValue = Number.NaN;
+ this.$modelValue = Number.NaN;
+ this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
+ this.$validators = {};
+ this.$asyncValidators = {};
+ this.$parsers = [];
+ this.$formatters = [];
+ this.$viewChangeListeners = [];
+ this.$untouched = true;
+ this.$touched = false;
+ this.$pristine = true;
+ this.$dirty = false;
+ this.$valid = true;
+ this.$invalid = false;
+ this.$error = {}; // keep invalid keys here
+ this.$$success = {}; // keep valid keys here
+ this.$pending = undefined; // keep pending keys here
+ this.$name = $interpolate($attr.name || '', false)($scope);
+
+
+ var parsedNgModel = $parse($attr.ngModel),
+ parsedNgModelAssign = parsedNgModel.assign,
+ ngModelGet = parsedNgModel,
+ ngModelSet = parsedNgModelAssign,
+ pendingDebounce = null,
+ ctrl = this;
+
+ this.$$setOptions = function(options) {
+ ctrl.$options = options;
+ if (options && options.getterSetter) {
+ var invokeModelGetter = $parse($attr.ngModel + '()'),
+ invokeModelSetter = $parse($attr.ngModel + '($$$p)');
+
+ ngModelGet = function($scope) {
+ var modelValue = parsedNgModel($scope);
+ if (isFunction(modelValue)) {
+ modelValue = invokeModelGetter($scope);
+ }
+ return modelValue;
+ };
+ ngModelSet = function($scope, newValue) {
+ if (isFunction(parsedNgModel($scope))) {
+ invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
+ } else {
+ parsedNgModelAssign($scope, ctrl.$modelValue);
+ }
+ };
+ } else if (!parsedNgModel.assign) {
+ throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
+ $attr.ngModel, startingTag($element));
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$render
+ *
+ * @description
+ * Called when the view needs to be updated. It is expected that the user of the ng-model
+ * directive will implement this method.
+ *
+ * The `$render()` method is invoked in the following situations:
+ *
+ * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last
+ * committed value then `$render()` is called to update the input control.
+ * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
+ * the `$viewValue` are different to last time.
+ *
+ * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
+ * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue`
+ * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
+ * invoked if you only change a property on the objects.
+ */
+ this.$render = noop;
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$isEmpty
+ *
+ * @description
+ * This is called when we need to determine if the value of an input is empty.
+ *
+ * For instance, the required directive does this to work out if the input has data or not.
+ *
+ * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
+ *
+ * You can override this for input directives whose concept of being empty is different to the
+ * default. The `checkboxInputType` directive does this because in its case a value of `false`
+ * implies empty.
+ *
+ * @param {*} value The value of the input to check for emptiness.
+ * @returns {boolean} True if `value` is "empty".
+ */
+ this.$isEmpty = function(value) {
+ return isUndefined(value) || value === '' || value === null || value !== value;
+ };
+
+ var parentForm = $element.inheritedData('$formController') || nullFormCtrl,
+ currentValidationRunId = 0;
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setValidity
+ *
+ * @description
+ * Change the validity state, and notify the form.
+ *
+ * This method can be called within $parsers/$formatters or a custom validation implementation.
+ * However, in most cases it should be sufficient to use the `ngModel.$validators` and
+ * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
+ *
+ * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
+ * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
+ * (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
+ * The `validationErrorKey` should be in camelCase and will get converted into dash-case
+ * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
+ * class and can be bound to as `{{someForm.someControl.$error.myError}}` .
+ * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
+ * or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
+ * Skipped is used by Angular when validators do not run because of parse errors and
+ * when `$asyncValidators` do not run because any of the `$validators` failed.
+ */
+ addSetValidityMethod({
+ ctrl: this,
+ $element: $element,
+ set: function(object, property) {
+ object[property] = true;
+ },
+ unset: function(object, property) {
+ delete object[property];
+ },
+ parentForm: parentForm,
+ $animate: $animate
+ });
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setPristine
+ *
+ * @description
+ * Sets the control to its pristine state.
+ *
+ * This method can be called to remove the `ng-dirty` class and set the control to its pristine
+ * state (`ng-pristine` class). A model is considered to be pristine when the control
+ * has not been changed from when first compiled.
+ */
+ this.$setPristine = function() {
+ ctrl.$dirty = false;
+ ctrl.$pristine = true;
+ $animate.removeClass($element, DIRTY_CLASS);
+ $animate.addClass($element, PRISTINE_CLASS);
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setDirty
+ *
+ * @description
+ * Sets the control to its dirty state.
+ *
+ * This method can be called to remove the `ng-pristine` class and set the control to its dirty
+ * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
+ * from when first compiled.
+ */
+ this.$setDirty = function() {
+ ctrl.$dirty = true;
+ ctrl.$pristine = false;
+ $animate.removeClass($element, PRISTINE_CLASS);
+ $animate.addClass($element, DIRTY_CLASS);
+ parentForm.$setDirty();
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setUntouched
+ *
+ * @description
+ * Sets the control to its untouched state.
+ *
+ * This method can be called to remove the `ng-touched` class and set the control to its
+ * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
+ * by default, however this function can be used to restore that state if the model has
+ * already been touched by the user.
+ */
+ this.$setUntouched = function() {
+ ctrl.$touched = false;
+ ctrl.$untouched = true;
+ $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setTouched
+ *
+ * @description
+ * Sets the control to its touched state.
+ *
+ * This method can be called to remove the `ng-untouched` class and set the control to its
+ * touched state (`ng-touched` class). A model is considered to be touched when the user has
+ * first focused the control element and then shifted focus away from the control (blur event).
+ */
+ this.$setTouched = function() {
+ ctrl.$touched = true;
+ ctrl.$untouched = false;
+ $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$rollbackViewValue
+ *
+ * @description
+ * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
+ * which may be caused by a pending debounced event or because the input is waiting for a some
+ * future event.
+ *
+ * If you have an input that uses `ng-model-options` to set up debounced events or events such
+ * as blur you can have a situation where there is a period when the `$viewValue`
+ * is out of synch with the ngModel's `$modelValue`.
+ *
+ * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
+ * programmatically before these debounced/future events have resolved/occurred, because Angular's
+ * dirty checking mechanism is not able to tell whether the model has actually changed or not.
+ *
+ * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
+ * input which may have such events pending. This is important in order to make sure that the
+ * input field will be updated with the new model value and any pending operations are cancelled.
+ *
+ * <example name="ng-model-cancel-update" module="cancel-update-example">
+ * <file name="app.js">
+ * angular.module('cancel-update-example', [])
+ *
+ * .controller('CancelUpdateController', ['$scope', function($scope) {
+ * $scope.resetWithCancel = function(e) {
+ * if (e.keyCode == 27) {
+ * $scope.myForm.myInput1.$rollbackViewValue();
+ * $scope.myValue = '';
+ * }
+ * };
+ * $scope.resetWithoutCancel = function(e) {
+ * if (e.keyCode == 27) {
+ * $scope.myValue = '';
+ * }
+ * };
+ * }]);
+ * </file>
+ * <file name="index.html">
+ * <div ng-controller="CancelUpdateController">
+ * <p>Try typing something in each input. See that the model only updates when you
+ * blur off the input.
+ * </p>
+ * <p>Now see what happens if you start typing then press the Escape key</p>
+ *
+ * <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
+ * <p>With $rollbackViewValue()</p>
+ * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/>
+ * myValue: "{{ myValue }}"
+ *
+ * <p>Without $rollbackViewValue()</p>
+ * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/>
+ * myValue: "{{ myValue }}"
+ * </form>
+ * </div>
+ * </file>
+ * </example>
+ */
+ this.$rollbackViewValue = function() {
+ $timeout.cancel(pendingDebounce);
+ ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
+ ctrl.$render();
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$validate
+ *
+ * @description
+ * Runs each of the registered validators (first synchronous validators and then
+ * asynchronous validators).
+ * If the validity changes to invalid, the model will be set to `undefined`,
+ * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
+ * If the validity changes to valid, it will set the model to the last available valid
+ * modelValue, i.e. either the last parsed value or the last value set from the scope.
+ */
+ this.$validate = function() {
+ // ignore $validate before model is initialized
+ if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+ return;
+ }
+
+ var viewValue = ctrl.$$lastCommittedViewValue;
+ // Note: we use the $$rawModelValue as $modelValue might have been
+ // set to undefined during a view -> model update that found validation
+ // errors. We can't parse the view here, since that could change
+ // the model although neither viewValue nor the model on the scope changed
+ var modelValue = ctrl.$$rawModelValue;
+
+ // Check if the there's a parse error, so we don't unset it accidentially
+ var parserName = ctrl.$$parserName || 'parse';
+ var parserValid = ctrl.$error[parserName] ? false : undefined;
+
+ var prevValid = ctrl.$valid;
+ var prevModelValue = ctrl.$modelValue;
+
+ var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+
+ ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
+ // If there was no change in validity, don't update the model
+ // This prevents changing an invalid modelValue to undefined
+ if (!allowInvalid && prevValid !== allValid) {
+ // Note: Don't check ctrl.$valid here, as we could have
+ // external validators (e.g. calculated on the server),
+ // that just call $setValidity and need the model value
+ // to calculate their validity.
+ ctrl.$modelValue = allValid ? modelValue : undefined;
+
+ if (ctrl.$modelValue !== prevModelValue) {
+ ctrl.$$writeModelToScope();
+ }
+ }
+ });
+
+ };
+
+ this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
+ currentValidationRunId++;
+ var localValidationRunId = currentValidationRunId;
+
+ // check parser error
+ if (!processParseErrors(parseValid)) {
+ validationDone(false);
+ return;
+ }
+ if (!processSyncValidators()) {
+ validationDone(false);
+ return;
+ }
+ processAsyncValidators();
+
+ function processParseErrors(parseValid) {
+ var errorKey = ctrl.$$parserName || 'parse';
+ if (parseValid === undefined) {
+ setValidity(errorKey, null);
+ } else {
+ setValidity(errorKey, parseValid);
+ if (!parseValid) {
+ forEach(ctrl.$validators, function(v, name) {
+ setValidity(name, null);
+ });
+ forEach(ctrl.$asyncValidators, function(v, name) {
+ setValidity(name, null);
+ });
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function processSyncValidators() {
+ var syncValidatorsValid = true;
+ forEach(ctrl.$validators, function(validator, name) {
+ var result = validator(modelValue, viewValue);
+ syncValidatorsValid = syncValidatorsValid && result;
+ setValidity(name, result);
+ });
+ if (!syncValidatorsValid) {
+ forEach(ctrl.$asyncValidators, function(v, name) {
+ setValidity(name, null);
+ });
+ return false;
+ }
+ return true;
+ }
+
+ function processAsyncValidators() {
+ var validatorPromises = [];
+ var allValid = true;
+ forEach(ctrl.$asyncValidators, function(validator, name) {
+ var promise = validator(modelValue, viewValue);
+ if (!isPromiseLike(promise)) {
+ throw $ngModelMinErr("$asyncValidators",
+ "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
+ }
+ setValidity(name, undefined);
+ validatorPromises.push(promise.then(function() {
+ setValidity(name, true);
+ }, function(error) {
+ allValid = false;
+ setValidity(name, false);
+ }));
+ });
+ if (!validatorPromises.length) {
+ validationDone(true);
+ } else {
+ $q.all(validatorPromises).then(function() {
+ validationDone(allValid);
+ }, noop);
+ }
+ }
+
+ function setValidity(name, isValid) {
+ if (localValidationRunId === currentValidationRunId) {
+ ctrl.$setValidity(name, isValid);
+ }
+ }
+
+ function validationDone(allValid) {
+ if (localValidationRunId === currentValidationRunId) {
+
+ doneCallback(allValid);
+ }
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$commitViewValue
+ *
+ * @description
+ * Commit a pending update to the `$modelValue`.
+ *
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
+ * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
+ * usually handles calling this in response to input events.
+ */
+ this.$commitViewValue = function() {
+ var viewValue = ctrl.$viewValue;
+
+ $timeout.cancel(pendingDebounce);
+
+ // If the view value has not changed then we should just exit, except in the case where there is
+ // a native validator on the element. In this case the validation state may have changed even though
+ // the viewValue has stayed empty.
+ if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
+ return;
+ }
+ ctrl.$$lastCommittedViewValue = viewValue;
+
+ // change to dirty
+ if (ctrl.$pristine) {
+ this.$setDirty();
+ }
+ this.$$parseAndValidate();
+ };
+
+ this.$$parseAndValidate = function() {
+ var viewValue = ctrl.$$lastCommittedViewValue;
+ var modelValue = viewValue;
+ var parserValid = isUndefined(modelValue) ? undefined : true;
+
+ if (parserValid) {
+ for (var i = 0; i < ctrl.$parsers.length; i++) {
+ modelValue = ctrl.$parsers[i](modelValue);
+ if (isUndefined(modelValue)) {
+ parserValid = false;
+ break;
+ }
+ }
+ }
+ if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+ // ctrl.$modelValue has not been touched yet...
+ ctrl.$modelValue = ngModelGet($scope);
+ }
+ var prevModelValue = ctrl.$modelValue;
+ var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+ ctrl.$$rawModelValue = modelValue;
+
+ if (allowInvalid) {
+ ctrl.$modelValue = modelValue;
+ writeToModelIfNeeded();
+ }
+
+ // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
+ // This can happen if e.g. $setViewValue is called from inside a parser
+ ctrl.$$runValidators(parserValid, modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
+ if (!allowInvalid) {
+ // Note: Don't check ctrl.$valid here, as we could have
+ // external validators (e.g. calculated on the server),
+ // that just call $setValidity and need the model value
+ // to calculate their validity.
+ ctrl.$modelValue = allValid ? modelValue : undefined;
+ writeToModelIfNeeded();
+ }
+ });
+
+ function writeToModelIfNeeded() {
+ if (ctrl.$modelValue !== prevModelValue) {
+ ctrl.$$writeModelToScope();
+ }
+ }
+ };
+
+ this.$$writeModelToScope = function() {
+ ngModelSet($scope, ctrl.$modelValue);
+ forEach(ctrl.$viewChangeListeners, function(listener) {
+ try {
+ listener();
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ });
+ };
+
+ /**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setViewValue
+ *
+ * @description
+ * Update the view value.
+ *
+ * This method should be called when an input directive want to change the view value; typically,
+ * this is done from within a DOM event handler.
+ *
+ * For example {@link ng.directive:input input} calls it when the value of the input changes and
+ * {@link ng.directive:select select} calls it when an option is selected.
+ *
+ * If the new `value` is an object (rather than a string or a number), we should make a copy of the
+ * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep
+ * watch of objects, it only looks for a change of identity. If you only change the property of
+ * the object then ngModel will not realise that the object has changed and will not invoke the
+ * `$parsers` and `$validators` pipelines.
+ *
+ * For this reason, you should not change properties of the copy once it has been passed to
+ * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly.
+ *
+ * When this method is called, the new `value` will be staged for committing through the `$parsers`
+ * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
+ * value sent directly for processing, finally to be applied to `$modelValue` and then the
+ * **expression** specified in the `ng-model` attribute.
+ *
+ * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.
+ *
+ * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
+ * and the `default` trigger is not listed, all those actions will remain pending until one of the
+ * `updateOn` events is triggered on the DOM element.
+ * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
+ * directive is used with a custom debounce for this particular event.
+ *
+ * Note that calling this function does not trigger a `$digest`.
+ *
+ * @param {string} value Value from the view.
+ * @param {string} trigger Event that triggered the update.
+ */
+ this.$setViewValue = function(value, trigger) {
+ ctrl.$viewValue = value;
+ if (!ctrl.$options || ctrl.$options.updateOnDefault) {
+ ctrl.$$debounceViewValueCommit(trigger);
+ }
+ };
+
+ this.$$debounceViewValueCommit = function(trigger) {
+ var debounceDelay = 0,
+ options = ctrl.$options,
+ debounce;
+
+ if (options && isDefined(options.debounce)) {
+ debounce = options.debounce;
+ if (isNumber(debounce)) {
+ debounceDelay = debounce;
+ } else if (isNumber(debounce[trigger])) {
+ debounceDelay = debounce[trigger];
+ } else if (isNumber(debounce['default'])) {
+ debounceDelay = debounce['default'];
+ }
+ }
+
+ $timeout.cancel(pendingDebounce);
+ if (debounceDelay) {
+ pendingDebounce = $timeout(function() {
+ ctrl.$commitViewValue();
+ }, debounceDelay);
+ } else if ($rootScope.$$phase) {
+ ctrl.$commitViewValue();
+ } else {
+ $scope.$apply(function() {
+ ctrl.$commitViewValue();
+ });
+ }
+ };
+
+ // model -> value
+ // Note: we cannot use a normal scope.$watch as we want to detect the following:
+ // 1. scope value is 'a'
+ // 2. user enters 'b'
+ // 3. ng-change kicks in and reverts scope value to 'a'
+ // -> scope value did not change since the last digest as
+ // ng-change executes in apply phase
+ // 4. view should be changed back to 'a'
+ $scope.$watch(function ngModelWatch() {
+ var modelValue = ngModelGet($scope);
+
+ // if scope model value and ngModel value are out of sync
+ // TODO(perf): why not move this to the action fn?
+ if (modelValue !== ctrl.$modelValue) {
+ ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
+
+ var formatters = ctrl.$formatters,
+ idx = formatters.length;
+
+ var viewValue = modelValue;
+ while (idx--) {
+ viewValue = formatters[idx](viewValue);
+ }
+ if (ctrl.$viewValue !== viewValue) {
+ ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
+ ctrl.$render();
+
+ ctrl.$$runValidators(undefined, modelValue, viewValue, noop);
+ }
+ }
+
+ return modelValue;
+ });
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngModel
+ *
+ * @element input
+ * @priority 1
+ *
+ * @description
+ * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
+ * property on the scope using {@link ngModel.NgModelController NgModelController},
+ * which is created and exposed by this directive.
+ *
+ * `ngModel` is responsible for:
+ *
+ * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
+ * require.
+ * - Providing validation behavior (i.e. required, number, email, url).
+ * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
+ * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
+ * - Registering the control with its parent {@link ng.directive:form form}.
+ *
+ * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
+ * current scope. If the property doesn't already exist on this scope, it will be created
+ * implicitly and added to the scope.
+ *
+ * For best practices on using `ngModel`, see:
+ *
+ * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
+ *
+ * For basic examples, how to use `ngModel`, see:
+ *
+ * - {@link ng.directive:input input}
+ * - {@link input[text] text}
+ * - {@link input[checkbox] checkbox}
+ * - {@link input[radio] radio}
+ * - {@link input[number] number}
+ * - {@link input[email] email}
+ * - {@link input[url] url}
+ * - {@link input[date] date}
+ * - {@link input[datetime-local] datetime-local}
+ * - {@link input[time] time}
+ * - {@link input[month] month}
+ * - {@link input[week] week}
+ * - {@link ng.directive:select select}
+ * - {@link ng.directive:textarea textarea}
+ *
+ * # CSS classes
+ * The following CSS classes are added and removed on the associated input/select/textarea element
+ * depending on the validity of the model.
+ *
+ * - `ng-valid`: the model is valid
+ * - `ng-invalid`: the model is invalid
+ * - `ng-valid-[key]`: for each valid key added by `$setValidity`
+ * - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
+ * - `ng-pristine`: the control hasn't been interacted with yet
+ * - `ng-dirty`: the control has been interacted with
+ * - `ng-touched`: the control has been blurred
+ * - `ng-untouched`: the control hasn't been blurred
+ * - `ng-pending`: any `$asyncValidators` are unfulfilled
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ * ## Animation Hooks
+ *
+ * Animations within models are triggered when any of the associated CSS classes are added and removed
+ * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
+ * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
+ * The animations that are triggered within ngModel are similar to how they work in ngClass and
+ * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style an input element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-input {
+ * transition:0.5s linear all;
+ * background: white;
+ * }
+ * .my-input.ng-invalid {
+ * background: red;
+ * color:white;
+ * }
+ * </pre>
+ *
+ * @example
+ * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
+ <file name="index.html">
+ <script>
+ angular.module('inputExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.val = '1';
+ }]);
+ </script>
+ <style>
+ .my-input {
+ -webkit-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+ background: transparent;
+ }
+ .my-input.ng-invalid {
+ color:white;
+ background: red;
+ }
+ </style>
+ Update input to see transitions when valid/invalid.
+ Integer is a valid value.
+ <form name="testForm" ng-controller="ExampleController">
+ <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" />
+ </form>
+ </file>
+ * </example>
+ *
+ * ## Binding to a getter/setter
+ *
+ * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a
+ * function that returns a representation of the model when called with zero arguments, and sets
+ * the internal state of a model when called with an argument. It's sometimes useful to use this
+ * for models that have an internal representation that's different than what the model exposes
+ * to the view.
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
+ * frequently than other parts of your code.
+ * </div>
+ *
+ * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
+ * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
+ * a `<form>`, which will enable this behavior for all `<input>`s within it. See
+ * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
+ *
+ * The following example shows how to use `ngModel` with a getter/setter:
+ *
+ * @example
+ * <example name="ngModel-getter-setter" module="getterSetterExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form name="userForm">
+ Name:
+ <input type="text" name="userName"
+ ng-model="user.name"
+ ng-model-options="{ getterSetter: true }" />
+ </form>
+ <pre>user.name = <span ng-bind="user.name()"></span></pre>
+ </div>
+ </file>
+ <file name="app.js">
+ angular.module('getterSetterExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ var _name = 'Brian';
+ $scope.user = {
+ name: function(newName) {
+ if (angular.isDefined(newName)) {
+ _name = newName;
+ }
+ return _name;
+ }
+ };
+ }]);
+ </file>
+ * </example>
+ */
+var ngModelDirective = ['$rootScope', function($rootScope) {
+ return {
+ restrict: 'A',
+ require: ['ngModel', '^?form', '^?ngModelOptions'],
+ controller: NgModelController,
+ // Prelink needs to run before any input directive
+ // so that we can set the NgModelOptions in NgModelController
+ // before anyone else uses it.
+ priority: 1,
+ compile: function ngModelCompile(element) {
+ // Setup initial state of the control
+ element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
+
+ return {
+ pre: function ngModelPreLink(scope, element, attr, ctrls) {
+ var modelCtrl = ctrls[0],
+ formCtrl = ctrls[1] || nullFormCtrl;
+
+ modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
+
+ // notify others, especially parent forms
+ formCtrl.$addControl(modelCtrl);
+
+ attr.$observe('name', function(newValue) {
+ if (modelCtrl.$name !== newValue) {
+ formCtrl.$$renameControl(modelCtrl, newValue);
+ }
+ });
+
+ scope.$on('$destroy', function() {
+ formCtrl.$removeControl(modelCtrl);
+ });
+ },
+ post: function ngModelPostLink(scope, element, attr, ctrls) {
+ var modelCtrl = ctrls[0];
+ if (modelCtrl.$options && modelCtrl.$options.updateOn) {
+ element.on(modelCtrl.$options.updateOn, function(ev) {
+ modelCtrl.$$debounceViewValueCommit(ev && ev.type);
+ });
+ }
+
+ element.on('blur', function(ev) {
+ if (modelCtrl.$touched) return;
+
+ if ($rootScope.$$phase) {
+ scope.$evalAsync(modelCtrl.$setTouched);
+ } else {
+ scope.$apply(modelCtrl.$setTouched);
+ }
+ });
+ }
+ };
+ }
+ };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngChange
+ *
+ * @description
+ * Evaluate the given expression when the user changes the input.
+ * The expression is evaluated immediately, unlike the JavaScript onchange event
+ * which only triggers at the end of a change (usually, when the user leaves the
+ * form element or presses the return key).
+ *
+ * The `ngChange` expression is only evaluated when a change in the input value causes
+ * a new value to be committed to the model.
+ *
+ * It will not be evaluated:
+ * * if the value returned from the `$parsers` transformation pipeline has not changed
+ * * if the input has continued to be invalid since the model will stay `null`
+ * * if the model is changed programmatically and not by a change to the input value
+ *
+ *
+ * Note, this directive requires `ngModel` to be present.
+ *
+ * @element input
+ * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
+ * in input value.
+ *
+ * @example
+ * <example name="ngChange-directive" module="changeExample">
+ * <file name="index.html">
+ * <script>
+ * angular.module('changeExample', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.counter = 0;
+ * $scope.change = function() {
+ * $scope.counter++;
+ * };
+ * }]);
+ * </script>
+ * <div ng-controller="ExampleController">
+ * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
+ * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
+ * <label for="ng-change-example2">Confirmed</label><br />
+ * <tt>debug = {{confirmed}}</tt><br/>
+ * <tt>counter = {{counter}}</tt><br/>
+ * </div>
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * var counter = element(by.binding('counter'));
+ * var debug = element(by.binding('confirmed'));
+ *
+ * it('should evaluate the expression if changing from view', function() {
+ * expect(counter.getText()).toContain('0');
+ *
+ * element(by.id('ng-change-example1')).click();
+ *
+ * expect(counter.getText()).toContain('1');
+ * expect(debug.getText()).toContain('true');
+ * });
+ *
+ * it('should not evaluate the expression if changing from model', function() {
+ * element(by.id('ng-change-example2')).click();
+
+ * expect(counter.getText()).toContain('0');
+ * expect(debug.getText()).toContain('true');
+ * });
+ * </file>
+ * </example>
+ */
+var ngChangeDirective = valueFn({
+ restrict: 'A',
+ require: 'ngModel',
+ link: function(scope, element, attr, ctrl) {
+ ctrl.$viewChangeListeners.push(function() {
+ scope.$eval(attr.ngChange);
+ });
+ }
+});
+
+
+var requiredDirective = function() {
+ return {
+ restrict: 'A',
+ require: '?ngModel',
+ link: function(scope, elm, attr, ctrl) {
+ if (!ctrl) return;
+ attr.required = true; // force truthy in case we are on non input element
+
+ ctrl.$validators.required = function(modelValue, viewValue) {
+ return !attr.required || !ctrl.$isEmpty(viewValue);
+ };
+
+ attr.$observe('required', function() {
+ ctrl.$validate();
+ });
+ }
+ };
+};
+
+
+var patternDirective = function() {
+ return {
+ restrict: 'A',
+ require: '?ngModel',
+ link: function(scope, elm, attr, ctrl) {
+ if (!ctrl) return;
+
+ var regexp, patternExp = attr.ngPattern || attr.pattern;
+ attr.$observe('pattern', function(regex) {
+ if (isString(regex) && regex.length > 0) {
+ regex = new RegExp('^' + regex + '$');
+ }
+
+ if (regex && !regex.test) {
+ throw minErr('ngPattern')('noregexp',
+ 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
+ regex, startingTag(elm));
+ }
+
+ regexp = regex || undefined;
+ ctrl.$validate();
+ });
+
+ ctrl.$validators.pattern = function(value) {
+ return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value);
+ };
+ }
+ };
+};
+
+
+var maxlengthDirective = function() {
+ return {
+ restrict: 'A',
+ require: '?ngModel',
+ link: function(scope, elm, attr, ctrl) {
+ if (!ctrl) return;
+
+ var maxlength = -1;
+ attr.$observe('maxlength', function(value) {
+ var intVal = int(value);
+ maxlength = isNaN(intVal) ? -1 : intVal;
+ ctrl.$validate();
+ });
+ ctrl.$validators.maxlength = function(modelValue, viewValue) {
+ return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength);
+ };
+ }
+ };
+};
+
+var minlengthDirective = function() {
+ return {
+ restrict: 'A',
+ require: '?ngModel',
+ link: function(scope, elm, attr, ctrl) {
+ if (!ctrl) return;
+
+ var minlength = 0;
+ attr.$observe('minlength', function(value) {
+ minlength = int(value) || 0;
+ ctrl.$validate();
+ });
+ ctrl.$validators.minlength = function(modelValue, viewValue) {
+ return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
+ };
+ }
+ };
+};
+
+
+/**
+ * @ngdoc directive
+ * @name ngList
+ *
+ * @description
+ * Text input that converts between a delimited string and an array of strings. The default
+ * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
+ * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
+ *
+ * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
+ * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
+ * list item is respected. This implies that the user of the directive is responsible for
+ * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
+ * tab or newline character.
+ * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
+ * when joining the list items back together) and whitespace around each list item is stripped
+ * before it is added to the model.
+ *
+ * ### Example with Validation
+ *
+ * <example name="ngList-directive" module="listExample">
+ * <file name="app.js">
+ * angular.module('listExample', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.names = ['morpheus', 'neo', 'trinity'];
+ * }]);
+ * </file>
+ * <file name="index.html">
+ * <form name="myForm" ng-controller="ExampleController">
+ * List: <input name="namesInput" ng-model="names" ng-list required>
+ * <span class="error" ng-show="myForm.namesInput.$error.required">
+ * Required!</span>
+ * <br>
+ * <tt>names = {{names}}</tt><br/>
+ * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
+ * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
+ * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ * </form>
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * var listInput = element(by.model('names'));
+ * var names = element(by.exactBinding('names'));
+ * var valid = element(by.binding('myForm.namesInput.$valid'));
+ * var error = element(by.css('span.error'));
+ *
+ * it('should initialize to model', function() {
+ * expect(names.getText()).toContain('["morpheus","neo","trinity"]');
+ * expect(valid.getText()).toContain('true');
+ * expect(error.getCssValue('display')).toBe('none');
+ * });
+ *
+ * it('should be invalid if empty', function() {
+ * listInput.clear();
+ * listInput.sendKeys('');
+ *
+ * expect(names.getText()).toContain('');
+ * expect(valid.getText()).toContain('false');
+ * expect(error.getCssValue('display')).not.toBe('none');
+ * });
+ * </file>
+ * </example>
+ *
+ * ### Example - splitting on whitespace
+ * <example name="ngList-directive-newlines">
+ * <file name="index.html">
+ * <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
+ * <pre>{{ list | json }}</pre>
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it("should split the text by newlines", function() {
+ * var listInput = element(by.model('list'));
+ * var output = element(by.binding('list | json'));
+ * listInput.sendKeys('abc\ndef\nghi');
+ * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]');
+ * });
+ * </file>
+ * </example>
+ *
+ * @element input
+ * @param {string=} ngList optional delimiter that should be used to split the value.
+ */
+var ngListDirective = function() {
+ return {
+ restrict: 'A',
+ priority: 100,
+ require: 'ngModel',
+ link: function(scope, element, attr, ctrl) {
+ // We want to control whitespace trimming so we use this convoluted approach
+ // to access the ngList attribute, which doesn't pre-trim the attribute
+ var ngList = element.attr(attr.$attr.ngList) || ', ';
+ var trimValues = attr.ngTrim !== 'false';
+ var separator = trimValues ? trim(ngList) : ngList;
+
+ var parse = function(viewValue) {
+ // If the viewValue is invalid (say required but empty) it will be `undefined`
+ if (isUndefined(viewValue)) return;
+
+ var list = [];
+
+ if (viewValue) {
+ forEach(viewValue.split(separator), function(value) {
+ if (value) list.push(trimValues ? trim(value) : value);
+ });
+ }
+
+ return list;
+ };
+
+ ctrl.$parsers.push(parse);
+ ctrl.$formatters.push(function(value) {
+ if (isArray(value)) {
+ return value.join(ngList);
+ }
+
+ return undefined;
+ });
+
+ // Override the standard $isEmpty because an empty array means the input is empty.
+ ctrl.$isEmpty = function(value) {
+ return !value || !value.length;
+ };
+ }
+ };
+};
+
+
+var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
+/**
+ * @ngdoc directive
+ * @name ngValue
+ *
+ * @description
+ * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
+ * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
+ * the bound value.
+ *
+ * `ngValue` is useful when dynamically generating lists of radio buttons using
+ * {@link ngRepeat `ngRepeat`}, as shown below.
+ *
+ * Likewise, `ngValue` can be used to generate `<option>` elements for
+ * the {@link select `select`} element. In that case however, only strings are supported
+ * for the `value `attribute, so the resulting `ngModel` will always be a string.
+ * Support for `select` models with non-string values is available via `ngOptions`.
+ *
+ * @element input
+ * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
+ * of the `input` element
+ *
+ * @example
+ <example name="ngValue-directive" module="valueExample">
+ <file name="index.html">
+ <script>
+ angular.module('valueExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.names = ['pizza', 'unicorns', 'robots'];
+ $scope.my = { favorite: 'unicorns' };
+ }]);
+ </script>
+ <form ng-controller="ExampleController">
+ <h2>Which is your favorite?</h2>
+ <label ng-repeat="name in names" for="{{name}}">
+ {{name}}
+ <input type="radio"
+ ng-model="my.favorite"
+ ng-value="name"
+ id="{{name}}"
+ name="favorite">
+ </label>
+ <div>You chose {{my.favorite}}</div>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ var favorite = element(by.binding('my.favorite'));
+
+ it('should initialize to model', function() {
+ expect(favorite.getText()).toContain('unicorns');
+ });
+ it('should bind the values to the inputs', function() {
+ element.all(by.model('my.favorite')).get(0).click();
+ expect(favorite.getText()).toContain('pizza');
+ });
+ </file>
+ </example>
+ */
+var ngValueDirective = function() {
+ return {
+ restrict: 'A',
+ priority: 100,
+ compile: function(tpl, tplAttr) {
+ if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
+ return function ngValueConstantLink(scope, elm, attr) {
+ attr.$set('value', scope.$eval(attr.ngValue));
+ };
+ } else {
+ return function ngValueLink(scope, elm, attr) {
+ scope.$watch(attr.ngValue, function valueWatchAction(value) {
+ attr.$set('value', value);
+ });
+ };
+ }
+ }
+ };
+};
+
+/**
+ * @ngdoc directive
+ * @name ngModelOptions
+ *
+ * @description
+ * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
+ * events that will trigger a model update and/or a debouncing delay so that the actual update only
+ * takes place when a timer expires; this timer will be reset after another change takes place.
+ *
+ * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
+ * be different than the value in the actual model. This means that if you update the model you
+ * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
+ * order to make sure it is synchronized with the model and that any debounced action is canceled.
+ *
+ * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
+ * method is by making sure the input is placed inside a form that has a `name` attribute. This is
+ * important because `form` controllers are published to the related scope under the name in their
+ * `name` attribute.
+ *
+ * Any pending changes will take place immediately when an enclosing form is submitted via the
+ * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * `ngModelOptions` has an effect on the element it's declared on and its descendants.
+ *
+ * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
+ * - `updateOn`: string specifying which event should the input be bound to. You can set several
+ * events using an space delimited list. There is a special event called `default` that
+ * matches the default events belonging of the control.
+ * - `debounce`: integer value which contains the debounce model update value in milliseconds. A
+ * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
+ * custom value for each event. For example:
+ * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"`
+ * - `allowInvalid`: boolean value which indicates that the model can be set with values that did
+ * not validate correctly instead of the default behavior of setting the model to undefined.
+ * - `getterSetter`: boolean value which determines whether or not to treat functions bound to
+ `ngModel` as getters/setters.
+ * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
+ * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`,
+ * otherwise the default timezone of the browser will be used.
+ *
+ * @example
+
+ The following example shows how to override immediate updates. Changes on the inputs within the
+ form will update the model only when the control loses focus (blur event). If `escape` key is
+ pressed while the input field is focused, the value is reset to the value in the current model.
+
+ <example name="ngModelOptions-directive-blur" module="optionsExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form name="userForm">
+ Name:
+ <input type="text" name="userName"
+ ng-model="user.name"
+ ng-model-options="{ updateOn: 'blur' }"
+ ng-keyup="cancel($event)" /><br />
+
+ Other data:
+ <input type="text" ng-model="user.data" /><br />
+ </form>
+ <pre>user.name = <span ng-bind="user.name"></span></pre>
+ </div>
+ </file>
+ <file name="app.js">
+ angular.module('optionsExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.user = { name: 'say', data: '' };
+
+ $scope.cancel = function(e) {
+ if (e.keyCode == 27) {
+ $scope.userForm.userName.$rollbackViewValue();
+ }
+ };
+ }]);
+ </file>
+ <file name="protractor.js" type="protractor">
+ var model = element(by.binding('user.name'));
+ var input = element(by.model('user.name'));
+ var other = element(by.model('user.data'));
+
+ it('should allow custom events', function() {
+ input.sendKeys(' hello');
+ input.click();
+ expect(model.getText()).toEqual('say');
+ other.click();
+ expect(model.getText()).toEqual('say hello');
+ });
+
+ it('should $rollbackViewValue when model changes', function() {
+ input.sendKeys(' hello');
+ expect(input.getAttribute('value')).toEqual('say hello');
+ input.sendKeys(protractor.Key.ESCAPE);
+ expect(input.getAttribute('value')).toEqual('say');
+ other.click();
+ expect(model.getText()).toEqual('say');
+ });
+ </file>
+ </example>
+
+ This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
+ If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
+
+ <example name="ngModelOptions-directive-debounce" module="optionsExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form name="userForm">
+ Name:
+ <input type="text" name="userName"
+ ng-model="user.name"
+ ng-model-options="{ debounce: 1000 }" />
+ <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
+ </form>
+ <pre>user.name = <span ng-bind="user.name"></span></pre>
+ </div>
+ </file>
+ <file name="app.js">
+ angular.module('optionsExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.user = { name: 'say' };
+ }]);
+ </file>
+ </example>
+
+ This one shows how to bind to getter/setters:
+
+ <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form name="userForm">
+ Name:
+ <input type="text" name="userName"
+ ng-model="user.name"
+ ng-model-options="{ getterSetter: true }" />
+ </form>
+ <pre>user.name = <span ng-bind="user.name()"></span></pre>
+ </div>
+ </file>
+ <file name="app.js">
+ angular.module('getterSetterExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ var _name = 'Brian';
+ $scope.user = {
+ name: function(newName) {
+ return angular.isDefined(newName) ? (_name = newName) : _name;
+ }
+ };
+ }]);
+ </file>
+ </example>
+ */
+var ngModelOptionsDirective = function() {
+ return {
+ restrict: 'A',
+ controller: ['$scope', '$attrs', function($scope, $attrs) {
+ var that = this;
+ this.$options = $scope.$eval($attrs.ngModelOptions);
+ // Allow adding/overriding bound events
+ if (this.$options.updateOn !== undefined) {
+ this.$options.updateOnDefault = false;
+ // extract "default" pseudo-event from list of events that can trigger a model update
+ this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
+ that.$options.updateOnDefault = true;
+ return ' ';
+ }));
+ } else {
+ this.$options.updateOnDefault = true;
+ }
+ }]
+ };
+};
+
+// helper methods
+function addSetValidityMethod(context) {
+ var ctrl = context.ctrl,
+ $element = context.$element,
+ classCache = {},
+ set = context.set,
+ unset = context.unset,
+ parentForm = context.parentForm,
+ $animate = context.$animate;
+
+ classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
+
+ ctrl.$setValidity = setValidity;
+
+ function setValidity(validationErrorKey, state, options) {
+ if (state === undefined) {
+ createAndSet('$pending', validationErrorKey, options);
+ } else {
+ unsetAndCleanup('$pending', validationErrorKey, options);
+ }
+ if (!isBoolean(state)) {
+ unset(ctrl.$error, validationErrorKey, options);
+ unset(ctrl.$$success, validationErrorKey, options);
+ } else {
+ if (state) {
+ unset(ctrl.$error, validationErrorKey, options);
+ set(ctrl.$$success, validationErrorKey, options);
+ } else {
+ set(ctrl.$error, validationErrorKey, options);
+ unset(ctrl.$$success, validationErrorKey, options);
+ }
+ }
+ if (ctrl.$pending) {
+ cachedToggleClass(PENDING_CLASS, true);
+ ctrl.$valid = ctrl.$invalid = undefined;
+ toggleValidationCss('', null);
+ } else {
+ cachedToggleClass(PENDING_CLASS, false);
+ ctrl.$valid = isObjectEmpty(ctrl.$error);
+ ctrl.$invalid = !ctrl.$valid;
+ toggleValidationCss('', ctrl.$valid);
+ }
+
+ // re-read the state as the set/unset methods could have
+ // combined state in ctrl.$error[validationError] (used for forms),
+ // where setting/unsetting only increments/decrements the value,
+ // and does not replace it.
+ var combinedState;
+ if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
+ combinedState = undefined;
+ } else if (ctrl.$error[validationErrorKey]) {
+ combinedState = false;
+ } else if (ctrl.$$success[validationErrorKey]) {
+ combinedState = true;
+ } else {
+ combinedState = null;
+ }
+ toggleValidationCss(validationErrorKey, combinedState);
+ parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
+ }
+
+ function createAndSet(name, value, options) {
+ if (!ctrl[name]) {
+ ctrl[name] = {};
+ }
+ set(ctrl[name], value, options);
+ }
+
+ function unsetAndCleanup(name, value, options) {
+ if (ctrl[name]) {
+ unset(ctrl[name], value, options);
+ }
+ if (isObjectEmpty(ctrl[name])) {
+ ctrl[name] = undefined;
+ }
+ }
+
+ function cachedToggleClass(className, switchValue) {
+ if (switchValue && !classCache[className]) {
+ $animate.addClass($element, className);
+ classCache[className] = true;
+ } else if (!switchValue && classCache[className]) {
+ $animate.removeClass($element, className);
+ classCache[className] = false;
+ }
+ }
+
+ function toggleValidationCss(validationErrorKey, isValid) {
+ validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
+
+ cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
+ cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
+ }
+}
+
+function isObjectEmpty(obj) {
+ if (obj) {
+ for (var prop in obj) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngBind
+ * @restrict AC
+ *
+ * @description
+ * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
+ * with the value of a given expression, and to update the text content when the value of that
+ * expression changes.
+ *
+ * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
+ * `{{ expression }}` which is similar but less verbose.
+ *
+ * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
+ * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
+ * element attribute, it makes the bindings invisible to the user while the page is loading.
+ *
+ * An alternative solution to this problem would be using the
+ * {@link ng.directive:ngCloak ngCloak} directive.
+ *
+ *
+ * @element ANY
+ * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+ * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
+ <example module="bindExample">
+ <file name="index.html">
+ <script>
+ angular.module('bindExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.name = 'Whirled';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Enter name: <input type="text" ng-model="name"><br>
+ Hello <span ng-bind="name"></span>!
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-bind', function() {
+ var nameInput = element(by.model('name'));
+
+ expect(element(by.binding('name')).getText()).toBe('Whirled');
+ nameInput.clear();
+ nameInput.sendKeys('world');
+ expect(element(by.binding('name')).getText()).toBe('world');
+ });
+ </file>
+ </example>
+ */
+var ngBindDirective = ['$compile', function($compile) {
+ return {
+ restrict: 'AC',
+ compile: function ngBindCompile(templateElement) {
+ $compile.$$addBindingClass(templateElement);
+ return function ngBindLink(scope, element, attr) {
+ $compile.$$addBindingInfo(element, attr.ngBind);
+ element = element[0];
+ scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
+ element.textContent = value === undefined ? '' : value;
+ });
+ };
+ }
+ };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindTemplate
+ *
+ * @description
+ * The `ngBindTemplate` directive specifies that the element
+ * text content should be replaced with the interpolation of the template
+ * in the `ngBindTemplate` attribute.
+ * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
+ * expressions. This directive is needed since some HTML elements
+ * (such as TITLE and OPTION) cannot contain SPAN elements.
+ *
+ * @element ANY
+ * @param {string} ngBindTemplate template of form
+ * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
+ *
+ * @example
+ * Try it here: enter text in text box and watch the greeting change.
+ <example module="bindExample">
+ <file name="index.html">
+ <script>
+ angular.module('bindExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.salutation = 'Hello';
+ $scope.name = 'World';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Salutation: <input type="text" ng-model="salutation"><br>
+ Name: <input type="text" ng-model="name"><br>
+ <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-bind', function() {
+ var salutationElem = element(by.binding('salutation'));
+ var salutationInput = element(by.model('salutation'));
+ var nameInput = element(by.model('name'));
+
+ expect(salutationElem.getText()).toBe('Hello World!');
+
+ salutationInput.clear();
+ salutationInput.sendKeys('Greetings');
+ nameInput.clear();
+ nameInput.sendKeys('user');
+
+ expect(salutationElem.getText()).toBe('Greetings user!');
+ });
+ </file>
+ </example>
+ */
+var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
+ return {
+ compile: function ngBindTemplateCompile(templateElement) {
+ $compile.$$addBindingClass(templateElement);
+ return function ngBindTemplateLink(scope, element, attr) {
+ var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
+ $compile.$$addBindingInfo(element, interpolateFn.expressions);
+ element = element[0];
+ attr.$observe('ngBindTemplate', function(value) {
+ element.textContent = value === undefined ? '' : value;
+ });
+ };
+ }
+ };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindHtml
+ *
+ * @description
+ * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
+ * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
+ * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
+ * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
+ * in your module's dependencies, you need to include "angular-sanitize.js" in your application.
+ *
+ * You may also bypass sanitization for values you know are safe. To do so, bind to
+ * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example
+ * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.
+ *
+ * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
+ * will have an exception (instead of an exploit.)
+ *
+ * @element ANY
+ * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+
+ <example module="bindHtmlExample" deps="angular-sanitize.js">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <p ng-bind-html="myHTML"></p>
+ </div>
+ </file>
+
+ <file name="script.js">
+ angular.module('bindHtmlExample', ['ngSanitize'])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.myHTML =
+ 'I am an <code>HTML</code>string with ' +
+ '<a href="#">links!</a> and other <em>stuff</em>';
+ }]);
+ </file>
+
+ <file name="protractor.js" type="protractor">
+ it('should check ng-bind-html', function() {
+ expect(element(by.binding('myHTML')).getText()).toBe(
+ 'I am an HTMLstring with links! and other stuff');
+ });
+ </file>
+ </example>
+ */
+var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
+ return {
+ restrict: 'A',
+ compile: function ngBindHtmlCompile(tElement, tAttrs) {
+ var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
+ var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
+ return (value || '').toString();
+ });
+ $compile.$$addBindingClass(tElement);
+
+ return function ngBindHtmlLink(scope, element, attr) {
+ $compile.$$addBindingInfo(element, attr.ngBindHtml);
+
+ scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
+ // we re-evaluate the expr because we want a TrustedValueHolderType
+ // for $sce, not a string
+ element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
+ });
+ };
+ }
+ };
+}];
+
+function classDirective(name, selector) {
+ name = 'ngClass' + name;
+ return ['$animate', function($animate) {
+ return {
+ restrict: 'AC',
+ link: function(scope, element, attr) {
+ var oldVal;
+
+ scope.$watch(attr[name], ngClassWatchAction, true);
+
+ attr.$observe('class', function(value) {
+ ngClassWatchAction(scope.$eval(attr[name]));
+ });
+
+
+ if (name !== 'ngClass') {
+ scope.$watch('$index', function($index, old$index) {
+ // jshint bitwise: false
+ var mod = $index & 1;
+ if (mod !== (old$index & 1)) {
+ var classes = arrayClasses(scope.$eval(attr[name]));
+ mod === selector ?
+ addClasses(classes) :
+ removeClasses(classes);
+ }
+ });
+ }
+
+ function addClasses(classes) {
+ var newClasses = digestClassCounts(classes, 1);
+ attr.$addClass(newClasses);
+ }
+
+ function removeClasses(classes) {
+ var newClasses = digestClassCounts(classes, -1);
+ attr.$removeClass(newClasses);
+ }
+
+ function digestClassCounts(classes, count) {
+ var classCounts = element.data('$classCounts') || {};
+ var classesToUpdate = [];
+ forEach(classes, function(className) {
+ if (count > 0 || classCounts[className]) {
+ classCounts[className] = (classCounts[className] || 0) + count;
+ if (classCounts[className] === +(count > 0)) {
+ classesToUpdate.push(className);
+ }
+ }
+ });
+ element.data('$classCounts', classCounts);
+ return classesToUpdate.join(' ');
+ }
+
+ function updateClasses(oldClasses, newClasses) {
+ var toAdd = arrayDifference(newClasses, oldClasses);
+ var toRemove = arrayDifference(oldClasses, newClasses);
+ toAdd = digestClassCounts(toAdd, 1);
+ toRemove = digestClassCounts(toRemove, -1);
+ if (toAdd && toAdd.length) {
+ $animate.addClass(element, toAdd);
+ }
+ if (toRemove && toRemove.length) {
+ $animate.removeClass(element, toRemove);
+ }
+ }
+
+ function ngClassWatchAction(newVal) {
+ if (selector === true || scope.$index % 2 === selector) {
+ var newClasses = arrayClasses(newVal || []);
+ if (!oldVal) {
+ addClasses(newClasses);
+ } else if (!equals(newVal,oldVal)) {
+ var oldClasses = arrayClasses(oldVal);
+ updateClasses(oldClasses, newClasses);
+ }
+ }
+ oldVal = shallowCopy(newVal);
+ }
+ }
+ };
+
+ function arrayDifference(tokens1, tokens2) {
+ var values = [];
+
+ outer:
+ for (var i = 0; i < tokens1.length; i++) {
+ var token = tokens1[i];
+ for (var j = 0; j < tokens2.length; j++) {
+ if (token == tokens2[j]) continue outer;
+ }
+ values.push(token);
+ }
+ return values;
+ }
+
+ function arrayClasses(classVal) {
+ if (isArray(classVal)) {
+ return classVal;
+ } else if (isString(classVal)) {
+ return classVal.split(' ');
+ } else if (isObject(classVal)) {
+ var classes = [];
+ forEach(classVal, function(v, k) {
+ if (v) {
+ classes = classes.concat(k.split(' '));
+ }
+ });
+ return classes;
+ }
+ return classVal;
+ }
+ }];
+}
+
+/**
+ * @ngdoc directive
+ * @name ngClass
+ * @restrict AC
+ *
+ * @description
+ * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
+ * an expression that represents all classes to be added.
+ *
+ * The directive operates in three different ways, depending on which of three types the expression
+ * evaluates to:
+ *
+ * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
+ * names.
+ *
+ * 2. If the expression evaluates to an array, each element of the array should be a string that is
+ * one or more space-delimited class names.
+ *
+ * 3. If the expression evaluates to an object, then for each key-value pair of the
+ * object with a truthy value the corresponding key is used as a class name.
+ *
+ * The directive won't add duplicate classes if a particular class was already set.
+ *
+ * When the expression changes, the previously added classes are removed and only then the
+ * new classes are added.
+ *
+ * @animations
+ * add - happens just before the class is applied to the element
+ * remove - happens just before the class is removed from the element
+ *
+ * @element ANY
+ * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
+ * of the evaluation can be a string representing space delimited class
+ * names, an array, or a map of class names to boolean values. In the case of a map, the
+ * names of the properties whose values are truthy will be added as css classes to the
+ * element.
+ *
+ * @example Example that demonstrates basic bindings via ngClass directive.
+ <example>
+ <file name="index.html">
+ <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p>
+ <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br>
+ <input type="checkbox" ng-model="important"> important (apply "bold" class)<br>
+ <input type="checkbox" ng-model="error"> error (apply "red" class)
+ <hr>
+ <p ng-class="style">Using String Syntax</p>
+ <input type="text" ng-model="style" placeholder="Type: bold strike red">
+ <hr>
+ <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
+ <input ng-model="style1" placeholder="Type: bold, strike or red"><br>
+ <input ng-model="style2" placeholder="Type: bold, strike or red"><br>
+ <input ng-model="style3" placeholder="Type: bold, strike or red"><br>
+ </file>
+ <file name="style.css">
+ .strike {
+ text-decoration: line-through;
+ }
+ .bold {
+ font-weight: bold;
+ }
+ .red {
+ color: red;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var ps = element.all(by.css('p'));
+
+ it('should let you toggle the class', function() {
+
+ expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
+ expect(ps.first().getAttribute('class')).not.toMatch(/red/);
+
+ element(by.model('important')).click();
+ expect(ps.first().getAttribute('class')).toMatch(/bold/);
+
+ element(by.model('error')).click();
+ expect(ps.first().getAttribute('class')).toMatch(/red/);
+ });
+
+ it('should let you toggle string example', function() {
+ expect(ps.get(1).getAttribute('class')).toBe('');
+ element(by.model('style')).clear();
+ element(by.model('style')).sendKeys('red');
+ expect(ps.get(1).getAttribute('class')).toBe('red');
+ });
+
+ it('array example should have 3 classes', function() {
+ expect(ps.last().getAttribute('class')).toBe('');
+ element(by.model('style1')).sendKeys('bold');
+ element(by.model('style2')).sendKeys('strike');
+ element(by.model('style3')).sendKeys('red');
+ expect(ps.last().getAttribute('class')).toBe('bold strike red');
+ });
+ </file>
+ </example>
+
+ ## Animations
+
+ The example below demonstrates how to perform animations using ngClass.
+
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
+ <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
+ <br>
+ <span class="base-class" ng-class="myVar">Sample Text</span>
+ </file>
+ <file name="style.css">
+ .base-class {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ }
+
+ .base-class.my-class {
+ color: red;
+ font-size:3em;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-class', function() {
+ expect(element(by.css('.base-class')).getAttribute('class')).not.
+ toMatch(/my-class/);
+
+ element(by.id('setbtn')).click();
+
+ expect(element(by.css('.base-class')).getAttribute('class')).
+ toMatch(/my-class/);
+
+ element(by.id('clearbtn')).click();
+
+ expect(element(by.css('.base-class')).getAttribute('class')).not.
+ toMatch(/my-class/);
+ });
+ </file>
+ </example>
+
+
+ ## ngClass and pre-existing CSS3 Transitions/Animations
+ The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
+ Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
+ any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
+ to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and
+ {@link ng.$animate#removeClass $animate.removeClass}.
+ */
+var ngClassDirective = classDirective('', true);
+
+/**
+ * @ngdoc directive
+ * @name ngClassOdd
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
+ * of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+ <li ng-repeat="name in names">
+ <span ng-class-odd="'odd'" ng-class-even="'even'">
+ {{name}}
+ </span>
+ </li>
+ </ol>
+ </file>
+ <file name="style.css">
+ .odd {
+ color: red;
+ }
+ .even {
+ color: blue;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-class-odd and ng-class-even', function() {
+ expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+ toMatch(/odd/);
+ expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+ toMatch(/even/);
+ });
+ </file>
+ </example>
+ */
+var ngClassOddDirective = classDirective('Odd', 0);
+
+/**
+ * @ngdoc directive
+ * @name ngClassEven
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
+ * result of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+ <li ng-repeat="name in names">
+ <span ng-class-odd="'odd'" ng-class-even="'even'">
+ {{name}} &nbsp; &nbsp; &nbsp;
+ </span>
+ </li>
+ </ol>
+ </file>
+ <file name="style.css">
+ .odd {
+ color: red;
+ }
+ .even {
+ color: blue;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-class-odd and ng-class-even', function() {
+ expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+ toMatch(/odd/);
+ expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+ toMatch(/even/);
+ });
+ </file>
+ </example>
+ */
+var ngClassEvenDirective = classDirective('Even', 1);
+
+/**
+ * @ngdoc directive
+ * @name ngCloak
+ * @restrict AC
+ *
+ * @description
+ * The `ngCloak` directive is used to prevent the Angular html template from being briefly
+ * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
+ * directive to avoid the undesirable flicker effect caused by the html template display.
+ *
+ * The directive can be applied to the `<body>` element, but the preferred usage is to apply
+ * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
+ * of the browser view.
+ *
+ * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
+ * `angular.min.js`.
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```css
+ * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
+ * display: none !important;
+ * }
+ * ```
+ *
+ * When this css rule is loaded by the browser, all html elements (including their children) that
+ * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
+ * during the compilation of the template it deletes the `ngCloak` element attribute, making
+ * the compiled element visible.
+ *
+ * For the best result, the `angular.js` script must be loaded in the head section of the html
+ * document; alternatively, the css rule above must be included in the external stylesheet of the
+ * application.
+ *
+ * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they
+ * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css
+ * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.
+ *
+ * @element ANY
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <div id="template1" ng-cloak>{{ 'hello' }}</div>
+ <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should remove the template directive and css class', function() {
+ expect($('#template1').getAttribute('ng-cloak')).
+ toBeNull();
+ expect($('#template2').getAttribute('ng-cloak')).
+ toBeNull();
+ });
+ </file>
+ </example>
+ *
+ */
+var ngCloakDirective = ngDirective({
+ compile: function(element, attr) {
+ attr.$set('ngCloak', undefined);
+ element.removeClass('ng-cloak');
+ }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngController
+ *
+ * @description
+ * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
+ * supports the principles behind the Model-View-Controller design pattern.
+ *
+ * MVC components in angular:
+ *
+ * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
+ * are accessed through bindings.
+ * * View — The template (HTML with data bindings) that is rendered into the View.
+ * * Controller — The `ngController` directive specifies a Controller class; the class contains business
+ * logic behind the application to decorate the scope with functions and values
+ *
+ * Note that you can also attach controllers to the DOM by declaring it in a route definition
+ * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
+ * again using `ng-controller` in the template itself. This will cause the controller to be attached
+ * and executed twice.
+ *
+ * @element ANY
+ * @scope
+ * @priority 500
+ * @param {expression} ngController Name of a constructor function registered with the current
+ * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
+ * that on the current scope evaluates to a constructor function.
+ *
+ * The controller instance can be published into a scope property by specifying
+ * `ng-controller="as propertyName"`.
+ *
+ * If the current `$controllerProvider` is configured to use globals (via
+ * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
+ * also be the name of a globally accessible constructor function (not recommended).
+ *
+ * @example
+ * Here is a simple form for editing user contact information. Adding, removing, clearing, and
+ * greeting are methods declared on the controller (see source tab). These methods can
+ * easily be called from the angular markup. Any changes to the data are automatically reflected
+ * in the View without the need for a manual update.
+ *
+ * Two different declaration styles are included below:
+ *
+ * * one binds methods and properties directly onto the controller using `this`:
+ * `ng-controller="SettingsController1 as settings"`
+ * * one injects `$scope` into the controller:
+ * `ng-controller="SettingsController2"`
+ *
+ * The second option is more common in the Angular community, and is generally used in boilerplates
+ * and in this guide. However, there are advantages to binding properties directly to the controller
+ * and avoiding scope.
+ *
+ * * Using `controller as` makes it obvious which controller you are accessing in the template when
+ * multiple controllers apply to an element.
+ * * If you are writing your controllers as classes you have easier access to the properties and
+ * methods, which will appear on the scope, from inside the controller code.
+ * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
+ * inheritance masking primitives.
+ *
+ * This example demonstrates the `controller as` syntax.
+ *
+ * <example name="ngControllerAs" module="controllerAsExample">
+ * <file name="index.html">
+ * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
+ * Name: <input type="text" ng-model="settings.name"/>
+ * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/>
+ * Contact:
+ * <ul>
+ * <li ng-repeat="contact in settings.contacts">
+ * <select ng-model="contact.type">
+ * <option>phone</option>
+ * <option>email</option>
+ * </select>
+ * <input type="text" ng-model="contact.value"/>
+ * [ <a href="" ng-click="settings.clearContact(contact)">clear</a>
+ * | <a href="" ng-click="settings.removeContact(contact)">X</a> ]
+ * </li>
+ * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li>
+ * </ul>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('controllerAsExample', [])
+ * .controller('SettingsController1', SettingsController1);
+ *
+ * function SettingsController1() {
+ * this.name = "John Smith";
+ * this.contacts = [
+ * {type: 'phone', value: '408 555 1212'},
+ * {type: 'email', value: 'john.smith@example.org'} ];
+ * }
+ *
+ * SettingsController1.prototype.greet = function() {
+ * alert(this.name);
+ * };
+ *
+ * SettingsController1.prototype.addContact = function() {
+ * this.contacts.push({type: 'email', value: 'yourname@example.org'});
+ * };
+ *
+ * SettingsController1.prototype.removeContact = function(contactToRemove) {
+ * var index = this.contacts.indexOf(contactToRemove);
+ * this.contacts.splice(index, 1);
+ * };
+ *
+ * SettingsController1.prototype.clearContact = function(contact) {
+ * contact.type = 'phone';
+ * contact.value = '';
+ * };
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it('should check controller as', function() {
+ * var container = element(by.id('ctrl-as-exmpl'));
+ * expect(container.element(by.model('settings.name'))
+ * .getAttribute('value')).toBe('John Smith');
+ *
+ * var firstRepeat =
+ * container.element(by.repeater('contact in settings.contacts').row(0));
+ * var secondRepeat =
+ * container.element(by.repeater('contact in settings.contacts').row(1));
+ *
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('408 555 1212');
+ *
+ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('john.smith@example.org');
+ *
+ * firstRepeat.element(by.linkText('clear')).click();
+ *
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('');
+ *
+ * container.element(by.linkText('add')).click();
+ *
+ * expect(container.element(by.repeater('contact in settings.contacts').row(2))
+ * .element(by.model('contact.value'))
+ * .getAttribute('value'))
+ * .toBe('yourname@example.org');
+ * });
+ * </file>
+ * </example>
+ *
+ * This example demonstrates the "attach to `$scope`" style of controller.
+ *
+ * <example name="ngController" module="controllerExample">
+ * <file name="index.html">
+ * <div id="ctrl-exmpl" ng-controller="SettingsController2">
+ * Name: <input type="text" ng-model="name"/>
+ * [ <a href="" ng-click="greet()">greet</a> ]<br/>
+ * Contact:
+ * <ul>
+ * <li ng-repeat="contact in contacts">
+ * <select ng-model="contact.type">
+ * <option>phone</option>
+ * <option>email</option>
+ * </select>
+ * <input type="text" ng-model="contact.value"/>
+ * [ <a href="" ng-click="clearContact(contact)">clear</a>
+ * | <a href="" ng-click="removeContact(contact)">X</a> ]
+ * </li>
+ * <li>[ <a href="" ng-click="addContact()">add</a> ]</li>
+ * </ul>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('controllerExample', [])
+ * .controller('SettingsController2', ['$scope', SettingsController2]);
+ *
+ * function SettingsController2($scope) {
+ * $scope.name = "John Smith";
+ * $scope.contacts = [
+ * {type:'phone', value:'408 555 1212'},
+ * {type:'email', value:'john.smith@example.org'} ];
+ *
+ * $scope.greet = function() {
+ * alert($scope.name);
+ * };
+ *
+ * $scope.addContact = function() {
+ * $scope.contacts.push({type:'email', value:'yourname@example.org'});
+ * };
+ *
+ * $scope.removeContact = function(contactToRemove) {
+ * var index = $scope.contacts.indexOf(contactToRemove);
+ * $scope.contacts.splice(index, 1);
+ * };
+ *
+ * $scope.clearContact = function(contact) {
+ * contact.type = 'phone';
+ * contact.value = '';
+ * };
+ * }
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it('should check controller', function() {
+ * var container = element(by.id('ctrl-exmpl'));
+ *
+ * expect(container.element(by.model('name'))
+ * .getAttribute('value')).toBe('John Smith');
+ *
+ * var firstRepeat =
+ * container.element(by.repeater('contact in contacts').row(0));
+ * var secondRepeat =
+ * container.element(by.repeater('contact in contacts').row(1));
+ *
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('408 555 1212');
+ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('john.smith@example.org');
+ *
+ * firstRepeat.element(by.linkText('clear')).click();
+ *
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ * .toBe('');
+ *
+ * container.element(by.linkText('add')).click();
+ *
+ * expect(container.element(by.repeater('contact in contacts').row(2))
+ * .element(by.model('contact.value'))
+ * .getAttribute('value'))
+ * .toBe('yourname@example.org');
+ * });
+ * </file>
+ *</example>
+
+ */
+var ngControllerDirective = [function() {
+ return {
+ restrict: 'A',
+ scope: true,
+ controller: '@',
+ priority: 500
+ };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngCsp
+ *
+ * @element html
+ * @description
+ * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.
+ *
+ * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
+ *
+ * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).
+ * For Angular to be CSP compatible there are only two things that we need to do differently:
+ *
+ * - don't use `Function` constructor to generate optimized value getters
+ * - don't inject custom stylesheet into the document
+ *
+ * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`
+ * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will
+ * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will
+ * be raised.
+ *
+ * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically
+ * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).
+ * To make those directives work in CSP mode, include the `angular-csp.css` manually.
+ *
+ * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This
+ * autodetection however triggers a CSP error to be logged in the console:
+ *
+ * ```
+ * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
+ * script in the following Content Security Policy directive: "default-src 'self'". Note that
+ * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
+ * ```
+ *
+ * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
+ * directive on the root element of the application or on the `angular.js` script tag, whichever
+ * appears first in the html document.
+ *
+ * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
+ *
+ * @example
+ * This example shows how to apply the `ngCsp` directive to the `html` tag.
+ ```html
+ <!doctype html>
+ <html ng-app ng-csp>
+ ...
+ ...
+ </html>
+ ```
+ * @example
+ // Note: the suffix `.csp` in the example name triggers
+ // csp mode in our http server!
+ <example name="example.csp" module="cspExample" ng-csp="true">
+ <file name="index.html">
+ <div ng-controller="MainController as ctrl">
+ <div>
+ <button ng-click="ctrl.inc()" id="inc">Increment</button>
+ <span id="counter">
+ {{ctrl.counter}}
+ </span>
+ </div>
+
+ <div>
+ <button ng-click="ctrl.evil()" id="evil">Evil</button>
+ <span id="evilError">
+ {{ctrl.evilError}}
+ </span>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('cspExample', [])
+ .controller('MainController', function() {
+ this.counter = 0;
+ this.inc = function() {
+ this.counter++;
+ };
+ this.evil = function() {
+ // jshint evil:true
+ try {
+ eval('1+2');
+ } catch (e) {
+ this.evilError = e.message;
+ }
+ };
+ });
+ </file>
+ <file name="protractor.js" type="protractor">
+ var util, webdriver;
+
+ var incBtn = element(by.id('inc'));
+ var counter = element(by.id('counter'));
+ var evilBtn = element(by.id('evil'));
+ var evilError = element(by.id('evilError'));
+
+ function getAndClearSevereErrors() {
+ return browser.manage().logs().get('browser').then(function(browserLog) {
+ return browserLog.filter(function(logEntry) {
+ return logEntry.level.value > webdriver.logging.Level.WARNING.value;
+ });
+ });
+ }
+
+ function clearErrors() {
+ getAndClearSevereErrors();
+ }
+
+ function expectNoErrors() {
+ getAndClearSevereErrors().then(function(filteredLog) {
+ expect(filteredLog.length).toEqual(0);
+ if (filteredLog.length) {
+ console.log('browser console errors: ' + util.inspect(filteredLog));
+ }
+ });
+ }
+
+ function expectError(regex) {
+ getAndClearSevereErrors().then(function(filteredLog) {
+ var found = false;
+ filteredLog.forEach(function(log) {
+ if (log.message.match(regex)) {
+ found = true;
+ }
+ });
+ if (!found) {
+ throw new Error('expected an error that matches ' + regex);
+ }
+ });
+ }
+
+ beforeEach(function() {
+ util = require('util');
+ webdriver = require('protractor/node_modules/selenium-webdriver');
+ });
+
+ // For now, we only test on Chrome,
+ // as Safari does not load the page with Protractor's injected scripts,
+ // and Firefox webdriver always disables content security policy (#6358)
+ if (browser.params.browser !== 'chrome') {
+ return;
+ }
+
+ it('should not report errors when the page is loaded', function() {
+ // clear errors so we are not dependent on previous tests
+ clearErrors();
+ // Need to reload the page as the page is already loaded when
+ // we come here
+ browser.driver.getCurrentUrl().then(function(url) {
+ browser.get(url);
+ });
+ expectNoErrors();
+ });
+
+ it('should evaluate expressions', function() {
+ expect(counter.getText()).toEqual('0');
+ incBtn.click();
+ expect(counter.getText()).toEqual('1');
+ expectNoErrors();
+ });
+
+ it('should throw and report an error when using "eval"', function() {
+ evilBtn.click();
+ expect(evilError.getText()).toMatch(/Content Security Policy/);
+ expectError(/Content Security Policy/);
+ });
+ </file>
+ </example>
+ */
+
+// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
+// bootstrap the system (before $parse is instantiated), for this reason we just have
+// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc
+
+/**
+ * @ngdoc directive
+ * @name ngClick
+ *
+ * @description
+ * The ngClick directive allows you to specify custom behavior when
+ * an element is clicked.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
+ * click. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-click="count = count + 1" ng-init="count=0">
+ Increment
+ </button>
+ <span>
+ count: {{count}}
+ </span>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-click', function() {
+ expect(element(by.binding('count')).getText()).toMatch('0');
+ element(by.css('button')).click();
+ expect(element(by.binding('count')).getText()).toMatch('1');
+ });
+ </file>
+ </example>
+ */
+/*
+ * A collection of directives that allows creation of custom event handlers that are defined as
+ * angular expressions and are compiled and executed within the current scope.
+ */
+var ngEventDirectives = {};
+
+// For events that might fire synchronously during DOM manipulation
+// we need to execute their event handlers asynchronously using $evalAsync,
+// so that they are not executed in an inconsistent state.
+var forceAsyncEvents = {
+ 'blur': true,
+ 'focus': true
+};
+forEach(
+ 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
+ function(eventName) {
+ var directiveName = directiveNormalize('ng-' + eventName);
+ ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
+ return {
+ restrict: 'A',
+ compile: function($element, attr) {
+ // We expose the powerful $event object on the scope that provides access to the Window,
+ // etc. that isn't protected by the fast paths in $parse. We explicitly request better
+ // checks at the cost of speed since event handler expressions are not executed as
+ // frequently as regular change detection.
+ var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
+ return function ngEventHandler(scope, element) {
+ element.on(eventName, function(event) {
+ var callback = function() {
+ fn(scope, {$event:event});
+ };
+ if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
+ scope.$evalAsync(callback);
+ } else {
+ scope.$apply(callback);
+ }
+ });
+ };
+ }
+ };
+ }];
+ }
+);
+
+/**
+ * @ngdoc directive
+ * @name ngDblclick
+ *
+ * @description
+ * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
+ * a dblclick. (The Event object is available as `$event`)
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-dblclick="count = count + 1" ng-init="count=0">
+ Increment (on double click)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousedown
+ *
+ * @description
+ * The ngMousedown directive allows you to specify custom behavior on mousedown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
+ * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mousedown="count = count + 1" ng-init="count=0">
+ Increment (on mouse down)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseup
+ *
+ * @description
+ * Specify custom behavior on mouseup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
+ * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mouseup="count = count + 1" ng-init="count=0">
+ Increment (on mouse up)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngMouseover
+ *
+ * @description
+ * Specify custom behavior on mouseover event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
+ * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mouseover="count = count + 1" ng-init="count=0">
+ Increment (when mouse is over)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseenter
+ *
+ * @description
+ * Specify custom behavior on mouseenter event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
+ * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mouseenter="count = count + 1" ng-init="count=0">
+ Increment (when mouse enters)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseleave
+ *
+ * @description
+ * Specify custom behavior on mouseleave event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
+ * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mouseleave="count = count + 1" ng-init="count=0">
+ Increment (when mouse leaves)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousemove
+ *
+ * @description
+ * Specify custom behavior on mousemove event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
+ * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <button ng-mousemove="count = count + 1" ng-init="count=0">
+ Increment (when mouse moves)
+ </button>
+ count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeydown
+ *
+ * @description
+ * Specify custom behavior on keydown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input ng-keydown="count = count + 1" ng-init="count=0">
+ key down count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeyup
+ *
+ * @description
+ * Specify custom behavior on keyup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <p>Typing in the input box below updates the key count</p>
+ <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
+
+ <p>Typing in the input box below updates the keycode</p>
+ <input ng-keyup="event=$event">
+ <p>event keyCode: {{ event.keyCode }}</p>
+ <p>event altKey: {{ event.altKey }}</p>
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeypress
+ *
+ * @description
+ * Specify custom behavior on keypress event.
+ *
+ * @element ANY
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
+ * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
+ * and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input ng-keypress="count = count + 1" ng-init="count=0">
+ key press count: {{count}}
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSubmit
+ *
+ * @description
+ * Enables binding angular expressions to onsubmit events.
+ *
+ * Additionally it prevents the default action (which for form means sending the request to the
+ * server and reloading the current page), but only if the form does not contain `action`,
+ * `data-action`, or `x-action` attributes.
+ *
+ * <div class="alert alert-warning">
+ * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
+ * `ngSubmit` handlers together. See the
+ * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
+ * for a detailed discussion of when `ngSubmit` may be triggered.
+ * </div>
+ *
+ * @element form
+ * @priority 0
+ * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
+ * ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example module="submitExample">
+ <file name="index.html">
+ <script>
+ angular.module('submitExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.list = [];
+ $scope.text = 'hello';
+ $scope.submit = function() {
+ if ($scope.text) {
+ $scope.list.push(this.text);
+ $scope.text = '';
+ }
+ };
+ }]);
+ </script>
+ <form ng-submit="submit()" ng-controller="ExampleController">
+ Enter text and hit enter:
+ <input type="text" ng-model="text" name="text" />
+ <input type="submit" id="submit" value="Submit" />
+ <pre>list={{list}}</pre>
+ </form>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-submit', function() {
+ expect(element(by.binding('list')).getText()).toBe('list=[]');
+ element(by.css('#submit')).click();
+ expect(element(by.binding('list')).getText()).toContain('hello');
+ expect(element(by.model('text')).getAttribute('value')).toBe('');
+ });
+ it('should ignore empty strings', function() {
+ expect(element(by.binding('list')).getText()).toBe('list=[]');
+ element(by.css('#submit')).click();
+ element(by.css('#submit')).click();
+ expect(element(by.binding('list')).getText()).toContain('hello');
+ });
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngFocus
+ *
+ * @description
+ * Specify custom behavior on focus event.
+ *
+ * Note: As the `focus` event is executed synchronously when calling `input.focus()`
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
+ * focus. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngBlur
+ *
+ * @description
+ * Specify custom behavior on blur event.
+ *
+ * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
+ * an element has lost focus.
+ *
+ * Note: As the `blur` event is executed synchronously also during DOM manipulations
+ * (e.g. removing a focussed input),
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
+ * blur. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCopy
+ *
+ * @description
+ * Specify custom behavior on copy event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
+ * copy. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
+ copied: {{copied}}
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCut
+ *
+ * @description
+ * Specify custom behavior on cut event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
+ * cut. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
+ cut: {{cut}}
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngPaste
+ *
+ * @description
+ * Specify custom behavior on paste event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
+ * paste. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
+ pasted: {{paste}}
+ </file>
+ </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngIf
+ * @restrict A
+ *
+ * @description
+ * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
+ * {expression}. If the expression assigned to `ngIf` evaluates to a false
+ * value then the element is removed from the DOM, otherwise a clone of the
+ * element is reinserted into the DOM.
+ *
+ * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
+ * element in the DOM rather than changing its visibility via the `display` css property. A common
+ * case when this difference is significant is when using css selectors that rely on an element's
+ * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
+ *
+ * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
+ * is created when the element is restored. The scope created within `ngIf` inherits from
+ * its parent scope using
+ * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
+ * An important implication of this is if `ngModel` is used within `ngIf` to bind to
+ * a javascript primitive defined in the parent scope. In this case any modifications made to the
+ * variable within the child scope will override (hide) the value in the parent scope.
+ *
+ * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
+ * is if an element's class attribute is directly modified after it's compiled, using something like
+ * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
+ * the added class will be lost because the original compiled state is used to regenerate the element.
+ *
+ * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
+ * and `leave` effects.
+ *
+ * @animations
+ * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
+ * leave - happens just before the `ngIf` contents are removed from the DOM
+ *
+ * @element ANY
+ * @scope
+ * @priority 600
+ * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
+ * the element is removed from the DOM tree. If it is truthy a copy of the compiled
+ * element is added to the DOM tree.
+ *
+ * @example
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/>
+ Show when checked:
+ <span ng-if="checked" class="animate-if">
+ This is removed when the checkbox is unchecked.
+ </span>
+ </file>
+ <file name="animations.css">
+ .animate-if {
+ background:white;
+ border:1px solid black;
+ padding:10px;
+ }
+
+ .animate-if.ng-enter, .animate-if.ng-leave {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ }
+
+ .animate-if.ng-enter,
+ .animate-if.ng-leave.ng-leave-active {
+ opacity:0;
+ }
+
+ .animate-if.ng-leave,
+ .animate-if.ng-enter.ng-enter-active {
+ opacity:1;
+ }
+ </file>
+ </example>
+ */
+var ngIfDirective = ['$animate', function($animate) {
+ return {
+ multiElement: true,
+ transclude: 'element',
+ priority: 600,
+ terminal: true,
+ restrict: 'A',
+ $$tlb: true,
+ link: function($scope, $element, $attr, ctrl, $transclude) {
+ var block, childScope, previousElements;
+ $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
+
+ if (value) {
+ if (!childScope) {
+ $transclude(function(clone, newScope) {
+ childScope = newScope;
+ clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
+ // Note: We only need the first/last node of the cloned nodes.
+ // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+ // by a directive with templateUrl when its template arrives.
+ block = {
+ clone: clone
+ };
+ $animate.enter(clone, $element.parent(), $element);
+ });
+ }
+ } else {
+ if (previousElements) {
+ previousElements.remove();
+ previousElements = null;
+ }
+ if (childScope) {
+ childScope.$destroy();
+ childScope = null;
+ }
+ if (block) {
+ previousElements = getBlockNodes(block.clone);
+ $animate.leave(previousElements).then(function() {
+ previousElements = null;
+ });
+ block = null;
+ }
+ }
+ });
+ }
+ };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngInclude
+ * @restrict ECA
+ *
+ * @description
+ * Fetches, compiles and includes an external HTML fragment.
+ *
+ * By default, the template URL is restricted to the same domain and protocol as the
+ * application document. This is done by calling {@link $sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
+ * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
+ * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link
+ * ng.$sce Strict Contextual Escaping}.
+ *
+ * In addition, the browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy may further restrict whether the template is successfully loaded.
+ * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
+ * access on some browsers.
+ *
+ * @animations
+ * enter - animation is used to bring new content into the browser.
+ * leave - animation is used to animate existing content away.
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ *
+ * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
+ * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
+ * @param {string=} onload Expression to evaluate when a new partial is loaded.
+ *
+ * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
+ * $anchorScroll} to scroll the viewport after the content is loaded.
+ *
+ * - If the attribute is not set, disable scrolling.
+ * - If the attribute is set without value, enable scrolling.
+ * - Otherwise enable scrolling only if the expression evaluates to truthy value.
+ *
+ * @example
+ <example module="includeExample" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <select ng-model="template" ng-options="t.name for t in templates">
+ <option value="">(blank)</option>
+ </select>
+ url of the template: <tt>{{template.url}}</tt>
+ <hr/>
+ <div class="slide-animate-container">
+ <div class="slide-animate" ng-include="template.url"></div>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('includeExample', ['ngAnimate'])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.templates =
+ [ { name: 'template1.html', url: 'template1.html'},
+ { name: 'template2.html', url: 'template2.html'} ];
+ $scope.template = $scope.templates[0];
+ }]);
+ </file>
+ <file name="template1.html">
+ Content of template1.html
+ </file>
+ <file name="template2.html">
+ Content of template2.html
+ </file>
+ <file name="animations.css">
+ .slide-animate-container {
+ position:relative;
+ background:white;
+ border:1px solid black;
+ height:40px;
+ overflow:hidden;
+ }
+
+ .slide-animate {
+ padding:10px;
+ }
+
+ .slide-animate.ng-enter, .slide-animate.ng-leave {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ display:block;
+ padding:10px;
+ }
+
+ .slide-animate.ng-enter {
+ top:-50px;
+ }
+ .slide-animate.ng-enter.ng-enter-active {
+ top:0;
+ }
+
+ .slide-animate.ng-leave {
+ top:0;
+ }
+ .slide-animate.ng-leave.ng-leave-active {
+ top:50px;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var templateSelect = element(by.model('template'));
+ var includeElem = element(by.css('[ng-include]'));
+
+ it('should load template1.html', function() {
+ expect(includeElem.getText()).toMatch(/Content of template1.html/);
+ });
+
+ it('should load template2.html', function() {
+ if (browser.params.browser == 'firefox') {
+ // Firefox can't handle using selects
+ // See https://github.com/angular/protractor/issues/480
+ return;
+ }
+ templateSelect.click();
+ templateSelect.all(by.css('option')).get(2).click();
+ expect(includeElem.getText()).toMatch(/Content of template2.html/);
+ });
+
+ it('should change to blank', function() {
+ if (browser.params.browser == 'firefox') {
+ // Firefox can't handle using selects
+ return;
+ }
+ templateSelect.click();
+ templateSelect.all(by.css('option')).get(0).click();
+ expect(includeElem.isPresent()).toBe(false);
+ });
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentRequested
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted every time the ngInclude content is requested.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentLoaded
+ * @eventType emit on the current ngInclude scope
+ * @description
+ * Emitted every time the ngInclude content is reloaded.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentError
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce',
+ function($templateRequest, $anchorScroll, $animate, $sce) {
+ return {
+ restrict: 'ECA',
+ priority: 400,
+ terminal: true,
+ transclude: 'element',
+ controller: angular.noop,
+ compile: function(element, attr) {
+ var srcExp = attr.ngInclude || attr.src,
+ onloadExp = attr.onload || '',
+ autoScrollExp = attr.autoscroll;
+
+ return function(scope, $element, $attr, ctrl, $transclude) {
+ var changeCounter = 0,
+ currentScope,
+ previousElement,
+ currentElement;
+
+ var cleanupLastIncludeContent = function() {
+ if (previousElement) {
+ previousElement.remove();
+ previousElement = null;
+ }
+ if (currentScope) {
+ currentScope.$destroy();
+ currentScope = null;
+ }
+ if (currentElement) {
+ $animate.leave(currentElement).then(function() {
+ previousElement = null;
+ });
+ previousElement = currentElement;
+ currentElement = null;
+ }
+ };
+
+ scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {
+ var afterAnimation = function() {
+ if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+ $anchorScroll();
+ }
+ };
+ var thisChangeId = ++changeCounter;
+
+ if (src) {
+ //set the 2nd param to true to ignore the template request error so that the inner
+ //contents and scope can be cleaned up.
+ $templateRequest(src, true).then(function(response) {
+ if (thisChangeId !== changeCounter) return;
+ var newScope = scope.$new();
+ ctrl.template = response;
+
+ // Note: This will also link all children of ng-include that were contained in the original
+ // html. If that content contains controllers, ... they could pollute/change the scope.
+ // However, using ng-include on an element with additional content does not make sense...
+ // Note: We can't remove them in the cloneAttchFn of $transclude as that
+ // function is called before linking the content, which would apply child
+ // directives to non existing elements.
+ var clone = $transclude(newScope, function(clone) {
+ cleanupLastIncludeContent();
+ $animate.enter(clone, null, $element).then(afterAnimation);
+ });
+
+ currentScope = newScope;
+ currentElement = clone;
+
+ currentScope.$emit('$includeContentLoaded', src);
+ scope.$eval(onloadExp);
+ }, function() {
+ if (thisChangeId === changeCounter) {
+ cleanupLastIncludeContent();
+ scope.$emit('$includeContentError', src);
+ }
+ });
+ scope.$emit('$includeContentRequested', src);
+ } else {
+ cleanupLastIncludeContent();
+ ctrl.template = null;
+ }
+ });
+ };
+ }
+ };
+}];
+
+// This directive is called during the $transclude call of the first `ngInclude` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngInclude
+// is called.
+var ngIncludeFillContentDirective = ['$compile',
+ function($compile) {
+ return {
+ restrict: 'ECA',
+ priority: -400,
+ require: 'ngInclude',
+ link: function(scope, $element, $attr, ctrl) {
+ if (/SVG/.test($element[0].toString())) {
+ // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
+ // support innerHTML, so detect this here and try to generate the contents
+ // specially.
+ $element.empty();
+ $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
+ function namespaceAdaptedClone(clone) {
+ $element.append(clone);
+ }, {futureParentElement: $element});
+ return;
+ }
+
+ $element.html(ctrl.template);
+ $compile($element.contents())(scope);
+ }
+ };
+ }];
+
+/**
+ * @ngdoc directive
+ * @name ngInit
+ * @restrict AC
+ *
+ * @description
+ * The `ngInit` directive allows you to evaluate an expression in the
+ * current scope.
+ *
+ * <div class="alert alert-error">
+ * The only appropriate use of `ngInit` is for aliasing special properties of
+ * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you
+ * should use {@link guide/controller controllers} rather than `ngInit`
+ * to initialize values on a scope.
+ * </div>
+ * <div class="alert alert-warning">
+ * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make
+ * sure you have parenthesis for correct precedence:
+ * <pre class="prettyprint">
+ * <div ng-init="test1 = (data | orderBy:'name')"></div>
+ * </pre>
+ * </div>
+ *
+ * @priority 450
+ *
+ * @element ANY
+ * @param {expression} ngInit {@link guide/expression Expression} to eval.
+ *
+ * @example
+ <example module="initExample">
+ <file name="index.html">
+ <script>
+ angular.module('initExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.list = [['a', 'b'], ['c', 'd']];
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
+ <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
+ <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
+ </div>
+ </div>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should alias index positions', function() {
+ var elements = element.all(by.css('.example-init'));
+ expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
+ expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
+ expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
+ expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
+ });
+ </file>
+ </example>
+ */
+var ngInitDirective = ngDirective({
+ priority: 450,
+ compile: function() {
+ return {
+ pre: function(scope, element, attrs) {
+ scope.$eval(attrs.ngInit);
+ }
+ };
+ }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngNonBindable
+ * @restrict AC
+ * @priority 1000
+ *
+ * @description
+ * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
+ * DOM element. This is useful if the element contains what appears to be Angular directives and
+ * bindings but which should be ignored by Angular. This could be the case if you have a site that
+ * displays snippets of code, for instance.
+ *
+ * @element ANY
+ *
+ * @example
+ * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
+ * but the one wrapped in `ngNonBindable` is left alone.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <div>Normal: {{1 + 2}}</div>
+ <div ng-non-bindable>Ignored: {{1 + 2}}</div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-non-bindable', function() {
+ expect(element(by.binding('1 + 2')).getText()).toContain('3');
+ expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
+ });
+ </file>
+ </example>
+ */
+var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
+
+/**
+ * @ngdoc directive
+ * @name ngPluralize
+ * @restrict EA
+ *
+ * @description
+ * `ngPluralize` is a directive that displays messages according to en-US localization rules.
+ * These rules are bundled with angular.js, but can be overridden
+ * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
+ * by specifying the mappings between
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * and the strings to be displayed.
+ *
+ * # Plural categories and explicit number rules
+ * There are two
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * in Angular's default en-US locale: "one" and "other".
+ *
+ * While a plural category may match many numbers (for example, in en-US locale, "other" can match
+ * any number that is not 1), an explicit number rule can only match one number. For example, the
+ * explicit number rule for "3" matches the number 3. There are examples of plural categories
+ * and explicit number rules throughout the rest of this documentation.
+ *
+ * # Configuring ngPluralize
+ * You configure ngPluralize by providing 2 attributes: `count` and `when`.
+ * You can also provide an optional attribute, `offset`.
+ *
+ * The value of the `count` attribute can be either a string or an {@link guide/expression
+ * Angular expression}; these are evaluated on the current scope for its bound value.
+ *
+ * The `when` attribute specifies the mappings between plural categories and the actual
+ * string to be displayed. The value of the attribute should be a JSON object.
+ *
+ * The following example shows how to configure ngPluralize:
+ *
+ * ```html
+ * <ng-pluralize count="personCount"
+ when="{'0': 'Nobody is viewing.',
+ * 'one': '1 person is viewing.',
+ * 'other': '{} people are viewing.'}">
+ * </ng-pluralize>
+ *```
+ *
+ * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
+ * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
+ * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
+ * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
+ * show "a dozen people are viewing".
+ *
+ * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
+ * into pluralized strings. In the previous example, Angular will replace `{}` with
+ * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
+ * for <span ng-non-bindable>{{numberExpression}}</span>.
+ *
+ * # Configuring ngPluralize with offset
+ * The `offset` attribute allows further customization of pluralized text, which can result in
+ * a better user experience. For example, instead of the message "4 people are viewing this document",
+ * you might display "John, Kate and 2 others are viewing this document".
+ * The offset attribute allows you to offset a number by any desired value.
+ * Let's take a look at an example:
+ *
+ * ```html
+ * <ng-pluralize count="personCount" offset=2
+ * when="{'0': 'Nobody is viewing.',
+ * '1': '{{person1}} is viewing.',
+ * '2': '{{person1}} and {{person2}} are viewing.',
+ * 'one': '{{person1}}, {{person2}} and one other person are viewing.',
+ * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+ * </ng-pluralize>
+ * ```
+ *
+ * Notice that we are still using two plural categories(one, other), but we added
+ * three explicit number rules 0, 1 and 2.
+ * When one person, perhaps John, views the document, "John is viewing" will be shown.
+ * When three people view the document, no explicit number rule is found, so
+ * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
+ * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
+ * is shown.
+ *
+ * Note that when you specify offsets, you must provide explicit number rules for
+ * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
+ * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
+ * plural categories "one" and "other".
+ *
+ * @param {string|expression} count The variable to be bound to.
+ * @param {string} when The mapping between plural category to its corresponding strings.
+ * @param {number=} offset Offset to deduct from the total number.
+ *
+ * @example
+ <example module="pluralizeExample">
+ <file name="index.html">
+ <script>
+ angular.module('pluralizeExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.person1 = 'Igor';
+ $scope.person2 = 'Misko';
+ $scope.personCount = 1;
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ Person 1:<input type="text" ng-model="person1" value="Igor" /><br/>
+ Person 2:<input type="text" ng-model="person2" value="Misko" /><br/>
+ Number of People:<input type="text" ng-model="personCount" value="1" /><br/>
+
+ <!--- Example with simple pluralization rules for en locale --->
+ Without Offset:
+ <ng-pluralize count="personCount"
+ when="{'0': 'Nobody is viewing.',
+ 'one': '1 person is viewing.',
+ 'other': '{} people are viewing.'}">
+ </ng-pluralize><br>
+
+ <!--- Example with offset --->
+ With Offset(2):
+ <ng-pluralize count="personCount" offset=2
+ when="{'0': 'Nobody is viewing.',
+ '1': '{{person1}} is viewing.',
+ '2': '{{person1}} and {{person2}} are viewing.',
+ 'one': '{{person1}}, {{person2}} and one other person are viewing.',
+ 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+ </ng-pluralize>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should show correct pluralized string', function() {
+ var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
+ var withOffset = element.all(by.css('ng-pluralize')).get(1);
+ var countInput = element(by.model('personCount'));
+
+ expect(withoutOffset.getText()).toEqual('1 person is viewing.');
+ expect(withOffset.getText()).toEqual('Igor is viewing.');
+
+ countInput.clear();
+ countInput.sendKeys('0');
+
+ expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
+ expect(withOffset.getText()).toEqual('Nobody is viewing.');
+
+ countInput.clear();
+ countInput.sendKeys('2');
+
+ expect(withoutOffset.getText()).toEqual('2 people are viewing.');
+ expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
+
+ countInput.clear();
+ countInput.sendKeys('3');
+
+ expect(withoutOffset.getText()).toEqual('3 people are viewing.');
+ expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
+
+ countInput.clear();
+ countInput.sendKeys('4');
+
+ expect(withoutOffset.getText()).toEqual('4 people are viewing.');
+ expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
+ });
+ it('should show data-bound names', function() {
+ var withOffset = element.all(by.css('ng-pluralize')).get(1);
+ var personCount = element(by.model('personCount'));
+ var person1 = element(by.model('person1'));
+ var person2 = element(by.model('person2'));
+ personCount.clear();
+ personCount.sendKeys('4');
+ person1.clear();
+ person1.sendKeys('Di');
+ person2.clear();
+ person2.sendKeys('Vojta');
+ expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
+ });
+ </file>
+ </example>
+ */
+var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {
+ var BRACE = /{}/g,
+ IS_WHEN = /^when(Minus)?(.+)$/;
+
+ return {
+ restrict: 'EA',
+ link: function(scope, element, attr) {
+ var numberExp = attr.count,
+ whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
+ offset = attr.offset || 0,
+ whens = scope.$eval(whenExp) || {},
+ whensExpFns = {},
+ startSymbol = $interpolate.startSymbol(),
+ endSymbol = $interpolate.endSymbol(),
+ braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
+ watchRemover = angular.noop,
+ lastCount;
+
+ forEach(attr, function(expression, attributeName) {
+ var tmpMatch = IS_WHEN.exec(attributeName);
+ if (tmpMatch) {
+ var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
+ whens[whenKey] = element.attr(attr.$attr[attributeName]);
+ }
+ });
+ forEach(whens, function(expression, key) {
+ whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
+
+ });
+
+ scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
+ var count = parseFloat(newVal);
+ var countIsNaN = isNaN(count);
+
+ if (!countIsNaN && !(count in whens)) {
+ // If an explicit number rule such as 1, 2, 3... is defined, just use it.
+ // Otherwise, check it against pluralization rules in $locale service.
+ count = $locale.pluralCat(count - offset);
+ }
+
+ // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
+ // In JS `NaN !== NaN`, so we have to exlicitly check.
+ if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) {
+ watchRemover();
+ watchRemover = scope.$watch(whensExpFns[count], updateElementText);
+ lastCount = count;
+ }
+ });
+
+ function updateElementText(newText) {
+ element.text(newText || '');
+ }
+ }
+ };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngRepeat
+ *
+ * @description
+ * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
+ * instance gets its own scope, where the given loop variable is set to the current collection item,
+ * and `$index` is set to the item index or key.
+ *
+ * Special properties are exposed on the local scope of each template instance, including:
+ *
+ * | Variable | Type | Details |
+ * |-----------|-----------------|-----------------------------------------------------------------------------|
+ * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) |
+ * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. |
+ * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
+ * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. |
+ * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
+ * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
+ *
+ * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
+ * This may be useful when, for instance, nesting ngRepeats.
+ *
+ * # Special repeat start and end points
+ * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
+ * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
+ * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
+ * up to and including the ending HTML tag where **ng-repeat-end** is placed.
+ *
+ * The example below makes use of this feature:
+ * ```html
+ * <header ng-repeat-start="item in items">
+ * Header {{ item }}
+ * </header>
+ * <div class="body">
+ * Body {{ item }}
+ * </div>
+ * <footer ng-repeat-end>
+ * Footer {{ item }}
+ * </footer>
+ * ```
+ *
+ * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
+ * ```html
+ * <header>
+ * Header A
+ * </header>
+ * <div class="body">
+ * Body A
+ * </div>
+ * <footer>
+ * Footer A
+ * </footer>
+ * <header>
+ * Header B
+ * </header>
+ * <div class="body">
+ * Body B
+ * </div>
+ * <footer>
+ * Footer B
+ * </footer>
+ * ```
+ *
+ * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
+ * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
+ *
+ * @animations
+ * **.enter** - when a new item is added to the list or when an item is revealed after a filter
+ *
+ * **.leave** - when an item is removed from the list or when an item is filtered out
+ *
+ * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
+ *
+ * @element ANY
+ * @scope
+ * @priority 1000
+ * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
+ * formats are currently supported:
+ *
+ * * `variable in expression` – where variable is the user defined loop variable and `expression`
+ * is a scope expression giving the collection to enumerate.
+ *
+ * For example: `album in artist.albums`.
+ *
+ * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
+ * and `expression` is the scope expression giving the collection to enumerate.
+ *
+ * For example: `(name, age) in {'adam':10, 'amalie':12}`.
+ *
+ * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
+ * which can be used to associate the objects in the collection with the DOM elements. If no tracking function
+ * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
+ * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are
+ * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression,
+ * before specifying a tracking expression.
+ *
+ * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
+ * will be associated by item identity in the array.
+ *
+ * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
+ * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
+ * with the corresponding item in the array by identity. Moving the same object in array would move the DOM
+ * element in the same way in the DOM.
+ *
+ * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
+ * case the object identity does not matter. Two objects are considered equivalent as long as their `id`
+ * property is same.
+ *
+ * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
+ * to items in conjunction with a tracking expression.
+ *
+ * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
+ * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
+ * when a filter is active on the repeater, but the filtered result set is empty.
+ *
+ * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
+ * the items have been processed through the filter.
+ *
+ * @example
+ * This example initializes the scope to a list of names and
+ * then uses `ngRepeat` to display every person:
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ <div ng-init="friends = [
+ {name:'John', age:25, gender:'boy'},
+ {name:'Jessie', age:30, gender:'girl'},
+ {name:'Johanna', age:28, gender:'girl'},
+ {name:'Joy', age:15, gender:'girl'},
+ {name:'Mary', age:28, gender:'girl'},
+ {name:'Peter', age:95, gender:'boy'},
+ {name:'Sebastian', age:50, gender:'boy'},
+ {name:'Erika', age:27, gender:'girl'},
+ {name:'Patrick', age:40, gender:'boy'},
+ {name:'Samantha', age:60, gender:'girl'}
+ ]">
+ I have {{friends.length}} friends. They are:
+ <input type="search" ng-model="q" placeholder="filter friends..." />
+ <ul class="example-animate-container">
+ <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
+ [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
+ </li>
+ <li class="animate-repeat" ng-if="results.length == 0">
+ <strong>No results found...</strong>
+ </li>
+ </ul>
+ </div>
+ </file>
+ <file name="animations.css">
+ .example-animate-container {
+ background:white;
+ border:1px solid black;
+ list-style:none;
+ margin:0;
+ padding:0 10px;
+ }
+
+ .animate-repeat {
+ line-height:40px;
+ list-style:none;
+ box-sizing:border-box;
+ }
+
+ .animate-repeat.ng-move,
+ .animate-repeat.ng-enter,
+ .animate-repeat.ng-leave {
+ -webkit-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+ }
+
+ .animate-repeat.ng-leave.ng-leave-active,
+ .animate-repeat.ng-move,
+ .animate-repeat.ng-enter {
+ opacity:0;
+ max-height:0;
+ }
+
+ .animate-repeat.ng-leave,
+ .animate-repeat.ng-move.ng-move-active,
+ .animate-repeat.ng-enter.ng-enter-active {
+ opacity:1;
+ max-height:40px;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var friends = element.all(by.repeater('friend in friends'));
+
+ it('should render initial data set', function() {
+ expect(friends.count()).toBe(10);
+ expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
+ expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
+ expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
+ expect(element(by.binding('friends.length')).getText())
+ .toMatch("I have 10 friends. They are:");
+ });
+
+ it('should update repeater when filter predicate changes', function() {
+ expect(friends.count()).toBe(10);
+
+ element(by.model('q')).sendKeys('ma');
+
+ expect(friends.count()).toBe(2);
+ expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
+ expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
+ });
+ </file>
+ </example>
+ */
+var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
+ var NG_REMOVED = '$$NG_REMOVED';
+ var ngRepeatMinErr = minErr('ngRepeat');
+
+ var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
+ // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
+ scope[valueIdentifier] = value;
+ if (keyIdentifier) scope[keyIdentifier] = key;
+ scope.$index = index;
+ scope.$first = (index === 0);
+ scope.$last = (index === (arrayLength - 1));
+ scope.$middle = !(scope.$first || scope.$last);
+ // jshint bitwise: false
+ scope.$odd = !(scope.$even = (index&1) === 0);
+ // jshint bitwise: true
+ };
+
+ var getBlockStart = function(block) {
+ return block.clone[0];
+ };
+
+ var getBlockEnd = function(block) {
+ return block.clone[block.clone.length - 1];
+ };
+
+
+ return {
+ restrict: 'A',
+ multiElement: true,
+ transclude: 'element',
+ priority: 1000,
+ terminal: true,
+ $$tlb: true,
+ compile: function ngRepeatCompile($element, $attr) {
+ var expression = $attr.ngRepeat;
+ var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
+
+ var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+
+ if (!match) {
+ throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
+ expression);
+ }
+
+ var lhs = match[1];
+ var rhs = match[2];
+ var aliasAs = match[3];
+ var trackByExp = match[4];
+
+ match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
+
+ if (!match) {
+ throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
+ lhs);
+ }
+ var valueIdentifier = match[3] || match[1];
+ var keyIdentifier = match[2];
+
+ if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
+ /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
+ throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
+ aliasAs);
+ }
+
+ var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
+ var hashFnLocals = {$id: hashKey};
+
+ if (trackByExp) {
+ trackByExpGetter = $parse(trackByExp);
+ } else {
+ trackByIdArrayFn = function(key, value) {
+ return hashKey(value);
+ };
+ trackByIdObjFn = function(key) {
+ return key;
+ };
+ }
+
+ return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
+
+ if (trackByExpGetter) {
+ trackByIdExpFn = function(key, value, index) {
+ // assign key, value, and $index to the locals so that they can be used in hash functions
+ if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
+ hashFnLocals[valueIdentifier] = value;
+ hashFnLocals.$index = index;
+ return trackByExpGetter($scope, hashFnLocals);
+ };
+ }
+
+ // Store a list of elements from previous run. This is a hash where key is the item from the
+ // iterator, and the value is objects with following properties.
+ // - scope: bound scope
+ // - element: previous element.
+ // - index: position
+ //
+ // We are using no-proto object so that we don't need to guard against inherited props via
+ // hasOwnProperty.
+ var lastBlockMap = createMap();
+
+ //watch props
+ $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
+ var index, length,
+ previousNode = $element[0], // node that cloned nodes should be inserted after
+ // initialized to the comment node anchor
+ nextNode,
+ // Same as lastBlockMap but it has the current state. It will become the
+ // lastBlockMap on the next iteration.
+ nextBlockMap = createMap(),
+ collectionLength,
+ key, value, // key/value of iteration
+ trackById,
+ trackByIdFn,
+ collectionKeys,
+ block, // last object information {scope, element, id}
+ nextBlockOrder,
+ elementsToRemove;
+
+ if (aliasAs) {
+ $scope[aliasAs] = collection;
+ }
+
+ if (isArrayLike(collection)) {
+ collectionKeys = collection;
+ trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
+ } else {
+ trackByIdFn = trackByIdExpFn || trackByIdObjFn;
+ // if object, extract keys, sort them and use to determine order of iteration over obj props
+ collectionKeys = [];
+ for (var itemKey in collection) {
+ if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') {
+ collectionKeys.push(itemKey);
+ }
+ }
+ collectionKeys.sort();
+ }
+
+ collectionLength = collectionKeys.length;
+ nextBlockOrder = new Array(collectionLength);
+
+ // locate existing items
+ for (index = 0; index < collectionLength; index++) {
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
+ value = collection[key];
+ trackById = trackByIdFn(key, value, index);
+ if (lastBlockMap[trackById]) {
+ // found previously seen block
+ block = lastBlockMap[trackById];
+ delete lastBlockMap[trackById];
+ nextBlockMap[trackById] = block;
+ nextBlockOrder[index] = block;
+ } else if (nextBlockMap[trackById]) {
+ // if collision detected. restore lastBlockMap and throw an error
+ forEach(nextBlockOrder, function(block) {
+ if (block && block.scope) lastBlockMap[block.id] = block;
+ });
+ throw ngRepeatMinErr('dupes',
+ "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
+ expression, trackById, value);
+ } else {
+ // new never before seen block
+ nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
+ nextBlockMap[trackById] = true;
+ }
+ }
+
+ // remove leftover items
+ for (var blockKey in lastBlockMap) {
+ block = lastBlockMap[blockKey];
+ elementsToRemove = getBlockNodes(block.clone);
+ $animate.leave(elementsToRemove);
+ if (elementsToRemove[0].parentNode) {
+ // if the element was not removed yet because of pending animation, mark it as deleted
+ // so that we can ignore it later
+ for (index = 0, length = elementsToRemove.length; index < length; index++) {
+ elementsToRemove[index][NG_REMOVED] = true;
+ }
+ }
+ block.scope.$destroy();
+ }
+
+ // we are not using forEach for perf reasons (trying to avoid #call)
+ for (index = 0; index < collectionLength; index++) {
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
+ value = collection[key];
+ block = nextBlockOrder[index];
+
+ if (block.scope) {
+ // if we have already seen this object, then we need to reuse the
+ // associated scope/element
+
+ nextNode = previousNode;
+
+ // skip nodes that are already pending removal via leave animation
+ do {
+ nextNode = nextNode.nextSibling;
+ } while (nextNode && nextNode[NG_REMOVED]);
+
+ if (getBlockStart(block) != nextNode) {
+ // existing item which got moved
+ $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
+ }
+ previousNode = getBlockEnd(block);
+ updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+ } else {
+ // new item which we don't know about
+ $transclude(function ngRepeatTransclude(clone, scope) {
+ block.scope = scope;
+ // http://jsperf.com/clone-vs-createcomment
+ var endNode = ngRepeatEndComment.cloneNode(false);
+ clone[clone.length++] = endNode;
+
+ // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
+ $animate.enter(clone, null, jqLite(previousNode));
+ previousNode = endNode;
+ // Note: We only need the first/last node of the cloned nodes.
+ // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+ // by a directive with templateUrl when its template arrives.
+ block.clone = clone;
+ nextBlockMap[block.id] = block;
+ updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+ });
+ }
+ }
+ lastBlockMap = nextBlockMap;
+ });
+ };
+ }
+ };
+}];
+
+var NG_HIDE_CLASS = 'ng-hide';
+var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
+/**
+ * @ngdoc directive
+ * @name ngShow
+ *
+ * @description
+ * The `ngShow` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
+ * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is visible) -->
+ * <div ng-show="myValue"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is hidden) -->
+ * <div ng-show="myValue" class="ng-hide"></div>
+ * ```
+ *
+ * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class in CSS:
+ *
+ * ```css
+ * .ng-hide {
+ * /&#42; this is just another form of hiding an element &#42;/
+ * display: block!important;
+ * position: absolute;
+ * top: -9999px;
+ * left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngShow`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass except that
+ * you must also include the !important flag to override the display property
+ * so that you can perform an animation when the element is hidden during the time of the animation.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ * /&#42; this is required as of 1.3x to properly
+ * apply all styling in a show/hide animation &#42;/
+ * transition: 0s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add-active,
+ * .my-element.ng-hide-remove-active {
+ * /&#42; the transition is defined in the active class &#42;/
+ * transition: 1s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
+ * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
+ *
+ * @element ANY
+ * @param {expression} ngShow If the {@link guide/expression expression} is truthy
+ * then the element is shown or hidden respectively.
+ *
+ * @example
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked"><br/>
+ <div>
+ Show:
+ <div class="check-element animate-show" ng-show="checked">
+ <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+ </div>
+ </div>
+ <div>
+ Hide:
+ <div class="check-element animate-show" ng-hide="checked">
+ <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+ </div>
+ </div>
+ </file>
+ <file name="glyphicons.css">
+ @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+ </file>
+ <file name="animations.css">
+ .animate-show {
+ line-height: 20px;
+ opacity: 1;
+ padding: 10px;
+ border: 1px solid black;
+ background: white;
+ }
+
+ .animate-show.ng-hide-add.ng-hide-add-active,
+ .animate-show.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transition: all linear 0.5s;
+ transition: all linear 0.5s;
+ }
+
+ .animate-show.ng-hide {
+ line-height: 0;
+ opacity: 0;
+ padding: 0 10px;
+ }
+
+ .check-element {
+ padding: 10px;
+ border: 1px solid black;
+ background: white;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+ var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+ it('should check ng-show / ng-hide', function() {
+ expect(thumbsUp.isDisplayed()).toBeFalsy();
+ expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+ element(by.model('checked')).click();
+
+ expect(thumbsUp.isDisplayed()).toBeTruthy();
+ expect(thumbsDown.isDisplayed()).toBeFalsy();
+ });
+ </file>
+ </example>
+ */
+var ngShowDirective = ['$animate', function($animate) {
+ return {
+ restrict: 'A',
+ multiElement: true,
+ link: function(scope, element, attr) {
+ scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
+ // we're adding a temporary, animation-specific class for ng-hide since this way
+ // we can control when the element is actually displayed on screen without having
+ // to have a global/greedy CSS selector that breaks when other animations are run.
+ // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
+ $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
+ tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+ });
+ });
+ }
+ };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngHide
+ *
+ * @description
+ * The `ngHide` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
+ * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is hidden) -->
+ * <div ng-hide="myValue" class="ng-hide"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is visible) -->
+ * <div ng-hide="myValue"></div>
+ * ```
+ *
+ * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class in CSS:
+ *
+ * ```css
+ * .ng-hide {
+ * /&#42; this is just another form of hiding an element &#42;/
+ * display: block!important;
+ * position: absolute;
+ * top: -9999px;
+ * left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngHide`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
+ * CSS class is added and removed for you instead of your own CSS class.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ * transition: 0.5s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
+ * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
+ *
+ * @element ANY
+ * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
+ * the element is shown or hidden respectively.
+ *
+ * @example
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked"><br/>
+ <div>
+ Show:
+ <div class="check-element animate-hide" ng-show="checked">
+ <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+ </div>
+ </div>
+ <div>
+ Hide:
+ <div class="check-element animate-hide" ng-hide="checked">
+ <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+ </div>
+ </div>
+ </file>
+ <file name="glyphicons.css">
+ @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+ </file>
+ <file name="animations.css">
+ .animate-hide {
+ -webkit-transition: all linear 0.5s;
+ transition: all linear 0.5s;
+ line-height: 20px;
+ opacity: 1;
+ padding: 10px;
+ border: 1px solid black;
+ background: white;
+ }
+
+ .animate-hide.ng-hide {
+ line-height: 0;
+ opacity: 0;
+ padding: 0 10px;
+ }
+
+ .check-element {
+ padding: 10px;
+ border: 1px solid black;
+ background: white;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+ var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+ it('should check ng-show / ng-hide', function() {
+ expect(thumbsUp.isDisplayed()).toBeFalsy();
+ expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+ element(by.model('checked')).click();
+
+ expect(thumbsUp.isDisplayed()).toBeTruthy();
+ expect(thumbsDown.isDisplayed()).toBeFalsy();
+ });
+ </file>
+ </example>
+ */
+var ngHideDirective = ['$animate', function($animate) {
+ return {
+ restrict: 'A',
+ multiElement: true,
+ link: function(scope, element, attr) {
+ scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
+ // The comment inside of the ngShowDirective explains why we add and
+ // remove a temporary class for the show/hide animation
+ $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
+ tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+ });
+ });
+ }
+ };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngStyle
+ * @restrict AC
+ *
+ * @description
+ * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
+ *
+ * @element ANY
+ * @param {expression} ngStyle
+ *
+ * {@link guide/expression Expression} which evals to an
+ * object whose keys are CSS style names and values are corresponding values for those CSS
+ * keys.
+ *
+ * Since some CSS style names are not valid keys for an object, they must be quoted.
+ * See the 'background-color' style in the example below.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <input type="button" value="set color" ng-click="myStyle={color:'red'}">
+ <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
+ <input type="button" value="clear" ng-click="myStyle={}">
+ <br/>
+ <span ng-style="myStyle">Sample Text</span>
+ <pre>myStyle={{myStyle}}</pre>
+ </file>
+ <file name="style.css">
+ span {
+ color: black;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var colorSpan = element(by.css('span'));
+
+ it('should check ng-style', function() {
+ expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+ element(by.css('input[value=\'set color\']')).click();
+ expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
+ element(by.css('input[value=clear]')).click();
+ expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+ });
+ </file>
+ </example>
+ */
+var ngStyleDirective = ngDirective(function(scope, element, attr) {
+ scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
+ if (oldStyles && (newStyles !== oldStyles)) {
+ forEach(oldStyles, function(val, style) { element.css(style, '');});
+ }
+ if (newStyles) element.css(newStyles);
+ }, true);
+});
+
+/**
+ * @ngdoc directive
+ * @name ngSwitch
+ * @restrict EA
+ *
+ * @description
+ * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
+ * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
+ * as specified in the template.
+ *
+ * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
+ * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
+ * matches the value obtained from the evaluated expression. In other words, you define a container element
+ * (where you place the directive), place an expression on the **`on="..."` attribute**
+ * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
+ * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
+ * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
+ * attribute is displayed.
+ *
+ * <div class="alert alert-info">
+ * Be aware that the attribute values to match against cannot be expressions. They are interpreted
+ * as literal string values to match against.
+ * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
+ * value of the expression `$scope.someVal`.
+ * </div>
+
+ * @animations
+ * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
+ * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
+ *
+ * @usage
+ *
+ * ```
+ * <ANY ng-switch="expression">
+ * <ANY ng-switch-when="matchValue1">...</ANY>
+ * <ANY ng-switch-when="matchValue2">...</ANY>
+ * <ANY ng-switch-default>...</ANY>
+ * </ANY>
+ * ```
+ *
+ *
+ * @scope
+ * @priority 1200
+ * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
+ * On child elements add:
+ *
+ * * `ngSwitchWhen`: the case statement to match against. If match then this
+ * case will be displayed. If the same match appears multiple times, all the
+ * elements will be displayed.
+ * * `ngSwitchDefault`: the default case when no other case match. If there
+ * are multiple default cases, all of them will be displayed when no other
+ * case match.
+ *
+ *
+ * @example
+ <example module="switchExample" deps="angular-animate.js" animations="true">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <select ng-model="selection" ng-options="item for item in items">
+ </select>
+ <tt>selection={{selection}}</tt>
+ <hr/>
+ <div class="animate-switch-container"
+ ng-switch on="selection">
+ <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
+ <div class="animate-switch" ng-switch-when="home">Home Span</div>
+ <div class="animate-switch" ng-switch-default>default</div>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('switchExample', ['ngAnimate'])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.items = ['settings', 'home', 'other'];
+ $scope.selection = $scope.items[0];
+ }]);
+ </file>
+ <file name="animations.css">
+ .animate-switch-container {
+ position:relative;
+ background:white;
+ border:1px solid black;
+ height:40px;
+ overflow:hidden;
+ }
+
+ .animate-switch {
+ padding:10px;
+ }
+
+ .animate-switch.ng-animate {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ }
+
+ .animate-switch.ng-leave.ng-leave-active,
+ .animate-switch.ng-enter {
+ top:-50px;
+ }
+ .animate-switch.ng-leave,
+ .animate-switch.ng-enter.ng-enter-active {
+ top:0;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ var switchElem = element(by.css('[ng-switch]'));
+ var select = element(by.model('selection'));
+
+ it('should start in settings', function() {
+ expect(switchElem.getText()).toMatch(/Settings Div/);
+ });
+ it('should change to home', function() {
+ select.all(by.css('option')).get(1).click();
+ expect(switchElem.getText()).toMatch(/Home Span/);
+ });
+ it('should select default', function() {
+ select.all(by.css('option')).get(2).click();
+ expect(switchElem.getText()).toMatch(/default/);
+ });
+ </file>
+ </example>
+ */
+var ngSwitchDirective = ['$animate', function($animate) {
+ return {
+ restrict: 'EA',
+ require: 'ngSwitch',
+
+ // asks for $scope to fool the BC controller module
+ controller: ['$scope', function ngSwitchController() {
+ this.cases = {};
+ }],
+ link: function(scope, element, attr, ngSwitchController) {
+ var watchExpr = attr.ngSwitch || attr.on,
+ selectedTranscludes = [],
+ selectedElements = [],
+ previousLeaveAnimations = [],
+ selectedScopes = [];
+
+ var spliceFactory = function(array, index) {
+ return function() { array.splice(index, 1); };
+ };
+
+ scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
+ var i, ii;
+ for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
+ $animate.cancel(previousLeaveAnimations[i]);
+ }
+ previousLeaveAnimations.length = 0;
+
+ for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
+ var selected = getBlockNodes(selectedElements[i].clone);
+ selectedScopes[i].$destroy();
+ var promise = previousLeaveAnimations[i] = $animate.leave(selected);
+ promise.then(spliceFactory(previousLeaveAnimations, i));
+ }
+
+ selectedElements.length = 0;
+ selectedScopes.length = 0;
+
+ if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
+ forEach(selectedTranscludes, function(selectedTransclude) {
+ selectedTransclude.transclude(function(caseElement, selectedScope) {
+ selectedScopes.push(selectedScope);
+ var anchor = selectedTransclude.element;
+ caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
+ var block = { clone: caseElement };
+
+ selectedElements.push(block);
+ $animate.enter(caseElement, anchor.parent(), anchor);
+ });
+ });
+ }
+ });
+ }
+ };
+}];
+
+var ngSwitchWhenDirective = ngDirective({
+ transclude: 'element',
+ priority: 1200,
+ require: '^ngSwitch',
+ multiElement: true,
+ link: function(scope, element, attrs, ctrl, $transclude) {
+ ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
+ ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
+ }
+});
+
+var ngSwitchDefaultDirective = ngDirective({
+ transclude: 'element',
+ priority: 1200,
+ require: '^ngSwitch',
+ multiElement: true,
+ link: function(scope, element, attr, ctrl, $transclude) {
+ ctrl.cases['?'] = (ctrl.cases['?'] || []);
+ ctrl.cases['?'].push({ transclude: $transclude, element: element });
+ }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngTransclude
+ * @restrict EAC
+ *
+ * @description
+ * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
+ *
+ * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
+ *
+ * @element ANY
+ *
+ * @example
+ <example module="transcludeExample">
+ <file name="index.html">
+ <script>
+ angular.module('transcludeExample', [])
+ .directive('pane', function(){
+ return {
+ restrict: 'E',
+ transclude: true,
+ scope: { title:'@' },
+ template: '<div style="border: 1px solid black;">' +
+ '<div style="background-color: gray">{{title}}</div>' +
+ '<ng-transclude></ng-transclude>' +
+ '</div>'
+ };
+ })
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.title = 'Lorem Ipsum';
+ $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <input ng-model="title"> <br/>
+ <textarea ng-model="text"></textarea> <br/>
+ <pane title="{{title}}">{{text}}</pane>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should have transcluded', function() {
+ var titleElement = element(by.model('title'));
+ titleElement.clear();
+ titleElement.sendKeys('TITLE');
+ var textElement = element(by.model('text'));
+ textElement.clear();
+ textElement.sendKeys('TEXT');
+ expect(element(by.binding('title')).getText()).toEqual('TITLE');
+ expect(element(by.binding('text')).getText()).toEqual('TEXT');
+ });
+ </file>
+ </example>
+ *
+ */
+var ngTranscludeDirective = ngDirective({
+ restrict: 'EAC',
+ link: function($scope, $element, $attrs, controller, $transclude) {
+ if (!$transclude) {
+ throw minErr('ngTransclude')('orphan',
+ 'Illegal use of ngTransclude directive in the template! ' +
+ 'No parent directive that requires a transclusion found. ' +
+ 'Element: {0}',
+ startingTag($element));
+ }
+
+ $transclude(function(clone) {
+ $element.empty();
+ $element.append(clone);
+ });
+ }
+});
+
+/**
+ * @ngdoc directive
+ * @name script
+ * @restrict E
+ *
+ * @description
+ * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
+ * template can be used by {@link ng.directive:ngInclude `ngInclude`},
+ * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
+ * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
+ * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
+ *
+ * @param {string} type Must be set to `'text/ng-template'`.
+ * @param {string} id Cache name of the template.
+ *
+ * @example
+ <example>
+ <file name="index.html">
+ <script type="text/ng-template" id="/tpl.html">
+ Content of the template.
+ </script>
+
+ <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
+ <div id="tpl-content" ng-include src="currentTpl"></div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should load template defined inside script tag', function() {
+ element(by.css('#tpl-link')).click();
+ expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
+ });
+ </file>
+ </example>
+ */
+var scriptDirective = ['$templateCache', function($templateCache) {
+ return {
+ restrict: 'E',
+ terminal: true,
+ compile: function(element, attr) {
+ if (attr.type == 'text/ng-template') {
+ var templateUrl = attr.id,
+ text = element[0].text;
+
+ $templateCache.put(templateUrl, text);
+ }
+ }
+ };
+}];
+
+var ngOptionsMinErr = minErr('ngOptions');
+/**
+ * @ngdoc directive
+ * @name select
+ * @restrict E
+ *
+ * @description
+ * HTML `SELECT` element with angular data-binding.
+ *
+ * # `ngOptions`
+ *
+ * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
+ * elements for the `<select>` element using the array or object obtained by evaluating the
+ * `ngOptions` comprehension expression.
+ *
+ * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
+ * similar result. However, `ngOptions` provides some benefits such as reducing memory and
+ * increasing speed by not creating a new scope for each repeated instance, as well as providing
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound
+ * to a non-string value. This is because an option element can only be bound to string values at
+ * present.
+ *
+ * When an item in the `<select>` menu is selected, the array element or object property
+ * represented by the selected option will be bound to the model identified by the `ngModel`
+ * directive.
+ *
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
+ * option. See example below for demonstration.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
+ * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
+ * </div>
+ *
+ * ## `select` **`as`**
+ *
+ * Using `select` **`as`** will bind the result of the `select` expression to the model, but
+ * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
+ * or property name (for object data sources) of the value within the collection. If a **`track by`** expression
+ * is used, the result of that expression will be set as the value of the `option` and `select` elements.
+ *
+ *
+ * ### `select` **`as`** and **`track by`**
+ *
+ * <div class="alert alert-warning">
+ * Do not use `select` **`as`** and **`track by`** in the same expression. They are not designed to work together.
+ * </div>
+ *
+ * Consider the following example:
+ *
+ * ```html
+ * <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
+ * ```
+ *
+ * ```js
+ * $scope.values = [{
+ * id: 1,
+ * label: 'aLabel',
+ * subItem: { name: 'aSubItem' }
+ * }, {
+ * id: 2,
+ * label: 'bLabel',
+ * subItem: { name: 'bSubItem' }
+ * }];
+ *
+ * $scope.selected = { name: 'aSubItem' };
+ * ```
+ *
+ * With the purpose of preserving the selection, the **`track by`** expression is always applied to the element
+ * of the data source (to `item` in this example). To calculate whether an element is selected, we do the
+ * following:
+ *
+ * 1. Apply **`track by`** to the elements in the array. In the example: `[1, 2]`
+ * 2. Apply **`track by`** to the already selected value in `ngModel`.
+ * In the example: this is not possible as **`track by`** refers to `item.id`, but the selected
+ * value from `ngModel` is `{name: 'aSubItem'}`, so the **`track by`** expression is applied to
+ * a wrong object, the selected element can't be found, `<select>` is always reset to the "not
+ * selected" option.
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required The control is considered valid only if value is entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {comprehension_expression=} ngOptions in one of the following forms:
+ *
+ * * for array data sources:
+ * * `label` **`for`** `value` **`in`** `array`
+ * * `select` **`as`** `label` **`for`** `value` **`in`** `array`
+ * * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
+ * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
+ * * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr`
+ * (for including a filter with `track by`)
+ * * for object data sources:
+ * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
+ * * `select` **`as`** `label` **`group by`** `group`
+ * **`for` `(`**`key`**`,`** `value`**`) in`** `object`
+ *
+ * Where:
+ *
+ * * `array` / `object`: an expression which evaluates to an array / object to iterate over.
+ * * `value`: local variable which will refer to each item in the `array` or each property value
+ * of `object` during iteration.
+ * * `key`: local variable which will refer to a property name in `object` during iteration.
+ * * `label`: The result of this expression will be the label for `<option>` element. The
+ * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
+ * * `select`: The result of this expression will be bound to the model of the parent `<select>`
+ * element. If not specified, `select` expression will default to `value`.
+ * * `group`: The result of this expression will be used to group options using the `<optgroup>`
+ * DOM element.
+ * * `trackexpr`: Used when working with an array of objects. The result of this expression will be
+ * used to identify the objects in the array. The `trackexpr` will most likely refer to the
+ * `value` variable (e.g. `value.propertyName`). With this the selection is preserved
+ * even when the options are recreated (e.g. reloaded from the server).
+ *
+ * @example
+ <example module="selectExample">
+ <file name="index.html">
+ <script>
+ angular.module('selectExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.colors = [
+ {name:'black', shade:'dark'},
+ {name:'white', shade:'light'},
+ {name:'red', shade:'dark'},
+ {name:'blue', shade:'dark'},
+ {name:'yellow', shade:'light'}
+ ];
+ $scope.myColor = $scope.colors[2]; // red
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <ul>
+ <li ng-repeat="color in colors">
+ Name: <input ng-model="color.name">
+ [<a href ng-click="colors.splice($index, 1)">X</a>]
+ </li>
+ <li>
+ [<a href ng-click="colors.push({})">add</a>]
+ </li>
+ </ul>
+ <hr/>
+ Color (null not allowed):
+ <select ng-model="myColor" ng-options="color.name for color in colors"></select><br>
+
+ Color (null allowed):
+ <span class="nullable">
+ <select ng-model="myColor" ng-options="color.name for color in colors">
+ <option value="">-- choose color --</option>
+ </select>
+ </span><br/>
+
+ Color grouped by shade:
+ <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
+ </select><br/>
+
+
+ Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br>
+ <hr/>
+ Currently selected: {{ {selected_color:myColor} }}
+ <div style="border:solid 1px black; height:20px"
+ ng-style="{'background-color':myColor.name}">
+ </div>
+ </div>
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ng-options', function() {
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
+ element.all(by.model('myColor')).first().click();
+ element.all(by.css('select[ng-model="myColor"] option')).first().click();
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
+ element(by.css('.nullable select[ng-model="myColor"]')).click();
+ element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
+ });
+ </file>
+ </example>
+ */
+
+var ngOptionsDirective = valueFn({
+ restrict: 'A',
+ terminal: true
+});
+
+// jshint maxlen: false
+var selectDirective = ['$compile', '$parse', function($compile, $parse) {
+ //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
+ var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
+ nullModelCtrl = {$setViewValue: noop};
+// jshint maxlen: 100
+
+ return {
+ restrict: 'E',
+ require: ['select', '?ngModel'],
+ controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
+ var self = this,
+ optionsMap = {},
+ ngModelCtrl = nullModelCtrl,
+ nullOption,
+ unknownOption;
+
+
+ self.databound = $attrs.ngModel;
+
+
+ self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {
+ ngModelCtrl = ngModelCtrl_;
+ nullOption = nullOption_;
+ unknownOption = unknownOption_;
+ };
+
+
+ self.addOption = function(value, element) {
+ assertNotHasOwnProperty(value, '"option value"');
+ optionsMap[value] = true;
+
+ if (ngModelCtrl.$viewValue == value) {
+ $element.val(value);
+ if (unknownOption.parent()) unknownOption.remove();
+ }
+ // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
+ // Adding an <option selected="selected"> element to a <select required="required"> should
+ // automatically select the new element
+ if (element && element[0].hasAttribute('selected')) {
+ element[0].selected = true;
+ }
+ };
+
+
+ self.removeOption = function(value) {
+ if (this.hasOption(value)) {
+ delete optionsMap[value];
+ if (ngModelCtrl.$viewValue === value) {
+ this.renderUnknownOption(value);
+ }
+ }
+ };
+
+
+ self.renderUnknownOption = function(val) {
+ var unknownVal = '? ' + hashKey(val) + ' ?';
+ unknownOption.val(unknownVal);
+ $element.prepend(unknownOption);
+ $element.val(unknownVal);
+ unknownOption.prop('selected', true); // needed for IE
+ };
+
+
+ self.hasOption = function(value) {
+ return optionsMap.hasOwnProperty(value);
+ };
+
+ $scope.$on('$destroy', function() {
+ // disable unknown option so that we don't do work when the whole select is being destroyed
+ self.renderUnknownOption = noop;
+ });
+ }],
+
+ link: function(scope, element, attr, ctrls) {
+ // if ngModel is not defined, we don't need to do anything
+ if (!ctrls[1]) return;
+
+ var selectCtrl = ctrls[0],
+ ngModelCtrl = ctrls[1],
+ multiple = attr.multiple,
+ optionsExp = attr.ngOptions,
+ nullOption = false, // if false, user will not be able to select it (used by ngOptions)
+ emptyOption,
+ renderScheduled = false,
+ // we can't just jqLite('<option>') since jqLite is not smart enough
+ // to create it in <select> and IE barfs otherwise.
+ optionTemplate = jqLite(document.createElement('option')),
+ optGroupTemplate =jqLite(document.createElement('optgroup')),
+ unknownOption = optionTemplate.clone();
+
+ // find "null" option
+ for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
+ if (children[i].value === '') {
+ emptyOption = nullOption = children.eq(i);
+ break;
+ }
+ }
+
+ selectCtrl.init(ngModelCtrl, nullOption, unknownOption);
+
+ // required validator
+ if (multiple) {
+ ngModelCtrl.$isEmpty = function(value) {
+ return !value || value.length === 0;
+ };
+ }
+
+ if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);
+ else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);
+ else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);
+
+
+ ////////////////////////////
+
+
+
+ function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {
+ ngModelCtrl.$render = function() {
+ var viewValue = ngModelCtrl.$viewValue;
+
+ if (selectCtrl.hasOption(viewValue)) {
+ if (unknownOption.parent()) unknownOption.remove();
+ selectElement.val(viewValue);
+ if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy
+ } else {
+ if (isUndefined(viewValue) && emptyOption) {
+ selectElement.val('');
+ } else {
+ selectCtrl.renderUnknownOption(viewValue);
+ }
+ }
+ };
+
+ selectElement.on('change', function() {
+ scope.$apply(function() {
+ if (unknownOption.parent()) unknownOption.remove();
+ ngModelCtrl.$setViewValue(selectElement.val());
+ });
+ });
+ }
+
+ function setupAsMultiple(scope, selectElement, ctrl) {
+ var lastView;
+ ctrl.$render = function() {
+ var items = new HashMap(ctrl.$viewValue);
+ forEach(selectElement.find('option'), function(option) {
+ option.selected = isDefined(items.get(option.value));
+ });
+ };
+
+ // we have to do it on each watch since ngModel watches reference, but
+ // we need to work of an array, so we need to see if anything was inserted/removed
+ scope.$watch(function selectMultipleWatch() {
+ if (!equals(lastView, ctrl.$viewValue)) {
+ lastView = shallowCopy(ctrl.$viewValue);
+ ctrl.$render();
+ }
+ });
+
+ selectElement.on('change', function() {
+ scope.$apply(function() {
+ var array = [];
+ forEach(selectElement.find('option'), function(option) {
+ if (option.selected) {
+ array.push(option.value);
+ }
+ });
+ ctrl.$setViewValue(array);
+ });
+ });
+ }
+
+ function setupAsOptions(scope, selectElement, ctrl) {
+ var match;
+
+ if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {
+ throw ngOptionsMinErr('iexp',
+ "Expected expression in form of " +
+ "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
+ " but got '{0}'. Element: {1}",
+ optionsExp, startingTag(selectElement));
+ }
+
+ var displayFn = $parse(match[2] || match[1]),
+ valueName = match[4] || match[6],
+ selectAs = / as /.test(match[0]) && match[1],
+ selectAsFn = selectAs ? $parse(selectAs) : null,
+ keyName = match[5],
+ groupByFn = $parse(match[3] || ''),
+ valueFn = $parse(match[2] ? match[1] : valueName),
+ valuesFn = $parse(match[7]),
+ track = match[8],
+ trackFn = track ? $parse(match[8]) : null,
+ trackKeysCache = {},
+ // This is an array of array of existing option groups in DOM.
+ // We try to reuse these if possible
+ // - optionGroupsCache[0] is the options with no option group
+ // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element
+ optionGroupsCache = [[{element: selectElement, label:''}]],
+ //re-usable object to represent option's locals
+ locals = {};
+
+ if (nullOption) {
+ // compile the element since there might be bindings in it
+ $compile(nullOption)(scope);
+
+ // remove the class, which is added automatically because we recompile the element and it
+ // becomes the compilation root
+ nullOption.removeClass('ng-scope');
+
+ // we need to remove it before calling selectElement.empty() because otherwise IE will
+ // remove the label from the element. wtf?
+ nullOption.remove();
+ }
+
+ // clear contents, we'll add what's needed based on the model
+ selectElement.empty();
+
+ selectElement.on('change', selectionChanged);
+
+ ctrl.$render = render;
+
+ scope.$watchCollection(valuesFn, scheduleRendering);
+ scope.$watchCollection(getLabels, scheduleRendering);
+
+ if (multiple) {
+ scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering);
+ }
+
+ // ------------------------------------------------------------------ //
+
+ function callExpression(exprFn, key, value) {
+ locals[valueName] = value;
+ if (keyName) locals[keyName] = key;
+ return exprFn(scope, locals);
+ }
+
+ function selectionChanged() {
+ scope.$apply(function() {
+ var collection = valuesFn(scope) || [];
+ var viewValue;
+ if (multiple) {
+ viewValue = [];
+ forEach(selectElement.val(), function(selectedKey) {
+ selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey;
+ viewValue.push(getViewValue(selectedKey, collection[selectedKey]));
+ });
+ } else {
+ var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val();
+ viewValue = getViewValue(selectedKey, collection[selectedKey]);
+ }
+ ctrl.$setViewValue(viewValue);
+ render();
+ });
+ }
+
+ function getViewValue(key, value) {
+ if (key === '?') {
+ return undefined;
+ } else if (key === '') {
+ return null;
+ } else {
+ var viewValueFn = selectAsFn ? selectAsFn : valueFn;
+ return callExpression(viewValueFn, key, value);
+ }
+ }
+
+ function getLabels() {
+ var values = valuesFn(scope);
+ var toDisplay;
+ if (values && isArray(values)) {
+ toDisplay = new Array(values.length);
+ for (var i = 0, ii = values.length; i < ii; i++) {
+ toDisplay[i] = callExpression(displayFn, i, values[i]);
+ }
+ return toDisplay;
+ } else if (values) {
+ // TODO: Add a test for this case
+ toDisplay = {};
+ for (var prop in values) {
+ if (values.hasOwnProperty(prop)) {
+ toDisplay[prop] = callExpression(displayFn, prop, values[prop]);
+ }
+ }
+ }
+ return toDisplay;
+ }
+
+ function createIsSelectedFn(viewValue) {
+ var selectedSet;
+ if (multiple) {
+ if (trackFn && isArray(viewValue)) {
+
+ selectedSet = new HashMap([]);
+ for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) {
+ // tracking by key
+ selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true);
+ }
+ } else {
+ selectedSet = new HashMap(viewValue);
+ }
+ } else if (trackFn) {
+ viewValue = callExpression(trackFn, null, viewValue);
+ }
+
+ return function isSelected(key, value) {
+ var compareValueFn;
+ if (trackFn) {
+ compareValueFn = trackFn;
+ } else if (selectAsFn) {
+ compareValueFn = selectAsFn;
+ } else {
+ compareValueFn = valueFn;
+ }
+
+ if (multiple) {
+ return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));
+ } else {
+ return viewValue === callExpression(compareValueFn, key, value);
+ }
+ };
+ }
+
+ function scheduleRendering() {
+ if (!renderScheduled) {
+ scope.$$postDigest(render);
+ renderScheduled = true;
+ }
+ }
+
+ /**
+ * A new labelMap is created with each render.
+ * This function is called for each existing option with added=false,
+ * and each new option with added=true.
+ * - Labels that are passed to this method twice,
+ * (once with added=true and once with added=false) will end up with a value of 0, and
+ * will cause no change to happen to the corresponding option.
+ * - Labels that are passed to this method only once with added=false will end up with a
+ * value of -1 and will eventually be passed to selectCtrl.removeOption()
+ * - Labels that are passed to this method only once with added=true will end up with a
+ * value of 1 and will eventually be passed to selectCtrl.addOption()
+ */
+ function updateLabelMap(labelMap, label, added) {
+ labelMap[label] = labelMap[label] || 0;
+ labelMap[label] += (added ? 1 : -1);
+ }
+
+ function render() {
+ renderScheduled = false;
+
+ // Temporary location for the option groups before we render them
+ var optionGroups = {'':[]},
+ optionGroupNames = [''],
+ optionGroupName,
+ optionGroup,
+ option,
+ existingParent, existingOptions, existingOption,
+ viewValue = ctrl.$viewValue,
+ values = valuesFn(scope) || [],
+ keys = keyName ? sortedKeys(values) : values,
+ key,
+ value,
+ groupLength, length,
+ groupIndex, index,
+ labelMap = {},
+ selected,
+ isSelected = createIsSelectedFn(viewValue),
+ anySelected = false,
+ lastElement,
+ element,
+ label,
+ optionId;
+
+ trackKeysCache = {};
+
+ // We now build up the list of options we need (we merge later)
+ for (index = 0; length = keys.length, index < length; index++) {
+ key = index;
+ if (keyName) {
+ key = keys[index];
+ if (key.charAt(0) === '$') continue;
+ }
+ value = values[key];
+
+ optionGroupName = callExpression(groupByFn, key, value) || '';
+ if (!(optionGroup = optionGroups[optionGroupName])) {
+ optionGroup = optionGroups[optionGroupName] = [];
+ optionGroupNames.push(optionGroupName);
+ }
+
+ selected = isSelected(key, value);
+ anySelected = anySelected || selected;
+
+ label = callExpression(displayFn, key, value); // what will be seen by the user
+
+ // doing displayFn(scope, locals) || '' overwrites zero values
+ label = isDefined(label) ? label : '';
+ optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index);
+ if (trackFn) {
+ trackKeysCache[optionId] = key;
+ }
+
+ optionGroup.push({
+ // either the index into array or key from object
+ id: optionId,
+ label: label,
+ selected: selected // determine if we should be selected
+ });
+ }
+ if (!multiple) {
+ if (nullOption || viewValue === null) {
+ // insert null option if we have a placeholder, or the model is null
+ optionGroups[''].unshift({id:'', label:'', selected:!anySelected});
+ } else if (!anySelected) {
+ // option could not be found, we have to insert the undefined item
+ optionGroups[''].unshift({id:'?', label:'', selected:true});
+ }
+ }
+
+ // Now we need to update the list of DOM nodes to match the optionGroups we computed above
+ for (groupIndex = 0, groupLength = optionGroupNames.length;
+ groupIndex < groupLength;
+ groupIndex++) {
+ // current option group name or '' if no group
+ optionGroupName = optionGroupNames[groupIndex];
+
+ // list of options for that group. (first item has the parent)
+ optionGroup = optionGroups[optionGroupName];
+
+ if (optionGroupsCache.length <= groupIndex) {
+ // we need to grow the optionGroups
+ existingParent = {
+ element: optGroupTemplate.clone().attr('label', optionGroupName),
+ label: optionGroup.label
+ };
+ existingOptions = [existingParent];
+ optionGroupsCache.push(existingOptions);
+ selectElement.append(existingParent.element);
+ } else {
+ existingOptions = optionGroupsCache[groupIndex];
+ existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element
+
+ // update the OPTGROUP label if not the same.
+ if (existingParent.label != optionGroupName) {
+ existingParent.element.attr('label', existingParent.label = optionGroupName);
+ }
+ }
+
+ lastElement = null; // start at the beginning
+ for (index = 0, length = optionGroup.length; index < length; index++) {
+ option = optionGroup[index];
+ if ((existingOption = existingOptions[index + 1])) {
+ // reuse elements
+ lastElement = existingOption.element;
+ if (existingOption.label !== option.label) {
+ updateLabelMap(labelMap, existingOption.label, false);
+ updateLabelMap(labelMap, option.label, true);
+ lastElement.text(existingOption.label = option.label);
+ lastElement.prop('label', existingOption.label);
+ }
+ if (existingOption.id !== option.id) {
+ lastElement.val(existingOption.id = option.id);
+ }
+ // lastElement.prop('selected') provided by jQuery has side-effects
+ if (lastElement[0].selected !== option.selected) {
+ lastElement.prop('selected', (existingOption.selected = option.selected));
+ if (msie) {
+ // See #7692
+ // The selected item wouldn't visually update on IE without this.
+ // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well
+ lastElement.prop('selected', existingOption.selected);
+ }
+ }
+ } else {
+ // grow elements
+
+ // if it's a null option
+ if (option.id === '' && nullOption) {
+ // put back the pre-compiled element
+ element = nullOption;
+ } else {
+ // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but
+ // in this version of jQuery on some browser the .text() returns a string
+ // rather then the element.
+ (element = optionTemplate.clone())
+ .val(option.id)
+ .prop('selected', option.selected)
+ .attr('selected', option.selected)
+ .prop('label', option.label)
+ .text(option.label);
+ }
+
+ existingOptions.push(existingOption = {
+ element: element,
+ label: option.label,
+ id: option.id,
+ selected: option.selected
+ });
+ updateLabelMap(labelMap, option.label, true);
+ if (lastElement) {
+ lastElement.after(element);
+ } else {
+ existingParent.element.append(element);
+ }
+ lastElement = element;
+ }
+ }
+ // remove any excessive OPTIONs in a group
+ index++; // increment since the existingOptions[0] is parent element not OPTION
+ while (existingOptions.length > index) {
+ option = existingOptions.pop();
+ updateLabelMap(labelMap, option.label, false);
+ option.element.remove();
+ }
+ }
+ // remove any excessive OPTGROUPs from select
+ while (optionGroupsCache.length > groupIndex) {
+ // remove all the labels in the option group
+ optionGroup = optionGroupsCache.pop();
+ for (index = 1; index < optionGroup.length; ++index) {
+ updateLabelMap(labelMap, optionGroup[index].label, false);
+ }
+ optionGroup[0].element.remove();
+ }
+ forEach(labelMap, function(count, label) {
+ if (count > 0) {
+ selectCtrl.addOption(label);
+ } else if (count < 0) {
+ selectCtrl.removeOption(label);
+ }
+ });
+ }
+ }
+ }
+ };
+}];
+
+var optionDirective = ['$interpolate', function($interpolate) {
+ var nullSelectCtrl = {
+ addOption: noop,
+ removeOption: noop
+ };
+
+ return {
+ restrict: 'E',
+ priority: 100,
+ compile: function(element, attr) {
+ if (isUndefined(attr.value)) {
+ var interpolateFn = $interpolate(element.text(), true);
+ if (!interpolateFn) {
+ attr.$set('value', element.text());
+ }
+ }
+
+ return function(scope, element, attr) {
+ var selectCtrlName = '$selectController',
+ parent = element.parent(),
+ selectCtrl = parent.data(selectCtrlName) ||
+ parent.parent().data(selectCtrlName); // in case we are in optgroup
+
+ if (!selectCtrl || !selectCtrl.databound) {
+ selectCtrl = nullSelectCtrl;
+ }
+
+ if (interpolateFn) {
+ scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {
+ attr.$set('value', newVal);
+ if (oldVal !== newVal) {
+ selectCtrl.removeOption(oldVal);
+ }
+ selectCtrl.addOption(newVal, element);
+ });
+ } else {
+ selectCtrl.addOption(attr.value, element);
+ }
+
+ element.on('$destroy', function() {
+ selectCtrl.removeOption(attr.value);
+ });
+ };
+ }
+ };
+}];
+
+var styleDirective = valueFn({
+ restrict: 'E',
+ terminal: false
+});
+
+ if (window.angular.bootstrap) {
+ //AngularJS is already loaded, so we can return here...
+ console.log('WARNING: Tried to load angular more than once.');
+ return;
+ }
+
+ //try to bind to jquery now so that one can write jqLite(document).ready()
+ //but we will rebind on bootstrap again.
+ bindJQuery();
+
+ publishExternalAPI(angular);
+
+ jqLite(document).ready(function() {
+ angularInit(document, bootstrap);
+ });
+
+})(window, document);
+
+!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/angular.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/angular.min.js
new file mode 100644
index 000000000..411bbd975
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/angular.min.js
@@ -0,0 +1,273 @@
+/*
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+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.
+*/
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(M,Y,t){'use strict';function T(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.8/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ta(b){if(null==b||Ua(b))return!1;var a=b.length;return b.nodeType===
+na&&a?!0:F(b)||x(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function s(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(x(b)||Ta(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==s)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ed(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
+b[d[e]],d[e]);return d}function kc(b){return function(a,c){b(c,a)}}function Fd(){return++nb}function lc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function z(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var l=f[g];b[l]=e[l]}}lc(b,a);return b}function ba(b){return parseInt(b,10)}function C(){}function oa(b){return b}function da(b){return function(){return b}}function D(b){return"undefined"===typeof b}function y(b){return"undefined"!==
+typeof b}function H(b){return null!==b&&"object"===typeof b}function F(b){return"string"===typeof b}function V(b){return"number"===typeof b}function pa(b){return"[object Date]"===Da.call(b)}function G(b){return"function"===typeof b}function ob(b){return"[object RegExp]"===Da.call(b)}function Ua(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function mc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Gd(b){var a={};
+b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ua(b){return Q(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Ea(b,a,c,d){if(Ua(b)||Va(b))throw Ka("cpws");if(a){if(b===a)throw Ka("cpi");c=c||[];d=d||[];if(H(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(x(b))for(var f=a.length=0;f<b.length;f++)e=Ea(b[f],null,c,d),H(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;x(a)?a.length=
+0:s(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Ea(b[f],null,c,d),H(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);lc(a,g)}}else if(a=b)x(b)?a=Ea(b,[],c,d):pa(b)?a=new Date(b.getTime()):ob(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):H(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Ea(b,e,c,d));return a}function qa(b,a){if(x(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(H(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=
+b[c];return a||b}function fa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(x(b)){if(!x(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!fa(b[d],a[d]))return!1;return!0}}else{if(pa(b))return pa(a)?fa(b.getTime(),a.getTime()):!1;if(ob(b)&&ob(a))return b.toString()==a.toString();if(Va(b)||Va(a)||Ua(b)||Ua(a)||x(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!G(b[d])){if(!fa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&
+"$"!==d.charAt(0)&&a[d]!==t&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(Za.call(a,c))}function nc(b,a){var c=2<arguments.length?Za.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Hd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Ua(a)?c="$WINDOW":a&&Y===a?c="$DOCUMENT":Va(a)&&
+(c="$SCOPE");return c}function $a(b,a){if("undefined"===typeof b)return t;V(a)||(a=a?2:null);return JSON.stringify(b,Hd,a)}function oc(b){return F(b)?JSON.parse(b):b}function va(b){b=B(b).clone();try{b.empty()}catch(a){}var c=B("<div>").append(b).html();try{return b[0].nodeType===pb?Q(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(d){return Q(c)}}function pc(b){try{return decodeURIComponent(b)}catch(a){}}function qc(b){var a={},c,d;s((b||"").split("&"),function(b){b&&
+(c=b.replace(/\+/g,"%20").split("="),d=pc(c[0]),y(d)&&(b=y(c[1])?pc(c[1]):!0,rc.call(a,d)?x(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];s(b,function(b,d){x(b)?s(b,function(b){a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))}):a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))});return a.length?a.join("&"):""}function qb(b){return Fa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Fa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,
+":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Id(b,a){var c,d,e=rb.length;b=B(b);for(d=0;d<e;++d)if(c=rb[d]+a,F(c=b.attr(c)))return c;return null}function Jd(b,a){var c,d,e={};s(rb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});s(rb,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Id(c,"strict-di"),a(c,d?[d]:[],e))}function sc(b,
+a,c){H(c)||(c={});c=z({strictDi:!1},c);var d=function(){b=B(b);if(b.injector()){var d=b[0]===Y?"document":va(b);throw Ka("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=Ob(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},
+e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;M&&e.test(M.name)&&(c.debugInfoEnabled=!0,M.name=M.name.replace(e,""));if(M&&!f.test(M.name))return d();M.name=M.name.replace(f,"");ga.resumeBootstrap=function(b){s(b,function(b){a.push(b)});d()}}function Kd(){M.name="NG_ENABLE_DEBUG_INFO!"+M.name;M.location.reload()}function Ld(b){b=ga.element(b).injector();if(!b)throw Ka("test");return b.get("$$testability")}function tc(b,a){a=a||"_";return b.replace(Md,function(b,d){return(d?a:"")+b.toLowerCase()})}
+function Nd(){var b;uc||((ra=M.jQuery)&&ra.fn.on?(B=ra,z(ra.fn,{scope:La.scope,isolateScope:La.isolateScope,controller:La.controller,injector:La.injector,inheritedData:La.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var c;if(Pb)Pb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ra._data(e,"events"))&&c.$destroy&&ra(e).triggerHandler("$destroy");b(a)}):B=R,ga.element=B,uc=!0)}function Qb(b,a,c){if(!b)throw Ka("areq",a||"?",c||"required");return b}function sb(b,a,c){c&&x(b)&&(b=b[b.length-1]);
+Qb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ma(b,a){if("hasOwnProperty"===b)throw Ka("badname",a);}function vc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&G(b)?nc(e,b):b}function tb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return B(c)}function ha(){return Object.create(null)}function Od(b){function a(a,b,c){return a[b]||
+(a[b]=c())}var c=T("$injector"),d=T("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||T;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return u}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),u={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,name:f,provider:a("$provide",
+"provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return u})}})}function Pd(b){z(b,{bootstrap:sc,copy:Ea,extend:z,equals:fa,element:B,forEach:s,injector:Ob,noop:C,bind:nc,toJson:$a,
+fromJson:oc,identity:oa,isUndefined:D,isDefined:y,isString:F,isFunction:G,isObject:H,isNumber:V,isElement:mc,isArray:x,version:Qd,isDate:pa,lowercase:Q,uppercase:ub,callbacks:{counter:0},getTestability:Ld,$$minErr:T,$$csp:ab,reloadWithDebugInfo:Kd});bb=Od(M);try{bb("ngLocale")}catch(a){bb("ngLocale",[]).provider("$locale",Rd)}bb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Sd});a.provider("$compile",wc).directive({a:Td,input:xc,textarea:xc,form:Ud,script:Vd,select:Wd,style:Xd,
+option:Yd,ngBind:Zd,ngBindHtml:$d,ngBindTemplate:ae,ngClass:be,ngClassEven:ce,ngClassOdd:de,ngCloak:ee,ngController:fe,ngForm:ge,ngHide:he,ngIf:ie,ngInclude:je,ngInit:ke,ngNonBindable:le,ngPluralize:me,ngRepeat:ne,ngShow:oe,ngStyle:pe,ngSwitch:qe,ngSwitchWhen:re,ngSwitchDefault:se,ngOptions:te,ngTransclude:ue,ngModel:ve,ngList:we,ngChange:xe,pattern:yc,ngPattern:yc,required:zc,ngRequired:zc,minlength:Ac,ngMinlength:Ac,maxlength:Bc,ngMaxlength:Bc,ngValue:ye,ngModelOptions:ze}).directive({ngInclude:Ae}).directive(vb).directive(Cc);
+a.provider({$anchorScroll:Be,$animate:Ce,$browser:De,$cacheFactory:Ee,$controller:Fe,$document:Ge,$exceptionHandler:He,$filter:Dc,$interpolate:Ie,$interval:Je,$http:Ke,$httpBackend:Le,$location:Me,$log:Ne,$parse:Oe,$rootScope:Pe,$q:Qe,$$q:Re,$sce:Se,$sceDelegate:Te,$sniffer:Ue,$templateCache:Ve,$templateRequest:We,$$testability:Xe,$timeout:Ye,$window:Ze,$$rAF:$e,$$asyncCallback:af,$$jqLite:bf})}])}function cb(b){return b.replace(cf,function(a,b,d,e){return e?d.toUpperCase():d}).replace(df,"Moz$1")}
+function Ec(b){b=b.nodeType;return b===na||!b||9===b}function Fc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Rb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(ef.exec(b)||["",""])[1].toLowerCase();d=ia[d]||ia._default;c.innerHTML=d[1]+b.replace(ff,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Ya(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";s(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof
+R)return b;var a;F(b)&&(b=U(b),a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Sb("nosel");return new R(b)}if(a){a=Y;var c;b=(c=gf.exec(b))?[a.createElement(c[1])]:(c=Fc(b,a))?c.childNodes:[]}Gc(this,b)}function Tb(b){return b.cloneNode(!0)}function wb(b,a){a||xb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)xb(c[d])}function Hc(b,a,c,d){if(y(d))throw Sb("offargs");var e=(d=yb(b))&&d.events,f=d&&d.handle;if(f)if(a)s(a.split(" "),function(a){if(y(c)){var d=
+e[a];Xa(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function xb(b,a){var c=b.ng339,d=c&&zb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Hc(b)),delete zb[c],b.ng339=t))}function yb(b,a){var c=b.ng339,c=c&&zb[c];a&&!c&&(b.ng339=c=++hf,c=zb[c]={events:{},data:{},handle:t});return c}function Ub(b,a,c){if(Ec(b)){var d=y(c),e=!d&&a&&!H(a),f=!a;b=(b=yb(b,!e))&&b.data;
+if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];z(b,a)}}}function Ab(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Bb(b,a){a&&b.setAttribute&&s(a.split(" "),function(a){b.setAttribute("class",U((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+U(a)+" "," ")))})}function Cb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");s(a.split(" "),function(a){a=
+U(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",U(c))}}function Gc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Ic(b,a){return Db(b,"$"+(a||"ngController")+"Controller")}function Db(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=x(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=B.data(b,a[d]))!==t)return c;b=b.parentNode||11===b.nodeType&&b.host}}
+function Jc(b){for(wb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Kc(b,a){a||wb(b);var c=b.parentNode;c&&c.removeChild(b)}function jf(b,a){a=a||M;if("complete"===a.document.readyState)a.setTimeout(b);else B(a).on("load",b)}function Lc(b,a){var c=Eb[a.toLowerCase()];return c&&Mc[ua(b)]&&c}function kf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Nc[a]}function lf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length:
+0;if(g){if(D(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=qa(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function bf(){this.$get=function(){return z(R,{hasClass:function(b,a){b.attr&&(b=b[0]);return Ab(b,a)},addClass:function(b,
+a){b.attr&&(b=b[0]);return Cb(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return Bb(b,a)}})}}function Na(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Fd)():c+":"+b}function db(b,a){if(a){var c=0;this.nextUid=function(){return++c}}s(b,this.put,this)}function mf(b){return(b=b.toString().replace(Oc,"").match(Pc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Vb(b,
+a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw F(c)&&c||(c=b.name||mf(b)),Ga("strictdi",c);a=b.toString().replace(Oc,"");a=a.match(Pc);s(a[1].split(nf),function(a){a.replace(of,function(a,b,c){d.push(c)})})}b.$inject=d}}else x(b)?(a=b.length-1,sb(b[a],"fn"),d=b.slice(0,a)):sb(b,"fn",!0);return d}function Ob(b,a){function c(a){return function(b,c){if(H(b))s(b,kc(a));else return a(b,c)}}function d(a,b){Ma(a,"service");if(G(b)||x(b))b=q.instantiate(b);if(!b.$get)throw Ga("pget",
+a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=r.invoke(b,this);if(D(c))throw Ga("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;s(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{F(a)?(c=bb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):G(a)?b.push(q.invoke(a)):x(a)?b.push(q.invoke(a)):sb(a,"module")}catch(e){throw x(a)&&
+(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Ga("cdep",a+" <- "+k.join(" <- "));return b[a]}try{return k.unshift(a),b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=Vb(b,a,g),l,q,p;q=0;for(l=k.length;q<l;q++){p=k[q];if("string"!==
+typeof p)throw Ga("itkn",p);h.push(f&&f.hasOwnProperty(p)?f[p]:d(p,g))}x(b)&&(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((x(a)?a[a.length-1]:a).prototype);a=e(a,d,b,c);return H(a)||G(a)?a:d},get:d,annotate:Vb,has:function(a){return p.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],m=new db([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),
+value:c(function(a,b){return f(a,da(b),!1)}),constant:c(function(a,b){Ma(a,"constant");p[a]=b;u[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){ga.isString(b)&&k.push(b);throw Ga("unpr",k.join(" <- "));}),u={},r=u.$injector=h(u,function(a,b){var c=q.get(a+"Provider",b);return r.invoke(c.$get,c,t,a)});s(g(b),function(a){r.invoke(a||C)});return r}function Be(){var b=!0;this.disableAutoScrolling=
+function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ua(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;G(c)?c=c():mc(c)?(c=c[0],c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):V(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?
+f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||jf(function(){d.$evalAsync(g)})});return g}]}function af(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function pf(b,a,c,d){function e(a){try{a.apply(null,Za.call(arguments,1))}finally{if(v--,0===v)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function f(a,b){(function N(){s(L,function(a){a()});J=b(N,
+a)})()}function g(){h();l()}function h(){A=b.history.state;A=D(A)?null:A;fa(A,I)&&(A=I);I=A}function l(){if(E!==m.url()||P!==A)E=m.url(),P=A,s(W,function(a){a(m.url(),A)})}function k(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,p=a[0],q=b.location,u=b.history,r=b.setTimeout,O=b.clearTimeout,n={};m.isMock=!1;var v=0,w=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){v++};m.notifyWhenNoOutstandingRequests=function(a){s(L,function(a){a()});0===v?a():
+w.push(a)};var L=[],J;m.addPollFn=function(a){D(J)&&f(100,r);L.push(a);return a};var A,P,E=q.href,S=a.find("base"),X=null;h();P=A;m.url=function(a,c,e){D(e)&&(e=null);q!==b.location&&(q=b.location);u!==b.history&&(u=b.history);if(a){var f=P===e;if(E===a&&(!d.history||f))return m;var g=E&&Ha(E)===Ha(a);E=a;P=e;!d.history||g&&f?(g||(X=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(u[c?"replaceState":"pushState"](e,"",a),h(),P=A);return m}return X||q.href.replace(/%27/g,
+"'")};m.state=function(){return A};var W=[],wa=!1,I=null;m.onUrlChange=function(a){if(!wa){if(d.history)B(b).on("popstate",g);B(b).on("hashchange",g);wa=!0}W.push(a);return a};m.$$checkUrlChange=l;m.baseHref=function(){var a=S.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var ea={},y="",ca=m.baseHref();m.cookies=function(a,b){var d,e,f,g;if(a)b===t?p.cookie=encodeURIComponent(a)+"=;path="+ca+";expires=Thu, 01 Jan 1970 00:00:00 GMT":F(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+
+";path="+ca).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),ea={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=k(e.substring(0,g)),ea[a]===t&&(ea[a]=k(e.substring(g+1))));return ea}};m.defer=function(a,b){var c;v++;c=r(function(){delete n[c];e(a)},b||0);n[c]=!0;return c};m.defer.cancel=function(a){return n[a]?(delete n[a],O(a),e(C),!0):!1}}function De(){this.$get=["$window",
+"$log","$sniffer","$document",function(b,a,c,d){return new pf(b,d,a,c)}]}function Ee(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw T("$cacheFactory")("iid",b);var g=0,h=z({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,m={},p=null,q=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!D(b))return a in l||g++,l[a]=b,g>k&&this.remove(q.key),
+b},get:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);delete m[a]}delete l[a];g--},removeAll:function(){l={};g=0;m={};p=q=null},destroy:function(){m=h=l=null;delete a[b]},info:function(){return z({},h,{size:g})}}}var a={};b.info=function(){var b={};s(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Ve(){this.$get=["$cacheFactory",
+function(b){return b("templates")}]}function wc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};s(a,function(a,e){var f=a.match(c);if(!f)throw ja("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Gd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){Ma(a,"directive");F(a)?(Qb(e,
+"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];s(d[a],function(d,g){try{var h=b.invoke(d);G(h)?h={compile:da(h)}:!h.compile&&h.link&&(h.compile=da(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";H(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(l){e(l)}});return f}])),d[a].push(e)):s(a,kc(p));return this};this.aHrefSanitizationWhitelist=
+function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var k=!0;this.debugInfoEnabled=function(a){return y(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,r,O,n,v,w,L,J,A){function P(a,b){try{a.addClass(b)}catch(c){}}
+function E(a,b,c,d,e){a instanceof B||(a=B(a));s(a,function(b,c){b.nodeType==pb&&b.nodeValue.match(/\S+/)&&(a[c]=B(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);E.$$addScopeClass(a);var g=null;return function(b,c,d){Qb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Wb(g,B("<div>").append(a).html())):
+c?La.clone.call(a):a;if(h)for(var l in h)d.data("$"+l+"Controller",h[l].instance);E.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a,c,d,e){var f,l,k,q,p,n,w;if(r)for(w=Array(c.length),q=0;q<h.length;q+=3)f=h[q],w[f]=c[f];else w=c;q=0;for(p=h.length;q<p;)l=w[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(k=a.$new(),E.$$addScopeInfo(B(l),k)):k=a,n=c.transcludeOnThisElement?X(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?X(a,
+b):null,c(f,k,l,d,n)):f&&f(a,l.childNodes,t,e)}for(var h=[],l,k,q,p,r,n=0;n<a.length;n++){l=new Xb;k=W(a[n],[],l,0===n?d:t,e);(f=k.length?ea(k,a[n],l,b,c,null,[],[],f):null)&&f.scope&&E.$$addScopeClass(l.$$element);l=f&&f.terminal||!(q=a[n].childNodes)||!q.length?null:S(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(n,f,l),p=!0,r=r||f;f=null}return p?g:null}function X(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,
+{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(a,b,c,d,g){var h=c.$attr,l;switch(a.nodeType){case na:ca(b,ya(ua(a)),"E",d,g);for(var k,q,p,r=a.attributes,n=0,w=r&&r.length;n<w;n++){var O=!1,L=!1;k=r[n];l=k.name;q=U(k.value);k=ya(l);if(p=fb.test(k))l=l.replace(Rc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var u=k.replace(/(Start|End)$/,"");D(u)&&k===u+"Start"&&(O=l,L=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=ya(l.toLowerCase());
+h[k]=l;if(p||!c.hasOwnProperty(k))c[k]=q,Lc(a,k)&&(c[k]=!0);Pa(a,b,q,k,p);ca(b,k,"A",d,g,O,L)}a=a.className;if(F(a)&&""!==a)for(;l=f.exec(a);)k=ya(l[2]),ca(b,k,"C",d,g)&&(c[k]=U(l[3])),a=a.substr(l.index+l[0].length);break;case pb:M(b,a.nodeValue);break;case 8:try{if(l=e.exec(a.nodeValue))k=ya(l[1]),ca(b,k,"M",d,g)&&(c[k]=U(l[2]))}catch(v){}}b.sort(N);return b}function wa(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);a.nodeType==na&&(a.hasAttribute(b)&&
+e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function I(a,b,c){return function(d,e,f,g,h){e=wa(e[0],b,c);return a(d,e,f,g,h)}}function ea(a,d,e,f,g,l,k,p,r){function w(a,b,c,d){if(a){c&&(a=I(a,c,d));a.require=K.require;a.directiveName=z;if(S===K||K.$$isolateScope)a=Z(a,{isolateScope:!0});k.push(a)}if(b){c&&(b=I(b,c,d));b.require=K.require;b.directiveName=z;if(S===K||K.$$isolateScope)b=Z(b,{isolateScope:!0});p.push(b)}}function L(a,b,c,d){var e,f="data",
+g=!1,l=c,k;if(F(b)){k=b.match(h);b=b.substring(k[0].length);k[3]&&(k[1]?k[3]=null:k[1]=k[3]);"^"===k[1]?f="inheritedData":"^^"===k[1]&&(f="inheritedData",l=c.parent());"?"===k[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||l[f]("$"+b+"Controller");if(!e&&!g)throw ja("ctreq",b,a);return e||null}x(b)&&(e=[],s(b,function(b){e.push(L(a,b,c,d))}));return e}function v(a,c,f,g,h){function l(a,b,c){var d;Va(a)||(c=b,b=a,a=t);C&&(d=P);c||(c=C?W.parent():W);return h(a,b,d,c,wa)}var r,w,u,A,
+P,eb,W,I;d===f?(I=e,W=e.$$element):(W=B(f),I=new Xb(W,e));S&&(A=c.$new(!0));h&&(eb=l,eb.$$boundTransclude=h);J&&(X={},P={},s(J,function(a){var b={$scope:a===S||a.$$isolateScope?A:c,$element:W,$attrs:I,$transclude:eb};u=a.controller;"@"==u&&(u=I[a.name]);b=n(u,b,!0,a.controllerAs);P[a.name]=b;C||W.data("$"+a.name+"Controller",b.instance);X[a.name]=b}));if(S){E.$$addScopeInfo(W,A,!0,!(ka&&(ka===S||ka===S.$$originalDirective)));E.$$addScopeClass(W,!0);g=X&&X[S.name];var xa=A;g&&g.identifier&&!0===S.bindToController&&
+(xa=g.instance);s(A.$$isolateBindings=S.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,l,k;switch(a.mode){case "@":I.$observe(e,function(a){xa[d]=a});I.$$observers[e].$$scope=c;I[e]&&(xa[d]=b(I[e])(c));break;case "=":if(f&&!I[e])break;h=O(I[e]);k=h.literal?fa:function(a,b){return a===b||a!==a&&b!==b};l=h.assign||function(){g=xa[d]=h(c);throw ja("nonassign",I[e],S.name);};g=xa[d]=h(c);f=function(a){k(a,xa[d])||(k(a,g)?l(c,a=xa[d]):xa[d]=a);return g=a};f.$stateful=!0;f=a.collection?
+c.$watchCollection(I[e],f):c.$watch(O(I[e],f),null,h.literal);A.$on("$destroy",f);break;case "&":h=O(I[e]),xa[d]=function(a){return h(c,a)}}})}X&&(s(X,function(a){a()}),X=null);g=0;for(r=k.length;g<r;g++)w=k[g],$(w,w.isolateScope?A:c,W,I,w.require&&L(w.directiveName,w.require,W,P),eb);var wa=c;S&&(S.template||null===S.templateUrl)&&(wa=A);a&&a(wa,f.childNodes,t,h);for(g=p.length-1;0<=g;g--)w=p[g],$(w,w.isolateScope?A:c,W,I,w.require&&L(w.directiveName,w.require,W,P),eb)}r=r||{};for(var A=-Number.MAX_VALUE,
+P,J=r.controllerDirectives,X,S=r.newIsolateScopeDirective,ka=r.templateDirective,ea=r.nonTlbTranscludeDirective,ca=!1,D=!1,C=r.hasElementTranscludeDirective,aa=e.$$element=B(d),K,z,N,Aa=f,Q,M=0,R=a.length;M<R;M++){K=a[M];var Pa=K.$$start,fb=K.$$end;Pa&&(aa=wa(d,Pa,fb));N=t;if(A>K.priority)break;if(N=K.scope)K.templateUrl||(H(N)?(Oa("new/isolated scope",S||P,K,aa),S=K):Oa("new/isolated scope",S,K,aa)),P=P||K;z=K.name;!K.templateUrl&&K.controller&&(N=K.controller,J=J||{},Oa("'"+z+"' controller",J[z],
+K,aa),J[z]=K);if(N=K.transclude)ca=!0,K.$$tlb||(Oa("transclusion",ea,K,aa),ea=K),"element"==N?(C=!0,A=K.priority,N=aa,aa=e.$$element=B(Y.createComment(" "+z+": "+e[z]+" ")),d=aa[0],V(g,Za.call(N,0),d),Aa=E(N,f,A,l&&l.name,{nonTlbTranscludeDirective:ea})):(N=B(Tb(d)).contents(),aa.empty(),Aa=E(N,f));if(K.template)if(D=!0,Oa("template",ka,K,aa),ka=K,N=G(K.template)?K.template(aa,e):K.template,N=Sc(N),K.replace){l=K;N=Rb.test(N)?Tc(Wb(K.templateNamespace,U(N))):[];d=N[0];if(1!=N.length||d.nodeType!==
+na)throw ja("tplrt",z,"");V(g,aa,d);R={$attr:{}};N=W(d,[],R);var ba=a.splice(M+1,a.length-(M+1));S&&y(N);a=a.concat(N).concat(ba);Qc(e,R);R=a.length}else aa.html(N);if(K.templateUrl)D=!0,Oa("template",ka,K,aa),ka=K,K.replace&&(l=K),v=T(a.splice(M,a.length-M),aa,e,g,ca&&Aa,k,p,{controllerDirectives:J,newIsolateScopeDirective:S,templateDirective:ka,nonTlbTranscludeDirective:ea}),R=a.length;else if(K.compile)try{Q=K.compile(aa,e,Aa),G(Q)?w(null,Q,Pa,fb):Q&&w(Q.pre,Q.post,Pa,fb)}catch(qf){c(qf,va(aa))}K.terminal&&
+(v.terminal=!0,A=Math.max(A,K.priority))}v.scope=P&&!0===P.scope;v.transcludeOnThisElement=ca;v.elementTranscludeOnThisElement=C;v.templateOnThisElement=D;v.transclude=Aa;r.hasElementTranscludeDirective=C;return v}function y(a){for(var b=0,c=a.length;b<c;b++){var d=b,e;e=z(Object.create(a[b]),{$$isolateScope:!0});a[d]=e}}function ca(b,e,f,g,h,l,k){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var r=0,n=e.length;r<n;r++)try{if(q=e[r],(g===t||g>q.priority)&&-1!=
+q.restrict.indexOf(f)){if(l){var w={$$start:l,$$end:k};q=z(Object.create(q),w)}b.push(q);h=q}}catch(O){c(O)}}return h}function D(b){if(d.hasOwnProperty(b))for(var c=a.get(b+"Directive"),e=0,f=c.length;e<f;e++)if(b=c[e],b.multiElement)return!0;return!1}function Qc(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;s(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});s(b,function(b,f){"class"==f?(P(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==
+f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function T(a,b,c,d,e,f,g,h){var l=[],k,q,p=b[0],n=a.shift(),w=z({},n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),O=G(n.templateUrl)?n.templateUrl(b,c):n.templateUrl,u=n.templateNamespace;b.empty();r(L.getTrustedResourceUrl(O)).then(function(r){var L,v;r=Sc(r);if(n.replace){r=Rb.test(r)?Tc(Wb(u,U(r))):[];L=r[0];if(1!=r.length||L.nodeType!==
+na)throw ja("tplrt",n.name,O);r={$attr:{}};V(d,b,L);var A=W(L,[],r);H(n.scope)&&y(A);a=A.concat(a);Qc(c,r)}else L=p,b.html(r);a.unshift(w);k=ea(a,L,c,e,b,n,f,g,h);s(d,function(a,c){a==L&&(d[c]=b[0])});for(q=S(b[0].childNodes,e);l.length;){r=l.shift();v=l.shift();var J=l.shift(),E=l.shift(),A=b[0];if(!r.$$destroyed){if(v!==p){var I=v.className;h.hasElementTranscludeDirective&&n.replace||(A=Tb(L));V(J,B(v),A);P(B(A),I)}v=k.transcludeOnThisElement?X(r,k.transclude,E):E;k(q,r,A,d,v)}}l=null});return function(a,
+b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(k.transcludeOnThisElement&&(a=X(b,k.transclude,e)),k(q,b,c,d,a)))}}function N(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Oa(a,b,c,d){if(b)throw ja("multidir",b.name,c.name,a,va(d));}function M(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&E.$$addBindingClass(a);return function(a,c){var e=c.parent();b||E.$$addBindingClass(e);E.$$addBindingInfo(e,
+d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Wb(a,b){a=Q(a||"html");switch(a){case "svg":case "math":var c=Y.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return L.HTML;var c=ua(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return L.RESOURCE_URL}function Pa(a,c,d,e,f){var h=R(a,e);f=g[e]||f;var k=b(d,!0,h,f);if(k){if("multiple"===e&&"select"===ua(a))throw ja("selmulti",
+va(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers={});if(l.test(e))throw ja("nodomevents");var p=g[e];p!==d&&(k=p&&b(p,!0,h,f),d=p);k&&(g[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function V(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var l=a.length;g<l;g++,
+h++)h<l?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=Y.createDocumentFragment();a.appendChild(d);B(c).data(B(d).data());ra?(Pb=!0,ra.cleanData([d])):delete B.cache[d[B.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],B(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Z(a,b){return z(function(){return a.apply(null,arguments)},a,b)}function $(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,va(d))}}var Xb=function(a,b){if(b){var c=Object.keys(b),
+d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};Xb.prototype={$normalize:ya,$addClass:function(a){a&&0<a.length&&J.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&J.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Uc(a,b);c&&c.length&&J.addClass(this.$$element,c);(c=Uc(b,a))&&c.length&&J.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Lc(f,a),h=kf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):
+h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=tc(a,"-"));g=ua(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=A(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=U(b),l=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,l=/\s/.test(h)?l:/(,)/,h=h.split(l),l=Math.floor(h.length/2),k=0;k<l;k++)var q=2*k,g=g+A(U(h[q]),!0),g=g+(" "+U(h[q+1]));h=U(h[2*k]).split(/\s/);g+=A(U(h[0]),!0);2===h.length&&(g+=" "+U(h[1]));this[a]=b=g}!1!==d&&(null===b||
+b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&s(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ha()),e=d[a]||(d[a]=[]);e.push(b);v.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Xa(e,b)}}};var Aa=b.startSymbol(),ka=b.endSymbol(),Sc="{{"==Aa||"}}"==ka?oa:function(a){return a.replace(/\{\{/g,Aa).replace(/}}/g,ka)},fb=/^ngAttr[A-Z]/;E.$$addBindingInfo=k?function(a,b){var c=
+a.data("$binding")||[];x(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:C;E.$$addBindingClass=k?function(a){P(a,"ng-binding")}:C;E.$$addScopeInfo=k?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:C;E.$$addScopeClass=k?function(a,b){P(a,b?"ng-isolate-scope":"ng-scope")}:C;return E}]}function ya(b){return cb(b.replace(Rc,""))}function Uc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;
+c+=(0<c.length?" ":"")+g}return c}function Tc(b){b=B(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&rf.call(b,a,1);return b}function Fe(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){Ma(a,"controller");H(a)?z(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!H(a.$scope))throw T("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,l,k){var m,p,q;l=!0===l;k&&F(k)&&(q=k);F(g)&&
+(k=g.match(c),p=k[1],q=q||k[3],g=b.hasOwnProperty(p)?b[p]:vc(h.$scope,p,!0)||(a?vc(e,p,!0):t),sb(g,p,!0));if(l)return l=(x(g)?g[g.length-1]:g).prototype,m=Object.create(l),q&&f(h,q,m,p||g.name),z(function(){d.invoke(g,m,h,p);return m},{instance:m,identifier:q});m=d.instantiate(g,h,p);q&&f(h,q,m,p||g.name);return m}}]}function Ge(){this.$get=["$window",function(b){return B(b.document)}]}function He(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Yb(b,a){if(F(b)){var c=
+b.replace(sf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(Vc))||(d=(d=c.match(tf))&&uf[d[0]].test(c));d&&(b=oc(c))}}return b}function Wc(b){var a=ha(),c,d,e;if(!b)return a;s(b.split("\n"),function(b){e=b.indexOf(":");c=Q(U(b.substr(0,e)));d=U(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Xc(b){var a=H(b)?b:t;return function(c){a||(a=Wc(b));return c?(c=a[Q(c)],void 0===c&&(c=null),c):a}}function Yc(b,a,c,d){if(G(d))return d(b,a,c);s(d,function(d){b=d(b,a,c)});return b}
+function Ke(){var b=this.defaults={transformResponse:[Yb],transformRequest:[function(a){return H(a)&&"[object File]"!==Da.call(a)&&"[object Blob]"!==Da.call(a)&&"[object FormData]"!==Da.call(a)?$a(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:qa(Zb),put:qa(Zb),patch:qa(Zb)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory",
+"$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=z({},a);b.data=a.data?Yc(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a){var b,c={};s(a,function(a,d){G(a)?(b=a(),null!=b&&(c[d]=b)):c[d]=a});return c}if(!ga.isObject(a))throw T("$http")("badreq",a);var e=z({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},a);e.headers=function(a){var c=b.headers,e=z({},a.headers),
+f,g,c=z({},c.common,c[Q(a.method)]);a:for(f in c){a=Q(f);for(g in e)if(Q(g)===a)continue a;e[f]=c[f]}return d(e)}(a);e.method=ub(e.method);var f=[function(a){var d=a.headers,e=Yc(a.data,Xc(d),t,a.transformRequest);D(e)&&s(d,function(a,b){"content-type"===Q(b)&&delete d[b]});D(a.withCredentials)&&!D(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,e).then(c,c)},t],g=h.when(e);for(s(u,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&
+f.push(a.response,a.responseError)});f.length;){a=f.shift();var l=f.shift(),g=g.then(a,l)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g}function m(c,f){function l(b,c,d,e){function f(){m(c,b,d,e)}P&&(200<=b&&300>b?P.put(X,[b,c,Wc(d),e]):P.remove(X));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function m(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?J.resolve:J.reject)({data:a,
+status:b,headers:Xc(d),config:c,statusText:e})}function w(a){m(a.data,a.status,qa(a.headers()),a.statusText)}function u(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var J=h.defer(),A=J.promise,P,E,s=c.headers,X=p(c.url,c.params);k.pendingRequests.push(c);A.then(u,u);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(P=H(c.cache)?c.cache:H(b.cache)?b.cache:q);P&&(E=P.get(X),y(E)?E&&G(E.then)?E.then(w,w):x(E)?m(E[1],E[0],qa(E[2]),E[3]):m(E,200,{},
+"OK"):P.put(X,A));D(E)&&((E=Zc(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(s[c.xsrfHeaderName||b.xsrfHeaderName]=E),d(c.method,X,f,l,s,c.timeout,c.withCredentials,c.responseType));return A}function p(a,b){if(!b)return a;var c=[];Ed(b,function(a,b){null===a||D(a)||(x(a)||(a=[a]),s(a,function(a){H(a)&&(a=pa(a)?a.toISOString():$a(a));c.push(Fa(b)+"="+Fa(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),u=[];s(c,function(a){u.unshift(F(a)?l.get(a):
+l.invoke(a))});k.pendingRequests=[];(function(a){s(arguments,function(a){k[a]=function(b,c){return k(z(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){s(arguments,function(a){k[a]=function(b,c,d){return k(z(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function vf(){return new M.XMLHttpRequest}function Le(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b,vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,
+d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,u="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),u=a.type,g="error"===a.type?404:200);c&&c(g,u)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,l,k,m,p,q,u){function r(){v&&v();w&&w.abort()}
+function O(a,d,e,f,g){J!==t&&c.cancel(J);v=w=null;a(d,e,f,g);b.$$completeOutstandingRequest(C)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==Q(e)){var n="_"+(d.counter++).toString(36);d[n]=function(a){d[n].data=a;d[n].called=!0};var v=f(h.replace("JSON_CALLBACK","angular.callbacks."+n),n,function(a,b){O(k,a,d[n].data,"",b);d[n]=C})}else{var w=a();w.open(e,h,!0);s(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?w.response:w.responseText,
+c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);O(k,c,b,w.getAllResponseHeaders(),a)};e=function(){O(k,-1,null,null,"")};w.onerror=e;w.onabort=e;q&&(w.withCredentials=!0);if(u)try{w.responseType=u}catch(L){if("json"!==u)throw L;}w.send(l||null)}if(0<p)var J=c(r,p);else p&&G(p.then)&&p.then(r)}}function Ie(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",
+function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,u,r){function O(c){return c.replace(k,b).replace(m,a)}function n(a){try{var b=a;a=u?e.getTrusted(u,b):e.valueOf(b);var c;if(r&&!y(a))c=a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=$a(a)}c=a}return c}catch(g){c=$b("interr",f,g.toString()),d(c)}}r=!!r;for(var v,w,L=0,J=[],A=[],P=f.length,E=[],s=[];L<P;)if(-1!=(v=f.indexOf(b,L))&&-1!=(w=f.indexOf(a,v+h)))L!==v&&E.push(O(f.substring(L,
+v))),L=f.substring(v+h,w),J.push(L),A.push(c(L,n)),L=w+l,s.push(E.length),E.push("");else{L!==P&&E.push(O(f.substring(L)));break}if(u&&1<E.length)throw $b("noconcat",f);if(!g||J.length){var X=function(a){for(var b=0,c=J.length;b<c;b++){if(r&&D(a[b]))return;E[s[b]]=a[b]}return E.join("")};return z(function(a){var b=0,c=J.length,e=Array(c);try{for(;b<c;b++)e[b]=A[b](a);return X(e)}catch(g){a=$b("interr",f,g.toString()),d(a)}},{exp:f,expressions:J,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(A,
+function(c,e){var f=X(c);G(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,l=a.length,k=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Je(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var m=a.setInterval,p=a.clearInterval,q=0,u=y(k)&&!k,r=(u?d:c).defer(),O=r.promise;l=y(l)?l:0;O.then(null,null,e);O.$$intervalId=m(function(){r.notify(q++);0<
+l&&q>=l&&(r.resolve(q),p(O.$$intervalId),delete f[O.$$intervalId]);u||b.$apply()},h);f[O.$$intervalId]=r;return O}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function Rd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,
+maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",
+longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=qb(b[a]);return b.join("/")}function $c(b,a){var c=Ba(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=ba(c.port)||xf[c.protocol]||null}function ad(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):
+d.pathname);a.$$search=qc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function za(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ha(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function bd(b){return b.replace(/(#.+)|#$/,"$1")}function bc(b){return b.substr(0,Ha(b).lastIndexOf("/")+1)}function cc(b,a){this.$$html5=!0;a=a||"";var c=bc(b);$c(b,this);this.$$parse=function(a){var b=za(c,a);if(!F(b))throw Fb("ipthprfx",a,c);
+ad(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Nb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;(f=za(b,d))!==t?(g=f,g=(f=za(a,f))!==t?c+(za("/",f)||f):b+g):(f=za(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function dc(b,a){var c=bc(b);$c(b,this);this.$$parse=function(d){d=
+za(b,d)||za(c,d);var e;"#"===d.charAt(0)?(e=za(a,d),D(e)&&(e=d)):e=this.$$html5?d:"";ad(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ha(b)==Ha(a)?(this.$$parse(a),!0):!1}}function cd(b,
+a){this.$$html5=!0;dc.apply(this,arguments);var c=bc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ha(d)?f=d:(g=za(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Gb(b){return function(){return this[b]}}function dd(b,a){return function(c){if(D(c))return this[b];this[b]=
+a(c);this.$$compose();return this}}function Me(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Wa(b)?(a.enabled=b,this):H(b)?(Wa(b.enabled)&&(a.enabled=b.enabled),Wa(b.requireBase)&&(a.requireBase=b.requireBase),Wa(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;
+try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,m;m=d.baseHref();var p=d.url(),q;if(a.enabled){if(!m&&a.requireBase)throw Fb("nobase");q=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(m||"/");m=e.history?cc:cd}else q=Ha(p),m=dc;k=new m(q,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&
+2!=b.which){for(var e=B(b.target);"a"!==ua(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);u.test(h)||!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=p&&d.url(k.absUrl(),!0);var r=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=
+k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(r=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=bd(d.url()),b=bd(k.absUrl()),f=d.state(),g=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(r||q)r=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=
+f):(q&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function Ne(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=
+[];s(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function sa(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw la("isecfld",a);return b}function ta(b,a){if(b){if(b.constructor===b)throw la("isecfn",a);if(b.window===b)throw la("isecwindow",
+a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function ec(b){return b.constant}function gb(b,a,c,d){ta(b,d);a=a.split(".");for(var e,f=0;1<a.length;f++){e=sa(a.shift(),d);var g=ta(b[e],d);g||(g={},b[e]=g);b=g}e=sa(a.shift(),d);ta(b[e],d);return b[e]=c}function Qa(b){return"constructor"==b}function ed(b,a,c,d,e,f,g){sa(b,f);sa(a,f);sa(c,f);sa(d,f);sa(e,f);var h=function(a){return ta(a,f)},l=g||Qa(b)?h:oa,k=g||Qa(a)?h:oa,m=
+g||Qa(c)?h:oa,p=g||Qa(d)?h:oa,q=g||Qa(e)?h:oa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=l(h[b]);if(!a)return h;if(null==h)return t;h=k(h[a]);if(!c)return h;if(null==h)return t;h=m(h[c]);if(!d)return h;if(null==h)return t;h=p(h[d]);return e?null==h?t:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,ta,a)}}function zf(b,a,c){var d=a.expensiveChecks,e=d?Af:Bf,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?ed(g[0],g[1],g[2],g[3],g[4],
+c,d):function(a,b){var e=0,f;do f=ed(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=t,a=f;while(e<h);return f};else{var l="";d&&(l+="s = eso(s, fe);\nl = eso(l, fe);\n");var k=d;s(g,function(a,b){sa(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Qa(a))e="eso("+e+", fe)",k=!0;l+="if(s == null) return undefined;\ns="+e+";\n"});l+="return s;";a=new Function("s","l","eso","fe",l);a.toString=da(l);k&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c){return gb(a,b,c,b)};return e[b]=
+f}function fc(b){return G(b.valueOf)?b.valueOf():Cf.call(b)}function Oe(){var b=ha(),a=ha();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?
+!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var l=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,l)||(h=d(a),l=b&&fc(b));return h},b,c)}for(var k=[],q=0,p=e.length;q<p;q++)k[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var l=e[c](a);if(b||(b=!g(l,k[c])))k[c]=l&&fc(l)}b&&(h=d(a));return h},b,c)}function l(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;G(b)&&b.apply(this,arguments);
+y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;s(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;G(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){G(b)&&b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==k&&c!==l?function(c,d){var e=a(c,d);return b(e,
+c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var q={csp:d.csp,expensiveChecks:!1},u={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var v,w,L;switch(typeof d){case "string":L=d=d.trim();var J=g?a:b;v=J[L];v||(":"===d.charAt(0)&&":"===d.charAt(1)&&(w=!0,d=d.substring(2)),g=g?u:q,v=new gc(g),v=(new hb(v,c,g)).parse(d),v.constant?v.$$watchDelegate=
+m:w?(v=e(v),v.$$watchDelegate=v.literal?k:l):v.inputs&&(v.$$watchDelegate=h),J[L]=v);return p(v,f);case "function":return p(d,f);default:return p(C,f)}}}]}function Qe(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return fd(function(a){b.$evalAsync(a)},a)}]}function Re(){this.$get=["$browser","$exceptionHandler",function(b,a){return fd(function(a){b.defer(a)},a)}]}function fd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state=
+{status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=t;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{G(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=
+T("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,
+e;e=c(this,this.$$resolve,this.$$reject);try{if(H(b)||G(b))d=b&&b.then;G(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&
+d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(G(b)?b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{G(c)&&(d=c())}catch(e){return l(e,!1)}return d&&G(d.then)?d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function u(a){if(!G(a))throw h("norslvr",a);if(!(this instanceof
+u))return new u(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;b.reject(a);return b.promise};p.when=m;p.all=function(a){var b=new g,c=0,d=x(a)?[]:{};s(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function $e(){this.$get=["$window","$timeout",function(b,
+a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Pe(){var b=10,a=T("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(e,f,g,h){function l(){this.$id=
+++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function k(b){if(r.$$phase)throw a("inprog",r.$$phase);r.$$phase=b}function m(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function p(){}function q(){for(;v.length;)try{v.shift()()}catch(a){f(a)}d=null}function u(){null===
+d&&(d=h.defer(function(){r.$apply(q)}))}l.prototype={constructor:l,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new l,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$id=++nb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?(b.$$childTail.$$nextSibling=
+d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:p,get:e,exp:a,eq:!!d};c=null;G(b)||(h.fn=C);f||(f=this.$$watchers=[]);f.unshift(h);return function(){Xa(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;l?(l=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,l=!0;if(!a.length){var k=!0;g.$evalAsync(function(){k&&
+b(e,e,g)});return function(){k=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});s(a,function(a,b){var l=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(l)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!D(e)){if(H(e))if(Ta(e))for(f!==q&&(f=q,u=f.length=0,k++),a=e.length,u!==a&&(k++,f.length=u=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(k++,f[b]=g);else{f!==
+m&&(f=m={},u=0,k++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(k++,f[b]=g)):(u++,f[b]=g,k++));if(u>a)for(b in k++,f)e.hasOwnProperty(b)||(u--,delete f[b])}else f!==e&&(f=e,k++);return k}}c.$stateful=!0;var d=this,e,f,h,l=1<b.length,k=0,p=g(a,c),q=[],m={},n=!0,u=0;return this.$watch(p,function(){n?(n=!1,b(e,e,d)):b(e,h,d);if(l)if(H(e))if(Ta(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)rc.call(e,a)&&(h[a]=e[a]);else h=
+e})},$digest:function(){var e,g,l,m,u,v,s=b,t,W=[],y,I;k("$digest");h.$$checkUrlChange();this===r&&null!==d&&(h.defer.cancel(d),q());c=null;do{v=!1;for(t=this;O.length;){try{I=O.shift(),I.scope.$eval(I.expression,I.locals)}catch(B){f(B)}c=null}a:do{if(m=t.$$watchers)for(u=m.length;u--;)try{if(e=m[u])if((g=e.get(t))!==(l=e.last)&&!(e.eq?fa(g,l):"number"===typeof g&&"number"===typeof l&&isNaN(g)&&isNaN(l)))v=!0,c=e,e.last=e.eq?Ea(g,null):g,e.fn(g,l===p?g:l,t),5>s&&(y=4-s,W[y]||(W[y]=[]),W[y].push({msg:G(e.exp)?
+"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:l}));else if(e===c){v=!1;break a}}catch(D){f(D)}if(!(m=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(m=t.$$nextSibling);)t=t.$parent}while(t=m);if((v||O.length)&&!s--)throw r.$$phase=null,a("infdig",b,W);}while(v||O.length);for(r.$$phase=null;n.length;)try{n.shift()()}catch(ca){f(ca)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==r){for(var b in this.$$listenerCount)m(this,
+this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=C;this.$on=this.$watch=this.$watchGroup=function(){return C};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=
+this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){r.$$phase||O.length||h.defer(function(){O.length&&r.$digest()});O.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){n.push(a)},$apply:function(a){try{return k("$apply"),this.$eval(a)}catch(b){f(b)}finally{r.$$phase=null;try{r.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&v.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];
+c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},l=Ya([h],arguments,1),k,p;do{d=e.$$listeners[a]||c;h.currentScope=e;k=0;for(p=d.length;k<p;k++)if(d[k])try{d[k].apply(null,
+l)}catch(m){f(m)}else d.splice(k,1),k--,p--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=Ya([e],arguments,1),h,l;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(l=d.length;h<l;h++)if(d[h])try{d[h].apply(null,g)}catch(k){f(k)}else d.splice(h,1),h--,l--;if(!(d=c.$$listenerCount[a]&&
+c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var r=new l,O=r.$$asyncQueue=[],n=r.$$postDigestQueue=[],v=r.$$applyAsyncQueue=[];return r}]}function Sd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=
+d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function Df(b){if("self"===b)return b;if(F(b)){if(-1<b.indexOf("***"))throw Ca("iwcard",b);b=gd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(ob(b))return new RegExp("^"+b.source+"$");throw Ca("imatcher");}function hd(b){var a=[];y(b)&&s(b,function(b){a.push(Df(b))});return a}function Te(){this.SCE_CONTEXTS=ma;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=hd(a));return b};
+this.resourceUrlBlacklist=function(b){arguments.length&&(a=hd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Zc(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ca("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));
+var g=e(),h={};h[ma.HTML]=e(g);h[ma.CSS]=e(g);h[ma.URL]=e(g);h[ma.JS]=e(g);h[ma.RESOURCE_URL]=e(h[ma.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===t||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===ma.RESOURCE_URL){var g=Ba(e.toString()),p,q,u=
+!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){u=!0;break}if(u)for(p=0,q=a.length;p<q;p++)if(d(a[p],g)){u=!1;break}if(u)return e;throw Ca("insecurl",e.toString());}if(c===ma.HTML)return f(e);throw Ca("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Se(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Ra)throw Ca("iequirks");var d=qa(ma);d.isEnabled=function(){return b};d.trustAs=
+c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=oa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;s(ma,function(a,b){var c=Q(b);d[cb("parse_as_"+c)]=function(b){return e(a,b)};d[cb("get_trusted_"+c)]=function(b){return f(a,b)};d[cb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Ue(){this.$get=["$window","$document",
+function(b,a){var c={},d=ba((/android (\d+)/.exec(Q((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,m=!1;if(l){for(var p in l)if(k=h.exec(p)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);m=!!("animation"in l||g+"Animation"in l);!d||k&&m||(k=F(f.body.style.webkitTransition),m=F(f.body.style.webkitAnimation))}return{history:!(!b.history||
+!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Ra)return!1;if(D(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:ab(),vendorPrefix:g,transitions:k,animations:m,android:d}}]}function We(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;var g=a.defaults&&a.defaults.transformResponse;x(g)?g=g.filter(function(a){return a!==Yb}):g===Yb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).then(function(a){d.totalPendingRequests--;
+return a.data},function(a){d.totalPendingRequests--;if(!f)throw ja("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Xe(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];s(a,function(a){var d=ga.element(a).data("$binding");d&&s(d,function(d){c?(new RegExp("(^|\\s)"+gd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,
+c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ye(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,l,k){var m=y(k)&&!k,p=(m?d:c).defer(),q=p.promise;l=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),
+e(a)}finally{delete g[q.$$timeoutId]}m||b.$apply()},l);q.$$timeoutId=l;g[l]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Ra&&(Z.setAttribute("href",b),b=Z.href);Z.setAttribute("href",b);return{href:Z.href,protocol:Z.protocol?Z.protocol.replace(/:$/,""):"",host:Z.host,search:Z.search?Z.search.replace(/^\?/,""):"",hash:Z.hash?Z.hash.replace(/^#/,""):"",hostname:Z.hostname,
+port:Z.port,pathname:"/"===Z.pathname.charAt(0)?Z.pathname:"/"+Z.pathname}}function Zc(b){b=F(b)?Ba(b):b;return b.protocol===id.protocol&&b.host===id.host}function Ze(){this.$get=da(M)}function Dc(b){function a(c,d){if(H(c)){var e={};s(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",jd);a("date",kd);a("filter",Ef);a("json",Ff);a("limitTo",Gf);a("lowercase",Hf);a("number",
+ld);a("orderBy",md);a("uppercase",If)}function Ef(){return function(b,a,c){if(!x(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=Jf(a,c,d);break;default:return b}return b.filter(a)}}function Jf(b,a,c){var d=H(b)&&"$"in b;!0===a?a=fa:G(a)||(a=function(a,b){if(H(a)||H(b))return!1;a=Q(""+a);b=Q(""+b);return-1!==a.indexOf(b)});return function(e){return d&&!H(e)?Ia(e,b.$,a,!1):Ia(e,b,a,c)}}function Ia(b,a,c,d,e){var f=typeof b,g=
+typeof a;if("string"===g&&"!"===a.charAt(0))return!Ia(b,a.substring(1),c,d);if("array"===f)return b.some(function(b){return Ia(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&Ia(b[h],a,c,!0))return!0;return e?!1:Ia(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!G(e)&&(f="$"===h,!Ia(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b,a)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){D(d)&&(d=a.CURRENCY_SYM);
+D(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:nd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function ld(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:nd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function nd(b,a,c,d,e){if(!isFinite(b)||H(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var m=g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?b=0:(h=g,k=!0)}if(k)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=
+(g.split(od)[1]||"").length;D(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(od),k=g[0],g=g[1]||"",p=0,q=a.lgSize,u=a.gSize;if(k.length>=q+u)for(p=k.length-q,m=0;m<p;m++)0===(p-m)%u&&0!==m&&(h+=c),h+=k.charAt(m);for(m=p;m<k.length;m++)0===(k.length-m)%q&&0!==m&&(h+=c),h+=k.charAt(m);for(;g.length<e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);l.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return l.join("")}
+function Hb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function $(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Hb(e,a,d)}}function Ib(b,a){return function(c,d){var e=c["get"+b](),f=ub(a?"SHORT"+b:b);return d[f][e]}}function pd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function qd(b){return function(a){var c=pd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),
+a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Hb(a,b)}}function kd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ba(b[9]+b[10]),g=ba(b[9]+b[11]));h.call(a,ba(b[1]),ba(b[2])-1,ba(b[3]));f=ba(b[4]||0)-f;g=ba(b[5]||0)-g;h=ba(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;F(c)&&(c=Kf.test(c)?ba(c):a(c));V(c)&&(c=new Date(c));if(!pa(c))return c;for(;e;)(k=Lf.exec(e))?(h=Ya(h,k,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));s(h,function(a){l=Mf[a];g+=l?l(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ff(){return function(b,a){D(a)&&(a=2);return $a(b,a)}}function Gf(){return function(b,
+a){V(b)&&(b=b.toString());if(!x(b)&&!F(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):ba(a);if(F(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c,d;a>b.length?a=b.length:a<-b.length&&(a=-b.length);if(0<a)c=0,d=a;else{if(!a)return[];c=b.length+a;d=b.length}return b.slice(c,d)}}function md(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function g(a){return null===
+a?"null":"function"===typeof a.valueOf&&(a=a.valueOf(),f(a))||"function"===typeof a.toString&&(a=a.toString(),f(a))?a:""}function h(a,b){var c=typeof a,d=typeof b;c===d&&"object"===c&&(a=g(a),b=g(b));return c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ta(a))return a;c=x(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||oa;if(F(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(h,c);d=b(a);if(d.constant){var f=
+d();return e(function(a,b){return h(a[f],b[f])},c)}}return e(function(a,b){return h(d(a),d(b))},c)});return Za.call(a).sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ja(b){G(b)&&(b={link:b});b.restrict=b.restrict||"AC";return da(b)}function rd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Jb;f.$error={};f.$$success={};f.$pending=t;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=
+!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){s(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){s(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ma(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];s(f.$pending,function(b,c){f.$setValidity(c,null,a)});s(f.$error,function(b,c){f.$setValidity(c,
+null,a)});Xa(g,a)};sd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Xa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Sa);d.addClass(b,Kb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Sa,Kb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;s(g,function(a){a.$setPristine()})};f.$setUntouched=function(){s(g,function(a){a.$setUntouched()})};
+f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function hc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function ib(b,a,c,d,e,f){var g=Q(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=U(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&
+d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input",l);else{var k,m=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Lb(b,a){return function(c,d){var e,f;if(pa(c))return c;if(F(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,
+c.length-1));if(Nf.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},s(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function jb(b,a,c,d){return function(e,f,g,h,l,k,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}
+function q(a){return y(a)?pa(a)?a:c(a):t}td(e,f,g,h);ib(e,f,g,h,l,k);var u=h&&h.$options&&h.$options.timezone,r;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,r),"UTC"===u&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):t});h.$formatters.push(function(a){if(a&&!pa(a))throw Mb("datefmt",a);if(p(a)){if((r=a)&&"UTC"===u){var b=6E4*r.getTimezoneOffset();r=new Date(r.getTime()+b)}return m("date")(a,d,u)}r=null;return""});if(y(g.min)||g.ngMin){var s;h.$validators.min=
+function(a){return!p(a)||D(s)||c(a)>=s};g.$observe("min",function(a){s=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var n;h.$validators.max=function(a){return!p(a)||D(n)||c(a)<=n};g.$observe("max",function(a){n=q(a);h.$validate()})}}}function td(b,a,c,d){(d.$$hasNativeValidators=H(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function ud(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw T("ngModel")("constexpr",c,d);return b(a)}return e}
+function sd(b){function a(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+tc(b,"-"):"";a(kb+b,!0===c);a(vd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[vd]=!(f[kb]=e.hasClass(kb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),wd(d.$pending)&&(d.$pending=t));Wa(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,
+b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(xd,!0),d.$valid=d.$invalid=t,c("",null)):(a(xd,!1),d.$valid=wd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function wd(b){if(b)for(var a in b)return!1;return!0}function ic(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}
+function e(a){if(!x(a)){if(F(a))return a.split(" ");if(H(a)){var b=[];s(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function l(a,b){var c=g.data("$classCounts")||{},d=[];s(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===a||f.$index%2===a){var k=e(b||[]);if(!m){var u=l(k,1);h.$addClass(u)}else if(!fa(b,m)){var r=e(m),u=d(k,r),k=d(r,k),u=l(u,1),k=
+l(k,-1);u&&u.length&&c.addClass(g,u);k&&k.length&&c.removeClass(g,k)}}m=qa(b)}var m;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}var Of=/^\/(.+)\/([a-z]*)$/,Q=function(b){return F(b)?b.toLowerCase():b},rc=Object.prototype.hasOwnProperty,ub=function(b){return F(b)?b.toUpperCase():b},Ra,B,ra,Za=[].slice,rf=[].splice,
+Pf=[].push,Da=Object.prototype.toString,Ka=T("ng"),ga=M.angular||(M.angular={}),bb,nb=0;Ra=Y.documentMode;C.$inject=[];oa.$inject=[];var x=Array.isArray,U=function(b){return F(b)?b.trim():b},gd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},ab=function(){if(y(ab.isActive_))return ab.isActive_;var b=!(!Y.querySelector("[ng-csp]")&&!Y.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return ab.isActive_=b},rb=["ng-","data-ng-","ng:",
+"x-ng-"],Md=/[A-Z]/g,uc=!1,Pb,na=1,pb=3,Qd={full:"1.3.8",major:1,minor:3,dot:8,codeName:"prophetic-narwhal"};R.expando="ng339";var zb=R.cache={},hf=1;R._data=function(b){return this.cache[b[this.expando]]||{}};var cf=/([\:\-\_]+(.))/g,df=/^moz([A-Z])/,Qf={mouseleave:"mouseout",mouseenter:"mouseover"},Sb=T("jqLite"),gf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Rb=/<|&#?\w+;/,ef=/<([\w:]+)/,ff=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ia={option:[1,'<select multiple="multiple">',
+"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option;ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead;ia.th=ia.td;var La=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===Y.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(M).on("load",a))},toString:function(){var b=[];s(this,function(a){b.push(""+
+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?B(this[b]):B(this[this.length+b])},length:0,push:Pf,sort:[].sort,splice:[].splice},Eb={};s("multiple selected checked disabled readOnly required open".split(" "),function(b){Eb[Q(b)]=b});var Mc={};s("input select option textarea button form details".split(" "),function(b){Mc[b]=!0});var Nc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};s({data:Ub,removeData:xb},function(b,a){R[a]=b});s({data:Ub,
+inheritedData:Db,scope:function(b){return B.data(b,"$scope")||Db(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return B.data(b,"$isolateScope")||B.data(b,"$isolateScopeNoTemplate")},controller:Ic,injector:function(b){return Db(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ab,css:function(b,a,c){a=cb(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=Q(a);if(Eb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));
+else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(D(b)){var d=a.nodeType;return d===na||d===pb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(D(a)){if(b.multiple&&"select"===ua(b)){var c=[];s(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?
+null:c}return b.value}b.value=a},html:function(b,a){if(D(a))return b.innerHTML;wb(b,!0);b.innerHTML=a},empty:Jc},function(b,a){R.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Jc&&(2==b.length&&b!==Ab&&b!==Ic?a:d)===t){if(H(a)){for(e=0;e<g;e++)if(b===Ub)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===t?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});s({removeData:xb,on:function a(c,d,e,f){if(y(f))throw Sb("onargs");
+if(Ec(c)){var g=yb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=lf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Qf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Hc,one:function(a,c,d){a=B(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;wb(a);s(new R(c),
+function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];s(a.childNodes,function(a){a.nodeType===na&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===na||11===d){c=new R(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===na){var d=a.firstChild;s(new R(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=B(c).eq(0).clone()[0];
+var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Kc,detach:function(a){Kc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new R(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Cb,removeClass:Bb,toggleClass:function(a,c,d){c&&s(c.split(" "),function(c){var f=d;D(f)&&(f=!Ab(a,c));(f?Cb:Bb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?
+a.getElementsByTagName(c):[]},clone:Tb,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=yb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:C,type:g,target:a},c.type&&(e=z(e,c)),c=qa(h),f=d?[e].concat(d):[e],s(c,function(c){e.isImmediatePropagationStopped()||
+c.apply(a,f)})}},function(a,c){R.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)D(g)?(g=a(this[h],c,e,f),y(g)&&(g=B(g))):Gc(g,a(this[h],c,e,f));return y(g)?g:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});db.prototype={put:function(a,c){this[Na(a,this.nextUid)]=c},get:function(a){return this[Na(a,this.nextUid)]},remove:function(a){var c=this[a=Na(a,this.nextUid)];delete this[a];return c}};var Pc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,nf=/,/,of=/^\s*(_?)(\S+?)\1\s*$/,
+Oc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ga=T("$injector");Ob.$$annotate=Vb;var Rf=T("$animate"),Ce=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Rf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,
+g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ha();s((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});s(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function l(){m||(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function k(a,
+c){if(ga.isObject(c)){var d=z(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,c,d){k(a,{from:c,to:d});return l()},enter:function(a,c,d,e){k(a,e);d?d.after(a):c.prepend(a);return l()},leave:function(a,c){a.remove();return l()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=B(a);c=F(c)?c:x(c)?c.join(" "):"";s(a,function(a){Cb(a,c)});k(a,d);return l()},removeClass:function(a,c,d){return this.setClass(a,
+[],c,d)},$$removeClassImmediately:function(a,c,d){a=B(a);c=F(c)?c:x(c)?c.join(" "):"";s(a,function(a){Bb(a,c)});k(a,d);return l()},setClass:function(a,c,d,e){var k=this,l=!1;a=B(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ga.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=x(c)?c:c.split(" ");d=x(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&
+k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);k(a,e);return l()},enabled:C,cancel:C}}]}],ja=T("$compile");wc.$inject=["$provide","$$sanitizeUriProvider"];var Rc=/^((?:x|data)[\:\-_])/i,Vc="application/json",Zb={"Content-Type":Vc+";charset=utf-8"},tf=/^\[|^\{(?!\{)/,uf={"[":/]$/,"{":/}$/},sf=/^\)\]\}',?\n/,$b=T("$interpolate"),Sf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+xf={http:80,https:443,ftp:21},Fb=T("$location"),Tf={$$html5:!1,$$replace:!1,absUrl:Gb("$$absUrl"),url:function(a){if(D(a))return this.$$url;var c=Sf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Gb("$$protocol"),host:Gb("$$host"),port:Gb("$$port"),path:dd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;
+case 1:if(F(a)||V(a))a=a.toString(),this.$$search=qc(a);else if(H(a))a=Ea(a,{}),s(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Fb("isrcharg");break;default:D(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};s([cd,dc,cc],function(a){a.prototype=Object.create(Tf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;
+if(a!==cc||!this.$$html5)throw Fb("nostate");this.$$state=D(c)?null:c;return this}});var la=T("$parse"),Uf=Function.prototype.call,Vf=Function.prototype.apply,Wf=Function.prototype.bind,lb=ha();s({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;lb[c]=a});lb["this"]=function(a){return a};lb["this"].sharedGetter=!0;var mb=z(ha(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?
+d+e:d:y(e)?e:t},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,
+c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Xf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||
+"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=mb[c],f=mb[d];mb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==
+c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,
+d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=Q(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,
+text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||
+this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Xf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var hb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};hb.ZERO=z(function(){return 0},{sharedGetter:!0,constant:!0});hb.prototype={constructor:hb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);
+a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier&&this.peek().text in lb?a=lb[this.consume().text]:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",
+this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,
+c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw la("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=mb[a];return z(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,
+c,d,e){var f=mb[c];return z(function(c,e){return f(c,e,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return zf(a,this.options,this.text)},constant:function(){var a=this.consume().value;return z(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",
+";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return z(function(f,h){var l=a(f,h);if(e){e[0]=l;for(l=d.length;l--;)e[l+1]=d[l](f,h);return c.apply(t,
+e)}return c(l)},{constant:!c.$stateful&&f.every(ec),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),z(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d=
+this.assignment();return z(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a=this.binaryFn(a,c.text,this.relational());
+return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(hb.ZERO,
+a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=this.identifier();return z(function(d,e,f){d=f||a(d,e);return null==d?t:c(d)},{assign:function(d,e,f){(f=a(d,f))||a.assign(d,f={});return c.assign(f,e)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return z(function(e,f){var g=a(e,f),h=d(e,f);sa(h,c);return g?ta(g[h],c):t},{assign:function(e,f,g){var h=sa(d(e,g),c);(g=ta(a(e,g),c))||a.assign(e,
+g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var l=c?c(g,h):y(c)?t:g,k=a(g,h,l)||C;if(f)for(var m=d.length;m--;)f[m]=ta(d[m](g,h),e);ta(l,e);if(k){if(k.constructor===k)throw la("isecfn",e);if(k===Uf||k===Vf||k===Wf)throw la("isecff",e);}l=k.apply?k.apply(l,f):k(f[0],f[1],f[2],f[3],f[4]);return ta(l,e)}},arrayDeclaration:function(){var a=
+[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return z(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(ec),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))
+}this.consume("}");return z(function(d,f){for(var g={},h=0,l=c.length;h<l;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(ec),inputs:c})}};var Bf=ha(),Af=ha(),Cf=Object.prototype.valueOf,Ca=T("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ja=T("$compile"),Z=Y.createElement("a"),id=Ba(M.location.href);Dc.$inject=["$provide"];jd.$inject=["$locale"];ld.$inject=["$locale"];var od=".",Mf={yyyy:$("FullYear",4),yy:$("FullYear",2,0,!0),y:$("FullYear",1),MMMM:Ib("Month"),
+MMM:Ib("Month",!0),MM:$("Month",2,1),M:$("Month",1,1),dd:$("Date",2),d:$("Date",1),HH:$("Hours",2),H:$("Hours",1),hh:$("Hours",2,-12),h:$("Hours",1,-12),mm:$("Minutes",2),m:$("Minutes",1),ss:$("Seconds",2),s:$("Seconds",1),sss:$("Milliseconds",3),EEEE:Ib("Day"),EEE:Ib("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Hb(Math[0<a?"floor":"ceil"](a/60),2)+Hb(Math.abs(a%60),2))},ww:qd(2),w:qd(1)},Lf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
+Kf=/^\-?\d+$/;kd.$inject=["$locale"];var Hf=da(Q),If=da(ub);md.$inject=["$parse"];var Td=da({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Da.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),vb={};s(Eb,function(a,c){if("multiple"!=a){var d=ya("ng-"+c);vb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});
+s(Nc,function(a,c){vb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Of))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});s(["src","srcset","href"],function(a){var c=ya("ng-"+a);vb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Da.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?
+(f.$set(h,c),Ra&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Jb={$addControl:C,$$renameControl:function(a,c){a.$name=c},$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C,$setSubmitted:C};rd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var yd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:rd,compile:function(a){a.addClass(Sa).addClass(kb);return{pre:function(a,d,g,h){if(!("action"in g)){var l=function(c){a.$apply(function(){h.$commitViewValue();
+h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",l,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",l,!1)},0,!1)})}var k=h.$$parentForm,m=h.$name;m&&(gb(a,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(gb(a,m,t,m),m=c,gb(a,m,h,m),k.$$renameControl(h,m))}));d.on("$destroy",function(){k.$removeControl(h);m&&gb(a,m,t,m);z(h,Jb)})}}}}}]},Ud=yd(),ge=yd(!0),Nf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Yf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
+Zf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,$f=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,zd=/^(\d{4})-(\d{2})-(\d{2})$/,Ad=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,jc=/^(\d{4})-W(\d\d)$/,Bd=/^(\d{4})-(\d\d)$/,Cd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,ag=/(\s+|^)default(\s+|$)/,Mb=new T("ngModel"),Dd={text:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e)},date:jb("date",zd,Lb(zd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":jb("datetimelocal",
+Ad,Lb(Ad,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:jb("time",Cd,Lb(Cd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:jb("week",jc,function(a,c){if(pa(a))return a;if(F(a)){jc.lastIndex=0;var d=jc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=pd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:jb("month",Bd,Lb(Bd,["yyyy","MM"]),"yyyy-MM"),number:function(a,
+c,d,e,f,g){td(a,c,d,e);ib(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:$f.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Mb("numfmt",a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||D(h)||a>=h};d.$observe("min",function(a){y(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(d.max||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||
+D(l)||a<=l};d.$observe("max",function(a){y(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||Yf.test(d)}},email:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||Zf.test(d)}},radio:function(a,c,d,e){D(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&
+e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=ud(l,a,"ngTrueValue",d.ngTrueValue,!0),m=ud(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return fa(a,k)});e.$parsers.push(function(a){return a?k:m})},hidden:C,
+button:C,submit:C,reset:C,file:C},xc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Dd[Q(h.type)]||Dd.text)(f,g,h,l[0],c,a,d,e)}}}}],kb="ng-valid",vd="ng-invalid",Sa="ng-pristine",Kb="ng-dirty",xd="ng-pending",bg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=
+t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=m(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,u=p,r=q,O=null,n=this;this.$$setOptions=function(a){if((n.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");u=function(a){var d=p(a);G(d)&&(d=c(a));return d};
+r=function(a,c){G(p(a))?g(a,{$$$p:n.$modelValue}):q(a,n.$modelValue)}}else if(!p.assign)throw Mb("nonassign",d.ngModel,va(e));};this.$render=C;this.$isEmpty=function(a){return D(a)||""===a||null===a||a!==a};var v=e.inheritedData("$formController")||Jb,w=0;sd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:v,$animate:g});this.$setPristine=function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,Kb);g.addClass(e,Sa)};this.$setDirty=function(){n.$dirty=!0;n.$pristine=
+!1;g.removeClass(e,Sa);g.addClass(e,Kb);v.$setDirty()};this.$setUntouched=function(){n.$touched=!1;n.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){n.$touched=!0;n.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(O);n.$viewValue=n.$$lastCommittedViewValue;n.$render()};this.$validate=function(){if(!V(n.$modelValue)||!isNaN(n.$modelValue)){var a=n.$$rawModelValue,c=n.$valid,d=n.$modelValue,e=n.$options&&n.$options.allowInvalid;
+n.$$runValidators(n.$error[n.$$parserName||"parse"]?!1:t,a,n.$$lastCommittedViewValue,function(f){e||c===f||(n.$modelValue=f?a:t,n.$modelValue!==d&&n.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d,e){function f(){var a=!0;s(n.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(s(n.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;s(n.$asyncValidators,function(f,g){var l=f(c,d);if(!l||!G(l.then))throw Mb("$asyncValidators",l);h(g,t);a.push(l.then(function(){h(g,
+!0)},function(a){e=!1;h(g,!1)}))});a.length?k.all(a).then(function(){l(e)},C):l(!0)}function h(a,c){m===w&&n.$setValidity(a,c)}function l(a){m===w&&e(a)}w++;var m=w;(function(a){var c=n.$$parserName||"parse";if(a===t)h(c,null);else if(h(c,a),!a)return s(n.$validators,function(a,c){h(c,null)}),s(n.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():l(!1):l(!1)};this.$commitViewValue=function(){var a=n.$viewValue;h.cancel(O);if(n.$$lastCommittedViewValue!==a||""===a&&n.$$hasNativeValidators)n.$$lastCommittedViewValue=
+a,n.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=n.$$lastCommittedViewValue,d=D(c)?t:!0;if(d)for(var e=0;e<n.$parsers.length;e++)if(c=n.$parsers[e](c),D(c)){d=!1;break}V(n.$modelValue)&&isNaN(n.$modelValue)&&(n.$modelValue=u(a));var f=n.$modelValue,g=n.$options&&n.$options.allowInvalid;n.$$rawModelValue=c;g&&(n.$modelValue=c,n.$modelValue!==f&&n.$$writeModelToScope());n.$$runValidators(d,c,n.$$lastCommittedViewValue,function(a){g||(n.$modelValue=
+a?c:t,n.$modelValue!==f&&n.$$writeModelToScope())})};this.$$writeModelToScope=function(){r(a,n.$modelValue);s(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};this.$setViewValue=function(a,c){n.$viewValue=a;n.$options&&!n.$options.updateOnDefault||n.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=n.$options;e&&y(e.debounce)&&(e=e.debounce,V(e)?d=e:V(e[c])?d=e[c]:V(e["default"])&&(d=e["default"]));h.cancel(O);d?O=h(function(){n.$commitViewValue()},d):
+l.$$phase?n.$commitViewValue():a.$apply(function(){n.$commitViewValue()})};a.$watch(function(){var c=u(a);if(c!==n.$modelValue){n.$modelValue=n.$$rawModelValue=c;for(var d=n.$formatters,e=d.length,f=c;e--;)f=d[e](f);n.$viewValue!==f&&(n.$viewValue=n.$$lastCommittedViewValue=f,n.$render(),n.$$runValidators(t,c,f,C))}return c})}],ve=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:bg,priority:1,compile:function(c){c.addClass(Sa).addClass("ng-untouched").addClass(kb);
+return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Jb;h.$$setOptions(g[2]&&g[2].$options);l.$addControl(h);f.$observe("name",function(a){h.$name!==a&&l.$$renameControl(h,a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],xe=da({restrict:"A",require:"ngModel",
+link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},yc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){F(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&
+!a.test)throw T("ngPattern")("noregexp",g,a,va(c));f=a||t;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||D(f)||f.test(a)}}}}},Bc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=ba(a);f=isNaN(a)?-1:a;e.$validate()});e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(a)||c.length<=f}}}}},Ac=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",
+function(a){f=ba(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}},we=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?U(f):f;e.$parsers.push(function(a){if(!D(a)){var c=[];a&&s(a.split(h),function(a){a&&c.push(g?U(a):a)});return c}});e.$formatters.push(function(a){return x(a)?a.join(f):t});e.$isEmpty=function(a){return!a||!a.length}}}},cg=/^(true|false|\d+)$/,
+ye=function(){return{restrict:"A",priority:100,compile:function(a,c){return cg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},ze=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==t?(this.$options.updateOnDefault=!1,this.$options.updateOn=U(this.$options.updateOn.replace(ag,function(){d.$options.updateOnDefault=
+!0;return" "}))):this.$options.updateOnDefault=!0}]}},Zd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],ae=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=
+a===t?"":a})}}}}],$d=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],be=ic("",!0),de=ic("Odd",0),ce=ic("Even",1),ee=Ja({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),fe=[function(){return{restrict:"A",scope:!0,controller:"@",
+priority:500}}],Cc={},dg={blur:!0,focus:!0};s("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ya("ng-"+a);Cc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};dg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ie=["$animate",function(a){return{multiElement:!0,
+transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=Y.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=tb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],je=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",
+controller:ga.noop,compile:function(f,g){var h=g.ngInclude||g.src,l=g.onload||"",k=g.autoscroll;return function(f,g,q,s,r){var t=0,n,v,w,L=function(){v&&(v.remove(),v=null);n&&(n.$destroy(),n=null);w&&(d.leave(w).then(function(){v=null}),v=w,w=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!y(k)||k&&!f.$eval(k)||c()},q=++t;e?(a(e,!0).then(function(a){if(q===t){var c=f.$new();s.template=a;a=r(c,function(a){L();d.enter(a,null,g).then(h)});n=c;w=a;n.$emit("$includeContentLoaded",
+e);f.$eval(l)}},function(){q===t&&(L(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(L(),s.template=null)})}}}}],Ae=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Fc(f.template,Y).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ke=Ja({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),
+le=Ja({terminal:!0,priority:1E3}),me=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function l(a){g.text(a||"")}var k=h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(m)||{},u={},m=c.startSymbol(),r=c.endSymbol(),t=m+k+"-"+p+r,n=ga.noop,v;s(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+Q(d[2]),q[d]=g.attr(h.$attr[c]))});s(q,function(a,e){u[e]=c(a.replace(d,t))});f.$watch(k,function(c){c=parseFloat(c);var d=
+isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===v||d&&isNaN(v)||(n(),n=f.$watch(u[c],l),v=c)})}}}],ne=["$parse","$animate",function(a,c){var d=T("ngRepeat"),e=function(a,c,d,e,k,m,p){a[d]=e;k&&(a[k]=m);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=Y.createComment(" end ngRepeat: "+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+if(!k)throw d("iexp",h);var m=k[1],p=k[2],q=k[3],u=k[4],k=m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",m);var r=k[3]||k[1],y=k[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(q)))throw d("badident",q);var n,v,w,D,z={$id:Na};u?n=a(u):(w=function(a,c){return Na(c)},D=function(a){return a});return function(a,f,g,k,m){n&&(v=function(c,d,e){y&&(z[y]=c);z[r]=d;z.$index=e;return n(a,
+z)});var u=ha();a.$watchCollection(p,function(g){var k,p,n=f[0],E,z=ha(),C,S,N,G,J,x,H;q&&(a[q]=g);if(Ta(g))J=g,p=v||w;else{p=v||D;J=[];for(H in g)g.hasOwnProperty(H)&&"$"!=H.charAt(0)&&J.push(H);J.sort()}C=J.length;H=Array(C);for(k=0;k<C;k++)if(S=g===J?k:J[k],N=g[S],G=p(S,N,k),u[G])x=u[G],delete u[G],z[G]=x,H[k]=x;else{if(z[G])throw s(H,function(a){a&&a.scope&&(u[a.id]=a)}),d("dupes",h,G,N);H[k]={id:G,scope:t,clone:t};z[G]=!0}for(E in u){x=u[E];G=tb(x.clone);c.leave(G);if(G[0].parentNode)for(k=0,
+p=G.length;k<p;k++)G[k].$$NG_REMOVED=!0;x.scope.$destroy()}for(k=0;k<C;k++)if(S=g===J?k:J[k],N=g[S],x=H[k],x.scope){E=n;do E=E.nextSibling;while(E&&E.$$NG_REMOVED);x.clone[0]!=E&&c.move(tb(x.clone),null,B(n));n=x.clone[x.clone.length-1];e(x.scope,k,r,N,y,S,C)}else m(function(a,d){x.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c.enter(a,null,B(n));n=f;x.clone=a;z[x.id]=x;e(x.scope,k,r,N,y,S,C)});u=z})}}}}],oe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,
+function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],he=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],pe=Ja(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&s(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),qe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases=
+{}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],m=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var r=tb(h[d].clone);k[d].$destroy();(l[d]=a.leave(r)).then(m(l,d))}h.length=0;k.length=0;(g=f.cases["!"+c]||f.cases["?"])&&s(g,function(c){c.transclude(function(d,e){k.push(e);var f=c.element;d[d.length++]=Y.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,
+f.parent(),f)})})})}}}],re=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),se=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),ue=Ja({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw T("ngTransclude")("orphan",
+va(c));f(function(a){c.empty();c.append(a)})}}),Vd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],eg=T("ngOptions"),te=da({restrict:"A",terminal:!0}),Wd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:C};
+return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},m=e,p;l.databound=d.ngModel;l.init=function(a,c,d){m=a;p=d};l.addOption=function(c,d){Ma(c,'"option value"');k[c]=!0;m.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],m.$viewValue===a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c="? "+Na(c)+" ?";
+p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=C})}],link:function(e,g,h,l){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(C.parent()&&C.remove(),c.val(a),""===a&&n.prop("selected",!0)):D(a)&&n?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){C.parent()&&C.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=
+new db(d.$viewValue);s(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){fa(e,d.$viewValue)||(e=qa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];s(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){T[A]=d;H&&(T[H]=c);return a(e,T)}function k(a){var c;if(u)if(M&&x(a)){c=new db([]);for(var d=0;d<a.length;d++)c.put(h(M,null,a[d]),!0)}else c=new db(a);else M&&(a=h(M,null,
+a));return function(d,e){var f;f=M?M:B?B:F;return u?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){v||(e.$$postDigest(p),v=!0)}function m(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function p(){v=!1;var a={"":[]},c=[""],d,l,n,r,t;n=g.$viewValue;r=P(e)||[];var B=H?Object.keys(r).sort():r,x,A,D,F,N={};t=k(n);var I=!1,U,V;Q={};for(F=0;D=B.length,F<D;F++){x=F;if(H&&(x=B[F],"$"===x.charAt(0)))continue;A=r[x];d=h(J,x,A)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=t(x,A);I=I||d;A=h(C,x,A);A=y(A)?A:"";V=M?M(e,T):H?B[F]:
+F;M&&(Q[V]=x);l.push({id:V,label:A,selected:d})}u||(z||null===n?a[""].unshift({id:"",label:"",selected:!I}):I||a[""].unshift({id:"?",label:"",selected:!0}));x=0;for(B=c.length;x<B;x++){d=c[x];l=a[d];R.length<=x?(n={element:G.clone().attr("label",d),label:l.label},r=[n],R.push(r),f.append(n.element)):(r=R[x],n=r[0],n.label!=d&&n.element.attr("label",n.label=d));I=null;F=0;for(D=l.length;F<D;F++)d=l[F],(t=r[F+1])?(I=t.element,t.label!==d.label&&(m(N,t.label,!1),m(N,d.label,!0),I.text(t.label=d.label),
+I.prop("label",t.label)),t.id!==d.id&&I.val(t.id=d.id),I[0].selected!==d.selected&&(I.prop("selected",t.selected=d.selected),Ra&&I.prop("selected",t.selected))):(""===d.id&&z?U=z:(U=w.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),r.push(t={element:U,label:d.label,id:d.id,selected:d.selected}),m(N,d.label,!0),I?I.after(U):n.element.append(U),I=U);for(F++;r.length>F;)d=r.pop(),m(N,d.label,!1),d.element.remove()}for(;R.length>x;){l=R.pop();
+for(F=1;F<l.length;++F)m(N,l[F].label,!1);l[0].element.remove()}s(N,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var n;if(!(n=r.match(d)))throw eg("iexp",r,va(f));var C=c(n[2]||n[1]),A=n[4]||n[6],D=/ as /.test(n[0])&&n[1],B=D?c(D):null,H=n[5],J=c(n[3]||""),F=c(n[2]?n[1]:A),P=c(n[7]),M=n[8]?c(n[8]):null,Q={},R=[[{element:f,label:""}]],T={};z&&(a(z)(e),z.removeClass("ng-scope"),z.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=P(e)||[],c;if(u)c=[],s(f.val(),function(d){d=
+M?Q[d]:d;c.push("?"===d?t:""===d?null:h(B?B:F,d,a[d]))});else{var d=M?Q[f.val()]:f.val();c="?"===d?t:""===d?null:h(B?B:F,d,a[d])}g.$setViewValue(c);p()})});g.$render=p;e.$watchCollection(P,l);e.$watchCollection(function(){var a=P(e),c;if(a&&x(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(C,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(C,d,a[d]));return c},l);u&&e.$watchCollection(function(){return g.$modelValue},l)}if(l[1]){var q=l[0];l=l[1];var u=h.multiple,r=h.ngOptions,
+z=!1,n,v=!1,w=B(Y.createElement("option")),G=B(Y.createElement("optgroup")),C=w.clone();h=0;for(var A=g.children(),H=A.length;h<H;h++)if(""===A[h].value){n=z=A.eq(h);break}q.init(l,z,C);u&&(l.$isEmpty=function(a){return!a||0===a.length});r?p(e,g,l):u?m(e,g,l):k(e,g,l,q)}}}}],Yd=["$interpolate",function(a){var c={addOption:C,removeOption:C};return{restrict:"E",priority:100,compile:function(d,e){if(D(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),
+m=k.data("$selectController")||k.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a,d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Xd=da({restrict:"E",terminal:!1});M.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Nd(),Pd(ga),B(Y).ready(function(){Jd(Y,sc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
+//# sourceMappingURL=angular.min.js.map
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.js b/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.js
new file mode 100644
index 000000000..9a5828be1
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.js
@@ -0,0 +1,1194 @@
+/*
+
+Chosen
+
+- by Patrick Filler for Harvest http://getharvest.com
+- Copyright (c) 2011-2013 by Harvest
+
+Available for use under the MIT License
+
+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.
+
+*/
+// Chosen, a Select Box Enhancer for jQuery and Prototype
+// by Patrick Filler for Harvest, http://getharvest.com
+//
+// Version 1.0.0
+// Full source at https://github.com/harvesthq/chosen
+// Copyright (c) 2011 Harvest http://getharvest.com
+
+// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
+// This file is generated by `grunt build`, do not edit it by hand.
+(function() {
+ var $, AbstractChosen, Chosen, SelectParser, _ref,
+ __hasProp = {}.hasOwnProperty,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+ SelectParser = (function() {
+ function SelectParser() {
+ this.options_index = 0;
+ this.parsed = [];
+ }
+
+ SelectParser.prototype.add_node = function(child) {
+ if (child.nodeName.toUpperCase() === "OPTGROUP") {
+ return this.add_group(child);
+ } else {
+ return this.add_option(child);
+ }
+ };
+
+ SelectParser.prototype.add_group = function(group) {
+ var group_position, option, _i, _len, _ref, _results;
+
+ group_position = this.parsed.length;
+ this.parsed.push({
+ array_index: group_position,
+ group: true,
+ label: this.escapeExpression(group.label),
+ children: 0,
+ disabled: group.disabled
+ });
+ _ref = group.childNodes;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ _results.push(this.add_option(option, group_position, group.disabled));
+ }
+ return _results;
+ };
+
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
+ if (option.nodeName.toUpperCase() === "OPTION") {
+ if (option.text !== "") {
+ if (group_position != null) {
+ this.parsed[group_position].children += 1;
+ }
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ value: option.value,
+ text: option.text,
+ html: option.innerHTML,
+ selected: option.selected,
+ disabled: group_disabled === true ? group_disabled : option.disabled,
+ group_array_index: group_position,
+ classes: option.className,
+ style: option.style.cssText
+ });
+ } else {
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ empty: true
+ });
+ }
+ return this.options_index += 1;
+ }
+ };
+
+ SelectParser.prototype.escapeExpression = function(text) {
+ var map, unsafe_chars;
+
+ if ((text == null) || text === false) {
+ return "";
+ }
+ if (!/[\&\<\>\"\'\`]/.test(text)) {
+ return text;
+ }
+ map = {
+ "<": "&lt;",
+ ">": "&gt;",
+ '"': "&quot;",
+ "'": "&#x27;",
+ "`": "&#x60;"
+ };
+ unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
+ return text.replace(unsafe_chars, function(chr) {
+ return map[chr] || "&amp;";
+ });
+ };
+
+ return SelectParser;
+
+ })();
+
+ SelectParser.select_to_array = function(select) {
+ var child, parser, _i, _len, _ref;
+
+ parser = new SelectParser();
+ _ref = select.childNodes;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ child = _ref[_i];
+ parser.add_node(child);
+ }
+ return parser.parsed;
+ };
+
+ AbstractChosen = (function() {
+ function AbstractChosen(form_field, options) {
+ this.form_field = form_field;
+ this.options = options != null ? options : {};
+ if (!AbstractChosen.browser_is_supported()) {
+ return;
+ }
+ this.is_multiple = this.form_field.multiple;
+ this.set_default_text();
+ this.set_default_values();
+ this.setup();
+ this.set_up_html();
+ this.register_observers();
+ }
+
+ AbstractChosen.prototype.set_default_values = function() {
+ var _this = this;
+
+ this.click_test_action = function(evt) {
+ return _this.test_active_click(evt);
+ };
+ this.activate_action = function(evt) {
+ return _this.activate_field(evt);
+ };
+ this.active_field = false;
+ this.mouse_on_container = false;
+ this.results_showing = false;
+ this.result_highlighted = null;
+ this.result_single_selected = null;
+ this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
+ this.disable_search_threshold = this.options.disable_search_threshold || 0;
+ this.disable_search = this.options.disable_search || false;
+ this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
+ this.group_search = this.options.group_search != null ? this.options.group_search : true;
+ this.search_contains = this.options.search_contains || false;
+ this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
+ this.max_selected_options = this.options.max_selected_options || Infinity;
+ this.inherit_select_classes = this.options.inherit_select_classes || false;
+ this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
+ return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
+ };
+
+ AbstractChosen.prototype.set_default_text = function() {
+ if (this.form_field.getAttribute("data-placeholder")) {
+ this.default_text = this.form_field.getAttribute("data-placeholder");
+ } else if (this.is_multiple) {
+ this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
+ } else {
+ this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
+ }
+ return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
+ };
+
+ AbstractChosen.prototype.mouse_enter = function() {
+ return this.mouse_on_container = true;
+ };
+
+ AbstractChosen.prototype.mouse_leave = function() {
+ return this.mouse_on_container = false;
+ };
+
+ AbstractChosen.prototype.input_focus = function(evt) {
+ var _this = this;
+
+ if (this.is_multiple) {
+ if (!this.active_field) {
+ return setTimeout((function() {
+ return _this.container_mousedown();
+ }), 50);
+ }
+ } else {
+ if (!this.active_field) {
+ return this.activate_field();
+ }
+ }
+ };
+
+ AbstractChosen.prototype.input_blur = function(evt) {
+ var _this = this;
+
+ if (!this.mouse_on_container) {
+ this.active_field = false;
+ return setTimeout((function() {
+ return _this.blur_test();
+ }), 100);
+ }
+ };
+
+ AbstractChosen.prototype.results_option_build = function(options) {
+ var content, data, _i, _len, _ref;
+
+ content = '';
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ data = _ref[_i];
+ if (data.group) {
+ content += this.result_add_group(data);
+ } else {
+ content += this.result_add_option(data);
+ }
+ if (options != null ? options.first : void 0) {
+ if (data.selected && this.is_multiple) {
+ this.choice_build(data);
+ } else if (data.selected && !this.is_multiple) {
+ this.single_set_selected_text(data.text);
+ }
+ }
+ }
+ return content;
+ };
+
+ AbstractChosen.prototype.result_add_option = function(option) {
+ var classes, style;
+
+ if (!option.search_match) {
+ return '';
+ }
+ if (!this.include_option_in_results(option)) {
+ return '';
+ }
+ classes = [];
+ if (!option.disabled && !(option.selected && this.is_multiple)) {
+ classes.push("active-result");
+ }
+ if (option.disabled && !(option.selected && this.is_multiple)) {
+ classes.push("disabled-result");
+ }
+ if (option.selected) {
+ classes.push("result-selected");
+ }
+ if (option.group_array_index != null) {
+ classes.push("group-option");
+ }
+ if (option.classes !== "") {
+ classes.push(option.classes);
+ }
+ style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : "";
+ return "<li class=\"" + (classes.join(' ')) + "\"" + style + " data-option-array-index=\"" + option.array_index + "\">" + option.search_text + "</li>";
+ };
+
+ AbstractChosen.prototype.result_add_group = function(group) {
+ if (!(group.search_match || group.group_match)) {
+ return '';
+ }
+ if (!(group.active_options > 0)) {
+ return '';
+ }
+ return "<li class=\"group-result\">" + group.search_text + "</li>";
+ };
+
+ AbstractChosen.prototype.results_update_field = function() {
+ this.set_default_text();
+ if (!this.is_multiple) {
+ this.results_reset_cleanup();
+ }
+ this.result_clear_highlight();
+ this.result_single_selected = null;
+ this.results_build();
+ if (this.results_showing) {
+ return this.winnow_results();
+ }
+ };
+
+ AbstractChosen.prototype.results_toggle = function() {
+ if (this.results_showing) {
+ return this.results_hide();
+ } else {
+ return this.results_show();
+ }
+ };
+
+ AbstractChosen.prototype.results_search = function(evt) {
+ if (this.results_showing) {
+ return this.winnow_results();
+ } else {
+ return this.results_show();
+ }
+ };
+
+ AbstractChosen.prototype.winnow_results = function() {
+ var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
+
+ this.no_results_clear();
+ results = 0;
+ searchText = this.get_search_text();
+ escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ regexAnchor = this.search_contains ? "" : "^";
+ regex = new RegExp(regexAnchor + escapedSearchText, 'i');
+ zregex = new RegExp(escapedSearchText, 'i');
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ option.search_match = false;
+ results_group = null;
+ if (this.include_option_in_results(option)) {
+ if (option.group) {
+ option.group_match = false;
+ option.active_options = 0;
+ }
+ if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
+ results_group = this.results_data[option.group_array_index];
+ if (results_group.active_options === 0 && results_group.search_match) {
+ results += 1;
+ }
+ results_group.active_options += 1;
+ }
+ if (!(option.group && !this.group_search)) {
+ option.search_text = option.group ? option.label : option.html;
+ option.search_match = this.search_string_match(option.search_text, regex);
+ if (option.search_match && !option.group) {
+ results += 1;
+ }
+ if (option.search_match) {
+ if (searchText.length) {
+ startpos = option.search_text.search(zregex);
+ text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
+ option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
+ }
+ if (results_group != null) {
+ results_group.group_match = true;
+ }
+ } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
+ option.search_match = true;
+ }
+ }
+ }
+ }
+ this.result_clear_highlight();
+ if (results < 1 && searchText.length) {
+ this.update_results_content("");
+ return this.no_results(searchText);
+ } else {
+ this.update_results_content(this.results_option_build());
+ return this.winnow_results_set_highlight();
+ }
+ };
+
+ AbstractChosen.prototype.search_string_match = function(search_string, regex) {
+ var part, parts, _i, _len;
+
+ if (regex.test(search_string)) {
+ return true;
+ } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
+ parts = search_string.replace(/\[|\]/g, "").split(" ");
+ if (parts.length) {
+ for (_i = 0, _len = parts.length; _i < _len; _i++) {
+ part = parts[_i];
+ if (regex.test(part)) {
+ return true;
+ }
+ }
+ }
+ }
+ };
+
+ AbstractChosen.prototype.choices_count = function() {
+ var option, _i, _len, _ref;
+
+ if (this.selected_option_count != null) {
+ return this.selected_option_count;
+ }
+ this.selected_option_count = 0;
+ _ref = this.form_field.options;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ if (option.selected) {
+ this.selected_option_count += 1;
+ }
+ }
+ return this.selected_option_count;
+ };
+
+ AbstractChosen.prototype.choices_click = function(evt) {
+ evt.preventDefault();
+ if (!(this.results_showing || this.is_disabled)) {
+ return this.results_show();
+ }
+ };
+
+ AbstractChosen.prototype.keyup_checker = function(evt) {
+ var stroke, _ref;
+
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
+ this.search_field_scale();
+ switch (stroke) {
+ case 8:
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
+ return this.keydown_backstroke();
+ } else if (!this.pending_backstroke) {
+ this.result_clear_highlight();
+ return this.results_search();
+ }
+ break;
+ case 13:
+ evt.preventDefault();
+ if (this.results_showing) {
+ return this.result_select(evt);
+ }
+ break;
+ case 27:
+ if (this.results_showing) {
+ this.results_hide();
+ }
+ return true;
+ case 9:
+ case 38:
+ case 40:
+ case 16:
+ case 91:
+ case 17:
+ break;
+ default:
+ return this.results_search();
+ }
+ };
+
+ AbstractChosen.prototype.container_width = function() {
+ if (this.options.width != null) {
+ return this.options.width;
+ } else {
+ return "" + this.form_field.offsetWidth + "px";
+ }
+ };
+
+ AbstractChosen.prototype.include_option_in_results = function(option) {
+ if (this.is_multiple && (!this.display_selected_options && option.selected)) {
+ return false;
+ }
+ if (!this.display_disabled_options && option.disabled) {
+ return false;
+ }
+ if (option.empty) {
+ return false;
+ }
+ return true;
+ };
+
+ AbstractChosen.browser_is_supported = function() {
+ if (window.navigator.appName === "Microsoft Internet Explorer") {
+ return document.documentMode >= 8;
+ }
+ if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
+ return false;
+ }
+ if (/Android/i.test(window.navigator.userAgent)) {
+ if (/Mobile/i.test(window.navigator.userAgent)) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ AbstractChosen.default_multiple_text = "Select Some Options";
+
+ AbstractChosen.default_single_text = "Select an Option";
+
+ AbstractChosen.default_no_result_text = "No results match";
+
+ return AbstractChosen;
+
+ })();
+
+ $ = jQuery;
+
+ $.fn.extend({
+ chosen: function(options) {
+ if (!AbstractChosen.browser_is_supported()) {
+ return this;
+ }
+ return this.each(function(input_field) {
+ var $this, chosen;
+
+ $this = $(this);
+ chosen = $this.data('chosen');
+ if (options === 'destroy' && chosen) {
+ chosen.destroy();
+ } else if (!chosen) {
+ $this.data('chosen', new Chosen(this, options));
+ }
+ });
+ }
+ });
+
+ Chosen = (function(_super) {
+ __extends(Chosen, _super);
+
+ function Chosen() {
+ _ref = Chosen.__super__.constructor.apply(this, arguments);
+ return _ref;
+ }
+
+ Chosen.prototype.setup = function() {
+ this.form_field_jq = $(this.form_field);
+ this.current_selectedIndex = this.form_field.selectedIndex;
+ return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
+ };
+
+ Chosen.prototype.set_up_html = function() {
+ var container_classes, container_props;
+
+ container_classes = ["chosen-container"];
+ container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
+ if (this.inherit_select_classes && this.form_field.className) {
+ container_classes.push(this.form_field.className);
+ }
+ if (this.is_rtl) {
+ container_classes.push("chosen-rtl");
+ }
+ container_props = {
+ 'class': container_classes.join(' '),
+ 'style': "width: " + (this.container_width()) + ";",
+ 'title': this.form_field.title
+ };
+ if (this.form_field.id.length) {
+ container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
+ }
+ this.container = $("<div />", container_props);
+ if (this.is_multiple) {
+ this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
+ } else {
+ this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
+ }
+ this.form_field_jq.hide().after(this.container);
+ this.dropdown = this.container.find('div.chosen-drop').first();
+ this.search_field = this.container.find('input').first();
+ this.search_results = this.container.find('ul.chosen-results').first();
+ this.search_field_scale();
+ this.search_no_results = this.container.find('li.no-results').first();
+ if (this.is_multiple) {
+ this.search_choices = this.container.find('ul.chosen-choices').first();
+ this.search_container = this.container.find('li.search-field').first();
+ } else {
+ this.search_container = this.container.find('div.chosen-search').first();
+ this.selected_item = this.container.find('.chosen-single').first();
+ }
+ this.results_build();
+ this.set_tab_index();
+ this.set_label_behavior();
+ return this.form_field_jq.trigger("chosen:ready", {
+ chosen: this
+ });
+ };
+
+ Chosen.prototype.register_observers = function() {
+ var _this = this;
+
+ this.container.bind('mousedown.chosen', function(evt) {
+ _this.container_mousedown(evt);
+ });
+ this.container.bind('mouseup.chosen', function(evt) {
+ _this.container_mouseup(evt);
+ });
+ this.container.bind('mouseenter.chosen', function(evt) {
+ _this.mouse_enter(evt);
+ });
+ this.container.bind('mouseleave.chosen', function(evt) {
+ _this.mouse_leave(evt);
+ });
+ this.search_results.bind('mouseup.chosen', function(evt) {
+ _this.search_results_mouseup(evt);
+ });
+ this.search_results.bind('mouseover.chosen', function(evt) {
+ _this.search_results_mouseover(evt);
+ });
+ this.search_results.bind('mouseout.chosen', function(evt) {
+ _this.search_results_mouseout(evt);
+ });
+ this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
+ _this.search_results_mousewheel(evt);
+ });
+ this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
+ _this.results_update_field(evt);
+ });
+ this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
+ _this.activate_field(evt);
+ });
+ this.form_field_jq.bind("chosen:open.chosen", function(evt) {
+ _this.container_mousedown(evt);
+ });
+ this.search_field.bind('blur.chosen', function(evt) {
+ _this.input_blur(evt);
+ });
+ this.search_field.bind('keyup.chosen', function(evt) {
+ _this.keyup_checker(evt);
+ });
+ this.search_field.bind('keydown.chosen', function(evt) {
+ _this.keydown_checker(evt);
+ });
+ this.search_field.bind('focus.chosen', function(evt) {
+ _this.input_focus(evt);
+ });
+ if (this.is_multiple) {
+ return this.search_choices.bind('click.chosen', function(evt) {
+ _this.choices_click(evt);
+ });
+ } else {
+ return this.container.bind('click.chosen', function(evt) {
+ evt.preventDefault();
+ });
+ }
+ };
+
+ Chosen.prototype.destroy = function() {
+ $(document).unbind("click.chosen", this.click_test_action);
+ if (this.search_field[0].tabIndex) {
+ this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
+ }
+ this.container.remove();
+ this.form_field_jq.removeData('chosen');
+ return this.form_field_jq.show();
+ };
+
+ Chosen.prototype.search_field_disabled = function() {
+ this.is_disabled = this.form_field_jq[0].disabled;
+ if (this.is_disabled) {
+ this.container.addClass('chosen-disabled');
+ this.search_field[0].disabled = true;
+ if (!this.is_multiple) {
+ this.selected_item.unbind("focus.chosen", this.activate_action);
+ }
+ return this.close_field();
+ } else {
+ this.container.removeClass('chosen-disabled');
+ this.search_field[0].disabled = false;
+ if (!this.is_multiple) {
+ return this.selected_item.bind("focus.chosen", this.activate_action);
+ }
+ }
+ };
+
+ Chosen.prototype.container_mousedown = function(evt) {
+ if (!this.is_disabled) {
+ if (evt && evt.type === "mousedown" && !this.results_showing) {
+ evt.preventDefault();
+ }
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
+ if (!this.active_field) {
+ if (this.is_multiple) {
+ this.search_field.val("");
+ }
+ $(document).bind('click.chosen', this.click_test_action);
+ this.results_show();
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
+ evt.preventDefault();
+ this.results_toggle();
+ }
+ return this.activate_field();
+ }
+ }
+ };
+
+ Chosen.prototype.container_mouseup = function(evt) {
+ if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
+ return this.results_reset(evt);
+ }
+ };
+
+ Chosen.prototype.search_results_mousewheel = function(evt) {
+ var delta, _ref1, _ref2;
+
+ delta = -((_ref1 = evt.originalEvent) != null ? _ref1.wheelDelta : void 0) || ((_ref2 = evt.originialEvent) != null ? _ref2.detail : void 0);
+ if (delta != null) {
+ evt.preventDefault();
+ if (evt.type === 'DOMMouseScroll') {
+ delta = delta * 40;
+ }
+ return this.search_results.scrollTop(delta + this.search_results.scrollTop());
+ }
+ };
+
+ Chosen.prototype.blur_test = function(evt) {
+ if (!this.active_field && this.container.hasClass("chosen-container-active")) {
+ return this.close_field();
+ }
+ };
+
+ Chosen.prototype.close_field = function() {
+ $(document).unbind("click.chosen", this.click_test_action);
+ this.active_field = false;
+ this.results_hide();
+ this.container.removeClass("chosen-container-active");
+ this.clear_backstroke();
+ this.show_search_field_default();
+ return this.search_field_scale();
+ };
+
+ Chosen.prototype.activate_field = function() {
+ this.container.addClass("chosen-container-active");
+ this.active_field = true;
+ this.search_field.val(this.search_field.val());
+ return this.search_field.focus();
+ };
+
+ Chosen.prototype.test_active_click = function(evt) {
+ if (this.container.is($(evt.target).closest('.chosen-container'))) {
+ return this.active_field = true;
+ } else {
+ return this.close_field();
+ }
+ };
+
+ Chosen.prototype.results_build = function() {
+ this.parsing = true;
+ this.selected_option_count = null;
+ this.results_data = SelectParser.select_to_array(this.form_field);
+ if (this.is_multiple) {
+ this.search_choices.find("li.search-choice").remove();
+ } else if (!this.is_multiple) {
+ this.single_set_selected_text();
+ if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
+ this.search_field[0].readOnly = true;
+ this.container.addClass("chosen-container-single-nosearch");
+ } else {
+ this.search_field[0].readOnly = false;
+ this.container.removeClass("chosen-container-single-nosearch");
+ }
+ }
+ this.update_results_content(this.results_option_build({
+ first: true
+ }));
+ this.search_field_disabled();
+ this.show_search_field_default();
+ this.search_field_scale();
+ return this.parsing = false;
+ };
+
+ Chosen.prototype.result_do_highlight = function(el) {
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
+
+ if (el.length) {
+ this.result_clear_highlight();
+ this.result_highlight = el;
+ this.result_highlight.addClass("highlighted");
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
+ visible_top = this.search_results.scrollTop();
+ visible_bottom = maxHeight + visible_top;
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
+ high_bottom = high_top + this.result_highlight.outerHeight();
+ if (high_bottom >= visible_bottom) {
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
+ } else if (high_top < visible_top) {
+ return this.search_results.scrollTop(high_top);
+ }
+ }
+ };
+
+ Chosen.prototype.result_clear_highlight = function() {
+ if (this.result_highlight) {
+ this.result_highlight.removeClass("highlighted");
+ }
+ return this.result_highlight = null;
+ };
+
+ Chosen.prototype.results_show = function() {
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
+ this.form_field_jq.trigger("chosen:maxselected", {
+ chosen: this
+ });
+ return false;
+ }
+ this.container.addClass("chosen-with-drop");
+ this.form_field_jq.trigger("chosen:showing_dropdown", {
+ chosen: this
+ });
+ this.results_showing = true;
+ this.search_field.focus();
+ this.search_field.val(this.search_field.val());
+ return this.winnow_results();
+ };
+
+ Chosen.prototype.update_results_content = function(content) {
+ return this.search_results.html(content);
+ };
+
+ Chosen.prototype.results_hide = function() {
+ if (this.results_showing) {
+ this.result_clear_highlight();
+ this.container.removeClass("chosen-with-drop");
+ this.form_field_jq.trigger("chosen:hiding_dropdown", {
+ chosen: this
+ });
+ }
+ return this.results_showing = false;
+ };
+
+ Chosen.prototype.set_tab_index = function(el) {
+ var ti;
+
+ if (this.form_field.tabIndex) {
+ ti = this.form_field.tabIndex;
+ this.form_field.tabIndex = -1;
+ return this.search_field[0].tabIndex = ti;
+ }
+ };
+
+ Chosen.prototype.set_label_behavior = function() {
+ var _this = this;
+
+ this.form_field_label = this.form_field_jq.parents("label");
+ if (!this.form_field_label.length && this.form_field.id.length) {
+ this.form_field_label = $("label[for='" + this.form_field.id + "']");
+ }
+ if (this.form_field_label.length > 0) {
+ return this.form_field_label.bind('click.chosen', function(evt) {
+ if (_this.is_multiple) {
+ return _this.container_mousedown(evt);
+ } else {
+ return _this.activate_field();
+ }
+ });
+ }
+ };
+
+ Chosen.prototype.show_search_field_default = function() {
+ if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
+ this.search_field.val(this.default_text);
+ return this.search_field.addClass("default");
+ } else {
+ this.search_field.val("");
+ return this.search_field.removeClass("default");
+ }
+ };
+
+ Chosen.prototype.search_results_mouseup = function(evt) {
+ var target;
+
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+ if (target.length) {
+ this.result_highlight = target;
+ this.result_select(evt);
+ return this.search_field.focus();
+ }
+ };
+
+ Chosen.prototype.search_results_mouseover = function(evt) {
+ var target;
+
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+ if (target) {
+ return this.result_do_highlight(target);
+ }
+ };
+
+ Chosen.prototype.search_results_mouseout = function(evt) {
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
+ return this.result_clear_highlight();
+ }
+ };
+
+ Chosen.prototype.choice_build = function(item) {
+ var choice, close_link,
+ _this = this;
+
+ choice = $('<li />', {
+ "class": "search-choice"
+ }).html("<span>" + item.html + "</span>");
+ if (item.disabled) {
+ choice.addClass('search-choice-disabled');
+ } else {
+ close_link = $('<a />', {
+ "class": 'search-choice-close',
+ 'data-option-array-index': item.array_index
+ });
+ close_link.bind('click.chosen', function(evt) {
+ return _this.choice_destroy_link_click(evt);
+ });
+ choice.append(close_link);
+ }
+ return this.search_container.before(choice);
+ };
+
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ if (!this.is_disabled) {
+ return this.choice_destroy($(evt.target));
+ }
+ };
+
+ Chosen.prototype.choice_destroy = function(link) {
+ if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
+ this.show_search_field_default();
+ if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
+ this.results_hide();
+ }
+ link.parents('li').first().remove();
+ return this.search_field_scale();
+ }
+ };
+
+ Chosen.prototype.results_reset = function() {
+ this.form_field.options[0].selected = true;
+ this.selected_option_count = null;
+ this.single_set_selected_text();
+ this.show_search_field_default();
+ this.results_reset_cleanup();
+ this.form_field_jq.trigger("change");
+ if (this.active_field) {
+ return this.results_hide();
+ }
+ };
+
+ Chosen.prototype.results_reset_cleanup = function() {
+ this.current_selectedIndex = this.form_field.selectedIndex;
+ return this.selected_item.find("abbr").remove();
+ };
+
+ Chosen.prototype.result_select = function(evt) {
+ var high, item, selected_index;
+
+ if (this.result_highlight) {
+ high = this.result_highlight;
+ this.result_clear_highlight();
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
+ this.form_field_jq.trigger("chosen:maxselected", {
+ chosen: this
+ });
+ return false;
+ }
+ if (this.is_multiple) {
+ high.removeClass("active-result");
+ } else {
+ if (this.result_single_selected) {
+ this.result_single_selected.removeClass("result-selected");
+ selected_index = this.result_single_selected[0].getAttribute('data-option-array-index');
+ this.results_data[selected_index].selected = false;
+ }
+ this.result_single_selected = high;
+ }
+ high.addClass("result-selected");
+ item = this.results_data[high[0].getAttribute("data-option-array-index")];
+ item.selected = true;
+ this.form_field.options[item.options_index].selected = true;
+ this.selected_option_count = null;
+ if (this.is_multiple) {
+ this.choice_build(item);
+ } else {
+ this.single_set_selected_text(item.text);
+ }
+ if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
+ this.results_hide();
+ }
+ this.search_field.val("");
+ if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
+ this.form_field_jq.trigger("change", {
+ 'selected': this.form_field.options[item.options_index].value
+ });
+ }
+ this.current_selectedIndex = this.form_field.selectedIndex;
+ return this.search_field_scale();
+ }
+ };
+
+ Chosen.prototype.single_set_selected_text = function(text) {
+ if (text == null) {
+ text = this.default_text;
+ }
+ if (text === this.default_text) {
+ this.selected_item.addClass("chosen-default");
+ } else {
+ this.single_deselect_control_build();
+ this.selected_item.removeClass("chosen-default");
+ }
+ return this.selected_item.find("span").text(text);
+ };
+
+ Chosen.prototype.result_deselect = function(pos) {
+ var result_data;
+
+ result_data = this.results_data[pos];
+ if (!this.form_field.options[result_data.options_index].disabled) {
+ result_data.selected = false;
+ this.form_field.options[result_data.options_index].selected = false;
+ this.selected_option_count = null;
+ this.result_clear_highlight();
+ if (this.results_showing) {
+ this.winnow_results();
+ }
+ this.form_field_jq.trigger("change", {
+ deselected: this.form_field.options[result_data.options_index].value
+ });
+ this.search_field_scale();
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ Chosen.prototype.single_deselect_control_build = function() {
+ if (!this.allow_single_deselect) {
+ return;
+ }
+ if (!this.selected_item.find("abbr").length) {
+ this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
+ }
+ return this.selected_item.addClass("chosen-single-with-deselect");
+ };
+
+ Chosen.prototype.get_search_text = function() {
+ if (this.search_field.val() === this.default_text) {
+ return "";
+ } else {
+ return $('<div/>').text($.trim(this.search_field.val())).html();
+ }
+ };
+
+ Chosen.prototype.winnow_results_set_highlight = function() {
+ var do_high, selected_results;
+
+ selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
+ do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
+ if (do_high != null) {
+ return this.result_do_highlight(do_high);
+ }
+ };
+
+ Chosen.prototype.no_results = function(terms) {
+ var no_results_html;
+
+ no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
+ no_results_html.find("span").first().html(terms);
+ return this.search_results.append(no_results_html);
+ };
+
+ Chosen.prototype.no_results_clear = function() {
+ return this.search_results.find(".no-results").remove();
+ };
+
+ Chosen.prototype.keydown_arrow = function() {
+ var next_sib;
+
+ if (this.results_showing && this.result_highlight) {
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
+ if (next_sib) {
+ return this.result_do_highlight(next_sib);
+ }
+ } else {
+ return this.results_show();
+ }
+ };
+
+ Chosen.prototype.keyup_arrow = function() {
+ var prev_sibs;
+
+ if (!this.results_showing && !this.is_multiple) {
+ return this.results_show();
+ } else if (this.result_highlight) {
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
+ if (prev_sibs.length) {
+ return this.result_do_highlight(prev_sibs.first());
+ } else {
+ if (this.choices_count() > 0) {
+ this.results_hide();
+ }
+ return this.result_clear_highlight();
+ }
+ }
+ };
+
+ Chosen.prototype.keydown_backstroke = function() {
+ var next_available_destroy;
+
+ if (this.pending_backstroke) {
+ this.choice_destroy(this.pending_backstroke.find("a").first());
+ return this.clear_backstroke();
+ } else {
+ next_available_destroy = this.search_container.siblings("li.search-choice").last();
+ if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
+ this.pending_backstroke = next_available_destroy;
+ if (this.single_backstroke_delete) {
+ return this.keydown_backstroke();
+ } else {
+ return this.pending_backstroke.addClass("search-choice-focus");
+ }
+ }
+ }
+ };
+
+ Chosen.prototype.clear_backstroke = function() {
+ if (this.pending_backstroke) {
+ this.pending_backstroke.removeClass("search-choice-focus");
+ }
+ return this.pending_backstroke = null;
+ };
+
+ Chosen.prototype.keydown_checker = function(evt) {
+ var stroke, _ref1;
+
+ stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
+ this.search_field_scale();
+ if (stroke !== 8 && this.pending_backstroke) {
+ this.clear_backstroke();
+ }
+ switch (stroke) {
+ case 8:
+ this.backstroke_length = this.search_field.val().length;
+ break;
+ case 9:
+ if (this.results_showing && !this.is_multiple) {
+ this.result_select(evt);
+ }
+ this.mouse_on_container = false;
+ break;
+ case 13:
+ evt.preventDefault();
+ break;
+ case 38:
+ evt.preventDefault();
+ this.keyup_arrow();
+ break;
+ case 40:
+ evt.preventDefault();
+ this.keydown_arrow();
+ break;
+ }
+ };
+
+ Chosen.prototype.search_field_scale = function() {
+ var div, f_width, h, style, style_block, styles, w, _i, _len;
+
+ if (this.is_multiple) {
+ h = 0;
+ w = 0;
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
+ style = styles[_i];
+ style_block += style + ":" + this.search_field.css(style) + ";";
+ }
+ div = $('<div />', {
+ 'style': style_block
+ });
+ div.text(this.search_field.val());
+ $('body').append(div);
+ w = div.width() + 25;
+ div.remove();
+ f_width = this.container.outerWidth();
+ if (w > f_width - 10) {
+ w = f_width - 10;
+ }
+ return this.search_field.css({
+ 'width': w + 'px'
+ });
+ }
+ };
+
+ return Chosen;
+
+ })(AbstractChosen);
+
+}).call(this);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.min.js
new file mode 100644
index 000000000..3599424ee
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/chosen.jquery.min.js
@@ -0,0 +1,30 @@
+/*
+
+Chosen
+
+- by Patrick Filler for Harvest http://getharvest.com
+- Copyright (c) 2011-2013 by Harvest
+
+Available for use under the MIT License
+
+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.
+
+*/
+/* Chosen v1.3.0 | (c) 2011-2014 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
+!function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.text,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+"</em>"+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+"<em>"+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){a.container_mousedown(b)}),this.container.bind("touchend.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/d3.js b/solr-8.1.1/server/solr-webapp/webapp/libs/d3.js
new file mode 100644
index 000000000..50156035b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/d3.js
@@ -0,0 +1,9373 @@
+/*
+
+Copyright (c) 2013, Michael Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* 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.
+
+* The name Michael Bostock may not 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 MICHAEL BOSTOCK 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.
+
+*/
+
+(function(){if (!Date.now) Date.now = function() {
+ return +new Date;
+};
+try {
+ document.createElement("div").style.setProperty("opacity", 0, "");
+} catch (error) {
+ var d3_style_prototype = CSSStyleDeclaration.prototype,
+ d3_style_setProperty = d3_style_prototype.setProperty;
+ d3_style_prototype.setProperty = function(name, value, priority) {
+ d3_style_setProperty.call(this, name, value + "", priority);
+ };
+}
+d3 = {version: "2.8.1"}; // semver
+function d3_class(ctor, properties) {
+ try {
+ for (var key in properties) {
+ Object.defineProperty(ctor.prototype, key, {
+ value: properties[key],
+ enumerable: false
+ });
+ }
+ } catch (e) {
+ ctor.prototype = properties;
+ }
+}
+var d3_array = d3_arraySlice; // conversion for NodeLists
+
+function d3_arrayCopy(pseudoarray) {
+ var i = -1, n = pseudoarray.length, array = [];
+ while (++i < n) array.push(pseudoarray[i]);
+ return array;
+}
+
+function d3_arraySlice(pseudoarray) {
+ return Array.prototype.slice.call(pseudoarray);
+}
+
+try {
+ d3_array(document.documentElement.childNodes)[0].nodeType;
+} catch(e) {
+ d3_array = d3_arrayCopy;
+}
+
+var d3_arraySubclass = [].__proto__?
+
+// Until ECMAScript supports array subclassing, prototype injection works well.
+function(array, prototype) {
+ array.__proto__ = prototype;
+}:
+
+// And if your browser doesn't support __proto__, we'll use direct extension.
+function(array, prototype) {
+ for (var property in prototype) array[property] = prototype[property];
+};
+d3.map = function(object) {
+ var map = new d3_Map;
+ for (var key in object) map.set(key, object[key]);
+ return map;
+};
+
+function d3_Map() {}
+
+d3_class(d3_Map, {
+ has: function(key) {
+ return d3_map_prefix + key in this;
+ },
+ get: function(key) {
+ return this[d3_map_prefix + key];
+ },
+ set: function(key, value) {
+ return this[d3_map_prefix + key] = value;
+ },
+ remove: function(key) {
+ key = d3_map_prefix + key;
+ return key in this && delete this[key];
+ },
+ keys: function() {
+ var keys = [];
+ this.forEach(function(key) { keys.push(key); });
+ return keys;
+ },
+ values: function() {
+ var values = [];
+ this.forEach(function(key, value) { values.push(value); });
+ return values;
+ },
+ entries: function() {
+ var entries = [];
+ this.forEach(function(key, value) { entries.push({key: key, value: value}); });
+ return entries;
+ },
+ forEach: function(f) {
+ for (var key in this) {
+ if (key.charCodeAt(0) === d3_map_prefixCode) {
+ f.call(this, key.substring(1), this[key]);
+ }
+ }
+ }
+});
+
+var d3_map_prefix = "\0", // prevent collision with built-ins
+ d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
+function d3_this() {
+ return this;
+}
+d3.functor = function(v) {
+ return typeof v === "function" ? v : function() { return v; };
+};
+// Copies a variable number of methods from source to target.
+d3.rebind = function(target, source) {
+ var i = 1, n = arguments.length, method;
+ while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
+ return target;
+};
+
+// Method is assumed to be a standard D3 getter-setter:
+// If passed with no arguments, gets the value.
+// If passed with arguments, sets the value and returns the target.
+function d3_rebind(target, source, method) {
+ return function() {
+ var value = method.apply(source, arguments);
+ return arguments.length ? target : value;
+ };
+}
+d3.ascending = function(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+};
+d3.descending = function(a, b) {
+ return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+};
+d3.mean = function(array, f) {
+ var n = array.length,
+ a,
+ m = 0,
+ i = -1,
+ j = 0;
+ if (arguments.length === 1) {
+ while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
+ } else {
+ while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
+ }
+ return j ? m : undefined;
+};
+d3.median = function(array, f) {
+ if (arguments.length > 1) array = array.map(f);
+ array = array.filter(d3_number);
+ return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
+};
+d3.min = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b;
+ if (arguments.length === 1) {
+ while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+ while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+ } else {
+ while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+ }
+ return a;
+};
+d3.max = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b;
+ if (arguments.length === 1) {
+ while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+ while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+ } else {
+ while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+ }
+ return a;
+};
+d3.extent = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b,
+ c;
+ if (arguments.length === 1) {
+ while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined;
+ while (++i < n) if ((b = array[i]) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ } else {
+ while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ }
+ return [a, c];
+};
+d3.random = {
+ normal: function(mean, deviation) {
+ if (arguments.length < 2) deviation = 1;
+ if (arguments.length < 1) mean = 0;
+ return function() {
+ var x, y, r;
+ do {
+ x = Math.random() * 2 - 1;
+ y = Math.random() * 2 - 1;
+ r = x * x + y * y;
+ } while (!r || r > 1);
+ return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);
+ };
+ }
+};
+function d3_number(x) {
+ return x != null && !isNaN(x);
+}
+d3.sum = function(array, f) {
+ var s = 0,
+ n = array.length,
+ a,
+ i = -1;
+
+ if (arguments.length === 1) {
+ while (++i < n) if (!isNaN(a = +array[i])) s += a;
+ } else {
+ while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
+ }
+
+ return s;
+};
+// R-7 per <http://en.wikipedia.org/wiki/Quantile>
+d3.quantile = function(values, p) {
+ var H = (values.length - 1) * p + 1,
+ h = Math.floor(H),
+ v = values[h - 1],
+ e = H - h;
+ return e ? v + e * (values[h] - v) : v;
+};
+d3.transpose = function(matrix) {
+ return d3.zip.apply(d3, matrix);
+};
+d3.zip = function() {
+ if (!(n = arguments.length)) return [];
+ for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
+ for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
+ zip[j] = arguments[j][i];
+ }
+ }
+ return zips;
+};
+
+function d3_zipLength(d) {
+ return d.length;
+}
+d3.bisector = function(f) {
+ return {
+ left: function(a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >> 1;
+ if (f.call(a, a[mid], mid) < x) lo = mid + 1;
+ else hi = mid;
+ }
+ return lo;
+ },
+ right: function(a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >> 1;
+ if (x < f.call(a, a[mid], mid)) hi = mid;
+ else lo = mid + 1;
+ }
+ return lo;
+ }
+ };
+};
+
+var d3_bisector = d3.bisector(function(d) { return d; });
+d3.bisectLeft = d3_bisector.left;
+d3.bisect = d3.bisectRight = d3_bisector.right;
+d3.first = function(array, f) {
+ var i = 0,
+ n = array.length,
+ a = array[0],
+ b;
+ if (arguments.length === 1) f = d3.ascending;
+ while (++i < n) {
+ if (f.call(array, a, b = array[i]) > 0) {
+ a = b;
+ }
+ }
+ return a;
+};
+d3.last = function(array, f) {
+ var i = 0,
+ n = array.length,
+ a = array[0],
+ b;
+ if (arguments.length === 1) f = d3.ascending;
+ while (++i < n) {
+ if (f.call(array, a, b = array[i]) <= 0) {
+ a = b;
+ }
+ }
+ return a;
+};
+d3.nest = function() {
+ var nest = {},
+ keys = [],
+ sortKeys = [],
+ sortValues,
+ rollup;
+
+ function map(array, depth) {
+ if (depth >= keys.length) return rollup
+ ? rollup.call(nest, array) : (sortValues
+ ? array.sort(sortValues)
+ : array);
+
+ var i = -1,
+ n = array.length,
+ key = keys[depth++],
+ keyValue,
+ object,
+ valuesByKey = new d3_Map,
+ values,
+ o = {};
+
+ while (++i < n) {
+ if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
+ values.push(object);
+ } else {
+ valuesByKey.set(keyValue, [object]);
+ }
+ }
+
+ valuesByKey.forEach(function(keyValue) {
+ o[keyValue] = map(valuesByKey.get(keyValue), depth);
+ });
+
+ return o;
+ }
+
+ function entries(map, depth) {
+ if (depth >= keys.length) return map;
+
+ var a = [],
+ sortKey = sortKeys[depth++],
+ key;
+
+ for (key in map) {
+ a.push({key: key, values: entries(map[key], depth)});
+ }
+
+ if (sortKey) a.sort(function(a, b) {
+ return sortKey(a.key, b.key);
+ });
+
+ return a;
+ }
+
+ nest.map = function(array) {
+ return map(array, 0);
+ };
+
+ nest.entries = function(array) {
+ return entries(map(array, 0), 0);
+ };
+
+ nest.key = function(d) {
+ keys.push(d);
+ return nest;
+ };
+
+ // Specifies the order for the most-recently specified key.
+ // Note: only applies to entries. Map keys are unordered!
+ nest.sortKeys = function(order) {
+ sortKeys[keys.length - 1] = order;
+ return nest;
+ };
+
+ // Specifies the order for leaf values.
+ // Applies to both maps and entries array.
+ nest.sortValues = function(order) {
+ sortValues = order;
+ return nest;
+ };
+
+ nest.rollup = function(f) {
+ rollup = f;
+ return nest;
+ };
+
+ return nest;
+};
+d3.keys = function(map) {
+ var keys = [];
+ for (var key in map) keys.push(key);
+ return keys;
+};
+d3.values = function(map) {
+ var values = [];
+ for (var key in map) values.push(map[key]);
+ return values;
+};
+d3.entries = function(map) {
+ var entries = [];
+ for (var key in map) entries.push({key: key, value: map[key]});
+ return entries;
+};
+d3.permute = function(array, indexes) {
+ var permutes = [],
+ i = -1,
+ n = indexes.length;
+ while (++i < n) permutes[i] = array[indexes[i]];
+ return permutes;
+};
+d3.merge = function(arrays) {
+ return Array.prototype.concat.apply([], arrays);
+};
+d3.split = function(array, f) {
+ var arrays = [],
+ values = [],
+ value,
+ i = -1,
+ n = array.length;
+ if (arguments.length < 2) f = d3_splitter;
+ while (++i < n) {
+ if (f.call(values, value = array[i], i)) {
+ values = [];
+ } else {
+ if (!values.length) arrays.push(values);
+ values.push(value);
+ }
+ }
+ return arrays;
+};
+
+function d3_splitter(d) {
+ return d == null;
+}
+function d3_collapse(s) {
+ return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
+}
+d3.range = function(start, stop, step) {
+ if (arguments.length < 3) {
+ step = 1;
+ if (arguments.length < 2) {
+ stop = start;
+ start = 0;
+ }
+ }
+ if ((stop - start) / step === Infinity) throw new Error("infinite range");
+ var range = [],
+ k = d3_range_integerScale(Math.abs(step)),
+ i = -1,
+ j;
+ start *= k, stop *= k, step *= k;
+ if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k);
+ else while ((j = start + step * ++i) < stop) range.push(j / k);
+ return range;
+};
+
+function d3_range_integerScale(x) {
+ var k = 1;
+ while (x * k % 1) k *= 10;
+ return k;
+}
+d3.requote = function(s) {
+ return s.replace(d3_requote_re, "\\$&");
+};
+
+var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+d3.round = function(x, n) {
+ return n
+ ? Math.round(x * (n = Math.pow(10, n))) / n
+ : Math.round(x);
+};
+d3.xhr = function(url, mime, callback) {
+ var req = new XMLHttpRequest;
+ if (arguments.length < 3) callback = mime, mime = null;
+ else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
+ req.open("GET", url, true);
+ if (mime) req.setRequestHeader("Accept", mime);
+ req.onreadystatechange = function() {
+ if (req.readyState === 4) callback(req.status < 300 ? req : null);
+ };
+ req.send(null);
+};
+d3.text = function(url, mime, callback) {
+ function ready(req) {
+ callback(req && req.responseText);
+ }
+ if (arguments.length < 3) {
+ callback = mime;
+ mime = null;
+ }
+ d3.xhr(url, mime, ready);
+};
+d3.json = function(url, callback) {
+ d3.text(url, "application/json", function(text) {
+ callback(text ? JSON.parse(text) : null);
+ });
+};
+d3.html = function(url, callback) {
+ d3.text(url, "text/html", function(text) {
+ if (text != null) { // Treat empty string as valid HTML.
+ var range = document.createRange();
+ range.selectNode(document.body);
+ text = range.createContextualFragment(text);
+ }
+ callback(text);
+ });
+};
+d3.xml = function(url, mime, callback) {
+ function ready(req) {
+ callback(req && req.responseXML);
+ }
+ if (arguments.length < 3) {
+ callback = mime;
+ mime = null;
+ }
+ d3.xhr(url, mime, ready);
+};
+var d3_nsPrefix = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: "http://www.w3.org/1999/xhtml",
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+};
+
+d3.ns = {
+ prefix: d3_nsPrefix,
+ qualify: function(name) {
+ var i = name.indexOf(":"),
+ prefix = name;
+ if (i >= 0) {
+ prefix = name.substring(0, i);
+ name = name.substring(i + 1);
+ }
+ return d3_nsPrefix.hasOwnProperty(prefix)
+ ? {space: d3_nsPrefix[prefix], local: name}
+ : name;
+ }
+};
+d3.dispatch = function() {
+ var dispatch = new d3_dispatch,
+ i = -1,
+ n = arguments.length;
+ while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+ return dispatch;
+};
+
+function d3_dispatch() {}
+
+d3_dispatch.prototype.on = function(type, listener) {
+ var i = type.indexOf("."),
+ name = "";
+
+ // Extract optional namespace, e.g., "click.foo"
+ if (i > 0) {
+ name = type.substring(i + 1);
+ type = type.substring(0, i);
+ }
+
+ return arguments.length < 2
+ ? this[type].on(name)
+ : this[type].on(name, listener);
+};
+
+function d3_dispatch_event(dispatch) {
+ var listeners = [],
+ listenerByName = new d3_Map;
+
+ function event() {
+ var z = listeners, // defensive reference
+ i = -1,
+ n = z.length,
+ l;
+ while (++i < n) if (l = z[i].on) l.apply(this, arguments);
+ return dispatch;
+ }
+
+ event.on = function(name, listener) {
+ var l = listenerByName.get(name),
+ i;
+
+ // return the current listener, if any
+ if (arguments.length < 2) return l && l.on;
+
+ // remove the old listener, if any (with copy-on-write)
+ if (l) {
+ l.on = null;
+ listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
+ listenerByName.remove(name);
+ }
+
+ // add the new listener, if any
+ if (listener) listeners.push(listenerByName.set(name, {on: listener}));
+
+ return dispatch;
+ };
+
+ return event;
+}
+// TODO align
+d3.format = function(specifier) {
+ var match = d3_format_re.exec(specifier),
+ fill = match[1] || " ",
+ sign = match[3] || "",
+ zfill = match[5],
+ width = +match[6],
+ comma = match[7],
+ precision = match[8],
+ type = match[9],
+ scale = 1,
+ suffix = "",
+ integer = false;
+
+ if (precision) precision = +precision.substring(1);
+
+ if (zfill) {
+ fill = "0"; // TODO align = "=";
+ if (comma) width -= Math.floor((width - 1) / 4);
+ }
+
+ switch (type) {
+ case "n": comma = true; type = "g"; break;
+ case "%": scale = 100; suffix = "%"; type = "f"; break;
+ case "p": scale = 100; suffix = "%"; type = "r"; break;
+ case "d": integer = true; precision = 0; break;
+ case "s": scale = -1; type = "r"; break;
+ }
+
+ // If no precision is specified for r, fallback to general notation.
+ if (type == "r" && !precision) type = "g";
+
+ type = d3_format_types.get(type) || d3_format_typeDefault;
+
+ return function(value) {
+
+ // Return the empty string for floats formatted as ints.
+ if (integer && (value % 1)) return "";
+
+ // Convert negative to positive, and record the sign prefix.
+ var negative = (value < 0) && (value = -value) ? "\u2212" : sign;
+
+ // Apply the scale, computing it from the value's exponent for si format.
+ if (scale < 0) {
+ var prefix = d3.formatPrefix(value, precision);
+ value *= prefix.scale;
+ suffix = prefix.symbol;
+ } else {
+ value *= scale;
+ }
+
+ // Convert to the desired precision.
+ value = type(value, precision);
+
+ // If the fill character is 0, the sign and group is applied after the fill.
+ if (zfill) {
+ var length = value.length + negative.length;
+ if (length < width) value = new Array(width - length + 1).join(fill) + value;
+ if (comma) value = d3_format_group(value);
+ value = negative + value;
+ }
+
+ // Otherwise (e.g., space-filling), the sign and group is applied before.
+ else {
+ if (comma) value = d3_format_group(value);
+ value = negative + value;
+ var length = value.length;
+ if (length < width) value = new Array(width - length + 1).join(fill) + value;
+ }
+
+ return value + suffix;
+ };
+};
+
+// [[fill]align][sign][#][0][width][,][.precision][type]
+var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
+
+var d3_format_types = d3.map({
+ g: function(x, p) { return x.toPrecision(p); },
+ e: function(x, p) { return x.toExponential(p); },
+ f: function(x, p) { return x.toFixed(p); },
+ r: function(x, p) { return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); }
+});
+
+function d3_format_precision(x, p) {
+ return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1);
+}
+
+function d3_format_typeDefault(x) {
+ return x + "";
+}
+
+// Apply comma grouping for thousands.
+function d3_format_group(value) {
+ var i = value.lastIndexOf("."),
+ f = i >= 0 ? value.substring(i) : (i = value.length, ""),
+ t = [];
+ while (i > 0) t.push(value.substring(i -= 3, i + 3));
+ return t.reverse().join(",") + f;
+}
+var d3_formatPrefixes = ["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(d3_formatPrefix);
+
+d3.formatPrefix = function(value, precision) {
+ var i = 0;
+ if (value) {
+ if (value < 0) value *= -1;
+ if (precision) value = d3.round(value, d3_format_precision(value, precision));
+ i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
+ i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3));
+ }
+ return d3_formatPrefixes[8 + i / 3];
+};
+
+function d3_formatPrefix(d, i) {
+ return {
+ scale: Math.pow(10, (8 - i) * 3),
+ symbol: d
+ };
+}
+
+/*
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * - 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.
+ *
+ * - Neither the name of the author nor the names of 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 OWNER 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 d3_ease_quad = d3_ease_poly(2),
+ d3_ease_cubic = d3_ease_poly(3),
+ d3_ease_default = function() { return d3_ease_identity; };
+
+var d3_ease = d3.map({
+ linear: d3_ease_default,
+ poly: d3_ease_poly,
+ quad: function() { return d3_ease_quad; },
+ cubic: function() { return d3_ease_cubic; },
+ sin: function() { return d3_ease_sin; },
+ exp: function() { return d3_ease_exp; },
+ circle: function() { return d3_ease_circle; },
+ elastic: d3_ease_elastic,
+ back: d3_ease_back,
+ bounce: function() { return d3_ease_bounce; }
+});
+
+var d3_ease_mode = d3.map({
+ "in": d3_ease_identity,
+ "out": d3_ease_reverse,
+ "in-out": d3_ease_reflect,
+ "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
+});
+
+d3.ease = function(name) {
+ var i = name.indexOf("-"),
+ t = i >= 0 ? name.substring(0, i) : name,
+ m = i >= 0 ? name.substring(i + 1) : "in";
+ t = d3_ease.get(t) || d3_ease_default;
+ m = d3_ease_mode.get(m) || d3_ease_identity;
+ return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1))));
+};
+
+function d3_ease_clamp(f) {
+ return function(t) {
+ return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
+ };
+}
+
+function d3_ease_reverse(f) {
+ return function(t) {
+ return 1 - f(1 - t);
+ };
+}
+
+function d3_ease_reflect(f) {
+ return function(t) {
+ return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
+ };
+}
+
+function d3_ease_identity(t) {
+ return t;
+}
+
+function d3_ease_poly(e) {
+ return function(t) {
+ return Math.pow(t, e);
+ };
+}
+
+function d3_ease_sin(t) {
+ return 1 - Math.cos(t * Math.PI / 2);
+}
+
+function d3_ease_exp(t) {
+ return Math.pow(2, 10 * (t - 1));
+}
+
+function d3_ease_circle(t) {
+ return 1 - Math.sqrt(1 - t * t);
+}
+
+function d3_ease_elastic(a, p) {
+ var s;
+ if (arguments.length < 2) p = 0.45;
+ if (arguments.length < 1) { a = 1; s = p / 4; }
+ else s = p / (2 * Math.PI) * Math.asin(1 / a);
+ return function(t) {
+ return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
+ };
+}
+
+function d3_ease_back(s) {
+ if (!s) s = 1.70158;
+ return function(t) {
+ return t * t * ((s + 1) * t - s);
+ };
+}
+
+function d3_ease_bounce(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;
+}
+d3.event = null;
+
+function d3_eventCancel() {
+ d3.event.stopPropagation();
+ d3.event.preventDefault();
+}
+
+function d3_eventSource() {
+ var e = d3.event, s;
+ while (s = e.sourceEvent) e = s;
+ return e;
+}
+
+// Like d3.dispatch, but for custom events abstracting native UI events. These
+// events have a target component (such as a brush), a target element (such as
+// the svg:g element containing the brush) and the standard arguments `d` (the
+// target element's data) and `i` (the selection index of the target element).
+function d3_eventDispatch(target) {
+ var dispatch = new d3_dispatch,
+ i = 0,
+ n = arguments.length;
+
+ while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+
+ // Creates a dispatch context for the specified `thiz` (typically, the target
+ // DOM element that received the source event) and `argumentz` (typically, the
+ // data `d` and index `i` of the target element). The returned function can be
+ // used to dispatch an event to any registered listeners; the function takes a
+ // single argument as input, being the event to dispatch. The event must have
+ // a "type" attribute which corresponds to a type registered in the
+ // constructor. This context will automatically populate the "sourceEvent" and
+ // "target" attributes of the event, as well as setting the `d3.event` global
+ // for the duration of the notification.
+ dispatch.of = function(thiz, argumentz) {
+ return function(e1) {
+ try {
+ var e0 =
+ e1.sourceEvent = d3.event;
+ e1.target = target;
+ d3.event = e1;
+ dispatch[e1.type].apply(thiz, argumentz);
+ } finally {
+ d3.event = e0;
+ }
+ };
+ };
+
+ return dispatch;
+}
+d3.interpolate = function(a, b) {
+ var i = d3.interpolators.length, f;
+ while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
+ return f;
+};
+
+d3.interpolateNumber = function(a, b) {
+ b -= a;
+ return function(t) { return a + b * t; };
+};
+
+d3.interpolateRound = function(a, b) {
+ b -= a;
+ return function(t) { return Math.round(a + b * t); };
+};
+
+d3.interpolateString = function(a, b) {
+ var m, // current match
+ i, // current index
+ j, // current index (for coallescing)
+ s0 = 0, // start index of current string prefix
+ s1 = 0, // end index of current string prefix
+ s = [], // string constants and placeholders
+ q = [], // number interpolators
+ n, // q.length
+ o;
+
+ // Reset our regular expression!
+ d3_interpolate_number.lastIndex = 0;
+
+ // Find all numbers in b.
+ for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
+ if (m.index) s.push(b.substring(s0, s1 = m.index));
+ q.push({i: s.length, x: m[0]});
+ s.push(null);
+ s0 = d3_interpolate_number.lastIndex;
+ }
+ if (s0 < b.length) s.push(b.substring(s0));
+
+ // Find all numbers in a.
+ for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
+ o = q[i];
+ if (o.x == m[0]) { // The numbers match, so coallesce.
+ if (o.i) {
+ if (s[o.i + 1] == null) { // This match is followed by another number.
+ s[o.i - 1] += o.x;
+ s.splice(o.i, 1);
+ for (j = i + 1; j < n; ++j) q[j].i--;
+ } else { // This match is followed by a string, so coallesce twice.
+ s[o.i - 1] += o.x + s[o.i + 1];
+ s.splice(o.i, 2);
+ for (j = i + 1; j < n; ++j) q[j].i -= 2;
+ }
+ } else {
+ if (s[o.i + 1] == null) { // This match is followed by another number.
+ s[o.i] = o.x;
+ } else { // This match is followed by a string, so coallesce twice.
+ s[o.i] = o.x + s[o.i + 1];
+ s.splice(o.i + 1, 1);
+ for (j = i + 1; j < n; ++j) q[j].i--;
+ }
+ }
+ q.splice(i, 1);
+ n--;
+ i--;
+ } else {
+ o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
+ }
+ }
+
+ // Remove any numbers in b not found in a.
+ while (i < n) {
+ o = q.pop();
+ if (s[o.i + 1] == null) { // This match is followed by another number.
+ s[o.i] = o.x;
+ } else { // This match is followed by a string, so coallesce twice.
+ s[o.i] = o.x + s[o.i + 1];
+ s.splice(o.i + 1, 1);
+ }
+ n--;
+ }
+
+ // Special optimization for only a single match.
+ if (s.length === 1) {
+ return s[0] == null ? q[0].x : function() { return b; };
+ }
+
+ // Otherwise, interpolate each of the numbers and rejoin the string.
+ return function(t) {
+ for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ };
+};
+
+d3.interpolateTransform = function(a, b) {
+ var s = [], // string constants and placeholders
+ q = [], // number interpolators
+ n,
+ A = d3.transform(a),
+ B = d3.transform(b),
+ ta = A.translate,
+ tb = B.translate,
+ ra = A.rotate,
+ rb = B.rotate,
+ wa = A.skew,
+ wb = B.skew,
+ ka = A.scale,
+ kb = B.scale;
+
+ if (ta[0] != tb[0] || ta[1] != tb[1]) {
+ s.push("translate(", null, ",", null, ")");
+ q.push({i: 1, x: d3.interpolateNumber(ta[0], tb[0])}, {i: 3, x: d3.interpolateNumber(ta[1], tb[1])});
+ } else if (tb[0] || tb[1]) {
+ s.push("translate(" + tb + ")");
+ } else {
+ s.push("");
+ }
+
+ if (ra != rb) {
+ q.push({i: s.push(s.pop() + "rotate(", null, ")") - 2, x: d3.interpolateNumber(ra, rb)});
+ } else if (rb) {
+ s.push(s.pop() + "rotate(" + rb + ")");
+ }
+
+ if (wa != wb) {
+ q.push({i: s.push(s.pop() + "skewX(", null, ")") - 2, x: d3.interpolateNumber(wa, wb)});
+ } else if (wb) {
+ s.push(s.pop() + "skewX(" + wb + ")");
+ }
+
+ if (ka[0] != kb[0] || ka[1] != kb[1]) {
+ n = s.push(s.pop() + "scale(", null, ",", null, ")");
+ q.push({i: n - 4, x: d3.interpolateNumber(ka[0], kb[0])}, {i: n - 2, x: d3.interpolateNumber(ka[1], kb[1])});
+ } else if (kb[0] != 1 || kb[1] != 1) {
+ s.push(s.pop() + "scale(" + kb + ")");
+ }
+
+ n = q.length;
+ return function(t) {
+ var i = -1, o;
+ while (++i < n) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ };
+};
+
+d3.interpolateRgb = function(a, b) {
+ a = d3.rgb(a);
+ b = d3.rgb(b);
+ var ar = a.r,
+ ag = a.g,
+ ab = a.b,
+ br = b.r - ar,
+ bg = b.g - ag,
+ bb = b.b - ab;
+ return function(t) {
+ return "#"
+ + d3_rgb_hex(Math.round(ar + br * t))
+ + d3_rgb_hex(Math.round(ag + bg * t))
+ + d3_rgb_hex(Math.round(ab + bb * t));
+ };
+};
+
+// interpolates HSL space, but outputs RGB string (for compatibility)
+d3.interpolateHsl = function(a, b) {
+ a = d3.hsl(a);
+ b = d3.hsl(b);
+ var h0 = a.h,
+ s0 = a.s,
+ l0 = a.l,
+ h1 = b.h - h0,
+ s1 = b.s - s0,
+ l1 = b.l - l0;
+ return function(t) {
+ return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
+ };
+};
+
+d3.interpolateArray = function(a, b) {
+ var x = [],
+ c = [],
+ na = a.length,
+ nb = b.length,
+ n0 = Math.min(a.length, b.length),
+ i;
+ for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
+ for (; i < na; ++i) c[i] = a[i];
+ for (; i < nb; ++i) c[i] = b[i];
+ return function(t) {
+ for (i = 0; i < n0; ++i) c[i] = x[i](t);
+ return c;
+ };
+};
+
+d3.interpolateObject = function(a, b) {
+ var i = {},
+ c = {},
+ k;
+ for (k in a) {
+ if (k in b) {
+ i[k] = d3_interpolateByName(k)(a[k], b[k]);
+ } else {
+ c[k] = a[k];
+ }
+ }
+ for (k in b) {
+ if (!(k in a)) {
+ c[k] = b[k];
+ }
+ }
+ return function(t) {
+ for (k in i) c[k] = i[k](t);
+ return c;
+ };
+}
+
+var d3_interpolate_number = /[-+]?(?:\d*\.?\d+)(?:[eE][-+]?\d+)?/g;
+
+function d3_interpolateByName(n) {
+ return n == "transform"
+ ? d3.interpolateTransform
+ : d3.interpolate;
+}
+
+d3.interpolators = [
+ d3.interpolateObject,
+ function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
+ function(a, b) { return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); },
+ function(a, b) { return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(a, b); },
+ function(a, b) { return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); }
+];
+function d3_uninterpolateNumber(a, b) {
+ b = b - (a = +a) ? 1 / (b - a) : 0;
+ return function(x) { return (x - a) * b; };
+}
+
+function d3_uninterpolateClamp(a, b) {
+ b = b - (a = +a) ? 1 / (b - a) : 0;
+ return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
+}
+d3.rgb = function(r, g, b) {
+ return arguments.length === 1
+ ? (r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b)
+ : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb))
+ : d3_rgb(~~r, ~~g, ~~b);
+};
+
+function d3_rgb(r, g, b) {
+ return new d3_Rgb(r, g, b);
+}
+
+function d3_Rgb(r, g, b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+}
+
+d3_Rgb.prototype.brighter = function(k) {
+ k = Math.pow(0.7, arguments.length ? k : 1);
+ var r = this.r,
+ g = this.g,
+ b = this.b,
+ i = 30;
+ if (!r && !g && !b) return d3_rgb(i, i, i);
+ if (r && r < i) r = i;
+ if (g && g < i) g = i;
+ if (b && b < i) b = i;
+ return d3_rgb(
+ Math.min(255, Math.floor(r / k)),
+ Math.min(255, Math.floor(g / k)),
+ Math.min(255, Math.floor(b / k)));
+};
+
+d3_Rgb.prototype.darker = function(k) {
+ k = Math.pow(0.7, arguments.length ? k : 1);
+ return d3_rgb(
+ Math.floor(k * this.r),
+ Math.floor(k * this.g),
+ Math.floor(k * this.b));
+};
+
+d3_Rgb.prototype.hsl = function() {
+ return d3_rgb_hsl(this.r, this.g, this.b);
+};
+
+d3_Rgb.prototype.toString = function() {
+ return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
+};
+
+function d3_rgb_hex(v) {
+ return v < 0x10
+ ? "0" + Math.max(0, v).toString(16)
+ : Math.min(255, v).toString(16);
+}
+
+function d3_rgb_parse(format, rgb, hsl) {
+ var r = 0, // red channel; int in [0, 255]
+ g = 0, // green channel; int in [0, 255]
+ b = 0, // blue channel; int in [0, 255]
+ m1, // CSS color specification match
+ m2, // CSS color specification type (e.g., rgb)
+ name;
+
+ /* Handle hsl, rgb. */
+ m1 = /([a-z]+)\((.*)\)/i.exec(format);
+ if (m1) {
+ m2 = m1[2].split(",");
+ switch (m1[1]) {
+ case "hsl": {
+ return hsl(
+ parseFloat(m2[0]), // degrees
+ parseFloat(m2[1]) / 100, // percentage
+ parseFloat(m2[2]) / 100 // percentage
+ );
+ }
+ case "rgb": {
+ return rgb(
+ d3_rgb_parseNumber(m2[0]),
+ d3_rgb_parseNumber(m2[1]),
+ d3_rgb_parseNumber(m2[2])
+ );
+ }
+ }
+ }
+
+ /* Named colors. */
+ if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b);
+
+ /* Hexadecimal colors: #rgb and #rrggbb. */
+ if (format != null && format.charAt(0) === "#") {
+ if (format.length === 4) {
+ r = format.charAt(1); r += r;
+ g = format.charAt(2); g += g;
+ b = format.charAt(3); b += b;
+ } else if (format.length === 7) {
+ r = format.substring(1, 3);
+ g = format.substring(3, 5);
+ b = format.substring(5, 7);
+ }
+ r = parseInt(r, 16);
+ g = parseInt(g, 16);
+ b = parseInt(b, 16);
+ }
+
+ return rgb(r, g, b);
+}
+
+function d3_rgb_hsl(r, g, b) {
+ var min = Math.min(r /= 255, g /= 255, b /= 255),
+ max = Math.max(r, g, b),
+ d = max - min,
+ h,
+ s,
+ l = (max + min) / 2;
+ if (d) {
+ s = l < .5 ? d / (max + min) : d / (2 - max - min);
+ if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
+ else if (g == max) h = (b - r) / d + 2;
+ else h = (r - g) / d + 4;
+ h *= 60;
+ } else {
+ s = h = 0;
+ }
+ return d3_hsl(h, s, l);
+}
+
+function d3_rgb_parseNumber(c) { // either integer or percentage
+ var f = parseFloat(c);
+ return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
+}
+
+var d3_rgb_names = d3.map({
+ 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",
+ darkgrey: "#a9a9a9",
+ darkkhaki: "#bdb76b",
+ darkmagenta: "#8b008b",
+ darkolivegreen: "#556b2f",
+ darkorange: "#ff8c00",
+ darkorchid: "#9932cc",
+ darkred: "#8b0000",
+ darksalmon: "#e9967a",
+ darkseagreen: "#8fbc8f",
+ darkslateblue: "#483d8b",
+ darkslategray: "#2f4f4f",
+ darkslategrey: "#2f4f4f",
+ darkturquoise: "#00ced1",
+ darkviolet: "#9400d3",
+ deeppink: "#ff1493",
+ deepskyblue: "#00bfff",
+ dimgray: "#696969",
+ dimgrey: "#696969",
+ dodgerblue: "#1e90ff",
+ firebrick: "#b22222",
+ floralwhite: "#fffaf0",
+ forestgreen: "#228b22",
+ fuchsia: "#ff00ff",
+ gainsboro: "#dcdcdc",
+ ghostwhite: "#f8f8ff",
+ gold: "#ffd700",
+ goldenrod: "#daa520",
+ gray: "#808080",
+ green: "#008000",
+ greenyellow: "#adff2f",
+ grey: "#808080",
+ honeydew: "#f0fff0",
+ hotpink: "#ff69b4",
+ indianred: "#cd5c5c",
+ indigo: "#4b0082",
+ ivory: "#fffff0",
+ khaki: "#f0e68c",
+ lavender: "#e6e6fa",
+ lavenderblush: "#fff0f5",
+ lawngreen: "#7cfc00",
+ lemonchiffon: "#fffacd",
+ lightblue: "#add8e6",
+ lightcoral: "#f08080",
+ lightcyan: "#e0ffff",
+ lightgoldenrodyellow: "#fafad2",
+ lightgray: "#d3d3d3",
+ lightgreen: "#90ee90",
+ lightgrey: "#d3d3d3",
+ lightpink: "#ffb6c1",
+ lightsalmon: "#ffa07a",
+ lightseagreen: "#20b2aa",
+ lightskyblue: "#87cefa",
+ lightslategray: "#778899",
+ lightslategrey: "#778899",
+ lightsteelblue: "#b0c4de",
+ lightyellow: "#ffffe0",
+ lime: "#00ff00",
+ limegreen: "#32cd32",
+ linen: "#faf0e6",
+ magenta: "#ff00ff",
+ maroon: "#800000",
+ mediumaquamarine: "#66cdaa",
+ mediumblue: "#0000cd",
+ mediumorchid: "#ba55d3",
+ mediumpurple: "#9370db",
+ mediumseagreen: "#3cb371",
+ mediumslateblue: "#7b68ee",
+ mediumspringgreen: "#00fa9a",
+ mediumturquoise: "#48d1cc",
+ mediumvioletred: "#c71585",
+ midnightblue: "#191970",
+ mintcream: "#f5fffa",
+ mistyrose: "#ffe4e1",
+ moccasin: "#ffe4b5",
+ navajowhite: "#ffdead",
+ navy: "#000080",
+ oldlace: "#fdf5e6",
+ olive: "#808000",
+ olivedrab: "#6b8e23",
+ orange: "#ffa500",
+ orangered: "#ff4500",
+ orchid: "#da70d6",
+ palegoldenrod: "#eee8aa",
+ palegreen: "#98fb98",
+ paleturquoise: "#afeeee",
+ palevioletred: "#db7093",
+ papayawhip: "#ffefd5",
+ peachpuff: "#ffdab9",
+ peru: "#cd853f",
+ pink: "#ffc0cb",
+ plum: "#dda0dd",
+ powderblue: "#b0e0e6",
+ purple: "#800080",
+ red: "#ff0000",
+ rosybrown: "#bc8f8f",
+ royalblue: "#4169e1",
+ saddlebrown: "#8b4513",
+ salmon: "#fa8072",
+ sandybrown: "#f4a460",
+ seagreen: "#2e8b57",
+ seashell: "#fff5ee",
+ sienna: "#a0522d",
+ silver: "#c0c0c0",
+ skyblue: "#87ceeb",
+ slateblue: "#6a5acd",
+ slategray: "#708090",
+ slategrey: "#708090",
+ snow: "#fffafa",
+ springgreen: "#00ff7f",
+ steelblue: "#4682b4",
+ tan: "#d2b48c",
+ teal: "#008080",
+ thistle: "#d8bfd8",
+ tomato: "#ff6347",
+ turquoise: "#40e0d0",
+ violet: "#ee82ee",
+ wheat: "#f5deb3",
+ white: "#ffffff",
+ whitesmoke: "#f5f5f5",
+ yellow: "#ffff00",
+ yellowgreen: "#9acd32"
+});
+
+d3_rgb_names.forEach(function(key, value) {
+ d3_rgb_names.set(key, d3_rgb_parse(value, d3_rgb, d3_hsl_rgb));
+});
+d3.hsl = function(h, s, l) {
+ return arguments.length === 1
+ ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l)
+ : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl))
+ : d3_hsl(+h, +s, +l);
+};
+
+function d3_hsl(h, s, l) {
+ return new d3_Hsl(h, s, l);
+}
+
+function d3_Hsl(h, s, l) {
+ this.h = h;
+ this.s = s;
+ this.l = l;
+}
+
+d3_Hsl.prototype.brighter = function(k) {
+ k = Math.pow(0.7, arguments.length ? k : 1);
+ return d3_hsl(this.h, this.s, this.l / k);
+};
+
+d3_Hsl.prototype.darker = function(k) {
+ k = Math.pow(0.7, arguments.length ? k : 1);
+ return d3_hsl(this.h, this.s, k * this.l);
+};
+
+d3_Hsl.prototype.rgb = function() {
+ return d3_hsl_rgb(this.h, this.s, this.l);
+};
+
+d3_Hsl.prototype.toString = function() {
+ return this.rgb().toString();
+};
+
+function d3_hsl_rgb(h, s, l) {
+ var m1,
+ m2;
+
+ /* Some simple corrections for h, s and l. */
+ h = h % 360; if (h < 0) h += 360;
+ s = s < 0 ? 0 : s > 1 ? 1 : s;
+ l = l < 0 ? 0 : l > 1 ? 1 : l;
+
+ /* From FvD 13.37, CSS Color Module Level 3 */
+ m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
+ m1 = 2 * l - m2;
+
+ function v(h) {
+ if (h > 360) h -= 360;
+ else if (h < 0) h += 360;
+ if (h < 60) return m1 + (m2 - m1) * h / 60;
+ if (h < 180) return m2;
+ if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
+ return m1;
+ }
+
+ function vv(h) {
+ return Math.round(v(h) * 255);
+ }
+
+ return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
+}
+function d3_selection(groups) {
+ d3_arraySubclass(groups, d3_selectionPrototype);
+ return groups;
+}
+
+var d3_select = function(s, n) { return n.querySelector(s); },
+ d3_selectAll = function(s, n) { return n.querySelectorAll(s); },
+ d3_selectRoot = document.documentElement,
+ d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector,
+ d3_selectMatches = function(n, s) { return d3_selectMatcher.call(n, s); };
+
+// Prefer Sizzle, if available.
+if (typeof Sizzle === "function") {
+ d3_select = function(s, n) { return Sizzle(s, n)[0]; };
+ d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
+ d3_selectMatches = Sizzle.matchesSelector;
+}
+
+var d3_selectionPrototype = [];
+
+d3.selection = function() {
+ return d3_selectionRoot;
+};
+
+d3.selection.prototype = d3_selectionPrototype;
+d3_selectionPrototype.select = function(selector) {
+ var subgroups = [],
+ subgroup,
+ subnode,
+ group,
+ node;
+
+ if (typeof selector !== "function") selector = d3_selection_selector(selector);
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = (group = this[j]).parentNode;
+ for (var i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroup.push(subnode = selector.call(node, node.__data__, i));
+ if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+
+ return d3_selection(subgroups);
+};
+
+function d3_selection_selector(selector) {
+ return function() {
+ return d3_select(selector, this);
+ };
+}
+d3_selectionPrototype.selectAll = function(selector) {
+ var subgroups = [],
+ subgroup,
+ node;
+
+ if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i)));
+ subgroup.parentNode = node;
+ }
+ }
+ }
+
+ return d3_selection(subgroups);
+};
+
+function d3_selection_selectorAll(selector) {
+ return function() {
+ return d3_selectAll(selector, this);
+ };
+}
+d3_selectionPrototype.attr = function(name, value) {
+ name = d3.ns.qualify(name);
+
+ // If no value is specified, return the first value.
+ if (arguments.length < 2) {
+ var node = this.node();
+ return name.local
+ ? node.getAttributeNS(name.space, name.local)
+ : node.getAttribute(name);
+ }
+
+ function attrNull() {
+ this.removeAttribute(name);
+ }
+
+ function attrNullNS() {
+ this.removeAttributeNS(name.space, name.local);
+ }
+
+ function attrConstant() {
+ this.setAttribute(name, value);
+ }
+
+ function attrConstantNS() {
+ this.setAttributeNS(name.space, name.local, value);
+ }
+
+ function attrFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.removeAttribute(name);
+ else this.setAttribute(name, x);
+ }
+
+ function attrFunctionNS() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.removeAttributeNS(name.space, name.local);
+ else this.setAttributeNS(name.space, name.local, x);
+ }
+
+ return this.each(value == null
+ ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
+ ? (name.local ? attrFunctionNS : attrFunction)
+ : (name.local ? attrConstantNS : attrConstant)));
+};
+d3_selectionPrototype.classed = function(name, value) {
+ var names = name.split(d3_selection_classedWhitespace),
+ n = names.length,
+ i = -1;
+ if (arguments.length > 1) {
+ while (++i < n) d3_selection_classed.call(this, names[i], value);
+ return this;
+ } else {
+ while (++i < n) if (!d3_selection_classed.call(this, names[i])) return false;
+ return true;
+ }
+};
+
+var d3_selection_classedWhitespace = /\s+/g;
+
+function d3_selection_classed(name, value) {
+ var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
+
+ // If no value is specified, return the first value.
+ if (arguments.length < 2) {
+ var node = this.node();
+ if (c = node.classList) return c.contains(name);
+ var c = node.className;
+ re.lastIndex = 0;
+ return re.test(c.baseVal != null ? c.baseVal : c);
+ }
+
+ function classedAdd() {
+ if (c = this.classList) return c.add(name);
+ var c = this.className,
+ cb = c.baseVal != null,
+ cv = cb ? c.baseVal : c;
+ re.lastIndex = 0;
+ if (!re.test(cv)) {
+ cv = d3_collapse(cv + " " + name);
+ if (cb) c.baseVal = cv;
+ else this.className = cv;
+ }
+ }
+
+ function classedRemove() {
+ if (c = this.classList) return c.remove(name);
+ var c = this.className,
+ cb = c.baseVal != null,
+ cv = cb ? c.baseVal : c;
+ cv = d3_collapse(cv.replace(re, " "));
+ if (cb) c.baseVal = cv;
+ else this.className = cv;
+ }
+
+ function classedFunction() {
+ (value.apply(this, arguments)
+ ? classedAdd
+ : classedRemove).call(this);
+ }
+
+ return this.each(typeof value === "function"
+ ? classedFunction : value
+ ? classedAdd
+ : classedRemove);
+}
+d3_selectionPrototype.style = function(name, value, priority) {
+ if (arguments.length < 3) priority = "";
+
+ // If no value is specified, return the first value.
+ if (arguments.length < 2) return window
+ .getComputedStyle(this.node(), null)
+ .getPropertyValue(name);
+
+ function styleNull() {
+ this.style.removeProperty(name);
+ }
+
+ function styleConstant() {
+ this.style.setProperty(name, value, priority);
+ }
+
+ function styleFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.style.removeProperty(name);
+ else this.style.setProperty(name, x, priority);
+ }
+
+ return this.each(value == null
+ ? styleNull : (typeof value === "function"
+ ? styleFunction : styleConstant));
+};
+d3_selectionPrototype.property = function(name, value) {
+
+ // If no value is specified, return the first value.
+ if (arguments.length < 2) return this.node()[name];
+
+ function propertyNull() {
+ delete this[name];
+ }
+
+ function propertyConstant() {
+ this[name] = value;
+ }
+
+ function propertyFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) delete this[name];
+ else this[name] = x;
+ }
+
+ return this.each(value == null
+ ? propertyNull : (typeof value === "function"
+ ? propertyFunction : propertyConstant));
+};
+d3_selectionPrototype.text = function(value) {
+ return arguments.length < 1
+ ? this.node().textContent : this.each(typeof value === "function"
+ ? function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; } : value == null
+ ? function() { this.textContent = ""; }
+ : function() { this.textContent = value; });
+};
+d3_selectionPrototype.html = function(value) {
+ return arguments.length < 1
+ ? this.node().innerHTML : this.each(typeof value === "function"
+ ? function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; } : value == null
+ ? function() { this.innerHTML = ""; }
+ : function() { this.innerHTML = value; });
+};
+// TODO append(node)?
+// TODO append(function)?
+d3_selectionPrototype.append = function(name) {
+ name = d3.ns.qualify(name);
+
+ function append() {
+ return this.appendChild(document.createElementNS(this.namespaceURI, name));
+ }
+
+ function appendNS() {
+ return this.appendChild(document.createElementNS(name.space, name.local));
+ }
+
+ return this.select(name.local ? appendNS : append);
+};
+// TODO insert(node, function)?
+// TODO insert(function, string)?
+// TODO insert(function, function)?
+d3_selectionPrototype.insert = function(name, before) {
+ name = d3.ns.qualify(name);
+
+ function insert() {
+ return this.insertBefore(
+ document.createElementNS(this.namespaceURI, name),
+ d3_select(before, this));
+ }
+
+ function insertNS() {
+ return this.insertBefore(
+ document.createElementNS(name.space, name.local),
+ d3_select(before, this));
+ }
+
+ return this.select(name.local ? insertNS : insert);
+};
+// TODO remove(selector)?
+// TODO remove(node)?
+// TODO remove(function)?
+d3_selectionPrototype.remove = function() {
+ return this.each(function() {
+ var parent = this.parentNode;
+ if (parent) parent.removeChild(this);
+ });
+};
+d3_selectionPrototype.data = function(value, key) {
+ var i = -1,
+ n = this.length,
+ group,
+ node;
+
+ // If no value is specified, return the first value.
+ if (!arguments.length) {
+ value = new Array(n = (group = this[0]).length);
+ while (++i < n) {
+ if (node = group[i]) {
+ value[i] = node.__data__;
+ }
+ }
+ return value;
+ }
+
+ function bind(group, groupData) {
+ var i,
+ n = group.length,
+ m = groupData.length,
+ n0 = Math.min(n, m),
+ n1 = Math.max(n, m),
+ updateNodes = [],
+ enterNodes = [],
+ exitNodes = [],
+ node,
+ nodeData;
+
+ if (key) {
+ var nodeByKeyValue = new d3_Map,
+ keyValues = [],
+ keyValue,
+ j = groupData.length;
+
+ for (i = -1; ++i < n;) {
+ keyValue = key.call(node = group[i], node.__data__, i);
+ if (nodeByKeyValue.has(keyValue)) {
+ exitNodes[j++] = node; // duplicate key
+ } else {
+ nodeByKeyValue.set(keyValue, node);
+ }
+ keyValues.push(keyValue);
+ }
+
+ for (i = -1; ++i < m;) {
+ keyValue = key.call(groupData, nodeData = groupData[i], i)
+ if (nodeByKeyValue.has(keyValue)) {
+ updateNodes[i] = node = nodeByKeyValue.get(keyValue);
+ node.__data__ = nodeData;
+ enterNodes[i] = exitNodes[i] = null;
+ } else {
+ enterNodes[i] = d3_selection_dataNode(nodeData);
+ updateNodes[i] = exitNodes[i] = null;
+ }
+ nodeByKeyValue.remove(keyValue);
+ }
+
+ for (i = -1; ++i < n;) {
+ if (nodeByKeyValue.has(keyValues[i])) {
+ exitNodes[i] = group[i];
+ }
+ }
+ } else {
+ for (i = -1; ++i < n0;) {
+ node = group[i];
+ nodeData = groupData[i];
+ if (node) {
+ node.__data__ = nodeData;
+ updateNodes[i] = node;
+ enterNodes[i] = exitNodes[i] = null;
+ } else {
+ enterNodes[i] = d3_selection_dataNode(nodeData);
+ updateNodes[i] = exitNodes[i] = null;
+ }
+ }
+ for (; i < m; ++i) {
+ enterNodes[i] = d3_selection_dataNode(groupData[i]);
+ updateNodes[i] = exitNodes[i] = null;
+ }
+ for (; i < n1; ++i) {
+ exitNodes[i] = group[i];
+ enterNodes[i] = updateNodes[i] = null;
+ }
+ }
+
+ enterNodes.update
+ = updateNodes;
+
+ enterNodes.parentNode
+ = updateNodes.parentNode
+ = exitNodes.parentNode
+ = group.parentNode;
+
+ enter.push(enterNodes);
+ update.push(updateNodes);
+ exit.push(exitNodes);
+ }
+
+ var enter = d3_selection_enter([]),
+ update = d3_selection([]),
+ exit = d3_selection([]);
+
+ if (typeof value === "function") {
+ while (++i < n) {
+ bind(group = this[i], value.call(group, group.parentNode.__data__, i));
+ }
+ } else {
+ while (++i < n) {
+ bind(group = this[i], value);
+ }
+ }
+
+ update.enter = function() { return enter; };
+ update.exit = function() { return exit; };
+ return update;
+};
+
+function d3_selection_dataNode(data) {
+ return {__data__: data};
+}
+d3_selectionPrototype.datum =
+d3_selectionPrototype.map = function(value) {
+ return arguments.length < 1
+ ? this.property("__data__")
+ : this.property("__data__", value);
+};
+d3_selectionPrototype.filter = function(filter) {
+ var subgroups = [],
+ subgroup,
+ group,
+ node;
+
+ if (typeof filter !== "function") filter = d3_selection_filter(filter);
+
+ for (var j = 0, m = this.length; j < m; j++) {
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = (group = this[j]).parentNode;
+ for (var i = 0, n = group.length; i < n; i++) {
+ if ((node = group[i]) && filter.call(node, node.__data__, i)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return d3_selection(subgroups);
+};
+
+function d3_selection_filter(selector) {
+ return function() {
+ return d3_selectMatches(this, selector);
+ };
+}
+d3_selectionPrototype.order = function() {
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
+ if (node = group[i]) {
+ if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
+ next = node;
+ }
+ }
+ }
+ return this;
+};
+d3_selectionPrototype.sort = function(comparator) {
+ comparator = d3_selection_sortComparator.apply(this, arguments);
+ for (var j = -1, m = this.length; ++j < m;) this[j].sort(comparator);
+ return this.order();
+};
+
+function d3_selection_sortComparator(comparator) {
+ if (!arguments.length) comparator = d3.ascending;
+ return function(a, b) {
+ return comparator(a && a.__data__, b && b.__data__);
+ };
+}
+// type can be namespaced, e.g., "click.foo"
+// listener can be null for removal
+d3_selectionPrototype.on = function(type, listener, capture) {
+ if (arguments.length < 3) capture = false;
+
+ // parse the type specifier
+ var name = "__on" + type, i = type.indexOf(".");
+ if (i > 0) type = type.substring(0, i);
+
+ // if called with only one argument, return the current listener
+ if (arguments.length < 2) return (i = this.node()[name]) && i._;
+
+ // remove the old event listener, and add the new event listener
+ return this.each(function(d, i) {
+ var node = this,
+ o = node[name];
+
+ // remove the old listener, if any (using the previously-set capture)
+ if (o) {
+ node.removeEventListener(type, o, o.$);
+ delete node[name];
+ }
+
+ // add the new listener, if any (remembering the capture flag)
+ if (listener) {
+ node.addEventListener(type, node[name] = l, l.$ = capture);
+ l._ = listener; // stash the unwrapped listener for get
+ }
+
+ // wrapped event listener that preserves i
+ function l(e) {
+ var o = d3.event; // Events can be reentrant (e.g., focus).
+ d3.event = e;
+ try {
+ listener.call(node, node.__data__, i);
+ } finally {
+ d3.event = o;
+ }
+ }
+ });
+};
+d3_selectionPrototype.each = function(callback) {
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ var node = group[i];
+ if (node) callback.call(node, node.__data__, i, j);
+ }
+ }
+ return this;
+};
+//
+// Note: assigning to the arguments array simultaneously changes the value of
+// the corresponding argument!
+//
+// TODO The `this` argument probably shouldn't be the first argument to the
+// callback, anyway, since it's redundant. However, that will require a major
+// version bump due to backwards compatibility, so I'm not changing it right
+// away.
+//
+d3_selectionPrototype.call = function(callback) {
+ callback.apply(this, (arguments[0] = this, arguments));
+ return this;
+};
+d3_selectionPrototype.empty = function() {
+ return !this.node();
+};
+d3_selectionPrototype.node = function(callback) {
+ for (var j = 0, m = this.length; j < m; j++) {
+ for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+ var node = group[i];
+ if (node) return node;
+ }
+ }
+ return null;
+};
+d3_selectionPrototype.transition = function() {
+ var subgroups = [],
+ subgroup,
+ node;
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ subgroup.push((node = group[i]) ? {node: node, delay: d3_transitionDelay, duration: d3_transitionDuration} : null);
+ }
+ }
+
+ return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, Date.now());
+};
+var d3_selectionRoot = d3_selection([[document]]);
+
+d3_selectionRoot[0].parentNode = d3_selectRoot;
+
+// TODO fast singleton implementation!
+// TODO select(function)
+d3.select = function(selector) {
+ return typeof selector === "string"
+ ? d3_selectionRoot.select(selector)
+ : d3_selection([[selector]]); // assume node
+};
+
+// TODO selectAll(function)
+d3.selectAll = function(selector) {
+ return typeof selector === "string"
+ ? d3_selectionRoot.selectAll(selector)
+ : d3_selection([d3_array(selector)]); // assume node[]
+};
+function d3_selection_enter(selection) {
+ d3_arraySubclass(selection, d3_selection_enterPrototype);
+ return selection;
+}
+
+var d3_selection_enterPrototype = [];
+
+d3.selection.enter = d3_selection_enter;
+d3.selection.enter.prototype = d3_selection_enterPrototype;
+
+d3_selection_enterPrototype.append = d3_selectionPrototype.append;
+d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
+d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
+d3_selection_enterPrototype.node = d3_selectionPrototype.node;
+d3_selection_enterPrototype.select = function(selector) {
+ var subgroups = [],
+ subgroup,
+ subnode,
+ upgroup,
+ group,
+ node;
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ upgroup = (group = this[j]).update;
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = group.parentNode;
+ for (var i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
+ subnode.__data__ = node.__data__;
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+
+ return d3_selection(subgroups);
+};
+function d3_transition(groups, id, time) {
+ d3_arraySubclass(groups, d3_transitionPrototype);
+
+ var tweens = new d3_Map,
+ event = d3.dispatch("start", "end"),
+ ease = d3_transitionEase;
+
+ groups.id = id;
+
+ groups.time = time;
+
+ groups.tween = function(name, tween) {
+ if (arguments.length < 2) return tweens.get(name);
+ if (tween == null) tweens.remove(name);
+ else tweens.set(name, tween);
+ return groups;
+ };
+
+ groups.ease = function(value) {
+ if (!arguments.length) return ease;
+ ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
+ return groups;
+ };
+
+ groups.each = function(type, listener) {
+ if (arguments.length < 2) return d3_transition_each.call(groups, type);
+ event.on(type, listener);
+ return groups;
+ };
+
+ d3.timer(function(elapsed) {
+ groups.each(function(d, i, j) {
+ var tweened = [],
+ node = this,
+ delay = groups[j][i].delay,
+ duration = groups[j][i].duration,
+ lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
+
+ ++lock.count;
+
+ delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time);
+
+ function start(elapsed) {
+ if (lock.active > id) return stop();
+ lock.active = id;
+
+ tweens.forEach(function(key, value) {
+ if (tween = value.call(node, d, i)) {
+ tweened.push(tween);
+ }
+ });
+
+ event.start.call(node, d, i);
+ if (!tick(elapsed)) d3.timer(tick, 0, time);
+ return 1;
+ }
+
+ function tick(elapsed) {
+ if (lock.active !== id) return stop();
+
+ var t = (elapsed - delay) / duration,
+ e = ease(t),
+ n = tweened.length;
+
+ while (n > 0) {
+ tweened[--n].call(node, e);
+ }
+
+ if (t >= 1) {
+ stop();
+ d3_transitionId = id;
+ event.end.call(node, d, i);
+ d3_transitionId = 0;
+ return 1;
+ }
+ }
+
+ function stop() {
+ if (!--lock.count) delete node.__transition__;
+ return 1;
+ }
+ });
+ return 1;
+ }, 0, time);
+
+ return groups;
+}
+
+var d3_transitionRemove = {};
+
+function d3_transitionNull(d, i, a) {
+ return a != "" && d3_transitionRemove;
+}
+
+function d3_transitionTween(name, b) {
+ var interpolate = d3_interpolateByName(name);
+
+ function transitionFunction(d, i, a) {
+ var v = b.call(this, d, i);
+ return v == null
+ ? a != "" && d3_transitionRemove
+ : a != v && interpolate(a, v);
+ }
+
+ function transitionString(d, i, a) {
+ return a != b && interpolate(a, b);
+ }
+
+ return typeof b === "function" ? transitionFunction
+ : b == null ? d3_transitionNull
+ : (b += "", transitionString);
+}
+
+var d3_transitionPrototype = [],
+ d3_transitionNextId = 0,
+ d3_transitionId = 0,
+ d3_transitionDefaultDelay = 0,
+ d3_transitionDefaultDuration = 250,
+ d3_transitionDefaultEase = d3.ease("cubic-in-out"),
+ d3_transitionDelay = d3_transitionDefaultDelay,
+ d3_transitionDuration = d3_transitionDefaultDuration,
+ d3_transitionEase = d3_transitionDefaultEase;
+
+d3_transitionPrototype.call = d3_selectionPrototype.call;
+
+d3.transition = function(selection) {
+ return arguments.length
+ ? (d3_transitionId ? selection.transition() : selection)
+ : d3_selectionRoot.transition();
+};
+
+d3.transition.prototype = d3_transitionPrototype;
+d3_transitionPrototype.select = function(selector) {
+ var subgroups = [],
+ subgroup,
+ subnode,
+ node;
+
+ if (typeof selector !== "function") selector = d3_selection_selector(selector);
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
+ if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
+ subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+
+ return d3_transition(subgroups, this.id, this.time).ease(this.ease());
+};
+d3_transitionPrototype.selectAll = function(selector) {
+ var subgroups = [],
+ subgroup,
+ subnodes,
+ node;
+
+ if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
+
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subnodes = selector.call(node.node, node.node.__data__, i);
+ subgroups.push(subgroup = []);
+ for (var k = -1, o = subnodes.length; ++k < o;) {
+ subgroup.push({node: subnodes[k], delay: node.delay, duration: node.duration});
+ }
+ }
+ }
+ }
+
+ return d3_transition(subgroups, this.id, this.time).ease(this.ease());
+};
+d3_transitionPrototype.attr = function(name, value) {
+ return this.attrTween(name, d3_transitionTween(name, value));
+};
+
+d3_transitionPrototype.attrTween = function(nameNS, tween) {
+ var name = d3.ns.qualify(nameNS);
+
+ function attrTween(d, i) {
+ var f = tween.call(this, d, i, this.getAttribute(name));
+ return f === d3_transitionRemove
+ ? (this.removeAttribute(name), null)
+ : f && function(t) { this.setAttribute(name, f(t)); };
+ }
+
+ function attrTweenNS(d, i) {
+ var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
+ return f === d3_transitionRemove
+ ? (this.removeAttributeNS(name.space, name.local), null)
+ : f && function(t) { this.setAttributeNS(name.space, name.local, f(t)); };
+ }
+
+ return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
+};
+d3_transitionPrototype.style = function(name, value, priority) {
+ if (arguments.length < 3) priority = "";
+ return this.styleTween(name, d3_transitionTween(name, value), priority);
+};
+
+d3_transitionPrototype.styleTween = function(name, tween, priority) {
+ if (arguments.length < 3) priority = "";
+ return this.tween("style." + name, function(d, i) {
+ var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
+ return f === d3_transitionRemove
+ ? (this.style.removeProperty(name), null)
+ : f && function(t) { this.style.setProperty(name, f(t), priority); };
+ });
+};
+d3_transitionPrototype.text = function(value) {
+ return this.tween("text", function(d, i) {
+ this.textContent = typeof value === "function"
+ ? value.call(this, d, i)
+ : value;
+ });
+};
+d3_transitionPrototype.remove = function() {
+ return this.each("end.transition", function() {
+ var p;
+ if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
+ });
+};
+d3_transitionPrototype.delay = function(value) {
+ var groups = this;
+ return groups.each(typeof value === "function"
+ ? function(d, i, j) { groups[j][i].delay = value.apply(this, arguments) | 0; }
+ : (value = value | 0, function(d, i, j) { groups[j][i].delay = value; }));
+};
+d3_transitionPrototype.duration = function(value) {
+ var groups = this;
+ return groups.each(typeof value === "function"
+ ? function(d, i, j) { groups[j][i].duration = Math.max(1, value.apply(this, arguments) | 0); }
+ : (value = Math.max(1, value | 0), function(d, i, j) { groups[j][i].duration = value; }));
+};
+function d3_transition_each(callback) {
+ var id = d3_transitionId,
+ ease = d3_transitionEase,
+ delay = d3_transitionDelay,
+ duration = d3_transitionDuration;
+
+ d3_transitionId = this.id;
+ d3_transitionEase = this.ease();
+ for (var j = 0, m = this.length; j < m; j++) {
+ for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+ var node = group[i];
+ if (node) {
+ d3_transitionDelay = this[j][i].delay;
+ d3_transitionDuration = this[j][i].duration;
+ callback.call(node = node.node, node.__data__, i, j);
+ }
+ }
+ }
+
+ d3_transitionId = id;
+ d3_transitionEase = ease;
+ d3_transitionDelay = delay;
+ d3_transitionDuration = duration;
+ return this;
+}
+d3_transitionPrototype.transition = function() {
+ return this.select(d3_this);
+};
+var d3_timer_queue = null,
+ d3_timer_interval, // is an interval (or frame) active?
+ d3_timer_timeout; // is a timeout active?
+
+// The timer will continue to fire until callback returns true.
+d3.timer = function(callback, delay, then) {
+ var found = false,
+ t0,
+ t1 = d3_timer_queue;
+
+ if (arguments.length < 3) {
+ if (arguments.length < 2) delay = 0;
+ else if (!isFinite(delay)) return;
+ then = Date.now();
+ }
+
+ // See if the callback's already in the queue.
+ while (t1) {
+ if (t1.callback === callback) {
+ t1.then = then;
+ t1.delay = delay;
+ found = true;
+ break;
+ }
+ t0 = t1;
+ t1 = t1.next;
+ }
+
+ // Otherwise, add the callback to the queue.
+ if (!found) d3_timer_queue = {
+ callback: callback,
+ then: then,
+ delay: delay,
+ next: d3_timer_queue
+ };
+
+ // Start animatin'!
+ if (!d3_timer_interval) {
+ d3_timer_timeout = clearTimeout(d3_timer_timeout);
+ d3_timer_interval = 1;
+ d3_timer_frame(d3_timer_step);
+ }
+}
+
+function d3_timer_step() {
+ var elapsed,
+ now = Date.now(),
+ t1 = d3_timer_queue;
+
+ while (t1) {
+ elapsed = now - t1.then;
+ if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
+ t1 = t1.next;
+ }
+
+ var delay = d3_timer_flush() - now;
+ if (delay > 24) {
+ if (isFinite(delay)) {
+ clearTimeout(d3_timer_timeout);
+ d3_timer_timeout = setTimeout(d3_timer_step, delay);
+ }
+ d3_timer_interval = 0;
+ } else {
+ d3_timer_interval = 1;
+ d3_timer_frame(d3_timer_step);
+ }
+}
+
+d3.timer.flush = function() {
+ var elapsed,
+ now = Date.now(),
+ t1 = d3_timer_queue;
+
+ while (t1) {
+ elapsed = now - t1.then;
+ if (!t1.delay) t1.flush = t1.callback(elapsed);
+ t1 = t1.next;
+ }
+
+ d3_timer_flush();
+};
+
+// Flush after callbacks, to avoid concurrent queue modification.
+function d3_timer_flush() {
+ var t0 = null,
+ t1 = d3_timer_queue,
+ then = Infinity;
+ while (t1) {
+ if (t1.flush) {
+ t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
+ } else {
+ then = Math.min(then, t1.then + t1.delay);
+ t1 = (t0 = t1).next;
+ }
+ }
+ return then;
+}
+
+var d3_timer_frame = window.requestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.oRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 17); };
+d3.transform = function(string) {
+ var g = document.createElementNS(d3.ns.prefix.svg, "g"),
+ identity = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0};
+ return (d3.transform = function(string) {
+ g.setAttribute("transform", string);
+ var t = g.transform.baseVal.consolidate();
+ return new d3_transform(t ? t.matrix : identity);
+ })(string);
+};
+
+// Compute x-scale and normalize the first row.
+// Compute shear and make second row orthogonal to first.
+// Compute y-scale and normalize the second row.
+// Finally, compute the rotation.
+function d3_transform(m) {
+ var r0 = [m.a, m.b],
+ r1 = [m.c, m.d],
+ kx = d3_transformNormalize(r0),
+ kz = d3_transformDot(r0, r1),
+ ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
+ if (r0[0] * r1[1] < r1[0] * r0[1]) {
+ r0[0] *= -1;
+ r0[1] *= -1;
+ kx *= -1;
+ kz *= -1;
+ }
+ this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees;
+ this.translate = [m.e, m.f];
+ this.scale = [kx, ky];
+ this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0;
+};
+
+d3_transform.prototype.toString = function() {
+ return "translate(" + this.translate
+ + ")rotate(" + this.rotate
+ + ")skewX(" + this.skew
+ + ")scale(" + this.scale
+ + ")";
+};
+
+function d3_transformDot(a, b) {
+ return a[0] * b[0] + a[1] * b[1];
+}
+
+function d3_transformNormalize(a) {
+ var k = Math.sqrt(d3_transformDot(a, a));
+ if (k) {
+ a[0] /= k;
+ a[1] /= k;
+ }
+ return k;
+}
+
+function d3_transformCombine(a, b, k) {
+ a[0] += k * b[0];
+ a[1] += k * b[1];
+ return a;
+}
+
+var d3_transformDegrees = 180 / Math.PI;
+d3.mouse = function(container) {
+ return d3_mousePoint(container, d3_eventSource());
+};
+
+// https://bugs.webkit.org/show_bug.cgi?id=44083
+var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
+
+function d3_mousePoint(container, e) {
+ var svg = container.ownerSVGElement || container;
+ if (svg.createSVGPoint) {
+ var point = svg.createSVGPoint();
+ if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
+ svg = d3.select(document.body)
+ .append("svg")
+ .style("position", "absolute")
+ .style("top", 0)
+ .style("left", 0);
+ var ctm = svg[0][0].getScreenCTM();
+ d3_mouse_bug44083 = !(ctm.f || ctm.e);
+ svg.remove();
+ }
+ if (d3_mouse_bug44083) {
+ point.x = e.pageX;
+ point.y = e.pageY;
+ } else {
+ point.x = e.clientX;
+ point.y = e.clientY;
+ }
+ point = point.matrixTransform(container.getScreenCTM().inverse());
+ return [point.x, point.y];
+ }
+ var rect = container.getBoundingClientRect();
+ return [e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop];
+};
+d3.touches = function(container, touches) {
+ if (arguments.length < 2) touches = d3_eventSource().touches;
+ return touches ? d3_array(touches).map(function(touch) {
+ var point = d3_mousePoint(container, touch);
+ point.identifier = touch.identifier;
+ return point;
+ }) : [];
+};
+function d3_noop() {}
+d3.scale = {};
+
+function d3_scaleExtent(domain) {
+ var start = domain[0], stop = domain[domain.length - 1];
+ return start < stop ? [start, stop] : [stop, start];
+}
+
+function d3_scaleRange(scale) {
+ return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
+}
+function d3_scale_nice(domain, nice) {
+ var i0 = 0,
+ i1 = domain.length - 1,
+ x0 = domain[i0],
+ x1 = domain[i1],
+ dx;
+
+ if (x1 < x0) {
+ dx = i0; i0 = i1; i1 = dx;
+ dx = x0; x0 = x1; x1 = dx;
+ }
+
+ if (dx = x1 - x0) {
+ nice = nice(dx);
+ domain[i0] = nice.floor(x0);
+ domain[i1] = nice.ceil(x1);
+ }
+
+ return domain;
+}
+
+function d3_scale_niceDefault() {
+ return Math;
+}
+d3.scale.linear = function() {
+ return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
+};
+
+function d3_scale_linear(domain, range, interpolate, clamp) {
+ var output,
+ input;
+
+ function rescale() {
+ var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear,
+ uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
+ output = linear(domain, range, uninterpolate, interpolate);
+ input = linear(range, domain, uninterpolate, d3.interpolate);
+ return scale;
+ }
+
+ function scale(x) {
+ return output(x);
+ }
+
+ // Note: requires range is coercible to number!
+ scale.invert = function(y) {
+ return input(y);
+ };
+
+ scale.domain = function(x) {
+ if (!arguments.length) return domain;
+ domain = x.map(Number);
+ return rescale();
+ };
+
+ scale.range = function(x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+
+ scale.rangeRound = function(x) {
+ return scale.range(x).interpolate(d3.interpolateRound);
+ };
+
+ scale.clamp = function(x) {
+ if (!arguments.length) return clamp;
+ clamp = x;
+ return rescale();
+ };
+
+ scale.interpolate = function(x) {
+ if (!arguments.length) return interpolate;
+ interpolate = x;
+ return rescale();
+ };
+
+ scale.ticks = function(m) {
+ return d3_scale_linearTicks(domain, m);
+ };
+
+ scale.tickFormat = function(m) {
+ return d3_scale_linearTickFormat(domain, m);
+ };
+
+ scale.nice = function() {
+ d3_scale_nice(domain, d3_scale_linearNice);
+ return rescale();
+ };
+
+ scale.copy = function() {
+ return d3_scale_linear(domain, range, interpolate, clamp);
+ };
+
+ return rescale();
+}
+
+function d3_scale_linearRebind(scale, linear) {
+ return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
+}
+
+function d3_scale_linearNice(dx) {
+ dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
+ return {
+ floor: function(x) { return Math.floor(x / dx) * dx; },
+ ceil: function(x) { return Math.ceil(x / dx) * dx; }
+ };
+}
+
+function d3_scale_linearTickRange(domain, m) {
+ var extent = d3_scaleExtent(domain),
+ span = extent[1] - extent[0],
+ step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
+ err = m / span * step;
+
+ // Filter ticks to get closer to the desired count.
+ if (err <= .15) step *= 10;
+ else if (err <= .35) step *= 5;
+ else if (err <= .75) step *= 2;
+
+ // Round start and stop values to step interval.
+ extent[0] = Math.ceil(extent[0] / step) * step;
+ extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
+ extent[2] = step;
+ return extent;
+}
+
+function d3_scale_linearTicks(domain, m) {
+ return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
+}
+
+function d3_scale_linearTickFormat(domain, m) {
+ return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
+}
+function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
+ var u = uninterpolate(domain[0], domain[1]),
+ i = interpolate(range[0], range[1]);
+ return function(x) {
+ return i(u(x));
+ };
+}
+function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
+ var u = [],
+ i = [],
+ j = 0,
+ k = Math.min(domain.length, range.length) - 1;
+
+ // Handle descending domains.
+ if (domain[k] < domain[0]) {
+ domain = domain.slice().reverse();
+ range = range.slice().reverse();
+ }
+
+ while (++j <= k) {
+ u.push(uninterpolate(domain[j - 1], domain[j]));
+ i.push(interpolate(range[j - 1], range[j]));
+ }
+
+ return function(x) {
+ var j = d3.bisect(domain, x, 1, k) - 1;
+ return i[j](u[j](x));
+ };
+}
+d3.scale.log = function() {
+ return d3_scale_log(d3.scale.linear(), d3_scale_logp);
+};
+
+function d3_scale_log(linear, log) {
+ var pow = log.pow;
+
+ function scale(x) {
+ return linear(log(x));
+ }
+
+ scale.invert = function(x) {
+ return pow(linear.invert(x));
+ };
+
+ scale.domain = function(x) {
+ if (!arguments.length) return linear.domain().map(pow);
+ log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
+ pow = log.pow;
+ linear.domain(x.map(log));
+ return scale;
+ };
+
+ scale.nice = function() {
+ linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
+ return scale;
+ };
+
+ scale.ticks = function() {
+ var extent = d3_scaleExtent(linear.domain()),
+ ticks = [];
+ if (extent.every(isFinite)) {
+ var i = Math.floor(extent[0]),
+ j = Math.ceil(extent[1]),
+ u = pow(extent[0]),
+ v = pow(extent[1]);
+ if (log === d3_scale_logn) {
+ ticks.push(pow(i));
+ for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
+ } else {
+ for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
+ ticks.push(pow(i));
+ }
+ for (i = 0; ticks[i] < u; i++) {} // strip small values
+ for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
+ ticks = ticks.slice(i, j);
+ }
+ return ticks;
+ };
+
+ scale.tickFormat = function(n, format) {
+ if (arguments.length < 2) format = d3_scale_logFormat;
+ if (arguments.length < 1) return format;
+ var k = n / scale.ticks().length,
+ f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil),
+ e;
+ return function(d) {
+ return d / pow(f(log(d) + e)) < k ? format(d) : "";
+ };
+ };
+
+ scale.copy = function() {
+ return d3_scale_log(linear.copy(), log);
+ };
+
+ return d3_scale_linearRebind(scale, linear);
+}
+
+var d3_scale_logFormat = d3.format(".0e");
+
+function d3_scale_logp(x) {
+ return Math.log(x < 0 ? 0 : x) / Math.LN10;
+}
+
+function d3_scale_logn(x) {
+ return -Math.log(x > 0 ? 0 : -x) / Math.LN10;
+}
+
+d3_scale_logp.pow = function(x) {
+ return Math.pow(10, x);
+};
+
+d3_scale_logn.pow = function(x) {
+ return -Math.pow(10, -x);
+};
+d3.scale.pow = function() {
+ return d3_scale_pow(d3.scale.linear(), 1);
+};
+
+function d3_scale_pow(linear, exponent) {
+ var powp = d3_scale_powPow(exponent),
+ powb = d3_scale_powPow(1 / exponent);
+
+ function scale(x) {
+ return linear(powp(x));
+ }
+
+ scale.invert = function(x) {
+ return powb(linear.invert(x));
+ };
+
+ scale.domain = function(x) {
+ if (!arguments.length) return linear.domain().map(powb);
+ linear.domain(x.map(powp));
+ return scale;
+ };
+
+ scale.ticks = function(m) {
+ return d3_scale_linearTicks(scale.domain(), m);
+ };
+
+ scale.tickFormat = function(m) {
+ return d3_scale_linearTickFormat(scale.domain(), m);
+ };
+
+ scale.nice = function() {
+ return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
+ };
+
+ scale.exponent = function(x) {
+ if (!arguments.length) return exponent;
+ var domain = scale.domain();
+ powp = d3_scale_powPow(exponent = x);
+ powb = d3_scale_powPow(1 / exponent);
+ return scale.domain(domain);
+ };
+
+ scale.copy = function() {
+ return d3_scale_pow(linear.copy(), exponent);
+ };
+
+ return d3_scale_linearRebind(scale, linear);
+}
+
+function d3_scale_powPow(e) {
+ return function(x) {
+ return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
+ };
+}
+d3.scale.sqrt = function() {
+ return d3.scale.pow().exponent(.5);
+};
+d3.scale.ordinal = function() {
+ return d3_scale_ordinal([], {t: "range", x: []});
+};
+
+function d3_scale_ordinal(domain, ranger) {
+ var index,
+ range,
+ rangeBand;
+
+ function scale(x) {
+ return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length];
+ }
+
+ function steps(start, step) {
+ return d3.range(domain.length).map(function(i) { return start + step * i; });
+ }
+
+ scale.domain = function(x) {
+ if (!arguments.length) return domain;
+ domain = [];
+ index = new d3_Map;
+ var i = -1, n = x.length, xi;
+ while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
+ return scale[ranger.t](ranger.x, ranger.p);
+ };
+
+ scale.range = function(x) {
+ if (!arguments.length) return range;
+ range = x;
+ rangeBand = 0;
+ ranger = {t: "range", x: x};
+ return scale;
+ };
+
+ scale.rangePoints = function(x, padding) {
+ if (arguments.length < 2) padding = 0;
+ var start = x[0],
+ stop = x[1],
+ step = (stop - start) / (domain.length - 1 + padding);
+ range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
+ rangeBand = 0;
+ ranger = {t: "rangePoints", x: x, p: padding};
+ return scale;
+ };
+
+ scale.rangeBands = function(x, padding) {
+ if (arguments.length < 2) padding = 0;
+ var reverse = x[1] < x[0],
+ start = x[reverse - 0],
+ stop = x[1 - reverse],
+ step = (stop - start) / (domain.length + padding);
+ range = steps(start + step * padding, step);
+ if (reverse) range.reverse();
+ rangeBand = step * (1 - padding);
+ ranger = {t: "rangeBands", x: x, p: padding};
+ return scale;
+ };
+
+ scale.rangeRoundBands = function(x, padding) {
+ if (arguments.length < 2) padding = 0;
+ var reverse = x[1] < x[0],
+ start = x[reverse - 0],
+ stop = x[1 - reverse],
+ step = Math.floor((stop - start) / (domain.length + padding)),
+ error = stop - start - (domain.length - padding) * step;
+ range = steps(start + Math.round(error / 2), step);
+ if (reverse) range.reverse();
+ rangeBand = Math.round(step * (1 - padding));
+ ranger = {t: "rangeRoundBands", x: x, p: padding};
+ return scale;
+ };
+
+ scale.rangeBand = function() {
+ return rangeBand;
+ };
+
+ scale.rangeExtent = function() {
+ return d3_scaleExtent(ranger.x);
+ };
+
+ scale.copy = function() {
+ return d3_scale_ordinal(domain, ranger);
+ };
+
+ return scale.domain(domain);
+}
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
+ */
+
+d3.scale.category10 = function() {
+ return d3.scale.ordinal().range(d3_category10);
+};
+
+d3.scale.category20 = function() {
+ return d3.scale.ordinal().range(d3_category20);
+};
+
+d3.scale.category20b = function() {
+ return d3.scale.ordinal().range(d3_category20b);
+};
+
+d3.scale.category20c = function() {
+ return d3.scale.ordinal().range(d3_category20c);
+};
+
+var d3_category10 = [
+ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
+ "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
+];
+
+var d3_category20 = [
+ "#1f77b4", "#aec7e8",
+ "#ff7f0e", "#ffbb78",
+ "#2ca02c", "#98df8a",
+ "#d62728", "#ff9896",
+ "#9467bd", "#c5b0d5",
+ "#8c564b", "#c49c94",
+ "#e377c2", "#f7b6d2",
+ "#7f7f7f", "#c7c7c7",
+ "#bcbd22", "#dbdb8d",
+ "#17becf", "#9edae5"
+];
+
+var d3_category20b = [
+ "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
+ "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
+ "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
+ "#843c39", "#ad494a", "#d6616b", "#e7969c",
+ "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
+];
+
+var d3_category20c = [
+ "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
+ "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
+ "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
+ "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
+ "#636363", "#969696", "#bdbdbd", "#d9d9d9"
+];
+d3.scale.quantile = function() {
+ return d3_scale_quantile([], []);
+};
+
+function d3_scale_quantile(domain, range) {
+ var thresholds;
+
+ function rescale() {
+ var k = 0,
+ n = domain.length,
+ q = range.length;
+ thresholds = [];
+ while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
+ return scale;
+ }
+
+ function scale(x) {
+ if (isNaN(x = +x)) return NaN;
+ return range[d3.bisect(thresholds, x)];
+ }
+
+ scale.domain = function(x) {
+ if (!arguments.length) return domain;
+ domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
+ return rescale();
+ };
+
+ scale.range = function(x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+
+ scale.quantiles = function() {
+ return thresholds;
+ };
+
+ scale.copy = function() {
+ return d3_scale_quantile(domain, range); // copy on write!
+ };
+
+ return rescale();
+}
+d3.scale.quantize = function() {
+ return d3_scale_quantize(0, 1, [0, 1]);
+};
+
+function d3_scale_quantize(x0, x1, range) {
+ var kx, i;
+
+ function scale(x) {
+ return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
+ }
+
+ function rescale() {
+ kx = range.length / (x1 - x0);
+ i = range.length - 1;
+ return scale;
+ }
+
+ scale.domain = function(x) {
+ if (!arguments.length) return [x0, x1];
+ x0 = +x[0];
+ x1 = +x[x.length - 1];
+ return rescale();
+ };
+
+ scale.range = function(x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+
+ scale.copy = function() {
+ return d3_scale_quantize(x0, x1, range); // copy on write
+ };
+
+ return rescale();
+}
+d3.scale.identity = function() {
+ return d3_scale_identity([0, 1]);
+};
+
+function d3_scale_identity(domain) {
+
+ function identity(x) { return +x; }
+
+ identity.invert = identity;
+
+ identity.domain = identity.range = function(x) {
+ if (!arguments.length) return domain;
+ domain = x.map(identity);
+ return identity;
+ };
+
+ identity.ticks = function(m) {
+ return d3_scale_linearTicks(domain, m);
+ };
+
+ identity.tickFormat = function(m) {
+ return d3_scale_linearTickFormat(domain, m);
+ };
+
+ identity.copy = function() {
+ return d3_scale_identity(domain);
+ };
+
+ return identity;
+}
+d3.svg = {};
+d3.svg.arc = function() {
+ var innerRadius = d3_svg_arcInnerRadius,
+ outerRadius = d3_svg_arcOuterRadius,
+ startAngle = d3_svg_arcStartAngle,
+ endAngle = d3_svg_arcEndAngle;
+
+ function arc() {
+ var r0 = innerRadius.apply(this, arguments),
+ r1 = outerRadius.apply(this, arguments),
+ a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
+ a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
+ da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
+ df = da < Math.PI ? "0" : "1",
+ c0 = Math.cos(a0),
+ s0 = Math.sin(a0),
+ c1 = Math.cos(a1),
+ s1 = Math.sin(a1);
+ return da >= d3_svg_arcMax
+ ? (r0
+ ? "M0," + r1
+ + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+ + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+ + "M0," + r0
+ + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
+ + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
+ + "Z"
+ : "M0," + r1
+ + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+ + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+ + "Z")
+ : (r0
+ ? "M" + r1 * c0 + "," + r1 * s0
+ + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+ + "L" + r0 * c1 + "," + r0 * s1
+ + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
+ + "Z"
+ : "M" + r1 * c0 + "," + r1 * s0
+ + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+ + "L0,0"
+ + "Z");
+ }
+
+ arc.innerRadius = function(v) {
+ if (!arguments.length) return innerRadius;
+ innerRadius = d3.functor(v);
+ return arc;
+ };
+
+ arc.outerRadius = function(v) {
+ if (!arguments.length) return outerRadius;
+ outerRadius = d3.functor(v);
+ return arc;
+ };
+
+ arc.startAngle = function(v) {
+ if (!arguments.length) return startAngle;
+ startAngle = d3.functor(v);
+ return arc;
+ };
+
+ arc.endAngle = function(v) {
+ if (!arguments.length) return endAngle;
+ endAngle = d3.functor(v);
+ return arc;
+ };
+
+ arc.centroid = function() {
+ var r = (innerRadius.apply(this, arguments)
+ + outerRadius.apply(this, arguments)) / 2,
+ a = (startAngle.apply(this, arguments)
+ + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
+ return [Math.cos(a) * r, Math.sin(a) * r];
+ };
+
+ return arc;
+};
+
+var d3_svg_arcOffset = -Math.PI / 2,
+ d3_svg_arcMax = 2 * Math.PI - 1e-6;
+
+function d3_svg_arcInnerRadius(d) {
+ return d.innerRadius;
+}
+
+function d3_svg_arcOuterRadius(d) {
+ return d.outerRadius;
+}
+
+function d3_svg_arcStartAngle(d) {
+ return d.startAngle;
+}
+
+function d3_svg_arcEndAngle(d) {
+ return d.endAngle;
+}
+function d3_svg_line(projection) {
+ var x = d3_svg_lineX,
+ y = d3_svg_lineY,
+ interpolate = d3_svg_lineInterpolatorDefault,
+ interpolator = d3_svg_lineInterpolators.get(interpolate),
+ tension = .7;
+
+ function line(d) {
+ return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
+ }
+
+ line.x = function(v) {
+ if (!arguments.length) return x;
+ x = v;
+ return line;
+ };
+
+ line.y = function(v) {
+ if (!arguments.length) return y;
+ y = v;
+ return line;
+ };
+
+ line.interpolate = function(v) {
+ if (!arguments.length) return interpolate;
+ if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault;
+ interpolator = d3_svg_lineInterpolators.get(interpolate = v);
+ return line;
+ };
+
+ line.tension = function(v) {
+ if (!arguments.length) return tension;
+ tension = v;
+ return line;
+ };
+
+ return line;
+}
+
+d3.svg.line = function() {
+ return d3_svg_line(Object);
+};
+
+// Converts the specified array of data into an array of points
+// (x-y tuples), by evaluating the specified `x` and `y` functions on each
+// data point. The `this` context of the evaluated functions is the specified
+// "self" object; each function is passed the current datum and index.
+function d3_svg_linePoints(self, d, x, y) {
+ var points = [],
+ i = -1,
+ n = d.length,
+ fx = typeof x === "function",
+ fy = typeof y === "function",
+ value;
+ if (fx && fy) {
+ while (++i < n) points.push([
+ x.call(self, value = d[i], i),
+ y.call(self, value, i)
+ ]);
+ } else if (fx) {
+ while (++i < n) points.push([x.call(self, d[i], i), y]);
+ } else if (fy) {
+ while (++i < n) points.push([x, y.call(self, d[i], i)]);
+ } else {
+ while (++i < n) points.push([x, y]);
+ }
+ return points;
+}
+
+// The default `x` property, which references d[0].
+function d3_svg_lineX(d) {
+ return d[0];
+}
+
+// The default `y` property, which references d[1].
+function d3_svg_lineY(d) {
+ return d[1];
+}
+
+var d3_svg_lineInterpolatorDefault = "linear";
+
+// The various interpolators supported by the `line` class.
+var d3_svg_lineInterpolators = d3.map({
+ "linear": d3_svg_lineLinear,
+ "step-before": d3_svg_lineStepBefore,
+ "step-after": d3_svg_lineStepAfter,
+ "basis": d3_svg_lineBasis,
+ "basis-open": d3_svg_lineBasisOpen,
+ "basis-closed": d3_svg_lineBasisClosed,
+ "bundle": d3_svg_lineBundle,
+ "cardinal": d3_svg_lineCardinal,
+ "cardinal-open": d3_svg_lineCardinalOpen,
+ "cardinal-closed": d3_svg_lineCardinalClosed,
+ "monotone": d3_svg_lineMonotone
+});
+
+// Linear interpolation; generates "L" commands.
+function d3_svg_lineLinear(points) {
+ var i = 0,
+ n = points.length,
+ p = points[0],
+ path = [p[0], ",", p[1]];
+ while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
+ return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepBefore(points) {
+ var i = 0,
+ n = points.length,
+ p = points[0],
+ path = [p[0], ",", p[1]];
+ while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
+ return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepAfter(points) {
+ var i = 0,
+ n = points.length,
+ p = points[0],
+ path = [p[0], ",", p[1]];
+ while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
+ return path.join("");
+}
+
+// Open cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalOpen(points, tension) {
+ return points.length < 4
+ ? d3_svg_lineLinear(points)
+ : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
+ d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Closed cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalClosed(points, tension) {
+ return points.length < 3
+ ? d3_svg_lineLinear(points)
+ : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
+ d3_svg_lineCardinalTangents([points[points.length - 2]]
+ .concat(points, [points[1]]), tension));
+}
+
+// Cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinal(points, tension, closed) {
+ return points.length < 3
+ ? d3_svg_lineLinear(points)
+ : points[0] + d3_svg_lineHermite(points,
+ d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Hermite spline construction; generates "C" commands.
+function d3_svg_lineHermite(points, tangents) {
+ if (tangents.length < 1
+ || (points.length != tangents.length
+ && points.length != tangents.length + 2)) {
+ return d3_svg_lineLinear(points);
+ }
+
+ var quad = points.length != tangents.length,
+ path = "",
+ p0 = points[0],
+ p = points[1],
+ t0 = tangents[0],
+ t = t0,
+ pi = 1;
+
+ if (quad) {
+ path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
+ + "," + p[0] + "," + p[1];
+ p0 = points[1];
+ pi = 2;
+ }
+
+ if (tangents.length > 1) {
+ t = tangents[1];
+ p = points[pi];
+ pi++;
+ path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
+ + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
+ + "," + p[0] + "," + p[1];
+ for (var i = 2; i < tangents.length; i++, pi++) {
+ p = points[pi];
+ t = tangents[i];
+ path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
+ + "," + p[0] + "," + p[1];
+ }
+ }
+
+ if (quad) {
+ var lp = points[pi];
+ path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
+ + "," + lp[0] + "," + lp[1];
+ }
+
+ return path;
+}
+
+// Generates tangents for a cardinal spline.
+function d3_svg_lineCardinalTangents(points, tension) {
+ var tangents = [],
+ a = (1 - tension) / 2,
+ p0,
+ p1 = points[0],
+ p2 = points[1],
+ i = 1,
+ n = points.length;
+ while (++i < n) {
+ p0 = p1;
+ p1 = p2;
+ p2 = points[i];
+ tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
+ }
+ return tangents;
+}
+
+// B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasis(points) {
+ if (points.length < 3) return d3_svg_lineLinear(points);
+ var i = 1,
+ n = points.length,
+ pi = points[0],
+ x0 = pi[0],
+ y0 = pi[1],
+ px = [x0, x0, x0, (pi = points[1])[0]],
+ py = [y0, y0, y0, pi[1]],
+ path = [x0, ",", y0];
+ d3_svg_lineBasisBezier(path, px, py);
+ while (++i < n) {
+ pi = points[i];
+ px.shift(); px.push(pi[0]);
+ py.shift(); py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ i = -1;
+ while (++i < 2) {
+ px.shift(); px.push(pi[0]);
+ py.shift(); py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ return path.join("");
+}
+
+// Open B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisOpen(points) {
+ if (points.length < 4) return d3_svg_lineLinear(points);
+ var path = [],
+ i = -1,
+ n = points.length,
+ pi,
+ px = [0],
+ py = [0];
+ while (++i < 3) {
+ pi = points[i];
+ px.push(pi[0]);
+ py.push(pi[1]);
+ }
+ path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
+ + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
+ --i; while (++i < n) {
+ pi = points[i];
+ px.shift(); px.push(pi[0]);
+ py.shift(); py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ return path.join("");
+}
+
+// Closed B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisClosed(points) {
+ var path,
+ i = -1,
+ n = points.length,
+ m = n + 4,
+ pi,
+ px = [],
+ py = [];
+ while (++i < 4) {
+ pi = points[i % n];
+ px.push(pi[0]);
+ py.push(pi[1]);
+ }
+ path = [
+ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
+ d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
+ ];
+ --i; while (++i < m) {
+ pi = points[i % n];
+ px.shift(); px.push(pi[0]);
+ py.shift(); py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ return path.join("");
+}
+
+function d3_svg_lineBundle(points, tension) {
+ var n = points.length - 1,
+ x0 = points[0][0],
+ y0 = points[0][1],
+ dx = points[n][0] - x0,
+ dy = points[n][1] - y0,
+ i = -1,
+ p,
+ t;
+ while (++i <= n) {
+ p = points[i];
+ t = i / n;
+ p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
+ p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
+ }
+ return d3_svg_lineBasis(points);
+}
+
+// Returns the dot product of the given four-element vectors.
+function d3_svg_lineDot4(a, b) {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+}
+
+// Matrix to transform basis (b-spline) control points to bezier
+// control points. Derived from FvD 11.2.8.
+var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
+ d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
+ d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
+
+// Pushes a "C" Bézier curve onto the specified path array, given the
+// two specified four-element arrays which define the control points.
+function d3_svg_lineBasisBezier(path, x, y) {
+ path.push(
+ "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
+ ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
+ ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
+ ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
+ ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
+ ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
+}
+
+// Computes the slope from points p0 to p1.
+function d3_svg_lineSlope(p0, p1) {
+ return (p1[1] - p0[1]) / (p1[0] - p0[0]);
+}
+
+// Compute three-point differences for the given points.
+// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
+function d3_svg_lineFiniteDifferences(points) {
+ var i = 0,
+ j = points.length - 1,
+ m = [],
+ p0 = points[0],
+ p1 = points[1],
+ d = m[0] = d3_svg_lineSlope(p0, p1);
+ while (++i < j) {
+ m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
+ }
+ m[i] = d;
+ return m;
+}
+
+// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
+// interpolation. Returns an array of tangent vectors. For details, see
+// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+function d3_svg_lineMonotoneTangents(points) {
+ var tangents = [],
+ d,
+ a,
+ b,
+ s,
+ m = d3_svg_lineFiniteDifferences(points),
+ i = -1,
+ j = points.length - 1;
+
+ // The first two steps are done by computing finite-differences:
+ // 1. Compute the slopes of the secant lines between successive points.
+ // 2. Initialize the tangents at every point as the average of the secants.
+
+ // Then, for each segment…
+ while (++i < j) {
+ d = d3_svg_lineSlope(points[i], points[i + 1]);
+
+ // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
+ // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
+ // preserve monotonicity. Ignore step 4 and 5 for those k.
+
+ if (Math.abs(d) < 1e-6) {
+ m[i] = m[i + 1] = 0;
+ } else {
+ // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
+ a = m[i] / d;
+ b = m[i + 1] / d;
+
+ // 5. Prevent overshoot and ensure monotonicity by restricting the
+ // magnitude of vector <ak, bk> to a circle of radius 3.
+ s = a * a + b * b;
+ if (s > 9) {
+ s = d * 3 / Math.sqrt(s);
+ m[i] = s * a;
+ m[i + 1] = s * b;
+ }
+ }
+ }
+
+ // Compute the normalized tangent vector from the slopes. Note that if x is
+ // not monotonic, it's possible that the slope will be infinite, so we protect
+ // against NaN by setting the coordinate to zero.
+ i = -1; while (++i <= j) {
+ s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
+ / (6 * (1 + m[i] * m[i]));
+ tangents.push([s || 0, m[i] * s || 0]);
+ }
+
+ return tangents;
+}
+
+function d3_svg_lineMonotone(points) {
+ return points.length < 3
+ ? d3_svg_lineLinear(points)
+ : points[0] +
+ d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
+}
+d3.svg.line.radial = function() {
+ var line = d3_svg_line(d3_svg_lineRadial);
+ line.radius = line.x, delete line.x;
+ line.angle = line.y, delete line.y;
+ return line;
+};
+
+function d3_svg_lineRadial(points) {
+ var point,
+ i = -1,
+ n = points.length,
+ r,
+ a;
+ while (++i < n) {
+ point = points[i];
+ r = point[0];
+ a = point[1] + d3_svg_arcOffset;
+ point[0] = r * Math.cos(a);
+ point[1] = r * Math.sin(a);
+ }
+ return points;
+}
+function d3_svg_area(projection) {
+ var x0 = d3_svg_lineX,
+ x1 = d3_svg_lineX,
+ y0 = 0,
+ y1 = d3_svg_lineY,
+ interpolate,
+ i0,
+ i1,
+ tension = .7;
+
+ function area(d) {
+ if (d.length < 1) return null;
+ var points0 = d3_svg_linePoints(this, d, x0, y0),
+ points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
+ return "M" + i0(projection(points1), tension)
+ + "L" + i1(projection(points0.reverse()), tension)
+ + "Z";
+ }
+
+ area.x = function(x) {
+ if (!arguments.length) return x1;
+ x0 = x1 = x;
+ return area;
+ };
+
+ area.x0 = function(x) {
+ if (!arguments.length) return x0;
+ x0 = x;
+ return area;
+ };
+
+ area.x1 = function(x) {
+ if (!arguments.length) return x1;
+ x1 = x;
+ return area;
+ };
+
+ area.y = function(y) {
+ if (!arguments.length) return y1;
+ y0 = y1 = y;
+ return area;
+ };
+
+ area.y0 = function(y) {
+ if (!arguments.length) return y0;
+ y0 = y;
+ return area;
+ };
+
+ area.y1 = function(y) {
+ if (!arguments.length) return y1;
+ y1 = y;
+ return area;
+ };
+
+ area.interpolate = function(x) {
+ if (!arguments.length) return interpolate;
+ if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault;
+ i0 = d3_svg_lineInterpolators.get(interpolate = x);
+ i1 = i0.reverse || i0;
+ return area;
+ };
+
+ area.tension = function(x) {
+ if (!arguments.length) return tension;
+ tension = x;
+ return area;
+ };
+
+ return area.interpolate("linear");
+}
+
+d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
+d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
+
+d3.svg.area = function() {
+ return d3_svg_area(Object);
+};
+
+function d3_svg_areaX(points) {
+ return function(d, i) {
+ return points[i][0];
+ };
+}
+
+function d3_svg_areaY(points) {
+ return function(d, i) {
+ return points[i][1];
+ };
+}
+d3.svg.area.radial = function() {
+ var area = d3_svg_area(d3_svg_lineRadial);
+ area.radius = area.x, delete area.x;
+ area.innerRadius = area.x0, delete area.x0;
+ area.outerRadius = area.x1, delete area.x1;
+ area.angle = area.y, delete area.y;
+ area.startAngle = area.y0, delete area.y0;
+ area.endAngle = area.y1, delete area.y1;
+ return area;
+};
+d3.svg.chord = function() {
+ var source = d3_svg_chordSource,
+ target = d3_svg_chordTarget,
+ radius = d3_svg_chordRadius,
+ startAngle = d3_svg_arcStartAngle,
+ endAngle = d3_svg_arcEndAngle;
+
+ // TODO Allow control point to be customized.
+
+ function chord(d, i) {
+ var s = subgroup(this, source, d, i),
+ t = subgroup(this, target, d, i);
+ return "M" + s.p0
+ + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t)
+ ? curve(s.r, s.p1, s.r, s.p0)
+ : curve(s.r, s.p1, t.r, t.p0)
+ + arc(t.r, t.p1, t.a1 - t.a0)
+ + curve(t.r, t.p1, s.r, s.p0))
+ + "Z";
+ }
+
+ function subgroup(self, f, d, i) {
+ var subgroup = f.call(self, d, i),
+ r = radius.call(self, subgroup, i),
+ a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
+ a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
+ return {
+ r: r,
+ a0: a0,
+ a1: a1,
+ p0: [r * Math.cos(a0), r * Math.sin(a0)],
+ p1: [r * Math.cos(a1), r * Math.sin(a1)]
+ };
+ }
+
+ function equals(a, b) {
+ return a.a0 == b.a0 && a.a1 == b.a1;
+ }
+
+ function arc(r, p, a) {
+ return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p;
+ }
+
+ function curve(r0, p0, r1, p1) {
+ return "Q 0,0 " + p1;
+ }
+
+ chord.radius = function(v) {
+ if (!arguments.length) return radius;
+ radius = d3.functor(v);
+ return chord;
+ };
+
+ chord.source = function(v) {
+ if (!arguments.length) return source;
+ source = d3.functor(v);
+ return chord;
+ };
+
+ chord.target = function(v) {
+ if (!arguments.length) return target;
+ target = d3.functor(v);
+ return chord;
+ };
+
+ chord.startAngle = function(v) {
+ if (!arguments.length) return startAngle;
+ startAngle = d3.functor(v);
+ return chord;
+ };
+
+ chord.endAngle = function(v) {
+ if (!arguments.length) return endAngle;
+ endAngle = d3.functor(v);
+ return chord;
+ };
+
+ return chord;
+};
+
+function d3_svg_chordSource(d) {
+ return d.source;
+}
+
+function d3_svg_chordTarget(d) {
+ return d.target;
+}
+
+function d3_svg_chordRadius(d) {
+ return d.radius;
+}
+
+function d3_svg_chordStartAngle(d) {
+ return d.startAngle;
+}
+
+function d3_svg_chordEndAngle(d) {
+ return d.endAngle;
+}
+d3.svg.diagonal = function() {
+ var source = d3_svg_chordSource,
+ target = d3_svg_chordTarget,
+ projection = d3_svg_diagonalProjection;
+
+ function diagonal(d, i) {
+ var p0 = source.call(this, d, i),
+ p3 = target.call(this, d, i),
+ m = (p0.y + p3.y) / 2,
+ p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
+ p = p.map(projection);
+ return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
+ }
+
+ diagonal.source = function(x) {
+ if (!arguments.length) return source;
+ source = d3.functor(x);
+ return diagonal;
+ };
+
+ diagonal.target = function(x) {
+ if (!arguments.length) return target;
+ target = d3.functor(x);
+ return diagonal;
+ };
+
+ diagonal.projection = function(x) {
+ if (!arguments.length) return projection;
+ projection = x;
+ return diagonal;
+ };
+
+ return diagonal;
+};
+
+function d3_svg_diagonalProjection(d) {
+ return [d.x, d.y];
+}
+d3.svg.diagonal.radial = function() {
+ var diagonal = d3.svg.diagonal(),
+ projection = d3_svg_diagonalProjection,
+ projection_ = diagonal.projection;
+
+ diagonal.projection = function(x) {
+ return arguments.length
+ ? projection_(d3_svg_diagonalRadialProjection(projection = x))
+ : projection;
+ };
+
+ return diagonal;
+};
+
+function d3_svg_diagonalRadialProjection(projection) {
+ return function() {
+ var d = projection.apply(this, arguments),
+ r = d[0],
+ a = d[1] + d3_svg_arcOffset;
+ return [r * Math.cos(a), r * Math.sin(a)];
+ };
+}
+d3.svg.mouse = d3.mouse;
+d3.svg.touches = d3.touches;
+d3.svg.symbol = function() {
+ var type = d3_svg_symbolType,
+ size = d3_svg_symbolSize;
+
+ function symbol(d, i) {
+ return (d3_svg_symbols.get(type.call(this, d, i))
+ || d3_svg_symbolCircle)
+ (size.call(this, d, i));
+ }
+
+ symbol.type = function(x) {
+ if (!arguments.length) return type;
+ type = d3.functor(x);
+ return symbol;
+ };
+
+ // size of symbol in square pixels
+ symbol.size = function(x) {
+ if (!arguments.length) return size;
+ size = d3.functor(x);
+ return symbol;
+ };
+
+ return symbol;
+};
+
+function d3_svg_symbolSize() {
+ return 64;
+}
+
+function d3_svg_symbolType() {
+ return "circle";
+}
+
+function d3_svg_symbolCircle(size) {
+ var r = Math.sqrt(size / Math.PI);
+ return "M0," + r
+ + "A" + r + "," + r + " 0 1,1 0," + (-r)
+ + "A" + r + "," + r + " 0 1,1 0," + r
+ + "Z";
+}
+
+// TODO cross-diagonal?
+var d3_svg_symbols = d3.map({
+ "circle": d3_svg_symbolCircle,
+ "cross": function(size) {
+ var r = Math.sqrt(size / 5) / 2;
+ return "M" + -3 * r + "," + -r
+ + "H" + -r
+ + "V" + -3 * r
+ + "H" + r
+ + "V" + -r
+ + "H" + 3 * r
+ + "V" + r
+ + "H" + r
+ + "V" + 3 * r
+ + "H" + -r
+ + "V" + r
+ + "H" + -3 * r
+ + "Z";
+ },
+ "diamond": function(size) {
+ var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
+ rx = ry * d3_svg_symbolTan30;
+ return "M0," + -ry
+ + "L" + rx + ",0"
+ + " 0," + ry
+ + " " + -rx + ",0"
+ + "Z";
+ },
+ "square": function(size) {
+ var r = Math.sqrt(size) / 2;
+ return "M" + -r + "," + -r
+ + "L" + r + "," + -r
+ + " " + r + "," + r
+ + " " + -r + "," + r
+ + "Z";
+ },
+ "triangle-down": function(size) {
+ var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+ ry = rx * d3_svg_symbolSqrt3 / 2;
+ return "M0," + ry
+ + "L" + rx +"," + -ry
+ + " " + -rx + "," + -ry
+ + "Z";
+ },
+ "triangle-up": function(size) {
+ var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+ ry = rx * d3_svg_symbolSqrt3 / 2;
+ return "M0," + -ry
+ + "L" + rx +"," + ry
+ + " " + -rx + "," + ry
+ + "Z";
+ }
+});
+
+d3.svg.symbolTypes = d3_svg_symbols.keys();
+
+var d3_svg_symbolSqrt3 = Math.sqrt(3),
+ d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
+d3.svg.axis = function() {
+ var scale = d3.scale.linear(),
+ orient = "bottom",
+ tickMajorSize = 6,
+ tickMinorSize = 6,
+ tickEndSize = 6,
+ tickPadding = 3,
+ tickArguments_ = [10],
+ tickValues = null,
+ tickFormat_,
+ tickSubdivide = 0;
+
+ function axis(g) {
+ g.each(function() {
+ var g = d3.select(this);
+
+ // Ticks, or domain values for ordinal scales.
+ var ticks = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain()) : tickValues,
+ tickFormat = tickFormat_ == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String) : tickFormat_;
+
+ // Minor ticks.
+ var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
+ subtick = g.selectAll(".minor").data(subticks, String),
+ subtickEnter = subtick.enter().insert("line", "g").attr("class", "tick minor").style("opacity", 1e-6),
+ subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(),
+ subtickUpdate = d3.transition(subtick).style("opacity", 1);
+
+ // Major ticks.
+ var tick = g.selectAll("g").data(ticks, String),
+ tickEnter = tick.enter().insert("g", "path").style("opacity", 1e-6),
+ tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(),
+ tickUpdate = d3.transition(tick).style("opacity", 1),
+ tickTransform;
+
+ // Domain.
+ var range = d3_scaleRange(scale),
+ path = g.selectAll(".domain").data([0]),
+ pathEnter = path.enter().append("path").attr("class", "domain"),
+ pathUpdate = d3.transition(path);
+
+ // Stash a snapshot of the new scale, and retrieve the old snapshot.
+ var scale1 = scale.copy(),
+ scale0 = this.__chart__ || scale1;
+ this.__chart__ = scale1;
+
+ tickEnter.append("line").attr("class", "tick");
+ tickEnter.append("text");
+ tickUpdate.select("text").text(tickFormat);
+
+ switch (orient) {
+ case "bottom": {
+ tickTransform = d3_svg_axisX;
+ subtickEnter.attr("y2", tickMinorSize);
+ subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
+ tickEnter.select("line").attr("y2", tickMajorSize);
+ tickEnter.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
+ tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize);
+ tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle");
+ pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
+ break;
+ }
+ case "top": {
+ tickTransform = d3_svg_axisX;
+ subtickEnter.attr("y2", -tickMinorSize);
+ subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
+ tickEnter.select("line").attr("y2", -tickMajorSize);
+ tickEnter.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
+ tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize);
+ tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle");
+ pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
+ break;
+ }
+ case "left": {
+ tickTransform = d3_svg_axisY;
+ subtickEnter.attr("x2", -tickMinorSize);
+ subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
+ tickEnter.select("line").attr("x2", -tickMajorSize);
+ tickEnter.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
+ tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0);
+ tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end");
+ pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
+ break;
+ }
+ case "right": {
+ tickTransform = d3_svg_axisY;
+ subtickEnter.attr("x2", tickMinorSize);
+ subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
+ tickEnter.select("line").attr("x2", tickMajorSize);
+ tickEnter.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
+ tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0);
+ tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start");
+ pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
+ break;
+ }
+ }
+
+ // For quantitative scales:
+ // - enter new ticks from the old scale
+ // - exit old ticks to the new scale
+ if (scale.ticks) {
+ tickEnter.call(tickTransform, scale0);
+ tickUpdate.call(tickTransform, scale1);
+ tickExit.call(tickTransform, scale1);
+ subtickEnter.call(tickTransform, scale0);
+ subtickUpdate.call(tickTransform, scale1);
+ subtickExit.call(tickTransform, scale1);
+ }
+
+ // For ordinal scales:
+ // - any entering ticks are undefined in the old scale
+ // - any exiting ticks are undefined in the new scale
+ // Therefore, we only need to transition updating ticks.
+ else {
+ var dx = scale1.rangeBand() / 2, x = function(d) { return scale1(d) + dx; };
+ tickEnter.call(tickTransform, x);
+ tickUpdate.call(tickTransform, x);
+ }
+ });
+ }
+
+ axis.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = x;
+ return axis;
+ };
+
+ axis.orient = function(x) {
+ if (!arguments.length) return orient;
+ orient = x;
+ return axis;
+ };
+
+ axis.ticks = function() {
+ if (!arguments.length) return tickArguments_;
+ tickArguments_ = arguments;
+ return axis;
+ };
+
+ axis.tickValues = function(x) {
+ if (!arguments.length) return tickValues;
+ tickValues = x;
+ return axis;
+ };
+
+ axis.tickFormat = function(x) {
+ if (!arguments.length) return tickFormat_;
+ tickFormat_ = x;
+ return axis;
+ };
+
+ axis.tickSize = function(x, y, z) {
+ if (!arguments.length) return tickMajorSize;
+ var n = arguments.length - 1;
+ tickMajorSize = +x;
+ tickMinorSize = n > 1 ? +y : tickMajorSize;
+ tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
+ return axis;
+ };
+
+ axis.tickPadding = function(x) {
+ if (!arguments.length) return tickPadding;
+ tickPadding = +x;
+ return axis;
+ };
+
+ axis.tickSubdivide = function(x) {
+ if (!arguments.length) return tickSubdivide;
+ tickSubdivide = +x;
+ return axis;
+ };
+
+ return axis;
+};
+
+function d3_svg_axisX(selection, x) {
+ selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
+}
+
+function d3_svg_axisY(selection, y) {
+ selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
+}
+
+function d3_svg_axisSubdivide(scale, ticks, m) {
+ subticks = [];
+ if (m && ticks.length > 1) {
+ var extent = d3_scaleExtent(scale.domain()),
+ subticks,
+ i = -1,
+ n = ticks.length,
+ d = (ticks[1] - ticks[0]) / ++m,
+ j,
+ v;
+ while (++i < n) {
+ for (j = m; --j > 0;) {
+ if ((v = +ticks[i] - j * d) >= extent[0]) {
+ subticks.push(v);
+ }
+ }
+ }
+ for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
+ subticks.push(v);
+ }
+ }
+ return subticks;
+}
+d3.svg.brush = function() {
+ var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"),
+ x = null, // x-scale, optional
+ y = null, // y-scale, optional
+ resizes = d3_svg_brushResizes[0],
+ extent = [[0, 0], [0, 0]], // [x0, y0], [x1, y1], in pixels (integers)
+ extentDomain; // the extent in data space, lazily created
+
+ function brush(g) {
+ g.each(function() {
+ var g = d3.select(this),
+ bg = g.selectAll(".background").data([0]),
+ fg = g.selectAll(".extent").data([0]),
+ tz = g.selectAll(".resize").data(resizes, String),
+ e;
+
+ // Prepare the brush container for events.
+ g
+ .style("pointer-events", "all")
+ .on("mousedown.brush", brushstart)
+ .on("touchstart.brush", brushstart);
+
+ // An invisible, mouseable area for starting a new brush.
+ bg.enter().append("rect")
+ .attr("class", "background")
+ .style("visibility", "hidden")
+ .style("cursor", "crosshair");
+
+ // The visible brush extent; style this as you like!
+ fg.enter().append("rect")
+ .attr("class", "extent")
+ .style("cursor", "move");
+
+ // More invisible rects for resizing the extent.
+ tz.enter().append("g")
+ .attr("class", function(d) { return "resize " + d; })
+ .style("cursor", function(d) { return d3_svg_brushCursor[d]; })
+ .append("rect")
+ .attr("x", function(d) { return /[ew]$/.test(d) ? -3 : null; })
+ .attr("y", function(d) { return /^[ns]/.test(d) ? -3 : null; })
+ .attr("width", 6)
+ .attr("height", 6)
+ .style("visibility", "hidden");
+
+ // Show or hide the resizers.
+ tz.style("display", brush.empty() ? "none" : null);
+
+ // Remove any superfluous resizers.
+ tz.exit().remove();
+
+ // Initialize the background to fill the defined range.
+ // If the range isn't defined, you can post-process.
+ if (x) {
+ e = d3_scaleRange(x);
+ bg.attr("x", e[0]).attr("width", e[1] - e[0]);
+ redrawX(g);
+ }
+ if (y) {
+ e = d3_scaleRange(y);
+ bg.attr("y", e[0]).attr("height", e[1] - e[0]);
+ redrawY(g);
+ }
+ redraw(g);
+ });
+ }
+
+ function redraw(g) {
+ g.selectAll(".resize").attr("transform", function(d) {
+ return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")";
+ });
+ }
+
+ function redrawX(g) {
+ g.select(".extent").attr("x", extent[0][0]);
+ g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]);
+ }
+
+ function redrawY(g) {
+ g.select(".extent").attr("y", extent[0][1]);
+ g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]);
+ }
+
+ function brushstart() {
+ var target = this,
+ eventTarget = d3.select(d3.event.target),
+ event_ = event.of(target, arguments),
+ g = d3.select(target),
+ resizing = eventTarget.datum(),
+ resizingX = !/^(n|s)$/.test(resizing) && x,
+ resizingY = !/^(e|w)$/.test(resizing) && y,
+ dragging = eventTarget.classed("extent"),
+ center,
+ origin = mouse(),
+ offset;
+
+ var w = d3.select(window)
+ .on("mousemove.brush", brushmove)
+ .on("mouseup.brush", brushend)
+ .on("touchmove.brush", brushmove)
+ .on("touchend.brush", brushend)
+ .on("keydown.brush", keydown)
+ .on("keyup.brush", keyup);
+
+ // If the extent was clicked on, drag rather than brush;
+ // store the point between the mouse and extent origin instead.
+ if (dragging) {
+ origin[0] = extent[0][0] - origin[0];
+ origin[1] = extent[0][1] - origin[1];
+ }
+
+ // If a resizer was clicked on, record which side is to be resized.
+ // Also, set the origin to the opposite side.
+ else if (resizing) {
+ var ex = +/w$/.test(resizing),
+ ey = +/^n/.test(resizing);
+ offset = [extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1]];
+ origin[0] = extent[ex][0];
+ origin[1] = extent[ey][1];
+ }
+
+ // If the ALT key is down when starting a brush, the center is at the mouse.
+ else if (d3.event.altKey) center = origin.slice();
+
+ // Propagate the active cursor to the body for the drag duration.
+ g.style("pointer-events", "none").selectAll(".resize").style("display", null);
+ d3.select("body").style("cursor", eventTarget.style("cursor"));
+
+ // Notify listeners.
+ event_({type: "brushstart"});
+ brushmove();
+ d3_eventCancel();
+
+ function mouse() {
+ var touches = d3.event.changedTouches;
+ return touches ? d3.touches(target, touches)[0] : d3.mouse(target);
+ }
+
+ function keydown() {
+ if (d3.event.keyCode == 32) {
+ if (!dragging) {
+ center = null;
+ origin[0] -= extent[1][0];
+ origin[1] -= extent[1][1];
+ dragging = 2;
+ }
+ d3_eventCancel();
+ }
+ }
+
+ function keyup() {
+ if (d3.event.keyCode == 32 && dragging == 2) {
+ origin[0] += extent[1][0];
+ origin[1] += extent[1][1];
+ dragging = 0;
+ d3_eventCancel();
+ }
+ }
+
+ function brushmove() {
+ var point = mouse(),
+ moved = false;
+
+ // Preserve the offset for thick resizers.
+ if (offset) {
+ point[0] += offset[0];
+ point[1] += offset[1];
+ }
+
+ if (!dragging) {
+
+ // If needed, determine the center from the current extent.
+ if (d3.event.altKey) {
+ if (!center) center = [(extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2];
+
+ // Update the origin, for when the ALT key is released.
+ origin[0] = extent[+(point[0] < center[0])][0];
+ origin[1] = extent[+(point[1] < center[1])][1];
+ }
+
+ // When the ALT key is released, we clear the center.
+ else center = null;
+ }
+
+ // Update the brush extent for each dimension.
+ if (resizingX && move1(point, x, 0)) {
+ redrawX(g);
+ moved = true;
+ }
+ if (resizingY && move1(point, y, 1)) {
+ redrawY(g);
+ moved = true;
+ }
+
+ // Final redraw and notify listeners.
+ if (moved) {
+ redraw(g);
+ event_({type: "brush", mode: dragging ? "move" : "resize"});
+ }
+ }
+
+ function move1(point, scale, i) {
+ var range = d3_scaleRange(scale),
+ r0 = range[0],
+ r1 = range[1],
+ position = origin[i],
+ size = extent[1][i] - extent[0][i],
+ min,
+ max;
+
+ // When dragging, reduce the range by the extent size and position.
+ if (dragging) {
+ r0 -= position;
+ r1 -= size + position;
+ }
+
+ // Clamp the point so that the extent fits within the range extent.
+ min = Math.max(r0, Math.min(r1, point[i]));
+
+ // Compute the new extent bounds.
+ if (dragging) {
+ max = (min += position) + size;
+ } else {
+
+ // If the ALT key is pressed, then preserve the center of the extent.
+ if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
+
+ // Compute the min and max of the position and point.
+ if (position < min) {
+ max = min;
+ min = position;
+ } else {
+ max = position;
+ }
+ }
+
+ // Update the stored bounds.
+ if (extent[0][i] !== min || extent[1][i] !== max) {
+ extentDomain = null;
+ extent[0][i] = min;
+ extent[1][i] = max;
+ return true;
+ }
+ }
+
+ function brushend() {
+ brushmove();
+
+ // reset the cursor styles
+ g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
+ d3.select("body").style("cursor", null);
+
+ w .on("mousemove.brush", null)
+ .on("mouseup.brush", null)
+ .on("touchmove.brush", null)
+ .on("touchend.brush", null)
+ .on("keydown.brush", null)
+ .on("keyup.brush", null);
+
+ event_({type: "brushend"});
+ d3_eventCancel();
+ }
+ }
+
+ brush.x = function(z) {
+ if (!arguments.length) return x;
+ x = z;
+ resizes = d3_svg_brushResizes[!x << 1 | !y]; // fore!
+ return brush;
+ };
+
+ brush.y = function(z) {
+ if (!arguments.length) return y;
+ y = z;
+ resizes = d3_svg_brushResizes[!x << 1 | !y]; // fore!
+ return brush;
+ };
+
+ brush.extent = function(z) {
+ var x0, x1, y0, y1, t;
+
+ // Invert the pixel extent to data-space.
+ if (!arguments.length) {
+ z = extentDomain || extent;
+ if (x) {
+ x0 = z[0][0], x1 = z[1][0];
+ if (!extentDomain) {
+ x0 = extent[0][0], x1 = extent[1][0];
+ if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
+ if (x1 < x0) t = x0, x0 = x1, x1 = t;
+ }
+ }
+ if (y) {
+ y0 = z[0][1], y1 = z[1][1];
+ if (!extentDomain) {
+ y0 = extent[0][1], y1 = extent[1][1];
+ if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
+ if (y1 < y0) t = y0, y0 = y1, y1 = t;
+ }
+ }
+ return x && y ? [[x0, y0], [x1, y1]] : x ? [x0, x1] : y && [y0, y1];
+ }
+
+ // Scale the data-space extent to pixels.
+ extentDomain = [[0, 0], [0, 0]];
+ if (x) {
+ x0 = z[0], x1 = z[1];
+ if (y) x0 = x0[0], x1 = x1[0];
+ extentDomain[0][0] = x0, extentDomain[1][0] = x1;
+ if (x.invert) x0 = x(x0), x1 = x(x1);
+ if (x1 < x0) t = x0, x0 = x1, x1 = t;
+ extent[0][0] = x0 | 0, extent[1][0] = x1 | 0;
+ }
+ if (y) {
+ y0 = z[0], y1 = z[1];
+ if (x) y0 = y0[1], y1 = y1[1];
+ extentDomain[0][1] = y0, extentDomain[1][1] = y1;
+ if (y.invert) y0 = y(y0), y1 = y(y1);
+ if (y1 < y0) t = y0, y0 = y1, y1 = t;
+ extent[0][1] = y0 | 0, extent[1][1] = y1 | 0;
+ }
+
+ return brush;
+ };
+
+ brush.clear = function() {
+ extentDomain = null;
+ extent[0][0] =
+ extent[0][1] =
+ extent[1][0] =
+ extent[1][1] = 0;
+ return brush;
+ };
+
+ brush.empty = function() {
+ return (x && extent[0][0] === extent[1][0])
+ || (y && extent[0][1] === extent[1][1]);
+ };
+
+ return d3.rebind(brush, event, "on");
+};
+
+var d3_svg_brushCursor = {
+ n: "ns-resize",
+ e: "ew-resize",
+ s: "ns-resize",
+ w: "ew-resize",
+ nw: "nwse-resize",
+ ne: "nesw-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+};
+
+var d3_svg_brushResizes = [
+ ["n", "e", "s", "w", "nw", "ne", "se", "sw"],
+ ["e", "w"],
+ ["n", "s"],
+ []
+];
+d3.behavior = {};
+// TODO Track touch points by identifier.
+
+d3.behavior.drag = function() {
+ var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"),
+ origin = null;
+
+ function drag() {
+ this.on("mousedown.drag", mousedown)
+ .on("touchstart.drag", mousedown);
+ }
+
+ function mousedown() {
+ var target = this,
+ event_ = event.of(target, arguments),
+ eventTarget = d3.event.target,
+ offset,
+ origin_ = point(),
+ moved = 0;
+
+ var w = d3.select(window)
+ .on("mousemove.drag", dragmove)
+ .on("touchmove.drag", dragmove)
+ .on("mouseup.drag", dragend, true)
+ .on("touchend.drag", dragend, true);
+
+ if (origin) {
+ offset = origin.apply(target, arguments);
+ offset = [offset.x - origin_[0], offset.y - origin_[1]];
+ } else {
+ offset = [0, 0];
+ }
+
+ event_({type: "dragstart"});
+
+ function point() {
+ var p = target.parentNode,
+ t = d3.event.changedTouches;
+ return t ? d3.touches(p, t)[0] : d3.mouse(p);
+ }
+
+ function dragmove() {
+ if (!target.parentNode) return dragend(); // target removed from DOM
+
+ var p = point(),
+ dx = p[0] - origin_[0],
+ dy = p[1] - origin_[1];
+
+ moved |= dx | dy;
+ origin_ = p;
+ d3_eventCancel();
+
+ event_({type: "drag", x: p[0] + offset[0], y: p[1] + offset[1], dx: dx, dy: dy});
+ }
+
+ function dragend() {
+ event_({type: "dragend"});
+
+ // if moved, prevent the mouseup (and possibly click) from propagating
+ if (moved) {
+ d3_eventCancel();
+ if (d3.event.target === eventTarget) w.on("click.drag", click, true);
+ }
+
+ w .on("mousemove.drag", null)
+ .on("touchmove.drag", null)
+ .on("mouseup.drag", null)
+ .on("touchend.drag", null);
+ }
+
+ // prevent the subsequent click from propagating (e.g., for anchors)
+ function click() {
+ d3_eventCancel();
+ w.on("click.drag", null);
+ }
+ }
+
+ drag.origin = function(x) {
+ if (!arguments.length) return origin;
+ origin = x;
+ return drag;
+ };
+
+ return d3.rebind(drag, event, "on");
+};
+d3.behavior.zoom = function() {
+ var translate = [0, 0],
+ translate0, // translate when we started zooming (to avoid drift)
+ scale = 1,
+ scale0, // scale when we started touching
+ scaleExtent = d3_behavior_zoomInfinity,
+ event = d3_eventDispatch(zoom, "zoom"),
+ x0,
+ x1,
+ y0,
+ y1,
+ touchtime; // time of last touchstart (to detect double-tap)
+
+ function zoom() {
+ this
+ .on("mousedown.zoom", mousedown)
+ .on("mousewheel.zoom", mousewheel)
+ .on("mousemove.zoom", mousemove)
+ .on("DOMMouseScroll.zoom", mousewheel)
+ .on("dblclick.zoom", dblclick)
+ .on("touchstart.zoom", touchstart)
+ .on("touchmove.zoom", touchmove)
+ .on("touchend.zoom", touchstart);
+ }
+
+ zoom.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = x.map(Number);
+ return zoom;
+ };
+
+ zoom.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return zoom;
+ };
+
+ zoom.scaleExtent = function(x) {
+ if (!arguments.length) return scaleExtent;
+ scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number);
+ return zoom;
+ };
+
+ zoom.x = function(z) {
+ if (!arguments.length) return x1;
+ x1 = z;
+ x0 = z.copy();
+ return zoom;
+ };
+
+ zoom.y = function(z) {
+ if (!arguments.length) return y1;
+ y1 = z;
+ y0 = z.copy();
+ return zoom;
+ };
+
+ function location(p) {
+ return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale];
+ }
+
+ function point(l) {
+ return [l[0] * scale + translate[0], l[1] * scale + translate[1]];
+ }
+
+ function scaleTo(s) {
+ scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
+ }
+
+ function translateTo(p, l) {
+ l = point(l);
+ translate[0] += p[0] - l[0];
+ translate[1] += p[1] - l[1];
+ }
+
+ function dispatch(event) {
+ if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert));
+ if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert));
+ d3.event.preventDefault();
+ event({type: "zoom", scale: scale, translate: translate});
+ }
+
+ function mousedown() {
+ var target = this,
+ event_ = event.of(target, arguments),
+ eventTarget = d3.event.target,
+ moved = 0,
+ w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup),
+ l = location(d3.mouse(target));
+
+ window.focus();
+ d3_eventCancel();
+
+ function mousemove() {
+ moved = 1;
+ translateTo(d3.mouse(target), l);
+ dispatch(event_);
+ }
+
+ function mouseup() {
+ if (moved) d3_eventCancel();
+ w.on("mousemove.zoom", null).on("mouseup.zoom", null);
+ if (moved && d3.event.target === eventTarget) w.on("click.zoom", click);
+ }
+
+ function click() {
+ d3_eventCancel();
+ w.on("click.zoom", null);
+ }
+ }
+
+ function mousewheel() {
+ if (!translate0) translate0 = location(d3.mouse(this));
+ scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale);
+ translateTo(d3.mouse(this), translate0);
+ dispatch(event.of(this, arguments));
+ }
+
+ function mousemove() {
+ translate0 = null;
+ }
+
+ function dblclick() {
+ var p = d3.mouse(this), l = location(p);
+ scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2);
+ translateTo(p, l);
+ dispatch(event.of(this, arguments));
+ }
+
+ function touchstart() {
+ var touches = d3.touches(this),
+ now = Date.now();
+
+ scale0 = scale;
+ translate0 = {};
+ touches.forEach(function(t) { translate0[t.identifier] = location(t); });
+ d3_eventCancel();
+
+ if ((touches.length === 1) && (now - touchtime < 500)) { // dbltap
+ var p = touches[0], l = location(touches[0]);
+ scaleTo(scale * 2);
+ translateTo(p, l);
+ dispatch(event.of(this, arguments));
+ }
+ touchtime = now;
+ }
+
+ function touchmove() {
+ var touches = d3.touches(this),
+ p0 = touches[0],
+ l0 = translate0[p0.identifier];
+ if (p1 = touches[1]) {
+ var p1, l1 = translate0[p1.identifier];
+ p0 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
+ l0 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+ scaleTo(d3.event.scale * scale0);
+ }
+ translateTo(p0, l0);
+ dispatch(event.of(this, arguments));
+ }
+
+ return d3.rebind(zoom, event, "on");
+};
+
+var d3_behavior_zoomDiv, // for interpreting mousewheel events
+ d3_behavior_zoomInfinity = [0, Infinity]; // default scale extent
+
+function d3_behavior_zoomDelta() {
+
+ // mousewheel events are totally broken!
+ // https://bugs.webkit.org/show_bug.cgi?id=40441
+ // not only that, but Chrome and Safari differ in re. to acceleration!
+ if (!d3_behavior_zoomDiv) {
+ d3_behavior_zoomDiv = d3.select("body").append("div")
+ .style("visibility", "hidden")
+ .style("top", 0)
+ .style("height", 0)
+ .style("width", 0)
+ .style("overflow-y", "scroll")
+ .append("div")
+ .style("height", "2000px")
+ .node().parentNode;
+ }
+
+ var e = d3.event, delta;
+ try {
+ d3_behavior_zoomDiv.scrollTop = 1000;
+ d3_behavior_zoomDiv.dispatchEvent(e);
+ delta = 1000 - d3_behavior_zoomDiv.scrollTop;
+ } catch (error) {
+ delta = e.wheelDelta || (-e.detail * 5);
+ }
+
+ return delta;
+}
+d3.layout = {};
+// Implements hierarchical edge bundling using Holten's algorithm. For each
+// input link, a path is computed that travels through the tree, up the parent
+// hierarchy to the least common ancestor, and then back down to the destination
+// node. Each path is simply an array of nodes.
+d3.layout.bundle = function() {
+ return function(links) {
+ var paths = [],
+ i = -1,
+ n = links.length;
+ while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
+ return paths;
+ };
+};
+
+function d3_layout_bundlePath(link) {
+ var start = link.source,
+ end = link.target,
+ lca = d3_layout_bundleLeastCommonAncestor(start, end),
+ points = [start];
+ while (start !== lca) {
+ start = start.parent;
+ points.push(start);
+ }
+ var k = points.length;
+ while (end !== lca) {
+ points.splice(k, 0, end);
+ end = end.parent;
+ }
+ return points;
+}
+
+function d3_layout_bundleAncestors(node) {
+ var ancestors = [],
+ parent = node.parent;
+ while (parent != null) {
+ ancestors.push(node);
+ node = parent;
+ parent = parent.parent;
+ }
+ ancestors.push(node);
+ return ancestors;
+}
+
+function d3_layout_bundleLeastCommonAncestor(a, b) {
+ if (a === b) return a;
+ var aNodes = d3_layout_bundleAncestors(a),
+ bNodes = d3_layout_bundleAncestors(b),
+ aNode = aNodes.pop(),
+ bNode = bNodes.pop(),
+ sharedNode = null;
+ while (aNode === bNode) {
+ sharedNode = aNode;
+ aNode = aNodes.pop();
+ bNode = bNodes.pop();
+ }
+ return sharedNode;
+}
+d3.layout.chord = function() {
+ var chord = {},
+ chords,
+ groups,
+ matrix,
+ n,
+ padding = 0,
+ sortGroups,
+ sortSubgroups,
+ sortChords;
+
+ function relayout() {
+ var subgroups = {},
+ groupSums = [],
+ groupIndex = d3.range(n),
+ subgroupIndex = [],
+ k,
+ x,
+ x0,
+ i,
+ j;
+
+ chords = [];
+ groups = [];
+
+ // Compute the sum.
+ k = 0, i = -1; while (++i < n) {
+ x = 0, j = -1; while (++j < n) {
+ x += matrix[i][j];
+ }
+ groupSums.push(x);
+ subgroupIndex.push(d3.range(n));
+ k += x;
+ }
+
+ // Sort groups…
+ if (sortGroups) {
+ groupIndex.sort(function(a, b) {
+ return sortGroups(groupSums[a], groupSums[b]);
+ });
+ }
+
+ // Sort subgroups…
+ if (sortSubgroups) {
+ subgroupIndex.forEach(function(d, i) {
+ d.sort(function(a, b) {
+ return sortSubgroups(matrix[i][a], matrix[i][b]);
+ });
+ });
+ }
+
+ // Convert the sum to scaling factor for [0, 2pi].
+ // TODO Allow start and end angle to be specified.
+ // TODO Allow padding to be specified as percentage?
+ k = (2 * Math.PI - padding * n) / k;
+
+ // Compute the start and end angle for each group and subgroup.
+ // Note: Opera has a bug reordering object literal properties!
+ x = 0, i = -1; while (++i < n) {
+ x0 = x, j = -1; while (++j < n) {
+ var di = groupIndex[i],
+ dj = subgroupIndex[di][j],
+ v = matrix[di][dj],
+ a0 = x,
+ a1 = x += v * k;
+ subgroups[di + "-" + dj] = {
+ index: di,
+ subindex: dj,
+ startAngle: a0,
+ endAngle: a1,
+ value: v
+ };
+ }
+ groups.push({
+ index: di,
+ startAngle: x0,
+ endAngle: x,
+ value: (x - x0) / k
+ });
+ x += padding;
+ }
+
+ // Generate chords for each (non-empty) subgroup-subgroup link.
+ i = -1; while (++i < n) {
+ j = i - 1; while (++j < n) {
+ var source = subgroups[i + "-" + j],
+ target = subgroups[j + "-" + i];
+ if (source.value || target.value) {
+ chords.push(source.value < target.value
+ ? {source: target, target: source}
+ : {source: source, target: target});
+ }
+ }
+ }
+
+ if (sortChords) resort();
+ }
+
+ function resort() {
+ chords.sort(function(a, b) {
+ return sortChords(
+ (a.source.value + a.target.value) / 2,
+ (b.source.value + b.target.value) / 2);
+ });
+ }
+
+ chord.matrix = function(x) {
+ if (!arguments.length) return matrix;
+ n = (matrix = x) && matrix.length;
+ chords = groups = null;
+ return chord;
+ };
+
+ chord.padding = function(x) {
+ if (!arguments.length) return padding;
+ padding = x;
+ chords = groups = null;
+ return chord;
+ };
+
+ chord.sortGroups = function(x) {
+ if (!arguments.length) return sortGroups;
+ sortGroups = x;
+ chords = groups = null;
+ return chord;
+ };
+
+ chord.sortSubgroups = function(x) {
+ if (!arguments.length) return sortSubgroups;
+ sortSubgroups = x;
+ chords = null;
+ return chord;
+ };
+
+ chord.sortChords = function(x) {
+ if (!arguments.length) return sortChords;
+ sortChords = x;
+ if (chords) resort();
+ return chord;
+ };
+
+ chord.chords = function() {
+ if (!chords) relayout();
+ return chords;
+ };
+
+ chord.groups = function() {
+ if (!groups) relayout();
+ return groups;
+ };
+
+ return chord;
+};
+// A rudimentary force layout using Gauss-Seidel.
+d3.layout.force = function() {
+ var force = {},
+ event = d3.dispatch("start", "tick", "end"),
+ size = [1, 1],
+ drag,
+ alpha,
+ friction = .9,
+ linkDistance = d3_layout_forceLinkDistance,
+ linkStrength = d3_layout_forceLinkStrength,
+ charge = -30,
+ gravity = .1,
+ theta = .8,
+ interval,
+ nodes = [],
+ links = [],
+ distances,
+ strengths,
+ charges;
+
+ function repulse(node) {
+ return function(quad, x1, y1, x2, y2) {
+ if (quad.point !== node) {
+ var dx = quad.cx - node.x,
+ dy = quad.cy - node.y,
+ dn = 1 / Math.sqrt(dx * dx + dy * dy);
+
+ /* Barnes-Hut criterion. */
+ if ((x2 - x1) * dn < theta) {
+ var k = quad.charge * dn * dn;
+ node.px -= dx * k;
+ node.py -= dy * k;
+ return true;
+ }
+
+ if (quad.point && isFinite(dn)) {
+ var k = quad.pointCharge * dn * dn;
+ node.px -= dx * k;
+ node.py -= dy * k;
+ }
+ }
+ return !quad.charge;
+ };
+ }
+
+ force.tick = function() {
+ // simulated annealing, basically
+ if ((alpha *= .99) < .005) {
+ event.end({type: "end", alpha: alpha = 0});
+ return true;
+ }
+
+ var n = nodes.length,
+ m = links.length,
+ q,
+ i, // current index
+ o, // current object
+ s, // current source
+ t, // current target
+ l, // current distance
+ k, // current force
+ x, // x-distance
+ y; // y-distance
+
+ // gauss-seidel relaxation for links
+ for (i = 0; i < m; ++i) {
+ o = links[i];
+ s = o.source;
+ t = o.target;
+ x = t.x - s.x;
+ y = t.y - s.y;
+ if (l = (x * x + y * y)) {
+ l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
+ x *= l;
+ y *= l;
+ t.x -= x * (k = s.weight / (t.weight + s.weight));
+ t.y -= y * k;
+ s.x += x * (k = 1 - k);
+ s.y += y * k;
+ }
+ }
+
+ // apply gravity forces
+ if (k = alpha * gravity) {
+ x = size[0] / 2;
+ y = size[1] / 2;
+ i = -1; if (k) while (++i < n) {
+ o = nodes[i];
+ o.x += (x - o.x) * k;
+ o.y += (y - o.y) * k;
+ }
+ }
+
+ // compute quadtree center of mass and apply charge forces
+ if (charge) {
+ d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
+ i = -1; while (++i < n) {
+ if (!(o = nodes[i]).fixed) {
+ q.visit(repulse(o));
+ }
+ }
+ }
+
+ // position verlet integration
+ i = -1; while (++i < n) {
+ o = nodes[i];
+ if (o.fixed) {
+ o.x = o.px;
+ o.y = o.py;
+ } else {
+ o.x -= (o.px - (o.px = o.x)) * friction;
+ o.y -= (o.py - (o.py = o.y)) * friction;
+ }
+ }
+
+ event.tick({type: "tick", alpha: alpha});
+ };
+
+ force.nodes = function(x) {
+ if (!arguments.length) return nodes;
+ nodes = x;
+ return force;
+ };
+
+ force.links = function(x) {
+ if (!arguments.length) return links;
+ links = x;
+ return force;
+ };
+
+ force.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return force;
+ };
+
+ force.linkDistance = function(x) {
+ if (!arguments.length) return linkDistance;
+ linkDistance = d3.functor(x);
+ return force;
+ };
+
+ // For backwards-compatibility.
+ force.distance = force.linkDistance;
+
+ force.linkStrength = function(x) {
+ if (!arguments.length) return linkStrength;
+ linkStrength = d3.functor(x);
+ return force;
+ };
+
+ force.friction = function(x) {
+ if (!arguments.length) return friction;
+ friction = x;
+ return force;
+ };
+
+ force.charge = function(x) {
+ if (!arguments.length) return charge;
+ charge = typeof x === "function" ? x : +x;
+ return force;
+ };
+
+ force.gravity = function(x) {
+ if (!arguments.length) return gravity;
+ gravity = x;
+ return force;
+ };
+
+ force.theta = function(x) {
+ if (!arguments.length) return theta;
+ theta = x;
+ return force;
+ };
+
+ force.alpha = function(x) {
+ if (!arguments.length) return alpha;
+
+ if (alpha) { // if we're already running
+ if (x > 0) alpha = x; // we might keep it hot
+ else alpha = 0; // or, next tick will dispatch "end"
+ } else if (x > 0) { // otherwise, fire it up!
+ event.start({type: "start", alpha: alpha = x});
+ d3.timer(force.tick);
+ }
+
+ return force;
+ };
+
+ force.start = function() {
+ var i,
+ j,
+ n = nodes.length,
+ m = links.length,
+ w = size[0],
+ h = size[1],
+ neighbors,
+ o;
+
+ for (i = 0; i < n; ++i) {
+ (o = nodes[i]).index = i;
+ o.weight = 0;
+ }
+
+ distances = [];
+ strengths = [];
+ for (i = 0; i < m; ++i) {
+ o = links[i];
+ if (typeof o.source == "number") o.source = nodes[o.source];
+ if (typeof o.target == "number") o.target = nodes[o.target];
+ distances[i] = linkDistance.call(this, o, i);
+ strengths[i] = linkStrength.call(this, o, i);
+ ++o.source.weight;
+ ++o.target.weight;
+ }
+
+ for (i = 0; i < n; ++i) {
+ o = nodes[i];
+ if (isNaN(o.x)) o.x = position("x", w);
+ if (isNaN(o.y)) o.y = position("y", h);
+ if (isNaN(o.px)) o.px = o.x;
+ if (isNaN(o.py)) o.py = o.y;
+ }
+
+ charges = [];
+ if (typeof charge === "function") {
+ for (i = 0; i < n; ++i) {
+ charges[i] = +charge.call(this, nodes[i], i);
+ }
+ } else {
+ for (i = 0; i < n; ++i) {
+ charges[i] = charge;
+ }
+ }
+
+ // initialize node position based on first neighbor
+ function position(dimension, size) {
+ var neighbors = neighbor(i),
+ j = -1,
+ m = neighbors.length,
+ x;
+ while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
+ return Math.random() * size;
+ }
+
+ // initialize neighbors lazily
+ function neighbor() {
+ if (!neighbors) {
+ neighbors = [];
+ for (j = 0; j < n; ++j) {
+ neighbors[j] = [];
+ }
+ for (j = 0; j < m; ++j) {
+ var o = links[j];
+ neighbors[o.source.index].push(o.target);
+ neighbors[o.target.index].push(o.source);
+ }
+ }
+ return neighbors[i];
+ }
+
+ return force.resume();
+ };
+
+ force.resume = function() {
+ return force.alpha(.1);
+ };
+
+ force.stop = function() {
+ return force.alpha(0);
+ };
+
+ // use `node.call(force.drag)` to make nodes draggable
+ force.drag = function() {
+ if (!drag) drag = d3.behavior.drag()
+ .origin(Object)
+ .on("dragstart", dragstart)
+ .on("drag", d3_layout_forceDrag)
+ .on("dragend", d3_layout_forceDragEnd);
+
+ this.on("mouseover.force", d3_layout_forceDragOver)
+ .on("mouseout.force", d3_layout_forceDragOut)
+ .call(drag);
+ };
+
+ function dragstart(d) {
+ d3_layout_forceDragOver(d3_layout_forceDragNode = d);
+ d3_layout_forceDragForce = force;
+ }
+
+ return d3.rebind(force, event, "on");
+};
+
+var d3_layout_forceDragForce,
+ d3_layout_forceDragNode;
+
+function d3_layout_forceDragOver(d) {
+ d.fixed |= 2;
+}
+
+function d3_layout_forceDragOut(d) {
+ if (d !== d3_layout_forceDragNode) d.fixed &= 1;
+}
+
+function d3_layout_forceDragEnd() {
+ d3_layout_forceDragNode.fixed &= 1;
+ d3_layout_forceDragForce = d3_layout_forceDragNode = null;
+}
+
+function d3_layout_forceDrag() {
+ d3_layout_forceDragNode.px = d3.event.x;
+ d3_layout_forceDragNode.py = d3.event.y;
+ d3_layout_forceDragForce.resume(); // restart annealing
+}
+
+function d3_layout_forceAccumulate(quad, alpha, charges) {
+ var cx = 0,
+ cy = 0;
+ quad.charge = 0;
+ if (!quad.leaf) {
+ var nodes = quad.nodes,
+ n = nodes.length,
+ i = -1,
+ c;
+ while (++i < n) {
+ c = nodes[i];
+ if (c == null) continue;
+ d3_layout_forceAccumulate(c, alpha, charges);
+ quad.charge += c.charge;
+ cx += c.charge * c.cx;
+ cy += c.charge * c.cy;
+ }
+ }
+ if (quad.point) {
+ // jitter internal nodes that are coincident
+ if (!quad.leaf) {
+ quad.point.x += Math.random() - .5;
+ quad.point.y += Math.random() - .5;
+ }
+ var k = alpha * charges[quad.point.index];
+ quad.charge += quad.pointCharge = k;
+ cx += k * quad.point.x;
+ cy += k * quad.point.y;
+ }
+ quad.cx = cx / quad.charge;
+ quad.cy = cy / quad.charge;
+}
+
+function d3_layout_forceLinkDistance(link) {
+ return 20;
+}
+
+function d3_layout_forceLinkStrength(link) {
+ return 1;
+}
+d3.layout.partition = function() {
+ var hierarchy = d3.layout.hierarchy(),
+ size = [1, 1]; // width, height
+
+ function position(node, x, dx, dy) {
+ var children = node.children;
+ node.x = x;
+ node.y = node.depth * dy;
+ node.dx = dx;
+ node.dy = dy;
+ if (children && (n = children.length)) {
+ var i = -1,
+ n,
+ c,
+ d;
+ dx = node.value ? dx / node.value : 0;
+ while (++i < n) {
+ position(c = children[i], x, d = c.value * dx, dy);
+ x += d;
+ }
+ }
+ }
+
+ function depth(node) {
+ var children = node.children,
+ d = 0;
+ if (children && (n = children.length)) {
+ var i = -1,
+ n;
+ while (++i < n) d = Math.max(d, depth(children[i]));
+ }
+ return 1 + d;
+ }
+
+ function partition(d, i) {
+ var nodes = hierarchy.call(this, d, i);
+ position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
+ return nodes;
+ }
+
+ partition.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return partition;
+ };
+
+ return d3_layout_hierarchyRebind(partition, hierarchy);
+};
+d3.layout.pie = function() {
+ var value = Number,
+ sort = d3_layout_pieSortByValue,
+ startAngle = 0,
+ endAngle = 2 * Math.PI;
+
+ function pie(data, i) {
+
+ // Compute the numeric values for each data element.
+ var values = data.map(function(d, i) { return +value.call(pie, d, i); });
+
+ // Compute the start angle.
+ var a = +(typeof startAngle === "function"
+ ? startAngle.apply(this, arguments)
+ : startAngle);
+
+ // Compute the angular scale factor: from value to radians.
+ var k = ((typeof endAngle === "function"
+ ? endAngle.apply(this, arguments)
+ : endAngle) - startAngle)
+ / d3.sum(values);
+
+ // Optionally sort the data.
+ var index = d3.range(data.length);
+ if (sort != null) index.sort(sort === d3_layout_pieSortByValue
+ ? function(i, j) { return values[j] - values[i]; }
+ : function(i, j) { return sort(data[i], data[j]); });
+
+ // Compute the arcs!
+ // They are stored in the original data's order.
+ var arcs = [];
+ index.forEach(function(i) {
+ arcs[i] = {
+ data: data[i],
+ value: d = values[i],
+ startAngle: a,
+ endAngle: a += d * k
+ };
+ });
+ return arcs;
+ }
+
+ /**
+ * Specifies the value function *x*, which returns a nonnegative numeric value
+ * for each datum. The default value function is `Number`. The value function
+ * is passed two arguments: the current datum and the current index.
+ */
+ pie.value = function(x) {
+ if (!arguments.length) return value;
+ value = x;
+ return pie;
+ };
+
+ /**
+ * Specifies a sort comparison operator *x*. The comparator is passed two data
+ * elements from the data array, a and b; it returns a negative value if a is
+ * less than b, a positive value if a is greater than b, and zero if a equals
+ * b.
+ */
+ pie.sort = function(x) {
+ if (!arguments.length) return sort;
+ sort = x;
+ return pie;
+ };
+
+ /**
+ * Specifies the overall start angle of the pie chart. Defaults to 0. The
+ * start angle can be specified either as a constant or as a function; in the
+ * case of a function, it is evaluated once per array (as opposed to per
+ * element).
+ */
+ pie.startAngle = function(x) {
+ if (!arguments.length) return startAngle;
+ startAngle = x;
+ return pie;
+ };
+
+ /**
+ * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
+ * end angle can be specified either as a constant or as a function; in the
+ * case of a function, it is evaluated once per array (as opposed to per
+ * element).
+ */
+ pie.endAngle = function(x) {
+ if (!arguments.length) return endAngle;
+ endAngle = x;
+ return pie;
+ };
+
+ return pie;
+};
+
+var d3_layout_pieSortByValue = {};
+// data is two-dimensional array of x,y; we populate y0
+d3.layout.stack = function() {
+ var values = Object,
+ order = d3_layout_stackOrderDefault,
+ offset = d3_layout_stackOffsetZero,
+ out = d3_layout_stackOut,
+ x = d3_layout_stackX,
+ y = d3_layout_stackY;
+
+ function stack(data, index) {
+
+ // Convert series to canonical two-dimensional representation.
+ var series = data.map(function(d, i) {
+ return values.call(stack, d, i);
+ });
+
+ // Convert each series to canonical [[x,y]] representation.
+ var points = series.map(function(d, i) {
+ return d.map(function(v, i) {
+ return [x.call(stack, v, i), y.call(stack, v, i)];
+ });
+ });
+
+ // Compute the order of series, and permute them.
+ var orders = order.call(stack, points, index);
+ series = d3.permute(series, orders);
+ points = d3.permute(points, orders);
+
+ // Compute the baseline…
+ var offsets = offset.call(stack, points, index);
+
+ // And propagate it to other series.
+ var n = series.length,
+ m = series[0].length,
+ i,
+ j,
+ o;
+ for (j = 0; j < m; ++j) {
+ out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
+ for (i = 1; i < n; ++i) {
+ out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
+ }
+ }
+
+ return data;
+ }
+
+ stack.values = function(x) {
+ if (!arguments.length) return values;
+ values = x;
+ return stack;
+ };
+
+ stack.order = function(x) {
+ if (!arguments.length) return order;
+ order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
+ return stack;
+ };
+
+ stack.offset = function(x) {
+ if (!arguments.length) return offset;
+ offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
+ return stack;
+ };
+
+ stack.x = function(z) {
+ if (!arguments.length) return x;
+ x = z;
+ return stack;
+ };
+
+ stack.y = function(z) {
+ if (!arguments.length) return y;
+ y = z;
+ return stack;
+ };
+
+ stack.out = function(z) {
+ if (!arguments.length) return out;
+ out = z;
+ return stack;
+ };
+
+ return stack;
+}
+
+function d3_layout_stackX(d) {
+ return d.x;
+}
+
+function d3_layout_stackY(d) {
+ return d.y;
+}
+
+function d3_layout_stackOut(d, y0, y) {
+ d.y0 = y0;
+ d.y = y;
+}
+
+var d3_layout_stackOrders = d3.map({
+
+ "inside-out": function(data) {
+ var n = data.length,
+ i,
+ j,
+ max = data.map(d3_layout_stackMaxIndex),
+ sums = data.map(d3_layout_stackReduceSum),
+ index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
+ top = 0,
+ bottom = 0,
+ tops = [],
+ bottoms = [];
+ for (i = 0; i < n; ++i) {
+ j = index[i];
+ if (top < bottom) {
+ top += sums[j];
+ tops.push(j);
+ } else {
+ bottom += sums[j];
+ bottoms.push(j);
+ }
+ }
+ return bottoms.reverse().concat(tops);
+ },
+
+ "reverse": function(data) {
+ return d3.range(data.length).reverse();
+ },
+
+ "default": d3_layout_stackOrderDefault
+
+});
+
+var d3_layout_stackOffsets = d3.map({
+
+ "silhouette": function(data) {
+ var n = data.length,
+ m = data[0].length,
+ sums = [],
+ max = 0,
+ i,
+ j,
+ o,
+ y0 = [];
+ for (j = 0; j < m; ++j) {
+ for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+ if (o > max) max = o;
+ sums.push(o);
+ }
+ for (j = 0; j < m; ++j) {
+ y0[j] = (max - sums[j]) / 2;
+ }
+ return y0;
+ },
+
+ "wiggle": function(data) {
+ var n = data.length,
+ x = data[0],
+ m = x.length,
+ max = 0,
+ i,
+ j,
+ k,
+ s1,
+ s2,
+ s3,
+ dx,
+ o,
+ o0,
+ y0 = [];
+ y0[0] = o = o0 = 0;
+ for (j = 1; j < m; ++j) {
+ for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
+ for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
+ for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
+ s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
+ }
+ s2 += s3 * data[i][j][1];
+ }
+ y0[j] = o -= s1 ? s2 / s1 * dx : 0;
+ if (o < o0) o0 = o;
+ }
+ for (j = 0; j < m; ++j) y0[j] -= o0;
+ return y0;
+ },
+
+ "expand": function(data) {
+ var n = data.length,
+ m = data[0].length,
+ k = 1 / n,
+ i,
+ j,
+ o,
+ y0 = [];
+ for (j = 0; j < m; ++j) {
+ for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+ if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
+ else for (i = 0; i < n; i++) data[i][j][1] = k;
+ }
+ for (j = 0; j < m; ++j) y0[j] = 0;
+ return y0;
+ },
+
+ "zero": d3_layout_stackOffsetZero
+
+});
+
+function d3_layout_stackOrderDefault(data) {
+ return d3.range(data.length);
+}
+
+function d3_layout_stackOffsetZero(data) {
+ var j = -1,
+ m = data[0].length,
+ y0 = [];
+ while (++j < m) y0[j] = 0;
+ return y0;
+}
+
+function d3_layout_stackMaxIndex(array) {
+ var i = 1,
+ j = 0,
+ v = array[0][1],
+ k,
+ n = array.length;
+ for (; i < n; ++i) {
+ if ((k = array[i][1]) > v) {
+ j = i;
+ v = k;
+ }
+ }
+ return j;
+}
+
+function d3_layout_stackReduceSum(d) {
+ return d.reduce(d3_layout_stackSum, 0);
+}
+
+function d3_layout_stackSum(p, d) {
+ return p + d[1];
+}
+d3.layout.histogram = function() {
+ var frequency = true,
+ valuer = Number,
+ ranger = d3_layout_histogramRange,
+ binner = d3_layout_histogramBinSturges;
+
+ function histogram(data, i) {
+ var bins = [],
+ values = data.map(valuer, this),
+ range = ranger.call(this, values, i),
+ thresholds = binner.call(this, range, values, i),
+ bin,
+ i = -1,
+ n = values.length,
+ m = thresholds.length - 1,
+ k = frequency ? 1 : 1 / n,
+ x;
+
+ // Initialize the bins.
+ while (++i < m) {
+ bin = bins[i] = [];
+ bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
+ bin.y = 0;
+ }
+
+ // Fill the bins, ignoring values outside the range.
+ i = -1; while(++i < n) {
+ x = values[i];
+ if ((x >= range[0]) && (x <= range[1])) {
+ bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
+ bin.y += k;
+ bin.push(data[i]);
+ }
+ }
+
+ return bins;
+ }
+
+ // Specifies how to extract a value from the associated data. The default
+ // value function is `Number`, which is equivalent to the identity function.
+ histogram.value = function(x) {
+ if (!arguments.length) return valuer;
+ valuer = x;
+ return histogram;
+ };
+
+ // Specifies the range of the histogram. Values outside the specified range
+ // will be ignored. The argument `x` may be specified either as a two-element
+ // array representing the minimum and maximum value of the range, or as a
+ // function that returns the range given the array of values and the current
+ // index `i`. The default range is the extent (minimum and maximum) of the
+ // values.
+ histogram.range = function(x) {
+ if (!arguments.length) return ranger;
+ ranger = d3.functor(x);
+ return histogram;
+ };
+
+ // Specifies how to bin values in the histogram. The argument `x` may be
+ // specified as a number, in which case the range of values will be split
+ // uniformly into the given number of bins. Or, `x` may be an array of
+ // threshold values, defining the bins; the specified array must contain the
+ // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
+ // may be a function which is evaluated, being passed the range, the array of
+ // values, and the current index `i`, returning an array of thresholds. The
+ // default bin function will divide the values into uniform bins using
+ // Sturges' formula.
+ histogram.bins = function(x) {
+ if (!arguments.length) return binner;
+ binner = typeof x === "number"
+ ? function(range) { return d3_layout_histogramBinFixed(range, x); }
+ : d3.functor(x);
+ return histogram;
+ };
+
+ // Specifies whether the histogram's `y` value is a count (frequency) or a
+ // probability (density). The default value is true.
+ histogram.frequency = function(x) {
+ if (!arguments.length) return frequency;
+ frequency = !!x;
+ return histogram;
+ };
+
+ return histogram;
+};
+
+function d3_layout_histogramBinSturges(range, values) {
+ return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
+}
+
+function d3_layout_histogramBinFixed(range, n) {
+ var x = -1,
+ b = +range[0],
+ m = (range[1] - b) / n,
+ f = [];
+ while (++x <= n) f[x] = m * x + b;
+ return f;
+}
+
+function d3_layout_histogramRange(values) {
+ return [d3.min(values), d3.max(values)];
+}
+d3.layout.hierarchy = function() {
+ var sort = d3_layout_hierarchySort,
+ children = d3_layout_hierarchyChildren,
+ value = d3_layout_hierarchyValue;
+
+ // Recursively compute the node depth and value.
+ // Also converts the data representation into a standard hierarchy structure.
+ function recurse(data, depth, nodes) {
+ var childs = children.call(hierarchy, data, depth),
+ node = d3_layout_hierarchyInline ? data : {data: data};
+ node.depth = depth;
+ nodes.push(node);
+ if (childs && (n = childs.length)) {
+ var i = -1,
+ n,
+ c = node.children = [],
+ v = 0,
+ j = depth + 1;
+ while (++i < n) {
+ d = recurse(childs[i], j, nodes);
+ d.parent = node;
+ c.push(d);
+ v += d.value;
+ }
+ if (sort) c.sort(sort);
+ if (value) node.value = v;
+ } else if (value) {
+ node.value = +value.call(hierarchy, data, depth) || 0;
+ }
+ return node;
+ }
+
+ // Recursively re-evaluates the node value.
+ function revalue(node, depth) {
+ var children = node.children,
+ v = 0;
+ if (children && (n = children.length)) {
+ var i = -1,
+ n,
+ j = depth + 1;
+ while (++i < n) v += revalue(children[i], j);
+ } else if (value) {
+ v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
+ }
+ if (value) node.value = v;
+ return v;
+ }
+
+ function hierarchy(d) {
+ var nodes = [];
+ recurse(d, 0, nodes);
+ return nodes;
+ }
+
+ hierarchy.sort = function(x) {
+ if (!arguments.length) return sort;
+ sort = x;
+ return hierarchy;
+ };
+
+ hierarchy.children = function(x) {
+ if (!arguments.length) return children;
+ children = x;
+ return hierarchy;
+ };
+
+ hierarchy.value = function(x) {
+ if (!arguments.length) return value;
+ value = x;
+ return hierarchy;
+ };
+
+ // Re-evaluates the `value` property for the specified hierarchy.
+ hierarchy.revalue = function(root) {
+ revalue(root, 0);
+ return root;
+ };
+
+ return hierarchy;
+};
+
+// A method assignment helper for hierarchy subclasses.
+function d3_layout_hierarchyRebind(object, hierarchy) {
+ d3.rebind(object, hierarchy, "sort", "children", "value");
+
+ // Add an alias for links, for convenience.
+ object.links = d3_layout_hierarchyLinks;
+
+ // If the new API is used, enabling inlining.
+ object.nodes = function(d) {
+ d3_layout_hierarchyInline = true;
+ return (object.nodes = object)(d);
+ };
+
+ return object;
+}
+
+function d3_layout_hierarchyChildren(d) {
+ return d.children;
+}
+
+function d3_layout_hierarchyValue(d) {
+ return d.value;
+}
+
+function d3_layout_hierarchySort(a, b) {
+ return b.value - a.value;
+}
+
+// Returns an array source+target objects for the specified nodes.
+function d3_layout_hierarchyLinks(nodes) {
+ return d3.merge(nodes.map(function(parent) {
+ return (parent.children || []).map(function(child) {
+ return {source: parent, target: child};
+ });
+ }));
+}
+
+// For backwards-compatibility, don't enable inlining by default.
+var d3_layout_hierarchyInline = false;
+d3.layout.pack = function() {
+ var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
+ size = [1, 1];
+
+ function pack(d, i) {
+ var nodes = hierarchy.call(this, d, i),
+ root = nodes[0];
+
+ // Recursively compute the layout.
+ root.x = 0;
+ root.y = 0;
+ d3_layout_packTree(root);
+
+ // Scale the layout to fit the requested size.
+ var w = size[0],
+ h = size[1],
+ k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
+ d3_layout_packTransform(root, w / 2, h / 2, k);
+
+ return nodes;
+ }
+
+ pack.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return pack;
+ };
+
+ return d3_layout_hierarchyRebind(pack, hierarchy);
+};
+
+function d3_layout_packSort(a, b) {
+ return a.value - b.value;
+}
+
+function d3_layout_packInsert(a, b) {
+ var c = a._pack_next;
+ a._pack_next = b;
+ b._pack_prev = a;
+ b._pack_next = c;
+ c._pack_prev = b;
+}
+
+function d3_layout_packSplice(a, b) {
+ a._pack_next = b;
+ b._pack_prev = a;
+}
+
+function d3_layout_packIntersects(a, b) {
+ var dx = b.x - a.x,
+ dy = b.y - a.y,
+ dr = a.r + b.r;
+ return dr * dr - dx * dx - dy * dy > .001; // within epsilon
+}
+
+function d3_layout_packCircle(nodes) {
+ var xMin = Infinity,
+ xMax = -Infinity,
+ yMin = Infinity,
+ yMax = -Infinity,
+ n = nodes.length,
+ a, b, c, j, k;
+
+ function bound(node) {
+ xMin = Math.min(node.x - node.r, xMin);
+ xMax = Math.max(node.x + node.r, xMax);
+ yMin = Math.min(node.y - node.r, yMin);
+ yMax = Math.max(node.y + node.r, yMax);
+ }
+
+ // Create node links.
+ nodes.forEach(d3_layout_packLink);
+
+ // Create first node.
+ a = nodes[0];
+ a.x = -a.r;
+ a.y = 0;
+ bound(a);
+
+ // Create second node.
+ if (n > 1) {
+ b = nodes[1];
+ b.x = b.r;
+ b.y = 0;
+ bound(b);
+
+ // Create third node and build chain.
+ if (n > 2) {
+ c = nodes[2];
+ d3_layout_packPlace(a, b, c);
+ bound(c);
+ d3_layout_packInsert(a, c);
+ a._pack_prev = c;
+ d3_layout_packInsert(c, b);
+ b = a._pack_next;
+
+ // Now iterate through the rest.
+ for (var i = 3; i < n; i++) {
+ d3_layout_packPlace(a, b, c = nodes[i]);
+
+ // Search for the closest intersection.
+ var isect = 0, s1 = 1, s2 = 1;
+ for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
+ if (d3_layout_packIntersects(j, c)) {
+ isect = 1;
+ break;
+ }
+ }
+ if (isect == 1) {
+ for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
+ if (d3_layout_packIntersects(k, c)) {
+ break;
+ }
+ }
+ }
+
+ // Update node chain.
+ if (isect) {
+ if (s1 < s2 || (s1 == s2 && b.r < a.r)) d3_layout_packSplice(a, b = j);
+ else d3_layout_packSplice(a = k, b);
+ i--;
+ } else {
+ d3_layout_packInsert(a, c);
+ b = c;
+ bound(c);
+ }
+ }
+ }
+ }
+
+ // Re-center the circles and return the encompassing radius.
+ var cx = (xMin + xMax) / 2,
+ cy = (yMin + yMax) / 2,
+ cr = 0;
+ for (var i = 0; i < n; i++) {
+ var node = nodes[i];
+ node.x -= cx;
+ node.y -= cy;
+ cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
+ }
+
+ // Remove node links.
+ nodes.forEach(d3_layout_packUnlink);
+
+ return cr;
+}
+
+function d3_layout_packLink(node) {
+ node._pack_next = node._pack_prev = node;
+}
+
+function d3_layout_packUnlink(node) {
+ delete node._pack_next;
+ delete node._pack_prev;
+}
+
+function d3_layout_packTree(node) {
+ var children = node.children;
+ if (children && children.length) {
+ children.forEach(d3_layout_packTree);
+ node.r = d3_layout_packCircle(children);
+ } else {
+ node.r = Math.sqrt(node.value);
+ }
+}
+
+function d3_layout_packTransform(node, x, y, k) {
+ var children = node.children;
+ node.x = (x += k * node.x);
+ node.y = (y += k * node.y);
+ node.r *= k;
+ if (children) {
+ var i = -1, n = children.length;
+ while (++i < n) d3_layout_packTransform(children[i], x, y, k);
+ }
+}
+
+function d3_layout_packPlace(a, b, c) {
+ var db = a.r + c.r,
+ dx = b.x - a.x,
+ dy = b.y - a.y;
+ if (db && (dx || dy)) {
+ var da = b.r + c.r,
+ dc = Math.sqrt(dx * dx + dy * dy),
+ cos = Math.max(-1, Math.min(1, (db * db + dc * dc - da * da) / (2 * db * dc))),
+ theta = Math.acos(cos),
+ x = cos * (db /= dc),
+ y = Math.sin(theta) * db;
+ c.x = a.x + x * dx + y * dy;
+ c.y = a.y + x * dy - y * dx;
+ } else {
+ c.x = a.x + db;
+ c.y = a.y;
+ }
+}
+// Implements a hierarchical layout using the cluster (or dendrogram)
+// algorithm.
+d3.layout.cluster = function() {
+ var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+ separation = d3_layout_treeSeparation,
+ size = [1, 1]; // width, height
+
+ function cluster(d, i) {
+ var nodes = hierarchy.call(this, d, i),
+ root = nodes[0],
+ previousNode,
+ x = 0,
+ kx,
+ ky;
+
+ // First walk, computing the initial x & y values.
+ d3_layout_treeVisitAfter(root, function(node) {
+ var children = node.children;
+ if (children && children.length) {
+ node.x = d3_layout_clusterX(children);
+ node.y = d3_layout_clusterY(children);
+ } else {
+ node.x = previousNode ? x += separation(node, previousNode) : 0;
+ node.y = 0;
+ previousNode = node;
+ }
+ });
+
+ // Compute the left-most, right-most, and depth-most nodes for extents.
+ var left = d3_layout_clusterLeft(root),
+ right = d3_layout_clusterRight(root),
+ x0 = left.x - separation(left, right) / 2,
+ x1 = right.x + separation(right, left) / 2;
+
+ // Second walk, normalizing x & y to the desired size.
+ d3_layout_treeVisitAfter(root, function(node) {
+ node.x = (node.x - x0) / (x1 - x0) * size[0];
+ node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
+ });
+
+ return nodes;
+ }
+
+ cluster.separation = function(x) {
+ if (!arguments.length) return separation;
+ separation = x;
+ return cluster;
+ };
+
+ cluster.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return cluster;
+ };
+
+ return d3_layout_hierarchyRebind(cluster, hierarchy);
+};
+
+function d3_layout_clusterY(children) {
+ return 1 + d3.max(children, function(child) {
+ return child.y;
+ });
+}
+
+function d3_layout_clusterX(children) {
+ return children.reduce(function(x, child) {
+ return x + child.x;
+ }, 0) / children.length;
+}
+
+function d3_layout_clusterLeft(node) {
+ var children = node.children;
+ return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
+}
+
+function d3_layout_clusterRight(node) {
+ var children = node.children, n;
+ return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
+}
+// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+d3.layout.tree = function() {
+ var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+ separation = d3_layout_treeSeparation,
+ size = [1, 1]; // width, height
+
+ function tree(d, i) {
+ var nodes = hierarchy.call(this, d, i),
+ root = nodes[0];
+
+ function firstWalk(node, previousSibling) {
+ var children = node.children,
+ layout = node._tree;
+ if (children && (n = children.length)) {
+ var n,
+ firstChild = children[0],
+ previousChild,
+ ancestor = firstChild,
+ child,
+ i = -1;
+ while (++i < n) {
+ child = children[i];
+ firstWalk(child, previousChild);
+ ancestor = apportion(child, previousChild, ancestor);
+ previousChild = child;
+ }
+ d3_layout_treeShift(node);
+ var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
+ if (previousSibling) {
+ layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+ layout.mod = layout.prelim - midpoint;
+ } else {
+ layout.prelim = midpoint;
+ }
+ } else {
+ if (previousSibling) {
+ layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+ }
+ }
+ }
+
+ function secondWalk(node, x) {
+ node.x = node._tree.prelim + x;
+ var children = node.children;
+ if (children && (n = children.length)) {
+ var i = -1,
+ n;
+ x += node._tree.mod;
+ while (++i < n) {
+ secondWalk(children[i], x);
+ }
+ }
+ }
+
+ function apportion(node, previousSibling, ancestor) {
+ if (previousSibling) {
+ var vip = node,
+ vop = node,
+ vim = previousSibling,
+ vom = node.parent.children[0],
+ sip = vip._tree.mod,
+ sop = vop._tree.mod,
+ sim = vim._tree.mod,
+ som = vom._tree.mod,
+ shift;
+ while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
+ vom = d3_layout_treeLeft(vom);
+ vop = d3_layout_treeRight(vop);
+ vop._tree.ancestor = node;
+ shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
+ if (shift > 0) {
+ d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
+ sip += shift;
+ sop += shift;
+ }
+ sim += vim._tree.mod;
+ sip += vip._tree.mod;
+ som += vom._tree.mod;
+ sop += vop._tree.mod;
+ }
+ if (vim && !d3_layout_treeRight(vop)) {
+ vop._tree.thread = vim;
+ vop._tree.mod += sim - sop;
+ }
+ if (vip && !d3_layout_treeLeft(vom)) {
+ vom._tree.thread = vip;
+ vom._tree.mod += sip - som;
+ ancestor = node;
+ }
+ }
+ return ancestor;
+ }
+
+ // Initialize temporary layout variables.
+ d3_layout_treeVisitAfter(root, function(node, previousSibling) {
+ node._tree = {
+ ancestor: node,
+ prelim: 0,
+ mod: 0,
+ change: 0,
+ shift: 0,
+ number: previousSibling ? previousSibling._tree.number + 1 : 0
+ };
+ });
+
+ // Compute the layout using Buchheim et al.'s algorithm.
+ firstWalk(root);
+ secondWalk(root, -root._tree.prelim);
+
+ // Compute the left-most, right-most, and depth-most nodes for extents.
+ var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
+ right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
+ deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
+ x0 = left.x - separation(left, right) / 2,
+ x1 = right.x + separation(right, left) / 2,
+ y1 = deep.depth || 1;
+
+ // Clear temporary layout variables; transform x and y.
+ d3_layout_treeVisitAfter(root, function(node) {
+ node.x = (node.x - x0) / (x1 - x0) * size[0];
+ node.y = node.depth / y1 * size[1];
+ delete node._tree;
+ });
+
+ return nodes;
+ }
+
+ tree.separation = function(x) {
+ if (!arguments.length) return separation;
+ separation = x;
+ return tree;
+ };
+
+ tree.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return tree;
+ };
+
+ return d3_layout_hierarchyRebind(tree, hierarchy);
+};
+
+function d3_layout_treeSeparation(a, b) {
+ return a.parent == b.parent ? 1 : 2;
+}
+
+// function d3_layout_treeSeparationRadial(a, b) {
+// return (a.parent == b.parent ? 1 : 2) / a.depth;
+// }
+
+function d3_layout_treeLeft(node) {
+ var children = node.children;
+ return children && children.length ? children[0] : node._tree.thread;
+}
+
+function d3_layout_treeRight(node) {
+ var children = node.children,
+ n;
+ return children && (n = children.length) ? children[n - 1] : node._tree.thread;
+}
+
+function d3_layout_treeSearch(node, compare) {
+ var children = node.children;
+ if (children && (n = children.length)) {
+ var child,
+ n,
+ i = -1;
+ while (++i < n) {
+ if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
+ node = child;
+ }
+ }
+ }
+ return node;
+}
+
+function d3_layout_treeRightmost(a, b) {
+ return a.x - b.x;
+}
+
+function d3_layout_treeLeftmost(a, b) {
+ return b.x - a.x;
+}
+
+function d3_layout_treeDeepest(a, b) {
+ return a.depth - b.depth;
+}
+
+function d3_layout_treeVisitAfter(node, callback) {
+ function visit(node, previousSibling) {
+ var children = node.children;
+ if (children && (n = children.length)) {
+ var child,
+ previousChild = null,
+ i = -1,
+ n;
+ while (++i < n) {
+ child = children[i];
+ visit(child, previousChild);
+ previousChild = child;
+ }
+ }
+ callback(node, previousSibling);
+ }
+ visit(node, null);
+}
+
+function d3_layout_treeShift(node) {
+ var shift = 0,
+ change = 0,
+ children = node.children,
+ i = children.length,
+ child;
+ while (--i >= 0) {
+ child = children[i]._tree;
+ child.prelim += shift;
+ child.mod += shift;
+ shift += child.shift + (change += child.change);
+ }
+}
+
+function d3_layout_treeMove(ancestor, node, shift) {
+ ancestor = ancestor._tree;
+ node = node._tree;
+ var change = shift / (node.number - ancestor.number);
+ ancestor.change += change;
+ node.change -= change;
+ node.shift += shift;
+ node.prelim += shift;
+ node.mod += shift;
+}
+
+function d3_layout_treeAncestor(vim, node, ancestor) {
+ return vim._tree.ancestor.parent == node.parent
+ ? vim._tree.ancestor
+ : ancestor;
+}
+// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
+// Modified to support a target aspect ratio by Jeff Heer
+d3.layout.treemap = function() {
+ var hierarchy = d3.layout.hierarchy(),
+ round = Math.round,
+ size = [1, 1], // width, height
+ padding = null,
+ pad = d3_layout_treemapPadNull,
+ sticky = false,
+ stickies,
+ ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
+
+ // Compute the area for each child based on value & scale.
+ function scale(children, k) {
+ var i = -1,
+ n = children.length,
+ child,
+ area;
+ while (++i < n) {
+ area = (child = children[i]).value * (k < 0 ? 0 : k);
+ child.area = isNaN(area) || area <= 0 ? 0 : area;
+ }
+ }
+
+ // Recursively arranges the specified node's children into squarified rows.
+ function squarify(node) {
+ var children = node.children;
+ if (children && children.length) {
+ var rect = pad(node),
+ row = [],
+ remaining = children.slice(), // copy-on-write
+ child,
+ best = Infinity, // the best row score so far
+ score, // the current row score
+ u = Math.min(rect.dx, rect.dy), // initial orientation
+ n;
+ scale(remaining, rect.dx * rect.dy / node.value);
+ row.area = 0;
+ while ((n = remaining.length) > 0) {
+ row.push(child = remaining[n - 1]);
+ row.area += child.area;
+ if ((score = worst(row, u)) <= best) { // continue with this orientation
+ remaining.pop();
+ best = score;
+ } else { // abort, and try a different orientation
+ row.area -= row.pop().area;
+ position(row, u, rect, false);
+ u = Math.min(rect.dx, rect.dy);
+ row.length = row.area = 0;
+ best = Infinity;
+ }
+ }
+ if (row.length) {
+ position(row, u, rect, true);
+ row.length = row.area = 0;
+ }
+ children.forEach(squarify);
+ }
+ }
+
+ // Recursively resizes the specified node's children into existing rows.
+ // Preserves the existing layout!
+ function stickify(node) {
+ var children = node.children;
+ if (children && children.length) {
+ var rect = pad(node),
+ remaining = children.slice(), // copy-on-write
+ child,
+ row = [];
+ scale(remaining, rect.dx * rect.dy / node.value);
+ row.area = 0;
+ while (child = remaining.pop()) {
+ row.push(child);
+ row.area += child.area;
+ if (child.z != null) {
+ position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
+ row.length = row.area = 0;
+ }
+ }
+ children.forEach(stickify);
+ }
+ }
+
+ // Computes the score for the specified row, as the worst aspect ratio.
+ function worst(row, u) {
+ var s = row.area,
+ r,
+ rmax = 0,
+ rmin = Infinity,
+ i = -1,
+ n = row.length;
+ while (++i < n) {
+ if (!(r = row[i].area)) continue;
+ if (r < rmin) rmin = r;
+ if (r > rmax) rmax = r;
+ }
+ s *= s;
+ u *= u;
+ return s
+ ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
+ : Infinity;
+ }
+
+ // Positions the specified row of nodes. Modifies `rect`.
+ function position(row, u, rect, flush) {
+ var i = -1,
+ n = row.length,
+ x = rect.x,
+ y = rect.y,
+ v = u ? round(row.area / u) : 0,
+ o;
+ if (u == rect.dx) { // horizontal subdivision
+ if (flush || v > rect.dy) v = rect.dy; // over+underflow
+ while (++i < n) {
+ o = row[i];
+ o.x = x;
+ o.y = y;
+ o.dy = v;
+ x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
+ }
+ o.z = true;
+ o.dx += rect.x + rect.dx - x; // rounding error
+ rect.y += v;
+ rect.dy -= v;
+ } else { // vertical subdivision
+ if (flush || v > rect.dx) v = rect.dx; // over+underflow
+ while (++i < n) {
+ o = row[i];
+ o.x = x;
+ o.y = y;
+ o.dx = v;
+ y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
+ }
+ o.z = false;
+ o.dy += rect.y + rect.dy - y; // rounding error
+ rect.x += v;
+ rect.dx -= v;
+ }
+ }
+
+ function treemap(d) {
+ var nodes = stickies || hierarchy(d),
+ root = nodes[0];
+ root.x = 0;
+ root.y = 0;
+ root.dx = size[0];
+ root.dy = size[1];
+ if (stickies) hierarchy.revalue(root);
+ scale([root], root.dx * root.dy / root.value);
+ (stickies ? stickify : squarify)(root);
+ if (sticky) stickies = nodes;
+ return nodes;
+ }
+
+ treemap.size = function(x) {
+ if (!arguments.length) return size;
+ size = x;
+ return treemap;
+ };
+
+ treemap.padding = function(x) {
+ if (!arguments.length) return padding;
+
+ function padFunction(node) {
+ var p = x.call(treemap, node, node.depth);
+ return p == null
+ ? d3_layout_treemapPadNull(node)
+ : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
+ }
+
+ function padConstant(node) {
+ return d3_layout_treemapPad(node, x);
+ }
+
+ var type;
+ pad = (padding = x) == null ? d3_layout_treemapPadNull
+ : (type = typeof x) === "function" ? padFunction
+ : type === "number" ? (x = [x, x, x, x], padConstant)
+ : padConstant;
+ return treemap;
+ };
+
+ treemap.round = function(x) {
+ if (!arguments.length) return round != Number;
+ round = x ? Math.round : Number;
+ return treemap;
+ };
+
+ treemap.sticky = function(x) {
+ if (!arguments.length) return sticky;
+ sticky = x;
+ stickies = null;
+ return treemap;
+ };
+
+ treemap.ratio = function(x) {
+ if (!arguments.length) return ratio;
+ ratio = x;
+ return treemap;
+ };
+
+ return d3_layout_hierarchyRebind(treemap, hierarchy);
+};
+
+function d3_layout_treemapPadNull(node) {
+ return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
+}
+
+function d3_layout_treemapPad(node, padding) {
+ var x = node.x + padding[3],
+ y = node.y + padding[0],
+ dx = node.dx - padding[1] - padding[3],
+ dy = node.dy - padding[0] - padding[2];
+ if (dx < 0) { x += dx / 2; dx = 0; }
+ if (dy < 0) { y += dy / 2; dy = 0; }
+ return {x: x, y: y, dx: dx, dy: dy};
+}
+d3.csv = function(url, callback) {
+ d3.text(url, "text/csv", function(text) {
+ callback(text && d3.csv.parse(text));
+ });
+};
+d3.csv.parse = function(text) {
+ var header;
+ return d3.csv.parseRows(text, function(row, i) {
+ if (i) {
+ var o = {}, j = -1, m = header.length;
+ while (++j < m) o[header[j]] = row[j];
+ return o;
+ } else {
+ header = row;
+ return null;
+ }
+ });
+};
+
+d3.csv.parseRows = function(text, f) {
+ var EOL = {}, // sentinel value for end-of-line
+ EOF = {}, // sentinel value for end-of-file
+ rows = [], // output rows
+ re = /\r\n|[,\r\n]/g, // field separator regex
+ n = 0, // the current line number
+ t, // the current token
+ eol; // is the current token followed by EOL?
+
+ re.lastIndex = 0; // work-around bug in FF 3.6
+
+ /** @private Returns the next token. */
+ function token() {
+ if (re.lastIndex >= text.length) return EOF; // special case: end of file
+ if (eol) { eol = false; return EOL; } // special case: end of line
+
+ // special case: quotes
+ var j = re.lastIndex;
+ if (text.charCodeAt(j) === 34) {
+ var i = j;
+ while (i++ < text.length) {
+ if (text.charCodeAt(i) === 34) {
+ if (text.charCodeAt(i + 1) !== 34) break;
+ i++;
+ }
+ }
+ re.lastIndex = i + 2;
+ var c = text.charCodeAt(i + 1);
+ if (c === 13) {
+ eol = true;
+ if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
+ } else if (c === 10) {
+ eol = true;
+ }
+ return text.substring(j + 1, i).replace(/""/g, "\"");
+ }
+
+ // common case
+ var m = re.exec(text);
+ if (m) {
+ eol = m[0].charCodeAt(0) !== 44;
+ return text.substring(j, m.index);
+ }
+ re.lastIndex = text.length;
+ return text.substring(j);
+ }
+
+ while ((t = token()) !== EOF) {
+ var a = [];
+ while ((t !== EOL) && (t !== EOF)) {
+ a.push(t);
+ t = token();
+ }
+ if (f && !(a = f(a, n++))) continue;
+ rows.push(a);
+ }
+
+ return rows;
+};
+d3.csv.format = function(rows) {
+ return rows.map(d3_csv_formatRow).join("\n");
+};
+
+function d3_csv_formatRow(row) {
+ return row.map(d3_csv_formatValue).join(",");
+}
+
+function d3_csv_formatValue(text) {
+ return /[",\n]/.test(text)
+ ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+ : text;
+}
+d3.geo = {};
+
+var d3_geo_radians = Math.PI / 180;
+// TODO clip input coordinates on opposite hemisphere
+d3.geo.azimuthal = function() {
+ var mode = "orthographic", // or stereographic, gnomonic, equidistant or equalarea
+ origin,
+ scale = 200,
+ translate = [480, 250],
+ x0,
+ y0,
+ cy0,
+ sy0;
+
+ function azimuthal(coordinates) {
+ var x1 = coordinates[0] * d3_geo_radians - x0,
+ y1 = coordinates[1] * d3_geo_radians,
+ cx1 = Math.cos(x1),
+ sx1 = Math.sin(x1),
+ cy1 = Math.cos(y1),
+ sy1 = Math.sin(y1),
+ cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null,
+ c,
+ k = mode === "stereographic" ? 1 / (1 + cc)
+ : mode === "gnomonic" ? 1 / cc
+ : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0)
+ : mode === "equalarea" ? Math.sqrt(2 / (1 + cc))
+ : 1,
+ x = k * cy1 * sx1,
+ y = k * (sy0 * cy1 * cx1 - cy0 * sy1);
+ return [
+ scale * x + translate[0],
+ scale * y + translate[1]
+ ];
+ }
+
+ azimuthal.invert = function(coordinates) {
+ var x = (coordinates[0] - translate[0]) / scale,
+ y = (coordinates[1] - translate[1]) / scale,
+ p = Math.sqrt(x * x + y * y),
+ c = mode === "stereographic" ? 2 * Math.atan(p)
+ : mode === "gnomonic" ? Math.atan(p)
+ : mode === "equidistant" ? p
+ : mode === "equalarea" ? 2 * Math.asin(.5 * p)
+ : Math.asin(p),
+ sc = Math.sin(c),
+ cc = Math.cos(c);
+ return [
+ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians,
+ Math.asin(cc * sy0 - (p ? (y * sc * cy0) / p : 0)) / d3_geo_radians
+ ];
+ };
+
+ azimuthal.mode = function(x) {
+ if (!arguments.length) return mode;
+ mode = x + "";
+ return azimuthal;
+ };
+
+ azimuthal.origin = function(x) {
+ if (!arguments.length) return origin;
+ origin = x;
+ x0 = origin[0] * d3_geo_radians;
+ y0 = origin[1] * d3_geo_radians;
+ cy0 = Math.cos(y0);
+ sy0 = Math.sin(y0);
+ return azimuthal;
+ };
+
+ azimuthal.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return azimuthal;
+ };
+
+ azimuthal.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = [+x[0], +x[1]];
+ return azimuthal;
+ };
+
+ return azimuthal.origin([0, 0]);
+};
+// Derived from Tom Carden's Albers implementation for Protovis.
+// http://gist.github.com/476238
+// http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html
+
+d3.geo.albers = function() {
+ var origin = [-98, 38],
+ parallels = [29.5, 45.5],
+ scale = 1000,
+ translate = [480, 250],
+ lng0, // d3_geo_radians * origin[0]
+ n,
+ C,
+ p0;
+
+ function albers(coordinates) {
+ var t = n * (d3_geo_radians * coordinates[0] - lng0),
+ p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n;
+ return [
+ scale * p * Math.sin(t) + translate[0],
+ scale * (p * Math.cos(t) - p0) + translate[1]
+ ];
+ }
+
+ albers.invert = function(coordinates) {
+ var x = (coordinates[0] - translate[0]) / scale,
+ y = (coordinates[1] - translate[1]) / scale,
+ p0y = p0 + y,
+ t = Math.atan2(x, p0y),
+ p = Math.sqrt(x * x + p0y * p0y);
+ return [
+ (lng0 + t / n) / d3_geo_radians,
+ Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians
+ ];
+ };
+
+ function reload() {
+ var phi1 = d3_geo_radians * parallels[0],
+ phi2 = d3_geo_radians * parallels[1],
+ lat0 = d3_geo_radians * origin[1],
+ s = Math.sin(phi1),
+ c = Math.cos(phi1);
+ lng0 = d3_geo_radians * origin[0];
+ n = .5 * (s + Math.sin(phi2));
+ C = c * c + 2 * n * s;
+ p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n;
+ return albers;
+ }
+
+ albers.origin = function(x) {
+ if (!arguments.length) return origin;
+ origin = [+x[0], +x[1]];
+ return reload();
+ };
+
+ albers.parallels = function(x) {
+ if (!arguments.length) return parallels;
+ parallels = [+x[0], +x[1]];
+ return reload();
+ };
+
+ albers.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return albers;
+ };
+
+ albers.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = [+x[0], +x[1]];
+ return albers;
+ };
+
+ return reload();
+};
+
+// A composite projection for the United States, 960x500. The set of standard
+// parallels for each region comes from USGS, which is published here:
+// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
+// TODO allow the composite projection to be rescaled?
+d3.geo.albersUsa = function() {
+ var lower48 = d3.geo.albers();
+
+ var alaska = d3.geo.albers()
+ .origin([-160, 60])
+ .parallels([55, 65]);
+
+ var hawaii = d3.geo.albers()
+ .origin([-160, 20])
+ .parallels([8, 18]);
+
+ var puertoRico = d3.geo.albers()
+ .origin([-60, 10])
+ .parallels([8, 18]);
+
+ function albersUsa(coordinates) {
+ var lon = coordinates[0],
+ lat = coordinates[1];
+ return (lat > 50 ? alaska
+ : lon < -140 ? hawaii
+ : lat < 21 ? puertoRico
+ : lower48)(coordinates);
+ }
+
+ albersUsa.scale = function(x) {
+ if (!arguments.length) return lower48.scale();
+ lower48.scale(x);
+ alaska.scale(x * .6);
+ hawaii.scale(x);
+ puertoRico.scale(x * 1.5);
+ return albersUsa.translate(lower48.translate());
+ };
+
+ albersUsa.translate = function(x) {
+ if (!arguments.length) return lower48.translate();
+ var dz = lower48.scale() / 1000,
+ dx = x[0],
+ dy = x[1];
+ lower48.translate(x);
+ alaska.translate([dx - 400 * dz, dy + 170 * dz]);
+ hawaii.translate([dx - 190 * dz, dy + 200 * dz]);
+ puertoRico.translate([dx + 580 * dz, dy + 430 * dz]);
+ return albersUsa;
+ };
+
+ return albersUsa.scale(lower48.scale());
+};
+d3.geo.bonne = function() {
+ var scale = 200,
+ translate = [480, 250],
+ x0, // origin longitude in radians
+ y0, // origin latitude in radians
+ y1, // parallel latitude in radians
+ c1; // cot(y1)
+
+ function bonne(coordinates) {
+ var x = coordinates[0] * d3_geo_radians - x0,
+ y = coordinates[1] * d3_geo_radians - y0;
+ if (y1) {
+ var p = c1 + y1 - y, E = x * Math.cos(y) / p;
+ x = p * Math.sin(E);
+ y = p * Math.cos(E) - c1;
+ } else {
+ x *= Math.cos(y);
+ y *= -1;
+ }
+ return [
+ scale * x + translate[0],
+ scale * y + translate[1]
+ ];
+ }
+
+ bonne.invert = function(coordinates) {
+ var x = (coordinates[0] - translate[0]) / scale,
+ y = (coordinates[1] - translate[1]) / scale;
+ if (y1) {
+ var c = c1 + y, p = Math.sqrt(x * x + c * c);
+ y = c1 + y1 - p;
+ x = x0 + p * Math.atan2(x, c) / Math.cos(y);
+ } else {
+ y *= -1;
+ x /= Math.cos(y);
+ }
+ return [
+ x / d3_geo_radians,
+ y / d3_geo_radians
+ ];
+ };
+
+ // 90° for Werner, 0° for Sinusoidal
+ bonne.parallel = function(x) {
+ if (!arguments.length) return y1 / d3_geo_radians;
+ c1 = 1 / Math.tan(y1 = x * d3_geo_radians);
+ return bonne;
+ };
+
+ bonne.origin = function(x) {
+ if (!arguments.length) return [x0 / d3_geo_radians, y0 / d3_geo_radians];
+ x0 = x[0] * d3_geo_radians;
+ y0 = x[1] * d3_geo_radians;
+ return bonne;
+ };
+
+ bonne.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return bonne;
+ };
+
+ bonne.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = [+x[0], +x[1]];
+ return bonne;
+ };
+
+ return bonne.origin([0, 0]).parallel(45);
+};
+d3.geo.equirectangular = function() {
+ var scale = 500,
+ translate = [480, 250];
+
+ function equirectangular(coordinates) {
+ var x = coordinates[0] / 360,
+ y = -coordinates[1] / 360;
+ return [
+ scale * x + translate[0],
+ scale * y + translate[1]
+ ];
+ }
+
+ equirectangular.invert = function(coordinates) {
+ var x = (coordinates[0] - translate[0]) / scale,
+ y = (coordinates[1] - translate[1]) / scale;
+ return [
+ 360 * x,
+ -360 * y
+ ];
+ };
+
+ equirectangular.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return equirectangular;
+ };
+
+ equirectangular.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = [+x[0], +x[1]];
+ return equirectangular;
+ };
+
+ return equirectangular;
+};
+d3.geo.mercator = function() {
+ var scale = 500,
+ translate = [480, 250];
+
+ function mercator(coordinates) {
+ var x = coordinates[0] / 360,
+ y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360;
+ return [
+ scale * x + translate[0],
+ scale * Math.max(-.5, Math.min(.5, y)) + translate[1]
+ ];
+ }
+
+ mercator.invert = function(coordinates) {
+ var x = (coordinates[0] - translate[0]) / scale,
+ y = (coordinates[1] - translate[1]) / scale;
+ return [
+ 360 * x,
+ 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90
+ ];
+ };
+
+ mercator.scale = function(x) {
+ if (!arguments.length) return scale;
+ scale = +x;
+ return mercator;
+ };
+
+ mercator.translate = function(x) {
+ if (!arguments.length) return translate;
+ translate = [+x[0], +x[1]];
+ return mercator;
+ };
+
+ return mercator;
+};
+function d3_geo_type(types, defaultValue) {
+ return function(object) {
+ return object && types.hasOwnProperty(object.type) ? types[object.type](object) : defaultValue;
+ };
+}
+/**
+ * Returns a function that, given a GeoJSON object (e.g., a feature), returns
+ * the corresponding SVG path. The function can be customized by overriding the
+ * projection. Point features are mapped to circles with a default radius of
+ * 4.5px; the radius can be specified either as a constant or a function that
+ * is evaluated per object.
+ */
+d3.geo.path = function() {
+ var pointRadius = 4.5,
+ pointCircle = d3_path_circle(pointRadius),
+ projection = d3.geo.albersUsa();
+
+ function path(d, i) {
+ if (typeof pointRadius === "function") {
+ pointCircle = d3_path_circle(pointRadius.apply(this, arguments));
+ }
+ return pathType(d) || null;
+ }
+
+ function project(coordinates) {
+ return projection(coordinates).join(",");
+ }
+
+ var pathType = d3_geo_type({
+
+ FeatureCollection: function(o) {
+ var path = [],
+ features = o.features,
+ i = -1, // features.index
+ n = features.length;
+ while (++i < n) path.push(pathType(features[i].geometry));
+ return path.join("");
+ },
+
+ Feature: function(o) {
+ return pathType(o.geometry);
+ },
+
+ Point: function(o) {
+ return "M" + project(o.coordinates) + pointCircle;
+ },
+
+ MultiPoint: function(o) {
+ var path = [],
+ coordinates = o.coordinates,
+ i = -1, // coordinates.index
+ n = coordinates.length;
+ while (++i < n) path.push("M", project(coordinates[i]), pointCircle);
+ return path.join("");
+ },
+
+ LineString: function(o) {
+ var path = ["M"],
+ coordinates = o.coordinates,
+ i = -1, // coordinates.index
+ n = coordinates.length;
+ while (++i < n) path.push(project(coordinates[i]), "L");
+ path.pop();
+ return path.join("");
+ },
+
+ MultiLineString: function(o) {
+ var path = [],
+ coordinates = o.coordinates,
+ i = -1, // coordinates.index
+ n = coordinates.length,
+ subcoordinates, // coordinates[i]
+ j, // subcoordinates.index
+ m; // subcoordinates.length
+ while (++i < n) {
+ subcoordinates = coordinates[i];
+ j = -1;
+ m = subcoordinates.length;
+ path.push("M");
+ while (++j < m) path.push(project(subcoordinates[j]), "L");
+ path.pop();
+ }
+ return path.join("");
+ },
+
+ Polygon: function(o) {
+ var path = [],
+ coordinates = o.coordinates,
+ i = -1, // coordinates.index
+ n = coordinates.length,
+ subcoordinates, // coordinates[i]
+ j, // subcoordinates.index
+ m; // subcoordinates.length
+ while (++i < n) {
+ subcoordinates = coordinates[i];
+ j = -1;
+ if ((m = subcoordinates.length - 1) > 0) {
+ path.push("M");
+ while (++j < m) path.push(project(subcoordinates[j]), "L");
+ path[path.length - 1] = "Z";
+ }
+ }
+ return path.join("");
+ },
+
+ MultiPolygon: function(o) {
+ var path = [],
+ coordinates = o.coordinates,
+ i = -1, // coordinates index
+ n = coordinates.length,
+ subcoordinates, // coordinates[i]
+ j, // subcoordinates index
+ m, // subcoordinates.length
+ subsubcoordinates, // subcoordinates[j]
+ k, // subsubcoordinates index
+ p; // subsubcoordinates.length
+ while (++i < n) {
+ subcoordinates = coordinates[i];
+ j = -1;
+ m = subcoordinates.length;
+ while (++j < m) {
+ subsubcoordinates = subcoordinates[j];
+ k = -1;
+ if ((p = subsubcoordinates.length - 1) > 0) {
+ path.push("M");
+ while (++k < p) path.push(project(subsubcoordinates[k]), "L");
+ path[path.length - 1] = "Z";
+ }
+ }
+ }
+ return path.join("");
+ },
+
+ GeometryCollection: function(o) {
+ var path = [],
+ geometries = o.geometries,
+ i = -1, // geometries index
+ n = geometries.length;
+ while (++i < n) path.push(pathType(geometries[i]));
+ return path.join("");
+ }
+
+ });
+
+ var areaType = path.area = d3_geo_type({
+
+ FeatureCollection: function(o) {
+ var area = 0,
+ features = o.features,
+ i = -1, // features.index
+ n = features.length;
+ while (++i < n) area += areaType(features[i]);
+ return area;
+ },
+
+ Feature: function(o) {
+ return areaType(o.geometry);
+ },
+
+ Polygon: function(o) {
+ return polygonArea(o.coordinates);
+ },
+
+ MultiPolygon: function(o) {
+ var sum = 0,
+ coordinates = o.coordinates,
+ i = -1, // coordinates index
+ n = coordinates.length;
+ while (++i < n) sum += polygonArea(coordinates[i]);
+ return sum;
+ },
+
+ GeometryCollection: function(o) {
+ var sum = 0,
+ geometries = o.geometries,
+ i = -1, // geometries index
+ n = geometries.length;
+ while (++i < n) sum += areaType(geometries[i]);
+ return sum;
+ }
+
+ }, 0);
+
+ function polygonArea(coordinates) {
+ var sum = area(coordinates[0]), // exterior ring
+ i = 0, // coordinates.index
+ n = coordinates.length;
+ while (++i < n) sum -= area(coordinates[i]); // holes
+ return sum;
+ }
+
+ function polygonCentroid(coordinates) {
+ var polygon = d3.geom.polygon(coordinates[0].map(projection)), // exterior ring
+ area = polygon.area(),
+ centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1),
+ x = centroid[0],
+ y = centroid[1],
+ z = area,
+ i = 0, // coordinates index
+ n = coordinates.length;
+ while (++i < n) {
+ polygon = d3.geom.polygon(coordinates[i].map(projection)); // holes
+ area = polygon.area();
+ centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1);
+ x -= centroid[0];
+ y -= centroid[1];
+ z -= area;
+ }
+ return [x, y, 6 * z]; // weighted centroid
+ }
+
+ var centroidType = path.centroid = d3_geo_type({
+
+ // TODO FeatureCollection
+ // TODO Point
+ // TODO MultiPoint
+ // TODO LineString
+ // TODO MultiLineString
+ // TODO GeometryCollection
+
+ Feature: function(o) {
+ return centroidType(o.geometry);
+ },
+
+ Polygon: function(o) {
+ var centroid = polygonCentroid(o.coordinates);
+ return [centroid[0] / centroid[2], centroid[1] / centroid[2]];
+ },
+
+ MultiPolygon: function(o) {
+ var area = 0,
+ coordinates = o.coordinates,
+ centroid,
+ x = 0,
+ y = 0,
+ z = 0,
+ i = -1, // coordinates index
+ n = coordinates.length;
+ while (++i < n) {
+ centroid = polygonCentroid(coordinates[i]);
+ x += centroid[0];
+ y += centroid[1];
+ z += centroid[2];
+ }
+ return [x / z, y / z];
+ }
+
+ });
+
+ function area(coordinates) {
+ return Math.abs(d3.geom.polygon(coordinates.map(projection)).area());
+ }
+
+ path.projection = function(x) {
+ projection = x;
+ return path;
+ };
+
+ path.pointRadius = function(x) {
+ if (typeof x === "function") pointRadius = x;
+ else {
+ pointRadius = +x;
+ pointCircle = d3_path_circle(pointRadius);
+ }
+ return path;
+ };
+
+ return path;
+};
+
+function d3_path_circle(radius) {
+ return "m0," + radius
+ + "a" + radius + "," + radius + " 0 1,1 0," + (-2 * radius)
+ + "a" + radius + "," + radius + " 0 1,1 0," + (+2 * radius)
+ + "z";
+}
+/**
+ * Given a GeoJSON object, returns the corresponding bounding box. The bounding
+ * box is represented by a two-dimensional array: [[left, bottom], [right,
+ * top]], where left is the minimum longitude, bottom is the minimum latitude,
+ * right is maximum longitude, and top is the maximum latitude.
+ */
+d3.geo.bounds = function(feature) {
+ var left = Infinity,
+ bottom = Infinity,
+ right = -Infinity,
+ top = -Infinity;
+ d3_geo_bounds(feature, function(x, y) {
+ if (x < left) left = x;
+ if (x > right) right = x;
+ if (y < bottom) bottom = y;
+ if (y > top) top = y;
+ });
+ return [[left, bottom], [right, top]];
+};
+
+function d3_geo_bounds(o, f) {
+ if (d3_geo_boundsTypes.hasOwnProperty(o.type)) d3_geo_boundsTypes[o.type](o, f);
+}
+
+var d3_geo_boundsTypes = {
+ Feature: d3_geo_boundsFeature,
+ FeatureCollection: d3_geo_boundsFeatureCollection,
+ GeometryCollection: d3_geo_boundsGeometryCollection,
+ LineString: d3_geo_boundsLineString,
+ MultiLineString: d3_geo_boundsMultiLineString,
+ MultiPoint: d3_geo_boundsLineString,
+ MultiPolygon: d3_geo_boundsMultiPolygon,
+ Point: d3_geo_boundsPoint,
+ Polygon: d3_geo_boundsPolygon
+};
+
+function d3_geo_boundsFeature(o, f) {
+ d3_geo_bounds(o.geometry, f);
+}
+
+function d3_geo_boundsFeatureCollection(o, f) {
+ for (var a = o.features, i = 0, n = a.length; i < n; i++) {
+ d3_geo_bounds(a[i].geometry, f);
+ }
+}
+
+function d3_geo_boundsGeometryCollection(o, f) {
+ for (var a = o.geometries, i = 0, n = a.length; i < n; i++) {
+ d3_geo_bounds(a[i], f);
+ }
+}
+
+function d3_geo_boundsLineString(o, f) {
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+ f.apply(null, a[i]);
+ }
+}
+
+function d3_geo_boundsMultiLineString(o, f) {
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+ for (var b = a[i], j = 0, m = b.length; j < m; j++) {
+ f.apply(null, b[j]);
+ }
+ }
+}
+
+function d3_geo_boundsMultiPolygon(o, f) {
+ for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+ for (var b = a[i][0], j = 0, m = b.length; j < m; j++) {
+ f.apply(null, b[j]);
+ }
+ }
+}
+
+function d3_geo_boundsPoint(o, f) {
+ f.apply(null, o.coordinates);
+}
+
+function d3_geo_boundsPolygon(o, f) {
+ for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) {
+ f.apply(null, a[i]);
+ }
+}
+// TODO breakAtDateLine?
+
+d3.geo.circle = function() {
+ var origin = [0, 0],
+ degrees = 90 - 1e-2,
+ radians = degrees * d3_geo_radians,
+ arc = d3.geo.greatArc().target(Object);
+
+ function circle() {
+ // TODO render a circle as a Polygon
+ }
+
+ function visible(point) {
+ return arc.distance(point) < radians;
+ }
+
+ circle.clip = function(d) {
+ arc.source(typeof origin === "function" ? origin.apply(this, arguments) : origin);
+ return clipType(d);
+ };
+
+ var clipType = d3_geo_type({
+
+ FeatureCollection: function(o) {
+ var features = o.features.map(clipType).filter(Object);
+ return features && (o = Object.create(o), o.features = features, o);
+ },
+
+ Feature: function(o) {
+ var geometry = clipType(o.geometry);
+ return geometry && (o = Object.create(o), o.geometry = geometry, o);
+ },
+
+ Point: function(o) {
+ return visible(o.coordinates) && o;
+ },
+
+ MultiPoint: function(o) {
+ var coordinates = o.coordinates.filter(visible);
+ return coordinates.length && {
+ type: o.type,
+ coordinates: coordinates
+ };
+ },
+
+ LineString: function(o) {
+ var coordinates = clip(o.coordinates);
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
+ },
+
+ MultiLineString: function(o) {
+ var coordinates = o.coordinates.map(clip).filter(function(d) { return d.length; });
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
+ },
+
+ Polygon: function(o) {
+ var coordinates = o.coordinates.map(clip);
+ return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o);
+ },
+
+ MultiPolygon: function(o) {
+ var coordinates = o.coordinates.map(function(d) { return d.map(clip); }).filter(function(d) { return d[0].length; });
+ return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o);
+ },
+
+ GeometryCollection: function(o) {
+ var geometries = o.geometries.map(clipType).filter(Object);
+ return geometries.length && (o = Object.create(o), o.geometries = geometries, o);
+ }
+
+ });
+
+ function clip(coordinates) {
+ var i = -1,
+ n = coordinates.length,
+ clipped = [],
+ p0,
+ p1,
+ p2,
+ d0,
+ d1;
+
+ while (++i < n) {
+ d1 = arc.distance(p2 = coordinates[i]);
+ if (d1 < radians) {
+ if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1)));
+ clipped.push(p2);
+ p0 = p1 = null;
+ } else {
+ p1 = p2;
+ if (!p0 && clipped.length) {
+ clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0)));
+ p0 = p1;
+ }
+ }
+ d0 = d1;
+ }
+
+ if (p1 && clipped.length) {
+ d1 = arc.distance(p2 = clipped[0]);
+ clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1)));
+ }
+
+ return resample(clipped);
+ }
+
+ // Resample coordinates, creating great arcs between each.
+ function resample(coordinates) {
+ var i = 0,
+ n = coordinates.length,
+ j,
+ m,
+ resampled = n ? [coordinates[0]] : coordinates,
+ resamples,
+ origin = arc.source();
+
+ while (++i < n) {
+ resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates;
+ for (j = 0, m = resamples.length; ++j < m;) resampled.push(resamples[j]);
+ }
+
+ arc.source(origin);
+ return resampled;
+ }
+
+ circle.origin = function(x) {
+ if (!arguments.length) return origin;
+ origin = x;
+ return circle;
+ };
+
+ circle.angle = function(x) {
+ if (!arguments.length) return degrees;
+ radians = (degrees = +x) * d3_geo_radians;
+ return circle;
+ };
+
+ // Precision is specified in degrees.
+ circle.precision = function(x) {
+ if (!arguments.length) return arc.precision();
+ arc.precision(x);
+ return circle;
+ };
+
+ return circle;
+}
+d3.geo.greatArc = function() {
+ var source = d3_geo_greatArcSource,
+ target = d3_geo_greatArcTarget,
+ precision = 6 * d3_geo_radians;
+
+ function greatArc() {
+ var a = typeof source === "function" ? source.apply(this, arguments) : source,
+ b = typeof target === "function" ? target.apply(this, arguments) : target,
+ i = d3_geo_greatArcInterpolate(a, b),
+ dt = precision / i.d,
+ t = 0,
+ coordinates = [a];
+ while ((t += dt) < 1) coordinates.push(i(t));
+ coordinates.push(b);
+ return {
+ type: "LineString",
+ coordinates: coordinates
+ };
+ }
+
+ // Length returned in radians; multiply by radius for distance.
+ greatArc.distance = function() {
+ var a = typeof source === "function" ? source.apply(this, arguments) : source,
+ b = typeof target === "function" ? target.apply(this, arguments) : target;
+ return d3_geo_greatArcInterpolate(a, b).d;
+ };
+
+ greatArc.source = function(x) {
+ if (!arguments.length) return source;
+ source = x;
+ return greatArc;
+ };
+
+ greatArc.target = function(x) {
+ if (!arguments.length) return target;
+ target = x;
+ return greatArc;
+ };
+
+ // Precision is specified in degrees.
+ greatArc.precision = function(x) {
+ if (!arguments.length) return precision / d3_geo_radians;
+ precision = x * d3_geo_radians;
+ return greatArc;
+ };
+
+ return greatArc;
+};
+
+function d3_geo_greatArcSource(d) {
+ return d.source;
+}
+
+function d3_geo_greatArcTarget(d) {
+ return d.target;
+}
+
+function d3_geo_greatArcInterpolate(a, b) {
+ var x0 = a[0] * d3_geo_radians, cx0 = Math.cos(x0), sx0 = Math.sin(x0),
+ y0 = a[1] * d3_geo_radians, cy0 = Math.cos(y0), sy0 = Math.sin(y0),
+ x1 = b[0] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1),
+ y1 = b[1] * d3_geo_radians, cy1 = Math.cos(y1), sy1 = Math.sin(y1),
+ d = interpolate.d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0)))),
+ sd = Math.sin(d);
+
+ // From http://williams.best.vwh.net/avform.htm#Intermediate
+ function interpolate(t) {
+ var A = Math.sin(d - (t *= d)) / sd,
+ B = Math.sin(t) / sd,
+ x = A * cy0 * cx0 + B * cy1 * cx1,
+ y = A * cy0 * sx0 + B * cy1 * sx1,
+ z = A * sy0 + B * sy1;
+ return [
+ Math.atan2(y, x) / d3_geo_radians,
+ Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians
+ ];
+ }
+
+ return interpolate;
+}
+d3.geo.greatCircle = d3.geo.circle;
+d3.geom = {};
+/**
+ * Computes a contour for a given input grid function using the <a
+ * href="http://en.wikipedia.org/wiki/Marching_squares">marching
+ * squares</a> algorithm. Returns the contour polygon as an array of points.
+ *
+ * @param grid a two-input function(x, y) that returns true for values
+ * inside the contour and false for values outside the contour.
+ * @param start an optional starting point [x, y] on the grid.
+ * @returns polygon [[x1, y1], [x2, y2], …]
+ */
+d3.geom.contour = function(grid, start) {
+ var s = start || d3_geom_contourStart(grid), // starting point
+ c = [], // contour polygon
+ x = s[0], // current x position
+ y = s[1], // current y position
+ dx = 0, // next x direction
+ dy = 0, // next y direction
+ pdx = NaN, // previous x direction
+ pdy = NaN, // previous y direction
+ i = 0;
+
+ do {
+ // determine marching squares index
+ i = 0;
+ if (grid(x-1, y-1)) i += 1;
+ if (grid(x, y-1)) i += 2;
+ if (grid(x-1, y )) i += 4;
+ if (grid(x, y )) i += 8;
+
+ // determine next direction
+ if (i === 6) {
+ dx = pdy === -1 ? -1 : 1;
+ dy = 0;
+ } else if (i === 9) {
+ dx = 0;
+ dy = pdx === 1 ? -1 : 1;
+ } else {
+ dx = d3_geom_contourDx[i];
+ dy = d3_geom_contourDy[i];
+ }
+
+ // update contour polygon
+ if (dx != pdx && dy != pdy) {
+ c.push([x, y]);
+ pdx = dx;
+ pdy = dy;
+ }
+
+ x += dx;
+ y += dy;
+ } while (s[0] != x || s[1] != y);
+
+ return c;
+};
+
+// lookup tables for marching directions
+var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],
+ d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];
+
+function d3_geom_contourStart(grid) {
+ var x = 0,
+ y = 0;
+
+ // search for a starting point; begin at origin
+ // and proceed along outward-expanding diagonals
+ while (true) {
+ if (grid(x,y)) {
+ return [x,y];
+ }
+ if (x === 0) {
+ x = y + 1;
+ y = 0;
+ } else {
+ x = x - 1;
+ y = y + 1;
+ }
+ }
+}
+/**
+ * Computes the 2D convex hull of a set of points using Graham's scanning
+ * algorithm. The algorithm has been implemented as described in Cormen,
+ * Leiserson, and Rivest's Introduction to Algorithms. The running time of
+ * this algorithm is O(n log n), where n is the number of input points.
+ *
+ * @param vertices [[x1, y1], [x2, y2], …]
+ * @returns polygon [[x1, y1], [x2, y2], …]
+ */
+d3.geom.hull = function(vertices) {
+ if (vertices.length < 3) return [];
+
+ var len = vertices.length,
+ plen = len - 1,
+ points = [],
+ stack = [],
+ i, j, h = 0, x1, y1, x2, y2, u, v, a, sp;
+
+ // find the starting ref point: leftmost point with the minimum y coord
+ for (i=1; i<len; ++i) {
+ if (vertices[i][1] < vertices[h][1]) {
+ h = i;
+ } else if (vertices[i][1] == vertices[h][1]) {
+ h = (vertices[i][0] < vertices[h][0] ? i : h);
+ }
+ }
+
+ // calculate polar angles from ref point and sort
+ for (i=0; i<len; ++i) {
+ if (i === h) continue;
+ y1 = vertices[i][1] - vertices[h][1];
+ x1 = vertices[i][0] - vertices[h][0];
+ points.push({angle: Math.atan2(y1, x1), index: i});
+ }
+ points.sort(function(a, b) { return a.angle - b.angle; });
+
+ // toss out duplicate angles
+ a = points[0].angle;
+ v = points[0].index;
+ u = 0;
+ for (i=1; i<plen; ++i) {
+ j = points[i].index;
+ if (a == points[i].angle) {
+ // keep angle for point most distant from the reference
+ x1 = vertices[v][0] - vertices[h][0];
+ y1 = vertices[v][1] - vertices[h][1];
+ x2 = vertices[j][0] - vertices[h][0];
+ y2 = vertices[j][1] - vertices[h][1];
+ if ((x1*x1 + y1*y1) >= (x2*x2 + y2*y2)) {
+ points[i].index = -1;
+ } else {
+ points[u].index = -1;
+ a = points[i].angle;
+ u = i;
+ v = j;
+ }
+ } else {
+ a = points[i].angle;
+ u = i;
+ v = j;
+ }
+ }
+
+ // initialize the stack
+ stack.push(h);
+ for (i=0, j=0; i<2; ++j) {
+ if (points[j].index !== -1) {
+ stack.push(points[j].index);
+ i++;
+ }
+ }
+ sp = stack.length;
+
+ // do graham's scan
+ for (; j<plen; ++j) {
+ if (points[j].index === -1) continue; // skip tossed out points
+ while (!d3_geom_hullCCW(stack[sp-2], stack[sp-1], points[j].index, vertices)) {
+ --sp;
+ }
+ stack[sp++] = points[j].index;
+ }
+
+ // construct the hull
+ var poly = [];
+ for (i=0; i<sp; ++i) {
+ poly.push(vertices[stack[i]]);
+ }
+ return poly;
+}
+
+// are three points in counter-clockwise order?
+function d3_geom_hullCCW(i1, i2, i3, v) {
+ var t, a, b, c, d, e, f;
+ t = v[i1]; a = t[0]; b = t[1];
+ t = v[i2]; c = t[0]; d = t[1];
+ t = v[i3]; e = t[0]; f = t[1];
+ return ((f-b)*(c-a) - (d-b)*(e-a)) > 0;
+}
+// Note: requires coordinates to be counterclockwise and convex!
+d3.geom.polygon = function(coordinates) {
+
+ coordinates.area = function() {
+ var i = 0,
+ n = coordinates.length,
+ a = coordinates[n - 1][0] * coordinates[0][1],
+ b = coordinates[n - 1][1] * coordinates[0][0];
+ while (++i < n) {
+ a += coordinates[i - 1][0] * coordinates[i][1];
+ b += coordinates[i - 1][1] * coordinates[i][0];
+ }
+ return (b - a) * .5;
+ };
+
+ coordinates.centroid = function(k) {
+ var i = -1,
+ n = coordinates.length,
+ x = 0,
+ y = 0,
+ a,
+ b = coordinates[n - 1],
+ c;
+ if (!arguments.length) k = -1 / (6 * coordinates.area());
+ while (++i < n) {
+ a = b;
+ b = coordinates[i];
+ c = a[0] * b[1] - b[0] * a[1];
+ x += (a[0] + b[0]) * c;
+ y += (a[1] + b[1]) * c;
+ }
+ return [x * k, y * k];
+ };
+
+ // The Sutherland-Hodgman clipping algorithm.
+ coordinates.clip = function(subject) {
+ var input,
+ i = -1,
+ n = coordinates.length,
+ j,
+ m,
+ a = coordinates[n - 1],
+ b,
+ c,
+ d;
+ while (++i < n) {
+ input = subject.slice();
+ subject.length = 0;
+ b = coordinates[i];
+ c = input[(m = input.length) - 1];
+ j = -1;
+ while (++j < m) {
+ d = input[j];
+ if (d3_geom_polygonInside(d, a, b)) {
+ if (!d3_geom_polygonInside(c, a, b)) {
+ subject.push(d3_geom_polygonIntersect(c, d, a, b));
+ }
+ subject.push(d);
+ } else if (d3_geom_polygonInside(c, a, b)) {
+ subject.push(d3_geom_polygonIntersect(c, d, a, b));
+ }
+ c = d;
+ }
+ a = b;
+ }
+ return subject;
+ };
+
+ return coordinates;
+};
+
+function d3_geom_polygonInside(p, a, b) {
+ return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
+}
+
+// Intersect two infinite lines cd and ab.
+function d3_geom_polygonIntersect(c, d, a, b) {
+ var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0],
+ y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1],
+ x13 = x1 - x3,
+ x21 = x2 - x1,
+ x43 = x4 - x3,
+ y13 = y1 - y3,
+ y21 = y2 - y1,
+ y43 = y4 - y3,
+ ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21);
+ return [x1 + ua * x21, y1 + ua * y21];
+}
+// Adapted from Nicolas Garcia Belmonte's JIT implementation:
+// http://blog.thejit.org/2010/02/12/voronoi-tessellation/
+// http://blog.thejit.org/assets/voronoijs/voronoi.js
+// See lib/jit/LICENSE for details.
+
+// Notes:
+//
+// This implementation does not clip the returned polygons, so if you want to
+// clip them to a particular shape you will need to do that either in SVG or by
+// post-processing with d3.geom.polygon's clip method.
+//
+// If any vertices are coincident or have NaN positions, the behavior of this
+// method is undefined. Most likely invalid polygons will be returned. You
+// should filter invalid points, and consolidate coincident points, before
+// computing the tessellation.
+
+/**
+ * @param vertices [[x1, y1], [x2, y2], …]
+ * @returns polygons [[[x1, y1], [x2, y2], …], …]
+ */
+d3.geom.voronoi = function(vertices) {
+ var polygons = vertices.map(function() { return []; });
+
+ d3_voronoi_tessellate(vertices, function(e) {
+ var s1,
+ s2,
+ x1,
+ x2,
+ y1,
+ y2;
+ if (e.a === 1 && e.b >= 0) {
+ s1 = e.ep.r;
+ s2 = e.ep.l;
+ } else {
+ s1 = e.ep.l;
+ s2 = e.ep.r;
+ }
+ if (e.a === 1) {
+ y1 = s1 ? s1.y : -1e6;
+ x1 = e.c - e.b * y1;
+ y2 = s2 ? s2.y : 1e6;
+ x2 = e.c - e.b * y2;
+ } else {
+ x1 = s1 ? s1.x : -1e6;
+ y1 = e.c - e.a * x1;
+ x2 = s2 ? s2.x : 1e6;
+ y2 = e.c - e.a * x2;
+ }
+ var v1 = [x1, y1],
+ v2 = [x2, y2];
+ polygons[e.region.l.index].push(v1, v2);
+ polygons[e.region.r.index].push(v1, v2);
+ });
+
+ // Reconnect the polygon segments into counterclockwise loops.
+ return polygons.map(function(polygon, i) {
+ var cx = vertices[i][0],
+ cy = vertices[i][1];
+ polygon.forEach(function(v) {
+ v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+ });
+ return polygon.sort(function(a, b) {
+ return a.angle - b.angle;
+ }).filter(function(d, i) {
+ return !i || (d.angle - polygon[i - 1].angle > 1e-10);
+ });
+ });
+};
+
+var d3_voronoi_opposite = {"l": "r", "r": "l"};
+
+function d3_voronoi_tessellate(vertices, callback) {
+
+ var Sites = {
+ list: vertices
+ .map(function(v, i) {
+ return {
+ index: i,
+ x: v[0],
+ y: v[1]
+ };
+ })
+ .sort(function(a, b) {
+ return a.y < b.y ? -1
+ : a.y > b.y ? 1
+ : a.x < b.x ? -1
+ : a.x > b.x ? 1
+ : 0;
+ }),
+ bottomSite: null
+ };
+
+ var EdgeList = {
+ list: [],
+ leftEnd: null,
+ rightEnd: null,
+
+ init: function() {
+ EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
+ EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
+ EdgeList.leftEnd.r = EdgeList.rightEnd;
+ EdgeList.rightEnd.l = EdgeList.leftEnd;
+ EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
+ },
+
+ createHalfEdge: function(edge, side) {
+ return {
+ edge: edge,
+ side: side,
+ vertex: null,
+ "l": null,
+ "r": null
+ };
+ },
+
+ insert: function(lb, he) {
+ he.l = lb;
+ he.r = lb.r;
+ lb.r.l = he;
+ lb.r = he;
+ },
+
+ leftBound: function(p) {
+ var he = EdgeList.leftEnd;
+ do {
+ he = he.r;
+ } while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
+ he = he.l;
+ return he;
+ },
+
+ del: function(he) {
+ he.l.r = he.r;
+ he.r.l = he.l;
+ he.edge = null;
+ },
+
+ right: function(he) {
+ return he.r;
+ },
+
+ left: function(he) {
+ return he.l;
+ },
+
+ leftRegion: function(he) {
+ return he.edge == null
+ ? Sites.bottomSite
+ : he.edge.region[he.side];
+ },
+
+ rightRegion: function(he) {
+ return he.edge == null
+ ? Sites.bottomSite
+ : he.edge.region[d3_voronoi_opposite[he.side]];
+ }
+ };
+
+ var Geom = {
+
+ bisect: function(s1, s2) {
+ var newEdge = {
+ region: {"l": s1, "r": s2},
+ ep: {"l": null, "r": null}
+ };
+
+ var dx = s2.x - s1.x,
+ dy = s2.y - s1.y,
+ adx = dx > 0 ? dx : -dx,
+ ady = dy > 0 ? dy : -dy;
+
+ newEdge.c = s1.x * dx + s1.y * dy
+ + (dx * dx + dy * dy) * .5;
+
+ if (adx > ady) {
+ newEdge.a = 1;
+ newEdge.b = dy / dx;
+ newEdge.c /= dx;
+ } else {
+ newEdge.b = 1;
+ newEdge.a = dx / dy;
+ newEdge.c /= dy;
+ }
+
+ return newEdge;
+ },
+
+ intersect: function(el1, el2) {
+ var e1 = el1.edge,
+ e2 = el2.edge;
+ if (!e1 || !e2 || (e1.region.r == e2.region.r)) {
+ return null;
+ }
+ var d = (e1.a * e2.b) - (e1.b * e2.a);
+ if (Math.abs(d) < 1e-10) {
+ return null;
+ }
+ var xint = (e1.c * e2.b - e2.c * e1.b) / d,
+ yint = (e2.c * e1.a - e1.c * e2.a) / d,
+ e1r = e1.region.r,
+ e2r = e2.region.r,
+ el,
+ e;
+ if ((e1r.y < e2r.y) ||
+ (e1r.y == e2r.y && e1r.x < e2r.x)) {
+ el = el1;
+ e = e1;
+ } else {
+ el = el2;
+ e = e2;
+ }
+ var rightOfSite = (xint >= e.region.r.x);
+ if ((rightOfSite && (el.side === "l")) ||
+ (!rightOfSite && (el.side === "r"))) {
+ return null;
+ }
+ return {
+ x: xint,
+ y: yint
+ };
+ },
+
+ rightOf: function(he, p) {
+ var e = he.edge,
+ topsite = e.region.r,
+ rightOfSite = (p.x > topsite.x);
+
+ if (rightOfSite && (he.side === "l")) {
+ return 1;
+ }
+ if (!rightOfSite && (he.side === "r")) {
+ return 0;
+ }
+ if (e.a === 1) {
+ var dyp = p.y - topsite.y,
+ dxp = p.x - topsite.x,
+ fast = 0,
+ above = 0;
+
+ if ((!rightOfSite && (e.b < 0)) ||
+ (rightOfSite && (e.b >= 0))) {
+ above = fast = (dyp >= e.b * dxp);
+ } else {
+ above = ((p.x + p.y * e.b) > e.c);
+ if (e.b < 0) {
+ above = !above;
+ }
+ if (!above) {
+ fast = 1;
+ }
+ }
+ if (!fast) {
+ var dxs = topsite.x - e.region.l.x;
+ above = (e.b * (dxp * dxp - dyp * dyp)) <
+ (dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b));
+
+ if (e.b < 0) {
+ above = !above;
+ }
+ }
+ } else /* e.b == 1 */ {
+ var yl = e.c - e.a * p.x,
+ t1 = p.y - yl,
+ t2 = p.x - topsite.x,
+ t3 = yl - topsite.y;
+
+ above = (t1 * t1) > (t2 * t2 + t3 * t3);
+ }
+ return he.side === "l" ? above : !above;
+ },
+
+ endPoint: function(edge, side, site) {
+ edge.ep[side] = site;
+ if (!edge.ep[d3_voronoi_opposite[side]]) return;
+ callback(edge);
+ },
+
+ distance: function(s, t) {
+ var dx = s.x - t.x,
+ dy = s.y - t.y;
+ return Math.sqrt(dx * dx + dy * dy);
+ }
+ };
+
+ var EventQueue = {
+ list: [],
+
+ insert: function(he, site, offset) {
+ he.vertex = site;
+ he.ystar = site.y + offset;
+ for (var i=0, list=EventQueue.list, l=list.length; i<l; i++) {
+ var next = list[i];
+ if (he.ystar > next.ystar ||
+ (he.ystar == next.ystar &&
+ site.x > next.vertex.x)) {
+ continue;
+ } else {
+ break;
+ }
+ }
+ list.splice(i, 0, he);
+ },
+
+ del: function(he) {
+ for (var i=0, ls=EventQueue.list, l=ls.length; i<l && (ls[i] != he); ++i) {}
+ ls.splice(i, 1);
+ },
+
+ empty: function() { return EventQueue.list.length === 0; },
+
+ nextEvent: function(he) {
+ for (var i=0, ls=EventQueue.list, l=ls.length; i<l; ++i) {
+ if (ls[i] == he) return ls[i+1];
+ }
+ return null;
+ },
+
+ min: function() {
+ var elem = EventQueue.list[0];
+ return {
+ x: elem.vertex.x,
+ y: elem.ystar
+ };
+ },
+
+ extractMin: function() {
+ return EventQueue.list.shift();
+ }
+ };
+
+ EdgeList.init();
+ Sites.bottomSite = Sites.list.shift();
+
+ var newSite = Sites.list.shift(), newIntStar;
+ var lbnd, rbnd, llbnd, rrbnd, bisector;
+ var bot, top, temp, p, v;
+ var e, pm;
+
+ while (true) {
+ if (!EventQueue.empty()) {
+ newIntStar = EventQueue.min();
+ }
+ if (newSite && (EventQueue.empty()
+ || newSite.y < newIntStar.y
+ || (newSite.y == newIntStar.y
+ && newSite.x < newIntStar.x))) { //new site is smallest
+ lbnd = EdgeList.leftBound(newSite);
+ rbnd = EdgeList.right(lbnd);
+ bot = EdgeList.rightRegion(lbnd);
+ e = Geom.bisect(bot, newSite);
+ bisector = EdgeList.createHalfEdge(e, "l");
+ EdgeList.insert(lbnd, bisector);
+ p = Geom.intersect(lbnd, bisector);
+ if (p) {
+ EventQueue.del(lbnd);
+ EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
+ }
+ lbnd = bisector;
+ bisector = EdgeList.createHalfEdge(e, "r");
+ EdgeList.insert(lbnd, bisector);
+ p = Geom.intersect(bisector, rbnd);
+ if (p) {
+ EventQueue.insert(bisector, p, Geom.distance(p, newSite));
+ }
+ newSite = Sites.list.shift();
+ } else if (!EventQueue.empty()) { //intersection is smallest
+ lbnd = EventQueue.extractMin();
+ llbnd = EdgeList.left(lbnd);
+ rbnd = EdgeList.right(lbnd);
+ rrbnd = EdgeList.right(rbnd);
+ bot = EdgeList.leftRegion(lbnd);
+ top = EdgeList.rightRegion(rbnd);
+ v = lbnd.vertex;
+ Geom.endPoint(lbnd.edge, lbnd.side, v);
+ Geom.endPoint(rbnd.edge, rbnd.side, v);
+ EdgeList.del(lbnd);
+ EventQueue.del(rbnd);
+ EdgeList.del(rbnd);
+ pm = "l";
+ if (bot.y > top.y) {
+ temp = bot;
+ bot = top;
+ top = temp;
+ pm = "r";
+ }
+ e = Geom.bisect(bot, top);
+ bisector = EdgeList.createHalfEdge(e, pm);
+ EdgeList.insert(llbnd, bisector);
+ Geom.endPoint(e, d3_voronoi_opposite[pm], v);
+ p = Geom.intersect(llbnd, bisector);
+ if (p) {
+ EventQueue.del(llbnd);
+ EventQueue.insert(llbnd, p, Geom.distance(p, bot));
+ }
+ p = Geom.intersect(bisector, rrbnd);
+ if (p) {
+ EventQueue.insert(bisector, p, Geom.distance(p, bot));
+ }
+ } else {
+ break;
+ }
+ }//end while
+
+ for (lbnd = EdgeList.right(EdgeList.leftEnd);
+ lbnd != EdgeList.rightEnd;
+ lbnd = EdgeList.right(lbnd)) {
+ callback(lbnd.edge);
+ }
+}
+/**
+* @param vertices [[x1, y1], [x2, y2], …]
+* @returns triangles [[[x1, y1], [x2, y2], [x3, y3]], …]
+ */
+d3.geom.delaunay = function(vertices) {
+ var edges = vertices.map(function() { return []; }),
+ triangles = [];
+
+ // Use the Voronoi tessellation to determine Delaunay edges.
+ d3_voronoi_tessellate(vertices, function(e) {
+ edges[e.region.l.index].push(vertices[e.region.r.index]);
+ });
+
+ // Reconnect the edges into counterclockwise triangles.
+ edges.forEach(function(edge, i) {
+ var v = vertices[i],
+ cx = v[0],
+ cy = v[1];
+ edge.forEach(function(v) {
+ v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+ });
+ edge.sort(function(a, b) {
+ return a.angle - b.angle;
+ });
+ for (var j = 0, m = edge.length - 1; j < m; j++) {
+ triangles.push([v, edge[j], edge[j + 1]]);
+ }
+ });
+
+ return triangles;
+};
+// Constructs a new quadtree for the specified array of points. A quadtree is a
+// two-dimensional recursive spatial subdivision. This implementation uses
+// square partitions, dividing each square into four equally-sized squares. Each
+// point exists in a unique node; if multiple points are in the same position,
+// some points may be stored on internal nodes rather than leaf nodes. Quadtrees
+// can be used to accelerate various spatial operations, such as the Barnes-Hut
+// approximation for computing n-body forces, or collision detection.
+d3.geom.quadtree = function(points, x1, y1, x2, y2) {
+ var p,
+ i = -1,
+ n = points.length;
+
+ // Type conversion for deprecated API.
+ if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint);
+
+ // Allow bounds to be specified explicitly.
+ if (arguments.length < 5) {
+ if (arguments.length === 3) {
+ y2 = x2 = y1;
+ y1 = x1;
+ } else {
+ x1 = y1 = Infinity;
+ x2 = y2 = -Infinity;
+
+ // Compute bounds.
+ while (++i < n) {
+ p = points[i];
+ if (p.x < x1) x1 = p.x;
+ if (p.y < y1) y1 = p.y;
+ if (p.x > x2) x2 = p.x;
+ if (p.y > y2) y2 = p.y;
+ }
+
+ // Squarify the bounds.
+ var dx = x2 - x1,
+ dy = y2 - y1;
+ if (dx > dy) y2 = y1 + dx;
+ else x2 = x1 + dy;
+ }
+ }
+
+ // Recursively inserts the specified point p at the node n or one of its
+ // descendants. The bounds are defined by [x1, x2] and [y1, y2].
+ function insert(n, p, x1, y1, x2, y2) {
+ if (isNaN(p.x) || isNaN(p.y)) return; // ignore invalid points
+ if (n.leaf) {
+ var v = n.point;
+ if (v) {
+ // If the point at this leaf node is at the same position as the new
+ // point we are adding, we leave the point associated with the
+ // internal node while adding the new point to a child node. This
+ // avoids infinite recursion.
+ if ((Math.abs(v.x - p.x) + Math.abs(v.y - p.y)) < .01) {
+ insertChild(n, p, x1, y1, x2, y2);
+ } else {
+ n.point = null;
+ insertChild(n, v, x1, y1, x2, y2);
+ insertChild(n, p, x1, y1, x2, y2);
+ }
+ } else {
+ n.point = p;
+ }
+ } else {
+ insertChild(n, p, x1, y1, x2, y2);
+ }
+ }
+
+ // Recursively inserts the specified point p into a descendant of node n. The
+ // bounds are defined by [x1, x2] and [y1, y2].
+ function insertChild(n, p, x1, y1, x2, y2) {
+ // Compute the split point, and the quadrant in which to insert p.
+ var sx = (x1 + x2) * .5,
+ sy = (y1 + y2) * .5,
+ right = p.x >= sx,
+ bottom = p.y >= sy,
+ i = (bottom << 1) + right;
+
+ // Recursively insert into the child node.
+ n.leaf = false;
+ n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
+
+ // Update the bounds as we recurse.
+ if (right) x1 = sx; else x2 = sx;
+ if (bottom) y1 = sy; else y2 = sy;
+ insert(n, p, x1, y1, x2, y2);
+ }
+
+ // Create the root node.
+ var root = d3_geom_quadtreeNode();
+
+ root.add = function(p) {
+ insert(root, p, x1, y1, x2, y2);
+ };
+
+ root.visit = function(f) {
+ d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2);
+ };
+
+ // Insert all points.
+ points.forEach(root.add);
+ return root;
+};
+
+function d3_geom_quadtreeNode() {
+ return {
+ leaf: true,
+ nodes: [],
+ point: null
+ };
+}
+
+function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
+ if (!f(node, x1, y1, x2, y2)) {
+ var sx = (x1 + x2) * .5,
+ sy = (y1 + y2) * .5,
+ children = node.nodes;
+ if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
+ if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
+ if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
+ if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
+ }
+}
+
+function d3_geom_quadtreePoint(p) {
+ return {
+ x: p[0],
+ y: p[1]
+ };
+}
+d3.time = {};
+
+var d3_time = Date;
+
+function d3_time_utc() {
+ this._ = new Date(arguments.length > 1
+ ? Date.UTC.apply(this, arguments)
+ : arguments[0]);
+}
+
+d3_time_utc.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() { d3_time_prototype.setUTCDate.apply(this._, arguments); },
+ setDay: function() { d3_time_prototype.setUTCDay.apply(this._, arguments); },
+ setFullYear: function() { d3_time_prototype.setUTCFullYear.apply(this._, arguments); },
+ setHours: function() { d3_time_prototype.setUTCHours.apply(this._, arguments); },
+ setMilliseconds: function() { d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); },
+ setMinutes: function() { d3_time_prototype.setUTCMinutes.apply(this._, arguments); },
+ setMonth: function() { d3_time_prototype.setUTCMonth.apply(this._, arguments); },
+ setSeconds: function() { d3_time_prototype.setUTCSeconds.apply(this._, arguments); },
+ setTime: function() { d3_time_prototype.setTime.apply(this._, arguments); }
+};
+
+var d3_time_prototype = Date.prototype;
+d3.time.format = function(template) {
+ var n = template.length;
+
+ function format(date) {
+ var string = [],
+ i = -1,
+ j = 0,
+ c,
+ f;
+ while (++i < n) {
+ if (template.charCodeAt(i) == 37) {
+ string.push(
+ template.substring(j, i),
+ (f = d3_time_formats[c = template.charAt(++i)])
+ ? f(date) : c);
+ j = i + 1;
+ }
+ }
+ string.push(template.substring(j, i));
+ return string.join("");
+ }
+
+ format.parse = function(string) {
+ var d = {y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0},
+ i = d3_time_parse(d, template, string, 0);
+ if (i != string.length) return null;
+
+ // The am-pm flag is 0 for AM, and 1 for PM.
+ if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+ var date = new d3_time();
+ date.setFullYear(d.y, d.m, d.d);
+ date.setHours(d.H, d.M, d.S, d.L);
+ return date;
+ };
+
+ format.toString = function() {
+ return template;
+ };
+
+ return format;
+};
+
+function d3_time_parse(date, template, string, j) {
+ var c,
+ p,
+ i = 0,
+ n = template.length,
+ m = string.length;
+ while (i < n) {
+ if (j >= m) return -1;
+ c = template.charCodeAt(i++);
+ if (c == 37) {
+ p = d3_time_parsers[template.charAt(i++)];
+ if (!p || ((j = p(date, string, j)) < 0)) return -1;
+ } else if (c != string.charCodeAt(j++)) {
+ return -1;
+ }
+ }
+ return j;
+}
+
+var d3_time_zfill2 = d3.format("02d"),
+ d3_time_zfill3 = d3.format("03d"),
+ d3_time_zfill4 = d3.format("04d"),
+ d3_time_sfill2 = d3.format("2d");
+
+var d3_time_formats = {
+ a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
+ A: function(d) { return d3_time_weekdays[d.getDay()]; },
+ b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
+ B: function(d) { return d3_time_months[d.getMonth()]; },
+ c: d3.time.format("%a %b %e %H:%M:%S %Y"),
+ d: function(d) { return d3_time_zfill2(d.getDate()); },
+ e: function(d) { return d3_time_sfill2(d.getDate()); },
+ H: function(d) { return d3_time_zfill2(d.getHours()); },
+ I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
+ j: function(d) { return d3_time_zfill3(1 + d3.time.dayOfYear(d)); },
+ L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
+ m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
+ M: function(d) { return d3_time_zfill2(d.getMinutes()); },
+ p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
+ S: function(d) { return d3_time_zfill2(d.getSeconds()); },
+ U: function(d) { return d3_time_zfill2(d3.time.sundayOfYear(d)); },
+ w: function(d) { return d.getDay(); },
+ W: function(d) { return d3_time_zfill2(d3.time.mondayOfYear(d)); },
+ x: d3.time.format("%m/%d/%y"),
+ X: d3.time.format("%H:%M:%S"),
+ y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
+ Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
+ Z: d3_time_zone,
+ "%": function(d) { return "%"; }
+};
+
+var d3_time_parsers = {
+ a: d3_time_parseWeekdayAbbrev,
+ A: d3_time_parseWeekday,
+ b: d3_time_parseMonthAbbrev,
+ B: d3_time_parseMonth,
+ c: d3_time_parseLocaleFull,
+ d: d3_time_parseDay,
+ e: d3_time_parseDay,
+ H: d3_time_parseHour24,
+ I: d3_time_parseHour24,
+ // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
+ L: d3_time_parseMilliseconds,
+ m: d3_time_parseMonthNumber,
+ M: d3_time_parseMinutes,
+ p: d3_time_parseAmPm,
+ S: d3_time_parseSeconds,
+ // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
+ // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
+ // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
+ x: d3_time_parseLocaleDate,
+ X: d3_time_parseLocaleTime,
+ y: d3_time_parseYear,
+ Y: d3_time_parseFullYear
+ // ,
+ // Z: function(d, s, i) { /*TODO time zone */ return i; },
+ // "%": function(d, s, i) { /*TODO literal % */ return i; }
+};
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekdayAbbrev(date, string, i) {
+ return d3_time_weekdayAbbrevRe.test(string.substring(i, i += 3)) ? i : -1;
+}
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekday(date, string, i) {
+ d3_time_weekdayRe.lastIndex = 0;
+ var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
+ return n ? i += n[0].length : -1;
+}
+
+var d3_time_weekdayAbbrevRe = /^(?:sun|mon|tue|wed|thu|fri|sat)/i,
+ d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i;
+ d3_time_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+
+function d3_time_parseMonthAbbrev(date, string, i) {
+ var n = d3_time_monthAbbrevLookup.get(string.substring(i, i += 3).toLowerCase());
+ return n == null ? -1 : (date.m = n, i);
+}
+
+var d3_time_monthAbbrevLookup = d3.map({
+ jan: 0,
+ feb: 1,
+ mar: 2,
+ apr: 3,
+ may: 4,
+ jun: 5,
+ jul: 6,
+ aug: 7,
+ sep: 8,
+ oct: 9,
+ nov: 10,
+ dec: 11
+});
+
+function d3_time_parseMonth(date, string, i) {
+ d3_time_monthRe.lastIndex = 0;
+ var n = d3_time_monthRe.exec(string.substring(i, i + 12));
+ return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1;
+}
+
+var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
+
+var d3_time_monthLookup = d3.map({
+ january: 0,
+ february: 1,
+ march: 2,
+ april: 3,
+ may: 4,
+ june: 5,
+ july: 6,
+ august: 7,
+ september: 8,
+ october: 9,
+ november: 10,
+ december: 11
+});
+
+var d3_time_months = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"
+];
+
+function d3_time_parseLocaleFull(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
+}
+
+function d3_time_parseLocaleDate(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
+}
+
+function d3_time_parseLocaleTime(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
+}
+
+function d3_time_parseFullYear(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 4));
+ return n ? (date.y = +n[0], i += n[0].length) : -1;
+}
+
+function d3_time_parseYear(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.y = d3_time_century() + +n[0], i += n[0].length) : -1;
+}
+
+function d3_time_century() {
+ return ~~(new Date().getFullYear() / 1000) * 1000;
+}
+
+function d3_time_parseMonthNumber(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.m = n[0] - 1, i += n[0].length) : -1;
+}
+
+function d3_time_parseDay(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.d = +n[0], i += n[0].length) : -1;
+}
+
+// Note: we don't validate that the hour is in the range [0,23] or [1,12].
+function d3_time_parseHour24(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.H = +n[0], i += n[0].length) : -1;
+}
+
+function d3_time_parseMinutes(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.M = +n[0], i += n[0].length) : -1;
+}
+
+function d3_time_parseSeconds(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+ return n ? (date.S = +n[0], i += n[0].length) : -1;
+}
+
+function d3_time_parseMilliseconds(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.substring(i, i + 3));
+ return n ? (date.L = +n[0], i += n[0].length) : -1;
+}
+
+// Note: we don't look at the next directive.
+var d3_time_numberRe = /\s*\d+/;
+
+function d3_time_parseAmPm(date, string, i) {
+ var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase());
+ return n == null ? -1 : (date.p = n, i);
+}
+
+var d3_time_amPmLookup = d3.map({
+ am: 0,
+ pm: 1
+});
+
+// TODO table of time zone offset names?
+function d3_time_zone(d) {
+ var z = d.getTimezoneOffset(),
+ zs = z > 0 ? "-" : "+",
+ zh = ~~(Math.abs(z) / 60),
+ zm = Math.abs(z) % 60;
+ return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
+}
+d3.time.format.utc = function(template) {
+ var local = d3.time.format(template);
+
+ function format(date) {
+ try {
+ d3_time = d3_time_utc;
+ var utc = new d3_time();
+ utc._ = date;
+ return local(utc);
+ } finally {
+ d3_time = Date;
+ }
+ }
+
+ format.parse = function(string) {
+ try {
+ d3_time = d3_time_utc;
+ var date = local.parse(string);
+ return date && date._;
+ } finally {
+ d3_time = Date;
+ }
+ };
+
+ format.toString = local.toString;
+
+ return format;
+};
+var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
+
+d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
+
+function d3_time_formatIsoNative(date) {
+ return date.toISOString();
+}
+
+d3_time_formatIsoNative.parse = function(string) {
+ return new Date(string);
+};
+
+d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
+function d3_time_interval(local, step, number) {
+
+ function round(date) {
+ var d0 = local(date), d1 = offset(d0, 1);
+ return date - d0 < d1 - date ? d0 : d1;
+ }
+
+ function ceil(date) {
+ step(date = local(new d3_time(date - 1)), 1);
+ return date;
+ }
+
+ function offset(date, k) {
+ step(date = new d3_time(+date), k);
+ return date;
+ }
+
+ function range(t0, t1, dt) {
+ var time = ceil(t0), times = [];
+ if (dt > 1) {
+ while (time < t1) {
+ if (!(number(time) % dt)) times.push(new Date(+time));
+ step(time, 1);
+ }
+ } else {
+ while (time < t1) times.push(new Date(+time)), step(time, 1);
+ }
+ return times;
+ }
+
+ function range_utc(t0, t1, dt) {
+ try {
+ d3_time = d3_time_utc;
+ var utc = new d3_time_utc();
+ utc._ = t0;
+ return range(utc, t1, dt);
+ } finally {
+ d3_time = Date;
+ }
+ }
+
+ local.floor = local;
+ local.round = round;
+ local.ceil = ceil;
+ local.offset = offset;
+ local.range = range;
+
+ var utc = local.utc = d3_time_interval_utc(local);
+ utc.floor = utc;
+ utc.round = d3_time_interval_utc(round);
+ utc.ceil = d3_time_interval_utc(ceil);
+ utc.offset = d3_time_interval_utc(offset);
+ utc.range = range_utc;
+
+ return local;
+}
+
+function d3_time_interval_utc(method) {
+ return function(date, k) {
+ try {
+ d3_time = d3_time_utc;
+ var utc = new d3_time_utc();
+ utc._ = date;
+ return method(utc, k)._;
+ } finally {
+ d3_time = Date;
+ }
+ };
+}
+d3.time.second = d3_time_interval(function(date) {
+ return new d3_time(Math.floor(date / 1e3) * 1e3);
+}, function(date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 1e3); // DST breaks setSeconds
+}, function(date) {
+ return date.getSeconds();
+});
+
+d3.time.seconds = d3.time.second.range;
+d3.time.seconds.utc = d3.time.second.utc.range;
+d3.time.minute = d3_time_interval(function(date) {
+ return new d3_time(Math.floor(date / 6e4) * 6e4);
+}, function(date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 6e4); // DST breaks setMinutes
+}, function(date) {
+ return date.getMinutes();
+});
+
+d3.time.minutes = d3.time.minute.range;
+d3.time.minutes.utc = d3.time.minute.utc.range;
+d3.time.hour = d3_time_interval(function(date) {
+ var timezone = date.getTimezoneOffset() / 60;
+ return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
+}, function(date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 36e5); // DST breaks setHours
+}, function(date) {
+ return date.getHours();
+});
+
+d3.time.hours = d3.time.hour.range;
+d3.time.hours.utc = d3.time.hour.utc.range;
+d3.time.day = d3_time_interval(function(date) {
+ return new d3_time(date.getFullYear(), date.getMonth(), date.getDate());
+}, function(date, offset) {
+ date.setDate(date.getDate() + offset);
+}, function(date) {
+ return date.getDate() - 1;
+});
+
+d3.time.days = d3.time.day.range;
+d3.time.days.utc = d3.time.day.utc.range;
+
+d3.time.dayOfYear = function(date) {
+ var year = d3.time.year(date);
+ return Math.floor((date - year) / 864e5 - (date.getTimezoneOffset() - year.getTimezoneOffset()) / 1440);
+};
+d3_time_weekdays.forEach(function(day, i) {
+ day = day.toLowerCase();
+ i = 7 - i;
+
+ var interval = d3.time[day] = d3_time_interval(function(date) {
+ (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
+ return date;
+ }, function(date, offset) {
+ date.setDate(date.getDate() + Math.floor(offset) * 7);
+ }, function(date) {
+ var day = d3.time.year(date).getDay();
+ return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
+ });
+
+ d3.time[day + "s"] = interval.range;
+ d3.time[day + "s"].utc = interval.utc.range;
+
+ d3.time[day + "OfYear"] = function(date) {
+ var day = d3.time.year(date).getDay();
+ return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7);
+ };
+});
+
+d3.time.week = d3.time.sunday;
+d3.time.weeks = d3.time.sunday.range;
+d3.time.weeks.utc = d3.time.sunday.utc.range;
+d3.time.weekOfYear = d3.time.sundayOfYear;
+d3.time.month = d3_time_interval(function(date) {
+ return new d3_time(date.getFullYear(), date.getMonth(), 1);
+}, function(date, offset) {
+ date.setMonth(date.getMonth() + offset);
+}, function(date) {
+ return date.getMonth();
+});
+
+d3.time.months = d3.time.month.range;
+d3.time.months.utc = d3.time.month.utc.range;
+d3.time.year = d3_time_interval(function(date) {
+ return new d3_time(date.getFullYear(), 0, 1);
+}, function(date, offset) {
+ date.setFullYear(date.getFullYear() + offset);
+}, function(date) {
+ return date.getFullYear();
+});
+
+d3.time.years = d3.time.year.range;
+d3.time.years.utc = d3.time.year.utc.range;
+function d3_time_scale(linear, methods, format) {
+
+ function scale(x) {
+ return linear(x);
+ }
+
+ scale.invert = function(x) {
+ return d3_time_scaleDate(linear.invert(x));
+ };
+
+ scale.domain = function(x) {
+ if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
+ linear.domain(x);
+ return scale;
+ };
+
+ scale.nice = function(m) {
+ var extent = d3_time_scaleExtent(scale.domain());
+ return scale.domain([m.floor(extent[0]), m.ceil(extent[1])]);
+ };
+
+ scale.ticks = function(m, k) {
+ var extent = d3_time_scaleExtent(scale.domain());
+ if (typeof m !== "function") {
+ var span = extent[1] - extent[0],
+ target = span / m,
+ i = d3.bisect(d3_time_scaleSteps, target);
+ if (i == d3_time_scaleSteps.length) return methods.year(extent, m);
+ if (!i) return linear.ticks(m).map(d3_time_scaleDate);
+ if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
+ m = methods[i];
+ k = m[1];
+ m = m[0].range;
+ }
+ return m(extent[0], new Date(+extent[1] + 1), k); // inclusive upper bound
+ };
+
+ scale.tickFormat = function() {
+ return format;
+ };
+
+ scale.copy = function() {
+ return d3_time_scale(linear.copy(), methods, format);
+ };
+
+ // TOOD expose d3_scale_linear_rebind?
+ return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
+}
+
+// TODO expose d3_scaleExtent?
+function d3_time_scaleExtent(domain) {
+ var start = domain[0], stop = domain[domain.length - 1];
+ return start < stop ? [start, stop] : [stop, start];
+}
+
+function d3_time_scaleDate(t) {
+ return new Date(t);
+}
+
+function d3_time_scaleFormat(formats) {
+ return function(date) {
+ var i = formats.length - 1, f = formats[i];
+ while (!f[1](date)) f = formats[--i];
+ return f[0](date);
+ };
+}
+
+function d3_time_scaleSetYear(y) {
+ var d = new Date(y, 0, 1);
+ d.setFullYear(y); // Y2K fail
+ return d;
+}
+
+function d3_time_scaleGetYear(d) {
+ var y = d.getFullYear(),
+ d0 = d3_time_scaleSetYear(y),
+ d1 = d3_time_scaleSetYear(y + 1);
+ return y + (d - d0) / (d1 - d0);
+}
+
+var d3_time_scaleSteps = [
+ 1e3, // 1-second
+ 5e3, // 5-second
+ 15e3, // 15-second
+ 3e4, // 30-second
+ 6e4, // 1-minute
+ 3e5, // 5-minute
+ 9e5, // 15-minute
+ 18e5, // 30-minute
+ 36e5, // 1-hour
+ 108e5, // 3-hour
+ 216e5, // 6-hour
+ 432e5, // 12-hour
+ 864e5, // 1-day
+ 1728e5, // 2-day
+ 6048e5, // 1-week
+ 2592e6, // 1-month
+ 7776e6, // 3-month
+ 31536e6 // 1-year
+];
+
+var d3_time_scaleLocalMethods = [
+ [d3.time.second, 1],
+ [d3.time.second, 5],
+ [d3.time.second, 15],
+ [d3.time.second, 30],
+ [d3.time.minute, 1],
+ [d3.time.minute, 5],
+ [d3.time.minute, 15],
+ [d3.time.minute, 30],
+ [d3.time.hour, 1],
+ [d3.time.hour, 3],
+ [d3.time.hour, 6],
+ [d3.time.hour, 12],
+ [d3.time.day, 1],
+ [d3.time.day, 2],
+ [d3.time.week, 1],
+ [d3.time.month, 1],
+ [d3.time.month, 3],
+ [d3.time.year, 1]
+];
+
+var d3_time_scaleLocalFormats = [
+ [d3.time.format("%Y"), function(d) { return true; }],
+ [d3.time.format("%B"), function(d) { return d.getMonth(); }],
+ [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
+ [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
+ [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
+ [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
+ [d3.time.format(":%S"), function(d) { return d.getSeconds(); }],
+ [d3.time.format(".%L"), function(d) { return d.getMilliseconds(); }]
+];
+
+var d3_time_scaleLinear = d3.scale.linear(),
+ d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
+
+d3_time_scaleLocalMethods.year = function(extent, m) {
+ return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear);
+};
+
+d3.time.scale = function() {
+ return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
+};
+var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) {
+ return [m[0].utc, m[1]];
+});
+
+var d3_time_scaleUTCFormats = [
+ [d3.time.format.utc("%Y"), function(d) { return true; }],
+ [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
+ [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
+ [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
+ [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
+ [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
+ [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds(); }],
+ [d3.time.format.utc(".%L"), function(d) { return d.getUTCMilliseconds(); }]
+];
+
+var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
+
+function d3_time_scaleUTCSetYear(y) {
+ var d = new Date(Date.UTC(y, 0, 1));
+ d.setUTCFullYear(y); // Y2K fail
+ return d;
+}
+
+function d3_time_scaleUTCGetYear(d) {
+ var y = d.getUTCFullYear(),
+ d0 = d3_time_scaleUTCSetYear(y),
+ d1 = d3_time_scaleUTCSetYear(y + 1);
+ return y + (d - d0) / (d1 - d0);
+}
+
+d3_time_scaleUTCMethods.year = function(extent, m) {
+ return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear);
+};
+
+d3.time.scale.utc = function() {
+ return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
+};
+})();
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/highlight.js b/solr-8.1.1/server/solr-webapp/webapp/libs/highlight.js
new file mode 100644
index 000000000..527c34067
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/highlight.js
@@ -0,0 +1,31 @@
+/*
+
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of highlight.js 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND 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 hljs=new function(){function l(o){return o.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]=="no-highlight"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName=="BR"){s+=1}else{if(t.nodeType==1){o.push({event:"start",offset:s,node:t});s=p(t,s);o.push({event:"stop",offset:s,node:t})}}}}return s})(q,0);return o}function j(x,v,w){var p=0;var y="";var r=[];function t(){if(x.length&&v.length){if(x[0].offset!=v[0].offset){return(x[0].offset<v[0].offset)?x:v}else{return v[0].event=="start"?x:v}}else{return x.length?x:v}}function s(A){function z(B){return" "+B.nodeName+'="'+l(B.value)+'"'}return"<"+A.nodeName+Array.prototype.map.call(A.attributes,z).join("")+">"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("</"+o.nodeName.toLowerCase()+">")}while(o!=u.node);r.splice(q,1);while(q<r.length){y+=s(r[q]);q++}}}}return y+l(w.substr(p))}function f(q){function o(s,r){return RegExp(s,"m"+(q.cI?"i":"")+(r?"g":""))}function p(y,w){if(y.compiled){return}y.compiled=true;var s=[];if(y.k){var r={};function z(A,t){t.split(" ").forEach(function(B){var C=B.split("|");r[C[0]]=[A,C[1]?Number(C[1]):1];s.push(C[0])})}y.lR=o(y.l||hljs.IR,true);if(typeof y.k=="string"){z("keyword",y.k)}else{for(var x in y.k){if(!y.k.hasOwnProperty(x)){continue}z(x,y.k[x])}}y.k=r}if(w){if(y.bWK){y.b="\\b("+s.join("|")+")\\s"}y.bR=o(y.b?y.b:"\\B|\\b");if(!y.e&&!y.eW){y.e="\\B|\\b"}if(y.e){y.eR=o(y.e)}y.tE=y.e||"";if(y.eW&&w.tE){y.tE+=(y.e?"|":"")+w.tE}}if(y.i){y.iR=o(y.i)}if(y.r===undefined){y.r=1}if(!y.c){y.c=[]}for(var v=0;v<y.c.length;v++){if(y.c[v]=="self"){y.c[v]=y}p(y.c[v],y)}if(y.starts){p(y.starts,w)}var u=[];for(var v=0;v<y.c.length;v++){u.push(y.c[v].b)}if(y.tE){u.push(y.tE)}if(y.i){u.push(y.i)}y.t=u.length?o(u.join("|"),true):{exec:function(t){return null}}}p(q)}function d(D,E){function o(r,M){for(var L=0;L<M.c.length;L++){var K=M.c[L].bR.exec(r);if(K&&K.index==0){return M.c[L]}}}function s(K,r){if(K.e&&K.eR.test(r)){return K}if(K.eW){return s(K.parent,r)}}function t(r,K){return K.i&&K.iR.test(r)}function y(L,r){var K=F.cI?r[0].toLowerCase():r[0];return L.k.hasOwnProperty(K)&&L.k[K]}function G(){var K=l(w);if(!A.k){return K}var r="";var N=0;A.lR.lastIndex=0;var L=A.lR.exec(K);while(L){r+=K.substr(N,L.index-N);var M=y(A,L);if(M){v+=M[1];r+='<span class="'+M[0]+'">'+L[0]+"</span>"}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return'<span class="'+r.language+'">'+r.value+"</span>"}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'<span class="'+L.cN+'">':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+="</span>"}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"<br>")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.ruby=function(e){var a="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g={keyword:"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include"};var c={cN:"yardoctag",b:"@[A-Za-z]+"};var k=[{cN:"comment",b:"#",e:"$",c:[c]},{cN:"comment",b:"^\\=begin",e:"^\\=end",c:[c],r:10},{cN:"comment",b:"^__END__",e:"\\n$"}];var d={cN:"subst",b:"#\\{",e:"}",l:a,k:g};var i=[e.BE,d];var b=[{cN:"string",b:"'",e:"'",c:i,r:0},{cN:"string",b:'"',e:'"',c:i,r:0},{cN:"string",b:"%[qw]?\\(",e:"\\)",c:i},{cN:"string",b:"%[qw]?\\[",e:"\\]",c:i},{cN:"string",b:"%[qw]?{",e:"}",c:i},{cN:"string",b:"%[qw]?<",e:">",c:i,r:10},{cN:"string",b:"%[qw]?/",e:"/",c:i,r:10},{cN:"string",b:"%[qw]?%",e:"%",c:i,r:10},{cN:"string",b:"%[qw]?-",e:"-",c:i,r:10},{cN:"string",b:"%[qw]?\\|",e:"\\|",c:i,r:10}];var h={cN:"function",bWK:true,e:" |$|;",k:"def",c:[{cN:"title",b:j,l:a,k:g},{cN:"params",b:"\\(",e:"\\)",l:a,k:g}].concat(k)};var f=k.concat(b.concat([{cN:"class",bWK:true,e:"$|;",k:"class module",c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(k)},h,{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:b.concat([{b:j}]),r:0},{cN:"symbol",b:a+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:k.concat([{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[e.BE,d]}]),r:0}]));d.c=f;h.c[1].c=f;return{l:a,k:g,c:f}}(hljs);hljs.LANGUAGES.diff=function(a){return{c:[{cN:"chunk",b:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",r:10},{cN:"chunk",b:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",r:10},{cN:"chunk",b:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",r:10},{cN:"header",b:"Index: ",e:"$"},{cN:"header",b:"=====",e:"=====$"},{cN:"header",b:"^\\-\\-\\-",e:"$"},{cN:"header",b:"^\\*{3} ",e:"$"},{cN:"header",b:"^\\+\\+\\+",e:"$"},{cN:"header",b:"\\*{5}",e:"\\*{5}$"},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",i:"\\n",c:[{b:"\\\\/"}]},{b:"<",e:">;",sL:"xml"}],r:0},{cN:"function",bWK:true,e:"{",k:"function",c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[a.CLCM,a.CBLCLM],i:"[\"'\\(]"}],i:"\\[|%"}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},b]}]}}(hljs);hljs.LANGUAGES.php=function(a){var e={cN:"variable",b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var b=[a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),{cN:"string",b:'b"',e:'"',c:[a.BE]},{cN:"string",b:"b'",e:"'",c:[a.BE]}];var c=[a.BNM,a.CNM];var d={cN:"title",b:a.UIR};return{cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return implements parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception php_user_filter default die require __FUNCTION__ enddeclare final try this switch continue endfor endif declare unset true false namespace trait goto instanceof insteadof __DIR__ __NAMESPACE__ __halt_compiler",c:[a.CLCM,a.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"}]},{cN:"comment",eB:true,b:"__halt_compiler.+?;",eW:true},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[a.BE]},{cN:"preprocessor",b:"<\\?php",r:10},{cN:"preprocessor",b:"\\?>"},e,{cN:"function",bWK:true,e:"{",k:"function",i:"\\$|\\[|%",c:[d,{cN:"params",b:"\\(",e:"\\)",c:["self",e,a.CBLCLM].concat(b).concat(c)}]},{cN:"class",bWK:true,e:"{",k:"class",i:"[:\\(\\$]",c:[{bWK:true,eW:true,k:"extends",c:[d]},d]},{b:"=>"}].concat(b).concat(c)}}(hljs);hljs.LANGUAGES.python=function(a){var f={cN:"prompt",b:"^(>>>|\\.\\.\\.) "};var c=[{cN:"string",b:"(u|b)?r?'''",e:"'''",c:[f],r:10},{cN:"string",b:'(u|b)?r?"""',e:'"""',c:[f],r:10},{cN:"string",b:"(u|r|ur)'",e:"'",c:[a.BE],r:10},{cN:"string",b:'(u|r|ur)"',e:'"',c:[a.BE],r:10},{cN:"string",b:"(b|br)'",e:"'",c:[a.BE]},{cN:"string",b:'(b|br)"',e:'"',c:[a.BE]}].concat([a.ASM,a.QSM]);var e={cN:"title",b:a.UIR};var d={cN:"params",b:"\\(",e:"\\)",c:["self",a.CNM,f].concat(c)};var b={bWK:true,e:":",i:"[${=;\\n]",c:[e,d],r:10};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10",built_in:"None True False Ellipsis NotImplemented"},i:"(</|->|\\?)",c:c.concat([f,a.HCM,a.inherit(b,{cN:"function",k:"def"}),a.inherit(b,{cN:"class",k:"class"}),a.CNM,{cN:"decorator",b:"@",e:"$"},{b:"\\b(print|exec)\\("}])}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-1.7.2.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-1.7.2.min.js
new file mode 100644
index 000000000..90165e90c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-1.7.2.min.js
@@ -0,0 +1,30 @@
+/*!
+
+Copyright 2014 jQuery Foundation and other contributors
+http://jquery.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.
+
+*/
+
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
+a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
+.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js
new file mode 100644
index 000000000..17cb6a83a
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js
@@ -0,0 +1,29 @@
+/*!
+
+Copyright 2014 jQuery Foundation and other contributors
+http://jquery.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.
+
+*/
+/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)
+},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-ui.min.js b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-ui.min.js
new file mode 100644
index 000000000..b09b9303c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery-ui.min.js
@@ -0,0 +1,30 @@
+/*!
+
+Copyright 2014 jQuery Foundation and other contributors
+http://jquery.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.
+
+*/
+
+/*! jQuery UI - v1.12.1 - 2017-10-31 jquery.com | jquery.org/license */
+
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var h=l+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),l=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,l=t(this),h=l.outerWidth(),c=l.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=h+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),T=e(k.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?D.left-=h:"center"===n.my[0]&&(D.left-=h/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:h,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-h,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:l,left:D.left,top:D.top,width:h,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,l,h=i.nodeName.toLowerCase();return"area"===h?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(h)?(r=!i.disabled,r&&(l=t(i).closest("fieldset")[0],l&&(r=!l.disabled))):r="a"===h?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){h.of=t,a.is(":hidden")||a.position(h)}var o,a,r,l,h=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),l=t("<div>").html(a.find(".ui-tooltip-content").html()),l.removeAttr("name").find("[name]").removeAttr("name"),l.removeAttr("id").find("[id]").removeAttr("id"),l.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(h.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/jquery.jstree.js b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery.jstree.js
new file mode 100644
index 000000000..50c176790
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/jquery.jstree.js
@@ -0,0 +1,3534 @@
+/*
+
+The MIT License (MIT)
+
+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.
+
+*/
+
+/*
+ * jsTree 1.0-rc1
+ * http://jstree.com/
+ *
+ * Copyright (c) 2010 Ivan Bozhanov (vakata.com)
+ *
+ * Dual licensed under the MIT and GPL licenses (same as jQuery):
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Date: 2010-07-01 10:51:11 +0300 (четв, 01 юли 2010) $
+ * Revision: 191 $
+ */
+
+/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */
+/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/
+
+"use strict";
+// Common functions not related to jsTree
+// decided to move them to a `vakata` "namespace"
+(function ($) {
+ $.vakata = {};
+ // CSS related functions
+ $.vakata.css = {
+ get_css : function(rule_name, delete_flag, sheet) {
+ rule_name = rule_name.toLowerCase();
+ var css_rules = sheet.cssRules || sheet.rules,
+ j = 0;
+ do {
+ if(css_rules.length && j > css_rules.length + 5) { return false; }
+ if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) {
+ if(delete_flag === true) {
+ if(sheet.removeRule) { sheet.removeRule(j); }
+ if(sheet.deleteRule) { sheet.deleteRule(j); }
+ return true;
+ }
+ else { return css_rules[j]; }
+ }
+ }
+ while (css_rules[++j]);
+ return false;
+ },
+ add_css : function(rule_name, sheet) {
+ if($.jstree.css.get_css(rule_name, false, sheet)) { return false; }
+ if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); }
+ return $.vakata.css.get_css(rule_name);
+ },
+ remove_css : function(rule_name, sheet) {
+ return $.vakata.css.get_css(rule_name, true, sheet);
+ },
+ add_sheet : function(opts) {
+ var tmp;
+ if(opts.str) {
+ tmp = document.createElement("style");
+ tmp.setAttribute('type',"text/css");
+ if(tmp.styleSheet) {
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ tmp.styleSheet.cssText = opts.str;
+ }
+ else {
+ tmp.appendChild(document.createTextNode(opts.str));
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ }
+ return tmp.sheet || tmp.styleSheet;
+ }
+ if(opts.url) {
+ if(document.createStyleSheet) {
+ try { tmp = document.createStyleSheet(opts.url); } catch (e) { }
+ }
+ else {
+ tmp = document.createElement('link');
+ tmp.rel = 'stylesheet';
+ tmp.type = 'text/css';
+ tmp.media = "all";
+ tmp.href = opts.url;
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ return tmp.styleSheet;
+ }
+ }
+ }
+ };
+})(jQuery);
+
+/*
+ * jsTree core 1.0
+ */
+(function ($) {
+ // private variables
+ var instances = [], // instance array (used by $.jstree.reference/create/focused)
+ focused_instance = -1, // the index in the instance array of the currently focused instance
+ plugins = {}, // list of included plugins
+ prepared_move = {}, // for the move plugin
+ is_ie6 = false;
+
+ // jQuery plugin wrapper (thanks to jquery UI widget function)
+ $.fn.jstree = function (settings) {
+ var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node")
+ args = Array.prototype.slice.call(arguments, 1),
+ returnValue = this;
+
+ // extend settings and allow for multiple hashes and metadata
+ if(!isMethodCall && $.meta) { args.push($.metadata.get(this).jstree); }
+ settings = !isMethodCall && args.length ? $.extend.apply(null, [true, settings].concat(args)) : settings;
+ // block calls to "private" methods
+ if(isMethodCall && settings.substring(0, 1) == '_') { return returnValue; }
+
+ // if a method call execute the method on all selected instances
+ if(isMethodCall) {
+ this.each(function() {
+ var instance = instances[$.data(this, "jstree-instance-id")],
+ methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance;
+ if(typeof methodValue !== "undefined" && (settings.indexOf("is_" === 0) || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; }
+ });
+ }
+ else {
+ this.each(function() {
+ var instance_id = $.data(this, "jstree-instance-id"),
+ s = false;
+ // if an instance already exists, destroy it first
+ if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); }
+ // push a new empty object to the instances array
+ instance_id = parseInt(instances.push({}),10) - 1;
+ // store the jstree instance id to the container element
+ $.data(this, "jstree-instance-id", instance_id);
+ // clean up all plugins
+ if(!settings) { settings = {}; }
+ settings.plugins = $.isArray(settings.plugins) ? settings.plugins : $.jstree.defaults.plugins;
+ if($.inArray("core", settings.plugins) === -1) { settings.plugins.unshift("core"); }
+
+ // only unique plugins (NOT WORKING)
+ // settings.plugins = settings.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
+
+ // extend defaults with passed data
+ s = $.extend(true, {}, $.jstree.defaults, settings);
+ s.plugins = settings.plugins;
+ $.each(plugins, function (i, val) { if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; } });
+ // push the new object to the instances array (at the same time set the default classes to the container) and init
+ instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s);
+ // init all activated plugins for this instance
+ $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; });
+ $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } });
+ // initialize the instance
+ instances[instance_id].init();
+ });
+ }
+ // return the jquery selection (or if it was a method call that returned a value - the returned value)
+ return returnValue;
+ };
+ // object to store exposed functions and objects
+ $.jstree = {
+ defaults : {
+ plugins : []
+ },
+ _focused : function () { return instances[focused_instance] || null; },
+ _reference : function (needle) {
+ // get by instance id
+ if(instances[needle]) { return instances[needle]; }
+ // get by DOM (if still no luck - return null
+ var o = $(needle);
+ if(!o.length && typeof needle === "string") { o = $("#" + needle); }
+ if(!o.length) { return null; }
+ return instances[o.closest(".jstree").data("jstree-instance-id")] || null;
+ },
+ _instance : function (index, container, settings) {
+ // for plugins to store data in
+ this.data = { core : {} };
+ this.get_settings = function () { return $.extend(true, {}, settings); };
+ this._get_settings = function () { return settings; };
+ this.get_index = function () { return index; };
+ this.get_container = function () { return container; };
+ this._set_settings = function (s) {
+ settings = $.extend(true, {}, settings, s);
+ };
+ },
+ _fn : { },
+ plugin : function (pname, pdata) {
+ pdata = $.extend({}, {
+ __init : $.noop,
+ __destroy : $.noop,
+ _fn : {},
+ defaults : false
+ }, pdata);
+ plugins[pname] = pdata;
+
+ $.jstree.defaults[pname] = pdata.defaults;
+ $.each(pdata._fn, function (i, val) {
+ val.plugin = pname;
+ val.old = $.jstree._fn[i];
+ $.jstree._fn[i] = function () {
+ var rslt,
+ func = val,
+ args = Array.prototype.slice.call(arguments),
+ evnt = new $.Event("before.jstree"),
+ rlbk = false;
+
+ // Check if function belongs to the included plugins of this instance
+ do {
+ if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; }
+ func = func.old;
+ } while(func);
+ if(!func) { return; }
+
+ // a chance to stop execution (or change arguments):
+ // * just bind to jstree.before
+ // * check the additional data object (func property)
+ // * call event.stopImmediatePropagation()
+ // * return false (or an array of arguments)
+ rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args });
+ if(rslt === false) { return; }
+ if(typeof rslt !== "undefined") { args = rslt; }
+
+ // context and function to trigger events, then finally call the function
+ if(i.indexOf("_") === 0) {
+ rslt = func.apply(this, args);
+ }
+ else {
+ rslt = func.apply(
+ $.extend({}, this, {
+ __callback : function (data) {
+ this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk });
+ },
+ __rollback : function () {
+ rlbk = this.get_rollback();
+ return rlbk;
+ },
+ __call_old : function (replace_arguments) {
+ return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) );
+ }
+ }), args);
+ }
+
+ // return the result
+ return rslt;
+ };
+ $.jstree._fn[i].old = val.old;
+ $.jstree._fn[i].plugin = pname;
+ });
+ },
+ rollback : function (rb) {
+ if(rb) {
+ if(!$.isArray(rb)) { rb = [ rb ]; }
+ $.each(rb, function (i, val) {
+ instances[val.i].set_rollback(val.h, val.d);
+ });
+ }
+ }
+ };
+ // set the prototype for all instances
+ $.jstree._fn = $.jstree._instance.prototype = {};
+
+ // css functions - used internally
+
+ // load the css when DOM is ready
+ $(function() {
+ // code is copied form jQuery ($.browser is deprecated + there is a bug in IE)
+ var u = navigator.userAgent.toLowerCase(),
+ v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
+ css_string = '' +
+ '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' +
+ '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; } ' +
+ '.jstree-rtl li { margin-left:0; margin-right:18px; } ' +
+ '.jstree > ul > li { margin-left:0px; } ' +
+ '.jstree-rtl > ul > li { margin-right:0px; } ' +
+ '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' +
+ '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' +
+ '.jstree a:focus { outline: none; } ' +
+ '.jstree a > ins { height:16px; width:16px; } ' +
+ '.jstree a > .jstree-icon { margin-right:3px; } ' +
+ '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' +
+ 'li.jstree-open > ul { display:block; } ' +
+ 'li.jstree-closed > ul { display:none; } ';
+ // Correct IE 6 (does not support the > CSS selector)
+ if(/msie/.test(u) && parseInt(v, 10) == 6) {
+ is_ie6 = true;
+ css_string += '' +
+ '.jstree li { height:18px; margin-left:0; margin-right:0; } ' +
+ '.jstree li li { margin-left:18px; } ' +
+ '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' +
+ 'li.jstree-open ul { display:block; } ' +
+ 'li.jstree-closed ul { display:none !important; } ' +
+ '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' +
+ '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' +
+ '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } ';
+ }
+ // Correct IE 7 (shifts anchor nodes onhover)
+ if(/msie/.test(u) && parseInt(v, 10) == 7) {
+ css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } ';
+ }
+ $.vakata.css.add_sheet({ str : css_string });
+ });
+
+ // core functions (open, close, create, update, delete)
+ $.jstree.plugin("core", {
+ __init : function () {
+ this.data.core.to_open = $.map($.makeArray(this.get_settings().core.initially_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace('\\/','/').replace('/','\\/'); });
+ },
+ defaults : {
+ html_titles : false,
+ animation : 500,
+ initially_open : [],
+ rtl : false,
+ strings : {
+ loading : "Loading ...",
+ new_node : "New node"
+ }
+ },
+ _fn : {
+ init : function () {
+ this.set_focus();
+ if(this._get_settings().core.rtl) {
+ this.get_container().addClass("jstree-rtl").css("direction", "rtl");
+ }
+ this.get_container().html("<ul><li class='jstree-last jstree-leaf'><ins>&#160;</ins><a class='jstree-loading' href='#'><ins class='jstree-icon'>&#160;</ins>" + this._get_settings().core.strings.loading + "</a></li></ul>");
+ this.data.core.li_height = this.get_container().find("ul li.jstree-closed, ul li.jstree-leaf").eq(0).height() || 18;
+
+ this.get_container()
+ .delegate("li > ins", "click.jstree", $.proxy(function (event) {
+ var trgt = $(event.target);
+ if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); }
+ }, this))
+ .bind("mousedown.jstree", $.proxy(function () {
+ this.set_focus(); // This used to be setTimeout(set_focus,0) - why?
+ }, this))
+ .bind("dblclick.jstree", function (event) {
+ var sel;
+ if(document.selection && document.selection.empty) { document.selection.empty(); }
+ else {
+ if(window.getSelection) {
+ sel = window.getSelection();
+ try {
+ sel.removeAllRanges();
+ sel.collapse();
+ } catch (err) { }
+ }
+ }
+ });
+ this.__callback();
+ this.load_node(-1, function () { this.loaded(); this.reopen(); });
+ },
+ destroy : function () {
+ var i,
+ n = this.get_index(),
+ s = this._get_settings(),
+ _this = this;
+
+ $.each(s.plugins, function (i, val) {
+ try { plugins[val].__destroy.apply(_this); } catch(err) { }
+ });
+ this.__callback();
+ // set focus to another instance if this one is focused
+ if(this.is_focused()) {
+ for(i in instances) {
+ if(instances.hasOwnProperty(i) && i != n) {
+ instances[i].set_focus();
+ break;
+ }
+ }
+ }
+ // if no other instance found
+ if(n === focused_instance) { focused_instance = -1; }
+ // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events
+ this.get_container()
+ .unbind(".jstree")
+ .undelegate(".jstree")
+ .removeData("jstree-instance-id")
+ .find("[class^='jstree']")
+ .andSelf()
+ .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
+ // remove the actual data
+ instances[n] = null;
+ delete instances[n];
+ },
+ save_opened : function () {
+ var _this = this;
+ this.data.core.to_open = [];
+ this.get_container().find(".jstree-open").each(function () {
+ _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace('\\/','/').replace('/','\\/'));
+ });
+ this.__callback(_this.data.core.to_open);
+ },
+ reopen : function (is_callback) {
+ var _this = this,
+ done = true,
+ current = [],
+ remaining = [];
+ if(!is_callback) { this.data.core.reopen = false; this.data.core.refreshing = true; }
+ if(this.data.core.to_open.length) {
+ $.each(this.data.core.to_open, function (i, val) {
+ if(val == "#") { return true; }
+ if($(val).length && $(val).is(".jstree-closed")) { current.push(val); }
+ else { remaining.push(val); }
+ });
+ if(current.length) {
+ this.data.core.to_open = remaining;
+ $.each(current, function (i, val) {
+ _this.open_node(val, function () { _this.reopen(true); }, true);
+ });
+ done = false;
+ }
+ }
+ if(done) {
+ // TODO: find a more elegant approach to syncronizing returning requests
+ if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); }
+ this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50);
+ this.data.core.refreshing = false;
+ }
+ },
+ refresh : function (obj) {
+ var _this = this;
+ this.save_opened();
+ if(!obj) { obj = -1; }
+ obj = this._get_node(obj);
+ if(!obj) { obj = -1; }
+ if(obj !== -1) { obj.children("UL").remove(); }
+ this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reopen(); });
+ },
+ // Dummy function to fire after the first load (so that there is a jstree.loaded event)
+ loaded : function () {
+ this.__callback();
+ },
+ // deal with focus
+ set_focus : function () {
+ var f = $.jstree._focused();
+ if(f && f !== this) {
+ f.get_container().removeClass("jstree-focused");
+ }
+ if(f !== this) {
+ this.get_container().addClass("jstree-focused");
+ focused_instance = this.get_index();
+ }
+ this.__callback();
+ },
+ is_focused : function () {
+ return focused_instance == this.get_index();
+ },
+
+ // traverse
+ _get_node : function (obj) {
+ var $obj = $(obj, this.get_container());
+ if($obj.is(".jstree") || obj == -1) { return -1; }
+ $obj = $obj.closest("li", this.get_container());
+ return $obj.length ? $obj : false;
+ },
+ _get_next : function (obj, strict) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().find("> ul > li:first-child"); }
+ if(!obj.length) { return false; }
+ if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; }
+
+ if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); }
+ else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); }
+ else { return obj.parentsUntil(".jstree","li").next("li").eq(0); }
+ },
+ _get_prev : function (obj, strict) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().find("> ul > li:last-child"); }
+ if(!obj.length) { return false; }
+ if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; }
+
+ if(obj.prev("li").length) {
+ obj = obj.prev("li").eq(0);
+ while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); }
+ return obj;
+ }
+ else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; }
+ },
+ _get_parent : function (obj) {
+ obj = this._get_node(obj);
+ if(obj == -1 || !obj.length) { return false; }
+ var o = obj.parentsUntil(".jstree", "li:eq(0)");
+ return o.length ? o : -1;
+ },
+ _get_children : function (obj) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); }
+ if(!obj.length) { return false; }
+ return obj.children("ul:eq(0)").children("li");
+ },
+ get_path : function (obj, id_mode) {
+ var p = [],
+ _this = this;
+ obj = this._get_node(obj);
+ if(obj === -1 || !obj || !obj.length) { return false; }
+ obj.parentsUntil(".jstree", "li").each(function () {
+ p.push( id_mode ? this.id : _this.get_text(this) );
+ });
+ p.reverse();
+ p.push( id_mode ? obj.attr("id") : this.get_text(obj) );
+ return p;
+ },
+
+ is_open : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); },
+ is_closed : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); },
+ is_leaf : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); },
+ // open/close
+ open_node : function (obj, callback, skip_animation) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; }
+ var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation,
+ t = this;
+ if(!this._is_loaded(obj)) {
+ obj.children("a").addClass("jstree-loading");
+ this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback);
+ }
+ else {
+ if(s) { obj.children("ul").css("display","none"); }
+ obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading");
+ if(s) { obj.children("ul").stop(true).slideDown(s, function () { this.style.display = ""; }); }
+ this.__callback({ "obj" : obj });
+ if(callback) { callback.call(); }
+ }
+ },
+ close_node : function (obj, skip_animation) {
+ obj = this._get_node(obj);
+ var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation;
+ if(!obj.length || !obj.hasClass("jstree-open")) { return false; }
+ if(s) { obj.children("ul").attr("style","display:block !important"); }
+ obj.removeClass("jstree-open").addClass("jstree-closed");
+ if(s) { obj.children("ul").stop(true).slideUp(s, function () { this.style.display = ""; }); }
+ this.__callback({ "obj" : obj });
+ },
+ toggle_node : function (obj) {
+ obj = this._get_node(obj);
+ if(obj.hasClass("jstree-closed")) { return this.open_node(obj); }
+ if(obj.hasClass("jstree-open")) { return this.close_node(obj); }
+ },
+ open_all : function (obj, original_obj) {
+ obj = obj ? this._get_node(obj) : this.get_container();
+ if(!obj || obj === -1) { obj = this.get_container(); }
+ if(original_obj) {
+ obj = obj.find("li.jstree-closed");
+ }
+ else {
+ original_obj = obj;
+ if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); }
+ else { obj = obj.find("li.jstree-closed"); }
+ }
+ var _this = this;
+ obj.each(function () {
+ var __this = this;
+ if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, original_obj); }, true); }
+ else { _this.open_node(this, false, true); }
+ });
+ // so that callback is fired AFTER all nodes are open
+ if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); }
+ },
+ close_all : function (obj) {
+ var _this = this;
+ obj = obj ? this._get_node(obj) : this.get_container();
+ if(!obj || obj === -1) { obj = this.get_container(); }
+ obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this); });
+ this.__callback({ "obj" : obj });
+ },
+ clean_node : function (obj) {
+ obj = obj && obj != -1 ? $(obj) : this.get_container();
+ obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li");
+ obj.removeClass("jstree-last")
+ .filter("li:last-child").addClass("jstree-last").end()
+ .filter(":has(li)")
+ .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");
+ obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove();
+ this.__callback({ "obj" : obj });
+ },
+ // rollback
+ get_rollback : function () {
+ this.__callback();
+ return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data };
+ },
+ set_rollback : function (html, data) {
+ this.get_container().empty().append(html);
+ this.data = data;
+ this.__callback();
+ },
+ // Dummy functions to be overwritten by any datastore plugin included
+ load_node : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); },
+ _is_loaded : function (obj) { return true; },
+
+ // Basic operations: create
+ create_node : function (obj, position, js, callback, is_loaded) {
+ obj = this._get_node(obj);
+ position = typeof position === "undefined" ? "last" : position;
+ var d = $("<li>"),
+ s = this._get_settings().core,
+ tmp;
+
+ if(obj !== -1 && !obj.length) { return false; }
+ if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; }
+
+ this.__rollback();
+
+ if(typeof js === "string") { js = { "data" : js }; }
+ if(!js) { js = {}; }
+ if(js.attr) { d.attr(js.attr); }
+ if(js.state) { d.addClass("jstree-" + js.state); }
+ if(!js.data) { js.data = s.strings.new_node; }
+ if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
+ $.each(js.data, function (i, m) {
+ tmp = $("<a>");
+ if($.isFunction(m)) { m = m.call(this, js); }
+ if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); }
+ else {
+ if(!m.attr) { m.attr = {}; }
+ if(!m.attr.href) { m.attr.href = '#'; }
+ tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title);
+ if(m.language) { tmp.addClass(m.language); }
+ }
+ tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(m.icon) {
+ if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
+ else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
+ }
+ d.append(tmp);
+ });
+ d.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(obj === -1) {
+ obj = this.get_container();
+ if(position === "before") { position = "first"; }
+ if(position === "after") { position = "last"; }
+ }
+ switch(position) {
+ case "before": obj.before(d); tmp = this._get_parent(obj); break;
+ case "after" : obj.after(d); tmp = this._get_parent(obj); break;
+ case "inside":
+ case "first" :
+ if(!obj.children("ul").length) { obj.append("<ul>"); }
+ obj.children("ul").prepend(d);
+ tmp = obj;
+ break;
+ case "last":
+ if(!obj.children("ul").length) { obj.append("<ul>"); }
+ obj.children("ul").append(d);
+ tmp = obj;
+ break;
+ default:
+ if(!obj.children("ul").length) { obj.append("<ul>"); }
+ if(!position) { position = 0; }
+ tmp = obj.children("ul").children("li").eq(position);
+ if(tmp.length) { tmp.before(d); }
+ else { obj.children("ul").append(d); }
+ tmp = obj;
+ break;
+ }
+ if(tmp === -1 || tmp.get(0) === this.get_container().get(0)) { tmp = -1; }
+ this.clean_node(tmp);
+ this.__callback({ "obj" : d, "parent" : tmp });
+ if(callback) { callback.call(this, d); }
+ return d;
+ },
+ // Basic operations: rename (deal with text)
+ get_text : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ var s = this._get_settings().core.html_titles;
+ obj = obj.children("a:eq(0)");
+ if(s) {
+ obj = obj.clone();
+ obj.children("INS").remove();
+ return obj.html();
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ return obj.nodeValue;
+ }
+ },
+ set_text : function (obj, val) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ obj = obj.children("a:eq(0)");
+ if(this._get_settings().core.html_titles) {
+ var tmp = obj.children("INS").clone();
+ obj.html(val).prepend(tmp);
+ this.__callback({ "obj" : obj, "name" : val });
+ return true;
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ this.__callback({ "obj" : obj, "name" : val });
+ return (obj.nodeValue = val);
+ }
+ },
+ rename_node : function (obj, val) {
+ obj = this._get_node(obj);
+ this.__rollback();
+ if(obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" : obj, "name" : val }); }
+ },
+ // Basic operations: deleting nodes
+ delete_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ this.__rollback();
+ var p = this._get_parent(obj), prev = this._get_prev(obj);
+ obj = obj.remove();
+ if(p !== -1 && p.find("> ul > li").length === 0) {
+ p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
+ }
+ this.clean_node(p);
+ this.__callback({ "obj" : obj, "prev" : prev });
+ return obj;
+ },
+ prepare_move : function (o, r, pos, cb, is_cb) {
+ var p = {};
+
+ p.ot = $.jstree._reference(p.o) || this;
+ p.o = p.ot._get_node(o);
+ p.r = r === - 1 ? -1 : this._get_node(r);
+ p.p = (typeof p === "undefined") ? "last" : pos; // TODO: move to a setting
+ if(!is_cb && prepared_move.o && prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.p === p.p) {
+ this.__callback(prepared_move);
+ if(cb) { cb.call(this, prepared_move); }
+ return;
+ }
+ p.ot = $.jstree._reference(p.o) || this;
+ p.rt = r === -1 ? p.ot : $.jstree._reference(p.r) || this;
+ if(p.r === -1) {
+ p.cr = -1;
+ switch(p.p) {
+ case "first":
+ case "before":
+ case "inside":
+ p.cp = 0;
+ break;
+ case "after":
+ case "last":
+ p.cp = p.rt.get_container().find(" > ul > li").length;
+ break;
+ default:
+ p.cp = p.p;
+ break;
+ }
+ }
+ else {
+ if(!/^(before|after)$/.test(p.p) && !this._is_loaded(p.r)) {
+ return this.load_node(p.r, function () { this.prepare_move(o, r, pos, cb, true); });
+ }
+ switch(p.p) {
+ case "before":
+ p.cp = p.r.index();
+ p.cr = p.rt._get_parent(p.r);
+ break;
+ case "after":
+ p.cp = p.r.index() + 1;
+ p.cr = p.rt._get_parent(p.r);
+ break;
+ case "inside":
+ case "first":
+ p.cp = 0;
+ p.cr = p.r;
+ break;
+ case "last":
+ p.cp = p.r.find(" > ul > li").length;
+ p.cr = p.r;
+ break;
+ default:
+ p.cp = p.p;
+ p.cr = p.r;
+ break;
+ }
+ }
+ p.np = p.cr == -1 ? p.rt.get_container() : p.cr;
+ p.op = p.ot._get_parent(p.o);
+ p.or = p.np.find(" > ul > li:nth-child(" + (p.cp + 1) + ")");
+
+ prepared_move = p;
+ this.__callback(prepared_move);
+ if(cb) { cb.call(this, prepared_move); }
+ },
+ check_move : function () {
+ var obj = prepared_move, ret = true;
+ if(obj.or[0] === obj.o[0]) { return false; }
+ obj.o.each(function () {
+ if(obj.r.parentsUntil(".jstree").andSelf().filter("li").index(this) !== -1) { ret = false; return false; }
+ });
+ return ret;
+ },
+ move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
+ if(!is_prepared) {
+ return this.prepare_move(obj, ref, position, function (p) {
+ this.move_node(p, false, false, is_copy, true, skip_check);
+ });
+ }
+ if(!skip_check && !this.check_move()) { return false; }
+
+ this.__rollback();
+ var o = false;
+ if(is_copy) {
+ o = obj.o.clone();
+ o.find("*[id]").andSelf().each(function () {
+ if(this.id) { this.id = "copy_" + this.id; }
+ });
+ }
+ else { o = obj.o; }
+
+ if(obj.or.length) { obj.or.before(o); }
+ else {
+ if(!obj.np.children("ul").length) { $("<ul>").appendTo(obj.np); }
+ obj.np.children("ul:eq(0)").append(o);
+ }
+
+ try {
+ obj.ot.clean_node(obj.op);
+ obj.rt.clean_node(obj.np);
+ if(!obj.op.find("> ul > li").length) {
+ obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove();
+ }
+ } catch (e) { }
+
+ if(is_copy) {
+ prepared_move.cy = true;
+ prepared_move.oc = o;
+ }
+ this.__callback(prepared_move);
+ return prepared_move;
+ },
+ _get_move : function () { return prepared_move; }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree ui plugin 1.0
+ * This plugins handles selecting/deselecting/hovering/dehovering nodes
+ */
+(function ($) {
+ $.jstree.plugin("ui", {
+ __init : function () {
+ this.data.ui.selected = $();
+ this.data.ui.last_selected = false;
+ this.data.ui.hovered = null;
+ this.data.ui.to_select = this.get_settings().ui.initially_select;
+
+ this.get_container()
+ .delegate("a", "click.jstree", $.proxy(function (event) {
+ event.preventDefault();
+ this.select_node(event.currentTarget, true, event);
+ }, this))
+ .delegate("a", "mouseenter.jstree", $.proxy(function (event) {
+ this.hover_node(event.target);
+ }, this))
+ .delegate("a", "mouseleave.jstree", $.proxy(function (event) {
+ this.dehover_node(event.target);
+ }, this))
+ .bind("reopen.jstree", $.proxy(function () {
+ this.reselect();
+ }, this))
+ .bind("get_rollback.jstree", $.proxy(function () {
+ this.dehover_node();
+ this.save_selected();
+ }, this))
+ .bind("set_rollback.jstree", $.proxy(function () {
+ this.reselect();
+ }, this))
+ .bind("close_node.jstree", $.proxy(function (event, data) {
+ var s = this._get_settings().ui,
+ obj = this._get_node(data.rslt.obj),
+ clk = (obj && obj.length) ? obj.children("ul").find(".jstree-clicked") : $(),
+ _this = this;
+ if(s.selected_parent_close === false || !clk.length) { return; }
+ clk.each(function () {
+ _this.deselect_node(this);
+ if(s.selected_parent_close === "select_parent") { _this.select_node(obj); }
+ });
+ }, this))
+ .bind("delete_node.jstree", $.proxy(function (event, data) {
+ var s = this._get_settings().ui.select_prev_on_delete,
+ obj = this._get_node(data.rslt.obj),
+ clk = (obj && obj.length) ? obj.find(".jstree-clicked") : [],
+ _this = this;
+ clk.each(function () { _this.deselect_node(this); });
+ if(s && clk.length) { this.select_node(data.rslt.prev); }
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (event, data) {
+ if(data.rslt.cy) {
+ data.rslt.oc.find(".jstree-clicked").removeClass("jstree-clicked");
+ }
+ }, this));
+ },
+ defaults : {
+ select_limit : -1, // 0, 1, 2 ... or -1 for unlimited
+ select_multiple_modifier : "ctrl", // on, or ctrl, shift, alt
+ selected_parent_close : "select_parent", // false, "deselect", "select_parent"
+ select_prev_on_delete : true,
+ disable_selecting_children : false,
+ initially_select : []
+ },
+ _fn : {
+ _get_node : function (obj, allow_multiple) {
+ if(typeof obj === "undefined" || obj === null) { return allow_multiple ? this.data.ui.selected : this.data.ui.last_selected; }
+ var $obj = $(obj, this.get_container());
+ if($obj.is(".jstree") || obj == -1) { return -1; }
+ $obj = $obj.closest("li", this.get_container());
+ return $obj.length ? $obj : false;
+ },
+ save_selected : function () {
+ var _this = this;
+ this.data.ui.to_select = [];
+ this.data.ui.selected.each(function () { _this.data.ui.to_select.push("#" + this.id.toString().replace(/^#/,"").replace('\\/','/').replace('/','\\/')); });
+ this.__callback(this.data.ui.to_select);
+ },
+ reselect : function () {
+ var _this = this,
+ s = this.data.ui.to_select;
+ s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace('\\/','/').replace('/','\\/'); });
+ this.deselect_all();
+ $.each(s, function (i, val) { if(val && val !== "#") { _this.select_node(val); } });
+ this.__callback();
+ },
+ refresh : function (obj) {
+ this.save_selected();
+ return this.__call_old();
+ },
+ hover_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ //if(this.data.ui.hovered && obj.get(0) === this.data.ui.hovered.get(0)) { return; }
+ if(!obj.hasClass("jstree-hovered")) { this.dehover_node(); }
+ this.data.ui.hovered = obj.children("a").addClass("jstree-hovered").parent();
+ this.__callback({ "obj" : obj });
+ },
+ dehover_node : function () {
+ var obj = this.data.ui.hovered, p;
+ if(!obj || !obj.length) { return false; }
+ p = obj.children("a").removeClass("jstree-hovered").parent();
+ if(this.data.ui.hovered[0] === p[0]) { this.data.ui.hovered = null; }
+ this.__callback({ "obj" : obj });
+ },
+ select_node : function (obj, check, e) {
+ obj = this._get_node(obj);
+ if(obj == -1 || !obj || !obj.length) { return false; }
+ var s = this._get_settings().ui,
+ is_multiple = (s.select_multiple_modifier == "on" || (s.select_multiple_modifier !== false && e && e[s.select_multiple_modifier + "Key"])),
+ is_selected = this.is_selected(obj),
+ proceed = true;
+ if(check) {
+ if(s.disable_selecting_children && is_multiple && obj.parents("li", this.get_container()).children(".jstree-clicked").length) {
+ return false;
+ }
+ proceed = false;
+ switch(!0) {
+ case (is_selected && !is_multiple):
+ this.deselect_all();
+ is_selected = false;
+ proceed = true;
+ break;
+ case (!is_selected && !is_multiple):
+ if(s.select_limit == -1 || s.select_limit > 0) {
+ this.deselect_all();
+ proceed = true;
+ }
+ break;
+ case (is_selected && is_multiple):
+ this.deselect_node(obj);
+ break;
+ case (!is_selected && is_multiple):
+ if(s.select_limit == -1 || this.data.ui.selected.length + 1 <= s.select_limit) {
+ proceed = true;
+ }
+ break;
+ }
+ }
+ if(proceed && !is_selected) {
+ obj.children("a").addClass("jstree-clicked");
+ this.data.ui.selected = this.data.ui.selected.add(obj);
+ this.data.ui.last_selected = obj;
+ this.__callback({ "obj" : obj });
+ }
+ },
+ deselect_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(this.is_selected(obj)) {
+ obj.children("a").removeClass("jstree-clicked");
+ this.data.ui.selected = this.data.ui.selected.not(obj);
+ if(this.data.ui.last_selected.get(0) === obj.get(0)) { this.data.ui.last_selected = this.data.ui.selected.eq(0); }
+ this.__callback({ "obj" : obj });
+ }
+ },
+ toggle_select : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(this.is_selected(obj)) { this.deselect_node(obj); }
+ else { this.select_node(obj); }
+ },
+ is_selected : function (obj) { return this.data.ui.selected.index(this._get_node(obj)) >= 0; },
+ get_selected : function (context) {
+ return context ? $(context).find(".jstree-clicked").parent() : this.data.ui.selected;
+ },
+ deselect_all : function (context) {
+ if(context) { $(context).find(".jstree-clicked").removeClass("jstree-clicked"); }
+ else { this.get_container().find(".jstree-clicked").removeClass("jstree-clicked"); }
+ this.data.ui.selected = $([]);
+ this.data.ui.last_selected = false;
+ this.__callback();
+ }
+ }
+ });
+ // include the selection plugin by default
+ $.jstree.defaults.plugins.push("ui");
+})(jQuery);
+//*/
+
+/*
+ * jsTree CRRM plugin 1.0
+ * Handles creating/renaming/removing/moving nodes by user interaction.
+ */
+(function ($) {
+ $.jstree.plugin("crrm", {
+ __init : function () {
+ this.get_container()
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ if(this._get_settings().crrm.move.open_onmove) {
+ var t = this;
+ data.rslt.np.parentsUntil(".jstree").andSelf().filter(".jstree-closed").each(function () {
+ t.open_node(this, false, true);
+ });
+ }
+ }, this));
+ },
+ defaults : {
+ input_width_limit : 200,
+ move : {
+ always_copy : false, // false, true or "multitree"
+ open_onmove : true,
+ default_position : "last",
+ check_move : function (m) { return true; }
+ }
+ },
+ _fn : {
+ _show_input : function (obj, callback) {
+ obj = this._get_node(obj);
+ var rtl = this._get_settings().core.rtl,
+ w = this._get_settings().crrm.input_width_limit,
+ w1 = obj.children("ins").width(),
+ w2 = obj.find("> a:visible > ins").width() * obj.find("> a:visible > ins").length,
+ t = this.get_text(obj),
+ h1 = $("<div>", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"),
+ h2 = obj.css("position","relative").append(
+ $("<input>", {
+ "value" : t,
+ // "size" : t.length,
+ "css" : {
+ "padding" : "0",
+ "border" : "1px solid silver",
+ "position" : "absolute",
+ "left" : (rtl ? "auto" : (w1 + w2 + 4) + "px"),
+ "right" : (rtl ? (w1 + w2 + 4) + "px" : "auto"),
+ "top" : "0px",
+ "height" : (this.data.core.li_height - 2) + "px",
+ "lineHeight" : (this.data.core.li_height - 2) + "px",
+ "width" : "150px" // will be set a bit further down
+ },
+ "blur" : $.proxy(function () {
+ var i = obj.children("input"),
+ v = i.val();
+ if(v === "") { v = t; }
+ i.remove(); // rollback purposes
+ this.set_text(obj,t); // rollback purposes
+ this.rename_node(obj, v);
+ callback.call(this, obj, v, t);
+ obj.css("position","");
+ }, this),
+ "keyup" : function (event) {
+ var key = event.keyCode || event.which;
+ if(key == 27) { this.value = t; this.blur(); return; }
+ else if(key == 13) { this.blur(); return; }
+ else {
+ h2.width(Math.min(h1.text("pW" + this.value).width(),w));
+ }
+ }
+ })
+ ).children("input");
+ this.set_text(obj, "");
+ h1.css({
+ fontFamily : h2.css('fontFamily') || '',
+ fontSize : h2.css('fontSize') || '',
+ fontWeight : h2.css('fontWeight') || '',
+ fontStyle : h2.css('fontStyle') || '',
+ fontStretch : h2.css('fontStretch') || '',
+ fontVariant : h2.css('fontVariant') || '',
+ letterSpacing : h2.css('letterSpacing') || '',
+ wordSpacing : h2.css('wordSpacing') || ''
+ });
+ h2.width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
+ },
+ rename : function (obj) {
+ obj = this._get_node(obj);
+ this.__rollback();
+ var f = this.__callback;
+ this._show_input(obj, function (obj, new_name, old_name) {
+ f.call(this, { "obj" : obj, "new_name" : new_name, "old_name" : old_name });
+ });
+ },
+ create : function (obj, position, js, callback, skip_rename) {
+ var t, _this = this;
+ obj = this._get_node(obj);
+ if(!obj) { obj = -1; }
+ this.__rollback();
+ t = this.create_node(obj, position, js, function (t) {
+ var p = this._get_parent(t),
+ pos = $(t).index();
+ if(callback) { callback.call(this, t); }
+ if(p.length && p.hasClass("jstree-closed")) { this.open_node(p, false, true); }
+ if(!skip_rename) {
+ this._show_input(t, function (obj, new_name, old_name) {
+ _this.__callback({ "obj" : obj, "name" : new_name, "parent" : p, "position" : pos });
+ });
+ }
+ else { _this.__callback({ "obj" : t, "name" : this.get_text(t), "parent" : p, "position" : pos }); }
+ });
+ return t;
+ },
+ remove : function (obj) {
+ obj = this._get_node(obj, true);
+ this.__rollback();
+ this.delete_node(obj);
+ this.__callback({ "obj" : obj });
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var s = this._get_settings().crrm.move;
+ if(!s.check_move.call(this, this._get_move())) { return false; }
+ return true;
+ },
+ move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
+ var s = this._get_settings().crrm.move;
+ if(!is_prepared) {
+ if(!position) { position = s.default_position; }
+ if(position === "inside" && !s.default_position.match(/^(before|after)$/)) { position = s.default_position; }
+ return this.__call_old(true, obj, ref, position, is_copy, false, skip_check);
+ }
+ // if the move is already prepared
+ if(s.always_copy === true || (s.always_copy === "multitree" && obj.rt.get_index() !== obj.ot.get_index() )) {
+ is_copy = true;
+ }
+ this.__call_old(true, obj, ref, position, is_copy, true, skip_check);
+ },
+
+ cut : function (obj) {
+ obj = this._get_node(obj);
+ this.data.crrm.cp_nodes = false;
+ this.data.crrm.ct_nodes = false;
+ if(!obj || !obj.length) { return false; }
+ this.data.crrm.ct_nodes = obj;
+ },
+ copy : function (obj) {
+ obj = this._get_node(obj);
+ this.data.crrm.cp_nodes = false;
+ this.data.crrm.ct_nodes = false;
+ if(!obj || !obj.length) { return false; }
+ this.data.crrm.cp_nodes = obj;
+ },
+ paste : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj || !obj.length) { return false; }
+ if(!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; }
+ if(this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodes, obj); }
+ if(this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodes, obj, false, true); }
+ this.data.crrm.cp_nodes = false;
+ this.data.crrm.ct_nodes = false;
+ }
+ }
+ });
+ // include the crr plugin by default
+ $.jstree.defaults.plugins.push("crrm");
+})(jQuery);
+
+/*
+ * jsTree themes plugin 1.0
+ * Handles loading and setting themes, as well as detecting path to themes, etc.
+ */
+(function ($) {
+ var themes_loaded = [];
+ // this variable stores the path to the themes folder - if left as false - it will be autodetected
+ $.jstree._themes = false;
+ $.jstree.plugin("themes", {
+ __init : function () {
+ this.get_container()
+ .bind("init.jstree", $.proxy(function () {
+ var s = this._get_settings().themes;
+ this.data.themes.dots = s.dots;
+ this.data.themes.icons = s.icons;
+ //alert(s.dots);
+ this.set_theme(s.theme, s.url);
+ }, this))
+ .bind("loaded.jstree", $.proxy(function () {
+ // bound here too, as simple HTML tree's won't honor dots & icons otherwise
+ if(!this.data.themes.dots) { this.hide_dots(); }
+ else { this.show_dots(); }
+ if(!this.data.themes.icons) { this.hide_icons(); }
+ else { this.show_icons(); }
+ }, this));
+ },
+ defaults : {
+ theme : "default",
+ url : false,
+ dots : true,
+ icons : true
+ },
+ _fn : {
+ set_theme : function (theme_name, theme_url) {
+ if(!theme_name) { return false; }
+ if(!theme_url) { theme_url = $.jstree._themes + theme_name + '/style.css'; }
+ if($.inArray(theme_url, themes_loaded) == -1) {
+ $.vakata.css.add_sheet({ "url" : theme_url, "rel" : "jstree" });
+ themes_loaded.push(theme_url);
+ }
+ if(this.data.themes.theme != theme_name) {
+ this.get_container().removeClass('jstree-' + this.data.themes.theme);
+ this.data.themes.theme = theme_name;
+ }
+ this.get_container().addClass('jstree-' + theme_name);
+ if(!this.data.themes.dots) { this.hide_dots(); }
+ else { this.show_dots(); }
+ if(!this.data.themes.icons) { this.hide_icons(); }
+ else { this.show_icons(); }
+ this.__callback();
+ },
+ get_theme : function () { return this.data.themes.theme; },
+
+ show_dots : function () { this.data.themes.dots = true; this.get_container().children("ul").removeClass("jstree-no-dots"); },
+ hide_dots : function () { this.data.themes.dots = false; this.get_container().children("ul").addClass("jstree-no-dots"); },
+ toggle_dots : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
+
+ show_icons : function () { this.data.themes.icons = true; this.get_container().children("ul").removeClass("jstree-no-icons"); },
+ hide_icons : function () { this.data.themes.icons = false; this.get_container().children("ul").addClass("jstree-no-icons"); },
+ toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }
+ }
+ });
+ // autodetect themes path
+ $(function () {
+ if($.jstree._themes === false) {
+ $("script").each(function () {
+ if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) {
+ $.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + 'themes/';
+ return false;
+ }
+ });
+ }
+ if($.jstree._themes === false) { $.jstree._themes = "themes/"; }
+ });
+ // include the themes plugin by default
+ $.jstree.defaults.plugins.push("themes");
+})(jQuery);
+//*/
+
+/*
+ * jsTree hotkeys plugin 1.0
+ * Enables keyboard navigation for all tree instances
+ * Depends on the jstree ui & jquery hotkeys plugins
+ */
+(function ($) {
+ var bound = [];
+ function exec(i, event) {
+ var f = $.jstree._focused(), tmp;
+ if(f && f.data && f.data.hotkeys && f.data.hotkeys.enabled) {
+ tmp = f._get_settings().hotkeys[i];
+ if(tmp) { return tmp.call(f, event); }
+ }
+ }
+ $.jstree.plugin("hotkeys", {
+ __init : function () {
+ if(typeof $.hotkeys === "undefined") { throw "jsTree hotkeys: jQuery hotkeys plugin not included."; }
+ if(!this.data.ui) { throw "jsTree hotkeys: jsTree UI plugin not included."; }
+ $.each(this._get_settings().hotkeys, function (i, val) {
+ if($.inArray(i, bound) == -1) {
+ $(document).bind("keydown", i, function (event) { return exec(i, event); });
+ bound.push(i);
+ }
+ });
+ this.enable_hotkeys();
+ },
+ defaults : {
+ "up" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_prev(o));
+ return false;
+ },
+ "down" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_next(o));
+ return false;
+ },
+ "left" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o) {
+ if(o.hasClass("jstree-open")) { this.close_node(o); }
+ else { this.hover_node(this._get_prev(o)); }
+ }
+ return false;
+ },
+ "right" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o && o.length) {
+ if(o.hasClass("jstree-closed")) { this.open_node(o); }
+ else { this.hover_node(this._get_next(o)); }
+ }
+ return false;
+ },
+ "space" : function () {
+ if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").click(); }
+ return false;
+ },
+ "ctrl+space" : function (event) {
+ event.type = "click";
+ if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); }
+ return false;
+ },
+ "f2" : function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected); },
+ "del" : function () { this.remove(this.data.ui.hovered || this._get_node(null)); }
+ },
+ _fn : {
+ enable_hotkeys : function () {
+ this.data.hotkeys.enabled = true;
+ },
+ disable_hotkeys : function () {
+ this.data.hotkeys.enabled = false;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree JSON 1.0
+ * The JSON data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.jstree.plugin("json_data", {
+ defaults : {
+ data : false,
+ ajax : false,
+ correct_state : true,
+ progressive_render : false
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_json(obj, function () { _this.__callback({ "obj" : obj }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ var s = this._get_settings().json_data, d;
+ obj = this._get_node(obj);
+ if(obj && obj !== -1 && s.progressive_render && !obj.is(".jstree-open, .jstree-leaf") && obj.children("ul").children("li").length === 0 && obj.data("jstree-children")) {
+ d = this._parse_json(obj.data("jstree-children"));
+ if(d) {
+ obj.append(d);
+ $.removeData(obj, "jstree-children");
+ }
+ this.clean_node(obj);
+ return true;
+ }
+ return obj == -1 || !obj || !s.ajax || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
+ },
+ load_node_json : function (obj, s_call, e_call) {
+ var s = this.get_settings().json_data, d,
+ error_func = function () {},
+ success_func = function () {};
+ obj = this._get_node(obj);
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ d = this._parse_json(s.data);
+ if(d) {
+ this.get_container().children("ul").empty().append(d.children());
+ this.clean_node();
+ }
+ else {
+ if(s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().json_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj != -1 && obj.length) {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(t === "success" && s.correct_state) { obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().json_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d === "" || (!$.isArray(d) && !$.isPlainObject(d))) {
+ return error_func.call(this, x, t, "");
+ }
+ d = this._parse_json(d);
+ if(d) {
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.append(d).children(".jstree-loading").removeClass("jstree-loading"); obj.data("jstree-is-loading",false); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj === -1 || !obj) {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(s.correct_state) {
+ obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "json"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ },
+ _parse_json : function (js, is_callback) {
+ var d = false,
+ p = this._get_settings(),
+ s = p.json_data,
+ t = p.core.html_titles,
+ tmp, i, j, ul1, ul2;
+
+ if(!js) { return d; }
+ if($.isFunction(js)) {
+ js = js.call(this);
+ }
+ if($.isArray(js)) {
+ d = $();
+ if(!js.length) { return false; }
+ for(i = 0, j = js.length; i < j; i++) {
+ tmp = this._parse_json(js[i], true);
+ if(tmp.length) { d = d.add(tmp); }
+ }
+ }
+ else {
+ if(typeof js == "string") { js = { data : js }; }
+ if(!js.data && js.data !== "") { return d; }
+ d = $("<li>");
+ if(js.attr) { d.attr(js.attr); }
+ if(js.metadata) { d.data("jstree", js.metadata); }
+ if(js.state) { d.addClass("jstree-" + js.state); }
+ if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
+ $.each(js.data, function (i, m) {
+ tmp = $("<a>");
+ if($.isFunction(m)) { m = m.call(this, js); }
+ if(typeof m == "string") { tmp.attr('href','#')[ t ? "html" : "text" ](m); }
+ else {
+ if(!m.attr) { m.attr = {}; }
+ if(!m.attr.href) { m.attr.href = '#'; }
+ tmp.attr(m.attr)[ t ? "html" : "text" ](m.title);
+ if(m.language) { tmp.addClass(m.language); }
+ }
+ tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(!m.icon && js.icon) { m.icon = js.icon; }
+ if(m.icon) {
+ if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
+ else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
+ }
+ d.append(tmp);
+ });
+ d.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(js.children) {
+ if(s.progressive_render && js.state !== "open") {
+ d.addClass("jstree-closed").data("jstree-children", js.children);
+ }
+ else {
+ if($.isFunction(js.children)) {
+ js.children = js.children.call(this, js);
+ }
+ if($.isArray(js.children) && js.children.length) {
+ tmp = this._parse_json(js.children, true);
+ if(tmp.length) {
+ ul2 = $("<ul>");
+ ul2.append(tmp);
+ d.append(ul2);
+ }
+ }
+ }
+ }
+ }
+ if(!is_callback) {
+ ul1 = $("<ul>");
+ ul1.append(d);
+ d = ul1;
+ }
+ return d;
+ },
+ get_json : function (obj, li_attr, a_attr, is_callback) {
+ var result = [],
+ s = this._get_settings(),
+ _this = this,
+ tmp1, tmp2, li, a, t, lang;
+ obj = this._get_node(obj);
+ if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
+ li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
+ if(!is_callback && this.data.types) { li_attr.push(s.types.type_attr); }
+ a_attr = $.isArray(a_attr) ? a_attr : [ ];
+
+ obj.each(function () {
+ li = $(this);
+ tmp1 = { data : [] };
+ if(li_attr.length) { tmp1.attr = { }; }
+ $.each(li_attr, function (i, v) {
+ tmp2 = li.attr(v);
+ if(tmp2 && tmp2.length && tmp2.replace(/jstree[^ ]*|$/ig,'').length) {
+ tmp1.attr[v] = tmp2.replace(/jstree[^ ]*|$/ig,'');
+ }
+ });
+ if(li.hasClass("jstree-open")) { tmp1.state = "open"; }
+ if(li.hasClass("jstree-closed")) { tmp1.state = "closed"; }
+ a = li.children("a");
+ a.each(function () {
+ t = $(this);
+ if(
+ a_attr.length ||
+ $.inArray("languages", s.plugins) !== -1 ||
+ t.children("ins").get(0).style.backgroundImage.length ||
+ (t.children("ins").get(0).className && t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').length)
+ ) {
+ lang = false;
+ if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) {
+ $.each(s.languages, function (l, lv) {
+ if(t.hasClass(lv)) {
+ lang = lv;
+ return false;
+ }
+ });
+ }
+ tmp2 = { attr : { }, title : _this.get_text(t, lang) };
+ $.each(a_attr, function (k, z) {
+ tmp1.attr[z] = (t.attr(z) || "").replace(/jstree[^ ]*|$/ig,'');
+ });
+ $.each(s.languages, function (k, z) {
+ if(t.hasClass(z)) { tmp2.language = z; return true; }
+ });
+ if(t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) {
+ tmp2.icon = t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"");
+ }
+ if(t.children("ins").get(0).style.backgroundImage.length) {
+ tmp2.icon = t.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","");
+ }
+ }
+ else {
+ tmp2 = _this.get_text(t);
+ }
+ if(a.length > 1) { tmp1.data.push(tmp2); }
+ else { tmp1.data = tmp2; }
+ });
+ li = li.find("> ul > li");
+ if(li.length) { tmp1.children = _this.get_json(li, li_attr, a_attr, true); }
+ result.push(tmp1);
+ });
+ return result;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree languages plugin 1.0
+ * Adds support for multiple language versions in one tree
+ * This basically allows for many titles coexisting in one node, but only one of them being visible at any given time
+ * This is useful for maintaining the same structure in many languages (hence the name of the plugin)
+ */
+(function ($) {
+ $.jstree.plugin("languages", {
+ __init : function () { this._load_css(); },
+ defaults : [],
+ _fn : {
+ set_lang : function (i) {
+ var langs = this._get_settings().languages,
+ st = false,
+ selector = ".jstree-" + this.get_index() + ' a';
+ if(!$.isArray(langs) || langs.length === 0) { return false; }
+ if($.inArray(i,langs) == -1) {
+ if(!!langs[i]) { i = langs[i]; }
+ else { return false; }
+ }
+ if(i == this.data.languages.current_language) { return true; }
+ st = $.vakata.css.get_css(selector + "." + this.data.languages.current_language, false, this.data.languages.language_css);
+ if(st !== false) { st.style.display = "none"; }
+ st = $.vakata.css.get_css(selector + "." + i, false, this.data.languages.language_css);
+ if(st !== false) { st.style.display = ""; }
+ this.data.languages.current_language = i;
+ this.__callback(i);
+ return true;
+ },
+ get_lang : function () {
+ return this.data.languages.current_language;
+ },
+ get_text : function (obj, lang) {
+ obj = this._get_node(obj) || this.data.ui.last_selected;
+ if(!obj.size()) { return false; }
+ var langs = this._get_settings().languages,
+ s = this._get_settings().core.html_titles;
+ if($.isArray(langs) && langs.length) {
+ lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
+ obj = obj.children("a." + lang);
+ }
+ else { obj = obj.children("a:eq(0)"); }
+ if(s) {
+ obj = obj.clone();
+ obj.children("INS").remove();
+ return obj.html();
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ return obj.nodeValue;
+ }
+ },
+ set_text : function (obj, val, lang) {
+ obj = this._get_node(obj) || this.data.ui.last_selected;
+ if(!obj.size()) { return false; }
+ var langs = this._get_settings().languages,
+ s = this._get_settings().core.html_titles,
+ tmp;
+ if($.isArray(langs) && langs.length) {
+ lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
+ obj = obj.children("a." + lang);
+ }
+ else { obj = obj.children("a:eq(0)"); }
+ if(s) {
+ tmp = obj.children("INS").clone();
+ obj.html(val).prepend(tmp);
+ this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
+ return true;
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
+ return (obj.nodeValue = val);
+ }
+ },
+ _load_css : function () {
+ var langs = this._get_settings().languages,
+ str = "/* languages css */",
+ selector = ".jstree-" + this.get_index() + ' a',
+ ln;
+ if($.isArray(langs) && langs.length) {
+ this.data.languages.current_language = langs[0];
+ for(ln = 0; ln < langs.length; ln++) {
+ str += selector + "." + langs[ln] + " {";
+ if(langs[ln] != this.data.languages.current_language) { str += " display:none; "; }
+ str += " } ";
+ }
+ this.data.languages.language_css = $.vakata.css.add_sheet({ 'str' : str });
+ }
+ },
+ create_node : function (obj, position, js, callback) {
+ var t = this.__call_old(true, obj, position, js, function (t) {
+ var langs = this._get_settings().languages,
+ a = t.children("a"),
+ ln;
+ if($.isArray(langs) && langs.length) {
+ for(ln = 0; ln < langs.length; ln++) {
+ if(!a.is("." + langs[ln])) {
+ t.append(a.eq(0).clone().removeClass(langs.join(" ")).addClass(langs[ln]));
+ }
+ }
+ a.not("." + langs.join(", .")).remove();
+ }
+ if(callback) { callback.call(this, t); }
+ });
+ return t;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree cookies plugin 1.0
+ * Stores the currently opened/selected nodes in a cookie and then restores them
+ * Depends on the jquery.cookie plugin
+ */
+(function ($) {
+ $.jstree.plugin("cookies", {
+ __init : function () {
+ if(typeof $.cookie === "undefined") { throw "jsTree cookie: jQuery cookie plugin not included."; }
+
+ var s = this._get_settings().cookies,
+ tmp;
+ if(!!s.save_opened) {
+ tmp = $.cookie(s.save_opened);
+ if(tmp && tmp.length) { this.data.core.to_open = tmp.split(","); }
+ }
+ if(!!s.save_selected) {
+ tmp = $.cookie(s.save_selected);
+ if(tmp && tmp.length && this.data.ui) { this.data.ui.to_select = tmp.split(","); }
+ }
+ this.get_container()
+ .one( ( this.data.ui ? "reselect" : "reopen" ) + ".jstree", $.proxy(function () {
+ this.get_container()
+ .bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree", $.proxy(function (e) {
+ if(this._get_settings().cookies.auto_save) { this.save_cookie((e.handleObj.namespace + e.handleObj.type).replace("jstree","")); }
+ }, this));
+ }, this));
+ },
+ defaults : {
+ save_opened : "jstree_open",
+ save_selected : "jstree_select",
+ auto_save : true,
+ cookie_options : {}
+ },
+ _fn : {
+ save_cookie : function (c) {
+ if(this.data.core.refreshing) { return; }
+ var s = this._get_settings().cookies;
+ if(!c) { // if called manually and not by event
+ if(s.save_opened) {
+ this.save_opened();
+ $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
+ }
+ if(s.save_selected && this.data.ui) {
+ this.save_selected();
+ $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
+ }
+ return;
+ }
+ switch(c) {
+ case "open_node":
+ case "close_node":
+ if(!!s.save_opened) {
+ this.save_opened();
+ $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
+ }
+ break;
+ case "select_node":
+ case "deselect_node":
+ if(!!s.save_selected && this.data.ui) {
+ this.save_selected();
+ $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
+ }
+ break;
+ }
+ }
+ }
+ });
+ // include cookies by default
+ $.jstree.defaults.plugins.push("cookies");
+})(jQuery);
+//*/
+
+/*
+ * jsTree sort plugin 1.0
+ * Sorts items alphabetically (or using any other function)
+ */
+(function ($) {
+ $.jstree.plugin("sort", {
+ __init : function () {
+ this.get_container()
+ .bind("load_node.jstree", $.proxy(function (e, data) {
+ var obj = this._get_node(data.rslt.obj);
+ obj = obj === -1 ? this.get_container().children("ul") : obj.children("ul");
+ this.sort(obj);
+ }, this))
+ .bind("rename_node.jstree", $.proxy(function (e, data) {
+ this.sort(data.rslt.obj.parent());
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ var m = data.rslt.np == -1 ? this.get_container() : data.rslt.np;
+ this.sort(m.children("ul"));
+ }, this));
+ },
+ defaults : function (a, b) { return this.get_text(a) > this.get_text(b) ? 1 : -1; },
+ _fn : {
+ sort : function (obj) {
+ var s = this._get_settings().sort,
+ t = this;
+ obj.append($.makeArray(obj.children("li")).sort($.proxy(s, t)));
+ obj.find("> li > ul").each(function() { t.sort($(this)); });
+ this.clean_node(obj);
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree DND plugin 1.0
+ * Drag and drop plugin for moving/copying nodes
+ */
+(function ($) {
+ var o = false,
+ r = false,
+ m = false,
+ sli = false,
+ sti = false,
+ dir1 = false,
+ dir2 = false;
+ $.vakata.dnd = {
+ is_down : false,
+ is_drag : false,
+ helper : false,
+ scroll_spd : 10,
+ init_x : 0,
+ init_y : 0,
+ threshold : 5,
+ user_data : {},
+
+ drag_start : function (e, data, html) {
+ if($.vakata.dnd.is_drag) { $.vakata.drag_stop({}); }
+ try {
+ e.currentTarget.unselectable = "on";
+ e.currentTarget.onselectstart = function() { return false; };
+ if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; }
+ } catch(err) { }
+ $.vakata.dnd.init_x = e.pageX;
+ $.vakata.dnd.init_y = e.pageY;
+ $.vakata.dnd.user_data = data;
+ $.vakata.dnd.is_down = true;
+ $.vakata.dnd.helper = $("<div id='vakata-dragged'>").html(html).css("opacity", "0.75");
+ $(document).bind("mousemove", $.vakata.dnd.drag);
+ $(document).bind("mouseup", $.vakata.dnd.drag_stop);
+ return false;
+ },
+ drag : function (e) {
+ if(!$.vakata.dnd.is_down) { return; }
+ if(!$.vakata.dnd.is_drag) {
+ if(Math.abs(e.pageX - $.vakata.dnd.init_x) > 5 || Math.abs(e.pageY - $.vakata.dnd.init_y) > 5) {
+ $.vakata.dnd.helper.appendTo("body");
+ $.vakata.dnd.is_drag = true;
+ $(document).triggerHandler("drag_start.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ }
+ else { return; }
+ }
+
+ // maybe use a scrolling parent element instead of document?
+ if(e.type === "mousemove") { // thought of adding scroll in order to move the helper, but mouse poisition is n/a
+ var d = $(document), t = d.scrollTop(), l = d.scrollLeft();
+ if(e.pageY - t < 20) {
+ if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
+ if(!sti) { dir1 = "up"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() - $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
+ }
+ if($(window).height() - (e.pageY - t) < 20) {
+ if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
+ if(!sti) { dir1 = "down"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() + $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
+ }
+
+ if(e.pageX - l < 20) {
+ if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
+ if(!sli) { dir2 = "left"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() - $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
+ }
+ if($(window).width() - (e.pageX - l) < 20) {
+ if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
+ if(!sli) { dir2 = "right"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() + $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
+ }
+ }
+
+ $.vakata.dnd.helper.css({ left : (e.pageX + 5) + "px", top : (e.pageY + 10) + "px" });
+ $(document).triggerHandler("drag.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ },
+ drag_stop : function (e) {
+ $(document).unbind("mousemove", $.vakata.dnd.drag);
+ $(document).unbind("mouseup", $.vakata.dnd.drag_stop);
+ $(document).triggerHandler("drag_stop.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ $.vakata.dnd.helper.remove();
+ $.vakata.dnd.init_x = 0;
+ $.vakata.dnd.init_y = 0;
+ $.vakata.dnd.user_data = {};
+ $.vakata.dnd.is_down = false;
+ $.vakata.dnd.is_drag = false;
+ }
+ };
+ $(function() {
+ var css_string = '#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } ';
+ $.vakata.css.add_sheet({ str : css_string });
+ });
+
+ $.jstree.plugin("dnd", {
+ __init : function () {
+ this.data.dnd = {
+ active : false,
+ after : false,
+ inside : false,
+ before : false,
+ off : false,
+ prepared : false,
+ w : 0,
+ to1 : false,
+ to2 : false,
+ cof : false,
+ cw : false,
+ ch : false,
+ i1 : false,
+ i2 : false
+ };
+ this.get_container()
+ .bind("mouseenter.jstree", $.proxy(function () {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && this.data.themes) {
+ m.attr("class", "jstree-" + this.data.themes.theme);
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ }, this))
+ .bind("mouseleave.jstree", $.proxy(function () {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ }
+ }, this))
+ .bind("mousemove.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ var cnt = this.get_container()[0];
+
+ // Horizontal scroll
+ if(e.pageX + 24 > this.data.dnd.cof.left + this.data.dnd.cw) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft += $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else if(e.pageX - 24 < this.data.dnd.cof.left) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft -= $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ }
+
+ // Vertical scroll
+ if(e.pageY + 24 > this.data.dnd.cof.top + this.data.dnd.ch) {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop += $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else if(e.pageY - 24 < this.data.dnd.cof.top) {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop -= $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ }
+
+ }
+ }, this))
+ .delegate("a", "mousedown.jstree", $.proxy(function (e) {
+ if(e.which === 1) {
+ this.start_drag(e.currentTarget, e);
+ return false;
+ }
+ }, this))
+ .delegate("a", "mouseenter.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ this.dnd_enter(e.currentTarget);
+ }
+ }, this))
+ .delegate("a", "mousemove.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(typeof this.data.dnd.off.top === "undefined") { this.data.dnd.off = $(e.target).offset(); }
+ this.data.dnd.w = (e.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height;
+ if(this.data.dnd.w < 0) { this.data.dnd.w += this.data.core.li_height; }
+ this.dnd_show();
+ }
+ }, this))
+ .delegate("a", "mouseleave.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ this.data.dnd.after = false;
+ this.data.dnd.before = false;
+ this.data.dnd.inside = false;
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ m.hide();
+ if(r && r[0] === e.target.parentNode) {
+ if(this.data.dnd.to1) {
+ clearTimeout(this.data.dnd.to1);
+ this.data.dnd.to1 = false;
+ }
+ if(this.data.dnd.to2) {
+ clearTimeout(this.data.dnd.to2);
+ this.data.dnd.to2 = false;
+ }
+ }
+ }
+ }, this))
+ .delegate("a", "mouseup.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ this.dnd_finish(e);
+ }
+ }, this));
+
+ $(document)
+ .bind("drag_stop.vakata", $.proxy(function () {
+ this.data.dnd.after = false;
+ this.data.dnd.before = false;
+ this.data.dnd.inside = false;
+ this.data.dnd.off = false;
+ this.data.dnd.prepared = false;
+ this.data.dnd.w = false;
+ this.data.dnd.to1 = false;
+ this.data.dnd.to2 = false;
+ this.data.dnd.active = false;
+ this.data.dnd.foreign = false;
+ if(m) { m.css({ "top" : "-2000px" }); }
+ }, this))
+ .bind("drag_start.vakata", $.proxy(function (e, data) {
+ if(data.data.jstree) {
+ var et = $(data.event.target);
+ if(et.closest(".jstree").hasClass("jstree-" + this.get_index())) {
+ this.dnd_enter(et);
+ }
+ }
+ }, this));
+
+ var s = this._get_settings().dnd;
+ if(s.drag_target) {
+ $(document)
+ .delegate(s.drag_target, "mousedown.jstree", $.proxy(function (e) {
+ o = e.target;
+ $.vakata.dnd.drag_start(e, { jstree : true, obj : e.target }, "<ins class='jstree-icon'></ins>" + $(e.target).text() );
+ if(this.data.themes) {
+ m.attr("class", "jstree-" + this.data.themes.theme);
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ var cnt = this.get_container();
+ this.data.dnd.cof = cnt.offset();
+ this.data.dnd.cw = parseInt(cnt.width(),10);
+ this.data.dnd.ch = parseInt(cnt.height(),10);
+ this.data.dnd.foreign = true;
+ return false;
+ }, this));
+ }
+ if(s.drop_target) {
+ $(document)
+ .delegate(s.drop_target, "mouseenter.jstree", $.proxy(function (e) {
+ if(this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { "o" : o, "r" : $(e.target) })) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ }
+ }, this))
+ .delegate(s.drop_target, "mouseleave.jstree", $.proxy(function (e) {
+ if(this.data.dnd.active) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ }
+ }, this))
+ .delegate(s.drop_target, "mouseup.jstree", $.proxy(function (e) {
+ if(this.data.dnd.active && $.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
+ this._get_settings().dnd.drop_finish.call(this, { "o" : o, "r" : $(e.target) });
+ }
+ }, this));
+ }
+ },
+ defaults : {
+ copy_modifier : "ctrl",
+ check_timeout : 200,
+ open_timeout : 500,
+ drop_target : ".jstree-drop",
+ drop_check : function (data) { return true; },
+ drop_finish : $.noop,
+ drag_target : ".jstree-draggable",
+ drag_finish : $.noop,
+ drag_check : function (data) { return { after : false, before : false, inside : true }; }
+ },
+ _fn : {
+ dnd_prepare : function () {
+ if(!r || !r.length) { return; }
+ this.data.dnd.off = r.offset();
+ if(this._get_settings().core.rtl) {
+ this.data.dnd.off.right = this.data.dnd.off.left + r.width();
+ }
+ if(this.data.dnd.foreign) {
+ var a = this._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : r });
+ this.data.dnd.after = a.after;
+ this.data.dnd.before = a.before;
+ this.data.dnd.inside = a.inside;
+ this.data.dnd.prepared = true;
+ return this.dnd_show();
+ }
+ this.prepare_move(o, r, "before");
+ this.data.dnd.before = this.check_move();
+ this.prepare_move(o, r, "after");
+ this.data.dnd.after = this.check_move();
+ if(this._is_loaded(r)) {
+ this.prepare_move(o, r, "inside");
+ this.data.dnd.inside = this.check_move();
+ }
+ else {
+ this.data.dnd.inside = false;
+ }
+ this.data.dnd.prepared = true;
+ return this.dnd_show();
+ },
+ dnd_show : function () {
+ if(!this.data.dnd.prepared) { return; }
+ var o = ["before","inside","after"],
+ r = false,
+ rtl = this._get_settings().core.rtl,
+ pos;
+ if(this.data.dnd.w < this.data.core.li_height/3) { o = ["before","inside","after"]; }
+ else if(this.data.dnd.w <= this.data.core.li_height*2/3) {
+ o = this.data.dnd.w < this.data.core.li_height/2 ? ["inside","before","after"] : ["inside","after","before"];
+ }
+ else { o = ["after","inside","before"]; }
+ $.each(o, $.proxy(function (i, val) {
+ if(this.data.dnd[val]) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ r = val;
+ return false;
+ }
+ }, this));
+ if(r === false) { $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); }
+
+ pos = rtl ? (this.data.dnd.off.right - 18) : (this.data.dnd.off.left + 10);
+ switch(r) {
+ case "before":
+ m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top - 6) + "px" }).show();
+ break;
+ case "after":
+ m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 7) + "px" }).show();
+ break;
+ case "inside":
+ m.css({ "left" : pos + ( rtl ? -4 : 4) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height/2 - 5) + "px" }).show();
+ break;
+ default:
+ m.hide();
+ break;
+ }
+ return r;
+ },
+ dnd_open : function () {
+ this.data.dnd.to2 = false;
+ this.open_node(r, $.proxy(this.dnd_prepare,this), true);
+ },
+ dnd_finish : function (e) {
+ if(this.data.dnd.foreign) {
+ if(this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) {
+ this._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : r });
+ }
+ }
+ else {
+ this.dnd_prepare();
+ this.move_node(o, r, this.dnd_show(), e[this._get_settings().dnd.copy_modifier + "Key"]);
+ }
+ o = false;
+ r = false;
+ m.hide();
+ },
+ dnd_enter : function (obj) {
+ var s = this._get_settings().dnd;
+ this.data.dnd.prepared = false;
+ r = this._get_node(obj);
+ if(s.check_timeout) {
+ // do the calculations after a minimal timeout (users tend to drag quickly to the desired location)
+ if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
+ this.data.dnd.to1 = setTimeout($.proxy(this.dnd_prepare, this), s.check_timeout);
+ }
+ else {
+ this.dnd_prepare();
+ }
+ if(s.open_timeout) {
+ if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
+ if(r && r.length && r.hasClass("jstree-closed")) {
+ // if the node is closed - open it, then recalculate
+ this.data.dnd.to2 = setTimeout($.proxy(this.dnd_open, this), s.open_timeout);
+ }
+ }
+ else {
+ if(r && r.length && r.hasClass("jstree-closed")) {
+ this.dnd_open();
+ }
+ }
+ },
+ start_drag : function (obj, e) {
+ o = this._get_node(obj);
+ if(this.data.ui && this.is_selected(o)) { o = this._get_node(null, true); }
+ $.vakata.dnd.drag_start(e, { jstree : true, obj : o }, "<ins class='jstree-icon'></ins>" + (o.length > 1 ? "Multiple selection" : this.get_text(o)) );
+ if(this.data.themes) {
+ m.attr("class", "jstree-" + this.data.themes.theme);
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ var cnt = this.get_container();
+ this.data.dnd.cof = cnt.children("ul").offset();
+ this.data.dnd.cw = parseInt(cnt.width(),10);
+ this.data.dnd.ch = parseInt(cnt.height(),10);
+ this.data.dnd.active = true;
+ }
+ }
+ });
+ $(function() {
+ var css_string = '' +
+ '#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; } ' +
+ '#vakata-dragged .jstree-ok { background:green; } ' +
+ '#vakata-dragged .jstree-invalid { background:red; } ' +
+ '#jstree-marker { padding:0; margin:0; line-height:12px; font-size:1px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:silver; } ';
+ $.vakata.css.add_sheet({ str : css_string });
+ m = $("<div>").attr({ id : "jstree-marker" }).hide().appendTo("body");
+ $(document).bind("drag_start.vakata", function (e, data) {
+ if(data.data.jstree) {
+ m.show();
+ }
+ });
+ $(document).bind("drag_stop.vakata", function (e, data) {
+ if(data.data.jstree) { m.hide(); }
+ });
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree checkbox plugin 1.0
+ * Inserts checkboxes in front of every node
+ * Depends on the ui plugin
+ * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP
+ */
+(function ($) {
+ $.jstree.plugin("checkbox", {
+ __init : function () {
+ this.select_node = this.deselect_node = this.deselect_all = $.noop;
+ this.get_selected = this.get_checked;
+
+ this.get_container()
+ .bind("open_node.jstree create_node.jstree clean_node.jstree", $.proxy(function (e, data) {
+ this._prepare_checkboxes(data.rslt.obj);
+ }, this))
+ .bind("loaded.jstree", $.proxy(function (e) {
+ this._prepare_checkboxes();
+ }, this))
+ .delegate("a", "click.jstree", $.proxy(function (e) {
+ if(this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); }
+ else { this.check_node(e.target); }
+ if(this.data.ui) { this.save_selected(); }
+ if(this.data.cookies) { this.save_cookie("select_node"); }
+ e.preventDefault();
+ }, this));
+ },
+ __destroy : function () {
+ this.get_container().find(".jstree-checkbox").remove();
+ },
+ _fn : {
+ _prepare_checkboxes : function (obj) {
+ obj = !obj || obj == -1 ? this.get_container() : this._get_node(obj);
+ var c, _this = this, t;
+ obj.each(function () {
+ t = $(this);
+ c = t.is("li") && t.hasClass("jstree-checked") ? "jstree-checked" : "jstree-unchecked";
+ t.find("a").not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass(c);
+ });
+ if(obj.is("li")) { this._repair_state(obj); }
+ else { obj.find("> ul > li").each(function () { _this._repair_state(this); }); }
+ },
+ change_state : function (obj, state) {
+ obj = this._get_node(obj);
+ state = (state === false || state === true) ? state : obj.hasClass("jstree-checked");
+ if(state) { obj.find("li").andSelf().removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); }
+ else {
+ obj.find("li").andSelf().removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
+ if(this.data.ui) { this.data.ui.last_selected = obj; }
+ this.data.checkbox.last_selected = obj;
+ }
+ obj.parentsUntil(".jstree", "li").each(function () {
+ var $this = $(this);
+ if(state) {
+ if($this.children("ul").children(".jstree-checked, .jstree-undetermined").length) {
+ $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ return false;
+ }
+ else {
+ $this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
+ }
+ }
+ else {
+ if($this.children("ul").children(".jstree-unchecked, .jstree-undetermined").length) {
+ $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ return false;
+ }
+ else {
+ $this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
+ }
+ }
+ });
+ if(this.data.ui) { this.data.ui.selected = this.get_checked(); }
+ this.__callback(obj);
+ },
+ check_node : function (obj) {
+ this.change_state(obj, false);
+ },
+ uncheck_node : function (obj) {
+ this.change_state(obj, true);
+ },
+ check_all : function () {
+ var _this = this;
+ this.get_container().children("ul").children("li").each(function () {
+ _this.check_node(this, false);
+ });
+ },
+ uncheck_all : function () {
+ var _this = this;
+ this.get_container().children("ul").children("li").each(function () {
+ _this.change_state(this, true);
+ });
+ },
+
+ is_checked : function(obj) {
+ obj = this._get_node(obj);
+ return obj.length ? obj.is(".jstree-checked") : false;
+ },
+ get_checked : function (obj) {
+ obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
+ return obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked");
+ },
+ get_unchecked : function (obj) {
+ obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
+ return obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked");
+ },
+
+ show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); },
+ hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); },
+
+ _repair_state : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return; }
+ var a = obj.find("> ul > .jstree-checked").length,
+ b = obj.find("> ul > .jstree-undetermined").length,
+ c = obj.find("> ul > li").length;
+
+ if(c === 0) { if(obj.hasClass("jstree-undetermined")) { this.check_node(obj); } }
+ else if(a === 0 && b === 0) { this.uncheck_node(obj); }
+ else if(a === c) { this.check_node(obj); }
+ else {
+ obj.parentsUntil(".jstree","li").removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ }
+ },
+ reselect : function () {
+ if(this.data.ui) {
+ var _this = this,
+ s = this.data.ui.to_select;
+ s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace('\\/','/').replace('/','\\/'); });
+ this.deselect_all();
+ $.each(s, function (i, val) { _this.check_node(val); });
+ this.__callback();
+ }
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree XML 1.0
+ * The XML data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.vakata.xslt = function (xml, xsl, callback) {
+ var rs = "", xm, xs, processor, support;
+ if(document.recalc) {
+ xm = document.createElement('xml');
+ xs = document.createElement('xml');
+ xm.innerHTML = xml;
+ xs.innerHTML = xsl;
+ $("body").append(xm).append(xs);
+ setTimeout( (function (xm, xs, callback) {
+ return function () {
+ callback.call(null, xm.transformNode(xs.XMLDocument));
+ setTimeout( (function (xm, xs) { return function () { jQuery("body").remove(xm).remove(xs); }; })(xm, xs), 200);
+ };
+ }) (xm, xs, callback), 100);
+ return true;
+ }
+ if(typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor !== "undefined") {
+ processor = new XSLTProcessor();
+ support = $.isFunction(processor.transformDocument) ? (typeof window.XMLSerializer !== "undefined") : true;
+ if(!support) { return false; }
+ xml = new DOMParser().parseFromString(xml, "text/xml");
+ xsl = new DOMParser().parseFromString(xsl, "text/xml");
+ if($.isFunction(processor.transformDocument)) {
+ rs = document.implementation.createDocument("", "", null);
+ processor.transformDocument(xml, xsl, rs, null);
+ callback.call(null, XMLSerializer().serializeToString(rs));
+ return true;
+ }
+ else {
+ processor.importStylesheet(xsl);
+ rs = processor.transformToFragment(xml, document);
+ callback.call(null, $("<div>").append(rs).html());
+ return true;
+ }
+ }
+ return false;
+ };
+ var xsl = {
+ 'nest' : '<?xml version="1.0" encoding="utf-8" ?>' +
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' +
+ '<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/html" />' +
+ '<xsl:template match="/">' +
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="/root" />' +
+ ' </xsl:call-template>' +
+ '</xsl:template>' +
+ '<xsl:template name="nodes">' +
+ ' <xsl:param name="node" />' +
+ ' <ul>' +
+ ' <xsl:for-each select="$node/item">' +
+ ' <xsl:variable name="children" select="count(./item) &gt; 0" />' +
+ ' <li>' +
+ ' <xsl:attribute name="class">' +
+ ' <xsl:if test="position() = last()">jstree-last </xsl:if>' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@state = \'open\'">jstree-open </xsl:when>' +
+ ' <xsl:when test="$children or @hasChildren or @state = \'closed\'">jstree-closed </xsl:when>' +
+ ' <xsl:otherwise>jstree-leaf </xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' <xsl:value-of select="@class" />' +
+ ' </xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'class\' and name() != \'state\' and name() != \'hasChildren\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' +
+ ' <xsl:for-each select="content/name">' +
+ ' <a>' +
+ ' <xsl:attribute name="href">' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' +
+ ' <xsl:otherwise>#</xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' </xsl:attribute>' +
+ ' <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' +
+ ' <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'style\' and name() != \'class\' and name() != \'href\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins>' +
+ ' <xsl:attribute name="class">jstree-icon ' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,\'/\'))"><xsl:value-of select="@icon" /></xsl:if>' +
+ ' </xsl:attribute>' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,\'/\')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' +
+ ' <xsl:text>&#xa0;</xsl:text>' +
+ ' </ins>' +
+ ' <xsl:value-of select="current()" />' +
+ ' </a>' +
+ ' </xsl:for-each>' +
+ ' <xsl:if test="$children or @hasChildren"><xsl:call-template name="nodes"><xsl:with-param name="node" select="current()" /></xsl:call-template></xsl:if>' +
+ ' </li>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ '</xsl:template>' +
+ '</xsl:stylesheet>',
+
+ 'flat' : '<?xml version="1.0" encoding="utf-8" ?>' +
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' +
+ '<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/xml" />' +
+ '<xsl:template match="/">' +
+ ' <ul>' +
+ ' <xsl:for-each select="//item[not(@parent_id) or @parent_id=0 or not(@parent_id = //item/@id)]">' + /* the last `or` may be removed */
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="." />' +
+ ' <xsl:with-param name="is_last" select="number(position() = last())" />' +
+ ' </xsl:call-template>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ '</xsl:template>' +
+ '<xsl:template name="nodes">' +
+ ' <xsl:param name="node" />' +
+ ' <xsl:param name="is_last" />' +
+ ' <xsl:variable name="children" select="count(//item[@parent_id=$node/attribute::id]) &gt; 0" />' +
+ ' <li>' +
+ ' <xsl:attribute name="class">' +
+ ' <xsl:if test="$is_last = true()">jstree-last </xsl:if>' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@state = \'open\'">jstree-open </xsl:when>' +
+ ' <xsl:when test="$children or @hasChildren or @state = \'closed\'">jstree-closed </xsl:when>' +
+ ' <xsl:otherwise>jstree-leaf </xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' <xsl:value-of select="@class" />' +
+ ' </xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'parent_id\' and name() != \'hasChildren\' and name() != \'class\' and name() != \'state\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' +
+ ' <xsl:for-each select="content/name">' +
+ ' <a>' +
+ ' <xsl:attribute name="href">' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' +
+ ' <xsl:otherwise>#</xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' </xsl:attribute>' +
+ ' <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' +
+ ' <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'style\' and name() != \'class\' and name() != \'href\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins>' +
+ ' <xsl:attribute name="class">jstree-icon ' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,\'/\'))"><xsl:value-of select="@icon" /></xsl:if>' +
+ ' </xsl:attribute>' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,\'/\')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' +
+ ' <xsl:text>&#xa0;</xsl:text>' +
+ ' </ins>' +
+ ' <xsl:value-of select="current()" />' +
+ ' </a>' +
+ ' </xsl:for-each>' +
+ ' <xsl:if test="$children">' +
+ ' <ul>' +
+ ' <xsl:for-each select="//item[@parent_id=$node/attribute::id]">' +
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="." />' +
+ ' <xsl:with-param name="is_last" select="number(position() = last())" />' +
+ ' </xsl:call-template>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ ' </xsl:if>' +
+ ' </li>' +
+ '</xsl:template>' +
+ '</xsl:stylesheet>'
+ };
+ $.jstree.plugin("xml_data", {
+ defaults : {
+ data : false,
+ ajax : false,
+ xsl : "flat",
+ clean_node : false,
+ correct_state : true
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_xml(obj, function () { _this.__callback({ "obj" : obj }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ var s = this._get_settings().xml_data;
+ obj = this._get_node(obj);
+ return obj == -1 || !obj || !s.ajax || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
+ },
+ load_node_xml : function (obj, s_call, e_call) {
+ var s = this.get_settings().xml_data,
+ error_func = function () {},
+ success_func = function () {};
+
+ obj = this._get_node(obj);
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ this.parse_xml(s.data, $.proxy(function (d) {
+ if(d) {
+ d = d.replace(/ ?xmlns="[^"]*"/ig, "");
+ if(d.length > 10) {
+ d = $(d);
+ this.get_container().children("ul").empty().append(d.children());
+ if(s.clean_node) { this.clean_node(obj); }
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }, this));
+ }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().xml_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj !== -1 && obj.length) {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(t === "success" && s.correct_state) { obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ d = x.responseText;
+ var sf = this.get_settings().xml_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d == "") {
+ return error_func.call(this, x, t, "");
+ }
+ this.parse_xml(d, $.proxy(function (d) {
+ if(d) {
+ d = d.replace(/ ?xmlns="[^"]*"/ig, "");
+ if(d.length > 10) {
+ d = $(d);
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.children(".jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.data("jstree-is-loading",false); }
+ if(s.clean_node) { this.clean_node(obj); }
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(s.correct_state) {
+ obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ }
+ }, this));
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "xml"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ },
+ parse_xml : function (xml, callback) {
+ var s = this._get_settings().xml_data;
+ $.vakata.xslt(xml, xsl[s.xsl], callback);
+ },
+ get_xml : function (tp, obj, li_attr, a_attr, is_callback) {
+ var result = "",
+ s = this._get_settings(),
+ _this = this,
+ tmp1, tmp2, li, a, lang;
+ if(!tp) { tp = "flat"; }
+ if(!is_callback) { is_callback = 0; }
+ obj = this._get_node(obj);
+ if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
+ li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
+ if(!is_callback && this.data.types && $.inArray(s.types.type_attr, li_attr) === -1) { li_attr.push(s.types.type_attr); }
+
+ a_attr = $.isArray(a_attr) ? a_attr : [ ];
+
+ if(!is_callback) { result += "<root>"; }
+ obj.each(function () {
+ result += "<item";
+ li = $(this);
+ $.each(li_attr, function (i, v) { result += " " + v + "=\"" + (li.attr(v) || "").replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"") + "\""; });
+ if(li.hasClass("jstree-open")) { result += " state=\"open\""; }
+ if(li.hasClass("jstree-closed")) { result += " state=\"closed\""; }
+ if(tp === "flat") { result += " parent_id=\"" + is_callback + "\""; }
+ result += ">";
+ result += "<content>";
+ a = li.children("a");
+ a.each(function () {
+ tmp1 = $(this);
+ lang = false;
+ result += "<name";
+ if($.inArray("languages", s.plugins) !== -1) {
+ $.each(s.languages, function (k, z) {
+ if(tmp1.hasClass(z)) { result += " lang=\"" + z + "\""; lang = z; return false; }
+ });
+ }
+ if(a_attr.length) {
+ $.each(a_attr, function (k, z) {
+ result += " " + z + "=\"" + (tmp1.attr(z) || "").replace(/jstree[^ ]*|$/ig,'') + "\"";
+ });
+ }
+ if(tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) {
+ result += ' icon="' + tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"") + '"';
+ }
+ if(tmp1.children("ins").get(0).style.backgroundImage.length) {
+ result += ' icon="' + tmp1.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","") + '"';
+ }
+ result += ">";
+ result += "<![CDATA[" + _this.get_text(tmp1, lang) + "]]>";
+ result += "</name>";
+ });
+ result += "</content>";
+ tmp2 = li[0].id;
+ li = li.find("> ul > li");
+ if(li.length) { tmp2 = _this.get_xml(tp, li, li_attr, a_attr, tmp2); }
+ else { tmp2 = ""; }
+ if(tp == "nest") { result += tmp2; }
+ result += "</item>";
+ if(tp == "flat") { result += tmp2; }
+ });
+ if(!is_callback) { result += "</root>"; }
+ return result;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree search plugin 1.0
+ * Enables both sync and async search on the tree
+ * DOES NOT WORK WITH JSON PROGRESSIVE RENDER
+ */
+(function ($) {
+ $.expr[':'].jstree_contains = function(a,i,m){
+ return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
+ };
+ $.jstree.plugin("search", {
+ __init : function () {
+ this.data.search.str = "";
+ this.data.search.result = $();
+ },
+ defaults : {
+ ajax : false, // OR ajax object
+ case_insensitive : false
+ },
+ _fn : {
+ search : function (str, skip_async) {
+ if(str === "") { return; }
+ var s = this.get_settings().search,
+ t = this,
+ error_func = function () { },
+ success_func = function () { };
+ this.data.search.str = str;
+
+ if(!skip_async && s.ajax !== false && this.get_container().find(".jstree-closed:eq(0)").length > 0) {
+ this.search.supress_callback = true;
+ error_func = function () { };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().search.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ this.data.search.to_open = d;
+ this._search_open();
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, str); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, str); }
+ if(!s.ajax.data) { s.ajax.data = { "search_string" : str }; }
+ if(!s.ajax.dataType || /^json/.exec(s.ajax.dataType)) { s.ajax.dataType = "json"; }
+ $.ajax(s.ajax);
+ return;
+ }
+ if(this.data.search.result.length) { this.clear_search(); }
+ this.data.search.result = this.get_container().find("a" + (this.data.languages ? "." + this.get_lang() : "" ) + ":" + (s.case_insensitive ? "jstree_contains" : "contains") + "(" + this.data.search.str + ")");
+ this.data.search.result.addClass("jstree-search").parents(".jstree-closed").each(function () {
+ t.open_node(this, false, true);
+ });
+ this.__callback({ nodes : this.data.search.result, str : str });
+ },
+ clear_search : function (str) {
+ this.data.search.result.removeClass("jstree-search");
+ this.__callback(this.data.search.result);
+ this.data.search.result = $();
+ },
+ _search_open : function (is_callback) {
+ var _this = this,
+ done = true,
+ current = [],
+ remaining = [];
+ if(this.data.search.to_open.length) {
+ $.each(this.data.search.to_open, function (i, val) {
+ if(val == "#") { return true; }
+ if($(val).length && $(val).is(".jstree-closed")) { current.push(val); }
+ else { remaining.push(val); }
+ });
+ if(current.length) {
+ this.data.search.to_open = remaining;
+ $.each(current, function (i, val) {
+ _this.open_node(val, function () { _this._search_open(true); });
+ });
+ done = false;
+ }
+ }
+ if(done) { this.search(this.data.search.str, true); }
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree contextmenu plugin 1.0
+ */
+(function ($) {
+ $.vakata.context = {
+ cnt : $("<div id='vakata-contextmenu'>"),
+ vis : false,
+ tgt : false,
+ par : false,
+ func : false,
+ data : false,
+ show : function (s, t, x, y, d, p) {
+ var html = $.vakata.context.parse(s), h, w;
+ if(!html) { return; }
+ $.vakata.context.vis = true;
+ $.vakata.context.tgt = t;
+ $.vakata.context.par = p || t || null;
+ $.vakata.context.data = d || null;
+ $.vakata.context.cnt
+ .html(html)
+ .css({ "visibility" : "hidden", "display" : "block", "left" : 0, "top" : 0 });
+ h = $.vakata.context.cnt.height();
+ w = $.vakata.context.cnt.width();
+ if(x + w > $(document).width()) {
+ x = $(document).width() - (w + 5);
+ $.vakata.context.cnt.find("li > ul").addClass("right");
+ }
+ if(y + h > $(document).height()) {
+ y = y - (h + t[0].offsetHeight);
+ $.vakata.context.cnt.find("li > ul").addClass("bottom");
+ }
+
+ $.vakata.context.cnt
+ .css({ "left" : x, "top" : y })
+ .find("li:has(ul)")
+ .bind("mouseenter", function (e) {
+ var w = $(document).width(),
+ h = $(document).height(),
+ ul = $(this).children("ul").show();
+ if(w !== $(document).width()) { ul.toggleClass("right"); }
+ if(h !== $(document).height()) { ul.toggleClass("bottom"); }
+ })
+ .bind("mouseleave", function (e) {
+ $(this).children("ul").hide();
+ })
+ .end()
+ .css({ "visibility" : "visible" })
+ .show();
+ $(document).triggerHandler("context_show.vakata");
+ },
+ hide : function () {
+ $.vakata.context.vis = false;
+ $.vakata.context.cnt.attr("class","").hide();
+ $(document).triggerHandler("context_hide.vakata");
+ },
+ parse : function (s, is_callback) {
+ if(!s) { return false; }
+ var str = "",
+ tmp = false,
+ was_sep = true;
+ if(!is_callback) { $.vakata.context.func = {}; }
+ str += "<ul>";
+ $.each(s, function (i, val) {
+ if(!val) { return true; }
+ $.vakata.context.func[i] = val.action;
+ if(!was_sep && val.separator_before) {
+ str += "<li class='vakata-separator vakata-separator-before'></li>";
+ }
+ was_sep = false;
+ str += "<li class='" + (val._class || "") + (val._disabled ? " jstree-contextmenu-disabled " : "") + "'><ins ";
+ if(val.icon && val.icon.indexOf("/") === -1) { str += " class='" + val.icon + "' "; }
+ if(val.icon && val.icon.indexOf("/") !== -1) { str += " style='background:url(" + val.icon + ") center center no-repeat;' "; }
+ str += ">&#160;</ins><a href='#' rel='" + i + "'>";
+ if(val.submenu) {
+ str += "<span style='float:right;'>&raquo;</span>";
+ }
+ str += val.label + "</a>";
+ if(val.submenu) {
+ tmp = $.vakata.context.parse(val.submenu, true);
+ if(tmp) { str += tmp; }
+ }
+ str += "</li>";
+ if(val.separator_after) {
+ str += "<li class='vakata-separator vakata-separator-after'></li>";
+ was_sep = true;
+ }
+ });
+ str = str.replace(/<li class\='vakata-separator vakata-separator-after'\><\/li\>$/,"");
+ str += "</ul>";
+ return str.length > 10 ? str : false;
+ },
+ exec : function (i) {
+ if($.isFunction($.vakata.context.func[i])) {
+ $.vakata.context.func[i].call($.vakata.context.data, $.vakata.context.par);
+ return true;
+ }
+ else { return false; }
+ }
+ };
+ $(function () {
+ var css_string = '' +
+ '#vakata-contextmenu { display:none; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } ' +
+ '#vakata-contextmenu ul { min-width:180px; *width:180px; } ' +
+ '#vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } ' +
+ '#vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } ' +
+ '#vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } ' +
+ '#vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } ' +
+ '#vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } ' +
+ '#vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } ' +
+ '#vakata-contextmenu .right { right:100%; left:auto; } ' +
+ '#vakata-contextmenu .bottom { bottom:-1px; top:auto; } ' +
+ '#vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } ';
+ $.vakata.css.add_sheet({ str : css_string });
+ $.vakata.context.cnt
+ .delegate("a","click", function (e) { e.preventDefault(); })
+ .delegate("a","mouseup", function (e) {
+ if(!$(this).parent().hasClass("jstree-contextmenu-disabled") && $.vakata.context.exec($(this).attr("rel"))) {
+ $.vakata.context.hide();
+ }
+ else { $(this).blur(); }
+ })
+ .delegate("a","mouseover", function () {
+ $.vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover");
+ })
+ .appendTo("body");
+ $(document).bind("mousedown", function (e) { if($.vakata.context.vis && !$.contains($.vakata.context.cnt[0], e.target)) { $.vakata.context.hide(); } });
+ if(typeof $.hotkeys !== "undefined") {
+ $(document)
+ .bind("keydown", "up", function (e) {
+ if($.vakata.context.vis) {
+ var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first();
+ if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last(); }
+ o.addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "down", function (e) {
+ if($.vakata.context.vis) {
+ var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first();
+ if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first(); }
+ o.addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "right", function (e) {
+ if($.vakata.context.vis) {
+ $.vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "left", function (e) {
+ if($.vakata.context.vis) {
+ $.vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "esc", function (e) {
+ $.vakata.context.hide();
+ e.preventDefault();
+ })
+ .bind("keydown", "space", function (e) {
+ $.vakata.context.cnt.find(".vakata-hover").last().children("a").click();
+ e.preventDefault();
+ });
+ }
+ });
+
+ $.jstree.plugin("contextmenu", {
+ __init : function () {
+ this.get_container()
+ .delegate("a", "contextmenu.jstree", $.proxy(function (e) {
+ e.preventDefault();
+ this.show_contextmenu(e.currentTarget, e.pageX, e.pageY);
+ }, this))
+ .bind("destroy.jstree", $.proxy(function () {
+ if(this.data.contextmenu) {
+ $.vakata.context.hide();
+ }
+ }, this));
+ $(document).bind("context_hide.vakata", $.proxy(function () { this.data.contextmenu = false; }, this));
+ },
+ defaults : {
+ select_node : false, // requires UI plugin
+ show_at_node : true,
+ items : { // Could be a function that should return an object like this one
+ "create" : {
+ "separator_before" : false,
+ "separator_after" : true,
+ "label" : "Create",
+ "action" : function (obj) { this.create(obj); }
+ },
+ "rename" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "label" : "Rename",
+ "action" : function (obj) { this.rename(obj); }
+ },
+ "remove" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Delete",
+ "action" : function (obj) { this.remove(obj); }
+ },
+ "ccp" : {
+ "separator_before" : true,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Edit",
+ "action" : false,
+ "submenu" : {
+ "cut" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "label" : "Cut",
+ "action" : function (obj) { this.cut(obj); }
+ },
+ "copy" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Copy",
+ "action" : function (obj) { this.copy(obj); }
+ },
+ "paste" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Paste",
+ "action" : function (obj) { this.paste(obj); }
+ }
+ }
+ }
+ }
+ },
+ _fn : {
+ show_contextmenu : function (obj, x, y) {
+ obj = this._get_node(obj);
+ var s = this.get_settings().contextmenu,
+ a = obj.children("a:visible:eq(0)"),
+ o = false;
+ if(s.select_node && this.data.ui && !this.is_selected(obj)) {
+ this.deselect_all();
+ this.select_node(obj, true);
+ }
+ if(s.show_at_node || typeof x === "undefined" || typeof y === "undefined") {
+ o = a.offset();
+ x = o.left;
+ y = o.top + this.data.core.li_height;
+ }
+ if($.isFunction(s.items)) { s.items = s.items.call(this, obj); }
+ this.data.contextmenu = true;
+ $.vakata.context.show(s.items, a, x, y, this, obj);
+ if(this.data.themes) { $.vakata.context.cnt.attr("class", "jstree-" + this.data.themes.theme + "-context"); }
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree types plugin 1.0
+ * Adds support types of nodes
+ * You can set an attribute on each li node, that represents its type.
+ * According to the type setting the node may get custom icon/validation rules
+ */
+(function ($) {
+ $.jstree.plugin("types", {
+ __init : function () {
+ var s = this._get_settings().types;
+ this.data.types.attach_to = [];
+ this.get_container()
+ .bind("init.jstree", $.proxy(function () {
+ var types = s.types,
+ attr = s.type_attr,
+ icons_css = "",
+ _this = this;
+
+ $.each(types, function (i, tp) {
+ $.each(tp, function (k, v) {
+ if(!/^(max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); }
+ });
+ if(!tp.icon) { return true; }
+ if( tp.icon.image || tp.icon.position) {
+ if(i == "default") { icons_css += '.jstree-' + _this.get_index() + ' a > .jstree-icon { '; }
+ else { icons_css += '.jstree-' + _this.get_index() + ' li[' + attr + '=' + i + '] > a > .jstree-icon { '; }
+ if(tp.icon.image) { icons_css += ' background-image:url(' + tp.icon.image + '); '; }
+ if(tp.icon.position){ icons_css += ' background-position:' + tp.icon.position + '; '; }
+ else { icons_css += ' background-position:0 0; '; }
+ icons_css += '} ';
+ }
+ });
+ if(icons_css != "") { $.vakata.css.add_sheet({ 'str' : icons_css }); }
+ }, this))
+ .bind("before.jstree", $.proxy(function (e, data) {
+ if($.inArray(data.func, this.data.types.attach_to) !== -1) {
+ var s = this._get_settings().types.types,
+ t = this._get_type(data.args[0]);
+ if(
+ (
+ (s[t] && typeof s[t][data.func] !== "undefined") ||
+ (s["default"] && typeof s["default"][data.func] !== "undefined")
+ ) && !this._check(data.func, data.args[0])
+ ) {
+ e.stopImmediatePropagation();
+ return false;
+ }
+ }
+ }, this));
+ },
+ defaults : {
+ // defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking)
+ max_children : -1,
+ // defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking)
+ max_depth : -1,
+ // defines valid node types for the root nodes
+ valid_children : "all",
+
+ // where is the type stores (the rel attribute of the LI element)
+ type_attr : "rel",
+ // a list of types
+ types : {
+ // the default type
+ "default" : {
+ "max_children" : -1,
+ "max_depth" : -1,
+ "valid_children": "all"
+
+ // Bound functions - you can bind any other function here (using boolean or function)
+ //"select_node" : true,
+ //"open_node" : true,
+ //"close_node" : true,
+ //"create_node" : true,
+ //"delete_node" : true
+ }
+ }
+ },
+ _fn : {
+ _get_type : function (obj) {
+ obj = this._get_node(obj);
+ return (!obj || !obj.length) ? false : obj.attr(this._get_settings().types.type_attr) || "default";
+ },
+ set_type : function (str, obj) {
+ obj = this._get_node(obj);
+ return (!obj.length || !str) ? false : obj.attr(this._get_settings().types.type_attr, str);
+ },
+ _check : function (rule, obj, opts) {
+ var v = false, t = this._get_type(obj), d = 0, _this = this, s = this._get_settings().types;
+ if(obj === -1) {
+ if(!!s[rule]) { v = s[rule]; }
+ else { return; }
+ }
+ else {
+ if(t === false) { return; }
+ if(!!s.types[t] && !!s.types[t][rule]) { v = s.types[t][rule]; }
+ else if(!!s.types["default"] && !!s.types["default"][rule]) { v = s.types["default"][rule]; }
+ }
+ if($.isFunction(v)) { v = v.call(this, obj); }
+ if(rule === "max_depth" && obj !== -1 && opts !== false && s.max_depth !== -2 && v !== 0) {
+ // also include the node itself - otherwise if root node it is not checked
+ this._get_node(obj).children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) {
+ // check if current depth already exceeds global tree depth
+ if(s.max_depth !== -1 && s.max_depth - (i + 1) <= 0) { v = 0; return false; }
+ d = (i === 0) ? v : _this._check(rule, this, false);
+ // check if current node max depth is already matched or exceeded
+ if(d !== -1 && d - (i + 1) <= 0) { v = 0; return false; }
+ // otherwise - set the max depth to the current value minus current depth
+ if(d >= 0 && (d - (i + 1) < v || v < 0) ) { v = d - (i + 1); }
+ // if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited
+ if(s.max_depth >= 0 && (s.max_depth - (i + 1) < v || v < 0) ) { v = s.max_depth - (i + 1); }
+ });
+ }
+ return v;
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var m = this._get_move(),
+ s = m.rt._get_settings().types,
+ mc = m.rt._check("max_children", m.cr),
+ md = m.rt._check("max_depth", m.cr),
+ vc = m.rt._check("valid_children", m.cr),
+ ch = 0, d = 1, t;
+
+ if(vc === "none") { return false; }
+ if($.isArray(vc) && m.ot && m.ot._get_type) {
+ m.o.each(function () {
+ if($.inArray(m.ot._get_type(this), vc) === -1) { d = false; return false; }
+ });
+ if(d === false) { return false; }
+ }
+ if(s.max_children !== -2 && mc !== -1) {
+ ch = m.cr === -1 ? this.get_container().children("> ul > li").not(m.o).length : m.cr.children("> ul > li").not(m.o).length;
+ if(ch + m.o.length > mc) { return false; }
+ }
+ if(s.max_depth !== -2 && md !== -1) {
+ d = 0;
+ if(md === 0) { return false; }
+ if(typeof m.o.d === "undefined") {
+ // TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node)
+ t = m.o;
+ while(t.length > 0) {
+ t = t.find("> ul > li");
+ d ++;
+ }
+ m.o.d = d;
+ }
+ if(md - m.o.d < 0) { return false; }
+ }
+ return true;
+ },
+ create_node : function (obj, position, js, callback, is_loaded, skip_check) {
+ if(!skip_check && (is_loaded || this._is_loaded(obj))) {
+ var p = (position && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj),
+ s = this._get_settings().types,
+ mc = this._check("max_children", p),
+ md = this._check("max_depth", p),
+ vc = this._check("valid_children", p),
+ ch;
+ if(!js) { js = {}; }
+ if(vc === "none") { return false; }
+ if($.isArray(vc)) {
+ if(!js.attr || !js.attr[s.type_attr]) {
+ if(!js.attr) { js.attr = {}; }
+ js.attr[s.type_attr] = vc[0];
+ }
+ else {
+ if($.inArray(js.attr[s.type_attr], vc) === -1) { return false; }
+ }
+ }
+ if(s.max_children !== -2 && mc !== -1) {
+ ch = p === -1 ? this.get_container().children("> ul > li").length : p.children("> ul > li").length;
+ if(ch + 1 > mc) { return false; }
+ }
+ if(s.max_depth !== -2 && md !== -1 && (md - 1) < 0) { return false; }
+ }
+ return this.__call_old(true, obj, position, js, callback, is_loaded, skip_check);
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree HTML data 1.0
+ * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.jstree.plugin("html_data", {
+ __init : function () {
+ // this used to use html() and clean the whitespace, but this way any attached data was lost
+ this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true);
+ // remove white space from LI node - otherwise nodes appear a bit to the right
+ this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove();
+ },
+ defaults : {
+ data : false,
+ ajax : false,
+ correct_state : true
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_html(obj, function () { _this.__callback({ "obj" : obj }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ obj = this._get_node(obj);
+ return obj == -1 || !obj || !this._get_settings().html_data.ajax || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
+ },
+ load_node_html : function (obj, s_call, e_call) {
+ var d,
+ s = this.get_settings().html_data,
+ error_func = function () {},
+ success_func = function () {};
+ obj = this._get_node(obj);
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case (!s.data && !s.ajax):
+ if(!obj || obj == -1) {
+ this.get_container()
+ .children("ul").empty()
+ .append(this.data.html_data.original_container_html)
+ .find("li, a").filter(function () { return this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
+ .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
+ this.clean_node();
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ d = $(s.data);
+ if(!d.is("ul")) { d = $("<ul>").append(d); }
+ this.get_container()
+ .children("ul").empty().append(d.children())
+ .find("li, a").filter(function () { return this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
+ .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
+ this.clean_node();
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ obj = this._get_node(obj);
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().html_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj != -1 && obj.length) {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(t === "success" && s.correct_state) { obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().html_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d == "") {
+ return error_func.call(this, x, t, "");
+ }
+ if(d) {
+ d = $(d);
+ if(!d.is("ul")) { d = $("<ul>").append(d); }
+ if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
+ else { obj.children(".jstree-loading").removeClass("jstree-loading"); obj.append(d).find("li, a").filter(function () { return this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.data("jstree-is-loading",false); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children(".jstree-loading").removeClass("jstree-loading");
+ obj.data("jstree-is-loading",false);
+ if(s.correct_state) {
+ obj.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "html"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ }
+ }
+ });
+ // include the HTML data plugin by default
+ $.jstree.defaults.plugins.push("html_data");
+})(jQuery);
+//*/
+
+/*
+ * jsTree themeroller plugin 1.0
+ * Adds support for jQuery UI themes. Include this at the end of your plugins list, also make sure "themes" is not included.
+ */
+(function ($) {
+ $.jstree.plugin("themeroller", {
+ __init : function () {
+ var s = this._get_settings().themeroller;
+ this.get_container()
+ .addClass("ui-widget-content")
+ .delegate("a","mouseenter.jstree", function () {
+ $(this).addClass(s.item_h);
+ })
+ .delegate("a","mouseleave.jstree", function () {
+ $(this).removeClass(s.item_h);
+ })
+ .bind("open_node.jstree create_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.obj);
+ }, this))
+ .bind("loaded.jstree refresh.jstree", $.proxy(function (e) {
+ this._themeroller();
+ }, this))
+ .bind("close_node.jstree", $.proxy(function (e, data) {
+ data.rslt.obj.children("ins").removeClass(s.opened).addClass(s.closed);
+ }, this))
+ .bind("select_node.jstree", $.proxy(function (e, data) {
+ data.rslt.obj.children("a").addClass(s.item_a);
+ }, this))
+ .bind("deselect_node.jstree deselect_all.jstree", $.proxy(function (e, data) {
+ this.get_container()
+ .find("." + s.item_a).removeClass(s.item_a).end()
+ .find(".jstree-clicked").addClass(s.item_a);
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.o);
+ }, this));
+ },
+ __destroy : function () {
+ var s = this._get_settings().themeroller,
+ c = [ "ui-icon" ];
+ $.each(s, function (i, v) {
+ v = v.split(" ");
+ if(v.length) { c = c.concat(v); }
+ });
+ this.get_container()
+ .removeClass("ui-widget-content")
+ .find("." + c.join(", .")).removeClass(c.join(" "));
+ },
+ _fn : {
+ _themeroller : function (obj) {
+ var s = this._get_settings().themeroller;
+ obj = !obj || obj == -1 ? this.get_container() : this._get_node(obj).parent();
+ obj
+ .find("li.jstree-closed > ins.jstree-icon").removeClass(s.opened).addClass("ui-icon " + s.closed).end()
+ .find("li.jstree-open > ins.jstree-icon").removeClass(s.closed).addClass("ui-icon " + s.opened).end()
+ .find("a").addClass(s.item)
+ .children("ins.jstree-icon").addClass("ui-icon " + s.item_icon);
+ }
+ },
+ defaults : {
+ "opened" : "ui-icon-triangle-1-se",
+ "closed" : "ui-icon-triangle-1-e",
+ "item" : "ui-state-default",
+ "item_h" : "ui-state-hover",
+ "item_a" : "ui-state-active",
+ "item_icon" : "ui-icon-folder-collapsed"
+ }
+ });
+ $(function() {
+ var css_string = '.jstree .ui-icon { overflow:visible; } .jstree a { padding:0 2px; }';
+ $.vakata.css.add_sheet({ str : css_string });
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree unique plugin 1.0
+ * Forces different names amongst siblings (still a bit experimental)
+ * NOTE: does not check language versions (it will not be possible to have nodes with the same title, even in different languages)
+ */
+(function ($) {
+ $.jstree.plugin("unique", {
+ __init : function () {
+ this.get_container()
+ .bind("before.jstree", $.proxy(function (e, data) {
+ var nms = [], res = true, p, t;
+ if(data.func == "move_node") {
+ // obj, ref, position, is_copy, is_prepared, skip_check
+ if(data.args[4] === true) {
+ if(data.args[0].o && data.args[0].o.length) {
+ data.args[0].o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
+ res = this._check_unique(nms, data.args[0].np.find("> ul > li").not(data.args[0].o));
+ }
+ }
+ }
+ if(data.func == "create_node") {
+ // obj, position, js, callback, is_loaded
+ if(data.args[4] || this._is_loaded(data.args[0])) {
+ p = this._get_node(data.args[0]);
+ if(data.args[1] && (data.args[1] === "before" || data.args[1] === "after")) {
+ p = this._get_parent(data.args[0]);
+ if(!p || p === -1) { p = this.get_container(); }
+ }
+ if(typeof data.args[2] === "string") { nms.push(data.args[2]); }
+ else if(!data.args[2] || !data.args[2].data) { nms.push(this._get_settings().core.strings.new_node); }
+ else { nms.push(data.args[2].data); }
+ res = this._check_unique(nms, p.find("> ul > li"));
+ }
+ }
+ if(data.func == "rename_node") {
+ // obj, val
+ nms.push(data.args[1]);
+ t = this._get_node(data.args[0]);
+ p = this._get_parent(t);
+ if(!p || p === -1) { p = this.get_container(); }
+ res = this._check_unique(nms, p.find("> ul > li").not(t));
+ }
+ if(!res) {
+ e.stopPropagation();
+ return false;
+ }
+ }, this));
+ },
+ _fn : {
+ _check_unique : function (nms, p) {
+ var cnms = [];
+ p.children("a").each(function () { cnms.push($(this).text().replace(/^\s+/g,"")); });
+ if(!cnms.length || !nms.length) { return true; }
+ cnms = cnms.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
+ if((cnms.length + nms.length) != cnms.concat(nms).sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",").length) {
+ return false;
+ }
+ return true;
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var p = this._get_move(), nms = [];
+ if(p.o && p.o.length) {
+ p.o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
+ return this._check_unique(nms, p.np.find("> ul > li").not(p.o));
+ }
+ return true;
+ }
+ }
+ });
+})(jQuery);
+//*/
diff --git a/solr-8.1.1/server/solr-webapp/webapp/libs/ngtimeago.js b/solr-8.1.1/server/solr-webapp/webapp/libs/ngtimeago.js
new file mode 100644
index 000000000..5592402f3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/libs/ngtimeago.js
@@ -0,0 +1,101 @@
+/*
+Copyright (c) 2014 Uttesh Kumar
+
+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.
+*/
+'use strict';
+
+var catalyst = angular.module('ngtimeago', []);
+
+
+catalyst.filter('timeago', function() {
+ return function(input, p_allowFuture) {
+
+ if (input === undefined) {
+ return "-";
+ }
+
+ var substitute = function (stringOrFunction, number, strings) {
+ var string = angular.isFunction(stringOrFunction) ? stringOrFunction(number, dateDifference) : stringOrFunction;
+ var value = (strings.numbers && strings.numbers[number]) || number;
+ return string.replace(/%d/i, value);
+ },
+ nowTime = (new Date()).getTime(),
+ date = (new Date(input)).getTime(),
+ //refreshMillis= 6e4, //A minute
+ allowFuture = p_allowFuture || false,
+ strings= {
+ prefixAgo: ' ',
+ prefixFromNow: '',
+ suffixAgo: "ago",
+ suffixFromNow: "from now",
+ seconds: "less than a minute",
+ minute: "about a minute",
+ minutes: "%d minutes",
+ hour: "about an hour",
+ hours: "about %d hours",
+ day: "a day",
+ days: "%d days",
+ month: "about a month",
+ months: "%d months",
+ year: "about a year",
+ years: "%d years"
+ },
+ dateDifference = nowTime - date,
+ words,
+ seconds = Math.abs(dateDifference) / 1000,
+ minutes = seconds / 60,
+ hours = minutes / 60,
+ days = hours / 24,
+ years = days / 365,
+ separator = strings.wordSeparator === undefined ? " " : strings.wordSeparator,
+
+
+ prefix = strings.prefixAgo,
+ suffix = strings.suffixAgo;
+
+ if (allowFuture) {
+ if (dateDifference < 0) {
+ prefix = strings.prefixFromNow;
+ suffix = strings.suffixFromNow;
+ }
+ }
+
+ words = seconds < 45 && substitute(strings.seconds, Math.round(seconds), strings) ||
+ seconds < 90 && substitute(strings.minute, 1, strings) ||
+ minutes < 45 && substitute(strings.minutes, Math.round(minutes), strings) ||
+ minutes < 90 && substitute(strings.hour, 1, strings) ||
+ hours < 24 && substitute(strings.hours, Math.round(hours), strings) ||
+ hours < 42 && substitute(strings.day, 1, strings) ||
+ days < 30 && substitute(strings.days, Math.round(days), strings) ||
+ days < 45 && substitute(strings.month, 1, strings) ||
+ days < 365 && substitute(strings.months, Math.round(days / 30), strings) ||
+ years < 1.5 && substitute(strings.year, 1, strings) ||
+ substitute(strings.years, Math.round(years), strings);
+ console.log(words+" "+prefix+suffix);
+ prefix.replace(/ /g, '')
+ words.replace(/ /g, '')
+ suffix.replace(/ /g, '')
+ return (prefix+' '+words+' '+suffix+' '+separator);
+ };
+ });
+
+
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html
new file mode 100644
index 000000000..23527f735
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html
@@ -0,0 +1,128 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="analysis">
+
+ <div class="block analysis-error" id="analysis-handler-missing" ng-show="isHandlerMissing">
+ <div class="head">This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!</div>
+ </div>
+
+ <div class="block analysis-error" id="analysis-error" ng-show="analysisError">
+ <div class="body">{{analysisError}}</div>
+ </div>
+
+ <div id="analysis-holder">
+
+ <div id="field-analysis">
+
+ <form method="get">
+
+ <ul class="clearfix">
+
+ <li class="index">
+
+ <label for="analysis_fieldvalue_index">Field Value (Index)</label>
+ <textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index" ng-model="indexText"></textarea>
+
+ </li>
+
+ <li class="query">
+
+ <label for="analysis_fieldvalue_query">Field Value (Query)</label>
+ <textarea name="analysis.query" id="analysis_fieldvalue_query" ng-model="queryText"></textarea>
+
+ </li>
+
+ <li class="settings-holder clearfix">
+ <div class="settings clearfix">
+ <label for="type_or_name">Analyse Fieldname / FieldType:</label>
+ <select style="width:130px" chosen ng-change="changeFieldOrType()" id="type_or_name" ng-model="fieldOrType" ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
+
+ <a id="tor_schema" ng-href="#/{{core}}/schema?{{schemaBrowserUrl}}"><span>Schema Browser</span>&nbsp;</a>
+
+ <div class="buttons clearfix">
+
+ <button type="submit" ng-click="updateQueryString()"><span>Analyse Values</span></button>
+
+ <div class="verbose_output" ng-class="{active:verbose}">
+ <a ng-click="toggleVerbose()">Verbose Output</a>
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+ </ul>
+
+ </form>
+
+ </div>
+
+ <div id="analysis-result" class="clearfix verbose_output">
+ <div ng-class="key" ng-repeat="(key, type) in result">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody ng-repeat="component in type">
+ <tr class="step">
+ <td class="part analyzer">
+ <div>
+ <abbr title="{{component.name}}">{{component.short}}</abbr>
+ </div>
+ </td>
+
+ <td class="part legend" ng-show="verbose">
+ <div class="holder">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr ng-repeat="caption in component.captions" class="{{generate_class_name( short_key )}}">
+ <td>{{ caption }}</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ <td class="part data" ng-class="{spacer:token.blank}" colspan="1" ng-repeat="token in component.tokens track by token.index">
+ <div class="holder" ng-hide="token.blank">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr class="details">
+ <td class="details">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr class="{{value.name}} {{value.extraclass}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
+ <td>{{value.value}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="holder" ng-show="token.blank">&nbsp;</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html
new file mode 100644
index 000000000..1e64d2976
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html
@@ -0,0 +1,302 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="cloud" class="clearfix">
+
+ <div id="frame">
+
+ <div id="zk-status-content" class="content clearfix" ng-show="showZkStatus">
+ <div id="zk-controls">
+ <a class="reload" ng-click="initZookeeper()"><span>Refresh</span></a>
+ <a class="details-button" ng-click="toggleDetails()" ng-class="{on:showDetails}">
+ <span>Toggle details</span>
+ </a>
+ </div>
+
+ <div class="zookeeper-status">Status: <span class="zkstatus-{{zkState.status}}">{{zkState.status}}</span></div>
+ <div class="zookeeper-errors" ng-show="zkState.errors">
+ Errors:
+ <ul>
+ <li ng-repeat="error in zkState.errors">{{error}}</li>
+ </ul>
+ </div>
+ <div>ZK connection string: {{zkState.zkHost}}</div>
+ <div>Ensemble size: {{zkState.ensembleSize}}</div>
+ <div>Ensemble mode: {{zkState.mode}}</div>
+
+ <table id="zk-table">
+ <thead>
+ <tr>
+ <th></th>
+ <th ng-repeat="host in zkState.details">{{host.host}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="key in mainKeys">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details" ng-style="key === 'zk_server_state' && host[key] === 'leader' ? {'font-weight': 'bold'} : {'font-weight': 'normal'}">
+ {{key === 'zk_version' ? host[key].split("-")[0] : host[key]}}
+ </td>
+ </tr>
+ <tr ng-repeat="key in ensembleMainKeys" ng-show="zkState.mode === 'ensemble'">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ <tr id="detail-divider" ng-show="showDetails" >
+ <td ng-class="details"></td>
+ <td ng-repeat="host in zkState.details" ng-class="details"></td>
+ </tr>
+ <tr ng-repeat="key in detailKeys" ng-show="showDetails">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ <tr ng-repeat="key in ensembleDetailKeys" ng-show="showDetails && zkState.mode === 'ensemble'">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div id="tree-content" class="content clearfix" ng-show="showTree">
+ <jstree class="tree" on-select="showTreeLink(url)" id="tree" data="tree"></jstree>
+
+ <div id="file-content" class="clearfix">
+
+ <a id="toggle" ng-click="showProps = !showProps" ng-show="showData" ng-class="showProps ? 'minus' : 'plus'">Metadata</a>
+ <div id="prop" ng-show="znode.prop && showData && showProps">
+ <ul>
+ <li ng-class="{odd:$odd}" ng-repeat="(key, prop) in znode.prop">
+ <dl class="clearfix">
+ <dt>{{ key }}</dt>
+ <dd>{{ prop }}</dd>
+ </dl>
+ </li>
+ </ul>
+ </div>
+
+ <div id="data" ng-show="showData">
+ <em ng-show="!znode.data">Node "{{znode.path }}" has no utf8 Content</em>
+ <pre ng-show="znode.data" class="syntax language-{{lang}}"
+ ng-bind-html="znode.data | highlight:lang | unsafe">
+ </pre>
+ <a class="close" ng-click="hideData()"><span>&nbsp;</span></a>
+ </div>
+
+
+ </div>
+
+ </div>
+
+ <div id="nodes-content" class="content clearfix" ng-show="showNodes">
+ <div id="controls">
+ <a class="reload" ng-click="initClusterState()"><span>Refresh</span></a>
+ <a class="details-button" ng-click="toggleAllDetails()" ng-class="{on:showAllDetails}">
+ <span>Show all details</span>
+ </a>
+ </div>
+ <div>
+ <div id="nodesPaging">
+ <button ng-show="prevEnabled" ng-click="previousPage()" id="nodesPagingPrev">&lt; Previous</button>
+ <span ng-show="filteredHosts.length==0">No hosts found.</span>
+ <span ng-hide="filteredHosts.length==0">Hosts {{from+1}} - {{from + hostsToShow.length}} of {{filteredHosts.length}}.</span>&nbsp;
+
+ Filter by:&nbsp;<select ng-model="filterType" ng-change="filterInput()" id="nodesPagingFilterType">
+ <option value="node">Host/node name</option>
+ <option value="collection">Collection name</option>
+ </select>&nbsp;
+
+ <span ng-show="filterType=='node'">
+ <input ng-model="nodeFilter" type="text" size="10" name="nodefilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }' />&nbsp;
+ </span>
+ <span ng-show="filterType=='collection'">
+ <input ng-model="collectionFilter" type="text" size="10" name="collectionfilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }'/>&nbsp;
+ </span>
+ Show <input ng-model="pageSize" ng-change="filterInput()" type="text" size="2" name="rows" ng-model-options='{ debounce: 500 }'/> hosts per page.
+ <button ng-show="nextEnabled" ng-click="nextPage()">Next &gt;</button>
+ </div>
+ </div>
+ <table id="nodes-table">
+ <thead>
+ <tr>
+ <th>Host</th>
+ <th>Node</th>
+ <th>CPU</th>
+ <th>Heap</th>
+ <th>Disk usage</th>
+ <th>Requests</th>
+ <th>Collections</th>
+ <th>Replicas</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="key in nodesToShow | orderBy:'key.order'" ng-init="n = nodes[key]; h = nodes[firstLiveNodeForHost(key)]">
+ <td rowspan="{{hosts[h.host].nodes.length}}" ng-show="isFirstNodeForHost(key)">
+ <div class="host-name">{{h.host}}</div>
+ <span class="host-spec" ng-show="!showDetails[h.host]">
+ <span title="{{h.system.system.uptime}}">{{h.system.system.name}}</span>
+ <span title="free: {{h.memFree}}">{{h.memTotal}}</span>
+ <span title="{{h.system.jvm.name}} {{h.system.jvm.version}}">Java {{h.system.jvm.spec.version}}</span>
+ <br/>Load: {{h.loadAvg}}
+ </span>
+ <div class="host-spec" ng-show="showDetails[h.host]">
+ {{h.system.system.name}} {{h.system.system.version}}, {{h.system.system.availableProcessors}}cpu<br/>
+ Uptime: {{h.uptime}}<br/>
+ <span title="Used: {{h.memUsed}} - includes OS file-cache, and it is normal for it to approach 100%">Memory: {{h.memTotal}}</span><br/>
+ File descriptors: {{h.openFileDescriptorCount}}/{{h.maxFileDescriptorCount}}<br/>
+ Disk: <span class="{{h.diskUsedPctStyle}}" title="Nodes may use other disks too">{{h.diskTotal}} used: {{h.diskUsedPct}}%</span><br/>
+ Load: {{h.loadAvg}}
+ </div>
+ <div class="node-spec" ng-click="toggleHostDetails(h.host)">
+ <a ng-show="showDetails[h.host]">hide details...</a>
+ <a ng-show="!showDetails[h.host]">show details...</a>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}"><div class="node-name"><a href="{{n.base_url}}">{{key.replace(n.host+':', '')}}</a></div>
+ <div ng-show="n.dead" class="node-down">(DEAD)</div>
+ <div ng-show="!n.dead">
+ Uptime: {{n.jvmUptime}}<br/>
+ <div class="node-spec" ng-show="showDetails[key]">
+ Java <span title="{{n.system.jvm.jre.vendor}}">{{n.system.jvm.jre.version}}</span><br/>
+ Solr {{n.system.lucene['solr-impl-version'].split(" ")[0]}}<br>
+ </div>
+ <div class="node-spec" ng-click="toggleDetails(key)">
+ <a ng-show="showDetails[key]">hide details...</a>
+ <a ng-show="!showDetails[key]">show details...</a>
+ </div>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div class="node-cpu" ng-show="!n.dead">
+ <span class="{{n.cpuPctStyle}}">{{n.cpuPct}}%</span>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div class="node-heap" title="total: {{n.heapTotal}} free: {{n.heapFree}} used%: {{n.heapUsedPct}}%" ng-show="!n.dead">
+ <span class="{{n.heapUsedPctStyle}}">{{n.heapUsedPct}}%</span>
+ </div>
+ <div class="node-spec" ng-show="showDetails[key] && !n.dead">
+ Max: {{n.heapTotal}}<br/>
+ Used: {{n.heapUsed}}
+ </div>
+ </td>
+ <td class="scroll-height-250" ng-class="{'dead-node': n.dead}">
+ <div>
+ <div class="node-disk" title="Available disk: {{n.diskTotal}} free: {{n.diskFree}} used by this node: {{n.size}}" ng-show="!n.dead">
+ {{n.size}}
+ </div>
+ <div class="node-spec" ng-show="showDetails[key] && !n.dead">
+ Total #docs: {{n.numDocs}}<br/>
+ Avg size/doc: {{n.sizePerDoc}}
+ </div>
+ <div id="chart{{n.id}}" ng-show="showDetails[key] && !n.dead"></div>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}"><div class="node-requests" title="1minRate: {{n.req1minRate}} 5minRate: {{n.req5minRate}} 15minRate: {{n.req15minRate}} p75: {{n.reqp75_ms}} p99: {{n.reqp99_ms}}" ng-show="!n.dead">
+ RPM: {{n.req15minRate}}<br/>p95: {{n.reqp95_ms}}ms</div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div ng-show="!n.collections">(none)</div>
+ <div ng-repeat="c in n.collections | limitTo:showDetails[key]?999:2 track by $index">
+ <a href="{{h.base_url + '/#/~collections/' + c}}">{{ c }}</a>
+ </div>
+ <div class="more" ng-show="n.collections.length > 2 && !showDetails[key]">
+ <a ng-click="toggleDetails(key)">({{n.collections.length - 2}} more...)</a>
+ </div>
+ </td>
+ <td class="scroll-height-250" ng-class="{'dead-node': n.dead}">
+ <div ng-show="!n.cores">(none)</div>
+ <div ng-repeat="core in n.cores | limitTo:showDetails[key]?999:2 track by $index">
+ <div ng-show="!n.dead"><a class="{{core.leader ? 'leader' : 'replica'}}" href="{{core.base_url + '/#/' + core.core + '/core-overview'}}">{{ core.label }}</a> ({{core.numDocsHuman}} docs)</div>
+ <div ng-show="n.dead">{{ core.label }}</div>
+ <ul class="core-details" ng-show="showDetails[key] && !n.dead" >
+ <li>deleted: {{core.deletedDocsHuman}}</li>
+ <li>warmupTime: {{core.warmupTime}}</li>
+ <li ng-show="core.numDocs > 0">avg size/doc: {{core.avgSizePerDoc}}</li>
+ </ul>
+ </div>
+ <div class="more" ng-show="n.cores.length > 2 && !showDetails[key] && !n.dead">
+ <a ng-click="toggleDetails(key)">({{n.cores.length - 2}} more...)</a>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div graph data="graphData" leaf-count="leafCount" helper-data="helperData" id="graph-content" class="content clearfix" ng-show="showGraph">
+
+ <div id="canvas"></div>
+
+ <div id="legend">
+ <ul>
+ <li class="leader"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Leader</li>
+ <li class="active"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Active</li>
+ <li class="recovering"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovering</li>
+ <li class="down"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Down</li>
+ <li class="recovery_failed"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovery Failed</li>
+ <li class="shard-inactive"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Inactive</li>
+ <li class="gone"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Gone</li>
+ <li class="replicatype"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><rect width="8" height="8"></rect></g></g></svg>Replica Type:<br/>N(NRT),T(TLOG),<br/>P(PULL) </li>
+ </ul>
+ </div>
+ <div style="width: 100%; text-align: center;" ng-show="showPaging">
+ <div id="cloudGraphPaging">
+ <button ng-show="prevEnabled" ng-click="previous()" id="cloudGraphPagingPrev">&lt; Previous</button>
+ <span ng-show="total==0">No collections found.</span>
+ <span ng-hide="total==0">Collections {{start}} - {{last}} of {{total}}.</span>&nbsp;
+
+ Filter by:&nbsp;<select ng-model="filterType" ng-change="initGraph()" id="cloudGraphPagingFilterType">
+ <option value="status">Status</option>
+ <option value="name">Name</option>
+ </select>&nbsp;T:{{filterType}}
+
+ <span ng-show="filterType=='status'">
+ <select ng-model="pagingStatusFilter" id="cloudGraphPagingStatusFilter" ng-change="resetGraph()">
+ <option value=""> - Any - </option>
+ <option value="healthy">Healthy</option>
+ <option value="degraded">Degraded</option>
+ <option value="downed_shard">Downed Shard</option>
+ <option value="recovering">Replica in Recovery</option>
+ </select>
+ </span>
+ <span ng-show="filterType=='name'">
+ <input ng-model="pagingFilter" type="text" size="10" name="filter" ng-change="resetGraph()"/>&nbsp;
+ </span>
+ Show <input ng-model="rows" ng-change="resetGraph()" type="text" size="2" name="rows" /> per page.
+ <button ng-show="nextEnabled" ng-click="next()">Next &gt;</button>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="debug" ng-show="showDebug">
+ <ul class="clearfix">
+ <li class="clipboard"><a href="#" data-copied="Copied to Clipboard!">Copy to Clipboard (BUGGY!)</a></li>
+ <li class="close"><a ng-click="closeDebug()">Close</a></li>
+ </ul>
+ <pre class="debug"></pre>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html
new file mode 100644
index 000000000..892b0bbc9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html
@@ -0,0 +1,49 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<div id="cluster-suggestions">
+ <h1>Cluster Suggestions</h1>
+ <br/>
+ <table id="s-table">
+ <tr>
+ <td>Type</td>
+ <td>Reason</td>
+ <td>Details</td>
+ <td>Action</td>
+ </tr>
+ <tr ng-if="parsedData.length==0">
+ <td align="center" colspan="4">NA</td>
+ </tr>
+ <tr ng-repeat="x in parsedData">
+ <td>{{ x.type }}</td>
+ <td>{{ x.violation.clause }}</td>
+ <td>node: {{ x.violation.node }}, collection : {{ x.violation.collection }}, shard : {{ x.violation.shard }} &nbsp; </td>
+ <td>
+ <div class="s-container">
+ <input class="s-box1" ng-hide="x.run || x.type =='unresolved-violation'" type="button"
+ title="{{ x.operation }}" ng-click="postdata(x)" ng-mouseover="showPopover()"
+ ng-mouseleave="hidePopover()"/>
+ <div class="s-box2" ng-show="x.loading"><img src="img/loader.gif"></div>
+ <div class="s-box3" ng-show="x.done"><img src="img/ico/tick.png"></div>
+ <div class="s-box4" ng-show="x.failed || x.type == 'unresolved-violation'"><img src="img/ico/cross.png"></div>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+</div>
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html
new file mode 100644
index 000000000..ba09bd95f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html
@@ -0,0 +1,85 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="dashboard">
+
+ <div class="clearfix">
+
+ <div id="collection" class="block fieldlist">
+
+ <h2><span>Collection: {{selectedCollection.name}}</span></h2>
+
+ <div class="content">
+
+ <dl>
+
+ <dt>Config name:</dt>
+ <dd class="value">{{selectedCollection.configName}}</dd>
+
+ <dt>Max shards per node:</dt>
+ <dd class="value">{{selectedCollection.maxShardsPerNode}}</dd>
+
+ <dt>Replication factor:</dt>
+ <dd class="value">{{selectedCollection.replicationFactor}}</dd>
+
+ <dt>Auto-add replicas:</dt>
+ <dd class="ico value" ng-class="selectedCollection.autoAddReplicas=='true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+ <dt>Router name:</dt>
+ <dd class="value">{{selectedCollection.router.name}}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ <div id="shards" class="block fieldlist">
+
+ <h2><span>Shards</span></h2>
+
+ <div>
+
+ <div class="shard" ng-repeat="(name, shard) in selectedCollection.shards">
+ <a ng-click="hideShard(shard)"><h3 class="shard-title">{{name}}</h3></a>
+ <dl class="shard-detail clearfix" ng-hide="shard.hide">
+ <dt>Range:</dt>
+ <dd class="value">{{ shard.range }}</dd>
+
+ <dt>Active:</dt>
+ <dd class="ico value" ng-class="shard.state='active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+ <dt>Replicas:</dt>
+ <dd>
+ <div class="replica clearfix {{$odd?'odd':''}}" ng-repeat="(name, replica) in shard.replicas">
+ <a ng-click="showReplica(replica)"><h3>{{replica.core}}</h3></a>
+ <dl ng-show="replica.show">
+ <dt>Base URL: </dt><dd>{{replica.base_url}}</dd>
+ <dt>Core: </dt><dd><a href="{{replica.base_url}}{{rootUrl}}#/{{replica.core}}">{{replica.core}}</a></dd>
+ <dt>Active: </dt>
+ <dd class="ico value" ng-class="replica.state == 'active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+ <dt>Leader: </dt>
+ <dd class="ico value" ng-class="replica.leader == 'true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+ </dl>
+ </div>
+
+ </dd>
+ </dl>
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html
new file mode 100644
index 000000000..60ef47ad0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html
@@ -0,0 +1,366 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="collections" class="clearfix empty">
+
+ <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+ <div id="frame">
+
+ <div id="actions" class="actions clearfix">
+
+ <button id="add" class="action" ng-click="showAddCollection()"><span>Add Collection</span></button>
+
+ <button id="delete" class="warn requires-core" ng-click="showDeleteCollection()" ng-show="collection"><span>Delete</span></button>
+ <button id="reload" class="requires-core" ng-click="reloadCollection()" ng-show="collection"
+ ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+ <button id="create-alias" class="action requires-core" ng-click="toggleCreateAlias()"><span>Create Alias</span></button>
+ <button id="delete-alias" class="action requires-core" ng-click="toggleDeleteAlias()"><span>Delete Alias</span></button>
+
+ <div class="action add" data-rel="add" ng-show="showAdd" style="left:0px">
+
+ <form>
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" name="name" id="add_name" ng-model="newCollection.name" placeholder="new collection"></p>
+
+ <p class="clearfix"><label for="add_config">config set:</label>&nbsp;
+ <select chosen ng-options="config.name as config.name for config in configs" name="config_name" id="add_config" ng-model="newCollection.configName">
+ </select>
+ </p>
+
+ <p class="clearfix"><label for="add_numShards">numShards:</label>
+ <input type="text" name="numShards" id="add_numShards" ng-model="newCollection.numShards"></p>
+
+ <p class="clearfix"><label for="add_replicationFactor">replicationFactor:</label>
+ <input type="text" name="replicationFactor" id="add_replicationFactor" ng-model="newCollection.replicationFactor"></p>
+
+ <p class="clearfix"><a ng-click="showAdvanced=!showAdvanced">
+ <span id="add_advanced" ng-class="{open: showAdvanced}">Show advanced</span></a></p>
+ <div ng-show="showAdvanced">
+
+ <p>Advanced options: </p>
+ <p class="clearfix"><label for="add_router_name">router:</label>
+ <select name="routerName" id="add_router_name" ng-model="newCollection.routerName">
+ <option value="compositeId">Composite ID</option>
+ <option value="implicit">Implicit</option>
+ </select>
+ </p>
+
+ <p class="clearfix"><label for="add_maxShardsPerNode">maxShardsPerNode:</label>
+ <input type="text" name="replicationFactor" id="add_maxShardsPerNode" ng-model="newCollection.maxShardsPerNode"></p>
+
+ <p class="clearfix"><label for="add_shards">shards:</label>
+ <input type="text" name="shards" id="add_shards" ng-model="newCollection.shards"></p>
+
+ <p class="clearfix"><label for="add_routerField">router.field:</label>
+ <input type="text" name="routerField" id="add_routerField" ng-model="newCollection.routerField"></p>
+
+ <p class="clearfix"><label for="add_autoAddReplicas">autoAddReplicas:</label>
+ <select name="autoAddReplicas" id="add_autoAddReplicas" ng-model="newCollection.autoAddReplicas">
+ <option value="true">true</option>
+ <option value="false">false</option>
+ </select>
+ </p>
+
+ </div>
+ <p class="clearfix note error" ng-show="addMessage">
+ <span>{{addMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="addCollection()"><span>Add Collection</span></button>
+ <button type="reset" class="reset" ng-click="cancelAddCollection()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ <div class="action delete" ng-show="showDelete">
+
+ <form>
+
+ <p>Please type collection name to confirm deletion:</p>
+ <p class="clearfix"><label for="collectiondeleteConfirm">Collection</label>
+ <input type="text" ng-model="collectionDeleteConfirm" id="collectionDeleteConfirm"></p>
+
+ <p class="clearfix note error" ng-show="deleteMessage">
+ <span>{{deleteMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="deleteCollection()"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="showDelete=false"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action create-alias" ng-show="showCreateAlias">
+
+ <form>
+
+ <input type="hidden" name="core" data-core="current">
+
+ <p class="clearfix"><label for="alias">Alias Name:</label>
+ <input type="text" name="alias" ng-model="aliasToCreate" id="alias"></p>
+
+ <p class="clearfix"><label for="aliasCollections">Collections:</label>
+ <select multiple id="aliasCollections" ng-model="aliasCollections" ng-options="collection.name for collection in collections" class="other">
+ </select></p>
+
+
+ <p class="clearfix note error" ng-show="renameMessage">
+ <span>{{renameMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="createAlias()"><span>Create Alias</span></button>
+ <button type="reset" class="reset" ng-click="cancelCreateAlias()"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action delete-alias" ng-show="showDeleteAlias">
+
+ <form>
+ <span ng-show="aliases">
+ <p class="clearfix"><label for="deleteAlias">Alias:</label>
+ <select id="deleteAlias" ng-model="aliasToDelete" ng-options="alias as alias for (alias, collections) in aliases" class="other">
+ </select></p>
+
+ <p class="clearfix note error" ng-show="swapMessage">
+ <span>{{swapMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="deleteAlias()"><span>Delete Alias</span></button>
+ <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+ </p>
+ </span>
+ <span ng-hide="aliases">
+ <p>No aliases to delete.</p>
+ <p class="clearfix buttons">
+ <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+ </p>
+ </span>
+
+ </form>
+
+ </div>
+
+ </div>
+
+
+ <div class="requires-core" ng-hide="collection">
+ <h2>Please select a collection</h2>
+ </div>
+
+ <div id="data" class="requires-core clearfix" ng-show="collection">
+
+ <div class="block" id="collection-data">
+
+ <h2>Collection: {{collection.name}}</h2>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>Shard count:</span></dt>
+ <dd>{{collection.shards.length}}</dd>
+ </dl>
+ </li>
+ <li><dl class="clearfix">
+ <dt><span>configName:</span></dt>
+ <dd>{{collection.configName}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>replicationFactor:</span></dt>
+ <dd>{{collection.replicationFactor}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>maxShardsPerNode:</span></dt>
+ <dd>{{collection.maxShardsPerNode}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>router:</span></dt>
+ <dd>{{collection.router.name}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>autoAddReplicas:</span></dt>
+ <dd>{{collection.autoAddReplicas}}</dd>
+ </dl></li>
+ </ul>
+
+ </div>
+ </div>
+
+ <div class="block" id="shard-data">
+ <div class="content shard" ng-repeat="shard in collection.shards">
+ <a ng-click="toggleShard(shard)">
+ <h2>
+ <span ng-class="{open:shard.show}"><b>Shard: {{shard.name}}</b></span>
+ <div style="float:right" ng-show="!shard.range || shard.state == 'inactive'"><a ng-click="toggleRemoveShard(shard)"><span class="rem"></span></a></div>
+ </h2>
+ </a>
+ <ul ng-show="shard.showRemove">
+ <li>
+ <form class="delete-shard">
+ <p class="clearfix"><em>Are you sure you want to delete this shard?</em></p>
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: shard.deleted}" ng-click="deleteShard(shard)"><span>Delete Shard</span></button>
+ <button type="reset" class="reset" ng-click="toggleRemoveShard(shard)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </li>
+ </ul>
+ <ul ng-show="shard.show">
+ <li>
+ <ul>
+ <li>
+ <dl class="clearfix">
+ <dt><span>state:</span></dt>
+ <dd>{{shard.state}}</dd>
+ </dl>
+ </li>
+ <li>
+ <dl class="clearfix">
+ <dt><span>range:</span></dt>
+ <dd>{{shard.range}}</dd>
+ </dl>
+ <br/>
+ </li>
+ <li>
+ <ul class="replica" ng-repeat="replica in shard.replicas">
+ <li>
+ <h2>
+ <a ng-click="toggleReplica(replica)">
+ <span class="openReplica" ng-class="{open:replica.show}">Replica: {{replica.name}}</span>
+ </a>
+ <div style="float:right"><a ng-click="toggleRemoveReplica(replica)"><span class="rem"></span></a></div>
+ </h2>
+ </li>
+ <li>
+ <ul ng-show="replica.showRemove">
+ <li>
+ <form class="delete-replica">
+
+ <p class="clearfix"><em>Are you sure you want to delete this replica?</em></p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: replica.deleted}" ng-click="deleteReplica(replica)"><span>Delete Replica</span></button>
+ <button type="reset" class="reset" ng-click="toggleRemoveReplica(replica)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </li>
+ </ul>
+ <ul ng-show="replica.show">
+ <li>
+ <dl class="clearfix">
+ <dt><span>core:</span></dt>
+ <dd>{{replica.core}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>base URL:</span></dt>
+ <dd><a ng-href="{{replica.base_url}}{{rootUrl}}">{{replica.base_url}}</a></dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>node name:</span></dt>
+ <dd>{{replica.node_name}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>state:</span></dt>
+ <dd>{{replica.state}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>leader:</span></dt>
+ <dd class="ico" ng-class="replica.leader ?'ico-1' : 'ico-0'"><span></span></dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+
+ </ul>
+ </li>
+ <li ng-hide="shard.showAdd">
+ <span class="actions replica">
+ <button class="action" id="add-replica" ng-click="toggleAddReplica(shard)"><span>add replica</span></button>
+ </span>
+ </li>
+ </ul>
+ <div class="action add-replica" ng-show="shard.showAdd">
+
+ <form>
+
+ <p id="node-name" class="clearfix"><label for="node-name">Node:</label>
+ <select chosen ng-model="shard.replicaNodeName" ng-options="node for node in nodes" class="other">
+ <option value="">No specified node</option>
+ </select>
+ node: {{shard.replicaNodeName}}
+ </p>
+
+ <p class="clearfix note error" ng-show="createReplicaMessage">
+ <span>{{createReplicaMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit delete" ng-class="{success: shard.replicaAdded}" ng-click="addReplica(shard)"><span>Create Replica</span></button>
+ <button type="reset" class="reset" ng-click="toggleAddReplica(shard)"><span>Cancel</span></button>
+ </p>
+ <p clas="clearfix">&nbsp;</p>
+ </form>
+
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="navigation" class="requires-core clearfix">
+ <ul>
+ <li ng-repeat="c in collections" ng-class="{current: collection.name == c.name}"><a href="#~collections/{{c.name}}">{{c.name}}</a></li>
+ </ul>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html
new file mode 100644
index 000000000..f1826f65c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html
@@ -0,0 +1,206 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="dashboard">
+
+ <div class="clearfix">
+
+ <div class="block fieldlist" id="statistics" ng-class="{disabled: statisticsDisabled}">
+
+ <h2><span>Statistics</span></h2>
+
+ <div class="message-container" ng-show="statsMessage">
+ <div class="message">{{statsMessage}}</div>
+ </div>
+
+ <div class="content">
+
+ <dl>
+
+ <dt>Last Modified:</dt>
+ <dd class="value">{{index.lastModified | timeago}}</dd>
+
+ <dt class="index_num-docs">Num Docs:</dt>
+ <dd class="value">{{index.numDocs}}</dd>
+
+ <dt class="index_max-doc">Max Doc:</dt>
+ <dd class="index_max-doc value">{{index.maxDoc}}</dd>
+
+ <dt class="index_heap-usage-bytes">Heap Memory Usage:</dt>
+ <dd class="index_heap-usage-bytes value">{{index.indexHeapUsageBytes}}</dd>
+
+ <dt class="index_deleted-docs">Deleted Docs:</dt>
+ <dd class="index_deleted-docs value">{{index.deletedDocs}}</dd>
+
+ <dt class="index_version">Version:</dt>
+ <dd class="index_version value">{{index.version}}</dd>
+
+ <dt class="index_segmentCount">Segment Count:</dt>
+ <dd class="index_segmentCount value">{{index.segmentCount}}</dd>
+
+ <dt class="index_current">Current:</dt>
+ <dd class="ico" ng-class="index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ <div class="block fieldlist" id="instance">
+
+ <h2><span>Instance</span></h2>
+
+ <div class="message-container" ng-show="indexMessage">
+ <div class="message">{{indexMessage}}</div>
+ </div>
+
+ <div class="content">
+
+ <dl>
+
+ <dt><abbr title="Current Working Directory">CWD</abbr>:</dt>
+ <dd class="value">{{ core.directory.cwd }}</dd>
+
+ <dt>Instance:</dt>
+ <dd class="value">{{ core.directory.instance }}</dd>
+
+ <dt>Data:</dt>
+ <dd class="value">{{ core.directory.data }}</dd>
+
+ <dt>Index:</dt>
+ <dd class="value">{{ core.directory.index }}</dd>
+
+ <dt>Impl:</dt>
+ <dd class="value">{{ core.directory.dirimpl }}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ </div>
+ <div class="clearfix">
+
+ <div class="block" id="replication">
+
+ <h2>
+ <span class="is-replicating">
+ Replication
+ <span ng-show="isSlave"> (Slave)</span>
+ <span ng-show="isMaster"> (Master)</span>
+ </span>
+ </h2>
+
+ <div class="message-container" ng-show="replicationMessage">
+ <div class="message">{{replicationMessage}}</div>
+ </div>
+
+ <div class="content clearfix" id="details">
+
+ <table border="0" cellspacing="0" cellpadding="0">
+
+ <thead>
+
+ <tr>
+
+ <td><span>Index</span></td>
+ <th>Version</th>
+ <th><abbr title="Generation">Gen</abbr></th>
+ <th>Size</th>
+
+ </tr>
+
+ </thead>
+ <tbody>
+
+ <tr class="masterSearch" ng-show="isMaster">
+
+ <th>Master (Searching)</th>
+ <td class="version"><div>{{replication.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.generation}}</div></td>
+ <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+ </tr>
+
+ <tr class="master" ng-show="isMaster">
+
+ <th>Master (Replicable)</th>
+ <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+ <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+ <td class="size"><div>-</div></td>
+
+ </tr>
+
+ <tr class="master" ng-show="isSlave">
+
+ <th>Master (Replicable)</th>
+ <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+ <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+ <td class="size"><div>-</div></td>
+
+ </tr>
+
+ <tr class="masterSearch" ng-show="isSlave">
+
+ <th>Master (Searching)</th>
+ <td class="version"><div>{{replication.slave.masterDetails.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.slave.masterDetails.generation}}</div></td>
+ <td class="size"><div>{{replication.slave.masterDetails.indexSize || '-'}}</div></td>
+
+ </tr>
+
+ <tr class="slave slaveOnly" ng-show="isSlave">
+
+ <th>Slave (Searching)</th>
+ <td class="version"><div>{{replication.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.generation}}</div></td>
+ <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+ </tr>
+ </tbody>
+
+ </table>
+
+ </div>
+ </div>
+
+ <div class="block fieldlist" id="healthcheck" ng-class="{disabled: healthcheckMessage}">
+
+ <h2><span>Healthcheck</span></h2>
+
+ <div class="message-container" ng-show="healthcheckMessage">
+ <div class="message">{{healthcheckMessage}}</div>
+ </div>
+
+ <div class="content" ng-show="!healthcheckMessage">
+ <dl>
+
+ <dt class="status">Status:</dt>
+ <dd class="status value ico ico-1" ng-show="healthcheckStatus">
+ <button class="healthcheck-status enabled">Healthcheck Status</button>
+ </dd>
+ <dd class="status value ico ico-0" ng-show="!healthcheckStatus">
+ <button class="healthcheck-status">enable ping</button>
+ </dd>
+ </dl>
+ </div>
+
+ </div>
+
+ </div>
+
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html
new file mode 100644
index 000000000..161576956
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html
@@ -0,0 +1,224 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="cores" class="clearfix empty">
+
+ <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+ <div id="frame">
+
+ <div id="actions" class="actions clearfix">
+
+ <button id="add" class="action" ng-click="showAddCore()"><span>Add Core</span></button>
+ <span ng-show="hasCores">
+ <button id="unload" class="warn requires-core" ng-click="unloadCore()"><span>Unload</span></button>
+ <button id="rename" class="action requires-core" ng-click="showRenameCore()"><span>Rename</span></button>
+ <button id="swap" class="action requires-core" ng-click="showSwapCores()"><span>Swap</span></button>
+ <button id="reload" class="requires-core" ng-click="reloadCore()"
+ ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+ </span>
+ <div class="action add" data-rel="add" ng-show="showAdd" style="display:block;left:0px;">
+
+ <form>
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" name="name" id="add_name" ng-model="newCore.name"></p>
+
+ <p class="clearfix"><label for="add_instanceDir">instanceDir:</label>
+ <input type="text" name="instanceDir" id="add_instanceDir" ng-model="newCore.instanceDir"></p>
+
+ <p class="clearfix"><label for="add_dataDir">dataDir:</label>
+ <input type="text" name="dataDir" id="add_dataDir" ng-model="newCore.dataDir"></p>
+
+ <p class="clearfix"><label for="add_config">config:</label>
+ <input type="text" name="config" id="add_config" ng-model="newCore.config"></p>
+
+ <p class="clearfix"><label for="add_schema">schema:</label>
+ <input type="text" name="schema" id="add_schema" ng-model="newCore.schema"></p>
+
+ <div class="cloud" ng-show="isCloud">
+
+ <p class="clearfix"><label for="add_collection">collection:</label>
+ <input type="text" name="collection" id="add_collection" ng-model="newCore.collection"></p>
+
+ <p class="clearfix"><label for="add_shard">shard:</label>
+ <input type="text" name="add_shard" id="add_shard" ng-model="newCore.shard"></p>
+
+ </div>
+
+ <p class="clearfix note directory-note">
+
+ <span><code>instanceDir</code> and <code>dataDir</code> need to exist before you can create the core</span>
+
+ </p>
+
+ <p class="clearfix note error" ng-show="addMessage">
+ <span>{{addMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="addCore()"><span>Add Core</span></button>
+ <button type="reset" class="reset" ng-click="cancelAddCore()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ <div class="action rename" ng-show="showRename">
+
+ <form>
+
+ <input type="hidden" name="core" data-core="current">
+
+ <p class="clearfix"><label for="rename_other">New Name:</label>
+ <input type="text" name="other" ng-model="other" id="rename_other"></p>
+
+ <p class="clearfix note error" ng-show="renameMessage">
+ <span>{{renameMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="renameCore()"><span>Rename Core</span></button>
+ <button type="reset" class="reset" ng-click="cancelRenameCore()"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action swap" ng-show="showSwap">
+
+ <form>
+
+ <p class="clearfix"><label for="swap_core">this:</label>
+ <input type="text" id="swap_core" name="core" ng-model="selectedCore" readonly="readonly"></p>
+
+ <p class="clearfix"><label for="swap_other">and:</label>
+ <select id="swap_other" ng-model="swapOther" ng-options="core.name as core.name for core in swapCorelist" class="other">
+ </select></p>
+
+ <p class="clearfix note error" ng-show="swapMessage">
+ <span>{{swapMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="swapCores()"><span>Swap Cores</span></button>
+ <button type="reset" class="reset" ng-click="cancelSwapCores()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ </div>
+
+ <div id="data" class="requires-core" ng-show="hasCores">
+
+ <div class="block" id="core-data">
+
+ <h2><span>Core</span></h2>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li class="startTime"><dl class="clearfix">
+ <dt><span>startTime:</span></dt>
+ <dd class="timeago">{{core.startTime | timeago}}</dd>
+ </dl></li>
+
+ <li class="instanceDir"><dl class="clearfix">
+ <dt><span>instanceDir:</span></dt>
+ <dd>{{core.instanceDir}}</dd>
+ </dl></li>
+
+ <li class="dataDir"><dl class="clearfix">
+ <dt><span>dataDir:</span></dt>
+ <dd>{{core.dataDir}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ <div class="block" id="index-data" ng-show="hasCores">
+
+ <h2><span>Index</span></h2>
+
+ <div class="message-container">
+ <div class="message">{{core.message}}</div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li class="lastModified"><dl class="clearfix">
+ <dt><span>lastModified:</span></dt>
+ <dd class="timeago">{{core.index.lastModified | timeago}}</dd>
+ </dl></li>
+
+ <li class="version"><dl class="clearfix">
+ <dt><span>version:</span></dt>
+ <dd>{{core.index.version}}</dd>
+ </dl></li>
+
+ <li class="numDocs"><dl class="clearfix">
+ <dt><span>numDocs:</span></dt>
+ <dd>{{core.index.numDocs}}</dd>
+ </dl></li>
+
+ <li class="maxDoc"><dl class="clearfix">
+ <dt><span>maxDoc:</span></dt>
+ <dd>{{core.index.maxDoc}}</dd>
+ </dl></li>
+
+ <li class="deletedDocs"><dl class="clearfix">
+ <dt><span>deletedDocs:</span></dt>
+ <dd>{{core.index.deletedDocs}}</dd>
+ </dl></li>
+
+ <li class="current"><dl class="clearfix">
+ <dt><span>current:</span></dt>
+ <dd class="ico" ng-class="core.index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+ </dl></li>
+
+ <li class="directory"><dl class="clearfix">
+ <dt><span>directory:</span></dt>
+ <dd>{{core.index.directory}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="navigation" class="requires-core clearfix" ng-show="hasCores">
+ <ul>
+ <li ng-repeat="c in cores" ng-class="{current: core.name == c.name}"><a href="#~cores/{{c.name}}">{{c.name}}</a></li>
+ </ul>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html
new file mode 100644
index 000000000..dd11f5471
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html
@@ -0,0 +1,209 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="dataimport" class="clearfix">
+
+ <div ng-show="!hasHandlers">The solrconfig.xml file for this index does not have an operational DataImportHandler defined!</div>
+ <div id="frame" ng-show="hasHandlers">
+
+ <div id="error" ng-show="error"></div>
+
+ <div id="current_state" class="{{status}}">
+
+ <p class="last_update">Last Update: <abbr title="{{lastUpdateUTC}}">{{lastUpdate}}</abbr></p>
+ <div class="info">
+
+ <strong>{{info.text}}<span ng-show="info.timeTaken"> (Duration: {{info.timeTaken | readableSeconds }})</span>
+ </strong>
+ <div class="details" ng-show="info.showDetails">
+ <div class="docs">
+ <span ng-repeat="doc in info.docs">
+ <abbr style="display:inline" title="{{ doc.desc }}">{{ doc.name }}</abbr>: {{doc.value | number}}<!-- remove whitespace!
+ -->&nbsp;<span style="display:inline" ng-show="doc.speed">{{ doc.speed | number}}/s</span><!-- remove whitespace!
+ --><span style="display:inline" ng-show="!$last">, </span>
+ </span>
+ </div>
+ <div class="dates">
+ <span ng-repeat="date in info.dates">
+ <abbr title="{{ date.desc }}">{{ date.name }}</abbr>:
+ <abbr class="time">{{ date.value | timeago }}</abbr>
+ </span>
+ </div>
+ </div>
+
+ <button class="abort-import" ng-class="{warn:!isAborting, success: isAborting}" ng-click="abort()" ng-show="isRunning">
+ <span ng-show="isAborting">Aborting Import</span>
+ <span ng-show="!isAborting">Abort Import</span>
+ </button>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="raw_output" >
+
+ <h2>
+ <a class="toggle" ng-click="toggleRawStatus()"><span>Raw Status-Output</span></a>
+ </h2>
+
+ <div class="message-container" ng-show="showRawStatus">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showRawStatus">
+
+ <div id="raw_output_container"><pre class="syntax language-json"><code ng-bind-html="rawStatus | highlight:'json' | unsafe"></code></pre></div>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="config" ng-class="{debug_mode:isDebugMode}">
+
+ <h2 class="clearfix">
+ <a class="toggle" ng-click="toggleConfiguration()"><span>Configuration</span></a>
+ <a class="r reload_config" ng-class="{success:reloaded}" ng-click="reload()" title="Reload Configuration">Reload</a>
+ <a class="r debug_mode" ng-click="toggleDebug()">Debug-Mode</a>
+ </h2>
+
+ <div class="message-container" ng-show="showConfiguration">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showConfiguration">
+ <div id="dataimport_config">
+
+ <div class="formatted" ng-show="!isDebugMode">
+
+ <pre class="syntax language-xml"><code ng-bind-html="config | highlight:'xml'| unsafe"></code></pre>
+
+ </div>
+
+ <div class="editable" ng-show="isDebugMode">
+
+ <textarea ng-model="config"></textarea>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="debug_response" ng-show="form.showDebug">
+
+ <h2>
+ <a class="toggle" ng-click="toggleRawDebug()"><span>Raw Debug-Response</span></a>
+ </h2>
+
+ <div class="message-container" ng-show="showRawDebug">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showRawDebug">
+ <span ng-hide="rawResponse">
+ <em>No Request executed</em>
+ </span>
+ <span ng-show="rawResponse">
+ <pre class="syntax language-json"><code ng-bind-html="rawResponse | highlight:'json' | unsafe"></code></pre>
+ </span>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="form" ng-show="hasHandlers">
+
+ <div id="navigation">
+
+ <ul>
+ <li ng-class="{current: currentHandler == handler}" ng-repeat="handler in handlers">
+ <a href="#/{{form.core}}/dataimport/{{handler}}">{{handler}}</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <form action="#" method="get">
+
+ <label for="command">
+ <a rel="help">Command</a>
+ </label>
+ <select name="command" id="command" ng-model="form.command">
+ <option>full-import</option>
+ <option>delta-import</option>
+ </select>
+
+ <label for="verbose" class="checkbox">
+ <input type="checkbox" name="verbose" id="verbose" ng-model="form.verbose">
+ Verbose
+ </label>
+
+ <label for="clean" class="checkbox">
+ <input type="checkbox" name="clean" id="clean" ng-model="form.clean">
+ Clean
+ </label>
+
+ <label for="commit" class="checkbox">
+ <input type="checkbox" name="commit" id="commit" ng-model="form.commit">
+ Commit
+ </label>
+
+ <label for="optimize" class="checkbox">
+ <input type="checkbox" name="optimize" id="optimize" ng-model="form.optimize">
+ Optimize
+ </label>
+
+ <label for="debug" class="checkbox">
+ <input type="checkbox" name="debug" id="debug" ng-model="form.showDebug">
+ Debug
+ </label>
+
+ <label for="entity">
+ <a rel="help">Entity</a>
+ </label>
+ <select ng-model="form.entity" id="entity">
+ <option value=""></option>
+ <option ng-repeat="entity in entities">{{entity}}</option>
+ </select>
+
+ <label for="start">
+ <a rel="help">Start</a>,
+ <a rel="help">Rows</a>
+ </label>
+ <div class="clearfix">
+ <input type="text" id="start" placeholder="0" ng-model="form.start">
+ <input type="text" id="rows" placeholder="10" ng-model="form.rows">
+ </div>
+
+ <label for="custom_parameters">
+ <a rel="help">Custom Parameters</a>
+ </label>
+ <input type="text" id="custom_parameters" ng-model="form.custom" placeholder="key1=val1&amp;key2=val2">
+ </form>
+ <button class="execute" type="submit" ng-click="submit()">
+ <span ng-show="isDebugMode">Execute with this Configuration →</span>
+ <span ng-show="!isDebugMode">Execute</span>
+ </button>
+ <button class="refresh-status" ng-click="refreshStatus()" ng-class="{loader: isStatusLoading, success: statusUpdated}"><span>Refresh Status</span></button>
+
+ <p id="auto-refresh-status"><a ng-click="updateAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh Status</a></p>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html
new file mode 100644
index 000000000..2bf3f1298
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html
@@ -0,0 +1,111 @@
+<!--
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+
+<div id="documents" class="clearfix">
+ <div id="form">
+ <form>
+ <label for="qt">
+ <a rel="help">Request-Handler (qt)</a>
+ </label>
+ <input ng-model="handler" type="text" id="qt" value="/update" title="Request handler in solrconfig.xml.">
+ <label for="document-type">
+ <a rel="help">Document Type</a>
+ </label>
+
+ <div><select ng-model="type" id="document-type" ng-change="changeDocumentType()" placeholder="The type of the document field">
+ <!-- TODO: support the Builder -->
+ <option value="csv">CSV</option>
+ <option value="wizard">Document Builder</option>
+ <option value="upload">File Upload</option>
+ <option value="json">JSON</option>
+ <option value="solr">Solr Command (raw XML or JSON)</option>
+ <option value="xml">XML</option>
+ </select>
+ </div>
+ <div id="document-container">
+ <div id="wizard" ng-show="type=='wizard'">
+ <div id="wizard-fields">
+ <div><span class="description">Field</span>: <select ng-model="fieldName" id="wiz-field-select" name="wiz-field-select"
+ ng-options="field for field in fields"></select>
+ </div>
+ <div><span id="wiz-field-data"><span class="description">Field Data</span>:</span>
+ <textarea ng-model="fieldData"
+ id="wizard-doc"
+ name="wizard-doc"
+ rows="10"
+ cols="40"
+ placeholder="Enter your field text here and then click 'Add Field' to add the field to the document.">
+ </textarea>
+ </div>
+ </div>
+ <div id="wizard-add"><a ng-click="addWizardField()" id="add-field-href"><img border="0" src="./img/ico/plus-button.png"/>Add
+ Field</a></div>
+ </div>
+ <label for="document">
+ <a rel="help">Document(s)</a>
+ </label>
+ <textarea ng-show="type!='upload'" ng-model="document" name="document" id="document" title="The Document" rows="10"
+ cols="70" placeholder="{{placeholder}}"></textarea>
+
+ <div id="file-upload" ng-show="type=='upload'">
+ <input type="file" id="the-file" name="the-file" file-model="fileUpload"/>
+ </div>
+ </div>
+
+ <div id="advanced">
+ <!-- TODO: only show for JSON/XML-->
+ <div id="attribs">
+ <div id="upload-only" ng-show="type=='upload'">
+ <label for="erh-params"><!-- TODO: cleaner way to do this? -->
+ <a rel="help">Extracting Req. Handler Params</a>
+ </label>
+ <input ng-model="literalParams" type="text" id="erh-params" value="&literal.id=change.me"
+ title="Extracting Request Handler Parameters" size="50">
+ </div>
+ <div id="general-attribs">
+ <label for="commitWithin">
+ <a rel="help">Commit Within</a>
+ </label>
+ <input type="text" ng-model="commitWithin" id="commitWithin" value="1000" title="Commit Within (ms)">
+ <label for="overwrite">
+ <a rel="help">Overwrite</a>
+ </label>
+ <input ng-model="overwrite" type="text" id="overwrite" value="true" title="Overwrite">
+ </div>
+ </div>
+ </div>
+
+ <button type="submit" ng-click="submit()" id="submit">Submit Document</button>
+ </form>
+ </div>
+ <div id="result">
+ <div id="response" ng-show="response">
+ <div>
+ <span class="description">Status: </span>{{ responseStatus }}
+ </div>
+ <div>
+ <span class="description">Response:</span>
+ <pre class="syntax language-json"><code ng-bind-html="response | highlight:'json' | unsafe"></code></pre>
+ </div>
+ </div>
+
+ </div>
+</div>
+
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/files.html b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html
new file mode 100644
index 000000000..6a31096f0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html
@@ -0,0 +1,47 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="files" class="clearfix">
+
+ <div id="frame">
+
+ <div id="tree-holder">
+
+ <jstree class="tree" on-select="showTreeLink(data)" data="tree" id="tree"></jstree>
+
+ </div>
+ <div id="file-content" class="clearfix">
+
+ <div class="top clearfix">
+
+ <a id="url" class="address-bar" href="{{url}}" ng-show="url">{{baseurl}}{{url}}</a>
+
+ </div>
+
+ <div class="view-file">
+
+ <div class="response" ng-show="content">
+ <pre class="syntax language-{{lang}}"><code ng-bind-html="content | highlight:lang | unsafe"></code></pre>
+ </div>
+
+
+ </div>
+
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/index.html b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html
new file mode 100644
index 000000000..b9e6a90f4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html
@@ -0,0 +1,261 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="index" class="clearfix">
+
+ <div class="clearfix">
+
+ <div class="index-left">
+
+ <div class="block" id="instance">
+
+ <h2><span>Instance</span></h2>
+
+ <div class="content">
+
+ <ul class="data" ngShow="system">
+
+ <li class="start_time"><dl class="clearfix">
+ <dt><span>Start</span></dt>
+ <dd class="timeago">{{system.jvm.jmx.startTime | timeago}}</dd>
+ </dl></li>
+
+<!--
+ <li class="host"><dl class="clearfix">
+ <dt><span>Host</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_cwd"><dl class="clearfix">
+ <dt><span>CWD</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_instance"><dl class="clearfix">
+ <dt><span>Instance</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_data"><dl class="clearfix">
+ <dt><span>Data</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_index"><dl class="clearfix">
+ <dt><span>Index</span></dt>
+ <dd></dd>
+ </dl></li>
+-->
+ </ul>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="versions">
+
+ <h2><span>Versions</span></h2>
+
+ <div class="content">
+
+ <ul class="data">
+
+ <li class="solr solr_spec_version"><dl class="clearfix">
+ <dt><span>solr-spec</span></dt>
+ <dd>{{system.lucene["solr-spec-version"]}}</dd>
+ </dl></li>
+
+ <li class="solr_impl_version"><dl class="clearfix">
+ <dt class=""><span>solr-impl</span></dt>
+ <dd>{{system.lucene["solr-impl-version"]}}</dd>
+ </dl></li>
+
+ <li class="lucene lucene_spec_version"><dl class="clearfix">
+ <dt><span>lucene-spec</span></dt>
+ <dd>{{system.lucene["lucene-spec-version"]}}</dd>
+ </dl></li>
+
+ <li class="lucene_impl_version"><dl class="clearfix">
+ <dt><span>lucene-impl</span></dt>
+ <dd>{{system.lucene["lucene-impl-version"]}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="index-right">
+
+ <div class="block" id="system">
+
+ <h2><span>System</span>
+ <small class="bar-desc">{{load_average[0]}} {{load_average[1]}} {{load_average[2]}}</small>
+ </h2>
+ <a class="reload" ng-click="reload()"><span>reload</span></a>
+
+ <div class="content">
+
+ <div id="physical-memory-bar" ng-show="system.system.totalPhysicalMemorySize && system.system.freePhysicalMemorySize">
+
+ <p data-desc="physical-memory-bar">Physical Memory
+ <small class="bar-desc">{{memoryPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{memoryMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width:memoryPercentage}">
+ <span class="bar-total val" title="raw: {{memoryTotal}}B">{{memoryTotalDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="swap-space-bar" ng-show="system.system.totalSwapSpaceSize && system.system.freeSwapSpaceSize">
+
+ <p data-desc="swap-space-bar">Swap Space
+ <small class="bar-desc">{{swapPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{swapMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width:swapPercentage}">
+ <span class="bar-total val" title="raw:{{swapTotal}}B">{{swapTotalDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="file-descriptor-bar" ng-show="system.system.maxFileDescriptorCount && system.system.openFileDescriptorCount">
+
+ <p data-desc="file-descriptor-bar">File Descriptor Count
+ <small class="bar-desc">{{fileDescriptorPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{system.system.maxFileDescriptorCount}}</span>
+
+ <div class="bar-total bar" ng-style="{width:fileDescriptorPercentage}">
+ <span class="bar-total val">{{system.system.openFileDescriptorCount}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <p class="no-info" ng-show="noInfo">Sorry, no information available</p>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="clearfix">
+
+ <div class="index-left">
+
+ <div class="block" id="jvm">
+
+ <h2><span>JVM</span></h2>
+
+ <div class="content clearfix">
+
+ <ul class="data">
+
+ <li class="jvm_version"><dl class="clearfix">
+ <dt><span>Runtime</span></dt>
+ <dd>{{system.jvm.name}} {{system.jvm.version}}</dd>
+ </dl></li>
+
+ <li class="processors"><dl class="clearfix">
+ <dt><span>Processors</span></dt>
+ <dd>{{system.jvm.processors}}</dd>
+ </dl></li>
+
+ <li class="command_line_args"><dl class="clearfix">
+ <dt><span>Args</span></dt>
+ <dd ng-repeat="arg in commandLineArgs track by $index" ng-class="{'odd':$odd}">{{arg}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+ <div class="index-right">
+
+ <div class="block" id="jvm-memory">
+
+ <h2><span data-desc="jvm-memory-bar">JVM-Memory
+ <small class="bar-desc">{{javaMemoryPercentage}}</small>
+ </span></h2>
+
+ <div class="content">
+
+ <div id="jvm-memory-bar">
+ <div class="bar-holder bar-lvl-3">
+
+ <div class="bar-max bar">
+ <span class="bar-max val" title="raw: {{javaMemoryMax}}">{{javaMemoryMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width: javaMemoryTotalPercentage}">
+ <span class="bar-total val" title="raw: {{javaMemoryTotal}}B">{{javaMemoryTotalDisplay}}</span>
+
+ <div class="bar-used bar" ng-style="{width: javaMemoryUsedPercentage}">
+ <span class="bar-used val" title="raw: {{javaMemoryUsed}}B">{{javaMemoryUsedDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html
new file mode 100644
index 000000000..047de48d5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html
@@ -0,0 +1,27 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+ <div id="java-properties">
+ <ul>
+ <li ng-class="{odd:$odd}" ng-repeat="prop in props | orderObjectBy:'name'">
+ <dl class="clearfix">
+ <dt ng-bind-html="prop.name | unsafe"></dt>
+ <dd ng-class="{odd:$odd, multi:props.length&gt;1}" ng-repeat="value in prop.values">{{value.value}}</dd>
+ </dl>
+ </li>
+ </ul>
+ </div>
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html
new file mode 100644
index 000000000..5a4a2d681
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html
@@ -0,0 +1,56 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="logging" class="clearfix">
+
+
+ <div id="frame">
+
+ <div class="block">
+ <h2><span>{{watcher}}</span></h2>
+ <ul class="tree jstree">
+ <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logging" ng-include="'logger.html'"></li>
+ </ul>
+ </div>
+ </div>
+</div>
+
+ <script type="text/ng-template" id="logger.html">
+ <ins class="trigger jstree-icon">&nbsp;</ins>
+ <a ng-click="toggleOptions(logger)" class="trigger {{logger.level.toLowerCase() }}" ng-class="{null:!logger.level, set: logger.set}" title="{{ logger.name }}" rel="{{logger.level}}">
+ <span class="ns">{{logger.name}}</span>
+ <span class="name" ng-show="logger.short">{{ logger.short }}</span>
+ <span class="name" ng-show="!logger.short"><em>empty</em></span>
+ </a>
+
+ <div class="selector-holder" ng-class="{open:logger.showOptions}">
+ <div class="selector">
+ <a class="trigger" ng-click="toggleOptions(logger)"><span><em>{{logger.level || "null"}}</em></span></a>
+ <div ng-show="logger.showOptions">
+ <ul>
+ <li ng-repeat="level in levels track by level.pos">
+ <a ng-click="setLevel(logger, level.name)">{{level.name}}</a>
+ </li>
+ <li class="unset"><a ng-click="setLevel(logger, 'unset')">UNSET</a></li>
+ </ul>
+ <a class="close" ng-click="toggleOptions(logger)"><span>[x]</span></a>
+ </div>
+ </div>
+ </div>
+ <ul>
+ <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logger.children" ng-include="'logger.html'"></li>
+ </ul>
+ </script>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html
new file mode 100644
index 000000000..9952360b3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html
@@ -0,0 +1,57 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="logging" class="clearfix">
+
+ <div id="viewer">
+ <div class="block">
+ <h2><span>{{watcher}}</span></h2>
+ </div>
+ <table class="has-data" border="0" cellpadding="0" cellspacing="0">
+ <thead>
+ <tr>
+ <th class="time">Time (<span>{{timezone}}</span>)</th>
+ <th class="level">Level</th>
+ <th class="core">Core</th>
+ <th class="logger">Logger</th>
+ <th class="message">Message</th>
+ </tr>
+ </thead>
+ <tbody ng-repeat="event in events">
+ <tr ng-click="toggleRow(event)" class="{{event.trace ? 'has-trace': ''}} {{'level-'+event.level.toLowerCase()}}">
+ <td class="span"><a><span>{{ timezone == "UTC" ? event.utc_time : event.local_time }}</span></a></td>
+ <td class="level span"><a><span>{{ event.level }} {{event.showTrace}}</span></span></a></td>
+ <td class="span"><a><span>{{ event.core }}</span></a></td>
+ <td class="span"><a><span><abbr title="{{event.logger}}">{{event.loggerBase}}</abbr></span></a></td>
+ <td class="message span"><a><span>{{ event.message }}</span></a></td>
+ </tr>
+ <tr class="trace" ng-show="event.showTrace && event.trace">
+ <td colspan="4"><pre>{{event.trace}}</pre></td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr ng-show="events.length==0">
+ <td colspan="4">No Events available</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div id="footer" class="clearfix">
+ <div id="state">Last Check: {{sinceDisplay}}</div>
+ <div id="date-format" ng-click="toggleTimezone()"><a ng-class="{on: timezone=='UTC'}">Show dates in UTC</a></div>
+ <a id="refresh-toggle" ng-class="{'active': !stopped, 'stopped': stopped}" ng-click="toggleRefresh()">Auto-Refresh</a>
+ </div>
+ </div>
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/login.html b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html
new file mode 100644
index 000000000..29c8c7150
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html
@@ -0,0 +1,160 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="login" class="clearfix">
+
+ <div ng-show="authScheme === 'Basic'">
+ <h1>Basic Authentication</h1>
+ <div class="login-error" ng-show="statusText !== 'require authentication' || authParamsError !== null">
+ {{statusText}}{{authParamsError}}
+ </div>
+ <div ng-show="!isLoggedIn()">
+ <p>
+ Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}.<br/>
+ Please log in with your username and password for realm {{authRealm}}.
+ </p>
+ <br/>
+ <div ng-show="error" class="alert alert-danger">{{error}}</div>
+ <form name="form" ng-submit="login()" role="form">
+ <div class="form-group">
+ <label for="username">Username</label>
+ <input type="text" name="username" id="username" class="form-control" ng-model="username" required />
+ <span ng-show="form.username.$dirty && form.username.$error.required" class="help-block">Username is required</span>
+ </div>
+ <div class="form-group">
+ <label for="password">Password</label>
+ <input type="password" name="password" id="password" class="form-control" ng-model="password" required />
+ <span ng-show="form.password.$dirty && form.password.$error.required" class="help-block">Password is required</span>
+ </div>
+ <br/>
+ <div class="form-actions">
+ <button type="submit" ng-disabled="form.$invalid" class="btn btn-danger">Login</button>
+ </div>
+ </form>
+ </div>
+
+ <div ng-show="isLoggedIn()">
+ <p>
+ Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/>
+ </p>
+ <br/>
+ <form name="logoutForm" ng-submit="logout()" role="form" ng-show="isLoggedIn()">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Logout</button>
+ </div>
+ </form>
+ </div>
+
+ </div>
+
+ <div ng-show="authScheme === 'Negotiate'">
+ <h1>Kerberos Authentication</h1>
+ <p>Your browser did not provide the required information to authenticate using Kerberos.
+ Please check that your computer has a valid ticket for communicating with Solr,
+ and that your browser is properly configured to provide that ticket when required.
+ For more information, consult
+ <a href="https://lucene.apache.org/solr/guide/kerberos-authentication-plugin.html">
+ Solr's Kerberos documentation
+ </a>.
+ </p>
+ The response from the server was:
+ <hr/>
+ <pre>HTTP 401 {{statusText}}
+WWW-Authenticate: {{wwwAuthHeader}}</pre>
+ <hr/>
+ </div>
+
+ <div ng-show="authScheme === 'Bearer'">
+ <h1>OpenID Connect (JWT) authentication</h1>
+ <div class="login-error" ng-show="statusText || authParamsError || error">
+ {{statusText}} {{authParamsError}} {{error}} {{errorDescription}}
+ </div>
+ <div ng-show="isCallback">
+ Callback from ID Provider received.
+ <p ng-show="error">
+ There were errors during login with ID Provider. Please try again.<br/>
+ </p>
+ </div>
+ <div ng-show="!isLoggedIn() && !isCallback">
+ <p>
+ Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}.
+ </p>
+ <div ng-show="authData !== null && jwtIsLoginNode()">
+ <p>
+ Please log in with your Identity Provider (IdP) for realm {{authRealm}}.
+ </p>
+ <p>
+ Clicking the button below, you will be redirected to the authorization endpoint of the ID provider:<br/>
+ {{authData['authorizationEndpoint']}}
+ </p>
+ <br/>
+ <div ng-show="error" class="alert alert-danger">{{error}}</div>
+ <form name="form" ng-submit="jwtLogin()" role="form">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Redirect to Identity Provider</button>
+ </div>
+ </form>
+ </div>
+ <div ng-show="authData !== null && !jwtIsLoginNode()">
+ <p>
+ In order to log in to the identity provider, you need to load this page from the Solr node registered as callback node:<br/>
+ {{jwtFindLoginNode()}}<br/>
+ After successful login you will be able to navigate to other nodes.
+ </p>
+ <p>
+ <form name="form" ng-submit="jwtGotoLoginNode()" role="form">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Redirect to {{jwtFindLoginNode()}}</button>
+ </div>
+ </form>
+ </p>
+ </div>
+ <div class="login-error" ng-show="authData === null">
+ Unable to login. There is a problem with the Solr backend. Please consult Solr logs.
+ </div>
+ </div>
+
+ <div ng-show="isLoggedIn()">
+ <p>
+ Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/>
+ </p>
+ <br/>
+ <form name="logoutForm" ng-submit="jwtLogout()" role="form" ng-show="isLoggedIn()">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Logout</button>
+ </div>
+ </form>
+ </div>
+
+ </div>
+
+ <div ng-show="!authSchemeSupported">
+ <h1>Authentication scheme not supported</h1>
+
+ <div class="login-error">
+ {{statusText}}
+ </div>
+
+ <p>Some or all Solr operations are protected by an authentication scheme that is not yet supported by this Admin UI ({{authScheme}}).</p>
+ <p>Solr returned an error response:
+ <hr/>
+ <pre>HTTP 401 {{statusText}}
+WWW-Authenticate: {{wwwAuthHeader}}</pre>
+ <hr/>
+ </p>
+ <p>A possible workaround may be to use another client that supports this scheme.</p>
+ </div>
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html
new file mode 100644
index 000000000..aaa424d3b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html
@@ -0,0 +1,72 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="plugins" class="clearfix">
+
+ <div id="frame">
+ <ul>
+ <li class="entry" ng-class="{changed: plugin.changed}" ng-repeat="plugin in type.plugins">
+ <a ng-click="selectPlugin(plugin)">
+ <span>{{ plugin.name }}</span>
+ </a>
+ <ul class="detail" ng-show="plugin.open">
+ <li ng-repeat="(key, value) in plugin.properties" ng-class="{odd: $odd}">
+ <dl class="clearfix">
+ <dt>{{ key }}:</dt>
+ <!--<dd ng-repeat="v in value">{{v}}</dd><!-- is AN ARRAY!!-->
+ <dd>{{value}}</dd>
+ </dl>
+ </li>
+ <li class="stats clearfix" ng-show="plugin.stats">
+ <span>stats:</span>
+ <ul>
+ <li ng-repeat="(key, value) in plugin.stats" ng-class="{odd: $odd}">
+ <dl class="clearfix">
+ <dt>{{key}}:</dt>
+ <dd>{{value}}</dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </ul>
+ </div>
+
+ <div id="navigation" class="clearfix">
+
+ <ul>
+ <li ng-repeat="typeObj in types" class="{{typeObj.lower}}" ng-class="{active:typeObj==type}">
+ <a ng-click="selectPluginType(typeObj)" rel="{{typeObj.name}}">{{typeObj.name}}
+ <span ng-show="typeObj.changes">{{typeObj.changes}}</span>
+ </a>
+ </li>
+ <li class="PLUGINCHANGES"><a ng-click="startRecording()">Watch Changes</a></li>
+ <li class="RELOAD"><a ng-click="refresh()">Refresh Values</a></li>
+ <li class="NOTE"><p>NOTE: Only selected metrics are shown here. Full metrics can be accessed via /admin/metrics handler.</p></li>
+ </ul>
+ </div>
+
+ <div id="recording" ng-show="isRecording">
+ <div class="wrapper clearfix">
+
+ <p class="loader">Watching for Changes</p>
+ <button class="primary" ng-click="stopRecording()">Stop &amp; Show Changes</button>
+
+ </div>
+ <div id="blockUI"></div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/query.html b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html
new file mode 100644
index 000000000..2a7735505
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html
@@ -0,0 +1,357 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="query" class="clearfix">
+
+ <div id="form">
+ <form>
+ <label for="qt" title="Request handler in solrconfig.xml.">
+ <a rel="help">Request-Handler (qt)</a>
+ </label>
+ <input type="text" ng-model="qt" id="qt" value="/select" title="Request handler in solrconfig.xml.">
+
+ <fieldset class="common">
+ <legend>common</legend>
+ <div class="fieldset">
+
+ <label for="q" title="The query string.">
+ q
+ </label>
+ <textarea name="q" ng-model="query.q" id="q" title="The query string.">*:*</textarea>
+
+ <label for="fq" title="Filter query.">
+ <a rel="help">fq</a>
+ </label>
+ <div class="multiple">
+ <div class="row clearfix" ng-repeat="filter in filters">
+ <input type="text" ng-model="filter.fq" id="fq" name="fq" title="Filter query.">
+ <div class="buttons">
+ <a class="rem" ng-click="removeFilter($index)"><span></span></a>
+ <a class="add" ng-click="addFilter($index)"><span></span></a>
+ </div>
+ </div>
+ </div>
+
+ <label for="sort" title="Sort field or function with asc|desc.">
+ <a rel="help">sort</a>
+ </label>
+ <input type="text" ng-model="query.sort" id="sort" name="sort" title="Sort field or function with asc|desc.">
+
+ <label for="start" title="Number of leading documents to skip and number of documents to return after 'start'. (Integers)">
+ <a rel="help">start</a>,
+ <a rel="help">rows</a>
+ </label>
+ <div class="clearfix">
+ <input type="text" name="start" ng-model="query.start" id="start" placeholder="0" pattern="[0-9]+" title="Number of leading documents to skip. (Integer)">
+ <input type="text" name="rows" ng-model="query.rows" id="rows" placeholder="10" pattern="[0-9]+" title="Number of documents to return after 'start'. (Integer)">
+ </div>
+
+ <label for="fl" title="Field list, comma separated.">
+ <a rel="help">fl</a>
+ </label>
+ <input type="text" ng-model="query.fl" name="fl" id="fl" value="" title="Field list, comma separated.">
+
+ <label for="df" title="Default search field">
+ <a rel="help">df</a>
+ </label>
+ <input type="text" ng-model="query.df" name="df" id="df" value="" title="Default search field">
+
+ <label for="custom_parameters">
+ <a rel="help">Raw Query Parameters</a>
+ </label>
+ <input type="text" ng-model="rawParams" id="custom_parameters" value="" placeholder="key1=val1&amp;key2=val2">
+
+ <label for="wt" title="The writer type (response format).">
+ <a rel="help">wt</a>
+ </label>
+ <select name="wt" ng-model="query.wt" id="wt" title="The writer type (response format).">
+ <option ng-selected="selected" value=''>------</option>
+ <option>json</option>
+ <option>xml</option>
+ <option>python</option>
+ <option>ruby</option>
+ <option>php</option>
+ <option>csv</option>
+ </select>
+
+ <label for="indent off" class="checkbox" title="Do not indent results.">
+ <input type="checkbox" ng-model="query.indent" name="indent" id="indent" title="Do not indent results." ng-true-value="'off'" ng-false-value="''">
+ indent off
+ </label>
+
+ <label for="debugQuery" class="checkbox" title="Show timing and diagnostics.">
+ <input type="checkbox" ng-model="query.debugQuery" name="debugQuery" id="debugQuery" title="Show timing and diagnostics." ng-true-value="'on'" ng-false-value="''">
+ debugQuery
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="dismax optional">
+ <legend>
+ <label for="dismax" class="checkbox" title="Enable dismax.">
+ <input type="checkbox" ng-model="isDismax" name="defType" id="dismax" value="dismax">
+ dismax
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isDismax">
+
+ <label for="q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
+ <input type="text" ng-model="dismax['q.alt']" name="q.alt" id="q_alt" title="Alternate query when 'q' is absent.">
+
+ <label for="qf" title="Query fields with optional boosts.">qf</label>
+ <input type="text" ng-model="dismax.qf" name="qf" id="qf" title="Query fields with optional boosts.">
+
+ <label for="mm" title="Min-should-match expression">mm</label>
+ <input type="text" ng-model="dismax.mm" name="mm" id="mm" title="Min-should-match expression.">
+
+ <label for="pf" title="Phrase boosted fields.">pf</label>
+ <input type="text" ng-model="dismax.pf" name="pf" id="pf" title="Phrase boosted fields.">
+
+ <label for="ps" title="Phrase boost slop.">ps</label>
+ <input type="text" ng-model="dismax.ps" name="ps" id="ps" title="Phrase boost slop.">
+
+ <label for="qs" title="Query string phrase slop.">qs</label>
+ <input type="text" ng-model="dismax.qs" name="qs" id="qs" title="Query string phrase slop.">
+
+ <label for="tie" title="Score tie-breaker. Try 0.1.">tie</label>
+ <input type="text" ng-model="dismax.tie" name="tie" id="tie" title="Score tie-breaker. Try 0.1.">
+
+ <label for="bq" title="Boost query.">bq</label>
+ <input type="text" ng-model="dismax.bq" name="bq" id="bq" title="Boost query.">
+
+ <label for="bf" title="Boost function (added).">bf</label>
+ <input type="text" ng-model="dismax.bf" name="bf" id="bf" title="Boost function (added).">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="edismax optional">
+ <legend>
+ <label for="edismax" class="checkbox" title="Enable edismax.">
+ <input type="checkbox" ng-model="isEdismax" name="defType" id="edismax" value="edismax">
+ <strong>e</strong>dismax
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isEdismax">
+
+ <label for="edismax_q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
+ <input type="text" ng-model="edismax['q.alt']" name="q.alt" id="edismax_q_alt" title="Alternate query when 'q' is absent.">
+
+ <label for="edismax_qf" title="Query fields with optional boosts.">qf</label>
+ <input type="text" ng-model="edismax.qf" name="qf" id="edismax_qf" title="Query fields with optional boosts.">
+
+ <label for="edismax_mm" title="Min-should-match expression.">mm</label>
+ <input type="text" ng-model="edismax.mm" name="mm" id="edismax_mm" title="Min-should-match expression.">
+
+ <label for="edismax_pf" title="Phrase boosted fields.">pf</label>
+ <input type="text" ng-model="edismax.pf" name="pf" id="edismax_pf" title="Phrase boosted fields.">
+
+ <label for="edismax_ps" title="Phrase boost slop.">ps</label>
+ <input type="text" ng-model="edismax.ps" name="ps" id="edismax_ps" title="Phrase boost slop.">
+
+ <label for="edismax_qs" title="Query string phrase slop.">qs</label>
+ <input type="text" ng-model="edismax.qs" name="qs" id="edismax_qs" title="Query string phrase slop.">
+
+ <label for="edismax_tie" title="Score tie-breaker. Try 0.1.">tie</label>
+ <input type="text" ng-model="edismax.tie" name="tie" id="edismax_tie" title="Score tie-breaker. Try 0.1.">
+
+ <label for="edismax_bq" title="Boost query.">bq</label>
+ <input type="text" ng-model="edismax.bq" name="bq" id="edismax_bq" title="Boost query.">
+
+ <label for="edismax_bf" title="Boost function (added).">bf</label>
+ <input type="text" ng-model="edismax.bf" name="bf" id="edismax_bf" title="Boost function (added).">
+
+ <label for="edismax_uf" title="User Fields">uf</label>
+ <input type="text" ng-model="edismax.uf" name="uf" id="edismax_uf" title="User Fields">
+
+ <label for="edismax_pf2" title="bigram phrase boost fields">pf2</label>
+ <input type="text" ng-model="edismax.pf2" name="pf2" id="edismax_pf2" title="bigram phrase boost fields">
+
+ <label for="edismax_pf3" title="trigram phrase boost fields">pf3</label>
+ <input type="text" ng-model="edismax.pf3" name="pf3" id="edismax_pf3" title="trigram phrase boost fields">
+
+ <label for="edismax_ps2" title="phrase slop for bigram phrases">ps2</label>
+ <input type="text" ng-model="edismax.ps2" name="ps2" id="edismax_ps2" title="phrase slop for bigram phrases">
+
+ <label for="edismax_ps3" title="phrase slop for trigram phrases">ps3</label>
+ <input type="text" ng-model="edismax.ps3" name="ps3" id="edismax_ps3" title="phrase slop for trigram phrases">
+
+ <label for="edismax_boost" title="multiplicative boost function">boost</label>
+ <input type="text" ng-model="edismax.boost" name="boost" id="edismax_boost" title="multiplicative boost function">
+
+ <label for="edismax_stopwords" class="checkbox" title="remove stopwords from mandatory 'matching' component">
+ <input type="checkbox" ng-model="edismax.stopwords" name="stopwords" id="edismax_stopwords">
+ stopwords
+ </label>
+
+ <label for="edismax_lowercaseOperators" class="checkbox" title="Enable lower-case 'and' and 'or' as operators">
+ <input type="checkbox" ng-model="edismax.lowercaseOperators" name="lowercaseOperators" id="edismax_lowercaseOperators">
+ lowercaseOperators
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="hl optional">
+ <legend>
+ <label for="hl" class="checkbox" title="Enable highlighting.">
+ <input type="checkbox" ng-model="isHighlight" name="hl" id="hl" value="true">
+ hl
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isHighlight">
+
+ <label for="hl_fl" title="Fields to highlight on.">hl.fl</label>
+ <input type="text" ng-model="hl['hl.fl']" name="hl.fl" id="hl_fl" value="" title="Fields to highlight on.">
+
+ <label for="hl_simple_pre">hl.simple.pre</label>
+ <input type="text" ng-model="hl['hl.simple.pre']" name="hl.simple.pre" id="hl_simple_pre" value="<em>">
+
+ <label for="hl_simple_post">hl.simple.post</label>
+ <input type="text" ng-model="hl['hl.simple.post']" name="hl.simple.post" id="hl_simple_post" value="</em>">
+
+ <label for="hl_requireFieldMatch" class="checkbox">
+ <input type="checkbox" ng-model="hl['hl.requireFieldMatch']" name="hl.requireFieldMatch" id="hl_requireFieldMatch" value="true">
+ hl.requireFieldMatch
+ </label>
+
+ <label for="hl_usePhraseHighlighter" class="checkbox">
+ <input type="checkbox" ng-model="hl['usePhraseHighLighter']" name="hl.usePhraseHighlighter" id="hl_usePhraseHighlighter" value="true">
+ hl.usePhraseHighlighter
+ </label>
+
+ <label for="hl_highlightMultiTerm" class="checkbox">
+ <input type="checkbox" ng-model="hl['hightlightMultiTerm']" name="hl.highlightMultiTerm" id="hl_highlightMultiTerm" value="true">
+ hl.highlightMultiTerm
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="facet optional">
+ <legend>
+ <label for="facet" class="checkbox" title="Enable faceting.">
+ <input type="checkbox" ng-model="isFacet" name="facet" id="facet">
+ facet
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isFacet">
+
+ <label for="facet_query">facet.query</label>
+ <textarea ng-model="facet['facet.query']" name="facet.query" id="facet_query"></textarea>
+
+ <label for="facet_field">facet.field</label>
+ <input type="text" ng-model="facet['facet.field']" name="facet.field" id="facet_field">
+
+ <label for="facet_prefix">facet.prefix</label>
+ <input type="text" ng-model="facet['facet.prefix']" name="facet.prefix" id="facet_prefix">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="spatial optional">
+ <legend>
+ <label for="spatial" class="checkbox" title="Show spatial options">
+ <input type="checkbox" ng-model="isSpatial" name="spatial" id="spatial">
+ spatial
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isSpatial">
+
+ <label for="pt">pt</label>
+ <input type="text" ng-model="spatial.pt" name="pt" id="pt">
+
+ <label for="sfield">sfield</label>
+ <input type="text" ng-model="spatial.sfield" name="sfield" id="sfield">
+
+ <label for="d">d</label>
+ <input type="text" ng-model="spatial.d" name="d" id="d">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="spellcheck optional">
+ <legend>
+ <label for="spellcheck" class="checkbox" title="Enable spellchecking.">
+ <input type="checkbox" ng-model="isSpellcheck" name="spellcheck" id="spellcheck">
+ spellcheck
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isSpellcheck">
+
+ <label for="spellcheck_build" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.build']" name="spellcheck.build" id="spellcheck_build" value="true">
+ spellcheck.build
+ </label>
+
+ <label for="spellcheck_reload" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.reload']" name="spellcheck.reload" id="spellcheck_reload" value="true">
+ spellcheck.reload
+ </label>
+
+ <label for="spellcheck_q">spellcheck.q</label>
+ <input type="text" ng-model="spellcheck['spellcheck.q']" name="spellcheck.q" id="spellcheck_q">
+
+ <label for="spellcheck_dictionary">spellcheck.dictionary</label>
+ <input type="text" ng-model="spellcheck['spellcheck.dictionary']" name="spellcheck.dictionary" id="spellcheck_dictionary">
+
+ <label for="spellcheck_count">spellcheck.count</label>
+ <input type="text" ng-model="spellcheck['spellcheck.count']" name="spellcheck.count" id="spellcheck_count">
+
+ <label for="spellcheck_onlyMorePopular" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.onlyMorePopular']" name="spellcheck.onlyMorePopular" id="spellcheck_onlyMorePopular" value="true">
+ spellcheck.onlyMorePopular
+ </label>
+
+ <label for="spellcheck_extendedResults" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.extendedResults']" name="spellcheck.extendedResults" id="spellcheck_extendedResults" value="true">
+ spellcheck.extendedResults
+ </label>
+
+ <label for="spellcheck_collate" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.collate']" name="spellcheck.collate" id="spellcheck_collate" value="true">
+ spellcheck.collate
+ </label>
+
+ <label for="spellcheck_maxCollations">spellcheck.maxCollations</label>
+ <input type="text" ng-model="spellcheck['spellcheck.maxCollations']" name="spellcheck.maxCollations" id="spellcheck_maxCollations">
+
+ <label for="spellcheck_maxCollationTries">spellcheck.maxCollationTries</label>
+ <input type="text" ng-model="spellcheck['spellcheck.maxCollationTries']" name="spellcheck.maxCollationTries" id="spellcheck_maxCollationTries">
+
+ <label for="spellcheck_accuracy">spellcheck.accuracy</label>
+ <input type="text" ng-model="spellcheck['spellcheck.accuracy']" name="spellcheck.accuracy" id="spellcheck_accuracy">
+ </div>
+
+ </fieldset>
+
+
+ <button type="submit" ng-click="doQuery()">Execute Query</button>
+ </form>
+ </div>
+
+ <div id="result">
+
+ <a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
+
+ <div id="response">
+ <pre class="syntax language-{{lang}}"><code ng-bind-html="response.data | highlight:lang | unsafe"></code></pre>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html
new file mode 100644
index 000000000..b3d668422
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html
@@ -0,0 +1,239 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="replication" class="clearfix" ng-class="{replicating:settings.isReplicating}">
+
+ <div id="frame">
+
+ <div id="error" ng-show="progress.ERROR">{{ progress.ERROR }}</div>
+
+ <div class="replicating block" ng-show="settings.isReplicating">
+
+ <div id="progress">
+
+ <div id="start"><div class="info">
+
+ <span>{{progress.replicationStartTime}}</span>
+
+ </div></div>
+
+ <div id="speed"><div class="info">
+
+ <span>5.1 MB</span>/s
+
+ </div></div>
+
+ <div id="bar">
+
+ <div id="bar-info"><div class="info">
+
+ <div class="files"><span>{{progress.numFilesToDownload}}</span> File<span ng-show="progress.numFilesToDownload&gt;1">s</span></div>
+ <div class="size"><span>{{progress.bytesToDownload}}</span></div>
+
+ </div></div>
+
+ <div id="eta"><div class="info">
+
+ ETA: <span>{{progress.timeRemaining | readableSeconds }}</span>
+
+ </div></div>
+
+ <div id="done" style="width: {{progress.totalPercentWidth}}">
+
+ <div class="percent">
+
+ <span>{{progress.totalPercent}}</span>%
+
+ </div>
+
+ <div id="done-info"><div class="info">
+
+ <div class="files"><span>{{progress.numFilesDownloaded}}</span> File<span ng-show="progress.numFilesDownloaded&gt;1">s</span></div>
+ <div class="size"><span>{{progress.bytesDownloaded}}</span></div>
+
+ </div></div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="current-file" class="clearfix">
+
+ <div class="label"><span class="loader">Current File:</span></div>
+ <div class="file">{{progress.currentFile}}</div>
+ <div class="progress">
+ <span class="done">{{progress.currentFileSizeDownloaded}}</span> / <span class="total">{{progress.currentFileSize}}</span> [<span class="percent">{{progress.currentFileSizePercent}}</span>%]
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="iterations" class="slaveOnly block clearfix" ng-show="isSlave">
+
+ <div class="label"><span class="">Iterations:</span></div>
+ <div class="iterations" ng-show="iterations && showIterations">
+ <ul>
+ <li class="{{iteration.status}}" ng-class="{latest:iteration.latest}" ng-repeat="iteration in iterations |limitTo:iterationCount">{{iteration.date}}</li>
+ </ul>
+ <span ng-show="iterations.length&gt;1">
+ <a ng-show="iterationCount==1" ng-click="showIterations()"><span class="expand">Show all Iterations</span></a>
+ <a ng-show="iterationCount&gt;1" ng-click="hideIterations()"><span class="collapse">Hide past Iterations</span></a>
+ </span>
+
+ </div>
+
+ </div>
+
+ <div id="details" class="block clearfix">
+
+ <table border="0" cellspacing="0" cellpadding="0">
+
+ <thead>
+
+ <tr>
+
+ <td><span>Index</span></td>
+ <th>Version</th>
+ <th><abbr title="Generation">Gen</abbr></th>
+ <th>Size</th>
+
+ </tr>
+
+ </thead>
+ <tbody>
+
+ <tr class="masterSearch">
+
+ <th>Master (Searching)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.masterSearch.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.masterSearch.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.masterSearch.size}}</div>
+ </td>
+
+ </tr>
+
+ <tr class="master">
+
+ <th>Master (Replicable)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.master.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.master.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.master.size}}</div>
+ </td>
+
+ </tr>
+
+ <tr class="slave slaveOnly" ng-show="isSlave">
+
+ <th>Slave (Searching)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.slave.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.slave.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.slave.size}}</div>
+ </td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+
+ </div>
+
+ <div id="settings" class="settings block clearfix slaveOnly" ng-show="isSlave">
+
+ <div class="label"><span>Settings:</span></div>
+ <ul>
+ <li class="masterUrl" ng-show="settings.masterUrl">
+ <dl class="clearfix">
+ <dt>master url:</dt>
+ <dd>{{settings.masterUrl}}</dd>
+ </dl>
+ </li>
+ <li class="isPollingDisabled"><dl class="clearfix">
+ <dt>polling enable:</dt>
+ <dd class="ico" ng-class="{'ico-0':settings.isPollingDisabled, 'ico-1':!settings.isPollingDisabled}">
+ <span ng-show="settings.pollInterval">(interval: {{settings.pollInterval}})</span>&nbsp;
+ </dd>
+ </dl></li>
+ </ul>
+
+ </div>
+
+ <div id="master-settings" class="settings block clearfix">
+
+ <div class="label"><span>Settings (Master):</span></div>
+ <ul>
+ <li class="replicationEnabled"><dl class="clearfix">
+ <dt>replication enable:</dt>
+ <dd class="ico" ng-class="{'ico-0':!master.replicationEnabled, 'ico-1':master.replicationEnabled}">&nbsp;</dd>
+ </dl></li>
+ <li class="replicateAfter"><dl class="clearfix">
+ <dt>replicateAfter:</dt>
+ <dd>{{master.replicateAfter}}</dd>
+ </dl></li>
+ <li class="confFiles" ng-show="master.files"><dl class="clearfix">
+ <dt>confFiles:</dt>
+ <dd><span ng-repeat="file in master.files"><attr title="{{file.title}}">{{file.name}}</attr>{{ $last ? '' :', '}}</span></dd>
+ </dl></li>
+ </ul>
+
+ </div>
+
+ </div>
+
+ <div id="navigation">
+
+ <div class="timer" ng-show="isSlave && !settings.isPollingDisabled &&!settings.isReplicating">
+
+ <p>Next Run: <span class="approx" ng-show="settings.isApprox">~</span><span class="tick">{{settings.tick | readableSeconds}}</span></p>
+ <small ng-show="settings.nextExecutionAt">{{settings.nextExecutionAt}}</small>
+ </div>
+
+ <button class="refresh-status" ng-click="refresh()"><span>Refresh Status</span></button>
+
+ <div class="slaveOnly" ng-show="isSlave">
+ <button class="optional replicate-now primary" ng-click="execute('fetchindex')" ng-show="!settings.isReplicating"><span>Replicate now</span></button>
+ <button class="optional abort-replication warn" ng-click="execute('abortfetch')" ng-show="settings.isReplicating"><span>Abort Replication</span></button>
+
+ <button class="optional disable-polling" ng-click="execute('disablepoll')" ng-show="!settings.isPollingDisabled"><span>Disable Polling</span></button>
+ <button class="optional enable-polling" ng-click="execute('enablepoll')" ng-show="settings.isPollingDisabled"><span>Enable Polling</span></button>
+ </div>
+
+ <div class="masterOnly" ng-show="!isSlave">
+ <button class="optional disable-replication warn" ng-click="execute('disablereplication')" ng-show="master.replicationEnabled"><span>Disable Replication</span></button>
+ <button class="optional enable-replication warn" ng-click="execute('enablereplication')" ng-show="!master.replicationEnabled"><span>Enable Replication</span></button>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html
new file mode 100644
index 000000000..e94b6dab4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html
@@ -0,0 +1,455 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="schema" class="loaded">
+
+ <div class="clearfix">
+
+ <div id="frame">
+ <div id="actions" class="actions clearfix" ng-show="isSchemaUpdatable">
+ <button id="addField" class="action" ng-click="toggleAddField()"><span>Add Field</span></button>
+ <button id="addDynamicField" class="action" ng-click="toggleAddDynamicField()"><span>Add Dynamic Field</span></button>
+ <button id="addCopyField" class="action" ng-click="toggleAddCopyField()"><span>Add Copy Field</span></button>
+
+ <div class="action add" data-rel="add" ng-show="showAddField" escape-pressed="hideAll()">
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" id="add_name" ng-model="newField.name" focus-when="showAddField" placeholder="enter a field name"></p>
+
+ <p class="clearfix"><label for="add_type">field type:</label>
+ <select chosen type="text" id="add_type" ng-model="newField.type" ng-options="type for type in types"></select>
+ </p>
+
+ <p class="clearfix" ng-show="adding=='field'"><label for="add_default">default:</label>
+ <input type="text" id="add_default" ng-model="newField.default" placeholder="enter a default value if needed"></p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_stored">
+ <input type="checkbox" ng-model="newField.stored" id="add_stored" title="Full field should be stored in index." ng-true-value="'true'" ng-false-value="'false'">
+ stored
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_indexed">
+ <input type="checkbox" ng-model="newField.indexed" id="add_indexed" title="Field should be indexed." ng-true-value="'true'" ng-false-value="'false'">
+ indexed
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_uninvertible">
+ <input type="checkbox" ng-model="newField.uninvertible" id="add_uninvertible" title="Field should be uninvertible, it is generally recomended to use docValues instead." ng-true-value="'true'" ng-false-value="'false'">
+ uninvertible
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_docValues">
+ <input type="checkbox" ng-model="newField.docValues" id="add_docValues" title="DocValues should be stored for the field." ng-true-value="'true'" ng-false-value="'false'">
+ docValues
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_multiValued">
+ <input type="checkbox" ng-model="newField.multiValued" id="add_multiValued" title="Multiple values are allowed for this field." ng-true-value="'true'" ng-false-value="'false'">
+ multiValued
+ </label>
+ </p>
+
+ <p class="clearfix" ng-show="adding=='field'">
+ <label class="checkbox" for="add_required">
+ <input type="checkbox" ng-model="newField.required" id="add_required" title="Field must be provided for all documents." ng-true-value="'true'" ng-false-value="'false'">
+ required
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <a ng-click="showOmit=!showOmit">
+ <span class="add_showhide" ng-hide="showOmit">Show omit options</span>
+ <span class="add_showhide open" ng-show="showOmit">Hide omit options</span>
+ </a>
+ </p>
+
+ <div ng-show="showOmit">
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitNorms">
+ <input type="checkbox" ng-model="newField.omitNorms" id="add_omitNorms" title="Full field should be omitNorms in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitNorms
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitTermFreqAndPositions">
+ <input type="checkbox" ng-model="newField.omitTermFreqAndPositions" id="add_omitTermFreqAndPositions" title="Full field should be omitTermFreqAndPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitTermFreqAndPositions
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitPositions">
+ <input type="checkbox" ng-model="newField.omitPositions" id="add_omitPositions" title="Full field should be omitPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitPositions
+ </label>
+ </p>
+ </div>
+
+ <p class="clearfix">
+ <a ng-click="showTermVectors=!showTermVectors">
+ <span class="add_showhide" ng-hide="showTermVectors">Show term vector options</span>
+ <span class="add_showhide open" ng-show="showTermVectors">Hide term vector options</span>
+ </a>
+ </p>
+ <div ng-show="showTermVectors">
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termVectors">
+ <input type="checkbox" ng-model="newField.termVectors" id="add_termVectors" title="Full field should be termVectors in index." ng-true-value="'true'" ng-false-value="'false'">
+ termVectors
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termPositions">
+ <input type="checkbox" ng-model="newField.termPositions" id="add_termPositions" title="Full field should be termPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ termPositions
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termOffsets">
+ <input type="checkbox" ng-model="newField.termOffsets" id="add_termOffsets" title="Full field should be termOffsets in index." ng-true-value="'true'" ng-false-value="'false'">
+ termOffsets
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termPayloads">
+ <input type="checkbox" ng-model="newField.termPayloads" id="add_termPayloads" title="Full field should be termPayloads in index." ng-true-value="'true'" ng-false-value="'false'">
+ termPayloads
+ </label>
+ </p>
+
+ </div>
+
+ <p class="clearfix">
+ <a ng-click="showSort=!showSort">
+ <span class="add_showhide" ng-hide="showSort">Show sort options</span>
+ <span class="add_showhide open" ng-show="showSort">Show sort options</span>
+ </a>
+ </p>
+ <div ng-show="showSort">
+ <p class="clearfix">
+ <label class="checkbox" for="add_sortMissingFirst">
+ <input type="checkbox" ng-model="newField.sortMissingFirst" id="add_sortMissingFirst" title="Full field should be sortMissingFirst in index." ng-true-value="'true'" ng-false-value="'false'">
+ sortMissingFirst
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_sortMissingLast">
+ <input type="checkbox" ng-model="newField.sortMissingLast" id="add_sortMissingLast" title="Full field should be sortMissingLast in index." ng-true-value="'true'" ng-false-value="'false'">
+ sortMissingLast
+ </label>
+ </p>
+
+ </div>
+
+ <div ng-repeat="error in addErrors" ng-show="addErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button ng-show="adding=='field'" type="submit" class="submit" ng-class="{success: added}" ng-click="addField()"><span>Add Field</span></button>
+ <button ng-show="adding=='dynamicField'" type="submit" class="submit" ng-class="{success: added}" ng-click="addDynamicField()"><span>Add Dynamic Field</span></button>
+ <button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
+ </p>
+
+
+
+ </div>
+
+ <div class="action add" data-rel="add" ng-show="showAddCopyField" escape-pressed="hideAll()">
+
+ <form>
+
+ <p class="clearfix"><label for="add_source">source:</label>
+ <input type="text" id="add_source" ng-model="copyField.source" focus-when="showAddCopyField" placeholder="specify your source field or pattern"></p>
+
+ <p class="clearfix"><label for="add_dest">destination:</label>
+ <input type="text" id="add_dest" ng-model="copyField.dest" placeholder="specify your destination field or pattern"></p>
+
+ <div ng-repeat="error in addCopyFieldErrors" ng-show="addCopyFieldErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-class="{success: added}" ng-click="addCopyField()"><span>Add CopyField</span></button>
+ <button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+ </div>
+
+ <div id="data">
+
+ <div id="field">
+
+ <div class="field-options" ng-show="showing">
+
+ <div class="block head">
+ <h2>
+ <span class="type">{{selectedType}}</span>:
+ <span class="name">{{name}}</span>
+ </h2>
+ </div>
+
+ <div class="partial" ng-show="display.partialState">
+
+ <p>Because your Index is empty, we do not have enough Information about this Field</p>
+
+ </div>
+
+ <dl class="options clearfix">
+
+ <dt class="field-type" ng-show="analysis.data.className">Field-Type:</dt>
+ <dd class="field-type" ng-show="analysis.data.className">{{analysis.data.className}}</dd>
+
+ <dt class="similarity" ng-show="display.similarity.className">Similarity:</dt>
+ <dd class="similarity" ng-show="display.similarity.className" data-tip="{{ display.similarity.className }}">{{ display.similarity.details }}</dd>
+
+ <dt class="position-increment-gap" ng-show="display.positionIncrementGap"><abbr title="Position Increment Gap">PI Gap</abbr>:</dt>
+ <dd class="position-increment-gap" ng-show="display.positionIncrementGap">{{ display.positionIncrementGap }}</dd>
+
+ <dt class="docs" ng-show="display.docs">Docs:</dt>
+ <dd class="docs" ng-show="display.docs"><a href="{{display.docsUrl}}">{{display.docs | number}}</a></dd>
+
+ <dt class="distinct" ng-show="display.distinct">Distinct:</dt>
+ <dd class="distinct" ng-show="display.distinct">{{display.distinct}}</dd>
+
+ </dl>
+
+ <table class="flags" cellspacing="0" cellpadding="0" border="0" ng-show="display.columns.length!=0">
+
+ <thead>
+
+ <tr>
+ <td>Flags:</td>
+ <th ng-repeat="key in display.columns">{{key.name}}</th>
+
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <tr ng-repeat="row in display.rows track by row.name">
+ <th>{{row.name}}</th>
+ <td colspan="2" class="text" ng-show="row.comment">{{row.comment}}</td>
+ <td ng-repeat="cell in row.cells"
+ ng-class="{'check':cell.value}">
+ <span ng-show="cell.value">√</span>
+ <span ng-show="!cell.value">&nbsp;</span>
+ </td>
+ </tr>
+ </tbody>
+
+ </table>
+
+ <ul class="analyzer">
+ <li class="clearfix {{analyzer.key}}" ng-class="{open: analyzer.show}" ng-repeat="analyzer in analysis.analyzers">
+
+ <p><a class="analysis" ng-href="#/{{core}}/analysis?{{analysis.query}}"><span>{{analyzer.name}}&nbsp;Analyzer:</span></a></p>
+ <dl>
+ <dt><a ng-click="toggleAnalyzer(analyzer)" class="toggle">{{analyzer.detail.className}}</a></dt>
+ </dl>
+ <ul ng-show="analyzer.show">
+ <li class="clearfix {{componentType.key}} data" ng-repeat="componentType in analyzer.detail.componentTypes" ng-show="componentType.components">
+ <p>{{componentType.label}}:</p>
+ <dl>
+ <dt ng-repeat-start="component in componentType.components">{{component.className}}</dt>
+ <dd ng-repeat-end ng-repeat="arg in component.args"
+ ng-class="{'ico-1': arg.booleanValue, 'ico-0': arg.booleanValue==false}">
+ {{arg.name}}<span ng-show="arg.value">: {{arg.value}}</span>
+ </dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ </div>
+
+ <div class="terminfo-holder loaded clearfix" ng-class="{disabled: noTermData}" ng-show="is.field && !display.partialState">
+
+ <div class="trigger">
+
+ <button class="submit" ng-click="toggleTerms()"><span ng-class="{loader:isLoadingTerms}">Load Term Info</span></button>
+ <br/>
+ <span ng-show="isCloudEnabled">N.B. Loaded from a single core - not from the whole collection.</span>
+
+ <a ng-show="showTerms" ng-click="toggleAutoload()" ng-class="{on:isAutoload}" class="autoload" title="Automatically load Term Info?"><span>Autoload</span></a>
+
+ </div>
+
+ <p ng-show="showTerms && noTerms" class="status">Sorry, no Term Info available :(</p>
+
+ <div ng-show="showTerms && termInfo.topTerms" class="topterms-holder">
+
+ <form>
+ <p class="head">
+ <input type="text" ng-model="topTermsCount" ng-change="loadTermInfo()">
+ <a class="max-holder" ng-click="loadAllTopTerms()" title="Load all Top-Terms">/<span class="max">{{termInfo.maxTerms | number}}</span></a> Top-Terms:
+ <a id="query_link" href="#/{{core}}/query?q={{name}}:[* TO *]"><span>Query</span>&nbsp;</a>
+ </p>
+ </form>
+
+ <ul>
+ <li class="clearfix" ng-repeat="countGroup in termInfo.topTerms">
+ <p><span>{{countGroup.count}}</span></p>
+ <ul>
+ <li ng-repeat="term in countGroup.terms" ng-class="{odd:$odd}"><a ng-href="#/{{core}}/query?q=%7B!term+f%3D{{name | uriencode}}%7D{{term | uriencode}}">{{term}}</a></li>
+ </ul>
+ </li>
+
+ </ul>
+
+ </div>
+
+ <div ng-show="showTerms && termInfo.histogram" class="histogram-holder">
+
+ <p class="head">Histogram:</p>
+ <ul>
+ <li ng-repeat="row in termInfo.histogram" ng-class="{odd:$odd}">
+ <dl class="clearfix" style="width: {{(( row.value / termInfo.histogramMax ) * 100 )}}%;">
+ <dt><span>{{ row.key | number}}</span></dt>
+ <dd><span>{{ row.value | number }}</span></dd>
+ </dl>
+ </li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="related">
+ <select id="type_or_name"
+ ng-model="fieldOrType"
+ chosen
+ data-placeholder="Please select ..."
+ ng-change="selectFieldOrType()"
+ ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
+
+ <dl id="f-df-t">
+
+ <dt class="field" ng-class="{active: selectedType=='Field'}" ng-show="leftbar.fields">Field</dt>
+ <dd class="field" ng-class="{active: selectedType=='Field'}" ng-repeat="field in leftbar.fields"><a href="#/{{core}}/schema?field={{field}}">{{field}}</a></dd>
+
+ <dt class="copyfield" ng-show="leftbar.copyFieldSources">Copied from</dt>
+ <dd class="copyfield" ng-repeat="field in leftbar.copyFieldSources">
+ <div class="clearfix" ng-hide="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ </div>
+ <div class="clearfix updatable" ng-show="isSchemaUpdatable">
+ <a style="float:left;width:80%" href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ <span ng-click="toggleDeleteCopyField(field)" class="rem">&nbsp;</span>
+ </div>
+ <div class="action delete" ng-show="field.show">
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
+ <div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, field.name, name)"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dd>
+
+ <dt class="copyfield" ng-show="leftbar.copyFieldDests">Copied to</dt>
+ <dd class="copyfield" ng-repeat="field in leftbar.copyFieldDests">
+ <div class="clearfix" ng-hide="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ </div>
+ <div class="clearfix updatable" ng-show="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ <span ng-click="toggleDeleteCopyField(field)" class="rem">&nbsp;</span>
+ </div>
+ <div class="action delete" ng-show="field.show">
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
+ <div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, name, field.name)"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dd>
+ <dt class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-show="leftbar.dynamicFields">Dynamic Field {{dynamicFields}} / {{dynamicFields.length()}}</dt>
+ <dd class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-repeat="field in leftbar.dynamicFields"><a href="#/{{core}}/schema?dynamic-field={{field}}">{{field}}</a></dd>
+
+ <dt class="type" ng-class="{active: selectedType=='Type'}" ng-show="leftbar.types">Type</dt>
+ <dd class="type" ng-class="{active: selectedType=='Type'}" ng-repeat="type in leftbar.types"><a href="#/{{core}}/schema?type={{type}}">{{type}}</a></dd>
+
+ <dt></dt>
+ <dd class="active delete-field" ng-show="isSchemaUpdatable &amp;&amp; leftbar.fields &amp;&amp;!showDelete"><button ng-click="toggleDelete()"><span>delete field</span></button></dd>
+ <dd class="active delete-field" ng-show="isSchemaUpdatable &amp;&amp; leftbar.dynamicFields &amp;&amp;!showDelete"><button ng-click="toggleDelete()"><span>delete dynamic field</span></button></dd>
+
+ <div class="action delete" ng-show="showDelete">
+
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this {{selectedType}}?</em></p>
+ <div ng-repeat="error in deleteErrors" ng-show="deleteErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: deleted}" ng-click="delete()"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDelete()"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dl>
+
+ <dl class="ukf-dsf">
+
+ <dt class="unique-key-field" ng-class="{active: isUniqueKeyField}" ng-show="uniqueKeyField">Unique Key Field</dt>
+ <dd class="unique-key-field" ng-class="{active: isUniqueKeyField}"><a ng-href="#/{{core}}/schema?field={{uniqueKeyField}}">{{uniqueKeyField}}</a></dd>
+
+ <dt class="similarity" ng-class="{active: similarity.className}">Global Similarity:</dt>
+ <dd class="similarity" ng-class="{active: similarity.className}" data-tip="{{ similarity.className }}">{{ similarity.details }}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html
new file mode 100644
index 000000000..e1174aba5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html
@@ -0,0 +1,99 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="segments">
+ <div class="clearfix">
+
+ <div class="block fieldlist" id="statistics">
+
+ <h2><span>Segments</span></h2>
+ <p id="auto-refresh"><a ng-click="toggleAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh</a></p>
+ <a class="reload" ng-click="refresh()"><span>reload</span></a>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <div id="result">
+
+ <div id="response">
+
+ <div class="segments-holder">
+
+ <ul>
+ <li>
+ <dl class="clearfix" style="width:100%;">
+ <dt>
+ <div>Size</div>
+ </dt>
+ <dd>
+ <div class="start">0</div>
+ <div class="w5" ng-repeat="x in xaxis">
+ <span ng-show="x&gt;0.001">{{x.value}}</span>
+ <span ng-hide="x&gt;0.001">&nbsp;</span>
+ </div>
+ <div class="end">{{segmentMB | number}} MB</div>
+ </dd>
+ </dl>
+ </li>
+ <li ng-repeat="segment in segments">
+ <dl class="clearfix" ng-style="{width: segment.totalSize+'%'}">
+ <dt>
+ <div>{{ segment.name }}</div>
+ </dt>
+ <dd>
+ <div class="live" ng-class="{'merge-candidate':segment.mergeCandidate}"
+ ng-style="{width: segment.aliveDocSize+'%'}">&nbsp;</div>
+ <div class="tooltip">
+ <div>Segment <b>{{segment.name}}</b>:</div>
+ <div class="label">#docs:</div>
+ <div>{{ segment.size | number }}</div>
+ <div class="label">#dels:</div>
+ <div>{{ segment.delCount | number }}</div>
+ <div class="label">size:</div>
+ <div>{{ segment.sizeInBytes | number }} bytes</div>
+ <div class="label">age:</div>
+ <div>{{ segment.age }}</div>
+ <div class="label">source:</div>
+ <div>{{ segment.source }}</div>
+ </div>
+ <div class="deleted" ng-show="segment.deletedDocSize"
+ style="width: {{ segment.deletedDocSize }}%; margin-left:{{ segment.aliveDocSize}}%;">
+ &nbsp;</div>
+ </dd>
+ </dl>
+ </li>
+ <li>
+ <dl>
+ <dt></dt>
+ <dd>Deletions: {{ deletionsPercentage }}%</dd>
+ </dl>
+ </li>
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html
new file mode 100644
index 000000000..683cf76d9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html
@@ -0,0 +1,64 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="stream" class="clearfix">
+
+ <div id="form">
+ <form>
+ <label for="expr" title="The expression string">
+ Streaming Expression (expr)
+ </label>
+ <textarea name="expr" ng-model="expr" id="expr" title="The expression string.">search(....)</textarea>
+
+ <button type="submit" ng-click="doStream()">Execute</button>
+ <input type="checkbox" ng-model="doExplanation" name="doExplanation" id="doExplanation" value="true">
+ <label for="explain" class="checkbox" title="Enable Explanation." ng-click="doExplanation = !doExplanation">
+ with explanation
+ </label>
+
+ </form>
+ </div>
+
+ <div id="result">
+
+ <a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
+
+ <div ng-show="showExplanation" id="explanation" class="clearfix">
+ <div id="frame">
+ <div explanation-graph id="explanation-content" data="explanationData" depth="depth" leaf-count="leafCount" class="content clearfix" ng-show="showGraph">
+ <div id="legend">
+ <svg width="100%" height="15">
+ <g transform="translate(5,10)" class="stream-decorator"><circle r="4.5"></circle></g>
+ <g transform="translate(15,14)"><text>Stream Decorator</text></g>
+ <g transform="translate(140,10)" class="stream-source"><circle r="4.5"></circle></g>
+ <g transform="translate(150,14)"><text>Stream Source</text></g>
+ <g transform="translate(260,10)" class="graph-source"><circle r="4.5"></circle></g>
+ <g transform="translate(270,14)"><text>Graph Source</text></g>
+ <g transform="translate(375,10)" class="datastore"><circle r="4.5"></circle></g>
+ <g transform="translate(385,14)"><text>Datastore</text></g>
+ </svg>
+ </div>
+ <div id="canvas"></div>
+ </div>
+ </div>
+ </div>
+
+ <div id="response">
+ <pre class="syntax language-json"><code ng-bind-html="response.data | highlight:json | unsafe"></code></pre>
+ </div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html
new file mode 100644
index 000000000..f1e6fdeb2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html
@@ -0,0 +1,65 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="threads" ng-class="showAllStacktraces ? 'expanded' : 'collapsed'">
+
+ <div class="controls">
+ <a ng-click="toggleStacktraces()">
+ <span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
+ </a>
+ </div>
+
+ <div id="thread-dump">
+
+ <table border="0" cellpadding="0" cellspacing="0">
+
+ <thead>
+
+ <tr>
+
+ <th class="name">name</th>
+ <th class="time">cpuTime / userTime</th>
+
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <tr ng-repeat="thread in threads" class="{{$odd?'odd':''}} {{thread.lock?'lock':''}} {{thread.stackTrace?'stacktrace':''}} {{thread.state}}">
+ <td class="name">
+ <a title="{{thread.state}}" ng-click="toggleStacktrace(thread)"><span>{{thread.name}} ({{thread.id}})</span></a>
+ <p title="Waiting on" ng-show="thread.lock">{{thread.lock}}</p>
+ <div ng-show="thread.showStackTrace">
+ <ul>
+ <li ng-repeat="trace in thread.stackTrace track by trace.id">{{trace.trace}}</li>
+ </ul>
+ </div>
+ </td>
+ <td class="time">{{thread.cpuTime}}<br>{{thread.userTime}}</td>
+ </tr>
+ </tbody>
+
+ </table>
+
+ </div>
+
+ <div class="controls">
+ <a ng-click="toggleStacktraces()">
+ <span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
+ </a>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html
new file mode 100644
index 000000000..51895ab8b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div id="unknown" class="clearfix">
+
+ <div>
+ Oops, this URL is unknown to us, redirecting you back to Dashboard
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr/README.txt b/solr-8.1.1/server/solr/README.txt
new file mode 100644
index 000000000..6404f2cb7
--- /dev/null
+++ b/solr-8.1.1/server/solr/README.txt
@@ -0,0 +1,77 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+Default Solr Home Directory
+=============================
+
+This directory is the default Solr home directory which holds
+configuration files and Solr indexes (called cores).
+
+
+Basic Directory Structure
+-------------------------
+
+The Solr Home directory typically contains the following...
+
+* solr.xml *
+
+This is the primary configuration file Solr looks for when starting;
+it specifies high-level configuration options that apply to all
+of your Solr cores, such as cluster-wide SolrCloud settings like
+the ZooKeeper client timeout.
+
+In addition, you can also declare Solr cores in this file, however
+it is recommended to just use automatic core discovery instead of
+listing cores in solr.xml.
+
+If no solr.xml file is found, then Solr assumes that there should be
+a single SolrCore named "collection1" and that the "Instance Directory"
+for collection1 should be the same as the Solr Home Directory.
+
+For more information about solr.xml, please see:
+https://lucene.apache.org/solr/guide/solr-cores-and-solr-xml.html
+
+* Individual SolrCore Instance Directories *
+
+Although solr.xml can be configured to look for SolrCore Instance Directories
+in any path, simple sub-directories of the Solr Home Dir using relative paths
+are common for many installations.
+
+* Core Discovery *
+
+During startup, Solr will scan sub-directories of Solr home looking for
+a specific file named core.properties. If core.properties is found in a
+sub-directory (at any depth), Solr will initialize a core using the properties
+defined in core.properties. For an example of core.properties, please see:
+
+example/solr/collection1/core.properties
+
+For more information about core discovery, please see:
+https://lucene.apache.org/solr/guide/defining-core-properties.html
+
+* A Shared 'lib' Directory *
+
+Although solr.xml can be configured with an optional "sharedLib" attribute
+that can point to any path, it is common to use a "./lib" sub-directory of the
+Solr Home Directory.
+
+* ZooKeeper Files *
+
+When using SolrCloud using the embedded ZooKeeper option for Solr, it is
+common to have a "zoo.cfg" file and "zoo_data" directories in the Solr Home
+Directory. Please see the SolrCloud documentation for more details.
+
+https://lucene.apache.org/solr/guide/solrcloud.html
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ca.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_fr.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ga.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_it.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/hyphenations_ga.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stemdict_nl.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stoptags_ja.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ar.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_bg.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ca.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_cz.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_da.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_de.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_el.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_en.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_es.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_eu.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fa.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fi.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fr.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ga.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_gl.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hi.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hu.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hy.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_id.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_it.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ja.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_lv.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_nl.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_no.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_pt.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ro.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ru.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_sv.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_th.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_tr.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/lang/userdict_ja.txt b/solr-8.1.1/server/solr/configsets/_default/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/managed-schema b/solr-8.1.1/server/solr/configsets/_default/conf/managed-schema
new file mode 100644
index 000000000..5b9b9bfa8
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/managed-schema
@@ -0,0 +1,1013 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+
+ For more information, on how to customize this file, please see
+ http://lucene.apache.org/solr/guide/documents-fields-and-schema-design.html
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking. To improve performance one could
+ - set stored="false" for all fields possible (esp large fields) when you
+ only need to search on the field but don't need to return the original
+ value.
+ - set indexed="false" if you don't need to search on the field, but only
+ return the field as a result of searching on other indexed fields.
+ - remove all unneeded copyField statements
+ - for best index size and searching performance, set "index" to false
+ for all general text fields, use copyField to copy them to the
+ catchall "text" field, and use that for searching.
+-->
+
+<schema name="default-config" version="1.6">
+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
+ version="x.y" is Solr's version number for the schema syntax and
+ semantics. It should not normally be changed by applications.
+
+ 1.0: multiValued attribute did not exist, all fields are multiValued
+ by nature
+ 1.1: multiValued attribute introduced, false by default
+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
+ except for text fields.
+ 1.3: removed optional field compress feature
+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
+ behavior when a single string produces multiple tokens. Defaults
+ to off for version >= 1.4
+ 1.5: omitNorms defaults to true for primitive field types
+ (int, float, boolean, string...)
+ 1.6: useDocValuesAsStored defaults to true.
+ -->
+
+ <!-- Valid attributes for fields:
+ name: mandatory - the name for the field
+ type: mandatory - the name of a field type from the
+ fieldTypes section
+ indexed: true if this field should be indexed (searchable or sortable)
+ stored: true if this field should be retrievable
+ docValues: true if this field should have doc values. Doc Values is
+ recommended (required, if you are using *Point fields) for faceting,
+ grouping, sorting and function queries. Doc Values will make the index
+ faster to load, more NRT-friendly and more memory-efficient.
+ They are currently only supported by StrField, UUIDField, all
+ *PointFields, and depending on the field type, they might require
+ the field to be single-valued, be required or have a default value
+ (check the documentation of the field type you're interested in for
+ more information)
+ multiValued: true if this field may contain multiple values per document
+ omitNorms: (expert) set to true to omit the norms associated with
+ this field (this disables length normalization and index-time
+ boosting for the field, and saves some memory). Only full-text
+ fields or fields that need an index-time boost need norms.
+ Norms are omitted for primitive (non-analyzed) types by default.
+ termVectors: [false] set to true to store the term vector for a
+ given field.
+ When using MoreLikeThis, fields used for similarity should be
+ stored for best performance.
+ termPositions: Store position information with the term vector.
+ This will increase storage costs.
+ termOffsets: Store offset information with the term vector. This
+ will increase storage costs.
+ required: The field is required. It will throw an error if the
+ value does not exist
+ default: a value that should be used if no value is specified
+ when adding a document.
+ -->
+
+ <!-- field names should consist of alphanumeric or underscore characters only and
+ not start with a digit. This is not currently strictly enforced,
+ but other field names will not have first class support from all components
+ and back compatibility is not guaranteed. Names with both leading and
+ trailing underscores (e.g. _version_) are reserved.
+ -->
+
+ <!-- In this _default configset, only four fields are pre-declared:
+ id, _version_, and _text_ and _root_. All other fields will be type guessed and added via the
+ "add-unknown-fields-to-the-schema" update request processor chain declared in solrconfig.xml.
+
+ Note that many dynamic fields are also defined - you can use them to specify a
+ field's type via field naming conventions - see below.
+
+ WARNING: The _text_ catch-all field will significantly increase your index size.
+ If you don't need it, consider removing it and the corresponding copyField directive.
+ -->
+
+ <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
+ <!-- docValues are enabled by default for long type so we don't need to index the version field -->
+ <field name="_version_" type="plong" indexed="false" stored="false"/>
+
+ <!-- If you don't use child/nested documents, then you should remove the next two fields: -->
+ <!-- for nested documents (minimal; points to root document) -->
+ <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
+ <!-- for nested documents (relationship tracking) -->
+ <field name="_nest_path_" type="_nest_path_" /><fieldType name="_nest_path_" class="solr.NestPathField" />
+
+ <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- This can be enabled, in case the client does not know what fields may be searched. It isn't enabled by default
+ because it's very expensive to index everything twice. -->
+ <!-- <copyField source="*" dest="_text_"/> -->
+
+ <!-- Dynamic field definitions allow using convention over configuration
+ for fields via the specification of patterns to match field names.
+ EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
+ RESTRICTION: the glob-like pattern in the name attribute must have a "*" only at the start or the end. -->
+
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pints" indexed="true" stored="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" />
+ <dynamicField name="*_ss" type="strings" indexed="true" stored="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_ls" type="plongs" indexed="true" stored="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloats" indexed="true" stored="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdoubles" indexed="true" stored="true"/>
+ <dynamicField name="random_*" type="random"/>
+ <dynamicField name="ignored_*" type="ignored"/>
+
+ <!-- Type used for data-driven schema, to add a string copy for each text field -->
+ <dynamicField name="*_str" type="strings" stored="false" docValues="true" indexed="false" useDocValuesAsStored="false"/>
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+ <dynamicField name="*_srpt" type="location_rpt" indexed="true" stored="true"/>
+
+ <!-- payloaded dynamic fields -->
+ <dynamicField name="*_dpf" type="delimited_payloads_float" indexed="true" stored="true"/>
+ <dynamicField name="*_dpi" type="delimited_payloads_int" indexed="true" stored="true"/>
+ <dynamicField name="*_dps" type="delimited_payloads_string" indexed="true" stored="true"/>
+
+ <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <!-- Field to use to determine and enforce document uniqueness.
+ Unless this field is marked with required="false", it will be a required field
+ -->
+ <uniqueKey>id</uniqueKey>
+
+ <!-- copyField commands copy one field to another at the time a document
+ is added to the index. It's used either to index the same field differently,
+ or to add multiple fields to the same field for easier/faster searching.
+
+ <copyField source="sourceFieldName" dest="destinationFieldName"/>
+ -->
+
+ <!-- field type definitions. The "name" attribute is
+ just a label to be used by field definitions. The "class"
+ attribute and any other attributes determine the real
+ behavior of the fieldType.
+ Class names starting with "solr" refer to java classes in a
+ standard package such as org.apache.solr.analysis
+ -->
+
+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
+ currently supported on types that are sorted internally as strings
+ and on numeric types.
+ This includes "string", "boolean", "pint", "pfloat", "plong", "pdate", "pdouble".
+ - If sortMissingLast="true", then a sort on this field will cause documents
+ without the field to come after documents with the field,
+ regardless of the requested sort order (asc or desc).
+ - If sortMissingFirst="true", then a sort on this field will cause documents
+ without the field to come before documents with the field,
+ regardless of the requested sort order.
+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
+ then default lucene sorting will be used which places docs without the
+ field first in an ascending sort and last in a descending sort.
+ -->
+
+ <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true" />
+ <fieldType name="strings" class="solr.StrField" sortMissingLast="true" multiValued="true" docValues="true" />
+
+ <!-- boolean type: "true" or "false" -->
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+ <fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>
+
+ <!--
+ Numeric field types that index values using KD-trees.
+ Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
+ -->
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+ <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
+
+ <!-- since fields of this type are by default not stored or indexed,
+ any data added to them will be ignored outright. -->
+ <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+ is a more restricted form of the canonical representation of dateTime
+ http://www.w3.org/TR/xmlschema-2/#dateTime
+ The trailing "Z" designates UTC time and is mandatory.
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+ All other components are mandatory.
+
+ Expressions can also be used to denote calculations that should be
+ performed relative to "NOW" to determine the value, ie...
+
+ NOW/HOUR
+ ... Round to the start of the current hour
+ NOW-1DAY
+ ... Exactly 1 day prior to now
+ NOW/DAY+6MONTHS+3DAYS
+ ... 6 months and 3 days in the future from the start of
+ the current day
+
+ -->
+ <!-- KD-tree versions of date fields -->
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+
+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
+ <fieldType name="binary" class="solr.BinaryField"/>
+
+ <!-- solr.TextField allows the specification of custom text analyzers
+ specified as a tokenizer and a list of token filters. Different
+ analyzers may be specified for indexing and querying.
+
+ The optional positionIncrementGap puts space between multiple fields of
+ this type on the same document, with the purpose of preventing false phrase
+ matching across fields.
+
+ For more info on customizing your analyzer chain, please see
+ http://lucene.apache.org/solr/guide/understanding-analyzers-tokenizers-and-filters.html#understanding-analyzers-tokenizers-and-filters
+ -->
+
+ <!-- One can also specify an existing Analyzer class that has a
+ default constructor via the class attribute on the analyzer element.
+ Example:
+ <fieldType name="text_greek" class="solr.TextField">
+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+ </fieldType>
+ -->
+
+ <!-- A text field that only splits on whitespace for exact matching of words -->
+ <dynamicField name="*_ws" type="text_ws" indexed="true" stored="true"/>
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A general text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ removes stop words from case-insensitive "stopwords.txt"
+ (empty by default), and down cases. At query time only, it
+ also applies synonyms.
+ -->
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+
+ <!-- SortableTextField generaly functions exactly like TextField,
+ except that it supports, and by default uses, docValues for sorting (or faceting)
+ on the first 1024 characters of the original field values (which is configurable).
+
+ This makes it a bit more useful then TextField in many situations, but the trade-off
+ is that it takes up more space on disk; which is why it's not used in place of TextField
+ for every fieldType in this _default schema.
+ -->
+ <dynamicField name="*_t_sort" type="text_gen_sort" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_txt_sort" type="text_gen_sort" indexed="true" stored="true"/>
+ <fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English: it tokenizes with StandardTokenizer,
+ removes English stop words (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
+ finally applies Porter's stemming. The query time analyzer also applies synonyms from synonyms.txt. -->
+ <dynamicField name="*_txt_en" type="text_en" indexed="true" stored="true"/>
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterGraphFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <dynamicField name="*_txt_en_split" type="text_en_splitting" indexed="true" stored="true"/>
+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
+ <dynamicField name="*_txt_en_split_tight" type="text_en_splitting_tight" indexed="true" stored="true"/>
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Just like text_general except it reverses the characters of
+ each token, to enable more efficient leading wildcard queries.
+ -->
+ <dynamicField name="*_txt_rev" type="text_general_rev" indexed="true" stored="true"/>
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <dynamicField name="*_phon_en" type="phonetic_en" indexed="true" stored="true"/>
+ <fieldType name="phonetic_en" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- lowercases the entire field value, keeping it as a single token. -->
+ <dynamicField name="*_s_lower" type="lowercase" indexed="true" stored="true"/>
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at index time, so
+ queries for paths match documents at that path, or in descendent paths
+ -->
+ <dynamicField name="*_descendent_path" type="descendent_path" indexed="true" stored="true"/>
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at query time, so
+ queries for paths match documents at that path, or in ancestor paths
+ -->
+ <dynamicField name="*_ancestor_path" type="ancestor_path" indexed="true" stored="true"/>
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ </fieldType>
+
+ <!-- This point type indexes the coordinates as separate fields (subFields)
+ If subFieldType is defined, it references a type, and a dynamic field
+ definition is created matching *___<typename>. Alternately, if
+ subFieldSuffix is defined, that is used to create the subFields.
+ Example: if subFieldType="double", then the coordinates would be
+ indexed in fields myloc_0___double,myloc_1___double.
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
+ in fields myloc_0_d,myloc_1_d
+ The subFields are an implementation detail of the fieldType, and end
+ users normally should not need to know about them.
+ -->
+ <dynamicField name="*_point" type="point" indexed="true" stored="true"/>
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+ <!-- A specialized field for geospatial search filters and distance sorting. -->
+ <fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
+
+ <!-- A geospatial field type that supports multiValued and polygon shapes.
+ For more information about this and other spatial fields see:
+ http://lucene.apache.org/solr/guide/spatial-search.html
+ -->
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+ geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
+
+ <!-- Payloaded field types -->
+ <fieldType name="delimited_payloads_float" stored="false" indexed="true" class="solr.TextField">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="delimited_payloads_int" stored="false" indexed="true" class="solr.TextField">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="integer"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="delimited_payloads_string" stored="false" indexed="true" class="solr.TextField">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="identity"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- some examples for different languages (generally ordered by ISO code) -->
+
+ <!-- Arabic -->
+ <dynamicField name="*_txt_ar" type="text_ar" indexed="true" stored="true"/>
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- for any non-arabic -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
+ <!-- normalizes ﻯ to ﻱ, etc -->
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Bulgarian -->
+ <dynamicField name="*_txt_bg" type="text_bg" indexed="true" stored="true"/>
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Catalan -->
+ <dynamicField name="*_txt_ca" type="text_ca" indexed="true" stored="true"/>
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
+ <dynamicField name="*_txt_cjk" type="text_cjk" indexed="true" stored="true"/>
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- for any non-CJK -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Czech -->
+ <dynamicField name="*_txt_cz" type="text_cz" indexed="true" stored="true"/>
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Danish -->
+ <dynamicField name="*_txt_da" type="text_da" indexed="true" stored="true"/>
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- German -->
+ <dynamicField name="*_txt_de" type="text_de" indexed="true" stored="true"/>
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Greek -->
+ <dynamicField name="*_txt_el" type="text_el" indexed="true" stored="true"/>
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- greek specific lowercase for sigma -->
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Spanish -->
+ <dynamicField name="*_txt_es" type="text_es" indexed="true" stored="true"/>
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Basque -->
+ <dynamicField name="*_txt_eu" type="text_eu" indexed="true" stored="true"/>
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Persian -->
+ <dynamicField name="*_txt_fa" type="text_fa" indexed="true" stored="true"/>
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- for ZWNJ -->
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Finnish -->
+ <dynamicField name="*_txt_fi" type="text_fi" indexed="true" stored="true"/>
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- French -->
+ <dynamicField name="*_txt_fr" type="text_fr" indexed="true" stored="true"/>
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Irish -->
+ <dynamicField name="*_txt_ga" type="text_ga" indexed="true" stored="true"/>
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes d', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
+ <!-- removes n-, etc. position increments is intentionally false! -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Galician -->
+ <dynamicField name="*_txt_gl" type="text_gl" indexed="true" stored="true"/>
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
+ <filter class="solr.GalicianStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Hindi -->
+ <dynamicField name="*_txt_hi" type="text_hi" indexed="true" stored="true"/>
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <!-- normalizes unicode representation -->
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <!-- normalizes variation in spelling -->
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Hungarian -->
+ <dynamicField name="*_txt_hu" type="text_hu" indexed="true" stored="true"/>
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Armenian -->
+ <dynamicField name="*_txt_hy" type="text_hy" indexed="true" stored="true"/>
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Indonesian -->
+ <dynamicField name="*_txt_id" type="text_id" indexed="true" stored="true"/>
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Italian -->
+ <dynamicField name="*_txt_it" type="text_it" indexed="true" stored="true"/>
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
+
+ NOTE: If you want to optimize search for precision, use default operator AND in your request
+ handler config (q.op) Use OR if you would like to optimize for recall (default).
+ -->
+ <dynamicField name="*_txt_ja" type="text_ja" indexed="true" stored="true"/>
+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
+ <analyzer>
+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
+
+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
+ is used to segment compounds into its parts and the compound itself is kept as synonym.
+
+ Valid values for attribute mode are:
+ normal: regular segmentation
+ search: segmentation useful for search with synonyms compounds (default)
+ extended: same as search mode, but unigrams unknown words (experimental)
+
+ For some applications it might be good to use search mode for indexing and normal mode for
+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
+
+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ User dictionary attributes are:
+ userDictionary: user dictionary filename
+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
+
+ See lang/userdict_ja.txt for a sample user dictionary file.
+
+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
+ -->
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <!-- Removes tokens with certain part-of-speech tags -->
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <!-- Lower-cases romaji characters -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Korean morphological analysis -->
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- Nori Korean morphological analyzer/tokenizer (KoreanTokenizer)
+ The Korean (nori) analyzer integrates Lucene nori analysis module into Solr.
+ It uses the mecab-ko-dic dictionary to perform morphological analysis of Korean texts.
+
+ This dictionary was built with MeCab, it defines a format for the features adapted
+ for the Korean language.
+
+ Nori also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ The tokenizer supports multiple schema attributes:
+ * userDictionary: User dictionary path.
+ * userDictionaryEncoding: User dictionary encoding.
+ * decompoundMode: Decompound mode. Either 'none', 'discard', 'mixed'. Default is 'discard'.
+ * outputUnknownUnigrams: If true outputs unigrams for unknown words.
+ -->
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <!-- Removes some part of speech stuff like EOMI (Pos.E), you can add a parameter 'tags',
+ listing the tags to remove. By default it removes:
+ E, IC, J, MAG, MAJ, MM, SP, SSC, SSO, SC, SE, XPN, XSA, XSN, XSV, UNA, NA, VSV
+ This is basically an equivalent to stemming.
+ -->
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <!-- Replaces term text with the Hangul transcription of Hanja characters, if applicable: -->
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Latvian -->
+ <dynamicField name="*_txt_lv" type="text_lv" indexed="true" stored="true"/>
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Dutch -->
+ <dynamicField name="*_txt_nl" type="text_nl" indexed="true" stored="true"/>
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Norwegian -->
+ <dynamicField name="*_txt_no" type="text_no" indexed="true" stored="true"/>
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory"/> -->
+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Portuguese -->
+ <dynamicField name="*_txt_pt" type="text_pt" indexed="true" stored="true"/>
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Romanian -->
+ <dynamicField name="*_txt_ro" type="text_ro" indexed="true" stored="true"/>
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Russian -->
+ <dynamicField name="*_txt_ru" type="text_ru" indexed="true" stored="true"/>
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Swedish -->
+ <dynamicField name="*_txt_sv" type="text_sv" indexed="true" stored="true"/>
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Thai -->
+ <dynamicField name="*_txt_th" type="text_th" indexed="true" stored="true"/>
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Turkish -->
+ <dynamicField name="*_txt_tr" type="text_tr" indexed="true" stored="true"/>
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+ A custom Similarity or SimilarityFactory may be specified here, but
+ the default is fine for most applications.
+ For more info: http://lucene.apache.org/solr/guide/other-schema-elements.html#OtherSchemaElements-Similarity
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+ <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/params.json b/solr-8.1.1/server/solr/configsets/_default/conf/params.json
new file mode 100644
index 000000000..9c259db53
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/params.json
@@ -0,0 +1,20 @@
+{"params":{
+ "query":{
+ "defType":"edismax",
+ "q.alt":"*:*",
+ "rows":"10",
+ "fl":"*,score",
+ "":{"v":0}
+ },
+ "facets":{
+ "facet":"on",
+ "facet.mincount": "1",
+ "":{"v":0}
+ },
+ "velocity":{
+ "wt": "velocity",
+ "v.template":"browse",
+ "v.layout": "layout",
+ "":{"v":0}
+ }
+}}
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/protwords.txt b/solr-8.1.1/server/solr/configsets/_default/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/solrconfig.xml b/solr-8.1.1/server/solr/configsets/_default/conf/solrconfig.xml
new file mode 100644
index 000000000..8fb5f7750
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/solrconfig.xml
@@ -0,0 +1,1360 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ A "compressionMode" string element can be added to <codecFactory> to choose
+ between the existing compression modes in the default codec: "BEST_SPEED" (default)
+ or "BEST_COMPRESSION".
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ <double name="noCFSRatio">0.1</double>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting The value to true will instruct the underlying Lucene
+ IndexWriter to write its debugging info the specified file
+ -->
+ <!-- <infoStream file="INFOSTREAM.txt">false</infoStream> -->
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory.
+ "numVersionBuckets" - sets the number of buckets used to keep
+ track of max version values when checking for re-ordered
+ updates; increase this value to reduce the cost of
+ synchronizing access to version buckets during high-volume
+ indexing, this requires 8 bytes (long) * numVersionBuckets
+ of heap space per Solr core.
+ -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+
+ <!-- Maximum number of clauses allowed when parsing a boolean query string.
+
+ This limit only impacts boolean queries specified by a user as part of a query string,
+ and provides per-collection controls on how complex user specified boolean queries can
+ be. Query strings that specify more clauses then this will result in an error.
+
+ If this per-collection limit is greater then the global `maxBooleanClauses` limit
+ specified in `solr.xml`, it will have no effect, as that setting also limits the size
+ of user specified boolean queries.
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy. Note that when this option is specified, the size
+ and initialSize parameters are ignored.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ Additional supported parameter by LRUCache:
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ -->
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <!-- Default search field
+ <str name="df">text</str>
+ -->
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ </lst>
+ </requestHandler>
+
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler" useParams="query,facets,velocity,browse">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">_text_</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="fmap.content">_text_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">_text_</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Clustering Component. (Omitted here. See the default Solr example for a typical configuration.) -->
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+
+ <!-- Add unknown fields to the schema
+
+ Field type guessing update processors that will
+ attempt to parse string-typed field values as Booleans, Longs,
+ Doubles, or Dates, and then add schema fields with the guessed
+ field types. Text content will be indexed as "text_general" as
+ well as a copy to a plain string version in *_str.
+
+ These require that the schema is both managed and mutable, by
+ declaring schemaFactory as ManagedIndexSchemaFactory, with
+ mutable specified as true.
+
+ See http://wiki.apache.org/solr/GuessingFieldTypes
+ -->
+ <updateProcessor class="solr.UUIDUpdateProcessorFactory" name="uuid"/>
+ <updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove-blank"/>
+ <updateProcessor class="solr.FieldNameMutatingUpdateProcessorFactory" name="field-name-mutating">
+ <str name="pattern">[^\w-\.]</str>
+ <str name="replacement">_</str>
+ </updateProcessor>
+ <updateProcessor class="solr.ParseBooleanFieldUpdateProcessorFactory" name="parse-boolean"/>
+ <updateProcessor class="solr.ParseLongFieldUpdateProcessorFactory" name="parse-long"/>
+ <updateProcessor class="solr.ParseDoubleFieldUpdateProcessorFactory" name="parse-double"/>
+ <updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
+ <arr name="format">
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
+ <str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
+ <str>EEEE, dd-MMM-yy HH:mm:ss z</str>
+ <str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
+ </arr>
+ </updateProcessor>
+ <updateProcessor class="solr.AddSchemaFieldsUpdateProcessorFactory" name="add-schema-fields">
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.String</str>
+ <str name="fieldType">text_general</str>
+ <lst name="copyField">
+ <str name="dest">*_str</str>
+ <int name="maxChars">256</int>
+ </lst>
+ <!-- Use as default mapping instead of defaultFieldType -->
+ <bool name="default">true</bool>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Boolean</str>
+ <str name="fieldType">booleans</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.util.Date</str>
+ <str name="fieldType">pdates</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Long</str>
+ <str name="valueClass">java.lang.Integer</str>
+ <str name="fieldType">plongs</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Number</str>
+ <str name="fieldType">pdoubles</str>
+ </lst>
+ </updateProcessor>
+
+ <!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
+ <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
+ processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
+ <processor class="solr.LogUpdateProcessorFactory"/>
+ <processor class="solr.DistributedUpdateProcessorFactory"/>
+ <processor class="solr.RunUpdateProcessorFactory"/>
+ </updateRequestProcessorChain>
+
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ <str name="solr.resource.loader.enabled">${velocity.solr.resource.loader.enabled:true}</str>
+ <str name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:false}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+</config>
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/stopwords.txt b/solr-8.1.1/server/solr/configsets/_default/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/server/solr/configsets/_default/conf/synonyms.txt b/solr-8.1.1/server/solr/configsets/_default/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/_default/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_rest_managed.json b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_rest_managed.json
new file mode 100644
index 000000000..6a4aec39e
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_rest_managed.json
@@ -0,0 +1 @@
+{"initArgs":{},"managedList":[]}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_stopwords_english.json b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_stopwords_english.json
new file mode 100644
index 000000000..a694e5c37
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_stopwords_english.json
@@ -0,0 +1,38 @@
+{
+ "initArgs":{"ignoreCase":true},
+ "managedList":[
+ "a",
+ "an",
+ "and",
+ "are",
+ "as",
+ "at",
+ "be",
+ "but",
+ "by",
+ "for",
+ "if",
+ "in",
+ "into",
+ "is",
+ "it",
+ "no",
+ "not",
+ "of",
+ "on",
+ "or",
+ "stopworda",
+ "stopwordb",
+ "such",
+ "that",
+ "the",
+ "their",
+ "then",
+ "there",
+ "these",
+ "they",
+ "this",
+ "to",
+ "was",
+ "will",
+ "with"]}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_synonyms_english.json b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_synonyms_english.json
new file mode 100644
index 000000000..869bdce05
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/_schema_analysis_synonyms_english.json
@@ -0,0 +1,11 @@
+{
+ "initArgs":{
+ "ignoreCase":true,
+ "format":"solr"
+ },
+ "managedMap":{
+ "GB":["GiB","Gigabyte"],
+ "happy":["glad","joyful"],
+ "TV":["Television"]
+ }
+}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/README.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/README.txt
new file mode 100644
index 000000000..3d90ec72d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/README.txt
@@ -0,0 +1,11 @@
+An override location of the clustering algorithm's resources
+attribute definitions and lexical resources.
+
+A directory from which to load algorithm-specific stop words,
+stop labels and attribute definition XMLs.
+
+For an overview of Carrot2 lexical resources, see:
+http://download.carrot2.org/head/manual/#chapter.lexical-resources
+
+For an overview of Lingo3G lexical resources, see:
+http://download.carrotsearch.com/lingo3g/manual/#chapter.lexical-resources
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/kmeans-attributes.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/kmeans-attributes.xml
new file mode 100644
index 000000000..d802465f6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/kmeans-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the bisecting k-means clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/lingo-attributes.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/lingo-attributes.xml
new file mode 100644
index 000000000..5febfc320
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/lingo-attributes.xml
@@ -0,0 +1,24 @@
+<!--
+ Default configuration for the Lingo clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <!--
+ The language to assume for clustered documents.
+ For a list of allowed values, see:
+ http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
+ -->
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="LingoClusteringAlgorithm.desiredClusterCountBase">
+ <value type="java.lang.Integer" value="20"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/stc-attributes.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/stc-attributes.xml
new file mode 100644
index 000000000..c1bf110c8
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/stc-attributes.xml
@@ -0,0 +1,19 @@
+<!--
+ Default configuration for the STC clustering algorithm.
+
+ This file can be loaded (and saved) by Carrot2 Workbench.
+ http://project.carrot2.org/download.html
+-->
+<attribute-sets default="attributes">
+ <attribute-set id="attributes">
+ <value-set>
+ <label>attributes</label>
+ <attribute key="MultilingualClustering.defaultLanguage">
+ <value type="org.carrot2.core.LanguageCode" value="ENGLISH"/>
+ </attribute>
+ <attribute key="MultilingualClustering.languageAggregationStrategy">
+ <value type="org.carrot2.text.clustering.MultilingualClustering$LanguageAggregationStrategy" value="FLATTEN_MAJOR_LANGUAGE"/>
+ </attribute>
+ </value-set>
+ </attribute-set>
+</attribute-sets>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/currency.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/currency.xml
new file mode 100644
index 000000000..3a9c58afe
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/currency.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Example exchange rates file for CurrencyField type named "currency" in example schema -->
+
+<currencyConfig version="1.0">
+ <rates>
+ <!-- Updated from http://www.exchangerate.com/ at 2011-09-27 -->
+ <rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" />
+ <rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" />
+ <rate from="USD" to="EUR" rate="0.743676" comment="European Euro" />
+ <rate from="USD" to="BRL" rate="1.881093" comment="BRAZIL Real" />
+ <rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" />
+ <rate from="USD" to="CLP" rate="519.0996" comment="CHILE Peso" />
+ <rate from="USD" to="CNY" rate="6.387310" comment="CHINA Yuan" />
+ <rate from="USD" to="CZK" rate="18.47134" comment="CZECH REP. Koruna" />
+ <rate from="USD" to="DKK" rate="5.515436" comment="DENMARK Krone" />
+ <rate from="USD" to="HKD" rate="7.801922" comment="HONG KONG Dollar" />
+ <rate from="USD" to="HUF" rate="215.6169" comment="HUNGARY Forint" />
+ <rate from="USD" to="ISK" rate="118.1280" comment="ICELAND Krona" />
+ <rate from="USD" to="INR" rate="49.49088" comment="INDIA Rupee" />
+ <rate from="USD" to="XDR" rate="0.641358" comment="INTNL MON. FUND SDR" />
+ <rate from="USD" to="ILS" rate="3.709739" comment="ISRAEL Sheqel" />
+ <rate from="USD" to="JPY" rate="76.32419" comment="JAPAN Yen" />
+ <rate from="USD" to="KRW" rate="1169.173" comment="KOREA (SOUTH) Won" />
+ <rate from="USD" to="KWD" rate="0.275142" comment="KUWAIT Dinar" />
+ <rate from="USD" to="MXN" rate="13.85895" comment="MEXICO Peso" />
+ <rate from="USD" to="NZD" rate="1.285159" comment="NEW ZEALAND Dollar" />
+ <rate from="USD" to="NOK" rate="5.859035" comment="NORWAY Krone" />
+ <rate from="USD" to="PKR" rate="87.57007" comment="PAKISTAN Rupee" />
+ <rate from="USD" to="PEN" rate="2.730683" comment="PERU Sol" />
+ <rate from="USD" to="PHP" rate="43.62039" comment="PHILIPPINES Peso" />
+ <rate from="USD" to="PLN" rate="3.310139" comment="POLAND Zloty" />
+ <rate from="USD" to="RON" rate="3.100932" comment="ROMANIA Leu" />
+ <rate from="USD" to="RUB" rate="32.14663" comment="RUSSIA Ruble" />
+ <rate from="USD" to="SAR" rate="3.750465" comment="SAUDI ARABIA Riyal" />
+ <rate from="USD" to="SGD" rate="1.299352" comment="SINGAPORE Dollar" />
+ <rate from="USD" to="ZAR" rate="8.329761" comment="SOUTH AFRICA Rand" />
+ <rate from="USD" to="SEK" rate="6.883442" comment="SWEDEN Krona" />
+ <rate from="USD" to="CHF" rate="0.906035" comment="SWITZERLAND Franc" />
+ <rate from="USD" to="TWD" rate="30.40283" comment="TAIWAN Dollar" />
+ <rate from="USD" to="THB" rate="30.89487" comment="THAILAND Baht" />
+ <rate from="USD" to="AED" rate="3.672955" comment="U.A.E. Dirham" />
+ <rate from="USD" to="UAH" rate="7.988582" comment="UKRAINE Hryvnia" />
+ <rate from="USD" to="GBP" rate="0.647910" comment="UNITED KINGDOM Pound" />
+
+ <!-- Cross-rates for some common currencies -->
+ <rate from="EUR" to="GBP" rate="0.869914" />
+ <rate from="EUR" to="NOK" rate="7.800095" />
+ <rate from="GBP" to="NOK" rate="8.966508" />
+ </rates>
+</currencyConfig>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/elevate.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/elevate.xml
new file mode 100644
index 000000000..2c09ebed6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/elevate.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+ loaded once at startup. If it is found in Solr's data
+ directory, it will be re-loaded every commit.
+
+ See http://wiki.apache.org/solr/QueryElevationComponent for more info
+
+-->
+<elevate>
+ <!-- Query elevation examples
+ <query text="foo bar">
+ <doc id="1" />
+ <doc id="2" />
+ <doc id="3" />
+ </query>
+
+for use with techproducts example
+
+ <query text="ipod">
+ <doc id="MA147LL/A" /> put the actual ipod at the top
+ <doc id="IW-02" exclude="true" /> exclude this cable
+ </query>
+-->
+
+</elevate>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ca.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_fr.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ga.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_it.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/hyphenations_ga.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stemdict_nl.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stoptags_ja.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ar.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_bg.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ca.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ckb.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ckb.txt
new file mode 100644
index 000000000..87abf118f
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ckb.txt
@@ -0,0 +1,136 @@
+# set of kurdish stopwords
+# note these have been normalized with our scheme (e represented with U+06D5, etc)
+# constructed from:
+# * Fig 5 of "Building A Test Collection For Sorani Kurdish" (Esmaili et al)
+# * "Sorani Kurdish: A Reference Grammar with selected readings" (Thackston)
+# * Corpus-based analysis of 77M word Sorani collection: wikipedia, news, blogs, etc
+
+# and
+Ùˆ
+# which
+Ú©Û•
+# of
+ی
+# made/did
+کرد
+# that/which
+ئەوەی
+# on/head
+سەر
+# two
+دوو
+# also
+هەروەها
+# from/that
+Ù„Û•Ùˆ
+# makes/does
+دەکات
+# some
+چەند
+# every
+هەر
+
+# demonstratives
+# that
+ئەو
+# this
+ئەم
+
+# personal pronouns
+# I
+من
+# we
+ئێمە
+# you
+تۆ
+# you
+ئێوە
+# he/she/it
+ئەو
+# they
+ئەوان
+
+# prepositions
+# to/with/by
+بە
+Ù¾ÛŽ
+# without
+بەبێ
+# along with/while/during
+بەدەم
+# in the opinion of
+بەلای
+# according to
+بەپێی
+# before
+بەرلە
+# in the direction of
+بەرەوی
+# in front of/toward
+بەرەوە
+# before/in the face of
+بەردەم
+# without
+بێ
+# except for
+بێجگە
+# for
+بۆ
+# on/in
+دە
+تێ
+# with
+دەگەڵ
+# after
+دوای
+# except for/aside from
+جگە
+# in/from
+Ù„Û•
+Ù„ÛŽ
+# in front of/before/because of
+لەبەر
+# between/among
+لەبەینی
+# concerning/about
+لەبابەت
+# concerning
+لەبارەی
+# instead of
+لەباتی
+# beside
+لەبن
+# instead of
+لەبرێتی
+# behind
+لەدەم
+# with/together with
+Ù„Û•Ú¯Û•Úµ
+# by
+لەلایەن
+# within
+لەناو
+# between/among
+Ù„Û•Ù†ÛŽÙˆ
+# for the sake of
+لەپێناوی
+# with respect to
+لەرەوی
+# by means of/for
+لەرێ
+# for the sake of
+لەرێگا
+# on/on top of/according to
+لەسەر
+# under
+لەژێر
+# between/among
+ناو
+# between/among
+نێوان
+# after
+پاش
+# before
+Ù¾ÛŽØ´
+# like
+ÙˆÛ•Ú©
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_cz.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_da.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_de.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_el.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_en.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_es.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_eu.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fa.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fi.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fr.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ga.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_gl.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hi.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hu.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hy.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_id.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_it.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ja.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_lv.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_nl.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_no.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_pt.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ro.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ru.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_sv.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_th.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_tr.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/userdict_ja.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/managed-schema b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/managed-schema
new file mode 100644
index 000000000..b6d3d165d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/managed-schema
@@ -0,0 +1,1187 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking. To improve performance one could
+ - set stored="false" for all fields possible (esp large fields) when you
+ only need to search on the field but don't need to return the original
+ value.
+ - set indexed="false" if you don't need to search on the field, but only
+ return the field as a result of searching on other indexed fields.
+ - remove all unneeded copyField statements
+ - for best index size and searching performance, set "index" to false
+ for all general text fields, use copyField to copy them to the
+ catchall "text" field, and use that for searching.
+ - For maximum indexing performance, use the ConcurrentUpdateSolrServer
+ java client.
+ - Remember to run the JVM in server mode, and use a higher logging level
+ that avoids logging every request
+-->
+
+<schema name="example" version="1.6">
+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
+ version="x.y" is Solr's version number for the schema syntax and
+ semantics. It should not normally be changed by applications.
+
+ 1.0: multiValued attribute did not exist, all fields are multiValued
+ by nature
+ 1.1: multiValued attribute introduced, false by default
+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
+ except for text fields.
+ 1.3: removed optional field compress feature
+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
+ behavior when a single string produces multiple tokens. Defaults
+ to off for version >= 1.4
+ 1.5: omitNorms defaults to true for primitive field types
+ (int, float, boolean, string...)
+ 1.6: useDocValuesAsStored defaults to true.
+ -->
+
+
+ <!-- Valid attributes for fields:
+ name: mandatory - the name for the field
+ type: mandatory - the name of a field type from the
+ fieldTypes
+ indexed: true if this field should be indexed (searchable or sortable)
+ stored: true if this field should be retrievable
+ docValues: true if this field should have doc values. Doc values are
+ useful (required, if you are using *Point fields) for faceting,
+ grouping, sorting and function queries. Doc values will make the index
+ faster to load, more NRT-friendly and more memory-efficient.
+ They however come with some limitations: they are currently only
+ supported by StrField, UUIDField, all *PointFields, and depending
+ on the field type, they might require the field to be single-valued,
+ be required or have a default value (check the documentation
+ of the field type you're interested in for more information)
+ multiValued: true if this field may contain multiple values per document
+ omitNorms: (expert) set to true to omit the norms associated with
+ this field (this disables length normalization and index-time
+ boosting for the field, and saves some memory). Only full-text
+ fields or fields that need an index-time boost need norms.
+ Norms are omitted for primitive (non-analyzed) types by default.
+ termVectors: [false] set to true to store the term vector for a
+ given field.
+ When using MoreLikeThis, fields used for similarity should be
+ stored for best performance.
+ termPositions: Store position information with the term vector.
+ This will increase storage costs.
+ termOffsets: Store offset information with the term vector. This
+ will increase storage costs.
+ termPayloads: Store payload information with the term vector. This
+ will increase storage costs.
+ required: The field is required. It will throw an error if the
+ value does not exist
+ default: a value that should be used if no value is specified
+ when adding a document.
+ -->
+
+ <!-- field names should consist of alphanumeric or underscore characters only and
+ not start with a digit. This is not currently strictly enforced,
+ but other field names will not have first class support from all components
+ and back compatibility is not guaranteed. Names with both leading and
+ trailing underscores (e.g. _version_) are reserved.
+ -->
+
+ <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
+ or Solr won't start. _version_ and update log are required for SolrCloud
+ -->
+ <!-- doc values are enabled by default for primitive types such as long so we don't index the version field -->
+ <field name="_version_" type="plong" indexed="false" stored="false"/>
+
+ <!-- points to the root document of a block of nested documents. Required for nested
+ document support, may be removed otherwise
+ -->
+ <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
+
+ <!-- Only remove the "id" field if you have a very good reason to. While not strictly
+ required, it is highly recommended. A <uniqueKey> is present in almost all Solr
+ installations. See the <uniqueKey> declaration below where <uniqueKey> is set to "id".
+ Do NOT change the type and apply index-time analysis to the <uniqueKey> as it will likely
+ make routing in SolrCloud and document replacement in general fail. Limited _query_ time
+ analysis is possible as long as the indexing process is guaranteed to index the term
+ in a compatible way. Any analysis applied to the <uniqueKey> should _not_ produce multiple
+ tokens
+ -->
+ <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
+
+ <field name="pre" type="preanalyzed" indexed="true" stored="true"/>
+ <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
+ <field name="name" type="text_general" indexed="true" stored="true"/>
+ <field name="manu" type="text_gen_sort" indexed="true" stored="true" omitNorms="true" multiValued="false"/>
+ <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
+
+ <field name="weight" type="pfloat" indexed="true" stored="true"/>
+ <field name="price" type="pfloat" indexed="true" stored="true"/>
+ <field name="popularity" type="pint" indexed="true" stored="true" />
+ <field name="inStock" type="boolean" indexed="true" stored="true" />
+
+ <field name="store" type="location" indexed="true" stored="true"/>
+
+ <!-- Common metadata fields, named specifically to match up with
+ SolrCell metadata when parsing rich documents such as Word, PDF.
+ Some fields are multiValued only because Tika currently may return
+ multiple values for them. Some metadata is parsed from the documents,
+ but there are some which come from the client context:
+ "content_type": From the HTTP headers of incoming stream
+ "resourcename": From SolrCell request param resource.name
+ -->
+ <field name="title" type="text_gen_sort" indexed="true" stored="true" multiValued="true"/>
+ <field name="subject" type="text_gen_sort" indexed="true" stored="true" multiValued="false"/>
+ <field name="description" type="text_general" indexed="true" stored="true"/>
+ <field name="comments" type="text_general" indexed="true" stored="true"/>
+ <field name="author" type="text_gen_sort" indexed="true" stored="true" multiValued="false"/>
+ <field name="keywords" type="text_general" indexed="true" stored="true"/>
+ <field name="category" type="text_general" indexed="true" stored="true"/>
+ <field name="resourcename" type="text_general" indexed="true" stored="true"/>
+ <field name="url" type="text_general" indexed="true" stored="true"/>
+ <field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="last_modified" type="pdate" indexed="true" stored="true"/>
+ <field name="links" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="_src_" type="string" indexed="false" stored="true"/>
+
+ <!-- Main body of document extracted by SolrCell.
+ NOTE: This field is not indexed by default, since it is also copied to "text"
+ using copyField below. This is to save space. Use this field for returning and
+ highlighting document content. Use the "text" field to search the content. -->
+ <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
+
+
+ <!-- catchall field, containing all other searchable text fields (implemented
+ via copyField further on in this schema -->
+ <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- catchall text field that indexes tokens both normally and in reverse for efficient
+ leading wildcard queries. -->
+ <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>
+
+ <!-- non-tokenized version of manufacturer to make it easier to sort or group
+ results by manufacturer. copied from "manu" via copyField -->
+ <field name="manu_exact" type="string" indexed="true" stored="false" docValues="false" />
+
+ <field name="payloads" type="payloads" indexed="true" stored="true"/>
+
+
+ <!-- Dynamic field definitions allow using convention over configuration
+ for fields via the specification of patterns to match field names.
+ EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
+ RESTRICTION: the glob-like pattern in the name attribute must have
+ a "*" only at the start or the end. -->
+
+ <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
+ <dynamicField name="*_is" type="pint" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" />
+ <dynamicField name="*_s_ns" type="string" indexed="true" stored="false" />
+ <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_l" type="plong" indexed="true" stored="true"/>
+ <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
+ <dynamicField name="*_ls" type="plong" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
+ <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+ <dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
+ <dynamicField name="*_fs" type="pfloat" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_ds" type="pdouble" indexed="true" stored="true" multiValued="true"/>
+
+ <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
+ <dynamicField name="*_dts" type="pdate" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
+
+ <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
+
+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+ <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
+
+ <dynamicField name="random_*" type="random" />
+
+ <!-- uncomment the following to ignore any fields that don't already match an existing
+ field name or dynamic field, rather than reporting them as an error.
+ alternately, change the type="ignored" to some other type e.g. "text" if you want
+ unknown fields indexed and/or stored by default -->
+ <!--dynamicField name="*" type="ignored" multiValued="true" /-->
+
+
+ <!-- Field to use to determine and enforce document uniqueness.
+ Unless this field is marked with required="false", it will be a required field
+ -->
+ <uniqueKey>id</uniqueKey>
+
+ <!-- copyField commands copy one field to another at the time a document
+ is added to the index. It's used either to index the same field differently,
+ or to add multiple fields to the same field for easier/faster searching. -->
+
+ <copyField source="cat" dest="text"/>
+ <copyField source="name" dest="text"/>
+ <copyField source="manu" dest="text"/>
+ <copyField source="features" dest="text"/>
+ <copyField source="includes" dest="text"/>
+ <copyField source="manu" dest="manu_exact"/>
+
+ <!-- Copy the price into a currency enabled field (default USD) -->
+ <copyField source="price" dest="price_c"/>
+
+ <!-- Text fields from SolrCell to search by default in our catch-all field -->
+ <copyField source="title" dest="text"/>
+ <copyField source="author" dest="text"/>
+ <copyField source="description" dest="text"/>
+ <copyField source="keywords" dest="text"/>
+ <copyField source="content" dest="text"/>
+ <copyField source="content_type" dest="text"/>
+ <copyField source="resourcename" dest="text"/>
+ <copyField source="url" dest="text"/>
+
+ <!-- Create a string version of author for faceting -->
+ <copyField source="author" dest="author_s"/>
+
+ <!-- Above, multiple source fields are copied to the [text] field.
+ Another way to map multiple source fields to the same
+ destination field is to use the dynamic field syntax.
+ copyField also supports a maxChars to copy setting. -->
+
+ <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
+
+ <!-- copy name to alphaNameSort, a field designed for sorting by name -->
+ <!-- <copyField source="name" dest="alphaNameSort"/> -->
+
+
+ <!-- field type definitions. The "name" attribute is
+ just a label to be used by field definitions. The "class"
+ attribute and any other attributes determine the real
+ behavior of the fieldType.
+ Class names starting with "solr" refer to java classes in a
+ standard package such as org.apache.solr.analysis
+ -->
+
+ <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
+
+ <!-- boolean type: "true" or "false" -->
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+
+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
+ currently supported on types that are sorted internally as strings
+ and on numeric types.
+ This includes "string", "boolean", "pint", "pfloat", "plong", "pdate", "pdouble".
+ - If sortMissingLast="true", then a sort on this field will cause documents
+ without the field to come after documents with the field,
+ regardless of the requested sort order (asc or desc).
+ - If sortMissingFirst="true", then a sort on this field will cause documents
+ without the field to come before documents with the field,
+ regardless of the requested sort order.
+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
+ then default lucene sorting will be used which places docs without the
+ field first in an ascending sort and last in a descending sort.
+ -->
+
+ <!--
+ Numeric field types that index values using KD-trees.
+ Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
+ -->
+ <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
+ <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+
+ <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
+ <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
+ <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
+
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+ is a more restricted form of the canonical representation of dateTime
+ http://www.w3.org/TR/xmlschema-2/#dateTime
+ The trailing "Z" designates UTC time and is mandatory.
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+ All other components are mandatory.
+
+ Expressions can also be used to denote calculations that should be
+ performed relative to "NOW" to determine the value, ie...
+
+ NOW/HOUR
+ ... Round to the start of the current hour
+ NOW-1DAY
+ ... Exactly 1 day prior to now
+ NOW/DAY+6MONTHS+3DAYS
+ ... 6 months and 3 days in the future from the start of
+ the current day
+
+ Consult the DatePointField javadocs for more information.
+ -->
+
+ <!-- KD-tree versions of date fields -->
+ <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
+ <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
+
+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
+ <fieldType name="binary" class="solr.BinaryField"/>
+
+ <!-- The "RandomSortField" is not used to store or search any
+ data. You can declare fields of this type it in your schema
+ to generate pseudo-random orderings of your docs for sorting
+ or function purposes. The ordering is generated based on the field
+ name and the version of the index. As long as the index version
+ remains unchanged, and the same field name is reused,
+ the ordering of the docs will be consistent.
+ If you want different psuedo-random orderings of documents,
+ for the same version of the index, use a dynamicField and
+ change the field name in the request.
+ -->
+ <fieldType name="random" class="solr.RandomSortField" indexed="true" />
+
+ <!-- solr.TextField allows the specification of custom text analyzers
+ specified as a tokenizer and a list of token filters. Different
+ analyzers may be specified for indexing and querying.
+
+ The optional positionIncrementGap puts space between multiple fields of
+ this type on the same document, with the purpose of preventing false phrase
+ matching across fields.
+
+ For more info on customizing your analyzer chain, please see
+ http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+ -->
+
+ <!-- One can also specify an existing Analyzer class that has a
+ default constructor via the class attribute on the analyzer element.
+ Example:
+ <fieldType name="text_greek" class="solr.TextField">
+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+ </fieldType>
+ -->
+
+ <!-- A text field that only splits on whitespace for exact matching of words -->
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text type for English text where stopwords and synonyms are managed using the REST API -->
+ <fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ManagedStopFilterFactory" managed="english" />
+ <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ManagedStopFilterFactory" managed="english" />
+ <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english" />
+ </analyzer>
+ </fieldType>
+
+ <!-- A general text field that has reasonable, generic
+ cross-language defaults: it tokenizes with StandardTokenizer,
+ removes stop words from case-insensitive "stopwords.txt"
+ (empty by default), and down cases. At query time only, it
+ also applies synonyms. -->
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- SortableTextField generaly functions exactly like TextField,
+ except that it supports, and by default uses, docValues for sorting (or faceting)
+ on the first 1024 characters of the original field values (which is configurable).
+
+ This makes it a bit more useful then TextField in many situations, but the trade-off
+ is that it takes up more space on disk; which is why it's not used in place of TextField
+ for every fieldType in this _default schema.
+ -->
+ <fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English: it
+ tokenizes with StandardTokenizer, removes English stop words
+ (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
+ finally applies Porter's stemming. The query time analyzer
+ also applies synonyms from synonyms.txt. -->
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ -->
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- A text field with defaults appropriate for English, plus
+ aggressive word-splitting and autophrase features enabled.
+ This field is just like text_en, except it adds
+ WordDelimiterGraphFilter to enable splitting and matching of
+ words on case-change, alpha numeric boundaries, and
+ non-alphanumeric chars. This means certain compound word
+ cases will work, for example query "wi fi" will match
+ document "WiFi" or "wi-fi".
+ -->
+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ -->
+ <!-- Case insensitive stop word removal.
+ -->
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory"
+ ignoreCase="true"
+ words="lang/stopwords_en.txt"
+ />
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
+ <analyzer type="index">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ <filter class="solr.FlattenGraphFilterFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
+ <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
+ possible with WordDelimiterGraphFilter in conjuncton with stemming. -->
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Just like text_general except it reverses the characters of
+ each token, to enable more efficient leading wildcard queries. -->
+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- charFilter + WhitespaceTokenizer -->
+ <!--
+ <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
+ <analyzer>
+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+ -->
+
+ <!-- This is an example of using the KeywordTokenizer along
+ With various TokenFilterFactories to produce a sortable field
+ that does not include some properties of the source text
+ -->
+ <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+ <analyzer>
+ <!-- KeywordTokenizer does no actual tokenizing, so the entire
+ input string is preserved as a single token
+ -->
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <!-- The LowerCase TokenFilter does what you expect, which can be
+ when you want your sorting to be case insensitive
+ -->
+ <filter class="solr.LowerCaseFilterFactory" />
+ <!-- The TrimFilter removes any leading or trailing whitespace -->
+ <filter class="solr.TrimFilterFactory" />
+ <!-- The PatternReplaceFilter gives you the flexibility to use
+ Java Regular expression to replace any sequence of characters
+ matching a pattern with an arbitrary replacement string,
+ which may include back references to portions of the original
+ string matched by the pattern.
+
+ See the Java Regular Expression documentation for more
+ information on pattern and replacement string syntax.
+
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
+ -->
+ <filter class="solr.PatternReplaceFilterFactory"
+ pattern="([^a-z])" replacement="" replace="all"
+ />
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="phonetic" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="payloads" stored="false" indexed="true" class="solr.TextField" >
+ <analyzer>
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ <!--
+ The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
+ a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f
+ Attributes of the DelimitedPayloadTokenFilterFactory :
+ "delimiter" - a one character delimiter. Default is | (pipe)
+ "encoder" - how to encode the following value into a playload
+ float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+ integer -> o.a.l.a.p.IntegerEncoder
+ identity -> o.a.l.a.p.IdentityEncoder
+ Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
+ -->
+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- lowercases the entire field value, keeping it as a single token. -->
+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!--
+ Example of using PathHierarchyTokenizerFactory at index time, so
+ queries for paths match documents at that path, or in descendent paths
+ -->
+ <fieldType name="descendent_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ </fieldType>
+ <!--
+ Example of using PathHierarchyTokenizerFactory at query time, so
+ queries for paths match documents at that path, or in ancestor paths
+ -->
+ <fieldType name="ancestor_path" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.KeywordTokenizerFactory" />
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+ </analyzer>
+ </fieldType>
+
+ <!-- since fields of this type are by default not stored or indexed,
+ any data added to them will be ignored outright. -->
+ <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+
+ <!-- This point type indexes the coordinates as separate fields (subFields)
+ If subFieldType is defined, it references a type, and a dynamic field
+ definition is created matching *___<typename>. Alternately, if
+ subFieldSuffix is defined, that is used to create the subFields.
+ Example: if subFieldType="double", then the coordinates would be
+ indexed in fields myloc_0___double,myloc_1___double.
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
+ in fields myloc_0_d,myloc_1_d
+ The subFields are an implementation detail of the fieldType, and end
+ users normally should not need to know about them.
+ -->
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+ <!-- A specialized field for geospatial search filters and distance sorting. -->
+ <fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
+
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
+ For more information about this and other Spatial fields new to Solr 4, see:
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
+ -->
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+ geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
+
+ <!-- Spatial rectangle (bounding box) field. It supports most spatial predicates, and has
+ special relevancy modes: score=overlapRatio|area|area2D (local-param to the query). DocValues is recommended for
+ relevancy. -->
+ <fieldType name="bbox" class="solr.BBoxField"
+ geo="true" distanceUnits="kilometers" numberType="pdouble" />
+
+ <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
+ Parameters:
+ amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field.
+ The dynamic field must have a field type that extends LongValueFieldType.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ codeStrSuffix: Required. Refers to a dynamic field for the currency code sub-field.
+ The dynamic field must have a field type that extends StrField.
+ Note: If you expect to use Atomic Updates, this dynamic field may not be stored.
+ defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
+ providerClass: Lets you plug in other exchange provider backend:
+ solr.FileExchangeRateProvider is the default and takes one parameter:
+ currencyConfig: name of an xml file holding exchange rates
+ solr.OpenExchangeRatesOrgProvider uses rates from openexchangerates.org:
+ ratesFileLocation: URL or path to rates JSON file (default latest.json on the web)
+ refreshInterval: Number of minutes between each rates fetch (default: 1440, min: 60)
+ -->
+ <fieldType name="currency" class="solr.CurrencyFieldType" amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
+ defaultCurrency="USD" currencyConfig="currency.xml" />
+
+
+ <!-- some examples for different languages (generally ordered by ISO code) -->
+
+ <!-- Arabic -->
+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- for any non-arabic -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
+ <!-- normalizes ﻯ to ﻱ, etc -->
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.ArabicStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Bulgarian -->
+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
+ <filter class="solr.BulgarianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Catalan -->
+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- for any non-CJK -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.CJKBigramFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Kurdish -->
+ <fieldType name="text_ckb" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.SoraniNormalizationFilterFactory"/>
+ <!-- for any latin text -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ckb.txt"/>
+ <filter class="solr.SoraniStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Czech -->
+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
+ <filter class="solr.CzechStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Danish -->
+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- German -->
+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
+ <filter class="solr.GermanNormalizationFilterFactory"/>
+ <filter class="solr.GermanLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Greek -->
+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- greek specific lowercase for sigma -->
+ <filter class="solr.GreekLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
+ <filter class="solr.GreekStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Spanish -->
+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
+ <filter class="solr.SpanishLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Basque -->
+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Persian -->
+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- for ZWNJ -->
+ <charFilter class="solr.PersianCharFilterFactory"/>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.ArabicNormalizationFilterFactory"/>
+ <filter class="solr.PersianNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Finnish -->
+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- French -->
+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
+ <filter class="solr.FrenchLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Irish -->
+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes d', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
+ <!-- removes n-, etc. position increments is intentionally false! -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
+ <filter class="solr.IrishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Galician -->
+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
+ <filter class="solr.GalicianStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Hindi -->
+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <!-- normalizes unicode representation -->
+ <filter class="solr.IndicNormalizationFilterFactory"/>
+ <!-- normalizes variation in spelling -->
+ <filter class="solr.HindiNormalizationFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
+ <filter class="solr.HindiStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Hungarian -->
+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Armenian -->
+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Indonesian -->
+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Italian -->
+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <!-- removes l', etc -->
+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
+ <filter class="solr.ItalianLightStemFilterFactory"/>
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
+
+ NOTE: If you want to optimize search for precision, use default operator AND in your request
+ handler config (q.op) Use OR if you would like to optimize for recall (default).
+ -->
+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
+ <analyzer>
+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
+
+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
+ is used to segment compounds into its parts and the compound itself is kept as synonym.
+
+ Valid values for attribute mode are:
+ normal: regular segmentation
+ search: segmentation useful for search with synonyms compounds (default)
+ extended: same as search mode, but unigrams unknown words (experimental)
+
+ For some applications it might be good to use search mode for indexing and normal mode for
+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
+
+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ User dictionary attributes are:
+ userDictionary: user dictionary filename
+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
+
+ See lang/userdict_ja.txt for a sample user dictionary file.
+
+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
+
+ See http://wiki.apache.org/solr/JapaneseLanguageSupport for more on Japanese language support.
+ -->
+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
+ <!-- Removes tokens with certain part-of-speech tags -->
+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
+ <filter class="solr.CJKWidthFilterFactory"/>
+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
+ <!-- Lower-cases romaji characters -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Korean morphological analysis -->
+ <dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
+ <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <!-- Nori Korean morphological analyzer/tokenizer (KoreanTokenizer)
+ The Korean (nori) analyzer integrates Lucene nori analysis module into Solr.
+ It uses the mecab-ko-dic dictionary to perform morphological analysis of Korean texts.
+
+ This dictionary was built with MeCab, it defines a format for the features adapted
+ for the Korean language.
+
+ Nori also has a convenient user dictionary feature that allows overriding the statistical
+ model with your own entries for segmentation, part-of-speech tags and readings without a need
+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
+
+ The tokenizer supports multiple schema attributes:
+ * userDictionary: User dictionary path.
+ * userDictionaryEncoding: User dictionary encoding.
+ * decompoundMode: Decompound mode. Either 'none', 'discard', 'mixed'. Default is 'discard'.
+ * outputUnknownUnigrams: If true outputs unigrams for unknown words.
+ -->
+ <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
+ <!-- Removes some part of speech stuff like EOMI (Pos.E), you can add a parameter 'tags',
+ listing the tags to remove. By default it removes:
+ E, IC, J, MAG, MAJ, MM, SP, SSC, SSO, SC, SE, XPN, XSA, XSN, XSV, UNA, NA, VSV
+ This is basically an equivalent to stemming.
+ -->
+ <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
+ <!-- Replaces term text with the Hangul transcription of Hanja characters, if applicable: -->
+ <filter class="solr.KoreanReadingFormFilterFactory" />
+ <filter class="solr.LowerCaseFilterFactory" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Latvian -->
+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
+ <filter class="solr.LatvianStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Dutch -->
+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Norwegian -->
+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory" variant="nb"/> -->
+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory" variant="nb"/> -->
+ <!-- The "light" and "minimal" stemmers support variants: nb=Bokmål, nn=Nynorsk, no=Both -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Portuguese -->
+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
+ <filter class="solr.PortugueseLightStemFilterFactory"/>
+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Romanian -->
+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Russian -->
+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Swedish -->
+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
+ </analyzer>
+ </fieldType>
+
+ <!-- Thai -->
+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.ThaiTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
+ </analyzer>
+ </fieldType>
+
+ <!-- Turkish -->
+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.ApostropheFilterFactory"/>
+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Pre-analyzed field type, allows inserting arbitrary token streams and stored values. -->
+ <fieldType name="preanalyzed" class="solr.PreAnalyzedField">
+ <!-- PreAnalyzedField's builtin index analyzer just decodes the pre-analyzed token stream. -->
+ <analyzer type="query">
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+ A custom Similarity or SimilarityFactory may be specified here, but
+ the default is fine for most applications.
+ For more info: http://wiki.apache.org/solr/SchemaXml#Similarity
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+ <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-FoldToASCII.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-FoldToASCII.txt
new file mode 100644
index 000000000..9a84b6eac
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-FoldToASCII.txt
@@ -0,0 +1,3813 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# This map converts alphabetic, numeric, and symbolic Unicode characters
+# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode
+# block) into their ASCII equivalents, if one exists.
+#
+# Characters from the following Unicode blocks are converted; however, only
+# those characters with reasonable ASCII alternatives are converted:
+#
+# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf
+# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf
+# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf
+# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf
+# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf
+# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf
+# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf
+# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf
+# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf
+# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf
+# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf
+# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf
+# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf
+# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf
+# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf
+# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf
+#
+# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode
+#
+# The set of character conversions supported by this map is a superset of
+# those supported by the map represented by mapping-ISOLatin1Accent.txt.
+#
+# See the bottom of this file for the Perl script used to generate the contents
+# of this file (without this header) from ASCIIFoldingFilter.java.
+
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+
+# À [LATIN CAPITAL LETTER A WITH GRAVE]
+"\u00C0" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH ACUTE]
+"\u00C1" => "A"
+
+# Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+"\u00C2" => "A"
+
+# Ã [LATIN CAPITAL LETTER A WITH TILDE]
+"\u00C3" => "A"
+
+# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
+"\u00C4" => "A"
+
+# Ã… [LATIN CAPITAL LETTER A WITH RING ABOVE]
+"\u00C5" => "A"
+
+# Ā [LATIN CAPITAL LETTER A WITH MACRON]
+"\u0100" => "A"
+
+# Ä‚ [LATIN CAPITAL LETTER A WITH BREVE]
+"\u0102" => "A"
+
+# Ä„ [LATIN CAPITAL LETTER A WITH OGONEK]
+"\u0104" => "A"
+
+# Æ http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
+"\u018F" => "A"
+
+# Ç [LATIN CAPITAL LETTER A WITH CARON]
+"\u01CD" => "A"
+
+# Çž [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DE" => "A"
+
+# Ç  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E0" => "A"
+
+# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FA" => "A"
+
+# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+"\u0200" => "A"
+
+# È‚ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+"\u0202" => "A"
+
+# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
+"\u0226" => "A"
+
+# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
+"\u023A" => "A"
+
+# á´€ [LATIN LETTER SMALL CAPITAL A]
+"\u1D00" => "A"
+
+# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
+"\u1E00" => "A"
+
+# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
+"\u1EA0" => "A"
+
+# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+"\u1EA2" => "A"
+
+# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA4" => "A"
+
+# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA6" => "A"
+
+# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA8" => "A"
+
+# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAA" => "A"
+
+# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAC" => "A"
+
+# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+"\u1EAE" => "A"
+
+# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+"\u1EB0" => "A"
+
+# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB2" => "A"
+
+# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+"\u1EB4" => "A"
+
+# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB6" => "A"
+
+# â’¶ [CIRCLED LATIN CAPITAL LETTER A]
+"\u24B6" => "A"
+
+# A [FULLWIDTH LATIN CAPITAL LETTER A]
+"\uFF21" => "A"
+
+# à [LATIN SMALL LETTER A WITH GRAVE]
+"\u00E0" => "a"
+
+# á [LATIN SMALL LETTER A WITH ACUTE]
+"\u00E1" => "a"
+
+# â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
+"\u00E2" => "a"
+
+# ã [LATIN SMALL LETTER A WITH TILDE]
+"\u00E3" => "a"
+
+# ä [LATIN SMALL LETTER A WITH DIAERESIS]
+"\u00E4" => "a"
+
+# å [LATIN SMALL LETTER A WITH RING ABOVE]
+"\u00E5" => "a"
+
+# Ä [LATIN SMALL LETTER A WITH MACRON]
+"\u0101" => "a"
+
+# ă [LATIN SMALL LETTER A WITH BREVE]
+"\u0103" => "a"
+
+# Ä… [LATIN SMALL LETTER A WITH OGONEK]
+"\u0105" => "a"
+
+# ÇŽ [LATIN SMALL LETTER A WITH CARON]
+"\u01CE" => "a"
+
+# ÇŸ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+"\u01DF" => "a"
+
+# Ç¡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+"\u01E1" => "a"
+
+# Ç» [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+"\u01FB" => "a"
+
+# È [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+"\u0201" => "a"
+
+# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
+"\u0203" => "a"
+
+# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
+"\u0227" => "a"
+
+# É [LATIN SMALL LETTER TURNED A]
+"\u0250" => "a"
+
+# É™ [LATIN SMALL LETTER SCHWA]
+"\u0259" => "a"
+
+# Éš [LATIN SMALL LETTER SCHWA WITH HOOK]
+"\u025A" => "a"
+
+# á¶ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
+"\u1D8F" => "a"
+
+# á¶• [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
+"\u1D95" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH RING BELOW]
+"\u1E01" => "a"
+
+# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
+"\u1E9A" => "a"
+
+# ạ [LATIN SMALL LETTER A WITH DOT BELOW]
+"\u1EA1" => "a"
+
+# ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
+"\u1EA3" => "a"
+
+# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+"\u1EA5" => "a"
+
+# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+"\u1EA7" => "a"
+
+# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EA9" => "a"
+
+# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+"\u1EAB" => "a"
+
+# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EAD" => "a"
+
+# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+"\u1EAF" => "a"
+
+# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+"\u1EB1" => "a"
+
+# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+"\u1EB3" => "a"
+
+# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
+"\u1EB5" => "a"
+
+# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+"\u1EB7" => "a"
+
+# â‚ [LATIN SUBSCRIPT SMALL LETTER A]
+"\u2090" => "a"
+
+# â‚” [LATIN SUBSCRIPT SMALL LETTER SCHWA]
+"\u2094" => "a"
+
+# â“ [CIRCLED LATIN SMALL LETTER A]
+"\u24D0" => "a"
+
+# â±¥ [LATIN SMALL LETTER A WITH STROKE]
+"\u2C65" => "a"
+
+# Ɐ [LATIN CAPITAL LETTER TURNED A]
+"\u2C6F" => "a"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER A]
+"\uFF41" => "a"
+
+# Ꜳ [LATIN CAPITAL LETTER AA]
+"\uA732" => "AA"
+
+# Æ [LATIN CAPITAL LETTER AE]
+"\u00C6" => "AE"
+
+# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
+"\u01E2" => "AE"
+
+# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
+"\u01FC" => "AE"
+
+# á´ [LATIN LETTER SMALL CAPITAL AE]
+"\u1D01" => "AE"
+
+# Ꜵ [LATIN CAPITAL LETTER AO]
+"\uA734" => "AO"
+
+# Ꜷ [LATIN CAPITAL LETTER AU]
+"\uA736" => "AU"
+
+# Ꜹ [LATIN CAPITAL LETTER AV]
+"\uA738" => "AV"
+
+# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
+"\uA73A" => "AV"
+
+# Ꜽ [LATIN CAPITAL LETTER AY]
+"\uA73C" => "AY"
+
+# ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
+"\u249C" => "(a)"
+
+# ꜳ [LATIN SMALL LETTER AA]
+"\uA733" => "aa"
+
+# æ [LATIN SMALL LETTER AE]
+"\u00E6" => "ae"
+
+# ǣ [LATIN SMALL LETTER AE WITH MACRON]
+"\u01E3" => "ae"
+
+# ǽ [LATIN SMALL LETTER AE WITH ACUTE]
+"\u01FD" => "ae"
+
+# á´‚ [LATIN SMALL LETTER TURNED AE]
+"\u1D02" => "ae"
+
+# ꜵ [LATIN SMALL LETTER AO]
+"\uA735" => "ao"
+
+# ꜷ [LATIN SMALL LETTER AU]
+"\uA737" => "au"
+
+# ꜹ [LATIN SMALL LETTER AV]
+"\uA739" => "av"
+
+# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
+"\uA73B" => "av"
+
+# ꜽ [LATIN SMALL LETTER AY]
+"\uA73D" => "ay"
+
+# Æ [LATIN CAPITAL LETTER B WITH HOOK]
+"\u0181" => "B"
+
+# Æ‚ [LATIN CAPITAL LETTER B WITH TOPBAR]
+"\u0182" => "B"
+
+# Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
+"\u0243" => "B"
+
+# Ê™ [LATIN LETTER SMALL CAPITAL B]
+"\u0299" => "B"
+
+# á´ƒ [LATIN LETTER SMALL CAPITAL BARRED B]
+"\u1D03" => "B"
+
+# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
+"\u1E02" => "B"
+
+# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
+"\u1E04" => "B"
+
+# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
+"\u1E06" => "B"
+
+# â’· [CIRCLED LATIN CAPITAL LETTER B]
+"\u24B7" => "B"
+
+# ï¼¢ [FULLWIDTH LATIN CAPITAL LETTER B]
+"\uFF22" => "B"
+
+# ƀ [LATIN SMALL LETTER B WITH STROKE]
+"\u0180" => "b"
+
+# ƃ [LATIN SMALL LETTER B WITH TOPBAR]
+"\u0183" => "b"
+
+# É“ [LATIN SMALL LETTER B WITH HOOK]
+"\u0253" => "b"
+
+# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
+"\u1D6C" => "b"
+
+# á¶€ [LATIN SMALL LETTER B WITH PALATAL HOOK]
+"\u1D80" => "b"
+
+# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
+"\u1E03" => "b"
+
+# ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
+"\u1E05" => "b"
+
+# ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
+"\u1E07" => "b"
+
+# â“‘ [CIRCLED LATIN SMALL LETTER B]
+"\u24D1" => "b"
+
+# b [FULLWIDTH LATIN SMALL LETTER B]
+"\uFF42" => "b"
+
+# â’ [PARENTHESIZED LATIN SMALL LETTER B]
+"\u249D" => "(b)"
+
+# Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
+"\u00C7" => "C"
+
+# Ć [LATIN CAPITAL LETTER C WITH ACUTE]
+"\u0106" => "C"
+
+# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+"\u0108" => "C"
+
+# ÄŠ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
+"\u010A" => "C"
+
+# Č [LATIN CAPITAL LETTER C WITH CARON]
+"\u010C" => "C"
+
+# Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
+"\u0187" => "C"
+
+# È» [LATIN CAPITAL LETTER C WITH STROKE]
+"\u023B" => "C"
+
+# Ê— [LATIN LETTER STRETCHED C]
+"\u0297" => "C"
+
+# á´„ [LATIN LETTER SMALL CAPITAL C]
+"\u1D04" => "C"
+
+# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E08" => "C"
+
+# â’¸ [CIRCLED LATIN CAPITAL LETTER C]
+"\u24B8" => "C"
+
+# ï¼£ [FULLWIDTH LATIN CAPITAL LETTER C]
+"\uFF23" => "C"
+
+# ç [LATIN SMALL LETTER C WITH CEDILLA]
+"\u00E7" => "c"
+
+# ć [LATIN SMALL LETTER C WITH ACUTE]
+"\u0107" => "c"
+
+# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
+"\u0109" => "c"
+
+# Ä‹ [LATIN SMALL LETTER C WITH DOT ABOVE]
+"\u010B" => "c"
+
+# Ä [LATIN SMALL LETTER C WITH CARON]
+"\u010D" => "c"
+
+# ƈ [LATIN SMALL LETTER C WITH HOOK]
+"\u0188" => "c"
+
+# ȼ [LATIN SMALL LETTER C WITH STROKE]
+"\u023C" => "c"
+
+# É• [LATIN SMALL LETTER C WITH CURL]
+"\u0255" => "c"
+
+# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+"\u1E09" => "c"
+
+# ↄ [LATIN SMALL LETTER REVERSED C]
+"\u2184" => "c"
+
+# â“’ [CIRCLED LATIN SMALL LETTER C]
+"\u24D2" => "c"
+
+# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
+"\uA73E" => "c"
+
+# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
+"\uA73F" => "c"
+
+# c [FULLWIDTH LATIN SMALL LETTER C]
+"\uFF43" => "c"
+
+# â’ž [PARENTHESIZED LATIN SMALL LETTER C]
+"\u249E" => "(c)"
+
+# Ã [LATIN CAPITAL LETTER ETH]
+"\u00D0" => "D"
+
+# ÄŽ [LATIN CAPITAL LETTER D WITH CARON]
+"\u010E" => "D"
+
+# Ä [LATIN CAPITAL LETTER D WITH STROKE]
+"\u0110" => "D"
+
+# Ɖ [LATIN CAPITAL LETTER AFRICAN D]
+"\u0189" => "D"
+
+# ÆŠ [LATIN CAPITAL LETTER D WITH HOOK]
+"\u018A" => "D"
+
+# Æ‹ [LATIN CAPITAL LETTER D WITH TOPBAR]
+"\u018B" => "D"
+
+# á´… [LATIN LETTER SMALL CAPITAL D]
+"\u1D05" => "D"
+
+# á´† [LATIN LETTER SMALL CAPITAL ETH]
+"\u1D06" => "D"
+
+# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
+"\u1E0A" => "D"
+
+# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
+"\u1E0C" => "D"
+
+# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
+"\u1E0E" => "D"
+
+# Ḡ[LATIN CAPITAL LETTER D WITH CEDILLA]
+"\u1E10" => "D"
+
+# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E12" => "D"
+
+# â’¹ [CIRCLED LATIN CAPITAL LETTER D]
+"\u24B9" => "D"
+
+# ê¹ [LATIN CAPITAL LETTER INSULAR D]
+"\uA779" => "D"
+
+# D [FULLWIDTH LATIN CAPITAL LETTER D]
+"\uFF24" => "D"
+
+# ð [LATIN SMALL LETTER ETH]
+"\u00F0" => "d"
+
+# Ä [LATIN SMALL LETTER D WITH CARON]
+"\u010F" => "d"
+
+# Ä‘ [LATIN SMALL LETTER D WITH STROKE]
+"\u0111" => "d"
+
+# ƌ [LATIN SMALL LETTER D WITH TOPBAR]
+"\u018C" => "d"
+
+# È¡ [LATIN SMALL LETTER D WITH CURL]
+"\u0221" => "d"
+
+# É– [LATIN SMALL LETTER D WITH TAIL]
+"\u0256" => "d"
+
+# É— [LATIN SMALL LETTER D WITH HOOK]
+"\u0257" => "d"
+
+# áµ­ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
+"\u1D6D" => "d"
+
+# á¶ [LATIN SMALL LETTER D WITH PALATAL HOOK]
+"\u1D81" => "d"
+
+# á¶‘ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
+"\u1D91" => "d"
+
+# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
+"\u1E0B" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH DOT BELOW]
+"\u1E0D" => "d"
+
+# Ḡ[LATIN SMALL LETTER D WITH LINE BELOW]
+"\u1E0F" => "d"
+
+# ḑ [LATIN SMALL LETTER D WITH CEDILLA]
+"\u1E11" => "d"
+
+# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+"\u1E13" => "d"
+
+# â““ [CIRCLED LATIN SMALL LETTER D]
+"\u24D3" => "d"
+
+# êº [LATIN SMALL LETTER INSULAR D]
+"\uA77A" => "d"
+
+# d [FULLWIDTH LATIN SMALL LETTER D]
+"\uFF44" => "d"
+
+# Ç„ [LATIN CAPITAL LETTER DZ WITH CARON]
+"\u01C4" => "DZ"
+
+# DZ [LATIN CAPITAL LETTER DZ]
+"\u01F1" => "DZ"
+
+# Ç… [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
+"\u01C5" => "Dz"
+
+# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
+"\u01F2" => "Dz"
+
+# â’Ÿ [PARENTHESIZED LATIN SMALL LETTER D]
+"\u249F" => "(d)"
+
+# ȸ [LATIN SMALL LETTER DB DIGRAPH]
+"\u0238" => "db"
+
+# dž [LATIN SMALL LETTER DZ WITH CARON]
+"\u01C6" => "dz"
+
+# dz [LATIN SMALL LETTER DZ]
+"\u01F3" => "dz"
+
+# ʣ [LATIN SMALL LETTER DZ DIGRAPH]
+"\u02A3" => "dz"
+
+# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
+"\u02A5" => "dz"
+
+# È [LATIN CAPITAL LETTER E WITH GRAVE]
+"\u00C8" => "E"
+
+# É [LATIN CAPITAL LETTER E WITH ACUTE]
+"\u00C9" => "E"
+
+# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+"\u00CA" => "E"
+
+# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
+"\u00CB" => "E"
+
+# Ä’ [LATIN CAPITAL LETTER E WITH MACRON]
+"\u0112" => "E"
+
+# Ä” [LATIN CAPITAL LETTER E WITH BREVE]
+"\u0114" => "E"
+
+# Ä– [LATIN CAPITAL LETTER E WITH DOT ABOVE]
+"\u0116" => "E"
+
+# Ę [LATIN CAPITAL LETTER E WITH OGONEK]
+"\u0118" => "E"
+
+# Äš [LATIN CAPITAL LETTER E WITH CARON]
+"\u011A" => "E"
+
+# ÆŽ [LATIN CAPITAL LETTER REVERSED E]
+"\u018E" => "E"
+
+# Æ [LATIN CAPITAL LETTER OPEN E]
+"\u0190" => "E"
+
+# È„ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+"\u0204" => "E"
+
+# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+"\u0206" => "E"
+
+# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
+"\u0228" => "E"
+
+# Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
+"\u0246" => "E"
+
+# á´‡ [LATIN LETTER SMALL CAPITAL E]
+"\u1D07" => "E"
+
+# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+"\u1E14" => "E"
+
+# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+"\u1E16" => "E"
+
+# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E18" => "E"
+
+# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
+"\u1E1A" => "E"
+
+# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1C" => "E"
+
+# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
+"\u1EB8" => "E"
+
+# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+"\u1EBA" => "E"
+
+# Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
+"\u1EBC" => "E"
+
+# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBE" => "E"
+
+# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC0" => "E"
+
+# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC2" => "E"
+
+# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC4" => "E"
+
+# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC6" => "E"
+
+# â’º [CIRCLED LATIN CAPITAL LETTER E]
+"\u24BA" => "E"
+
+# â±» [LATIN LETTER SMALL CAPITAL TURNED E]
+"\u2C7B" => "E"
+
+# ï¼¥ [FULLWIDTH LATIN CAPITAL LETTER E]
+"\uFF25" => "E"
+
+# è [LATIN SMALL LETTER E WITH GRAVE]
+"\u00E8" => "e"
+
+# é [LATIN SMALL LETTER E WITH ACUTE]
+"\u00E9" => "e"
+
+# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
+"\u00EA" => "e"
+
+# ë [LATIN SMALL LETTER E WITH DIAERESIS]
+"\u00EB" => "e"
+
+# Ä“ [LATIN SMALL LETTER E WITH MACRON]
+"\u0113" => "e"
+
+# Ä• [LATIN SMALL LETTER E WITH BREVE]
+"\u0115" => "e"
+
+# Ä— [LATIN SMALL LETTER E WITH DOT ABOVE]
+"\u0117" => "e"
+
+# Ä™ [LATIN SMALL LETTER E WITH OGONEK]
+"\u0119" => "e"
+
+# Ä› [LATIN SMALL LETTER E WITH CARON]
+"\u011B" => "e"
+
+# Ç [LATIN SMALL LETTER TURNED E]
+"\u01DD" => "e"
+
+# È… [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+"\u0205" => "e"
+
+# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
+"\u0207" => "e"
+
+# È© [LATIN SMALL LETTER E WITH CEDILLA]
+"\u0229" => "e"
+
+# ɇ [LATIN SMALL LETTER E WITH STROKE]
+"\u0247" => "e"
+
+# ɘ [LATIN SMALL LETTER REVERSED E]
+"\u0258" => "e"
+
+# É› [LATIN SMALL LETTER OPEN E]
+"\u025B" => "e"
+
+# ɜ [LATIN SMALL LETTER REVERSED OPEN E]
+"\u025C" => "e"
+
+# É [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
+"\u025D" => "e"
+
+# Éž [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
+"\u025E" => "e"
+
+# Êš [LATIN SMALL LETTER CLOSED OPEN E]
+"\u029A" => "e"
+
+# á´ˆ [LATIN SMALL LETTER TURNED OPEN E]
+"\u1D08" => "e"
+
+# á¶’ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
+"\u1D92" => "e"
+
+# á¶“ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
+"\u1D93" => "e"
+
+# á¶” [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
+"\u1D94" => "e"
+
+# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+"\u1E15" => "e"
+
+# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+"\u1E17" => "e"
+
+# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+"\u1E19" => "e"
+
+# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
+"\u1E1B" => "e"
+
+# Ḡ[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+"\u1E1D" => "e"
+
+# ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
+"\u1EB9" => "e"
+
+# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
+"\u1EBB" => "e"
+
+# ẽ [LATIN SMALL LETTER E WITH TILDE]
+"\u1EBD" => "e"
+
+# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+"\u1EBF" => "e"
+
+# á» [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+"\u1EC1" => "e"
+
+# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1EC3" => "e"
+
+# á»… [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+"\u1EC5" => "e"
+
+# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+"\u1EC7" => "e"
+
+# â‚‘ [LATIN SUBSCRIPT SMALL LETTER E]
+"\u2091" => "e"
+
+# â“” [CIRCLED LATIN SMALL LETTER E]
+"\u24D4" => "e"
+
+# ⱸ [LATIN SMALL LETTER E WITH NOTCH]
+"\u2C78" => "e"
+
+# ï½… [FULLWIDTH LATIN SMALL LETTER E]
+"\uFF45" => "e"
+
+# â’  [PARENTHESIZED LATIN SMALL LETTER E]
+"\u24A0" => "(e)"
+
+# Æ‘ [LATIN CAPITAL LETTER F WITH HOOK]
+"\u0191" => "F"
+
+# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
+"\u1E1E" => "F"
+
+# â’» [CIRCLED LATIN CAPITAL LETTER F]
+"\u24BB" => "F"
+
+# ꜰ [LATIN LETTER SMALL CAPITAL F]
+"\uA730" => "F"
+
+# ê» [LATIN CAPITAL LETTER INSULAR F]
+"\uA77B" => "F"
+
+# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
+"\uA7FB" => "F"
+
+# F [FULLWIDTH LATIN CAPITAL LETTER F]
+"\uFF26" => "F"
+
+# Æ’ [LATIN SMALL LETTER F WITH HOOK]
+"\u0192" => "f"
+
+# áµ® [LATIN SMALL LETTER F WITH MIDDLE TILDE]
+"\u1D6E" => "f"
+
+# á¶‚ [LATIN SMALL LETTER F WITH PALATAL HOOK]
+"\u1D82" => "f"
+
+# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
+"\u1E1F" => "f"
+
+# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+"\u1E9B" => "f"
+
+# â“• [CIRCLED LATIN SMALL LETTER F]
+"\u24D5" => "f"
+
+# ê¼ [LATIN SMALL LETTER INSULAR F]
+"\uA77C" => "f"
+
+# f [FULLWIDTH LATIN SMALL LETTER F]
+"\uFF46" => "f"
+
+# â’¡ [PARENTHESIZED LATIN SMALL LETTER F]
+"\u24A1" => "(f)"
+
+# ff [LATIN SMALL LIGATURE FF]
+"\uFB00" => "ff"
+
+# ffi [LATIN SMALL LIGATURE FFI]
+"\uFB03" => "ffi"
+
+# ffl [LATIN SMALL LIGATURE FFL]
+"\uFB04" => "ffl"
+
+# ï¬ [LATIN SMALL LIGATURE FI]
+"\uFB01" => "fi"
+
+# fl [LATIN SMALL LIGATURE FL]
+"\uFB02" => "fl"
+
+# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+"\u011C" => "G"
+
+# Äž [LATIN CAPITAL LETTER G WITH BREVE]
+"\u011E" => "G"
+
+# Ä  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
+"\u0120" => "G"
+
+# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
+"\u0122" => "G"
+
+# Æ“ [LATIN CAPITAL LETTER G WITH HOOK]
+"\u0193" => "G"
+
+# Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
+"\u01E4" => "G"
+
+# ǥ [LATIN SMALL LETTER G WITH STROKE]
+"\u01E5" => "G"
+
+# Ǧ [LATIN CAPITAL LETTER G WITH CARON]
+"\u01E6" => "G"
+
+# ǧ [LATIN SMALL LETTER G WITH CARON]
+"\u01E7" => "G"
+
+# Ç´ [LATIN CAPITAL LETTER G WITH ACUTE]
+"\u01F4" => "G"
+
+# ɢ [LATIN LETTER SMALL CAPITAL G]
+"\u0262" => "G"
+
+# Ê› [LATIN LETTER SMALL CAPITAL G WITH HOOK]
+"\u029B" => "G"
+
+# Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
+"\u1E20" => "G"
+
+# â’¼ [CIRCLED LATIN CAPITAL LETTER G]
+"\u24BC" => "G"
+
+# ê½ [LATIN CAPITAL LETTER INSULAR G]
+"\uA77D" => "G"
+
+# ê¾ [LATIN CAPITAL LETTER TURNED INSULAR G]
+"\uA77E" => "G"
+
+# ï¼§ [FULLWIDTH LATIN CAPITAL LETTER G]
+"\uFF27" => "G"
+
+# Ä [LATIN SMALL LETTER G WITH CIRCUMFLEX]
+"\u011D" => "g"
+
+# ÄŸ [LATIN SMALL LETTER G WITH BREVE]
+"\u011F" => "g"
+
+# Ä¡ [LATIN SMALL LETTER G WITH DOT ABOVE]
+"\u0121" => "g"
+
+# ģ [LATIN SMALL LETTER G WITH CEDILLA]
+"\u0123" => "g"
+
+# ǵ [LATIN SMALL LETTER G WITH ACUTE]
+"\u01F5" => "g"
+
+# É  [LATIN SMALL LETTER G WITH HOOK]
+"\u0260" => "g"
+
+# É¡ [LATIN SMALL LETTER SCRIPT G]
+"\u0261" => "g"
+
+# áµ· [LATIN SMALL LETTER TURNED G]
+"\u1D77" => "g"
+
+# áµ¹ [LATIN SMALL LETTER INSULAR G]
+"\u1D79" => "g"
+
+# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
+"\u1D83" => "g"
+
+# ḡ [LATIN SMALL LETTER G WITH MACRON]
+"\u1E21" => "g"
+
+# â“– [CIRCLED LATIN SMALL LETTER G]
+"\u24D6" => "g"
+
+# ê¿ [LATIN SMALL LETTER TURNED INSULAR G]
+"\uA77F" => "g"
+
+# g [FULLWIDTH LATIN SMALL LETTER G]
+"\uFF47" => "g"
+
+# â’¢ [PARENTHESIZED LATIN SMALL LETTER G]
+"\u24A2" => "(g)"
+
+# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+"\u0124" => "H"
+
+# Ħ [LATIN CAPITAL LETTER H WITH STROKE]
+"\u0126" => "H"
+
+# Èž [LATIN CAPITAL LETTER H WITH CARON]
+"\u021E" => "H"
+
+# ʜ [LATIN LETTER SMALL CAPITAL H]
+"\u029C" => "H"
+
+# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
+"\u1E22" => "H"
+
+# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
+"\u1E24" => "H"
+
+# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
+"\u1E26" => "H"
+
+# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
+"\u1E28" => "H"
+
+# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
+"\u1E2A" => "H"
+
+# â’½ [CIRCLED LATIN CAPITAL LETTER H]
+"\u24BD" => "H"
+
+# â±§ [LATIN CAPITAL LETTER H WITH DESCENDER]
+"\u2C67" => "H"
+
+# â±µ [LATIN CAPITAL LETTER HALF H]
+"\u2C75" => "H"
+
+# H [FULLWIDTH LATIN CAPITAL LETTER H]
+"\uFF28" => "H"
+
+# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
+"\u0125" => "h"
+
+# ħ [LATIN SMALL LETTER H WITH STROKE]
+"\u0127" => "h"
+
+# ÈŸ [LATIN SMALL LETTER H WITH CARON]
+"\u021F" => "h"
+
+# ɥ [LATIN SMALL LETTER TURNED H]
+"\u0265" => "h"
+
+# ɦ [LATIN SMALL LETTER H WITH HOOK]
+"\u0266" => "h"
+
+# Ê® [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
+"\u02AE" => "h"
+
+# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
+"\u02AF" => "h"
+
+# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
+"\u1E23" => "h"
+
+# ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
+"\u1E25" => "h"
+
+# ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
+"\u1E27" => "h"
+
+# ḩ [LATIN SMALL LETTER H WITH CEDILLA]
+"\u1E29" => "h"
+
+# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
+"\u1E2B" => "h"
+
+# ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
+"\u1E96" => "h"
+
+# â“— [CIRCLED LATIN SMALL LETTER H]
+"\u24D7" => "h"
+
+# ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
+"\u2C68" => "h"
+
+# â±¶ [LATIN SMALL LETTER HALF H]
+"\u2C76" => "h"
+
+# h [FULLWIDTH LATIN SMALL LETTER H]
+"\uFF48" => "h"
+
+# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
+"\u01F6" => "HV"
+
+# â’£ [PARENTHESIZED LATIN SMALL LETTER H]
+"\u24A3" => "(h)"
+
+# Æ• [LATIN SMALL LETTER HV]
+"\u0195" => "hv"
+
+# Ì [LATIN CAPITAL LETTER I WITH GRAVE]
+"\u00CC" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH ACUTE]
+"\u00CD" => "I"
+
+# ÃŽ [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+"\u00CE" => "I"
+
+# Ã [LATIN CAPITAL LETTER I WITH DIAERESIS]
+"\u00CF" => "I"
+
+# Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
+"\u0128" => "I"
+
+# Ī [LATIN CAPITAL LETTER I WITH MACRON]
+"\u012A" => "I"
+
+# Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
+"\u012C" => "I"
+
+# Ä® [LATIN CAPITAL LETTER I WITH OGONEK]
+"\u012E" => "I"
+
+# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
+"\u0130" => "I"
+
+# Æ– [LATIN CAPITAL LETTER IOTA]
+"\u0196" => "I"
+
+# Æ— [LATIN CAPITAL LETTER I WITH STROKE]
+"\u0197" => "I"
+
+# Ç [LATIN CAPITAL LETTER I WITH CARON]
+"\u01CF" => "I"
+
+# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+"\u0208" => "I"
+
+# ÈŠ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+"\u020A" => "I"
+
+# ɪ [LATIN LETTER SMALL CAPITAL I]
+"\u026A" => "I"
+
+# áµ» [LATIN SMALL CAPITAL LETTER I WITH STROKE]
+"\u1D7B" => "I"
+
+# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
+"\u1E2C" => "I"
+
+# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2E" => "I"
+
+# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+"\u1EC8" => "I"
+
+# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
+"\u1ECA" => "I"
+
+# â’¾ [CIRCLED LATIN CAPITAL LETTER I]
+"\u24BE" => "I"
+
+# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
+"\uA7FE" => "I"
+
+# I [FULLWIDTH LATIN CAPITAL LETTER I]
+"\uFF29" => "I"
+
+# ì [LATIN SMALL LETTER I WITH GRAVE]
+"\u00EC" => "i"
+
+# í [LATIN SMALL LETTER I WITH ACUTE]
+"\u00ED" => "i"
+
+# î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
+"\u00EE" => "i"
+
+# ï [LATIN SMALL LETTER I WITH DIAERESIS]
+"\u00EF" => "i"
+
+# Ä© [LATIN SMALL LETTER I WITH TILDE]
+"\u0129" => "i"
+
+# Ä« [LATIN SMALL LETTER I WITH MACRON]
+"\u012B" => "i"
+
+# Ä­ [LATIN SMALL LETTER I WITH BREVE]
+"\u012D" => "i"
+
+# į [LATIN SMALL LETTER I WITH OGONEK]
+"\u012F" => "i"
+
+# ı [LATIN SMALL LETTER DOTLESS I]
+"\u0131" => "i"
+
+# Ç [LATIN SMALL LETTER I WITH CARON]
+"\u01D0" => "i"
+
+# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+"\u0209" => "i"
+
+# È‹ [LATIN SMALL LETTER I WITH INVERTED BREVE]
+"\u020B" => "i"
+
+# ɨ [LATIN SMALL LETTER I WITH STROKE]
+"\u0268" => "i"
+
+# á´‰ [LATIN SMALL LETTER TURNED I]
+"\u1D09" => "i"
+
+# áµ¢ [LATIN SUBSCRIPT SMALL LETTER I]
+"\u1D62" => "i"
+
+# áµ¼ [LATIN SMALL LETTER IOTA WITH STROKE]
+"\u1D7C" => "i"
+
+# á¶– [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
+"\u1D96" => "i"
+
+# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
+"\u1E2D" => "i"
+
+# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+"\u1E2F" => "i"
+
+# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
+"\u1EC9" => "i"
+
+# ị [LATIN SMALL LETTER I WITH DOT BELOW]
+"\u1ECB" => "i"
+
+# â± [SUPERSCRIPT LATIN SMALL LETTER I]
+"\u2071" => "i"
+
+# ⓘ [CIRCLED LATIN SMALL LETTER I]
+"\u24D8" => "i"
+
+# i [FULLWIDTH LATIN SMALL LETTER I]
+"\uFF49" => "i"
+
+# IJ [LATIN CAPITAL LIGATURE IJ]
+"\u0132" => "IJ"
+
+# â’¤ [PARENTHESIZED LATIN SMALL LETTER I]
+"\u24A4" => "(i)"
+
+# ij [LATIN SMALL LIGATURE IJ]
+"\u0133" => "ij"
+
+# Ä´ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+"\u0134" => "J"
+
+# Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
+"\u0248" => "J"
+
+# á´Š [LATIN LETTER SMALL CAPITAL J]
+"\u1D0A" => "J"
+
+# â’¿ [CIRCLED LATIN CAPITAL LETTER J]
+"\u24BF" => "J"
+
+# J [FULLWIDTH LATIN CAPITAL LETTER J]
+"\uFF2A" => "J"
+
+# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
+"\u0135" => "j"
+
+# ǰ [LATIN SMALL LETTER J WITH CARON]
+"\u01F0" => "j"
+
+# È· [LATIN SMALL LETTER DOTLESS J]
+"\u0237" => "j"
+
+# ɉ [LATIN SMALL LETTER J WITH STROKE]
+"\u0249" => "j"
+
+# ÉŸ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
+"\u025F" => "j"
+
+# Ê„ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
+"\u0284" => "j"
+
+# Ê [LATIN SMALL LETTER J WITH CROSSED-TAIL]
+"\u029D" => "j"
+
+# â“™ [CIRCLED LATIN SMALL LETTER J]
+"\u24D9" => "j"
+
+# â±¼ [LATIN SUBSCRIPT SMALL LETTER J]
+"\u2C7C" => "j"
+
+# j [FULLWIDTH LATIN SMALL LETTER J]
+"\uFF4A" => "j"
+
+# â’¥ [PARENTHESIZED LATIN SMALL LETTER J]
+"\u24A5" => "(j)"
+
+# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
+"\u0136" => "K"
+
+# Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
+"\u0198" => "K"
+
+# Ǩ [LATIN CAPITAL LETTER K WITH CARON]
+"\u01E8" => "K"
+
+# á´‹ [LATIN LETTER SMALL CAPITAL K]
+"\u1D0B" => "K"
+
+# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
+"\u1E30" => "K"
+
+# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
+"\u1E32" => "K"
+
+# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
+"\u1E34" => "K"
+
+# â“€ [CIRCLED LATIN CAPITAL LETTER K]
+"\u24C0" => "K"
+
+# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
+"\u2C69" => "K"
+
+# ê€ [LATIN CAPITAL LETTER K WITH STROKE]
+"\uA740" => "K"
+
+# ê‚ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
+"\uA742" => "K"
+
+# ê„ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA744" => "K"
+
+# K [FULLWIDTH LATIN CAPITAL LETTER K]
+"\uFF2B" => "K"
+
+# Ä· [LATIN SMALL LETTER K WITH CEDILLA]
+"\u0137" => "k"
+
+# Æ™ [LATIN SMALL LETTER K WITH HOOK]
+"\u0199" => "k"
+
+# Ç© [LATIN SMALL LETTER K WITH CARON]
+"\u01E9" => "k"
+
+# Êž [LATIN SMALL LETTER TURNED K]
+"\u029E" => "k"
+
+# á¶„ [LATIN SMALL LETTER K WITH PALATAL HOOK]
+"\u1D84" => "k"
+
+# ḱ [LATIN SMALL LETTER K WITH ACUTE]
+"\u1E31" => "k"
+
+# ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
+"\u1E33" => "k"
+
+# ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
+"\u1E35" => "k"
+
+# ⓚ [CIRCLED LATIN SMALL LETTER K]
+"\u24DA" => "k"
+
+# ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
+"\u2C6A" => "k"
+
+# ê [LATIN SMALL LETTER K WITH STROKE]
+"\uA741" => "k"
+
+# êƒ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
+"\uA743" => "k"
+
+# ê… [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
+"\uA745" => "k"
+
+# k [FULLWIDTH LATIN SMALL LETTER K]
+"\uFF4B" => "k"
+
+# â’¦ [PARENTHESIZED LATIN SMALL LETTER K]
+"\u24A6" => "(k)"
+
+# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
+"\u0139" => "L"
+
+# Ä» [LATIN CAPITAL LETTER L WITH CEDILLA]
+"\u013B" => "L"
+
+# Ľ [LATIN CAPITAL LETTER L WITH CARON]
+"\u013D" => "L"
+
+# Ä¿ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
+"\u013F" => "L"
+
+# Å [LATIN CAPITAL LETTER L WITH STROKE]
+"\u0141" => "L"
+
+# Ƚ [LATIN CAPITAL LETTER L WITH BAR]
+"\u023D" => "L"
+
+# ÊŸ [LATIN LETTER SMALL CAPITAL L]
+"\u029F" => "L"
+
+# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
+"\u1D0C" => "L"
+
+# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
+"\u1E36" => "L"
+
+# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E38" => "L"
+
+# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
+"\u1E3A" => "L"
+
+# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3C" => "L"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER L]
+"\u24C1" => "L"
+
+# â±  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
+"\u2C60" => "L"
+
+# â±¢ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
+"\u2C62" => "L"
+
+# ê† [LATIN CAPITAL LETTER BROKEN L]
+"\uA746" => "L"
+
+# êˆ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
+"\uA748" => "L"
+
+# Ꞁ [LATIN CAPITAL LETTER TURNED L]
+"\uA780" => "L"
+
+# L [FULLWIDTH LATIN CAPITAL LETTER L]
+"\uFF2C" => "L"
+
+# ĺ [LATIN SMALL LETTER L WITH ACUTE]
+"\u013A" => "l"
+
+# ļ [LATIN SMALL LETTER L WITH CEDILLA]
+"\u013C" => "l"
+
+# ľ [LATIN SMALL LETTER L WITH CARON]
+"\u013E" => "l"
+
+# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
+"\u0140" => "l"
+
+# Å‚ [LATIN SMALL LETTER L WITH STROKE]
+"\u0142" => "l"
+
+# Æš [LATIN SMALL LETTER L WITH BAR]
+"\u019A" => "l"
+
+# È´ [LATIN SMALL LETTER L WITH CURL]
+"\u0234" => "l"
+
+# É« [LATIN SMALL LETTER L WITH MIDDLE TILDE]
+"\u026B" => "l"
+
+# ɬ [LATIN SMALL LETTER L WITH BELT]
+"\u026C" => "l"
+
+# É­ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
+"\u026D" => "l"
+
+# á¶… [LATIN SMALL LETTER L WITH PALATAL HOOK]
+"\u1D85" => "l"
+
+# ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
+"\u1E37" => "l"
+
+# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+"\u1E39" => "l"
+
+# ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
+"\u1E3B" => "l"
+
+# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+"\u1E3D" => "l"
+
+# â“› [CIRCLED LATIN SMALL LETTER L]
+"\u24DB" => "l"
+
+# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
+"\u2C61" => "l"
+
+# ê‡ [LATIN SMALL LETTER BROKEN L]
+"\uA747" => "l"
+
+# ê‰ [LATIN SMALL LETTER L WITH HIGH STROKE]
+"\uA749" => "l"
+
+# êž [LATIN SMALL LETTER TURNED L]
+"\uA781" => "l"
+
+# l [FULLWIDTH LATIN SMALL LETTER L]
+"\uFF4C" => "l"
+
+# LJ [LATIN CAPITAL LETTER LJ]
+"\u01C7" => "LJ"
+
+# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
+"\u1EFA" => "LL"
+
+# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
+"\u01C8" => "Lj"
+
+# â’§ [PARENTHESIZED LATIN SMALL LETTER L]
+"\u24A7" => "(l)"
+
+# lj [LATIN SMALL LETTER LJ]
+"\u01C9" => "lj"
+
+# á»» [LATIN SMALL LETTER MIDDLE-WELSH LL]
+"\u1EFB" => "ll"
+
+# ʪ [LATIN SMALL LETTER LS DIGRAPH]
+"\u02AA" => "ls"
+
+# Ê« [LATIN SMALL LETTER LZ DIGRAPH]
+"\u02AB" => "lz"
+
+# Ɯ [LATIN CAPITAL LETTER TURNED M]
+"\u019C" => "M"
+
+# á´ [LATIN LETTER SMALL CAPITAL M]
+"\u1D0D" => "M"
+
+# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
+"\u1E3E" => "M"
+
+# á¹€ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
+"\u1E40" => "M"
+
+# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
+"\u1E42" => "M"
+
+# â“‚ [CIRCLED LATIN CAPITAL LETTER M]
+"\u24C2" => "M"
+
+# â±® [LATIN CAPITAL LETTER M WITH HOOK]
+"\u2C6E" => "M"
+
+# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
+"\uA7FD" => "M"
+
+# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
+"\uA7FF" => "M"
+
+# ï¼­ [FULLWIDTH LATIN CAPITAL LETTER M]
+"\uFF2D" => "M"
+
+# ɯ [LATIN SMALL LETTER TURNED M]
+"\u026F" => "m"
+
+# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
+"\u0270" => "m"
+
+# ɱ [LATIN SMALL LETTER M WITH HOOK]
+"\u0271" => "m"
+
+# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
+"\u1D6F" => "m"
+
+# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
+"\u1D86" => "m"
+
+# ḿ [LATIN SMALL LETTER M WITH ACUTE]
+"\u1E3F" => "m"
+
+# á¹ [LATIN SMALL LETTER M WITH DOT ABOVE]
+"\u1E41" => "m"
+
+# ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
+"\u1E43" => "m"
+
+# ⓜ [CIRCLED LATIN SMALL LETTER M]
+"\u24DC" => "m"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER M]
+"\uFF4D" => "m"
+
+# â’¨ [PARENTHESIZED LATIN SMALL LETTER M]
+"\u24A8" => "(m)"
+
+# Ñ [LATIN CAPITAL LETTER N WITH TILDE]
+"\u00D1" => "N"
+
+# Ń [LATIN CAPITAL LETTER N WITH ACUTE]
+"\u0143" => "N"
+
+# Å… [LATIN CAPITAL LETTER N WITH CEDILLA]
+"\u0145" => "N"
+
+# Ň [LATIN CAPITAL LETTER N WITH CARON]
+"\u0147" => "N"
+
+# ÅŠ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
+"\u014A" => "N"
+
+# Æ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
+"\u019D" => "N"
+
+# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
+"\u01F8" => "N"
+
+# È  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
+"\u0220" => "N"
+
+# É´ [LATIN LETTER SMALL CAPITAL N]
+"\u0274" => "N"
+
+# á´Ž [LATIN LETTER SMALL CAPITAL REVERSED N]
+"\u1D0E" => "N"
+
+# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
+"\u1E44" => "N"
+
+# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
+"\u1E46" => "N"
+
+# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
+"\u1E48" => "N"
+
+# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4A" => "N"
+
+# Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
+"\u24C3" => "N"
+
+# ï¼® [FULLWIDTH LATIN CAPITAL LETTER N]
+"\uFF2E" => "N"
+
+# ñ [LATIN SMALL LETTER N WITH TILDE]
+"\u00F1" => "n"
+
+# Å„ [LATIN SMALL LETTER N WITH ACUTE]
+"\u0144" => "n"
+
+# ņ [LATIN SMALL LETTER N WITH CEDILLA]
+"\u0146" => "n"
+
+# ň [LATIN SMALL LETTER N WITH CARON]
+"\u0148" => "n"
+
+# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
+"\u0149" => "n"
+
+# Å‹ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
+"\u014B" => "n"
+
+# Æž [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
+"\u019E" => "n"
+
+# ǹ [LATIN SMALL LETTER N WITH GRAVE]
+"\u01F9" => "n"
+
+# ȵ [LATIN SMALL LETTER N WITH CURL]
+"\u0235" => "n"
+
+# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
+"\u0272" => "n"
+
+# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
+"\u0273" => "n"
+
+# áµ° [LATIN SMALL LETTER N WITH MIDDLE TILDE]
+"\u1D70" => "n"
+
+# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
+"\u1D87" => "n"
+
+# á¹… [LATIN SMALL LETTER N WITH DOT ABOVE]
+"\u1E45" => "n"
+
+# ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
+"\u1E47" => "n"
+
+# ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
+"\u1E49" => "n"
+
+# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+"\u1E4B" => "n"
+
+# â¿ [SUPERSCRIPT LATIN SMALL LETTER N]
+"\u207F" => "n"
+
+# â“ [CIRCLED LATIN SMALL LETTER N]
+"\u24DD" => "n"
+
+# n [FULLWIDTH LATIN SMALL LETTER N]
+"\uFF4E" => "n"
+
+# ÇŠ [LATIN CAPITAL LETTER NJ]
+"\u01CA" => "NJ"
+
+# Ç‹ [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
+"\u01CB" => "Nj"
+
+# â’© [PARENTHESIZED LATIN SMALL LETTER N]
+"\u24A9" => "(n)"
+
+# nj [LATIN SMALL LETTER NJ]
+"\u01CC" => "nj"
+
+# Ã’ [LATIN CAPITAL LETTER O WITH GRAVE]
+"\u00D2" => "O"
+
+# Ó [LATIN CAPITAL LETTER O WITH ACUTE]
+"\u00D3" => "O"
+
+# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+"\u00D4" => "O"
+
+# Õ [LATIN CAPITAL LETTER O WITH TILDE]
+"\u00D5" => "O"
+
+# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
+"\u00D6" => "O"
+
+# Ø [LATIN CAPITAL LETTER O WITH STROKE]
+"\u00D8" => "O"
+
+# Ō [LATIN CAPITAL LETTER O WITH MACRON]
+"\u014C" => "O"
+
+# ÅŽ [LATIN CAPITAL LETTER O WITH BREVE]
+"\u014E" => "O"
+
+# Å [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+"\u0150" => "O"
+
+# Ɔ [LATIN CAPITAL LETTER OPEN O]
+"\u0186" => "O"
+
+# ÆŸ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
+"\u019F" => "O"
+
+# Æ  [LATIN CAPITAL LETTER O WITH HORN]
+"\u01A0" => "O"
+
+# Ç‘ [LATIN CAPITAL LETTER O WITH CARON]
+"\u01D1" => "O"
+
+# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
+"\u01EA" => "O"
+
+# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+"\u01EC" => "O"
+
+# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+"\u01FE" => "O"
+
+# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+"\u020C" => "O"
+
+# ÈŽ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+"\u020E" => "O"
+
+# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+"\u022A" => "O"
+
+# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+"\u022C" => "O"
+
+# È® [LATIN CAPITAL LETTER O WITH DOT ABOVE]
+"\u022E" => "O"
+
+# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0230" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL O]
+"\u1D0F" => "O"
+
+# á´ [LATIN LETTER SMALL CAPITAL OPEN O]
+"\u1D10" => "O"
+
+# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+"\u1E4C" => "O"
+
+# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4E" => "O"
+
+# á¹ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+"\u1E50" => "O"
+
+# á¹’ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+"\u1E52" => "O"
+
+# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
+"\u1ECC" => "O"
+
+# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+"\u1ECE" => "O"
+
+# á» [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED0" => "O"
+
+# á»’ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED2" => "O"
+
+# á»” [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED4" => "O"
+
+# á»– [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED6" => "O"
+
+# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED8" => "O"
+
+# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+"\u1EDA" => "O"
+
+# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+"\u1EDC" => "O"
+
+# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDE" => "O"
+
+# á»  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+"\u1EE0" => "O"
+
+# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE2" => "O"
+
+# â“„ [CIRCLED LATIN CAPITAL LETTER O]
+"\u24C4" => "O"
+
+# êŠ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74A" => "O"
+
+# êŒ [LATIN CAPITAL LETTER O WITH LOOP]
+"\uA74C" => "O"
+
+# O [FULLWIDTH LATIN CAPITAL LETTER O]
+"\uFF2F" => "O"
+
+# ò [LATIN SMALL LETTER O WITH GRAVE]
+"\u00F2" => "o"
+
+# ó [LATIN SMALL LETTER O WITH ACUTE]
+"\u00F3" => "o"
+
+# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
+"\u00F4" => "o"
+
+# õ [LATIN SMALL LETTER O WITH TILDE]
+"\u00F5" => "o"
+
+# ö [LATIN SMALL LETTER O WITH DIAERESIS]
+"\u00F6" => "o"
+
+# ø [LATIN SMALL LETTER O WITH STROKE]
+"\u00F8" => "o"
+
+# Å [LATIN SMALL LETTER O WITH MACRON]
+"\u014D" => "o"
+
+# Å [LATIN SMALL LETTER O WITH BREVE]
+"\u014F" => "o"
+
+# Å‘ [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+"\u0151" => "o"
+
+# Æ¡ [LATIN SMALL LETTER O WITH HORN]
+"\u01A1" => "o"
+
+# Ç’ [LATIN SMALL LETTER O WITH CARON]
+"\u01D2" => "o"
+
+# Ç« [LATIN SMALL LETTER O WITH OGONEK]
+"\u01EB" => "o"
+
+# Ç­ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+"\u01ED" => "o"
+
+# Ç¿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+"\u01FF" => "o"
+
+# È [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+"\u020D" => "o"
+
+# È [LATIN SMALL LETTER O WITH INVERTED BREVE]
+"\u020F" => "o"
+
+# È« [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+"\u022B" => "o"
+
+# È­ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
+"\u022D" => "o"
+
+# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
+"\u022F" => "o"
+
+# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+"\u0231" => "o"
+
+# É” [LATIN SMALL LETTER OPEN O]
+"\u0254" => "o"
+
+# ɵ [LATIN SMALL LETTER BARRED O]
+"\u0275" => "o"
+
+# á´– [LATIN SMALL LETTER TOP HALF O]
+"\u1D16" => "o"
+
+# á´— [LATIN SMALL LETTER BOTTOM HALF O]
+"\u1D17" => "o"
+
+# á¶— [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
+"\u1D97" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+"\u1E4D" => "o"
+
+# á¹ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+"\u1E4F" => "o"
+
+# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+"\u1E51" => "o"
+
+# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+"\u1E53" => "o"
+
+# á» [LATIN SMALL LETTER O WITH DOT BELOW]
+"\u1ECD" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HOOK ABOVE]
+"\u1ECF" => "o"
+
+# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+"\u1ED1" => "o"
+
+# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+"\u1ED3" => "o"
+
+# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+"\u1ED5" => "o"
+
+# á»— [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+"\u1ED7" => "o"
+
+# á»™ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+"\u1ED9" => "o"
+
+# á»› [LATIN SMALL LETTER O WITH HORN AND ACUTE]
+"\u1EDB" => "o"
+
+# á» [LATIN SMALL LETTER O WITH HORN AND GRAVE]
+"\u1EDD" => "o"
+
+# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+"\u1EDF" => "o"
+
+# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
+"\u1EE1" => "o"
+
+# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+"\u1EE3" => "o"
+
+# â‚’ [LATIN SUBSCRIPT SMALL LETTER O]
+"\u2092" => "o"
+
+# ⓞ [CIRCLED LATIN SMALL LETTER O]
+"\u24DE" => "o"
+
+# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
+"\u2C7A" => "o"
+
+# ê‹ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
+"\uA74B" => "o"
+
+# ê [LATIN SMALL LETTER O WITH LOOP]
+"\uA74D" => "o"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER O]
+"\uFF4F" => "o"
+
+# Å’ [LATIN CAPITAL LIGATURE OE]
+"\u0152" => "OE"
+
+# ɶ [LATIN LETTER SMALL CAPITAL OE]
+"\u0276" => "OE"
+
+# êŽ [LATIN CAPITAL LETTER OO]
+"\uA74E" => "OO"
+
+# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
+"\u0222" => "OU"
+
+# á´• [LATIN LETTER SMALL CAPITAL OU]
+"\u1D15" => "OU"
+
+# â’ª [PARENTHESIZED LATIN SMALL LETTER O]
+"\u24AA" => "(o)"
+
+# Å“ [LATIN SMALL LIGATURE OE]
+"\u0153" => "oe"
+
+# á´” [LATIN SMALL LETTER TURNED OE]
+"\u1D14" => "oe"
+
+# ê [LATIN SMALL LETTER OO]
+"\uA74F" => "oo"
+
+# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
+"\u0223" => "ou"
+
+# Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
+"\u01A4" => "P"
+
+# á´˜ [LATIN LETTER SMALL CAPITAL P]
+"\u1D18" => "P"
+
+# á¹” [LATIN CAPITAL LETTER P WITH ACUTE]
+"\u1E54" => "P"
+
+# á¹– [LATIN CAPITAL LETTER P WITH DOT ABOVE]
+"\u1E56" => "P"
+
+# â“… [CIRCLED LATIN CAPITAL LETTER P]
+"\u24C5" => "P"
+
+# â±£ [LATIN CAPITAL LETTER P WITH STROKE]
+"\u2C63" => "P"
+
+# ê [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA750" => "P"
+
+# ê’ [LATIN CAPITAL LETTER P WITH FLOURISH]
+"\uA752" => "P"
+
+# ê” [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
+"\uA754" => "P"
+
+# ï¼° [FULLWIDTH LATIN CAPITAL LETTER P]
+"\uFF30" => "P"
+
+# ƥ [LATIN SMALL LETTER P WITH HOOK]
+"\u01A5" => "p"
+
+# áµ± [LATIN SMALL LETTER P WITH MIDDLE TILDE]
+"\u1D71" => "p"
+
+# áµ½ [LATIN SMALL LETTER P WITH STROKE]
+"\u1D7D" => "p"
+
+# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
+"\u1D88" => "p"
+
+# ṕ [LATIN SMALL LETTER P WITH ACUTE]
+"\u1E55" => "p"
+
+# á¹— [LATIN SMALL LETTER P WITH DOT ABOVE]
+"\u1E57" => "p"
+
+# ⓟ [CIRCLED LATIN SMALL LETTER P]
+"\u24DF" => "p"
+
+# ê‘ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
+"\uA751" => "p"
+
+# ê“ [LATIN SMALL LETTER P WITH FLOURISH]
+"\uA753" => "p"
+
+# ê• [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
+"\uA755" => "p"
+
+# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
+"\uA7FC" => "p"
+
+# ï½ [FULLWIDTH LATIN SMALL LETTER P]
+"\uFF50" => "p"
+
+# â’« [PARENTHESIZED LATIN SMALL LETTER P]
+"\u24AB" => "(p)"
+
+# ÉŠ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
+"\u024A" => "Q"
+
+# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
+"\u24C6" => "Q"
+
+# ê– [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA756" => "Q"
+
+# ê˜ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
+"\uA758" => "Q"
+
+# ï¼± [FULLWIDTH LATIN CAPITAL LETTER Q]
+"\uFF31" => "Q"
+
+# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
+"\u0138" => "q"
+
+# É‹ [LATIN SMALL LETTER Q WITH HOOK TAIL]
+"\u024B" => "q"
+
+# Ê  [LATIN SMALL LETTER Q WITH HOOK]
+"\u02A0" => "q"
+
+# â“  [CIRCLED LATIN SMALL LETTER Q]
+"\u24E0" => "q"
+
+# ê— [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
+"\uA757" => "q"
+
+# ê™ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
+"\uA759" => "q"
+
+# q [FULLWIDTH LATIN SMALL LETTER Q]
+"\uFF51" => "q"
+
+# â’¬ [PARENTHESIZED LATIN SMALL LETTER Q]
+"\u24AC" => "(q)"
+
+# ȹ [LATIN SMALL LETTER QP DIGRAPH]
+"\u0239" => "qp"
+
+# Å” [LATIN CAPITAL LETTER R WITH ACUTE]
+"\u0154" => "R"
+
+# Å– [LATIN CAPITAL LETTER R WITH CEDILLA]
+"\u0156" => "R"
+
+# Ř [LATIN CAPITAL LETTER R WITH CARON]
+"\u0158" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+"\u0210" => "R"
+
+# È’ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+"\u0212" => "R"
+
+# Ɍ [LATIN CAPITAL LETTER R WITH STROKE]
+"\u024C" => "R"
+
+# ʀ [LATIN LETTER SMALL CAPITAL R]
+"\u0280" => "R"
+
+# Ê [LATIN LETTER SMALL CAPITAL INVERTED R]
+"\u0281" => "R"
+
+# á´™ [LATIN LETTER SMALL CAPITAL REVERSED R]
+"\u1D19" => "R"
+
+# á´š [LATIN LETTER SMALL CAPITAL TURNED R]
+"\u1D1A" => "R"
+
+# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
+"\u1E58" => "R"
+
+# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
+"\u1E5A" => "R"
+
+# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5C" => "R"
+
+# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
+"\u1E5E" => "R"
+
+# Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
+"\u24C7" => "R"
+
+# Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
+"\u2C64" => "R"
+
+# êš [LATIN CAPITAL LETTER R ROTUNDA]
+"\uA75A" => "R"
+
+# êž‚ [LATIN CAPITAL LETTER INSULAR R]
+"\uA782" => "R"
+
+# ï¼² [FULLWIDTH LATIN CAPITAL LETTER R]
+"\uFF32" => "R"
+
+# Å• [LATIN SMALL LETTER R WITH ACUTE]
+"\u0155" => "r"
+
+# Å— [LATIN SMALL LETTER R WITH CEDILLA]
+"\u0157" => "r"
+
+# Å™ [LATIN SMALL LETTER R WITH CARON]
+"\u0159" => "r"
+
+# È‘ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+"\u0211" => "r"
+
+# È“ [LATIN SMALL LETTER R WITH INVERTED BREVE]
+"\u0213" => "r"
+
+# É [LATIN SMALL LETTER R WITH STROKE]
+"\u024D" => "r"
+
+# ɼ [LATIN SMALL LETTER R WITH LONG LEG]
+"\u027C" => "r"
+
+# ɽ [LATIN SMALL LETTER R WITH TAIL]
+"\u027D" => "r"
+
+# ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
+"\u027E" => "r"
+
+# É¿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
+"\u027F" => "r"
+
+# áµ£ [LATIN SUBSCRIPT SMALL LETTER R]
+"\u1D63" => "r"
+
+# áµ² [LATIN SMALL LETTER R WITH MIDDLE TILDE]
+"\u1D72" => "r"
+
+# áµ³ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
+"\u1D73" => "r"
+
+# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
+"\u1D89" => "r"
+
+# á¹™ [LATIN SMALL LETTER R WITH DOT ABOVE]
+"\u1E59" => "r"
+
+# á¹› [LATIN SMALL LETTER R WITH DOT BELOW]
+"\u1E5B" => "r"
+
+# á¹ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+"\u1E5D" => "r"
+
+# ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
+"\u1E5F" => "r"
+
+# â“¡ [CIRCLED LATIN SMALL LETTER R]
+"\u24E1" => "r"
+
+# ê› [LATIN SMALL LETTER R ROTUNDA]
+"\uA75B" => "r"
+
+# ꞃ [LATIN SMALL LETTER INSULAR R]
+"\uA783" => "r"
+
+# ï½’ [FULLWIDTH LATIN SMALL LETTER R]
+"\uFF52" => "r"
+
+# â’­ [PARENTHESIZED LATIN SMALL LETTER R]
+"\u24AD" => "(r)"
+
+# Åš [LATIN CAPITAL LETTER S WITH ACUTE]
+"\u015A" => "S"
+
+# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+"\u015C" => "S"
+
+# Åž [LATIN CAPITAL LETTER S WITH CEDILLA]
+"\u015E" => "S"
+
+# Å  [LATIN CAPITAL LETTER S WITH CARON]
+"\u0160" => "S"
+
+# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
+"\u0218" => "S"
+
+# á¹  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
+"\u1E60" => "S"
+
+# á¹¢ [LATIN CAPITAL LETTER S WITH DOT BELOW]
+"\u1E62" => "S"
+
+# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E64" => "S"
+
+# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E66" => "S"
+
+# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E68" => "S"
+
+# Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
+"\u24C8" => "S"
+
+# ꜱ [LATIN LETTER SMALL CAPITAL S]
+"\uA731" => "S"
+
+# êž… [LATIN SMALL LETTER INSULAR S]
+"\uA785" => "S"
+
+# ï¼³ [FULLWIDTH LATIN CAPITAL LETTER S]
+"\uFF33" => "S"
+
+# Å› [LATIN SMALL LETTER S WITH ACUTE]
+"\u015B" => "s"
+
+# Å [LATIN SMALL LETTER S WITH CIRCUMFLEX]
+"\u015D" => "s"
+
+# ÅŸ [LATIN SMALL LETTER S WITH CEDILLA]
+"\u015F" => "s"
+
+# Å¡ [LATIN SMALL LETTER S WITH CARON]
+"\u0161" => "s"
+
+# Å¿ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
+"\u017F" => "s"
+
+# È™ [LATIN SMALL LETTER S WITH COMMA BELOW]
+"\u0219" => "s"
+
+# È¿ [LATIN SMALL LETTER S WITH SWASH TAIL]
+"\u023F" => "s"
+
+# Ê‚ [LATIN SMALL LETTER S WITH HOOK]
+"\u0282" => "s"
+
+# áµ´ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
+"\u1D74" => "s"
+
+# á¶Š [LATIN SMALL LETTER S WITH PALATAL HOOK]
+"\u1D8A" => "s"
+
+# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
+"\u1E61" => "s"
+
+# á¹£ [LATIN SMALL LETTER S WITH DOT BELOW]
+"\u1E63" => "s"
+
+# á¹¥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+"\u1E65" => "s"
+
+# á¹§ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+"\u1E67" => "s"
+
+# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+"\u1E69" => "s"
+
+# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
+"\u1E9C" => "s"
+
+# Ạ[LATIN SMALL LETTER LONG S WITH HIGH STROKE]
+"\u1E9D" => "s"
+
+# â“¢ [CIRCLED LATIN SMALL LETTER S]
+"\u24E2" => "s"
+
+# êž„ [LATIN CAPITAL LETTER INSULAR S]
+"\uA784" => "s"
+
+# s [FULLWIDTH LATIN SMALL LETTER S]
+"\uFF53" => "s"
+
+# ẞ [LATIN CAPITAL LETTER SHARP S]
+"\u1E9E" => "SS"
+
+# â’® [PARENTHESIZED LATIN SMALL LETTER S]
+"\u24AE" => "(s)"
+
+# ß [LATIN SMALL LETTER SHARP S]
+"\u00DF" => "ss"
+
+# st [LATIN SMALL LIGATURE ST]
+"\uFB06" => "st"
+
+# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA]
+"\u0162" => "T"
+
+# Ť [LATIN CAPITAL LETTER T WITH CARON]
+"\u0164" => "T"
+
+# Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
+"\u0166" => "T"
+
+# Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
+"\u01AC" => "T"
+
+# Æ® [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
+"\u01AE" => "T"
+
+# Èš [LATIN CAPITAL LETTER T WITH COMMA BELOW]
+"\u021A" => "T"
+
+# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
+"\u023E" => "T"
+
+# á´› [LATIN LETTER SMALL CAPITAL T]
+"\u1D1B" => "T"
+
+# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
+"\u1E6A" => "T"
+
+# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
+"\u1E6C" => "T"
+
+# á¹® [LATIN CAPITAL LETTER T WITH LINE BELOW]
+"\u1E6E" => "T"
+
+# á¹° [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E70" => "T"
+
+# Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
+"\u24C9" => "T"
+
+# Ꞇ [LATIN CAPITAL LETTER INSULAR T]
+"\uA786" => "T"
+
+# ï¼´ [FULLWIDTH LATIN CAPITAL LETTER T]
+"\uFF34" => "T"
+
+# ţ [LATIN SMALL LETTER T WITH CEDILLA]
+"\u0163" => "t"
+
+# ť [LATIN SMALL LETTER T WITH CARON]
+"\u0165" => "t"
+
+# ŧ [LATIN SMALL LETTER T WITH STROKE]
+"\u0167" => "t"
+
+# Æ« [LATIN SMALL LETTER T WITH PALATAL HOOK]
+"\u01AB" => "t"
+
+# Æ­ [LATIN SMALL LETTER T WITH HOOK]
+"\u01AD" => "t"
+
+# È› [LATIN SMALL LETTER T WITH COMMA BELOW]
+"\u021B" => "t"
+
+# ȶ [LATIN SMALL LETTER T WITH CURL]
+"\u0236" => "t"
+
+# ʇ [LATIN SMALL LETTER TURNED T]
+"\u0287" => "t"
+
+# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
+"\u0288" => "t"
+
+# áµµ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
+"\u1D75" => "t"
+
+# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
+"\u1E6B" => "t"
+
+# á¹­ [LATIN SMALL LETTER T WITH DOT BELOW]
+"\u1E6D" => "t"
+
+# ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
+"\u1E6F" => "t"
+
+# á¹± [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+"\u1E71" => "t"
+
+# ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
+"\u1E97" => "t"
+
+# â“£ [CIRCLED LATIN SMALL LETTER T]
+"\u24E3" => "t"
+
+# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
+"\u2C66" => "t"
+
+# ï½” [FULLWIDTH LATIN SMALL LETTER T]
+"\uFF54" => "t"
+
+# Þ [LATIN CAPITAL LETTER THORN]
+"\u00DE" => "TH"
+
+# ê¦ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA766" => "TH"
+
+# Ꜩ [LATIN CAPITAL LETTER TZ]
+"\uA728" => "TZ"
+
+# â’¯ [PARENTHESIZED LATIN SMALL LETTER T]
+"\u24AF" => "(t)"
+
+# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
+"\u02A8" => "tc"
+
+# þ [LATIN SMALL LETTER THORN]
+"\u00FE" => "th"
+
+# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
+"\u1D7A" => "th"
+
+# ê§ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
+"\uA767" => "th"
+
+# ʦ [LATIN SMALL LETTER TS DIGRAPH]
+"\u02A6" => "ts"
+
+# ꜩ [LATIN SMALL LETTER TZ]
+"\uA729" => "tz"
+
+# Ù [LATIN CAPITAL LETTER U WITH GRAVE]
+"\u00D9" => "U"
+
+# Ú [LATIN CAPITAL LETTER U WITH ACUTE]
+"\u00DA" => "U"
+
+# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+"\u00DB" => "U"
+
+# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]
+"\u00DC" => "U"
+
+# Ũ [LATIN CAPITAL LETTER U WITH TILDE]
+"\u0168" => "U"
+
+# Ū [LATIN CAPITAL LETTER U WITH MACRON]
+"\u016A" => "U"
+
+# Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
+"\u016C" => "U"
+
+# Å® [LATIN CAPITAL LETTER U WITH RING ABOVE]
+"\u016E" => "U"
+
+# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+"\u0170" => "U"
+
+# Ų [LATIN CAPITAL LETTER U WITH OGONEK]
+"\u0172" => "U"
+
+# Ư [LATIN CAPITAL LETTER U WITH HORN]
+"\u01AF" => "U"
+
+# Ç“ [LATIN CAPITAL LETTER U WITH CARON]
+"\u01D3" => "U"
+
+# Ç• [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D5" => "U"
+
+# Ç— [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D7" => "U"
+
+# Ç™ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+"\u01D9" => "U"
+
+# Ç› [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DB" => "U"
+
+# È” [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+"\u0214" => "U"
+
+# È– [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+"\u0216" => "U"
+
+# É„ [LATIN CAPITAL LETTER U BAR]
+"\u0244" => "U"
+
+# ᴜ [LATIN LETTER SMALL CAPITAL U]
+"\u1D1C" => "U"
+
+# áµ¾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
+"\u1D7E" => "U"
+
+# á¹² [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+"\u1E72" => "U"
+
+# á¹´ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
+"\u1E74" => "U"
+
+# á¹¶ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E76" => "U"
+
+# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+"\u1E78" => "U"
+
+# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7A" => "U"
+
+# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
+"\u1EE4" => "U"
+
+# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+"\u1EE6" => "U"
+
+# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+"\u1EE8" => "U"
+
+# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+"\u1EEA" => "U"
+
+# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EEC" => "U"
+
+# á»® [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+"\u1EEE" => "U"
+
+# á»° [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF0" => "U"
+
+# Ⓤ [CIRCLED LATIN CAPITAL LETTER U]
+"\u24CA" => "U"
+
+# ï¼µ [FULLWIDTH LATIN CAPITAL LETTER U]
+"\uFF35" => "U"
+
+# ù [LATIN SMALL LETTER U WITH GRAVE]
+"\u00F9" => "u"
+
+# ú [LATIN SMALL LETTER U WITH ACUTE]
+"\u00FA" => "u"
+
+# û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
+"\u00FB" => "u"
+
+# ü [LATIN SMALL LETTER U WITH DIAERESIS]
+"\u00FC" => "u"
+
+# Å© [LATIN SMALL LETTER U WITH TILDE]
+"\u0169" => "u"
+
+# Å« [LATIN SMALL LETTER U WITH MACRON]
+"\u016B" => "u"
+
+# Å­ [LATIN SMALL LETTER U WITH BREVE]
+"\u016D" => "u"
+
+# ů [LATIN SMALL LETTER U WITH RING ABOVE]
+"\u016F" => "u"
+
+# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+"\u0171" => "u"
+
+# ų [LATIN SMALL LETTER U WITH OGONEK]
+"\u0173" => "u"
+
+# ư [LATIN SMALL LETTER U WITH HORN]
+"\u01B0" => "u"
+
+# Ç” [LATIN SMALL LETTER U WITH CARON]
+"\u01D4" => "u"
+
+# Ç– [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+"\u01D6" => "u"
+
+# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+"\u01D8" => "u"
+
+# Çš [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+"\u01DA" => "u"
+
+# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+"\u01DC" => "u"
+
+# È• [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+"\u0215" => "u"
+
+# È— [LATIN SMALL LETTER U WITH INVERTED BREVE]
+"\u0217" => "u"
+
+# ʉ [LATIN SMALL LETTER U BAR]
+"\u0289" => "u"
+
+# ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
+"\u1D64" => "u"
+
+# á¶™ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
+"\u1D99" => "u"
+
+# á¹³ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+"\u1E73" => "u"
+
+# á¹µ [LATIN SMALL LETTER U WITH TILDE BELOW]
+"\u1E75" => "u"
+
+# á¹· [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+"\u1E77" => "u"
+
+# á¹¹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+"\u1E79" => "u"
+
+# á¹» [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+"\u1E7B" => "u"
+
+# ụ [LATIN SMALL LETTER U WITH DOT BELOW]
+"\u1EE5" => "u"
+
+# á»§ [LATIN SMALL LETTER U WITH HOOK ABOVE]
+"\u1EE7" => "u"
+
+# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
+"\u1EE9" => "u"
+
+# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
+"\u1EEB" => "u"
+
+# á»­ [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+"\u1EED" => "u"
+
+# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
+"\u1EEF" => "u"
+
+# á»± [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+"\u1EF1" => "u"
+
+# ⓤ [CIRCLED LATIN SMALL LETTER U]
+"\u24E4" => "u"
+
+# u [FULLWIDTH LATIN SMALL LETTER U]
+"\uFF55" => "u"
+
+# â’° [PARENTHESIZED LATIN SMALL LETTER U]
+"\u24B0" => "(u)"
+
+# ᵫ [LATIN SMALL LETTER UE]
+"\u1D6B" => "ue"
+
+# Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
+"\u01B2" => "V"
+
+# É… [LATIN CAPITAL LETTER TURNED V]
+"\u0245" => "V"
+
+# á´  [LATIN LETTER SMALL CAPITAL V]
+"\u1D20" => "V"
+
+# á¹¼ [LATIN CAPITAL LETTER V WITH TILDE]
+"\u1E7C" => "V"
+
+# á¹¾ [LATIN CAPITAL LETTER V WITH DOT BELOW]
+"\u1E7E" => "V"
+
+# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
+"\u1EFC" => "V"
+
+# â“‹ [CIRCLED LATIN CAPITAL LETTER V]
+"\u24CB" => "V"
+
+# êž [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
+"\uA75E" => "V"
+
+# ê¨ [LATIN CAPITAL LETTER VEND]
+"\uA768" => "V"
+
+# ï¼¶ [FULLWIDTH LATIN CAPITAL LETTER V]
+"\uFF36" => "V"
+
+# Ê‹ [LATIN SMALL LETTER V WITH HOOK]
+"\u028B" => "v"
+
+# ʌ [LATIN SMALL LETTER TURNED V]
+"\u028C" => "v"
+
+# áµ¥ [LATIN SUBSCRIPT SMALL LETTER V]
+"\u1D65" => "v"
+
+# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
+"\u1D8C" => "v"
+
+# á¹½ [LATIN SMALL LETTER V WITH TILDE]
+"\u1E7D" => "v"
+
+# ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
+"\u1E7F" => "v"
+
+# â“¥ [CIRCLED LATIN SMALL LETTER V]
+"\u24E5" => "v"
+
+# â±± [LATIN SMALL LETTER V WITH RIGHT HOOK]
+"\u2C71" => "v"
+
+# â±´ [LATIN SMALL LETTER V WITH CURL]
+"\u2C74" => "v"
+
+# êŸ [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
+"\uA75F" => "v"
+
+# ï½– [FULLWIDTH LATIN SMALL LETTER V]
+"\uFF56" => "v"
+
+# ê  [LATIN CAPITAL LETTER VY]
+"\uA760" => "VY"
+
+# â’± [PARENTHESIZED LATIN SMALL LETTER V]
+"\u24B1" => "(v)"
+
+# ê¡ [LATIN SMALL LETTER VY]
+"\uA761" => "vy"
+
+# Å´ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+"\u0174" => "W"
+
+# Ç· http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
+"\u01F7" => "W"
+
+# á´¡ [LATIN LETTER SMALL CAPITAL W]
+"\u1D21" => "W"
+
+# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
+"\u1E80" => "W"
+
+# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
+"\u1E82" => "W"
+
+# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
+"\u1E84" => "W"
+
+# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
+"\u1E86" => "W"
+
+# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
+"\u1E88" => "W"
+
+# Ⓦ [CIRCLED LATIN CAPITAL LETTER W]
+"\u24CC" => "W"
+
+# â±² [LATIN CAPITAL LETTER W WITH HOOK]
+"\u2C72" => "W"
+
+# ï¼· [FULLWIDTH LATIN CAPITAL LETTER W]
+"\uFF37" => "W"
+
+# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
+"\u0175" => "w"
+
+# Æ¿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
+"\u01BF" => "w"
+
+# Ê [LATIN SMALL LETTER TURNED W]
+"\u028D" => "w"
+
+# Ạ[LATIN SMALL LETTER W WITH GRAVE]
+"\u1E81" => "w"
+
+# ẃ [LATIN SMALL LETTER W WITH ACUTE]
+"\u1E83" => "w"
+
+# ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
+"\u1E85" => "w"
+
+# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
+"\u1E87" => "w"
+
+# ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
+"\u1E89" => "w"
+
+# ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
+"\u1E98" => "w"
+
+# ⓦ [CIRCLED LATIN SMALL LETTER W]
+"\u24E6" => "w"
+
+# â±³ [LATIN SMALL LETTER W WITH HOOK]
+"\u2C73" => "w"
+
+# ï½— [FULLWIDTH LATIN SMALL LETTER W]
+"\uFF57" => "w"
+
+# â’² [PARENTHESIZED LATIN SMALL LETTER W]
+"\u24B2" => "(w)"
+
+# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
+"\u1E8A" => "X"
+
+# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
+"\u1E8C" => "X"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER X]
+"\u24CD" => "X"
+
+# X [FULLWIDTH LATIN CAPITAL LETTER X]
+"\uFF38" => "X"
+
+# á¶ [LATIN SMALL LETTER X WITH PALATAL HOOK]
+"\u1D8D" => "x"
+
+# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
+"\u1E8B" => "x"
+
+# Ạ[LATIN SMALL LETTER X WITH DIAERESIS]
+"\u1E8D" => "x"
+
+# â‚“ [LATIN SUBSCRIPT SMALL LETTER X]
+"\u2093" => "x"
+
+# â“§ [CIRCLED LATIN SMALL LETTER X]
+"\u24E7" => "x"
+
+# x [FULLWIDTH LATIN SMALL LETTER X]
+"\uFF58" => "x"
+
+# â’³ [PARENTHESIZED LATIN SMALL LETTER X]
+"\u24B3" => "(x)"
+
+# Ã [LATIN CAPITAL LETTER Y WITH ACUTE]
+"\u00DD" => "Y"
+
+# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+"\u0176" => "Y"
+
+# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
+"\u0178" => "Y"
+
+# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
+"\u01B3" => "Y"
+
+# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
+"\u0232" => "Y"
+
+# ÉŽ [LATIN CAPITAL LETTER Y WITH STROKE]
+"\u024E" => "Y"
+
+# Ê [LATIN LETTER SMALL CAPITAL Y]
+"\u028F" => "Y"
+
+# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+"\u1E8E" => "Y"
+
+# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
+"\u1EF2" => "Y"
+
+# á»´ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
+"\u1EF4" => "Y"
+
+# á»¶ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+"\u1EF6" => "Y"
+
+# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
+"\u1EF8" => "Y"
+
+# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
+"\u1EFE" => "Y"
+
+# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y]
+"\u24CE" => "Y"
+
+# ï¼¹ [FULLWIDTH LATIN CAPITAL LETTER Y]
+"\uFF39" => "Y"
+
+# ý [LATIN SMALL LETTER Y WITH ACUTE]
+"\u00FD" => "y"
+
+# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
+"\u00FF" => "y"
+
+# Å· [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+"\u0177" => "y"
+
+# Æ´ [LATIN SMALL LETTER Y WITH HOOK]
+"\u01B4" => "y"
+
+# ȳ [LATIN SMALL LETTER Y WITH MACRON]
+"\u0233" => "y"
+
+# É [LATIN SMALL LETTER Y WITH STROKE]
+"\u024F" => "y"
+
+# ÊŽ [LATIN SMALL LETTER TURNED Y]
+"\u028E" => "y"
+
+# Ạ[LATIN SMALL LETTER Y WITH DOT ABOVE]
+"\u1E8F" => "y"
+
+# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
+"\u1E99" => "y"
+
+# ỳ [LATIN SMALL LETTER Y WITH GRAVE]
+"\u1EF3" => "y"
+
+# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
+"\u1EF5" => "y"
+
+# á»· [LATIN SMALL LETTER Y WITH HOOK ABOVE]
+"\u1EF7" => "y"
+
+# ỹ [LATIN SMALL LETTER Y WITH TILDE]
+"\u1EF9" => "y"
+
+# ỿ [LATIN SMALL LETTER Y WITH LOOP]
+"\u1EFF" => "y"
+
+# ⓨ [CIRCLED LATIN SMALL LETTER Y]
+"\u24E8" => "y"
+
+# ï½™ [FULLWIDTH LATIN SMALL LETTER Y]
+"\uFF59" => "y"
+
+# â’´ [PARENTHESIZED LATIN SMALL LETTER Y]
+"\u24B4" => "(y)"
+
+# Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
+"\u0179" => "Z"
+
+# Å» [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+"\u017B" => "Z"
+
+# Ž [LATIN CAPITAL LETTER Z WITH CARON]
+"\u017D" => "Z"
+
+# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
+"\u01B5" => "Z"
+
+# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
+"\u021C" => "Z"
+
+# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
+"\u0224" => "Z"
+
+# á´¢ [LATIN LETTER SMALL CAPITAL Z]
+"\u1D22" => "Z"
+
+# Ạ[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+"\u1E90" => "Z"
+
+# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
+"\u1E92" => "Z"
+
+# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW]
+"\u1E94" => "Z"
+
+# â“ [CIRCLED LATIN CAPITAL LETTER Z]
+"\u24CF" => "Z"
+
+# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
+"\u2C6B" => "Z"
+
+# ê¢ [LATIN CAPITAL LETTER VISIGOTHIC Z]
+"\uA762" => "Z"
+
+# Z [FULLWIDTH LATIN CAPITAL LETTER Z]
+"\uFF3A" => "Z"
+
+# ź [LATIN SMALL LETTER Z WITH ACUTE]
+"\u017A" => "z"
+
+# ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
+"\u017C" => "z"
+
+# ž [LATIN SMALL LETTER Z WITH CARON]
+"\u017E" => "z"
+
+# ƶ [LATIN SMALL LETTER Z WITH STROKE]
+"\u01B6" => "z"
+
+# È http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
+"\u021D" => "z"
+
+# ȥ [LATIN SMALL LETTER Z WITH HOOK]
+"\u0225" => "z"
+
+# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL]
+"\u0240" => "z"
+
+# Ê [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
+"\u0290" => "z"
+
+# Ê‘ [LATIN SMALL LETTER Z WITH CURL]
+"\u0291" => "z"
+
+# áµ¶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
+"\u1D76" => "z"
+
+# á¶Ž [LATIN SMALL LETTER Z WITH PALATAL HOOK]
+"\u1D8E" => "z"
+
+# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+"\u1E91" => "z"
+
+# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
+"\u1E93" => "z"
+
+# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
+"\u1E95" => "z"
+
+# â“© [CIRCLED LATIN SMALL LETTER Z]
+"\u24E9" => "z"
+
+# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
+"\u2C6C" => "z"
+
+# ê£ [LATIN SMALL LETTER VISIGOTHIC Z]
+"\uA763" => "z"
+
+# z [FULLWIDTH LATIN SMALL LETTER Z]
+"\uFF5A" => "z"
+
+# â’µ [PARENTHESIZED LATIN SMALL LETTER Z]
+"\u24B5" => "(z)"
+
+# â° [SUPERSCRIPT ZERO]
+"\u2070" => "0"
+
+# â‚€ [SUBSCRIPT ZERO]
+"\u2080" => "0"
+
+# ⓪ [CIRCLED DIGIT ZERO]
+"\u24EA" => "0"
+
+# â“¿ [NEGATIVE CIRCLED DIGIT ZERO]
+"\u24FF" => "0"
+
+# ï¼ [FULLWIDTH DIGIT ZERO]
+"\uFF10" => "0"
+
+# ¹ [SUPERSCRIPT ONE]
+"\u00B9" => "1"
+
+# â‚ [SUBSCRIPT ONE]
+"\u2081" => "1"
+
+# â‘  [CIRCLED DIGIT ONE]
+"\u2460" => "1"
+
+# ⓵ [DOUBLE CIRCLED DIGIT ONE]
+"\u24F5" => "1"
+
+# â¶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
+"\u2776" => "1"
+
+# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
+"\u2780" => "1"
+
+# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
+"\u278A" => "1"
+
+# 1 [FULLWIDTH DIGIT ONE]
+"\uFF11" => "1"
+
+# â’ˆ [DIGIT ONE FULL STOP]
+"\u2488" => "1."
+
+# â‘´ [PARENTHESIZED DIGIT ONE]
+"\u2474" => "(1)"
+
+# ² [SUPERSCRIPT TWO]
+"\u00B2" => "2"
+
+# â‚‚ [SUBSCRIPT TWO]
+"\u2082" => "2"
+
+# â‘¡ [CIRCLED DIGIT TWO]
+"\u2461" => "2"
+
+# â“¶ [DOUBLE CIRCLED DIGIT TWO]
+"\u24F6" => "2"
+
+# â· [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
+"\u2777" => "2"
+
+# âž [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
+"\u2781" => "2"
+
+# âž‹ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
+"\u278B" => "2"
+
+# ï¼’ [FULLWIDTH DIGIT TWO]
+"\uFF12" => "2"
+
+# â’‰ [DIGIT TWO FULL STOP]
+"\u2489" => "2."
+
+# ⑵ [PARENTHESIZED DIGIT TWO]
+"\u2475" => "(2)"
+
+# ³ [SUPERSCRIPT THREE]
+"\u00B3" => "3"
+
+# ₃ [SUBSCRIPT THREE]
+"\u2083" => "3"
+
+# â‘¢ [CIRCLED DIGIT THREE]
+"\u2462" => "3"
+
+# â“· [DOUBLE CIRCLED DIGIT THREE]
+"\u24F7" => "3"
+
+# ⸠[DINGBAT NEGATIVE CIRCLED DIGIT THREE]
+"\u2778" => "3"
+
+# âž‚ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
+"\u2782" => "3"
+
+# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
+"\u278C" => "3"
+
+# 3 [FULLWIDTH DIGIT THREE]
+"\uFF13" => "3"
+
+# â’Š [DIGIT THREE FULL STOP]
+"\u248A" => "3."
+
+# â‘¶ [PARENTHESIZED DIGIT THREE]
+"\u2476" => "(3)"
+
+# â´ [SUPERSCRIPT FOUR]
+"\u2074" => "4"
+
+# â‚„ [SUBSCRIPT FOUR]
+"\u2084" => "4"
+
+# â‘£ [CIRCLED DIGIT FOUR]
+"\u2463" => "4"
+
+# ⓸ [DOUBLE CIRCLED DIGIT FOUR]
+"\u24F8" => "4"
+
+# â¹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
+"\u2779" => "4"
+
+# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
+"\u2783" => "4"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
+"\u278D" => "4"
+
+# ï¼” [FULLWIDTH DIGIT FOUR]
+"\uFF14" => "4"
+
+# â’‹ [DIGIT FOUR FULL STOP]
+"\u248B" => "4."
+
+# â‘· [PARENTHESIZED DIGIT FOUR]
+"\u2477" => "(4)"
+
+# âµ [SUPERSCRIPT FIVE]
+"\u2075" => "5"
+
+# â‚… [SUBSCRIPT FIVE]
+"\u2085" => "5"
+
+# ⑤ [CIRCLED DIGIT FIVE]
+"\u2464" => "5"
+
+# ⓹ [DOUBLE CIRCLED DIGIT FIVE]
+"\u24F9" => "5"
+
+# ⺠[DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
+"\u277A" => "5"
+
+# âž„ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
+"\u2784" => "5"
+
+# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
+"\u278E" => "5"
+
+# 5 [FULLWIDTH DIGIT FIVE]
+"\uFF15" => "5"
+
+# ⒌ [DIGIT FIVE FULL STOP]
+"\u248C" => "5."
+
+# ⑸ [PARENTHESIZED DIGIT FIVE]
+"\u2478" => "(5)"
+
+# â¶ [SUPERSCRIPT SIX]
+"\u2076" => "6"
+
+# ₆ [SUBSCRIPT SIX]
+"\u2086" => "6"
+
+# â‘¥ [CIRCLED DIGIT SIX]
+"\u2465" => "6"
+
+# ⓺ [DOUBLE CIRCLED DIGIT SIX]
+"\u24FA" => "6"
+
+# â» [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
+"\u277B" => "6"
+
+# âž… [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
+"\u2785" => "6"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
+"\u278F" => "6"
+
+# ï¼– [FULLWIDTH DIGIT SIX]
+"\uFF16" => "6"
+
+# â’ [DIGIT SIX FULL STOP]
+"\u248D" => "6."
+
+# ⑹ [PARENTHESIZED DIGIT SIX]
+"\u2479" => "(6)"
+
+# â· [SUPERSCRIPT SEVEN]
+"\u2077" => "7"
+
+# ₇ [SUBSCRIPT SEVEN]
+"\u2087" => "7"
+
+# ⑦ [CIRCLED DIGIT SEVEN]
+"\u2466" => "7"
+
+# â“» [DOUBLE CIRCLED DIGIT SEVEN]
+"\u24FB" => "7"
+
+# â¼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
+"\u277C" => "7"
+
+# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2786" => "7"
+
+# âž [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
+"\u2790" => "7"
+
+# ï¼— [FULLWIDTH DIGIT SEVEN]
+"\uFF17" => "7"
+
+# â’Ž [DIGIT SEVEN FULL STOP]
+"\u248E" => "7."
+
+# ⑺ [PARENTHESIZED DIGIT SEVEN]
+"\u247A" => "(7)"
+
+# ⸠[SUPERSCRIPT EIGHT]
+"\u2078" => "8"
+
+# ₈ [SUBSCRIPT EIGHT]
+"\u2088" => "8"
+
+# â‘§ [CIRCLED DIGIT EIGHT]
+"\u2467" => "8"
+
+# ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
+"\u24FC" => "8"
+
+# â½ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
+"\u277D" => "8"
+
+# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2787" => "8"
+
+# âž‘ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
+"\u2791" => "8"
+
+# 8 [FULLWIDTH DIGIT EIGHT]
+"\uFF18" => "8"
+
+# â’ [DIGIT EIGHT FULL STOP]
+"\u248F" => "8."
+
+# â‘» [PARENTHESIZED DIGIT EIGHT]
+"\u247B" => "(8)"
+
+# â¹ [SUPERSCRIPT NINE]
+"\u2079" => "9"
+
+# ₉ [SUBSCRIPT NINE]
+"\u2089" => "9"
+
+# ⑨ [CIRCLED DIGIT NINE]
+"\u2468" => "9"
+
+# ⓽ [DOUBLE CIRCLED DIGIT NINE]
+"\u24FD" => "9"
+
+# â¾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
+"\u277E" => "9"
+
+# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
+"\u2788" => "9"
+
+# âž’ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
+"\u2792" => "9"
+
+# ï¼™ [FULLWIDTH DIGIT NINE]
+"\uFF19" => "9"
+
+# â’ [DIGIT NINE FULL STOP]
+"\u2490" => "9."
+
+# ⑼ [PARENTHESIZED DIGIT NINE]
+"\u247C" => "(9)"
+
+# â‘© [CIRCLED NUMBER TEN]
+"\u2469" => "10"
+
+# ⓾ [DOUBLE CIRCLED NUMBER TEN]
+"\u24FE" => "10"
+
+# â¿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
+"\u277F" => "10"
+
+# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
+"\u2789" => "10"
+
+# âž“ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
+"\u2793" => "10"
+
+# â’‘ [NUMBER TEN FULL STOP]
+"\u2491" => "10."
+
+# ⑽ [PARENTHESIZED NUMBER TEN]
+"\u247D" => "(10)"
+
+# ⑪ [CIRCLED NUMBER ELEVEN]
+"\u246A" => "11"
+
+# â“« [NEGATIVE CIRCLED NUMBER ELEVEN]
+"\u24EB" => "11"
+
+# â’’ [NUMBER ELEVEN FULL STOP]
+"\u2492" => "11."
+
+# ⑾ [PARENTHESIZED NUMBER ELEVEN]
+"\u247E" => "(11)"
+
+# â‘« [CIRCLED NUMBER TWELVE]
+"\u246B" => "12"
+
+# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
+"\u24EC" => "12"
+
+# â’“ [NUMBER TWELVE FULL STOP]
+"\u2493" => "12."
+
+# â‘¿ [PARENTHESIZED NUMBER TWELVE]
+"\u247F" => "(12)"
+
+# ⑬ [CIRCLED NUMBER THIRTEEN]
+"\u246C" => "13"
+
+# â“­ [NEGATIVE CIRCLED NUMBER THIRTEEN]
+"\u24ED" => "13"
+
+# â’” [NUMBER THIRTEEN FULL STOP]
+"\u2494" => "13."
+
+# â’€ [PARENTHESIZED NUMBER THIRTEEN]
+"\u2480" => "(13)"
+
+# â‘­ [CIRCLED NUMBER FOURTEEN]
+"\u246D" => "14"
+
+# â“® [NEGATIVE CIRCLED NUMBER FOURTEEN]
+"\u24EE" => "14"
+
+# â’• [NUMBER FOURTEEN FULL STOP]
+"\u2495" => "14."
+
+# â’ [PARENTHESIZED NUMBER FOURTEEN]
+"\u2481" => "(14)"
+
+# â‘® [CIRCLED NUMBER FIFTEEN]
+"\u246E" => "15"
+
+# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
+"\u24EF" => "15"
+
+# â’– [NUMBER FIFTEEN FULL STOP]
+"\u2496" => "15."
+
+# â’‚ [PARENTHESIZED NUMBER FIFTEEN]
+"\u2482" => "(15)"
+
+# ⑯ [CIRCLED NUMBER SIXTEEN]
+"\u246F" => "16"
+
+# â“° [NEGATIVE CIRCLED NUMBER SIXTEEN]
+"\u24F0" => "16"
+
+# â’— [NUMBER SIXTEEN FULL STOP]
+"\u2497" => "16."
+
+# â’ƒ [PARENTHESIZED NUMBER SIXTEEN]
+"\u2483" => "(16)"
+
+# â‘° [CIRCLED NUMBER SEVENTEEN]
+"\u2470" => "17"
+
+# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
+"\u24F1" => "17"
+
+# â’˜ [NUMBER SEVENTEEN FULL STOP]
+"\u2498" => "17."
+
+# â’„ [PARENTHESIZED NUMBER SEVENTEEN]
+"\u2484" => "(17)"
+
+# ⑱ [CIRCLED NUMBER EIGHTEEN]
+"\u2471" => "18"
+
+# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
+"\u24F2" => "18"
+
+# â’™ [NUMBER EIGHTEEN FULL STOP]
+"\u2499" => "18."
+
+# â’… [PARENTHESIZED NUMBER EIGHTEEN]
+"\u2485" => "(18)"
+
+# ⑲ [CIRCLED NUMBER NINETEEN]
+"\u2472" => "19"
+
+# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
+"\u24F3" => "19"
+
+# â’š [NUMBER NINETEEN FULL STOP]
+"\u249A" => "19."
+
+# â’† [PARENTHESIZED NUMBER NINETEEN]
+"\u2486" => "(19)"
+
+# ⑳ [CIRCLED NUMBER TWENTY]
+"\u2473" => "20"
+
+# â“´ [NEGATIVE CIRCLED NUMBER TWENTY]
+"\u24F4" => "20"
+
+# â’› [NUMBER TWENTY FULL STOP]
+"\u249B" => "20."
+
+# â’‡ [PARENTHESIZED NUMBER TWENTY]
+"\u2487" => "(20)"
+
+# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00AB" => "\""
+
+# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
+"\u00BB" => "\""
+
+# “ [LEFT DOUBLE QUOTATION MARK]
+"\u201C" => "\""
+
+# †[RIGHT DOUBLE QUOTATION MARK]
+"\u201D" => "\""
+
+# „ [DOUBLE LOW-9 QUOTATION MARK]
+"\u201E" => "\""
+
+# ″ [DOUBLE PRIME]
+"\u2033" => "\""
+
+# ‶ [REVERSED DOUBLE PRIME]
+"\u2036" => "\""
+
+# â [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275D" => "\""
+
+# âž [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
+"\u275E" => "\""
+
+# â® [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276E" => "\""
+
+# ⯠[HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
+"\u276F" => "\""
+
+# " [FULLWIDTH QUOTATION MARK]
+"\uFF02" => "\""
+
+# ‘ [LEFT SINGLE QUOTATION MARK]
+"\u2018" => "\'"
+
+# ’ [RIGHT SINGLE QUOTATION MARK]
+"\u2019" => "\'"
+
+# ‚ [SINGLE LOW-9 QUOTATION MARK]
+"\u201A" => "\'"
+
+# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
+"\u201B" => "\'"
+
+# ′ [PRIME]
+"\u2032" => "\'"
+
+# ‵ [REVERSED PRIME]
+"\u2035" => "\'"
+
+# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
+"\u2039" => "\'"
+
+# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
+"\u203A" => "\'"
+
+# â› [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
+"\u275B" => "\'"
+
+# ✠[HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
+"\u275C" => "\'"
+
+# ' [FULLWIDTH APOSTROPHE]
+"\uFF07" => "\'"
+
+# †[HYPHEN]
+"\u2010" => "-"
+
+# ‑ [NON-BREAKING HYPHEN]
+"\u2011" => "-"
+
+# ‒ [FIGURE DASH]
+"\u2012" => "-"
+
+# – [EN DASH]
+"\u2013" => "-"
+
+# — [EM DASH]
+"\u2014" => "-"
+
+# â» [SUPERSCRIPT MINUS]
+"\u207B" => "-"
+
+# â‚‹ [SUBSCRIPT MINUS]
+"\u208B" => "-"
+
+# ï¼ [FULLWIDTH HYPHEN-MINUS]
+"\uFF0D" => "-"
+
+# â… [LEFT SQUARE BRACKET WITH QUILL]
+"\u2045" => "["
+
+# â² [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2772" => "["
+
+# ï¼» [FULLWIDTH LEFT SQUARE BRACKET]
+"\uFF3B" => "["
+
+# ↠[RIGHT SQUARE BRACKET WITH QUILL]
+"\u2046" => "]"
+
+# â³ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
+"\u2773" => "]"
+
+# ï¼½ [FULLWIDTH RIGHT SQUARE BRACKET]
+"\uFF3D" => "]"
+
+# â½ [SUPERSCRIPT LEFT PARENTHESIS]
+"\u207D" => "("
+
+# â‚ [SUBSCRIPT LEFT PARENTHESIS]
+"\u208D" => "("
+
+# ⨠[MEDIUM LEFT PARENTHESIS ORNAMENT]
+"\u2768" => "("
+
+# ⪠[MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
+"\u276A" => "("
+
+# ( [FULLWIDTH LEFT PARENTHESIS]
+"\uFF08" => "("
+
+# ⸨ [LEFT DOUBLE PARENTHESIS]
+"\u2E28" => "(("
+
+# â¾ [SUPERSCRIPT RIGHT PARENTHESIS]
+"\u207E" => ")"
+
+# ₎ [SUBSCRIPT RIGHT PARENTHESIS]
+"\u208E" => ")"
+
+# â© [MEDIUM RIGHT PARENTHESIS ORNAMENT]
+"\u2769" => ")"
+
+# â« [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
+"\u276B" => ")"
+
+# ) [FULLWIDTH RIGHT PARENTHESIS]
+"\uFF09" => ")"
+
+# ⸩ [RIGHT DOUBLE PARENTHESIS]
+"\u2E29" => "))"
+
+# ⬠[MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276C" => "<"
+
+# â° [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2770" => "<"
+
+# < [FULLWIDTH LESS-THAN SIGN]
+"\uFF1C" => "<"
+
+# â­ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u276D" => ">"
+
+# â± [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
+"\u2771" => ">"
+
+# > [FULLWIDTH GREATER-THAN SIGN]
+"\uFF1E" => ">"
+
+# â´ [MEDIUM LEFT CURLY BRACKET ORNAMENT]
+"\u2774" => "{"
+
+# ï½› [FULLWIDTH LEFT CURLY BRACKET]
+"\uFF5B" => "{"
+
+# âµ [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
+"\u2775" => "}"
+
+# ï½ [FULLWIDTH RIGHT CURLY BRACKET]
+"\uFF5D" => "}"
+
+# ⺠[SUPERSCRIPT PLUS SIGN]
+"\u207A" => "+"
+
+# ₊ [SUBSCRIPT PLUS SIGN]
+"\u208A" => "+"
+
+# + [FULLWIDTH PLUS SIGN]
+"\uFF0B" => "+"
+
+# â¼ [SUPERSCRIPT EQUALS SIGN]
+"\u207C" => "="
+
+# ₌ [SUBSCRIPT EQUALS SIGN]
+"\u208C" => "="
+
+# ï¼ [FULLWIDTH EQUALS SIGN]
+"\uFF1D" => "="
+
+# ï¼ [FULLWIDTH EXCLAMATION MARK]
+"\uFF01" => "!"
+
+# ‼ [DOUBLE EXCLAMATION MARK]
+"\u203C" => "!!"
+
+# ≠[EXCLAMATION QUESTION MARK]
+"\u2049" => "!?"
+
+# # [FULLWIDTH NUMBER SIGN]
+"\uFF03" => "#"
+
+# $ [FULLWIDTH DOLLAR SIGN]
+"\uFF04" => "$"
+
+# â’ [COMMERCIAL MINUS SIGN]
+"\u2052" => "%"
+
+# ï¼… [FULLWIDTH PERCENT SIGN]
+"\uFF05" => "%"
+
+# & [FULLWIDTH AMPERSAND]
+"\uFF06" => "&"
+
+# ⎠[LOW ASTERISK]
+"\u204E" => "*"
+
+# * [FULLWIDTH ASTERISK]
+"\uFF0A" => "*"
+
+# , [FULLWIDTH COMMA]
+"\uFF0C" => ","
+
+# . [FULLWIDTH FULL STOP]
+"\uFF0E" => "."
+
+# â„ [FRACTION SLASH]
+"\u2044" => "/"
+
+# ï¼ [FULLWIDTH SOLIDUS]
+"\uFF0F" => "/"
+
+# : [FULLWIDTH COLON]
+"\uFF1A" => ":"
+
+# â [REVERSED SEMICOLON]
+"\u204F" => ";"
+
+# ï¼› [FULLWIDTH SEMICOLON]
+"\uFF1B" => ";"
+
+# ? [FULLWIDTH QUESTION MARK]
+"\uFF1F" => "?"
+
+# ⇠[DOUBLE QUESTION MARK]
+"\u2047" => "??"
+
+# ∠[QUESTION EXCLAMATION MARK]
+"\u2048" => "?!"
+
+# ï¼  [FULLWIDTH COMMERCIAL AT]
+"\uFF20" => "@"
+
+# ï¼¼ [FULLWIDTH REVERSE SOLIDUS]
+"\uFF3C" => "\\"
+
+# ‸ [CARET]
+"\u2038" => "^"
+
+# ï¼¾ [FULLWIDTH CIRCUMFLEX ACCENT]
+"\uFF3E" => "^"
+
+# _ [FULLWIDTH LOW LINE]
+"\uFF3F" => "_"
+
+# â“ [SWUNG DASH]
+"\u2053" => "~"
+
+# ~ [FULLWIDTH TILDE]
+"\uFF5E" => "~"
+
+################################################################
+# Below is the Perl script used to generate the above mappings #
+# from ASCIIFoldingFilter.java: #
+################################################################
+#
+# #!/usr/bin/perl
+#
+# use warnings;
+# use strict;
+#
+# my @source_chars = ();
+# my @source_char_descriptions = ();
+# my $target = '';
+#
+# while (<>) {
+# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) {
+# push @source_chars, $1;
+# push @source_char_descriptions, $2;
+# next;
+# }
+# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) {
+# $target .= $1;
+# next;
+# }
+# if (/break;/) {
+# $target = "\\\"" if ($target eq '"');
+# for my $source_char_num (0..$#source_chars) {
+# print "# $source_char_descriptions[$source_char_num]\n";
+# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n";
+# }
+# @source_chars = ();
+# @source_char_descriptions = ();
+# $target = '';
+# }
+# }
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-ISOLatin1Accent.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 000000000..ede774258
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,246 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Syntax:
+# "source" => "target"
+# "source".length() > 0 (source cannot be empty.)
+# "target".length() >= 0 (target can be empty.)
+
+# example:
+# "À" => "A"
+# "\u00C0" => "A"
+# "\u00C0" => "\u0041"
+# "ß" => "ss"
+# "\t" => " "
+# "\n" => ""
+
+# À => A
+"\u00C0" => "A"
+
+# Ã => A
+"\u00C1" => "A"
+
+# Â => A
+"\u00C2" => "A"
+
+# Ã => A
+"\u00C3" => "A"
+
+# Ä => A
+"\u00C4" => "A"
+
+# Ã… => A
+"\u00C5" => "A"
+
+# Æ => AE
+"\u00C6" => "AE"
+
+# Ç => C
+"\u00C7" => "C"
+
+# È => E
+"\u00C8" => "E"
+
+# É => E
+"\u00C9" => "E"
+
+# Ê => E
+"\u00CA" => "E"
+
+# Ë => E
+"\u00CB" => "E"
+
+# Ì => I
+"\u00CC" => "I"
+
+# Ã => I
+"\u00CD" => "I"
+
+# ÃŽ => I
+"\u00CE" => "I"
+
+# Ã => I
+"\u00CF" => "I"
+
+# IJ => IJ
+"\u0132" => "IJ"
+
+# Ã => D
+"\u00D0" => "D"
+
+# Ñ => N
+"\u00D1" => "N"
+
+# Ã’ => O
+"\u00D2" => "O"
+
+# Ó => O
+"\u00D3" => "O"
+
+# Ô => O
+"\u00D4" => "O"
+
+# Õ => O
+"\u00D5" => "O"
+
+# Ö => O
+"\u00D6" => "O"
+
+# Ø => O
+"\u00D8" => "O"
+
+# Å’ => OE
+"\u0152" => "OE"
+
+# Þ
+"\u00DE" => "TH"
+
+# Ù => U
+"\u00D9" => "U"
+
+# Ú => U
+"\u00DA" => "U"
+
+# Û => U
+"\u00DB" => "U"
+
+# Ü => U
+"\u00DC" => "U"
+
+# Ã => Y
+"\u00DD" => "Y"
+
+# Ÿ => Y
+"\u0178" => "Y"
+
+# à => a
+"\u00E0" => "a"
+
+# á => a
+"\u00E1" => "a"
+
+# â => a
+"\u00E2" => "a"
+
+# ã => a
+"\u00E3" => "a"
+
+# ä => a
+"\u00E4" => "a"
+
+# å => a
+"\u00E5" => "a"
+
+# æ => ae
+"\u00E6" => "ae"
+
+# ç => c
+"\u00E7" => "c"
+
+# è => e
+"\u00E8" => "e"
+
+# é => e
+"\u00E9" => "e"
+
+# ê => e
+"\u00EA" => "e"
+
+# ë => e
+"\u00EB" => "e"
+
+# ì => i
+"\u00EC" => "i"
+
+# í => i
+"\u00ED" => "i"
+
+# î => i
+"\u00EE" => "i"
+
+# ï => i
+"\u00EF" => "i"
+
+# ij => ij
+"\u0133" => "ij"
+
+# ð => d
+"\u00F0" => "d"
+
+# ñ => n
+"\u00F1" => "n"
+
+# ò => o
+"\u00F2" => "o"
+
+# ó => o
+"\u00F3" => "o"
+
+# ô => o
+"\u00F4" => "o"
+
+# õ => o
+"\u00F5" => "o"
+
+# ö => o
+"\u00F6" => "o"
+
+# ø => o
+"\u00F8" => "o"
+
+# Å“ => oe
+"\u0153" => "oe"
+
+# ß => ss
+"\u00DF" => "ss"
+
+# þ => th
+"\u00FE" => "th"
+
+# ù => u
+"\u00F9" => "u"
+
+# ú => u
+"\u00FA" => "u"
+
+# û => u
+"\u00FB" => "u"
+
+# ü => u
+"\u00FC" => "u"
+
+# ý => y
+"\u00FD" => "y"
+
+# ÿ => y
+"\u00FF" => "y"
+
+# ff => ff
+"\uFB00" => "ff"
+
+# ï¬ => fi
+"\uFB01" => "fi"
+
+# fl => fl
+"\uFB02" => "fl"
+
+# ffi => ffi
+"\uFB03" => "ffi"
+
+# ffl => ffl
+"\uFB04" => "ffl"
+
+# ſt => ft
+"\uFB05" => "ft"
+
+# st => st
+"\uFB06" => "st"
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/params.json b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/params.json
new file mode 100644
index 000000000..4c0ac39c1
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/params.json
@@ -0,0 +1,11 @@
+{
+ "params": {
+ "_UPDATE_JSON_DOCS": {
+ "srcField": "_src_",
+ "mapUniqueKeyOnly": true,
+ "": {
+ "v": 0
+ }
+ }
+ }
+}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/protwords.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
new file mode 100644
index 000000000..6038d5846
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
@@ -0,0 +1,1621 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.1.1</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ A "compressionMode" string element can be added to <codecFactory> to choose
+ between the existing compression modes in the default codec: "BEST_SPEED" (default)
+ or "BEST_COMPRESSION".
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first.
+ The default is 100 MB. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ <double name="noCFSRatio">0.1</double>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting the value to true will instruct the underlying Lucene
+ IndexWriter to write its info stream to solr's log. By default,
+ this is enabled here, and controlled through log4j2.xml
+ -->
+ <infoStream>true</infoStream>
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory.
+ "numVersionBuckets" - sets the number of buckets used to keep
+ track of max version values when checking for re-ordered
+ updates; increase this value to reduce the cost of
+ synchronizing access to version buckets during high-volume
+ indexing, this requires 8 bytes (long) * numVersionBuckets
+ of heap space per Solr core.
+ -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+
+ <!-- Maximum number of clauses allowed when parsing a boolean query string.
+
+ This limit only impacts boolean queries specified by a user as part of a query string,
+ and provides per-collection controls on how complex user specified boolean queries can
+ be. Query strings that specify more clauses then this will result in an error.
+
+ If this per-collection limit is greater then the global `maxBooleanClauses` limit
+ specified in `solr.xml`, it will have no effect, as that setting also limits the size
+ of user specified boolean queries.
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+
+ <!-- Slow Query Threshold (in millis)
+
+ At high request rates, logging all requests can become a bottleneck
+ and therefore INFO logging is often turned off. However, it is still
+ useful to be able to set a latency threshold above which a request
+ is considered "slow" and log that request at WARN level so we can
+ easily identify slow queries.
+ -->
+ <slowQueryThresholdMillis>-1</slowQueryThresholdMillis>
+
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy. Note that when this option is specified, the size
+ and initialSize parameters are ignored.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ Additional supported parameter by LRUCache:
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Feature Values Cache
+
+ Cache used by the Learning To Rank (LTR) contrib module.
+
+ You will need to set the solr.ltr.enabled system property
+ when running solr to run with ltr enabled:
+ -Dsolr.ltr.enabled=true
+
+ https://lucene.apache.org/solr/guide/learning-to-rank.html
+ -->
+ <cache enable="${solr.ltr.enabled:false}" name="QUERY_DOC_FV"
+ class="solr.search.LRUCache"
+ size="4096"
+ initialSize="2048"
+ autowarmCount="4096"
+ regenerator="solr.search.NoOpRegenerator" />
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <!-- Default search field
+ <str name="df">text</str>
+ -->
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ <!-- Controls the distribution of a query to shards other than itself.
+ Consider making 'preferLocalShards' true when:
+ 1) maxShardsPerNode > 1
+ 2) Number of shards > 1
+ 3) CloudSolrClient or LbHttpSolrServer is used by clients.
+ Without this option, every core broadcasts the distributed query to
+ a replica of each shard where the replicas are chosen randomly.
+ This option directs the cores to prefer cores hosted locally, thus
+ preventing network delays between machines.
+ This behavior also immunizes a bad/slow machine from slowing down all
+ the good machines (if those good machines were querying this bad one).
+
+ Specify this option=false for clients connecting through HttpSolrServer
+ -->
+ <bool name="preferLocalShards">false</bool>
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ <str name="df">text</str>
+ </lst>
+ </requestHandler>
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+
+ <!-- VelocityResponseWriter settings -->
+ <str name="wt">velocity</str>
+ <str name="v.template">browse</str>
+ <str name="v.layout">layout</str>
+ <str name="title">Solritas</str>
+
+ <!-- Query settings -->
+ <str name="defType">edismax</str>
+ <str name="qf">
+ text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+ title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
+ </str>
+ <str name="mm">100%</str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">10</str>
+ <str name="fl">*,score</str>
+
+ <str name="mlt.qf">
+ text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+ title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
+ </str>
+ <str name="mlt.fl">text,features,name,sku,id,manu,cat,title,description,keywords,author,resourcename</str>
+ <int name="mlt.count">3</int>
+
+ <!-- Faceting defaults -->
+ <str name="facet">on</str>
+ <str name="facet.missing">true</str>
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.field">content_type</str>
+ <str name="facet.field">author_s</str>
+ <str name="facet.query">ipod</str>
+ <str name="facet.query">GB</str>
+ <str name="facet.mincount">1</str>
+ <str name="facet.pivot">cat,inStock</str>
+ <str name="facet.range.other">after</str>
+ <str name="facet.range">price</str>
+ <int name="f.price.facet.range.start">0</int>
+ <int name="f.price.facet.range.end">600</int>
+ <int name="f.price.facet.range.gap">50</int>
+ <str name="facet.range">popularity</str>
+ <int name="f.popularity.facet.range.start">0</int>
+ <int name="f.popularity.facet.range.end">10</int>
+ <int name="f.popularity.facet.range.gap">3</int>
+ <str name="facet.range">manufacturedate_dt</str>
+ <str name="f.manufacturedate_dt.facet.range.start">NOW/YEAR-10YEARS</str>
+ <str name="f.manufacturedate_dt.facet.range.end">NOW</str>
+ <str name="f.manufacturedate_dt.facet.range.gap">+1YEAR</str>
+ <str name="f.manufacturedate_dt.facet.range.other">before</str>
+ <str name="f.manufacturedate_dt.facet.range.other">after</str>
+
+ <!-- Highlighting defaults -->
+ <str name="hl">on</str>
+ <str name="hl.fl">content features title name</str>
+ <str name="hl.preserveMulti">true</str>
+ <str name="hl.encoder">html</str>
+ <str name="hl.simple.pre">&lt;b&gt;</str>
+ <str name="hl.simple.post">&lt;/b&gt;</str>
+ <str name="f.title.hl.fragsize">0</str>
+ <str name="f.title.hl.alternateField">title</str>
+ <str name="f.name.hl.fragsize">0</str>
+ <str name="f.name.hl.alternateField">name</str>
+ <str name="f.content.hl.snippets">3</str>
+ <str name="f.content.hl.fragsize">200</str>
+ <str name="f.content.hl.alternateField">content</str>
+ <str name="f.content.hl.maxAlternateFieldLength">750</str>
+
+ <!-- Spell checking defaults -->
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">false</str>
+ <str name="spellcheck.count">5</str>
+ <str name="spellcheck.alternativeTermCount">2</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">5</str>
+ <str name="spellcheck.maxCollations">3</str>
+ </lst>
+
+ <!-- append spellchecking to our list of components -->
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse,update">
+ <lst name="defaults">
+ <str name="df">text</str>
+ </lst>
+ </initParams>
+
+ <!-- The following are implicitly added
+ <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
+ <lst name="invariants">
+ <str name="stream.contentType">application/json</str>
+ </lst>
+ </requestHandler>
+ <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
+ <lst name="invariants">
+ <str name="stream.contentType">application/csv</str>
+ </lst>
+ </requestHandler>
+ -->
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="uprefix">ignored_</str>
+
+ <!-- capture link hrefs but ignore div attributes -->
+ <str name="captureAttr">true</str>
+ <str name="fmap.a">links</str>
+ <str name="fmap.div">ignored_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">text</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+
+ <!-- a spellchecker that uses a different distance measure -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">jarowinkler</str>
+ <str name="field">spell</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="distanceMeasure">
+ org.apache.lucene.search.spell.JaroWinklerDistance
+ </str>
+ </lst>
+ -->
+
+ <!-- a spellchecker that use an alternate comparator
+
+ comparatorClass be one of:
+ 1. score (default)
+ 2. freq (Frequency first, then score)
+ 3. A fully qualified class name
+ -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">freq</str>
+ <str name="field">lowerfilt</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <str name="comparatorClass">freq</str>
+ </lst>
+ -->
+
+ <!-- A spellchecker that reads the list of words from a file -->
+ <!--
+ <lst name="spellchecker">
+ <str name="classname">solr.FileBasedSpellChecker</str>
+ <str name="name">file</str>
+ <str name="sourceLocation">spellings.txt</str>
+ <str name="characterEncoding">UTF-8</str>
+ <str name="spellcheckIndexDir">spellcheckerFile</str>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck.dictionary">wordbreak</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <!-- The SuggestComponent in Solr provides users with automatic suggestions for query terms.
+ You can use this to implement a powerful auto-suggest feature in your search application.
+ As with the rest of this solrconfig.xml file, the configuration of this component is purely
+ an example that applies specifically to this configset and example documents.
+
+ More information about this component and other configuration options are described in the
+ "Suggester" section of the reference guide available at
+ http://archive.apache.org/dist/lucene/solr/ref-guide
+ -->
+ <searchComponent name="suggest" class="solr.SuggestComponent">
+ <lst name="suggester">
+ <str name="name">mySuggester</str>
+ <str name="lookupImpl">FuzzyLookupFactory</str>
+ <str name="dictionaryImpl">DocumentDictionaryFactory</str>
+ <str name="field">cat</str>
+ <str name="weightField">price</str>
+ <str name="suggestAnalyzerFieldType">string</str>
+ <str name="buildOnStartup">false</str>
+ </lst>
+ </searchComponent>
+
+ <requestHandler name="/suggest" class="solr.SearchHandler"
+ startup="lazy" >
+ <lst name="defaults">
+ <str name="suggest">true</str>
+ <str name="suggest.count">10</str>
+ </lst>
+ <arr name="components">
+ <str>suggest</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Clustering Component
+
+ You'll need to set the solr.clustering.enabled system property
+ when running solr to run with clustering enabled:
+ -Dsolr.clustering.enabled=true
+
+ https://lucene.apache.org/solr/guide/result-clustering.html
+ -->
+ <searchComponent name="clustering"
+ enable="${solr.clustering.enabled:false}"
+ class="solr.clustering.ClusteringComponent" >
+ <!--
+ Declaration of "engines" (clustering algorithms).
+
+ The open source algorithms from Carrot2.org project:
+ * org.carrot2.clustering.lingo.LingoClusteringAlgorithm
+ * org.carrot2.clustering.stc.STCClusteringAlgorithm
+ * org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm
+ See http://project.carrot2.org/algorithms.html for more information.
+
+ Commercial algorithm Lingo3G (needs to be installed separately):
+ * com.carrotsearch.lingo3g.Lingo3GClusteringAlgorithm
+ -->
+
+ <lst name="engine">
+ <str name="name">lingo3g</str>
+ <bool name="optional">true</bool>
+ <str name="carrot.algorithm">com.carrotsearch.lingo3g.Lingo3GClusteringAlgorithm</str>
+ <str name="carrot.resourcesDir">clustering/carrot2</str>
+ </lst>
+
+ <lst name="engine">
+ <str name="name">lingo</str>
+ <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
+ <str name="carrot.resourcesDir">clustering/carrot2</str>
+ </lst>
+
+ <lst name="engine">
+ <str name="name">stc</str>
+ <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
+ <str name="carrot.resourcesDir">clustering/carrot2</str>
+ </lst>
+
+ <lst name="engine">
+ <str name="name">kmeans</str>
+ <str name="carrot.algorithm">org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm</str>
+ <str name="carrot.resourcesDir">clustering/carrot2</str>
+ </lst>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the clustering component.
+ This is meant as an example.
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/clustering"
+ startup="lazy"
+ enable="${solr.clustering.enabled:false}"
+ class="solr.SearchHandler">
+ <lst name="defaults">
+ <bool name="clustering">true</bool>
+ <bool name="clustering.results">true</bool>
+ <!-- Field name with the logical "title" of a each document (optional) -->
+ <str name="carrot.title">name</str>
+ <!-- Field name with the logical "URL" of a each document (optional) -->
+ <str name="carrot.url">id</str>
+ <!-- Field name with the logical "content" of a each document (optional) -->
+ <str name="carrot.snippet">features</str>
+ <!-- Apply highlighter to the title/ content and use this for clustering. -->
+ <bool name="carrot.produceSummary">true</bool>
+ <!-- the maximum number of labels per cluster -->
+ <!--<int name="carrot.numDescriptions">5</int>-->
+ <!-- produce sub clusters -->
+ <bool name="carrot.outputSubClusters">false</bool>
+
+ <!-- Configure the remaining request handler parameters. -->
+ <str name="defType">edismax</str>
+ <str name="qf">
+ text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+ </str>
+ <str name="q.alt">*:*</str>
+ <str name="rows">100</str>
+ <str name="fl">*,score</str>
+ </lst>
+ <arr name="last-components">
+ <str>clustering</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ <str name="config-file">elevate.xml</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ </queryResponseWriter>
+
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+ <!-- LTR query parser
+
+ You will need to set the solr.ltr.enabled system property
+ when running solr to run with ltr enabled:
+ -Dsolr.ltr.enabled=true
+
+ https://lucene.apache.org/solr/guide/learning-to-rank.html
+
+ Query parser is used to rerank top docs with a provided model
+ -->
+ <queryParser enable="${solr.ltr.enabled:false}" name="ltr" class="org.apache.solr.ltr.search.LTRQParserPlugin"/>
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+
+ <!--
+ LTR Transformer will encode the document features in the response. For each document the transformer
+ will add the features as an extra field in the response. The name of the field will be the
+ name of the transformer enclosed between brackets (in this case [features]).
+ In order to get the feature vector you will have to specify that you
+ want the field (e.g., fl="*,[features])
+
+ You will need to set the solr.ltr.enabled system property
+ when running solr to run with ltr enabled:
+ -Dsolr.ltr.enabled=true
+
+ https://lucene.apache.org/solr/guide/learning-to-rank.html
+ -->
+ <transformer enable="${solr.ltr.enabled:false}" name="features" class="org.apache.solr.ltr.response.transform.LTRFeatureLoggerTransformerFactory">
+ <str name="fvCacheName">QUERY_DOC_FV</str>
+ </transformer>
+
+</config>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/spellings.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/spellings.txt
new file mode 100644
index 000000000..162a044d5
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/spellings.txt
@@ -0,0 +1,2 @@
+pizza
+history
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/stopwords.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/update-script.js b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/update-script.js
new file mode 100644
index 000000000..49b07f9b7
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/update-script.js
@@ -0,0 +1,53 @@
+/*
+ This is a basic skeleton JavaScript update processor.
+
+ In order for this to be executed, it must be properly wired into solrconfig.xml; by default it is commented out in
+ the example solrconfig.xml and must be uncommented to be enabled.
+
+ See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details.
+*/
+
+function processAdd(cmd) {
+
+ doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
+ id = doc.getFieldValue("id");
+ logger.info("update-script#processAdd: id=" + id);
+
+// Set a field value:
+// doc.setField("foo_s", "whatever");
+
+// Get a configuration parameter:
+// config_param = params.get('config_param'); // "params" only exists if processor configured with <lst name="params">
+
+// Get a request parameter:
+// some_param = req.getParams().get("some_param")
+
+// Add a field of field names that match a pattern:
+// - Potentially useful to determine the fields/attributes represented in a result set, via faceting on field_name_ss
+// field_names = doc.getFieldNames().toArray();
+// for(i=0; i < field_names.length; i++) {
+// field_name = field_names[i];
+// if (/attr_.*/.test(field_name)) { doc.addField("attribute_ss", field_names[i]); }
+// }
+
+}
+
+function processDelete(cmd) {
+ // no-op
+}
+
+function processMergeIndexes(cmd) {
+ // no-op
+}
+
+function processCommit(cmd) {
+ // no-op
+}
+
+function processRollback(cmd) {
+ // no-op
+}
+
+function finish() {
+ // no-op
+}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/README.txt b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/README.txt
new file mode 100644
index 000000000..5d560baec
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/README.txt
@@ -0,0 +1,101 @@
+Introduction
+------------
+Solr Search Velocity Templates
+
+A quick demo of using Solr using http://wiki.apache.org/solr/VelocityResponseWriter
+
+You typically access these templates via:
+ http://localhost:8983/solr/collection1/browse
+
+It's called "browse" because you can click around with your mouse
+without needing to type any search terms. And of course it
+also works as a standard search app as well.
+
+Known Limitations
+-----------------
+* The /browse and the VelocityResponseWriter component
+ serve content directly from Solr, which usually requires
+ Solr's HTTP API to be exposed. Advanced users could
+ potentially access other parts of Solr directly.
+* There are some hard coded fields in these templates.
+ Since these templates live under conf, they should be
+ considered part of the overall configuration, and
+ must be coordinated with schema.xml and solrconfig.xml
+
+Velocity Info
+-------------
+Java-based template language.
+
+It's nice in this context because change to the templates
+are immediately visible in browser on the next visit.
+
+Links:
+ http://velocity.apache.org
+ http://wiki.apache.org/velocity/
+ http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html
+
+
+File List
+---------
+
+System and Misc:
+ VM_global_library.vm - Macros used other templates,
+ exact filename is important for Velocity to see it
+ error.vm - shows errors, if any
+ debug.vm - includes toggle links for "explain" and "all fields"
+ activated by debug link in footer.vm
+ README.txt - this file
+
+Overall Page Composition:
+ browse.vm - Main entry point into templates
+ layout.vm - overall HTML page layout
+ head.vm - elements in the <head> section of the HTML document
+ header.vm - top section of page visible to users
+ footer.vm - bottom section of page visible to users,
+ includes debug and help links
+ main.css - CSS style for overall pages
+ see also jquery.autocomplete.css
+
+Query Form and Options:
+ query_form.vm - renders query form
+ query_group.vm - group by fields
+ e.g.: Manufacturer or Poplularity
+ query_spatial.vm - select box for location based Geospacial search
+
+Spelling Suggestions:
+ did_you_mean.vm - hyperlinked spelling suggestions in results
+ suggest.vm - dynamic spelling suggestions
+ as you type in the search form
+ jquery.autocomplete.js - supporting files for dynamic suggestions
+ jquery.autocomplete.css - Most CSS is defined in main.css
+
+
+Search Results, General:
+ (see also browse.vm)
+ tabs.vm - provides navigation to advanced search options
+ pagination_top.vm - paging and staticis at top of results
+ pagination_bottom.vm - paging and staticis at bottom of results
+ results_list.vm
+ hit.vm - called for each matching doc,
+ decides which template to use
+ hit_grouped.vm - display results grouped by field values
+ product_doc.vm - display a Product
+ join_doc.vm - display a joined document
+ richtext_doc.vm - display a complex/misc. document
+ hit_plain.vm - basic display of all fields,
+ edit results_list.vm to enable this
+
+
+Search Results, Facets & Clusters:
+ facets.vm - calls the 4 facet and 1 cluster template
+ facet_fields.vm - display facets based on field values
+ e.g.: fields specified by &facet.field=
+ facet_queries.vm - display facets based on specific facet queries
+ e.g.: facets specified by &facet.query=
+ facet_ranges.vm - display facets based on ranges
+ e.g.: ranges specified by &facet.range=
+ facet_pivot.vm - display pivot based facets
+ e.g.: facets specified by &facet.pivot=
+ cluster.vm - if clustering is available
+ then call cluster_results.vm
+ cluster_results.vm - actual rendering of clusters
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/VM_global_library.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/VM_global_library.vm
new file mode 100644
index 000000000..42dde8984
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/VM_global_library.vm
@@ -0,0 +1,186 @@
+#**
+ * Global macros used by other templates.
+ * This file must be named VM_global_library.vm
+ * in order for Velocity to find it.
+ *#
+
+#macro(param $key)$request.params.get($key)#end
+
+#macro(url_root)/solr#end
+
+## TODO: s/url_for_solr/url_for_core/ and s/url_root/url_for_solr/
+#macro(core_name)$request.core.name#end
+#macro(url_for_solr)#{url_root}#if($request.core.name != "")/$request.core.name#end#end
+#macro(url_for_home)#url_for_solr/browse#end
+
+#macro(q)&q=$!{esc.url($params.get('q'))}#end
+
+#macro(fqs $p)#foreach($fq in $p)#if($velocityCount && $velocityCount>1)&#{end}fq=$esc.url($fq)#end#end
+
+#macro(debug)#if($request.params.get('debugQuery'))&debugQuery=true#end#end
+
+#macro(boostPrice)#if($request.params.get('bf') == 'price')&bf=price#end#end
+
+#macro(annotate)#if($request.params.get('annotateBrowse'))&annotateBrowse=true#end#end
+
+#macro(annTitle $msg)#if($annotate == true)title="$msg"#end#end
+
+#macro(spatial)#if($request.params.get('sfield'))&sfield=store#end#if($request.params.get('pt'))&pt=$request.params.get('pt')#end#if($request.params.get('d'))&d=$request.params.get('d')#end#end
+
+#macro(qOpts)#set($queryOpts = $request.params.get("queryOpts"))#if($queryOpts && $queryOpts != "")&queryOpts=$queryOpts#end#end
+
+#macro(group)#if($request.params.getBool("group") == true)&group=true#end#if($request.params.get("group.field"))#foreach($grp in $request.params.getParams('group.field'))&group.field=$grp#end#end#end
+
+#macro(sort $p)#if($p)#foreach($s in $p)&sort=$esc.url($s)#end#end#end
+
+#macro(lensNoQ)?#if($request.params.getParams('fq') && $request.params.getParams('fq').size() > 0)&#fqs($request.params.getParams('fq'))#end#sort($request.params.getParams('sort'))#debug#boostPrice#annotate#spatial#qOpts#group#end
+#macro(lens)#lensNoQ#q#end
+
+
+#macro(url_for_lens)#{url_for_home}#lens#end
+
+#macro(url_for_start $start)#url_for_home#lens&start=$start#end
+
+#macro(url_for_filters $p)#url_for_home?#q#boostPrice#spatial#qOpts#if($p && $p.size() > 0)&#fqs($p)#end#debug#end
+
+#macro(url_for_nested_facet_query $field)#url_for_home#lens&fq=$esc.url($field)#end
+
+## TODO: convert to use {!raw f=$field}$value (with escaping of course)
+#macro(url_for_facet_filter $field $value)#url_for_home#lens&fq=#if($value!=$null)$esc.url($field):%22$esc.url($value)%22#else-$esc.url($field):[*+TO+*]#end#end
+
+#macro(url_for_facet_date_filter $field $value)#url_for_home#lens&fq=$esc.url($field):$esc.url($value)#end
+
+#macro(url_for_facet_range_filter $field $value)#url_for_home#lens&fq=$esc.url($field):$esc.url($value)#end
+
+
+#macro(link_to_previous_page $text)
+ #if($page.current_page_number > 1)
+ #set($prev_start = $page.start - $page.results_per_page)
+ <a class="prev-page" href="#url_for_start($prev_start)">$text</a>
+ #end
+#end
+
+#macro(link_to_next_page $text)
+ #if($page.current_page_number < $page.page_count)
+ #set($next_start = $page.start + $page.results_per_page)
+ <a class="next-page" href="#url_for_start($next_start)">$text</a>
+ #end
+#end
+
+#macro(link_to_page $page_number $text)
+ #if($page_number == $page.current_page_number)
+ $text
+ #else
+ #if($page_number <= $page.page_count)
+ #set($page_start = $page_number * $page.results_per_page - $page.results_per_page)
+ <a class="page" href="#url_for_start($page_start)">$text</a>
+ #end
+ #end
+#end
+
+#macro(display_facet_query $field, $display, $fieldName)
+ #if($field && $field.size() > 0)
+ <span class="facet-field">$display</span>
+ <ul>
+ #foreach ($facet in $field)
+ #if ($facet.value > 0)
+ #set($facetURL = "#url_for_nested_facet_query($facet.key)")
+ #if ($facetURL != '')
+ <li><a href="$facetURL">$facet.key</a> ($facet.value)</li>
+ #end
+ #end
+ #end
+ </ul>
+ #end
+#end
+
+
+#macro(display_facet_range $field, $display, $fieldName, $start, $end, $gap, $before, $after)
+ <span class="facet-field">$display</span>
+ <ul>
+ #if($before && $before != "")
+ #set($value = "[* TO " + "#format_value($start)" + "}")
+ #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
+ <li><a href="$facetURL">Less than #format_value($start)</a> ($before)</li>
+ #end
+ #foreach ($facet in $field)
+ #set($rangeEnd = "#range_get_to_value($facet.key, $gap)")
+ #set($value = "[" + $facet.key + " TO " + $rangeEnd + "}")
+ #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
+ #if ($facetURL != '')
+ <li><a href="$facetURL">$facet.key - #format_value($rangeEnd)</a> ($facet.value)</li>
+ #end
+ #end
+ #if($end && $end != "" && $after > 0)
+ #set($value = "[" + "#format_value($end)" + " TO *}")
+ #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
+ <li><a href="$facetURL">More than #format_value($end)</a> ($after)</li>
+ #end
+ </ul>
+#end
+
+## $pivots is a list of facet_pivot
+#macro(display_facet_pivot $pivots, $display)
+ #if($pivots && $pivots.size() > 0)
+ <span class="facet-field">$display</span>
+ <ul>
+ #foreach ($pivot in $pivots)
+ #foreach ($entry in $pivot.value)
+ <a href="#url_for_facet_filter($entry.field, $entry.value)">$entry.field::#if($entry.value!=$null)$entry.value#else<em>missing</em>#end</a> ($entry.count)
+ <ul>
+ #foreach($nest in $entry.pivot)
+ <li>
+ #if($nest.value != $null)
+ <a href="#url_for_facet_filter($entry.field, $entry.value)&fq=$esc.url($nest.field):%22$esc.url($nest.value)%22">$nest.field::$nest.value</a>
+ #else
+ <a href="#url_for_facet_filter($entry.field, $entry.value)&fq=-$esc.url($nest.field):[*+TO+*]">$nest.field::<em>missing</em></a>
+ #end
+ ($nest.count)
+ </li>
+ #end
+ </ul>
+ #end
+ #end
+ </ul>
+ #end
+#end
+
+#macro(field $f)
+ #if($response.response.highlighting.get($docId).get($f).get(0))
+ #set($pad = "")
+ #foreach($v in $response.response.highlighting.get($docId).get($f))
+$pad$v##
+ #set($pad = " ... ")
+ #end
+ #else
+ #foreach($v in $doc.getFieldValues($f))
+$v##
+ #end
+ #end
+#end
+
+#macro(utc_date $theDate)
+$date.format("yyyy-MM-dd'T'HH:mm:ss'Z'",$theDate,$date.getLocale(),$date.getTimeZone().getTimeZone("UTC"))##
+#end
+
+#macro(format_value $val)
+#if(${val.class.name} == "java.util.Date")
+#utc_date($val)##
+#else
+$val##
+#end
+#end
+
+#macro(range_get_to_value $inval, $gapval)
+#if(${gapval.class.name} == "java.lang.String")
+#if($gapval.startsWith("+"))
+$inval$gapval## Typically date gaps start with +
+#else
+$inval+$gapval## If the gap does not start with a "+", we add it, such as for currency value
+#end
+#elseif(${gapval.class.name} == "java.lang.Float" || ${inval.class.name} == "java.lang.Float")
+$math.toDouble($math.add($inval,$gapval))##
+#else
+$math.add($inval,$gapval)##
+#end
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/browse.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/browse.vm
new file mode 100644
index 000000000..10ecaeb8e
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/browse.vm
@@ -0,0 +1,33 @@
+#**
+ * Main entry point into the /browse templates
+ *#
+
+#set($searcher = $request.searcher)
+#set($params = $request.params)
+#set($clusters = $response.response.clusters)
+#set($mltResults = $response.response.get("moreLikeThis"))
+#set($annotate = $params.get("annotateBrowse"))
+#parse('query_form.vm')
+#parse('did_you_mean.vm')
+
+<div class="navigators">
+ #parse("facets.vm")
+</div>
+
+<div class="pagination">
+ #parse("pagination_top.vm")
+</div>
+
+## Show Error Message, if any
+<div class="error">
+ #parse("error.vm")
+</div>
+
+## Render Results, actual matching docs
+<div class="results">
+ #parse("results_list.vm")
+</div>
+
+<div class="pagination">
+ #parse("pagination_bottom.vm")
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster.vm
new file mode 100644
index 000000000..09885f3e9
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster.vm
@@ -0,0 +1,19 @@
+#**
+ * Check if Clustering is Enabled and then
+ * call cluster_results.vm
+ *#
+
+<h2 #annTitle("Clusters generated by Carrot2 using the /clustering RequestHandler")>
+ Clusters
+</h2>
+
+## Div tag has placeholder text by default
+<div id="clusters">
+ Run Solr with option -Dsolr.clustering.enabled=true to see clustered search results.
+</div>
+
+## Replace the div content *if* Carrot^2 is available
+<script type="text/javascript">
+ $('#clusters').load("#url_for_solr/clustering#lens",
+ {'wt':'velocity', 'v.template':"cluster_results"});
+</script>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster_results.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster_results.vm
new file mode 100644
index 000000000..204480d5d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/cluster_results.vm
@@ -0,0 +1,31 @@
+#**
+ * Actual rendering of Clusters
+ *#
+
+## For each cluster
+#foreach ($clusters in $response.response.clusters)
+
+ #set($labels = $clusters.get('labels'))
+ #set($docs = $clusters.get('docs'))
+
+ ## This Cluster's Heading
+ <h3>
+ #foreach ($label in $labels)
+ ## Keep the following line together to prevent
+ ## a space appearing before each comma
+ $label#if( $foreach.hasNext ),#end
+ #end
+ </h3>
+
+ ## This Cluster's Documents
+ <ol>
+ ## For each doc in this cluster
+ #foreach ($cluDoc in $docs)
+ <li>
+ <a href="#url_for_home?q=id:$cluDoc">
+ $cluDoc</a>
+ </li>
+ #end
+ </ol>
+
+#end ## end for each Cluster
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/debug.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/debug.vm
new file mode 100644
index 000000000..8f6d23280
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/debug.vm
@@ -0,0 +1,28 @@
+#**
+ * Show Debugging Information, if enabled
+ *#
+
+#if( $params.getBool("debugQuery",false) )
+ <a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>
+ toggle explain</a>
+
+ <pre style="display:none">
+ $response.getExplainMap().get($doc.getFirstValue('id'))
+ </pre>
+
+ <a href="#" onclick='jQuery(this).siblings("pre2").toggle(); return false;'>
+ toggle all fields</a>
+
+ <pre2 style="display:none">
+ #foreach($fieldname in $doc.fieldNames)
+ <br>
+ <span class="field-name">$fieldname :</span>
+ <span>
+ #foreach($value in $doc.getFieldValues($fieldname))
+ $esc.html($value)
+ #end
+ </span>
+ </br>
+ #end
+ </pre2>
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/did_you_mean.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/did_you_mean.vm
new file mode 100644
index 000000000..d0eb4f817
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/did_you_mean.vm
@@ -0,0 +1,11 @@
+#**
+ * Hyperlinked spelling suggestions in results list
+ *#
+
+#set($collations = $response.response.spellcheck.collations.getAll("collation"))
+#if($collations && $collations.size() > 0)
+ Did you mean
+ #foreach($collation in $collations)
+ <a href="#{url_for_home}#{lensNoQ}&q=$esc.url($collation.collationQuery)">$esc.html($collation.collationQuery)</a> ($collation.hits)?
+ #end
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/error.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/error.vm
new file mode 100644
index 000000000..80b581979
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/error.vm
@@ -0,0 +1,11 @@
+#**
+ * Show Error Message, if any
+ *#
+
+## Show Error Message, if any
+## Usually rendered inside div class=error
+
+#if( $response.response.error.code )
+ <h1>ERROR $response.response.error.code</h1>
+ $response.response.error.msg
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_fields.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_fields.vm
new file mode 100644
index 000000000..292681767
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_fields.vm
@@ -0,0 +1,24 @@
+#**
+ * Display facets based on field values
+ * e.g.: fields specified by &facet.field=
+ *#
+
+#if($response.facetFields)
+ <h2 #annTitle("Facets generated by adding &facet.field= to the request")>
+ Field Facets
+ </h2>
+ #foreach($field in $response.facetFields)
+ ## Hide facets without value
+ #if($field.values.size() > 0)
+ <span class="facet-field">$field.name</span>
+ <ul>
+ #foreach($facet in $field.values)
+ <li>
+ <a href="#url_for_facet_filter($field.name, $facet.name)" title="$esc.html($facet.name)">
+ #if($facet.name!=$null)$esc.html($display.truncate($facet.name,20))#else<em>missing</em>#end</a> ($facet.count)
+ </li>
+ #end
+ </ul>
+ #end ## end if > 0
+ #end ## end for each facet field
+#end ## end if response has facet fields
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_pivot.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_pivot.vm
new file mode 100644
index 000000000..7aa50da3f
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_pivot.vm
@@ -0,0 +1,12 @@
+#**
+ * Display Pivot-Based Facets
+ * e.g.: facets specified by &facet.pivot=
+ *#
+
+<h2 #annTitle("Facets generated by adding &facet.pivot= to the request")>
+ Pivot Facets
+</h2>
+
+#set($pivot = $response.response.facet_counts.facet_pivot)
+
+#display_facet_pivot($pivot, "")
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_queries.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_queries.vm
new file mode 100644
index 000000000..37489c7e0
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_queries.vm
@@ -0,0 +1,12 @@
+#**
+ * Display facets based on specific facet queries
+ * e.g.: facets specified by &facet.query=
+ *#
+
+#set($field = $response.response.facet_counts.facet_queries)
+
+<h2 #annTitle("Facets generated by adding &facet.query= to the request")>
+ Query Facets
+</h2>
+
+#display_facet_query($field, "", "")
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_ranges.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_ranges.vm
new file mode 100644
index 000000000..a76941547
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facet_ranges.vm
@@ -0,0 +1,23 @@
+#**
+ * Display facets based on ranges of values, AKA "Bukets"
+ * e.g.: ranges specified by &facet.range=
+ *#
+
+<h2 #annTitle("Facets generated by adding &facet.range= to the request")>
+ Range Facets
+</h2>
+
+#foreach ($field in $response.response.facet_counts.facet_ranges)
+ ## Hide facets without value
+ #if($field.value.counts.size() > 0)
+ #set($name = $field.key)
+ #set($display = $name)
+ #set($f = $field.value.counts)
+ #set($start = $field.value.start)
+ #set($end = $field.value.end)
+ #set($gap = $field.value.gap)
+ #set($before = $field.value.before)
+ #set($after = $field.value.after)
+ #display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after)
+ #end ## end if has any values
+#end ## end for each facet range
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facets.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facets.vm
new file mode 100644
index 000000000..55d40c9ab
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/facets.vm
@@ -0,0 +1,10 @@
+#**
+ * Overall Facet display block
+ * Invokes the 4 facet and 1 cluster template
+ *#
+
+#parse('facet_fields.vm')
+#parse('facet_queries.vm')
+#parse('facet_ranges.vm')
+#parse('facet_pivot.vm')
+#parse('cluster.vm')
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/footer.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/footer.vm
new file mode 100644
index 000000000..e7430d38f
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/footer.vm
@@ -0,0 +1,43 @@
+#**
+ * Render the bottom section of the page visible to users
+ *#
+
+<hr/>
+<div>
+ <span>Options:</span>
+
+ #if($request.params.get('debugQuery'))
+ <a href="#url_for_home?#q#if($request.params.getParams('fq').size() > 0)&#fqs($request.params.getParams('fq'))#end">
+ disable debug</a>
+ #else
+ <a href="#url_for_lens&debugQuery=true&fl=*,score">
+ enable debug</a>
+ #end
+ -
+ #if($annotate)
+ <a href="#url_for_home?#q#if($request.params.getParams('fq').size() > 0)&#fqs($request.params.getParams('fq'))#end#boostPrice">
+ disable annotation</a>
+ #else
+ <a href="#url_for_lens&annotateBrowse=true">
+ enable annotation</a>
+ #end
+ -
+ <a #annTitle("Click to switch to an XML response: &wt=xml") href="#url_for_lens&wt=xml#if($request.params.get('debugQuery'))&debugQuery=true#end">
+ XML results</a>
+
+</div>
+
+<div>
+ Generated by <a href="http://wiki.apache.org/solr/VelocityResponseWriter">VelocityResponseWriter</a>
+</div>
+<div>
+ <span>Documentation: </span>
+ <a href="http://lucene.apache.org/solr">Solr Home Page</a>, <a href="http://wiki.apache.org/solr">
+ Solr Wiki</a>
+ </div>
+<div>
+ Disclaimer:
+ The locations displayed in this demonstration are purely fictional.
+ It is more than likely that no store with the items listed actually
+ exists at that location!
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/head.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/head.vm
new file mode 100644
index 000000000..15dc0e817
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/head.vm
@@ -0,0 +1,37 @@
+#**
+ * Provide elements for the <head> section of the HTML document
+ *#
+
+ ## An example of using an arbitrary request parameter
+ <title>#param('title')</title>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+
+ <script type="text/javascript" src="#{url_root}/libs/jquery-1.7.2.min.js"></script>
+ <link rel="stylesheet" type="text/css" href="#{url_for_solr}/admin/file?file=/velocity/main.css&contentType=text/css"/>
+ <link rel="stylesheet" href="#{url_for_solr}/admin/file?file=/velocity/jquery.autocomplete.css&contentType=text/css" type="text/css" />
+ <link rel="icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/>
+ <link rel="shortcut icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/>
+ <script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/jquery.autocomplete.js&contentType=text/javascript"></script>
+
+
+ <script>
+ $(document).ready(function(){
+ $("\#q").autocomplete('#{url_for_solr}/terms', { ## backslash escaped #q as that is a macro defined in VM_global_library.vm
+ extraParams:{
+ 'terms.prefix': function() { return $("\#q").val();},
+ 'terms.sort': 'count',
+ 'terms.fl': 'name',
+ 'wt': 'velocity',
+ 'v.template': 'suggest'
+ }
+ }
+ ).keydown(function(e){
+ if (e.keyCode === 13){
+ $("#query-form").trigger('submit');
+ }
+ });
+
+ // http://localhost:8983/solr/collection1/terms?terms.fl=name&terms.prefix=i&terms.sort=count&wt=velocity&v.template=suggest
+ });
+
+ </script>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/header.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/header.vm
new file mode 100644
index 000000000..a4084511b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/header.vm
@@ -0,0 +1,7 @@
+#**
+ * Render the top section of the page visible to users
+ *#
+
+<div id="head">
+ <span ><a href="#url_for_home#if($request.params.get('debugQuery'))?debugQuery=true#end"><img src="#{url_root}/img/solr.svg" id="logo"/></a></span>
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit.vm
new file mode 100644
index 000000000..a9c11f411
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit.vm
@@ -0,0 +1,25 @@
+#**
+ * Called for each matching document but then
+ * calls one of product_doc, join_doc or richtext_doc
+ * depending on which fields the doc has
+ *#
+
+#set($docId = $doc.getFieldValue('id'))
+
+<div class="result-document">
+
+ ## Has a "name" field ?
+ #if($doc.getFieldValue('name'))
+ #parse("product_doc.vm")
+
+ ## Has a "compName_s" field ?
+ #elseif($doc.getFieldValue('compName_s'))
+ #parse("join_doc.vm")
+
+ ## Fallback to richtext_doc
+ #else
+ #parse("richtext_doc.vm")
+
+ #end
+
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_grouped.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_grouped.vm
new file mode 100644
index 000000000..5297f1e9a
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_grouped.vm
@@ -0,0 +1,43 @@
+#**
+ * Display grouped results
+ *#
+
+<div class="result-document">
+
+ <div class="result-title">
+ <b>$grouping.key</b>
+ </div>
+
+ <div>
+ Total Matches in Group: $grouping.value.matches
+ </div>
+
+ <div> ## list of groups
+
+ #foreach ($group in $grouping.value.groups)
+ <div class="group-value">
+ #if($group.groupValue)$group.groupValue#{else}<i>No group</i>#end
+ <span #annTitle("The count of the number of documents in this group")>
+ ($group.doclist.numFound)
+ </span>
+ </div>
+
+ <div class="group-doclist"
+ #annTitle("Contains the top scoring documents in the group")
+ >
+ #foreach ($doc in $group.doclist)
+ #set($docId = $doc.getFieldValue('id'))
+ #if($doc.getFieldValue('name'))
+ #parse("product_doc.vm")
+ #elseif($doc.getFieldValue('compName_s'))
+ #parse("join_doc.vm")
+ #else
+ #parse("richtext_doc.vm")
+ #end
+ #end
+ </div>
+
+ #end ## end of foreach group in grouping.value.groups
+ </div> ## div tag for entire list of groups
+
+</div> ## end of div class=result-document
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_plain.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_plain.vm
new file mode 100644
index 000000000..193439b59
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/hit_plain.vm
@@ -0,0 +1,25 @@
+#**
+ * An extremely plain / debug version of hit.vm
+ *#
+
+<table>
+ ## For each field
+ #foreach( $fieldName in $doc.fieldNames )
+ ## For each value
+ #foreach( $value in $doc.getFieldValues($fieldName) )
+ <tr>
+ ## Field Name
+ <th align="right" valign="top">
+ #if( $foreach.count == 1 )
+ $fieldName:
+ #end
+ </th>
+ ## Field Value(s)
+ <td align="left" valign="top">
+ $esc.html($value) <br/>
+ </td>
+ </tr>
+ #end ## end for each value
+ #end ## end for each field
+</table>
+<hr/>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/join_doc.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/join_doc.vm
new file mode 100644
index 000000000..9956012b4
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/join_doc.vm
@@ -0,0 +1,20 @@
+#**
+ * Display documents that are joined to other documents
+ *#
+
+<div class="result-title">
+ <b>#field('compName_s')</b>
+</div>
+
+<div>
+ Id: #field('id')
+ (company-details document for
+ <a href="http://wiki.apache.org/solr/Join" target="_new">join</a>
+ )
+</div>
+
+<div>
+ Address: #field('address_s')
+</div>
+
+#parse('debug.vm')
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.css b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.css
new file mode 100644
index 000000000..97a62e0bb
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.css
@@ -0,0 +1,48 @@
+.ac_results {
+ padding: 0px;
+ border: 1px solid black;
+ background-color: white;
+ overflow: hidden;
+ z-index: 99999;
+}
+
+.ac_results ul {
+ width: 100%;
+ list-style-position: outside;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.ac_results li {
+ margin: 0px;
+ padding: 2px 5px;
+ cursor: default;
+ display: block;
+ /*
+ if width will be 100% horizontal scrollbar will apear
+ when scroll mode will be used
+ */
+ /*width: 100%;*/
+ font: menu;
+ font-size: 12px;
+ /*
+ it is very important, if line-height not setted or setted
+ in relative units scroll will be broken in firefox
+ */
+ line-height: 16px;
+ overflow: hidden;
+}
+
+.ac_loading {
+ background: white url('indicator.gif') right center no-repeat;
+}
+
+.ac_odd {
+ background-color: #eee;
+}
+
+.ac_over {
+ background-color: #0A246A;
+ color: white;
+}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js
new file mode 100644
index 000000000..7ede3b8a3
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js
@@ -0,0 +1,763 @@
+/*
+ * Autocomplete - jQuery plugin 1.1pre
+ *
+ * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: Id: jquery.autocomplete.js 5785 2008-07-12 10:37:33Z joern.zaefferer $
+ *
+ */
+
+;(function($) {
+
+$.fn.extend({
+ autocomplete: function(urlOrData, options) {
+ var isUrl = typeof urlOrData == "string";
+ options = $.extend({}, $.Autocompleter.defaults, {
+ url: isUrl ? urlOrData : null,
+ data: isUrl ? null : urlOrData,
+ delay: isUrl ? $.Autocompleter.defaults.delay : 10,
+ max: options && !options.scroll ? 10 : 150
+ }, options);
+
+ // if highlight is set to false, replace it with a do-nothing function
+ options.highlight = options.highlight || function(value) { return value; };
+
+ // if the formatMatch option is not specified, then use formatItem for backwards compatibility
+ options.formatMatch = options.formatMatch || options.formatItem;
+
+ return this.each(function() {
+ new $.Autocompleter(this, options);
+ });
+ },
+ result: function(handler) {
+ return this.bind("result", handler);
+ },
+ search: function(handler) {
+ return this.trigger("search", [handler]);
+ },
+ flushCache: function() {
+ return this.trigger("flushCache");
+ },
+ setOptions: function(options){
+ return this.trigger("setOptions", [options]);
+ },
+ unautocomplete: function() {
+ return this.trigger("unautocomplete");
+ }
+});
+
+$.Autocompleter = function(input, options) {
+
+ var KEY = {
+ UP: 38,
+ DOWN: 40,
+ DEL: 46,
+ TAB: 9,
+ RETURN: 13,
+ ESC: 27,
+ COMMA: 188,
+ PAGEUP: 33,
+ PAGEDOWN: 34,
+ BACKSPACE: 8
+ };
+
+ // Create $ object for input element
+ var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
+
+ var timeout;
+ var previousValue = "";
+ var cache = $.Autocompleter.Cache(options);
+ var hasFocus = 0;
+ var lastKeyPressCode;
+ var config = {
+ mouseDownOnSelect: false
+ };
+ var select = $.Autocompleter.Select(options, input, selectCurrent, config);
+
+ var blockSubmit;
+
+ // prevent form submit in opera when selecting with return key
+ $.browser.opera && $(input.form).bind("submit.autocomplete", function() {
+ if (blockSubmit) {
+ blockSubmit = false;
+ return false;
+ }
+ });
+
+ // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
+ $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
+ // track last key pressed
+ lastKeyPressCode = event.keyCode;
+ switch(event.keyCode) {
+
+ case KEY.UP:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.prev();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.DOWN:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.next();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.PAGEUP:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.pageUp();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ case KEY.PAGEDOWN:
+ event.preventDefault();
+ if ( select.visible() ) {
+ select.pageDown();
+ } else {
+ onChange(0, true);
+ }
+ break;
+
+ // matches also semicolon
+ case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
+ case KEY.TAB:
+ case KEY.RETURN:
+ if( selectCurrent() ) {
+ // stop default to prevent a form submit, Opera needs special handling
+ event.preventDefault();
+ blockSubmit = true;
+ return false;
+ }
+ break;
+
+ case KEY.ESC:
+ select.hide();
+ break;
+
+ default:
+ clearTimeout(timeout);
+ timeout = setTimeout(onChange, options.delay);
+ break;
+ }
+ }).focus(function(){
+ // track whether the field has focus, we shouldn't process any
+ // results if the field no longer has focus
+ hasFocus++;
+ }).blur(function() {
+ hasFocus = 0;
+ if (!config.mouseDownOnSelect) {
+ hideResults();
+ }
+ }).click(function() {
+ // show select when clicking in a focused field
+ if ( hasFocus++ > 1 && !select.visible() ) {
+ onChange(0, true);
+ }
+ }).bind("search", function() {
+ // TODO why not just specifying both arguments?
+ var fn = (arguments.length > 1) ? arguments[1] : null;
+ function findValueCallback(q, data) {
+ var result;
+ if( data && data.length ) {
+ for (var i=0; i < data.length; i++) {
+ if( data[i].result.toLowerCase() == q.toLowerCase() ) {
+ result = data[i];
+ break;
+ }
+ }
+ }
+ if( typeof fn == "function" ) fn(result);
+ else $input.trigger("result", result && [result.data, result.value]);
+ }
+ $.each(trimWords($input.val()), function(i, value) {
+ request(value, findValueCallback, findValueCallback);
+ });
+ }).bind("flushCache", function() {
+ cache.flush();
+ }).bind("setOptions", function() {
+ $.extend(options, arguments[1]);
+ // if we've updated the data, repopulate
+ if ( "data" in arguments[1] )
+ cache.populate();
+ }).bind("unautocomplete", function() {
+ select.unbind();
+ $input.unbind();
+ $(input.form).unbind(".autocomplete");
+ });
+
+
+ function selectCurrent() {
+ var selected = select.selected();
+ if( !selected )
+ return false;
+
+ var v = selected.result;
+ previousValue = v;
+
+ if ( options.multiple ) {
+ var words = trimWords($input.val());
+ if ( words.length > 1 ) {
+ v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
+ }
+ v += options.multipleSeparator;
+ }
+
+ $input.val(v);
+ hideResultsNow();
+ $input.trigger("result", [selected.data, selected.value]);
+ return true;
+ }
+
+ function onChange(crap, skipPrevCheck) {
+ if( lastKeyPressCode == KEY.DEL ) {
+ select.hide();
+ return;
+ }
+
+ var currentValue = $input.val();
+
+ if ( !skipPrevCheck && currentValue == previousValue )
+ return;
+
+ previousValue = currentValue;
+
+ currentValue = lastWord(currentValue);
+ if ( currentValue.length >= options.minChars) {
+ $input.addClass(options.loadingClass);
+ if (!options.matchCase)
+ currentValue = currentValue.toLowerCase();
+ request(currentValue, receiveData, hideResultsNow);
+ } else {
+ stopLoading();
+ select.hide();
+ }
+ };
+
+ function trimWords(value) {
+ if ( !value ) {
+ return [""];
+ }
+ var words = value.split( options.multipleSeparator );
+ var result = [];
+ $.each(words, function(i, value) {
+ if ( $.trim(value) )
+ result[i] = $.trim(value);
+ });
+ return result;
+ }
+
+ function lastWord(value) {
+ if ( !options.multiple )
+ return value;
+ var words = trimWords(value);
+ return words[words.length - 1];
+ }
+
+ // fills in the input box w/the first match (assumed to be the best match)
+ // q: the term entered
+ // sValue: the first matching result
+ function autoFill(q, sValue){
+ // autofill in the complete box w/the first match as long as the user hasn't entered in more data
+ // if the last user key pressed was backspace, don't autofill
+ if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
+ // fill in the value (keep the case the user has typed)
+ $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
+ // select the portion of the value not typed by the user (so the next character will erase)
+ $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
+ }
+ };
+
+ function hideResults() {
+ clearTimeout(timeout);
+ timeout = setTimeout(hideResultsNow, 200);
+ };
+
+ function hideResultsNow() {
+ var wasVisible = select.visible();
+ select.hide();
+ clearTimeout(timeout);
+ stopLoading();
+ if (options.mustMatch) {
+ // call search and run callback
+ $input.search(
+ function (result){
+ // if no value found, clear the input box
+ if( !result ) {
+ if (options.multiple) {
+ var words = trimWords($input.val()).slice(0, -1);
+ $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
+ }
+ else
+ $input.val( "" );
+ }
+ }
+ );
+ }
+ if (wasVisible)
+ // position cursor at end of input field
+ $.Autocompleter.Selection(input, input.value.length, input.value.length);
+ };
+
+ function receiveData(q, data) {
+ if ( data && data.length && hasFocus ) {
+ stopLoading();
+ select.display(data, q);
+ autoFill(q, data[0].value);
+ select.show();
+ } else {
+ hideResultsNow();
+ }
+ };
+
+ function request(term, success, failure) {
+ if (!options.matchCase)
+ term = term.toLowerCase();
+ var data = cache.load(term);
+ data = null; // Avoid buggy cache and go to Solr every time
+ // recieve the cached data
+ if (data && data.length) {
+ success(term, data);
+ // if an AJAX url has been supplied, try loading the data now
+ } else if( (typeof options.url == "string") && (options.url.length > 0) ){
+
+ var extraParams = {
+ timestamp: +new Date()
+ };
+ $.each(options.extraParams, function(key, param) {
+ extraParams[key] = typeof param == "function" ? param() : param;
+ });
+
+ $.ajax({
+ // try to leverage ajaxQueue plugin to abort previous requests
+ mode: "abort",
+ // limit abortion to this input
+ port: "autocomplete" + input.name,
+ dataType: options.dataType,
+ url: options.url,
+ data: $.extend({
+ q: lastWord(term),
+ limit: options.max
+ }, extraParams),
+ success: function(data) {
+ var parsed = options.parse && options.parse(data) || parse(data);
+ cache.add(term, parsed);
+ success(term, parsed);
+ }
+ });
+ } else {
+ // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
+ select.emptyList();
+ failure(term);
+ }
+ };
+
+ function parse(data) {
+ var parsed = [];
+ var rows = data.split("\n");
+ for (var i=0; i < rows.length; i++) {
+ var row = $.trim(rows[i]);
+ if (row) {
+ row = row.split("|");
+ parsed[parsed.length] = {
+ data: row,
+ value: row[0],
+ result: options.formatResult && options.formatResult(row, row[0]) || row[0]
+ };
+ }
+ }
+ return parsed;
+ };
+
+ function stopLoading() {
+ $input.removeClass(options.loadingClass);
+ };
+
+};
+
+$.Autocompleter.defaults = {
+ inputClass: "ac_input",
+ resultsClass: "ac_results",
+ loadingClass: "ac_loading",
+ minChars: 1,
+ delay: 400,
+ matchCase: false,
+ matchSubset: true,
+ matchContains: false,
+ cacheLength: 10,
+ max: 100,
+ mustMatch: false,
+ extraParams: {},
+ selectFirst: false,
+ formatItem: function(row) { return row[0]; },
+ formatMatch: null,
+ autoFill: false,
+ width: 0,
+ multiple: false,
+ multipleSeparator: ", ",
+ highlight: function(value, term) {
+ return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
+ },
+ scroll: true,
+ scrollHeight: 180
+};
+
+$.Autocompleter.Cache = function(options) {
+
+ var data = {};
+ var length = 0;
+
+ function matchSubset(s, sub) {
+ if (!options.matchCase)
+ s = s.toLowerCase();
+ var i = s.indexOf(sub);
+ if (options.matchContains == "word"){
+ i = s.toLowerCase().search("\\b" + sub.toLowerCase());
+ }
+ if (i == -1) return false;
+ return i == 0 || options.matchContains;
+ };
+
+ function add(q, value) {
+ if (length > options.cacheLength){
+ flush();
+ }
+ if (!data[q]){
+ length++;
+ }
+ data[q] = value;
+ }
+
+ function populate(){
+ if( !options.data ) return false;
+ // track the matches
+ var stMatchSets = {},
+ nullData = 0;
+
+ // no url was specified, we need to adjust the cache length to make sure it fits the local data store
+ if( !options.url ) options.cacheLength = 1;
+
+ // track all options for minChars = 0
+ stMatchSets[""] = [];
+
+ // loop through the array and create a lookup structure
+ for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
+ var rawValue = options.data[i];
+ // if rawValue is a string, make an array otherwise just reference the array
+ rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
+
+ var value = options.formatMatch(rawValue, i+1, options.data.length);
+ if ( value === false )
+ continue;
+
+ var firstChar = value.charAt(0).toLowerCase();
+ // if no lookup array for this character exists, look it up now
+ if( !stMatchSets[firstChar] )
+ stMatchSets[firstChar] = [];
+
+ // if the match is a string
+ var row = {
+ value: value,
+ data: rawValue,
+ result: options.formatResult && options.formatResult(rawValue) || value
+ };
+
+ // push the current match into the set list
+ stMatchSets[firstChar].push(row);
+
+ // keep track of minChars zero items
+ if ( nullData++ < options.max ) {
+ stMatchSets[""].push(row);
+ }
+ };
+
+ // add the data items to the cache
+ $.each(stMatchSets, function(i, value) {
+ // increase the cache size
+ options.cacheLength++;
+ // add to the cache
+ add(i, value);
+ });
+ }
+
+ // populate any existing data
+ setTimeout(populate, 25);
+
+ function flush(){
+ data = {};
+ length = 0;
+ }
+
+ return {
+ flush: flush,
+ add: add,
+ populate: populate,
+ load: function(q) {
+ if (!options.cacheLength || !length)
+ return null;
+ /*
+ * if dealing w/local data and matchContains than we must make sure
+ * to loop through all the data collections looking for matches
+ */
+ if( !options.url && options.matchContains ){
+ // track all matches
+ var csub = [];
+ // loop through all the data grids for matches
+ for( var k in data ){
+ // don't search through the stMatchSets[""] (minChars: 0) cache
+ // this prevents duplicates
+ if( k.length > 0 ){
+ var c = data[k];
+ $.each(c, function(i, x) {
+ // if we've got a match, add it to the array
+ if (matchSubset(x.value, q)) {
+ csub.push(x);
+ }
+ });
+ }
+ }
+ return csub;
+ } else
+ // if the exact item exists, use it
+ if (data[q]){
+ return data[q];
+ } else
+ if (options.matchSubset) {
+ for (var i = q.length - 1; i >= options.minChars; i--) {
+ var c = data[q.substr(0, i)];
+ if (c) {
+ var csub = [];
+ $.each(c, function(i, x) {
+ if (matchSubset(x.value, q)) {
+ csub[csub.length] = x;
+ }
+ });
+ return csub;
+ }
+ }
+ }
+ return null;
+ }
+ };
+};
+
+$.Autocompleter.Select = function (options, input, select, config) {
+ var CLASSES = {
+ ACTIVE: "ac_over"
+ };
+
+ var listItems,
+ active = -1,
+ data,
+ term = "",
+ needsInit = true,
+ element,
+ list;
+
+ // Create results
+ function init() {
+ if (!needsInit)
+ return;
+ element = $("<div/>")
+ .hide()
+ .addClass(options.resultsClass)
+ .css("position", "absolute")
+ .appendTo(document.body);
+
+ list = $("<ul/>").appendTo(element).mouseover( function(event) {
+ if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
+ active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
+ $(target(event)).addClass(CLASSES.ACTIVE);
+ }
+ }).click(function(event) {
+ $(target(event)).addClass(CLASSES.ACTIVE);
+ select();
+ // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
+ input.focus();
+ return false;
+ }).mousedown(function() {
+ config.mouseDownOnSelect = true;
+ }).mouseup(function() {
+ config.mouseDownOnSelect = false;
+ });
+
+ if( options.width > 0 )
+ element.css("width", options.width);
+
+ needsInit = false;
+ }
+
+ function target(event) {
+ var element = event.target;
+ while(element && element.tagName != "LI")
+ element = element.parentNode;
+ // more fun with IE, sometimes event.target is empty, just ignore it then
+ if(!element)
+ return [];
+ return element;
+ }
+
+ function moveSelect(step) {
+ listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
+ movePosition(step);
+ var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
+ if(options.scroll) {
+ var offset = 0;
+ listItems.slice(0, active).each(function() {
+ offset += this.offsetHeight;
+ });
+ if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
+ list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
+ } else if(offset < list.scrollTop()) {
+ list.scrollTop(offset);
+ }
+ }
+ };
+
+ function movePosition(step) {
+ active += step;
+ if (active < 0) {
+ active = listItems.size() - 1;
+ } else if (active >= listItems.size()) {
+ active = 0;
+ }
+ }
+
+ function limitNumberOfItems(available) {
+ return options.max && options.max < available
+ ? options.max
+ : available;
+ }
+
+ function fillList() {
+ list.empty();
+ var max = limitNumberOfItems(data.length);
+ for (var i=0; i < max; i++) {
+ if (!data[i])
+ continue;
+ var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
+ if ( formatted === false )
+ continue;
+ var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
+ $.data(li, "ac_data", data[i]);
+ }
+ listItems = list.find("li");
+ if ( options.selectFirst ) {
+ listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
+ active = 0;
+ }
+ // apply bgiframe if available
+ if ( $.fn.bgiframe )
+ list.bgiframe();
+ }
+
+ return {
+ display: function(d, q) {
+ init();
+ data = d;
+ term = q;
+ fillList();
+ },
+ next: function() {
+ moveSelect(1);
+ },
+ prev: function() {
+ moveSelect(-1);
+ },
+ pageUp: function() {
+ if (active != 0 && active - 8 < 0) {
+ moveSelect( -active );
+ } else {
+ moveSelect(-8);
+ }
+ },
+ pageDown: function() {
+ if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
+ moveSelect( listItems.size() - 1 - active );
+ } else {
+ moveSelect(8);
+ }
+ },
+ hide: function() {
+ element && element.hide();
+ listItems && listItems.removeClass(CLASSES.ACTIVE);
+ active = -1;
+ },
+ visible : function() {
+ return element && element.is(":visible");
+ },
+ current: function() {
+ return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
+ },
+ show: function() {
+ var offset = $(input).offset();
+ element.css({
+ width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
+ top: offset.top + input.offsetHeight,
+ left: offset.left
+ }).show();
+ if(options.scroll) {
+ list.scrollTop(0);
+ list.css({
+ maxHeight: options.scrollHeight,
+ overflow: 'auto'
+ });
+
+ if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
+ var listHeight = 0;
+ listItems.each(function() {
+ listHeight += this.offsetHeight;
+ });
+ var scrollbarsVisible = listHeight > options.scrollHeight;
+ list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
+ if (!scrollbarsVisible) {
+ // IE doesn't recalculate width when scrollbar disappears
+ listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
+ }
+ }
+
+ }
+ },
+ selected: function() {
+ var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
+ return selected && selected.length && $.data(selected[0], "ac_data");
+ },
+ emptyList: function (){
+ list && list.empty();
+ },
+ unbind: function() {
+ element && element.remove();
+ }
+ };
+};
+
+$.Autocompleter.Selection = function(field, start, end) {
+ if( field.createTextRange ){
+ var selRange = field.createTextRange();
+ selRange.collapse(true);
+ selRange.moveStart("character", start);
+ selRange.moveEnd("character", end);
+ selRange.select();
+ } else if( field.setSelectionRange ){
+ field.setSelectionRange(start, end);
+ } else {
+ if( field.selectionStart ){
+ field.selectionStart = start;
+ field.selectionEnd = end;
+ }
+ }
+ field.focus();
+};
+
+})(jQuery);
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/layout.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/layout.vm
new file mode 100644
index 000000000..50f4c1bc8
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/layout.vm
@@ -0,0 +1,24 @@
+#**
+ * Overall HTML page layout
+ *#
+
+<html>
+<head>
+ #parse("head.vm")
+</head>
+ <body>
+ <div id="admin"><a href="#url_root/#/#core_name">Solr Admin</a></div>
+ <div id="header">
+ #parse("header.vm")
+ </div>
+ <div id="tabs">
+ #parse("tabs.vm")
+ </div>
+ <div id="content">
+ $content
+ </div>
+ <div id="footer">
+ #parse("footer.vm")
+ </div>
+ </body>
+</html>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/main.css b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/main.css
new file mode 100644
index 000000000..67278fb7b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/main.css
@@ -0,0 +1,231 @@
+#admin{
+ text-align: right;
+ vertical-align: top;
+}
+
+#head{
+ width: 100%;
+}
+.array-field {
+ border: 2px solid #474747;
+ background: #FFE9D8;
+ padding: 5px;
+ margin: 5px;
+}
+
+.array-field-list li {
+ list-style: circle;
+ margin-left: 20px;
+}
+
+.parsed_query_header {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+.parsed_query {
+ font-family: Courier, Courier New, monospaced;
+ font-size: 10pt;
+ font-weight: normal;
+}
+
+body {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 10pt;
+}
+
+a {
+ color: #43a4b1;
+}
+
+.navigators {
+ float: left;
+ margin: 5px;
+ margin-top: 0px;
+ width: 185px;
+ padding: 5px;
+ top: -20px;
+ position: relative;
+}
+
+.tabs-bar {
+ padding: 5px;
+ width: 100%;
+ border: 1px solid;
+ border-width: 0px 0px 1px 0px;
+}
+.tab {
+ font-weight: bold;
+ padding: 5px;
+ margin: 0px 5px;
+ border: 1px solid;
+ background-color: #dddddd;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.tab:hover {
+ background: #FEC293;
+}
+.tab.selected {
+ background-color: #ffffff;
+ border-bottom: 1px solid #ffffff;
+}
+
+.navigators h2 {
+ background: #FEC293;
+ padding: 2px 5px;
+}
+
+.navigators ul {
+ list-style: none;
+ margin: 0;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding-left: 10px;
+}
+
+.navigators ul li {
+ color: #999;
+ padding: 2px;
+}
+
+
+
+.facet-field {
+ font-weight: bold;
+}
+
+.highlight {
+ color: white;
+ background-color: gray;
+ border: 1px black solid;
+}
+
+.highlight-box {
+ margin-left: 15px;
+}
+
+.field-name {
+ font-weight: bold;
+}
+
+.highlighted-facet-field {
+ background: white;
+}
+
+.constraints {
+ margin-top: 10px;
+}
+
+#query-form{
+ width: 80%;
+}
+
+
+
+.query-box, .constraints {
+ padding: 5px;
+ margin: 5px;
+ font-weight: normal;
+ font-size: 24px;
+ letter-spacing: 0.08em;
+}
+
+.query-box #q {
+ margin-left: 8px;
+ width: 60%;
+ height: 50px;
+ border: 1px solid #999;
+ font-size: 1em;
+ padding: 0.4em;
+}
+
+.query-box {
+
+}
+
+.query-boost {
+
+ top: 10px;
+ left: 50px;
+ position: relative;
+ font-size: 0.8em;
+}
+
+.query-box .inputs{
+ left: 180px;
+ position: relative;
+
+}
+
+#logo {
+ width: 115px;
+ margin: 0px 0px 20px 12px;
+ border-style: none;
+}
+
+.pagination {
+ padding-left: 33%;
+ background: #eee;
+ margin: 5px;
+ margin-left: 210px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.result-document {
+ border: 1px solid #999;
+ padding: 5px;
+ margin: 5px;
+ margin-left: 210px;
+ margin-bottom: 15px;
+}
+
+.result-document div{
+ padding: 5px;
+}
+
+.result-title{
+ width:60%;
+}
+
+.result-body{
+ background: #ddd;
+}
+
+.mlt{
+
+}
+
+.map{
+ float: right;
+ position: relative;
+ top: -25px;
+}
+
+.result-document:nth-child(2n+1) {
+ background-color: #eee;
+}
+
+
+.selected-facet-field {
+ font-weight: bold;
+}
+
+li.show {
+ list-style: disc;
+}
+
+.group-value{
+ font-weight: bold;
+}
+
+.error {
+ color: white;
+ background-color: red;
+ left: 210px;
+ width:80%;
+ position: relative;
+
+}
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/mime_type_lists.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/mime_type_lists.vm
new file mode 100644
index 000000000..1468bbdbf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/mime_type_lists.vm
@@ -0,0 +1,68 @@
+#**
+ * Define some Mime-Types, short and long form
+ *#
+
+## MimeType to extension map for detecting file type
+## and showing proper icon
+## List of types match the icons in /solr/img/filetypes
+
+## Short MimeType Names
+## Was called $supportedtypes
+#set($supportedMimeTypes = "7z;ai;aiff;asc;audio;bin;bz2;c;cfc;cfm;chm;class;conf;cpp;cs;css;csv;deb;divx;doc;dot;eml;enc;file;gif;gz;hlp;htm;html;image;iso;jar;java;jpeg;jpg;js;lua;m;mm;mov;mp3;mpg;odc;odf;odg;odi;odp;ods;odt;ogg;pdf;pgp;php;pl;png;ppt;ps;py;ram;rar;rb;rm;rpm;rtf;sig;sql;swf;sxc;sxd;sxi;sxw;tar;tex;tgz;txt;vcf;video;vsd;wav;wma;wmv;xls;xml;xpi;xvid;zip")
+
+## Long Form: map MimeType headers to our Short names
+## Was called $extMap
+#set( $mimeExtensionsMap = {
+ "application/x-7z-compressed": "7z",
+ "application/postscript": "ai",
+ "application/pgp-signature": "asc",
+ "application/octet-stream": "bin",
+ "application/x-bzip2": "bz2",
+ "text/x-c": "c",
+ "application/vnd.ms-htmlhelp": "chm",
+ "application/java-vm": "class",
+ "text/css": "css",
+ "text/csv": "csv",
+ "application/x-debian-package": "deb",
+ "application/msword": "doc",
+ "message/rfc822": "eml",
+ "image/gif": "gif",
+ "application/winhlp": "hlp",
+ "text/html": "html",
+ "application/java-archive": "jar",
+ "text/x-java-source": "java",
+ "image/jpeg": "jpeg",
+ "application/javascript": "js",
+ "application/vnd.oasis.opendocument.chart": "odc",
+ "application/vnd.oasis.opendocument.formula": "odf",
+ "application/vnd.oasis.opendocument.graphics": "odg",
+ "application/vnd.oasis.opendocument.image": "odi",
+ "application/vnd.oasis.opendocument.presentation": "odp",
+ "application/vnd.oasis.opendocument.spreadsheet": "ods",
+ "application/vnd.oasis.opendocument.text": "odt",
+ "application/pdf": "pdf",
+ "application/pgp-encrypted": "pgp",
+ "image/png": "png",
+ "application/vnd.ms-powerpoint": "ppt",
+ "audio/x-pn-realaudio": "ram",
+ "application/x-rar-compressed": "rar",
+ "application/vnd.rn-realmedia": "rm",
+ "application/rtf": "rtf",
+ "application/x-shockwave-flash": "swf",
+ "application/vnd.sun.xml.calc": "sxc",
+ "application/vnd.sun.xml.draw": "sxd",
+ "application/vnd.sun.xml.impress": "sxi",
+ "application/vnd.sun.xml.writer": "sxw",
+ "application/x-tar": "tar",
+ "application/x-tex": "tex",
+ "text/plain": "txt",
+ "text/x-vcard": "vcf",
+ "application/vnd.visio": "vsd",
+ "audio/x-wav": "wav",
+ "audio/x-ms-wma": "wma",
+ "video/x-ms-wmv": "wmv",
+ "application/vnd.ms-excel": "xls",
+ "application/xml": "xml",
+ "application/x-xpinstall": "xpi",
+ "application/zip": "zip"
+})
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_bottom.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_bottom.vm
new file mode 100644
index 000000000..71b8bdf21
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_bottom.vm
@@ -0,0 +1,22 @@
+#**
+ * Paging and Statistics at bottom of results
+ *#
+
+## Usually rendered in pagination div tag
+
+#if($response.response.get('grouped'))
+ ## pass
+#else
+
+ #link_to_previous_page("previous")
+
+ <span class="results-found">$page.results_found</span>
+ results found.
+
+ Page <span class="page-num">$page.current_page_number</span>
+ of <span class="page-count">$page.page_count</span>
+
+ #link_to_next_page("next")
+
+#end
+<br/>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_top.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_top.vm
new file mode 100644
index 000000000..e0ac8ac89
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/pagination_top.vm
@@ -0,0 +1,29 @@
+#**
+ * Paging and Statistics at top of results
+ *#
+
+## Usually rendered in pagination div tag
+
+## Grouped Results / Not Paginated
+#if($response.response.get('grouped'))
+
+ <span>
+ <span class="results-found">
+ $response.response.get('grouped').size() group(s)
+ </span>
+ found in ${response.responseHeader.QTime} ms
+ </span>
+
+## Regular Results / Use Paging Links if needed
+#else
+
+ <span>
+ <span class="results-found">$page.results_found</span>
+ results found in
+ ${response.responseHeader.QTime} ms
+ </span>
+
+ Page <span class="page-num">$page.current_page_number</span>
+ of <span class="page-count">$page.page_count</span>
+
+#end ## end else non-grouped results, normal pagination
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/product_doc.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/product_doc.vm
new file mode 100644
index 000000000..c878d8c13
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/product_doc.vm
@@ -0,0 +1,32 @@
+#**
+ * Render a hit representing a Product
+ * assumed to have a field called "name"
+ *#
+
+<div class="result-title"><b>#field('name')</b><span class="mlt"> #if($params.getBool('mlt', false) == false)<a href="#lensNoQ&q=id:$docId&mlt=true">More Like This</a>#end</span></div>
+##do we have a physical store for this product
+#set($store = $doc.getFieldValue('store'))
+#if($store)<div class="map"><img src="http://maps.google.com/maps/api/staticmap?&zoom=12&size=150x80&maptype=roadmap&markers=$doc.getFieldValue('store')&sensor=false" /><div><small><a target="_map" href="http://maps.google.com/?q=$store&amp;source=embed">Larger Map</a></small></div></div>#end
+<div>Id: #field('id')</div>
+<div>Price: #field('price_c')</div>
+<div>Features: #field('features')</div>
+<div>In Stock: #field('inStock')</div>
+<div class="mlt">
+ #set($mlt = $mltResults.get($docId))
+ #set($mltOn = $params.getBool('mlt'))
+ #if($mltOn == true)<div class="field-name">Similar Items</div>#end
+ #if ($mltOn && $mlt && $mlt.size() > 0)
+ <ul>
+ #foreach($mltHit in $mlt)
+ #set($mltId = $mltHit.getFieldValue('id'))
+ <li><div><a href="#url_for_home?q=id:$mltId">$mltId</a></div><div><span class="field-name">Name:</span> $mltHit.getFieldValue('name')</div>
+ <div><span class="field-name">Price:</span> $!number.currency($mltHit.getFieldValue('price')) <span class="field-name">In Stock:</span> $mltHit.getFieldValue('inStock')</div>
+
+ </li>
+ #end
+ </ul>
+ #elseif($mltOn && $mlt.size() == 0)
+ <div>No Similar Items Found</div>
+ #end
+</div>
+#parse('debug.vm')
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query.vm
new file mode 100644
index 000000000..ddbab3fcf
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query.vm
@@ -0,0 +1,42 @@
+<div class="query-box">
+ <form id="query-form" action="#{url_for_home}" method="GET">
+ <div class="inputs">
+ <span #annTitle("Add the query using the &q= parameter")>Find: <input type="text" id="q" name="q" value="$!esc.html($params.get('q'))"/> <input type="submit" id="querySubmit"/> <input type="reset"/></span>
+ <div class="query-boost"><span #annTitle("Add the boost function &bf=price to the query")><input type="checkbox" name="bf" value="price" #if($request.params.get('bf') == 'price')checked="true"#end>Boost by Price</input></span>
+ #parse("querySpatial.vm")
+ #parse("queryGroup.vm")
+ </div>
+ </div>
+
+ #if($request.params.get('debugQuery'))
+ <input type="hidden" name="debugQuery" value="true"/>
+ #end
+ #if($annotate == true)
+ <input type="hidden" name="annotateBrowse" value="true"/>
+ #end
+ #foreach($fq in $request.params.getParams('fq'))
+ #if ($fq != "{!bbox}")
+ <input type="hidden" name="fq" id="allFQs" value="$esc.html($fq)"/>
+ #end
+ #end
+ <div class="constraints" #annTitle("Lists out the &fq filters. Click to remove.")>
+ #foreach($fq in $params.getParams('fq'))
+ #set($previous_fq_count=$velocityCount - 1)
+ #if($fq != '')
+ &gt; <a style="{text-decoration: line-through;}" href="#url_for_filters($request.params.getParams('fq').subList(0,$previous_fq_count))">$fq</a>
+ #end
+ #end
+ </div>
+ <div class="parsed_query_header">
+ #if($request.params.get('debugQuery'))
+ <a href="#" onclick='jQuery(this).siblings("div").toggle(); return false;'>toggle parsed query</a>
+ <div class="parsed_query" style="display:none">$response.response.debug.parsedquery</div>
+ #end
+ #set($queryOpts = $request.params.get("queryOpts"))
+ #if($queryOpts && $queryOpts != "")
+ <input type="hidden" name="queryOpts" value="$queryOpts"/>
+ #end
+ </div>
+ </form>
+
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_form.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_form.vm
new file mode 100644
index 000000000..70a0af20f
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_form.vm
@@ -0,0 +1,64 @@
+#**
+ * Renders the main query form
+ *#
+
+<div class="query-box">
+ <form id="query-form" action="#{url_for_home}" method="GET">
+
+ <div class="inputs">
+ <span #annTitle("Add the query using the &q= parameter")>
+ Find:
+ <input type="text" id="q" name="q" value="$!esc.html($params.get('q'))"/>
+ <input type="submit" id="querySubmit"/>
+ <input type="reset"/>
+ </span>
+ <div class="query-boost">
+ <span #annTitle("Add the boost function &bf=price to the query")>
+ <input type="checkbox" name="bf" value="price"
+ #if($request.params.get('bf') == 'price')checked="true"#end
+ >
+ Boost by Price
+ </input>
+ </span>
+ #parse("query_spatial.vm")
+ #parse("query_group.vm")
+ </div>
+ </div>
+
+ #if($request.params.get('debugQuery'))
+ <input type="hidden" name="debugQuery" value="true"/>
+ #end
+ #if($annotate == true)
+ <input type="hidden" name="annotateBrowse" value="true"/>
+ #end
+ #foreach($fq in $request.params.getParams('fq'))
+ #if ($fq != "{!bbox}")
+ <input type="hidden" name="fq" id="allFQs" value="$esc.html($fq)"/>
+ #end
+ #end
+
+ <div class="constraints" #annTitle("Lists out the &fq filters. Click to remove.")>
+ #foreach($fq in $params.getParams('fq'))
+ #set($previous_fq_count=$velocityCount - 1)
+ #if($fq != '')
+ &gt;
+ <a style="{text-decoration: line-through;}"
+ href="#url_for_filters($request.params.getParams('fq').subList(0,$previous_fq_count))"
+ >$fq</a>
+ #end
+ #end
+ </div>
+
+ <div class="parsed_query_header">
+ #if($request.params.get('debugQuery'))
+ <a href="#" onclick='jQuery(this).siblings("div").toggle(); return false;'>toggle parsed query</a>
+ <div class="parsed_query" style="display:none">$response.response.debug.parsedquery</div>
+ #end
+ #set($queryOpts = $request.params.get("queryOpts"))
+ #if($queryOpts && $queryOpts != "")
+ <input type="hidden" name="queryOpts" value="$queryOpts"/>
+ #end
+ </div>
+
+ </form>
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_group.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_group.vm
new file mode 100644
index 000000000..42e54573e
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_group.vm
@@ -0,0 +1,43 @@
+#**
+ * Query settings for grouping by fields,
+ * e.g.: Manufacturer or Popularity
+ *#
+
+#set($queryOpts = $params.get("queryOpts"))
+
+#if($queryOpts == "group")
+ <div>
+ #set($groupF = $request.params.get('group.field'))
+
+ <label #annTitle("Add the &group.field parameter. Multiselect is supported")>
+ Group By:
+ <select id="group" name="group.field" multiple="true">
+ ## TODO: Handle multiple selects correctly
+ ## TODO: fix empty / "No Group" selection
+
+ <option value=""
+ #if($groupF == '')selected="true"#end
+ >
+ No Group
+ </option>
+
+ <option value="manu_exact"
+ #if($groupF == 'manu_exact')selected="true"#end
+ >
+ Manufacturer
+ </option>
+
+ <option value="popularity"
+ #if($groupF == 'popularity')selected="true"#end
+ >
+ Popularity
+ </option>
+
+ </select>
+ </label>
+
+ <input type="hidden" name="group" value="true"/>
+
+ </div>
+
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_spatial.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_spatial.vm
new file mode 100644
index 000000000..2bc204493
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/query_spatial.vm
@@ -0,0 +1,75 @@
+#**
+ * Query logic for selecting location / Geospatial search
+ *#
+
+#set($queryOpts = $params.get("queryOpts"))
+
+#if($queryOpts == "spatial")
+
+ <div>
+
+ #set($loc = $request.params.get('pt'))
+ ## Normalize first trip through to "none" because
+ ## an empty string generates an error message later on
+ #if( ! $loc )
+ #set( $loc = "none" )
+ #end
+
+ #set($dist = $request.params.get('d', "10"))
+
+ ## Cities for The Select List
+ #set( $cities = {
+ "none": "No Filter",
+ "45.17614,-93.87341": "Buffalo, MN",
+ "37.7752,-100.0232": "Dodge City, KS",
+ "35.0752,-97.032": "Oklahoma City, OK",
+ "37.7752,-122.4232": "San Francisco CA"
+ })
+
+ <label #annTitle("Add the &pt parameter")>
+ Location Filter:
+ <select id="pt" name="pt">
+
+ ## Generate <option> tag for each city
+ #foreach( $city_lon_lat in $cities.keySet() )
+ #set( $city_name = $cities.get($city_lon_lat) )
+ <option value="$city_lon_lat"
+ #if($loc == $city_lon_lat)selected="true"#end
+ >
+ $city_name
+ </option>
+ #end
+
+ </select>
+
+ </label>
+
+ <span #annTitle("Add the &d parameter")>
+ Distance (KM):
+ <input id="d" name="d" type="text" size="6"
+ value="#if($dist != '')${dist}#{else}10#end" ## TODO: isn't the default of 10 above sufficient? no if/else needed?
+ />
+ </span>
+
+ <input type="hidden" name="sfield" value="store"/>
+ <input type="hidden" id="spatialFQ" name="fq" value=""/>
+ <input type="hidden" name="queryOpts" value="spatial"/>
+
+ </div>
+
+ <script type="text/javascript">
+ $('#query-form').submit(function() {
+ if ($("#pt").val() != "none") {
+ $("#spatialFQ").val("{!bbox}");
+ }
+ $fqs = $("#allFQs").val();
+ $fqs = $fqs.replace("{!bbox}", "");
+ if ($fqs == ''){
+ $("#allFQs").remove();
+ }
+ $("#allFQs").val($fqs);
+ return true;
+ });
+ </script>
+
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/results_list.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/results_list.vm
new file mode 100644
index 000000000..f73532b2d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/results_list.vm
@@ -0,0 +1,22 @@
+#**
+ * Render the main Results List
+ *#
+
+## Usually displayed inside <div class="results">
+
+#if($response.response.get('grouped'))
+
+ #foreach($grouping in $response.response.get('grouped'))
+ #parse("hit_grouped.vm")
+ #end
+
+#else
+
+ #foreach($doc in $response.results)
+ #parse("hit.vm")
+ ## Can get an extremely simple view of the doc
+ ## which might be nicer for debugging
+ ##parse("hit_plain.vm")
+ #end
+
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/richtext_doc.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/richtext_doc.vm
new file mode 100644
index 000000000..74f1c0756
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/richtext_doc.vm
@@ -0,0 +1,153 @@
+#**
+ * Render a complex document in the results list
+ *#
+
+## Load Mime-Type List and Mapping
+#parse('mime_type_lists.vm')
+## Sets:
+## * supportedMimeTypes, AKA supportedtypes
+## * mimeExtensionsMap, AKA extMap
+
+## Title
+#if($doc.getFieldValue('title'))
+ #set($title = $esc.html($doc.getFirstValue('title')))
+#else
+ #set($title = "["+$doc.getFieldValue('id')+"]")
+#end
+
+## URL
+#if($doc.getFieldValue('url'))
+ #set($url = $doc.getFieldValue('url'))
+#elseif($doc.getFieldValue('resourcename'))
+ #set($url = "file:///$doc.getFieldValue('resourcename')")
+#else
+ #set($url = "$doc.getFieldValue('id')")
+#end
+
+## Sort out Mime-Type
+#set($ct = $doc.getFirstValue('content_type').split(";").get(0))
+#set($filename = $doc.getFieldValue('resourcename'))
+#set($filetype = false)
+#set($filetype = $mimeExtensionsMap.get($ct))
+
+## TODO: falling back to file extension is convenient,
+## except when you don't have an icon for that extension
+## example "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
+## document with a .docx extension.
+## It'd be nice to fall back to an "unknown" or the existing "file" type
+## We sort of do this below, but only if the filename has no extension
+## (anything after the last dot).
+
+#if(!$filetype)
+ #set($filetype = $filename.substring($filename.lastIndexOf(".")).substring(1))
+#end
+
+## #if(!$filetype)
+## #set($filetype = "file")
+## #end
+## #if(!$supportedMimeTypes.contains($filetype))
+## #set($filetype = "file")
+## #end
+
+## Row 1: Icon and Title and mlt link
+<div class="result-title">
+ ## Icon
+ ## Small file type icons from http://www.splitbrain.org/projects/file_icons (public domain)
+ <img src="#{url_root}/img/filetypes/${filetype}.png" align="center">
+
+ ## Title, hyperlinked
+ <a href="${url}" target="_blank">
+ <b>$title</b></a>
+
+ ## Link for MLT / More Like This / Find Similar
+ <span class="mlt">
+ #if($params.getBool('mlt', false) == false)
+ <a href="#lensNoQ&q=id:%22$docId%22&mlt=true">
+ More Like This</a>
+ #end
+ </span>
+
+</div>
+
+## Row 2?: ID / URL
+<div>
+ Id: #field('id')
+</div>
+
+## Resource Name
+<div>
+ #if($doc.getFieldValue('resourcename'))
+ Resource name: $filename
+ #elseif($url)
+ URL: $url
+ #end
+ #if($ct)
+ ($ct)
+ #end
+</div>
+
+## Author
+#if($doc.getFieldValue('author'))
+ <div>
+ Author: #field('author')
+ </div>
+#end
+
+## Last_Modified Date
+#if($doc.getFieldValue('last_modified'))
+ <div>
+ last-modified:
+ #field('last_modified')
+ </div>
+#end
+
+## Main content of doc
+<div class="result-body">
+ #field('content')
+</div>
+
+## Display Similar Documents / MLT = More Like This
+<div class="mlt">
+ #set($mlt = $mltResults.get($docId))
+ #set($mltOn = $params.getBool('mlt'))
+ #if($mltOn == true)
+ <div class="field-name">
+ Similar Items
+ </div>
+ #end
+ ## If has MLT enabled An Entries to show
+ #if ($mltOn && $mlt && $mlt.size() > 0)
+ <ul>
+ #foreach($mltHit in $mlt)
+ #set($mltId = $mltHit.getFieldValue('id'))
+ <li>
+ <div>
+ <a href="#url_for_home?q=id:$mltId">
+ $mltId</a>
+ </div>
+ <div>
+ <span class="field-name">
+ Title:
+ </span>
+ $mltHit.getFieldValue('title')
+ </div>
+ <div>
+ <span class="field-name">
+ Author:
+ </span>
+ $mltHit.getFieldValue('author')
+ <span class="field-name">
+ Description:
+ </span>
+ $mltHit.getFieldValue('description')
+ </div>
+ </li>
+ #end ## end for each mltHit in $mlt
+ </ul>
+ ## Else MLT Enabled but no mlt results for this query
+ #elseif($mltOn && $mlt.size() == 0)
+ <div>No Similar Items Found</div>
+ #end
+</div> ## div class=mlt
+
+#parse('debug.vm')
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/suggest.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/suggest.vm
new file mode 100644
index 000000000..dae6b830d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/suggest.vm
@@ -0,0 +1,8 @@
+#**
+ * Provides cynamic spelling suggestions
+ * as you type in the search form
+ *#
+
+#foreach($t in $response.response.terms.name)
+ $t.key
+#end
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/tabs.vm b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/tabs.vm
new file mode 100644
index 000000000..da19cbc0b
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/velocity/tabs.vm
@@ -0,0 +1,50 @@
+#**
+ * Provides navigation/access to Advanced search options
+ * Usually displayed near the top of the page
+ *#
+
+##TODO: Make some nice tabs here
+
+#set($queryOpts = $params.get("queryOpts"))
+
+<div class="tabs-bar" #annTitle("Click the link to demonstrate various Solr capabilities")>
+
+ <span>Type of Search:</span>
+
+ ##queryOpts=$queryOpts
+
+ ## return to Simple Search
+ ##set( $selected = ($queryOpts && $queryOpts != "") )
+ #set( $selected = ! $queryOpts )
+ <span class="tab #if($selected)selected#end">
+ #if($selected)
+ Simple
+ #else
+ <a href="#url_for_home/?#debug#annotate">
+ Simple</a>
+ #end
+ </span>
+
+ ## GEO-Spatial / Location Based
+ #set( $selected = ($queryOpts == "spatial") )
+ <span class="tab #if($selected)selected#end">
+ #if($selected)
+ Spatial
+ #else
+ <a href="#url_for_home?&queryOpts=spatial#debug#annotate">
+ Spatial</a>
+ #end
+ </span>
+
+ ## Group By Field
+ #set( $selected = ($queryOpts == "group") )
+ <span class="tab #if($selected)selected#end">
+ #if($selected)
+ Group By
+ #else
+ <a href="#url_for_home?#debug#annotate&queryOpts=group&group=true&group.field=manu_exact">
+ Group By</a>
+ #end
+ </span>
+
+</div>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example.xsl b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example.xsl
new file mode 100644
index 000000000..b89927008
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+ <xsl:output media-type="text/html" encoding="UTF-8"/>
+
+ <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+
+ <xsl:template match='/'>
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <xsl:call-template name="css"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$title"/></h1>
+ <div class="note">
+ This has been formatted by the sample "example.xsl" transform -
+ use your own XSLT to get a nicer page
+ </div>
+ <xsl:apply-templates select="response/result/doc"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <div class="doc">
+ <table width="100%">
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </table>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ <xsl:param name="pos"></xsl:param>
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+
+ <xsl:if test="boolean(//lst[@name='explain'])">
+ <xsl:element name="a">
+ <!-- can't allow whitespace here -->
+ <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+ <br/>
+ <xsl:element name="div">
+ <xsl:attribute name="class">exp</xsl:attribute>
+ <xsl:attribute name="id">
+ <xsl:value-of select="concat('exp-',$pos)" />
+ </xsl:attribute>
+ <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+ </xsl:element>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="doc/arr" priority="100">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="*">
+ <li><xsl:value-of select="."/></li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+
+ <xsl:template name="css">
+ <script>
+ function toggle(id) {
+ var obj = document.getElementById(id);
+ obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+ }
+ </script>
+ <style type="text/css">
+ body { font-family: "Lucida Grande", sans-serif }
+ td.name { font-style: italic; font-size:80%; }
+ td { vertical-align: top; }
+ ul { margin: 0px; margin-left: 1em; padding: 0px; }
+ .note { font-size:80%; }
+ .doc { margin-top: 1em; border-top: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ </style>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_atom.xsl b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_atom.xsl
new file mode 100644
index 000000000..b6c23151d
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_atom.xsl
@@ -0,0 +1,67 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+
+ <xsl:template match='/'>
+ <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Example Solr Atom 1.0 Feed</title>
+ <subtitle>
+ This has been formatted by the sample "example_atom.xsl" transform -
+ use your own XSLT to get a nicer Atom feed.
+ </subtitle>
+ <author>
+ <name>Apache Solr</name>
+ <email>solr-user@lucene.apache.org</email>
+ </author>
+ <link rel="self" type="application/atom+xml"
+ href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+ <updated>
+ <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+ </updated>
+ <id>tag:localhost,2007:example</id>
+ <xsl:apply-templates select="response/result/doc"/>
+ </feed>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <entry>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link href="http://localhost:8983/solr/select?q={$id}"/>
+ <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+ <summary><xsl:value-of select="arr[@name='features']"/></summary>
+ <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+ </entry>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_rss.xsl b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_rss.xsl
new file mode 100644
index 000000000..c8ab5bfb1
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/example_rss.xsl
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output
+ method="xml"
+ encoding="utf-8"
+ media-type="application/xml"
+ />
+ <xsl:template match='/'>
+ <rss version="2.0">
+ <channel>
+ <title>Example Solr RSS 2.0 Feed</title>
+ <link>http://localhost:8983/solr</link>
+ <description>
+ This has been formatted by the sample "example_rss.xsl" transform -
+ use your own XSLT to get a nicer RSS feed.
+ </description>
+ <language>en-us</language>
+ <docs>http://localhost:8983/solr</docs>
+ <xsl:apply-templates select="response/result/doc"/>
+ </channel>
+ </rss>
+ </xsl:template>
+
+ <!-- search results xslt -->
+ <xsl:template match="doc">
+ <xsl:variable name="id" select="str[@name='id']"/>
+ <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+ <item>
+ <title><xsl:value-of select="str[@name='name']"/></title>
+ <link>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </link>
+ <description>
+ <xsl:value-of select="arr[@name='features']"/>
+ </description>
+ <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+ <guid>
+ http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+ </guid>
+ </item>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/luke.xsl b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/luke.xsl
new file mode 100644
index 000000000..05fb5bfee
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/luke.xsl
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<!--
+ Display the luke request handler with graphs
+ -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ version="1.0"
+ >
+ <xsl:output
+ method="html"
+ encoding="UTF-8"
+ media-type="text/html"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ />
+
+ <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <link rel="stylesheet" type="text/css" href="solr-admin.css"/>
+ <link rel="icon" href="favicon.ico" type="image/x-icon"/>
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
+ <title>
+ <xsl:value-of select="$title"/>
+ </title>
+ <xsl:call-template name="css"/>
+
+ </head>
+ <body>
+ <h1>
+ <xsl:value-of select="$title"/>
+ </h1>
+ <div class="doc">
+ <ul>
+ <xsl:if test="response/lst[@name='index']">
+ <li>
+ <a href="#index">Index Statistics</a>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <li>
+ <a href="#fields">Field Statistics</a>
+ <ul>
+ <xsl:for-each select="response/lst[@name='fields']/lst">
+ <li>
+ <a href="#{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <li>
+ <a href="#doc">Document statistics</a>
+ </li>
+ </xsl:if>
+ </ul>
+ </div>
+ <xsl:if test="response/lst[@name='index']">
+ <h2><a name="index"/>Index Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='index']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='fields']">
+ <h2><a name="fields"/>Field Statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='fields']"/>
+ </xsl:if>
+ <xsl:if test="response/lst[@name='doc']">
+ <h2><a name="doc"/>Document statistics</h2>
+ <xsl:apply-templates select="response/lst[@name='doc']"/>
+ </xsl:if>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="lst">
+ <xsl:if test="parent::lst">
+ <tr>
+ <td colspan="2">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </td>
+ </tr>
+ </xsl:if>
+ <xsl:if test="not(parent::lst)">
+ <div class="doc">
+ <xsl:call-template name="list"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="list">
+ <xsl:if test="count(child::*)>0">
+ <table>
+ <thead>
+ <tr>
+ <th colspan="2">
+ <p>
+ <a name="{@name}"/>
+ </p>
+ <xsl:value-of select="@name"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:choose>
+ <xsl:when
+ test="@name='histogram'">
+ <tr>
+ <td colspan="2">
+ <xsl:call-template name="histogram"/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tbody>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="histogram">
+ <div class="doc">
+ <xsl:call-template name="barchart">
+ <xsl:with-param name="max_bar_width">50</xsl:with-param>
+ <xsl:with-param name="iwidth">800</xsl:with-param>
+ <xsl:with-param name="iheight">160</xsl:with-param>
+ <xsl:with-param name="fill">blue</xsl:with-param>
+ </xsl:call-template>
+ </div>
+ </xsl:template>
+
+ <xsl:template name="barchart">
+ <xsl:param name="max_bar_width"/>
+ <xsl:param name="iwidth"/>
+ <xsl:param name="iheight"/>
+ <xsl:param name="fill"/>
+ <xsl:variable name="max">
+ <xsl:for-each select="int">
+ <xsl:sort data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="bars">
+ <xsl:value-of select="count(int)"/>
+ </xsl:variable>
+ <xsl:variable name="bar_width">
+ <xsl:choose>
+ <xsl:when test="$max_bar_width &lt; ($iwidth div $bars)">
+ <xsl:value-of select="$max_bar_width"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$iwidth div $bars"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <table class="histogram">
+ <tbody>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="."/>
+ <div class="histogram">
+ <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
+ </div>
+ </td>
+ </xsl:for-each>
+ </tr>
+ <tr>
+ <xsl:for-each select="int">
+ <td>
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:for-each>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="keyvalue">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="int|bool|long|float|double|uuid|date">
+ <xsl:call-template name="keyvalue"/>
+ </xsl:template>
+
+ <xsl:template match="arr">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <ul>
+ <xsl:for-each select="child::*">
+ <li>
+ <xsl:apply-templates/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="str">
+ <xsl:choose>
+ <xsl:when test="@name='schema' or @name='index' or @name='flags'">
+ <xsl:call-template name="schema"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="keyvalue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="schema">
+ <tr>
+ <td class="name">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td class="value">
+ <xsl:if test="contains(.,'unstored')">
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <xsl:if test="not(contains(.,'unstored'))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="charList">
+ <xsl:value-of select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template name="infochar2string">
+ <xsl:param name="i">1</xsl:param>
+ <xsl:param name="charList"/>
+
+ <xsl:variable name="char">
+ <xsl:value-of select="substring($charList,$i,1)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$char='I'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
+ <xsl:when test="$char='T'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
+ <xsl:when test="$char='S'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
+ <xsl:when test="$char='M'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
+ <xsl:when test="$char='V'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
+ <xsl:when test="$char='o'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
+ <xsl:when test="$char='p'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
+ <xsl:when test="$char='O'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
+ <xsl:when test="$char='L'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
+ <xsl:when test="$char='B'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
+ <xsl:when test="$char='C'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
+ <xsl:when test="$char='f'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
+ <xsl:when test="$char='l'">
+ <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="not($i>=string-length($charList))">
+ <xsl:call-template name="infochar2string">
+ <xsl:with-param name="i">
+ <xsl:value-of select="$i+1"/>
+ </xsl:with-param>
+ <xsl:with-param name="charList">
+ <xsl:value-of select="$charList"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="css">
+ <style type="text/css">
+ <![CDATA[
+ td.name {font-style: italic; font-size:80%; }
+ .doc { margin: 0.5em; border: solid grey 1px; }
+ .exp { display: none; font-family: monospace; white-space: pre; }
+ div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
+ table.histogram { width: auto; vertical-align: bottom; }
+ table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
+ ]]>
+ </style>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/updateXml.xsl b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/updateXml.xsl
new file mode 100644
index 000000000..a96e1d024
--- /dev/null
+++ b/solr-8.1.1/server/solr/configsets/sample_techproducts_configs/conf/xslt/updateXml.xsl
@@ -0,0 +1,70 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!--
+ Simple transform of Solr query response into Solr Update XML compliant XML.
+ When used in the xslt response writer you will get UpdaateXML as output.
+ But you can also store a query response XML to disk and feed this XML to
+ the XSLTUpdateRequestHandler to index the content. Provided as example only.
+ See http://wiki.apache.org/solr/XsltUpdateRequestHandler for more info
+ -->
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+ <xsl:output media-type="text/xml" method="xml" indent="yes"/>
+
+ <xsl:template match='/'>
+ <add>
+ <xsl:apply-templates select="response/result/doc"/>
+ </add>
+ </xsl:template>
+
+ <!-- Ignore score (makes no sense to index) -->
+ <xsl:template match="doc/*[@name='score']" priority="100">
+ </xsl:template>
+
+ <xsl:template match="doc">
+ <xsl:variable name="pos" select="position()"/>
+ <doc>
+ <xsl:apply-templates>
+ <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+ </xsl:apply-templates>
+ </doc>
+ </xsl:template>
+
+ <!-- Flatten arrays to duplicate field lines -->
+ <xsl:template match="doc/arr" priority="100">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:for-each select="*">
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+
+
+ <xsl:template match="doc/*">
+ <xsl:variable name="fn" select="@name"/>
+
+ <xsl:element name="field">
+ <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/contractions_ca.txt b/solr-8.1.1/server/solr/dash/conf/lang/contractions_ca.txt
new file mode 100644
index 000000000..307a85f91
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/contractions_ca.txt
@@ -0,0 +1,8 @@
+# Set of Catalan contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+l
+m
+n
+s
+t
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/contractions_fr.txt b/solr-8.1.1/server/solr/dash/conf/lang/contractions_fr.txt
new file mode 100644
index 000000000..f1bba51b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/contractions_fr.txt
@@ -0,0 +1,15 @@
+# Set of French contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+l
+m
+t
+qu
+n
+s
+j
+d
+c
+jusqu
+quoiqu
+lorsqu
+puisqu
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/contractions_ga.txt b/solr-8.1.1/server/solr/dash/conf/lang/contractions_ga.txt
new file mode 100644
index 000000000..9ebe7fa34
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/contractions_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+d
+m
+b
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/contractions_it.txt b/solr-8.1.1/server/solr/dash/conf/lang/contractions_it.txt
new file mode 100644
index 000000000..cac040953
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/contractions_it.txt
@@ -0,0 +1,23 @@
+# Set of Italian contractions for ElisionFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+c
+l
+all
+dall
+dell
+nell
+sull
+coll
+pell
+gl
+agl
+dagl
+degl
+negl
+sugl
+un
+m
+t
+s
+v
+d
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/hyphenations_ga.txt b/solr-8.1.1/server/solr/dash/conf/lang/hyphenations_ga.txt
new file mode 100644
index 000000000..4d2642cc5
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/hyphenations_ga.txt
@@ -0,0 +1,5 @@
+# Set of Irish hyphenations for StopFilter
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+h
+n
+t
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stemdict_nl.txt b/solr-8.1.1/server/solr/dash/conf/lang/stemdict_nl.txt
new file mode 100644
index 000000000..441072971
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stemdict_nl.txt
@@ -0,0 +1,6 @@
+# Set of overrides for the dutch stemmer
+# TODO: load this as a resource from the analyzer and sync it in build.xml
+fiets fiets
+bromfiets bromfiets
+ei eier
+kind kinder
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stoptags_ja.txt b/solr-8.1.1/server/solr/dash/conf/lang/stoptags_ja.txt
new file mode 100644
index 000000000..71b750845
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stoptags_ja.txt
@@ -0,0 +1,420 @@
+#
+# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter.
+#
+# Any token with a part-of-speech tag that exactly matches those defined in this
+# file are removed from the token stream.
+#
+# Set your own stoptags by uncommenting the lines below. Note that comments are
+# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists,
+# etc. that can be useful for building you own stoptag set.
+#
+# The entire possible tagset is provided below for convenience.
+#
+#####
+# noun: unclassified nouns
+#å詞
+#
+# noun-common: Common nouns or nouns where the sub-classification is undefined
+#å詞-一般
+#
+# noun-proper: Proper nouns where the sub-classification is undefined
+#å詞-固有å詞
+#
+# noun-proper-misc: miscellaneous proper nouns
+#å詞-固有å詞-一般
+#
+# noun-proper-person: Personal names where the sub-classification is undefined
+#å詞-固有å詞-人å
+#
+# noun-proper-person-misc: names that cannot be divided into surname and
+# given name; foreign names; names where the surname or given name is unknown.
+# e.g. ãŠå¸‚ã®æ–¹
+#å詞-固有å詞-人å-一般
+#
+# noun-proper-person-surname: Mainly Japanese surnames.
+# e.g. 山田
+#å詞-固有å詞-人å-å§“
+#
+# noun-proper-person-given_name: Mainly Japanese given names.
+# e.g. 太郎
+#å詞-固有å詞-人å-å
+#
+# noun-proper-organization: Names representing organizations.
+# e.g. 通産çœ, NHK
+#å詞-固有å詞-組織
+#
+# noun-proper-place: Place names where the sub-classification is undefined
+#å詞-固有å詞-地域
+#
+# noun-proper-place-misc: Place names excluding countries.
+# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都
+#å詞-固有å詞-地域-一般
+#
+# noun-proper-place-country: Country names.
+# e.g. 日本, オーストラリア
+#å詞-固有å詞-地域-国
+#
+# noun-pronoun: Pronouns where the sub-classification is undefined
+#å詞-代å詞
+#
+# noun-pronoun-misc: miscellaneous pronouns:
+# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ
+#å詞-代å詞-一般
+#
+# noun-pronoun-contraction: Spoken language contraction made by combining a
+# pronoun and the particle 'wa'.
+# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃã‚
+#å詞-代å詞-縮約
+#
+# noun-adverbial: Temporal nouns such as names of days or months that behave
+# like adverbs. Nouns that represent amount or ratios and can be used adverbially,
+# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡
+#å詞-副詞å¯èƒ½
+#
+# noun-verbal: Nouns that take arguments with case and can appear followed by
+# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹)
+# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り
+#å詞-サ変接続
+#
+# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na")
+# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚
+#å詞-形容動詞語幹
+#
+# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数.
+# e.g. 0, 1, 2, 何, 数, 幾
+#å詞-æ•°
+#
+# noun-affix: noun affixes where the sub-classification is undefined
+#å詞-éžè‡ªç«‹
+#
+# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that
+# attach to the base form of inflectional words, words that cannot be classified
+# into any of the other categories below. This category includes indefinite nouns.
+# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第,
+# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿,
+# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳,
+# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/
+#å詞-éžè‡ªç«‹-一般
+#
+# noun-affix-adverbial: noun affixes that that can behave as adverbs.
+# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ,
+# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹,
+# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所,
+# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾,
+# 儘, ä¾­, ã¿ãŽã‚Š, 矢先
+#å詞-éžè‡ªç«‹-副詞å¯èƒ½
+#
+# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars
+# with the stem よã†(ã ) ("you(da)").
+# e.g. よã†, ã‚„ã†, 様 (よã†)
+#å詞-éžè‡ªç«‹-助動詞語幹
+#
+# noun-affix-adjective-base: noun affixes that can connect to the indeclinable
+# connection form 㪠(aux "da").
+# e.g. ã¿ãŸã„, ãµã†
+#å詞-éžè‡ªç«‹-形容動詞語幹
+#
+# noun-special: special nouns where the sub-classification is undefined.
+#å詞-特殊
+#
+# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is
+# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base
+# form of inflectional words.
+# e.g. ãã†
+#å詞-特殊-助動詞語幹
+#
+# noun-suffix: noun suffixes where the sub-classification is undefined.
+#å詞-接尾
+#
+# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect
+# to ガル or タイ and can combine into compound nouns, words that cannot be classified into
+# any of the other categories below. In general, this category is more inclusive than
+# 接尾語 ("suffix") and is usually the last element in a compound noun.
+# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿,
+# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用
+#å詞-接尾-一般
+#
+# noun-suffix-person: Suffixes that form nouns and attach to person names more often
+# than other nouns.
+# e.g. å›, 様, è‘—
+#å詞-接尾-人å
+#
+# noun-suffix-place: Suffixes that form nouns and attach to place names more often
+# than other nouns.
+# e.g. 町, 市, 県
+#å詞-接尾-地域
+#
+# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that
+# can appear before スル ("suru").
+# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„
+#å詞-接尾-サ変接続
+#
+# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions,
+# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the
+# conjunctive form of inflectional words.
+# e.g. ãã†
+#å詞-接尾-助動詞語幹
+#
+# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive
+# form of inflectional words and appear before the copula ã  ("da").
+# e.g. çš„, ã’, ãŒã¡
+#å詞-接尾-形容動詞語幹
+#
+# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs.
+# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜)
+#å詞-接尾-副詞å¯èƒ½
+#
+# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category
+# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach
+# to numbers.
+# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, 時åŠ
+#å詞-接尾-助数詞
+#
+# noun-suffix-special: Special suffixes that mainly attach to inflecting words.
+# e.g. (楽ã—) ã•, (考ãˆ) æ–¹
+#å詞-接尾-特殊
+#
+# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words
+# together.
+# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦)
+#å詞-接続詞的
+#
+# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are
+# semantically verb-like.
+# e.g. ã”らん, ã”覧, 御覧, 頂戴
+#å詞-動詞éžè‡ªç«‹çš„
+#
+# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry,
+# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation")
+# is ã„ã‚ã ("iwaku").
+#å詞-引用文字列
+#
+# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and
+# behave like an adjective.
+# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„
+#å詞-ナイ形容詞語幹
+#
+#####
+# prefix: unclassified prefixes
+#接頭詞
+#
+# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms)
+# excluding numerical expressions.
+# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾)
+#接頭詞-å詞接続
+#
+# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb
+# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹.
+# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り)
+#接頭詞-動詞接続
+#
+# prefix-adjectival: Prefixes that attach to adjectives.
+# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„)
+#接頭詞-形容詞接続
+#
+# prefix-numerical: Prefixes that attach to numerical expressions.
+# e.g. ç´„, ãŠã‚ˆã, 毎時
+#接頭詞-数接続
+#
+#####
+# verb: unclassified verbs
+#動詞
+#
+# verb-main:
+#動詞-自立
+#
+# verb-auxiliary:
+#動詞-éžè‡ªç«‹
+#
+# verb-suffix:
+#動詞-接尾
+#
+#####
+# adjective: unclassified adjectives
+#形容詞
+#
+# adjective-main:
+#形容詞-自立
+#
+# adjective-auxiliary:
+#形容詞-éžè‡ªç«‹
+#
+# adjective-suffix:
+#形容詞-接尾
+#
+#####
+# adverb: unclassified adverbs
+#副詞
+#
+# adverb-misc: Words that can be segmented into one unit and where adnominal
+# modification is not possible.
+# e.g. ã‚ã„ã‹ã‚らãš, 多分
+#副詞-一般
+#
+# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«,
+# ãª, ã™ã‚‹, ã , etc.
+# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚
+#副詞-助詞類接続
+#
+#####
+# adnominal: Words that only have noun-modifying forms.
+# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†,
+# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ,
+# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã
+#連体詞
+#
+#####
+# conjunction: Conjunctions that can occur independently.
+# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹
+接続詞
+#
+#####
+# particle: unclassified particles.
+助詞
+#
+# particle-case: case particles where the subclassification is undefined.
+助詞-格助詞
+#
+# particle-case-misc: Case particles.
+# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦
+助詞-格助詞-一般
+#
+# particle-case-quote: the "to" that appears after nouns, a person’s speech,
+# quotation marks, expressions of decisions from a meeting, reasons, judgements,
+# conjectures, etc.
+# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...)
+助詞-格助詞-引用
+#
+# particle-case-compound: Compounds of particles and verbs that mainly behave
+# like case particles.
+# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦,
+# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹,
+# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—,
+# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦,
+# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦,
+# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹,
+# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹,
+# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ
+助詞-格助詞-連語
+#
+# particle-conjunctive:
+# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚,
+# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/,
+# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/
+助詞-接続助詞
+#
+# particle-dependency:
+# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž
+助詞-係助詞
+#
+# particle-adverbial:
+# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/,
+# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/,
+# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«,
+# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/,
+# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€)
+助詞-副助詞
+#
+# particle-interjective: particles with interjective grammatical roles.
+# e.g. (æ¾å³¶) ã‚„
+助詞-間投助詞
+#
+# particle-coordinate:
+# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら
+助詞-並立助詞
+#
+# particle-final:
+# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ,
+# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/
+助詞-終助詞
+#
+# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is
+# adverbial, conjunctive, or sentence final. For example:
+# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)ã€
+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)ã€
+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)ã€
+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)ã€
+# e.g. ã‹
+助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞
+#
+# particle-adnominalizer: The "no" that attaches to nouns and modifies
+# non-inflectional words.
+助詞-連体化
+#
+# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs
+# that are giongo, giseigo, or gitaigo.
+# e.g. ã«, ã¨
+助詞-副詞化
+#
+# particle-special: A particle that does not fit into one of the above classifications.
+# This includes particles that are used in Tanka, Haiku, and other poetry.
+# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶)
+助詞-特殊
+#
+#####
+# auxiliary-verb:
+助動詞
+#
+#####
+# interjection: Greetings and other exclamations.
+# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™,
+# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„
+#感動詞
+#
+#####
+# symbol: unclassified Symbols.
+記å·
+#
+# symbol-misc: A general symbol not in one of the categories below.
+# e.g. [○◎@$〒→+]
+記å·-一般
+#
+# symbol-comma: Commas
+# e.g. [,ã€]
+記å·-読点
+#
+# symbol-period: Periods and full stops.
+# e.g. [..。]
+記å·-å¥ç‚¹
+#
+# symbol-space: Full-width whitespace.
+記å·-空白
+#
+# symbol-open_bracket:
+# e.g. [({‘“『ã€]
+記å·-括弧開
+#
+# symbol-close_bracket:
+# e.g. [)}’â€ã€ã€ã€‘]
+記å·-括弧閉
+#
+# symbol-alphabetic:
+#記å·-アルファベット
+#
+#####
+# other: unclassified other
+#ãã®ä»–
+#
+# other-interjection: Words that are hard to classify as noun-suffixes or
+# sentence-final particles.
+# e.g. (ã )ã‚¡
+ãã®ä»–-間投
+#
+#####
+# filler: Aizuchi that occurs during a conversation or sounds inserted as filler.
+# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨
+フィラー
+#
+#####
+# non-verbal: non-verbal sound.
+éžè¨€èªžéŸ³
+#
+#####
+# fragment:
+#語断片
+#
+#####
+# unknown: unknown part of speech.
+#未知語
+#
+##### End of file
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ar.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ar.txt
new file mode 100644
index 000000000..046829db6
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ar.txt
@@ -0,0 +1,125 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Cleaned on October 11, 2009 (not normalized, so use before normalization)
+# This means that when modifying this list, you might need to add some
+# redundant entries, for example containing forms with both أ and ا
+من
+ومن
+منها
+منه
+ÙÙŠ
+ÙˆÙÙŠ
+Ùيها
+Ùيه
+Ùˆ
+ثم
+او
+أو
+ب
+بها
+به
+ا
+Ø£
+اى
+اي
+أي
+أى
+لا
+ولا
+الا
+ألا
+إلا
+لكن
+ما
+وما
+كما
+Ùما
+عن
+مع
+اذا
+إذا
+ان
+أن
+إن
+انها
+أنها
+إنها
+انه
+أنه
+إنه
+بان
+بأن
+ÙØ§Ù†
+ÙØ£Ù†
+وان
+وأن
+وإن
+التى
+التي
+الذى
+الذي
+الذين
+الى
+الي
+إلى
+إلي
+على
+عليها
+عليه
+اما
+أما
+إما
+ايضا
+أيضا
+كل
+وكل
+لم
+ولم
+لن
+ولن
+هى
+هي
+هو
+وهى
+وهي
+وهو
+Ùهى
+Ùهي
+Ùهو
+انت
+أنت
+لك
+لها
+له
+هذه
+هذا
+تلك
+ذلك
+هناك
+كانت
+كان
+يكون
+تكون
+وكانت
+وكان
+غير
+بعض
+قد
+نحو
+بين
+بينما
+منذ
+ضمن
+حيث
+الان
+الآن
+خلال
+بعد
+قبل
+حتى
+عند
+عندما
+لدى
+جميع
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_bg.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_bg.txt
new file mode 100644
index 000000000..1ae4ba2ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_bg.txt
@@ -0,0 +1,193 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+а
+аз
+ако
+ала
+бе
+без
+беше
+би
+бил
+била
+били
+било
+близо
+бъдат
+бъде
+бÑха
+в
+ваÑ
+ваш
+ваша
+вероÑтно
+вече
+взема
+ви
+вие
+винаги
+вÑе
+вÑеки
+вÑички
+вÑичко
+вÑÑка
+във
+въпреки
+върху
+г
+ги
+главно
+го
+д
+да
+дали
+до
+докато
+докога
+дори
+доÑега
+доÑта
+е
+едва
+един
+ето
+за
+зад
+заедно
+заради
+заÑега
+затова
+защо
+защото
+и
+из
+или
+им
+има
+имат
+иÑка
+й
+каза
+как
+каква
+какво
+както
+какъв
+като
+кога
+когато
+което
+които
+кой
+който
+колко
+коÑто
+къде
+където
+към
+ли
+м
+ме
+между
+мен
+ми
+мнозина
+мога
+могат
+може
+молÑ
+момента
+му
+н
+на
+над
+назад
+най
+направи
+напред
+например
+наÑ
+не
+него
+неÑ
+ни
+ние
+никой
+нито
+но
+нÑкои
+нÑкой
+нÑма
+обаче
+около
+оÑвен
+оÑобено
+от
+отгоре
+отново
+още
+пак
+по
+повече
+повечето
+под
+поне
+поради
+поÑле
+почти
+прави
+пред
+преди
+през
+при
+пък
+първо
+Ñа
+Ñамо
+Ñе
+Ñега
+Ñи
+Ñкоро
+Ñлед
+Ñме
+Ñпоред
+Ñред
+Ñрещу
+Ñте
+Ñъм
+ÑÑŠÑ
+Ñъщо
+Ñ‚
+тази
+така
+такива
+такъв
+там
+твой
+те
+тези
+ти
+тн
+то
+това
+тогава
+този
+той
+толкова
+точно
+трÑбва
+тук
+тъй
+Ñ‚Ñ
+Ñ‚ÑÑ…
+у
+хареÑва
+ч
+че
+чеÑто
+чрез
+ще
+щом
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ca.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ca.txt
new file mode 100644
index 000000000..3da65deaf
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ca.txt
@@ -0,0 +1,220 @@
+# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed)
+a
+abans
+ací
+ah
+així
+això
+al
+als
+aleshores
+algun
+alguna
+algunes
+alguns
+alhora
+allà
+allí
+allò
+altra
+altre
+altres
+amb
+ambdós
+ambdues
+apa
+aquell
+aquella
+aquelles
+aquells
+aquest
+aquesta
+aquestes
+aquests
+aquí
+baix
+cada
+cadascú
+cadascuna
+cadascunes
+cadascuns
+com
+contra
+d'un
+d'una
+d'unes
+d'uns
+dalt
+de
+del
+dels
+des
+després
+dins
+dintre
+donat
+doncs
+durant
+e
+eh
+el
+els
+em
+en
+encara
+ens
+entre
+érem
+eren
+éreu
+es
+és
+esta
+està
+estàvem
+estaven
+estàveu
+esteu
+et
+etc
+ets
+fins
+fora
+gairebé
+ha
+han
+has
+havia
+he
+hem
+heu
+hi
+ho
+i
+igual
+iguals
+ja
+l'hi
+la
+les
+li
+li'n
+llavors
+m'he
+ma
+mal
+malgrat
+mateix
+mateixa
+mateixes
+mateixos
+me
+mentre
+més
+meu
+meus
+meva
+meves
+molt
+molta
+moltes
+molts
+mon
+mons
+n'he
+n'hi
+ne
+ni
+no
+nogensmenys
+només
+nosaltres
+nostra
+nostre
+nostres
+o
+oh
+oi
+on
+pas
+pel
+pels
+per
+però
+perquè
+poc
+poca
+pocs
+poques
+potser
+propi
+qual
+quals
+quan
+quant
+que
+què
+quelcom
+qui
+quin
+quina
+quines
+quins
+s'ha
+s'han
+sa
+semblant
+semblants
+ses
+seu
+seus
+seva
+seva
+seves
+si
+sobre
+sobretot
+sóc
+solament
+sols
+son
+són
+sons
+sota
+sou
+t'ha
+t'han
+t'he
+ta
+tal
+també
+tampoc
+tan
+tant
+tanta
+tantes
+teu
+teus
+teva
+teves
+ton
+tons
+tot
+tota
+totes
+tots
+un
+una
+unes
+uns
+us
+va
+vaig
+vam
+van
+vas
+veu
+vosaltres
+vostra
+vostre
+vostres
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_cz.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_cz.txt
new file mode 100644
index 000000000..53c6097da
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_cz.txt
@@ -0,0 +1,172 @@
+a
+s
+k
+o
+i
+u
+v
+z
+dnes
+cz
+tímto
+budeš
+budem
+byli
+jseš
+můj
+svým
+ta
+tomto
+tohle
+tuto
+tyto
+jej
+zda
+proÄ
+máte
+tato
+kam
+tohoto
+kdo
+kteří
+mi
+nám
+tom
+tomuto
+mít
+nic
+proto
+kterou
+byla
+toho
+protože
+asi
+ho
+naši
+napište
+re
+což
+tím
+takže
+svých
+její
+svými
+jste
+aj
+tu
+tedy
+teto
+bylo
+kde
+ke
+pravé
+ji
+nad
+nejsou
+Äi
+pod
+téma
+mezi
+přes
+ty
+pak
+vám
+ani
+když
+však
+neg
+jsem
+tento
+Älánku
+Älánky
+aby
+jsme
+před
+pta
+jejich
+byl
+ještě
+až
+bez
+také
+pouze
+první
+vaše
+která
+nás
+nový
+tipy
+pokud
+může
+strana
+jeho
+své
+jiné
+zprávy
+nové
+není
+vás
+jen
+podle
+zde
+už
+být
+více
+bude
+již
+než
+který
+by
+které
+co
+nebo
+ten
+tak
+má
+při
+od
+po
+jsou
+jak
+další
+ale
+si
+se
+ve
+to
+jako
+za
+zpět
+ze
+do
+pro
+je
+na
+atd
+atp
+jakmile
+pÅ™iÄemž
+já
+on
+ona
+ono
+oni
+ony
+my
+vy
+jí
+ji
+mÄ›
+mne
+jemu
+tomu
+těm
+těmu
+němu
+němuž
+jehož
+jíž
+jelikož
+jež
+jakož
+naÄež
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_da.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_da.txt
new file mode 100644
index 000000000..42e6145b9
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_da.txt
@@ -0,0 +1,110 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Danish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/youself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_de.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_de.txt
new file mode 100644
index 000000000..86525e7ae
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_de.txt
@@ -0,0 +1,294 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A German stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | The number of forms in this list is reduced significantly by passing it
+ | through the German stemmer.
+
+
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_el.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_el.txt
new file mode 100644
index 000000000..232681f5b
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_el.txt
@@ -0,0 +1,78 @@
+# Lucene Greek Stopwords list
+# Note: by default this file is used after GreekLowerCaseFilter,
+# so when modifying this file use 'σ' instead of 'ς'
+ο
+η
+το
+οι
+τα
+του
+τησ
+των
+τον
+την
+και
+κι
+κ
+ειμαι
+εισαι
+ειναι
+ειμαστε
+ειστε
+στο
+στον
+στη
+στην
+μα
+αλλα
+απο
+για
+Ï€Ïοσ
+με
+σε
+ωσ
+παÏα
+αντι
+κατα
+μετα
+θα
+να
+δε
+δεν
+μη
+μην
+επι
+ενω
+εαν
+αν
+τοτε
+που
+πωσ
+ποιοσ
+ποια
+ποιο
+ποιοι
+ποιεσ
+ποιων
+ποιουσ
+αυτοσ
+αυτη
+αυτο
+αυτοι
+αυτων
+αυτουσ
+αυτεσ
+αυτα
+εκεινοσ
+εκεινη
+εκεινο
+εκεινοι
+εκεινεσ
+εκεινα
+εκεινων
+εκεινουσ
+οπωσ
+ομωσ
+ισωσ
+οσο
+οτι
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_en.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_en.txt
new file mode 100644
index 000000000..2c164c0b2
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_en.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+# Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_es.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_es.txt
new file mode 100644
index 000000000..487d78c8d
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_es.txt
@@ -0,0 +1,356 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Spanish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_eu.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_eu.txt
new file mode 100644
index 000000000..25f1db934
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_eu.txt
@@ -0,0 +1,99 @@
+# example set of basque stopwords
+al
+anitz
+arabera
+asko
+baina
+bat
+batean
+batek
+bati
+batzuei
+batzuek
+batzuetan
+batzuk
+bera
+beraiek
+berau
+berauek
+bere
+berori
+beroriek
+beste
+bezala
+da
+dago
+dira
+ditu
+du
+dute
+edo
+egin
+ere
+eta
+eurak
+ez
+gainera
+gu
+gutxi
+guzti
+haiei
+haiek
+haietan
+hainbeste
+hala
+han
+handik
+hango
+hara
+hari
+hark
+hartan
+hau
+hauei
+hauek
+hauetan
+hemen
+hemendik
+hemengo
+hi
+hona
+honek
+honela
+honetan
+honi
+hor
+hori
+horiei
+horiek
+horietan
+horko
+horra
+horrek
+horrela
+horretan
+horri
+hortik
+hura
+izan
+ni
+noiz
+nola
+non
+nondik
+nongo
+nor
+nora
+ze
+zein
+zen
+zenbait
+zenbat
+zer
+zergatik
+ziren
+zituen
+zu
+zuek
+zuen
+zuten
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fa.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fa.txt
new file mode 100644
index 000000000..723641c6d
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fa.txt
@@ -0,0 +1,313 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# Note: by default this file is used after normalization, so when adding entries
+# to this file, use the arabic 'ي' instead of 'ی'
+انان
+نداشته
+سراسر
+خياه
+ايشان
+وي
+تاكنون
+بيشتري
+دوم
+پس
+ناشي
+ÙˆÚ¯Ùˆ
+يا
+داشتند
+سپس
+هنگام
+هرگز
+پنج
+نشان
+امسال
+ديگر
+گروهي
+شدند
+چطور
+ده
+Ùˆ
+دو
+نخستين
+ولي
+چرا
+Ú†Ù‡
+وسط
+Ù‡
+كدام
+قابل
+يك
+Ø±ÙØª
+Ù‡ÙØª
+همچنين
+در
+هزار
+بله
+بلي
+شايد
+اما
+شناسي
+Ú¯Ø±ÙØªÙ‡
+دهد
+داشته
+دانست
+داشتن
+خواهيم
+ميليارد
+وقتيكه
+امد
+خواهد
+جز
+اورده
+شده
+بلكه
+خدمات
+شدن
+برخي
+نبود
+بسياري
+جلوگيري
+حق
+كردند
+نوعي
+بعري
+نكرده
+نظير
+نبايد
+بوده
+بودن
+داد
+اورد
+هست
+جايي
+شود
+دنبال
+داده
+بايد
+سابق
+هيچ
+همان
+انجا
+كمتر
+كجاست
+گردد
+كسي
+تر
+مردم
+تان
+دادن
+بودند
+سري
+جدا
+ندارند
+مگر
+يكديگر
+دارد
+دهند
+بنابراين
+هنگامي
+سمت
+جا
+انچه
+خود
+دادند
+زياد
+دارند
+اثر
+بدون
+بهترين
+بيشتر
+البته
+به
+براساس
+بيرون
+كرد
+بعضي
+Ú¯Ø±ÙØª
+توي
+اي
+ميليون
+او
+جريان
+تول
+بر
+مانند
+برابر
+باشيم
+مدتي
+گويند
+اكنون
+تا
+تنها
+جديد
+چند
+بي
+نشده
+كردن
+كردم
+گويد
+كرده
+كنيم
+نمي
+نزد
+روي
+قصد
+Ùقط
+بالاي
+ديگران
+اين
+ديروز
+توسط
+سوم
+ايم
+دانند
+سوي
+Ø§Ø³ØªÙØ§Ø¯Ù‡
+شما
+كنار
+داريم
+ساخته
+طور
+امده
+Ø±ÙØªÙ‡
+نخست
+بيست
+نزديك
+طي
+كنيد
+از
+انها
+تمامي
+داشت
+يكي
+طريق
+اش
+چيست
+روب
+نمايد
+Ú¯ÙØª
+چندين
+چيزي
+تواند
+ام
+ايا
+با
+ان
+ايد
+ترين
+اينكه
+ديگري
+راه
+هايي
+بروز
+همچنان
+پاعين
+كس
+حدود
+مختلÙ
+مقابل
+چيز
+گيرد
+ندارد
+ضد
+همچون
+سازي
+شان
+مورد
+باره
+مرسي
+خويش
+برخوردار
+چون
+خارج
+شش
+هنوز
+تحت
+ضمن
+هستيم
+Ú¯ÙØªÙ‡
+Ùكر
+بسيار
+پيش
+براي
+روزهاي
+انكه
+نخواهد
+بالا
+كل
+وقتي
+كي
+چنين
+كه
+گيري
+نيست
+است
+كجا
+كند
+نيز
+يابد
+بندي
+حتي
+توانند
+عقب
+خواست
+كنند
+بين
+تمام
+همه
+ما
+باشند
+مثل
+شد
+اري
+باشد
+اره
+طبق
+بعد
+اگر
+صورت
+غير
+جاي
+بيش
+ريزي
+اند
+زيرا
+چگونه
+بار
+Ù„Ø·ÙØ§
+مي
+درباره
+من
+ديده
+همين
+گذاري
+برداري
+علت
+گذاشته
+هم
+Ùوق
+نه
+ها
+شوند
+اباد
+همواره
+هر
+اول
+خواهند
+چهار
+نام
+امروز
+مان
+هاي
+قبل
+كنم
+سعي
+تازه
+را
+هستند
+زير
+جلوي
+عنوان
+بود
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fi.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fi.txt
new file mode 100644
index 000000000..4372c9a05
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fi.txt
@@ -0,0 +1,97 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this
+tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fr.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fr.txt
new file mode 100644
index 000000000..749abae68
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_fr.txt
@@ -0,0 +1,186 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A French stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that
+celà | that
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ga.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ga.txt
new file mode 100644
index 000000000..9ff88d747
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ga.txt
@@ -0,0 +1,110 @@
+
+a
+ach
+ag
+agus
+an
+aon
+ar
+arna
+as
+b'
+ba
+beirt
+bhúr
+caoga
+ceathair
+ceathrar
+chomh
+chtó
+chuig
+chun
+cois
+céad
+cúig
+cúigear
+d'
+daichead
+dar
+de
+deich
+deichniúr
+den
+dhá
+do
+don
+dtí
+dá
+dár
+dó
+faoi
+faoin
+faoina
+faoinár
+fara
+fiche
+gach
+gan
+go
+gur
+haon
+hocht
+i
+iad
+idir
+in
+ina
+ins
+inár
+is
+le
+leis
+lena
+lenár
+m'
+mar
+mo
+mé
+na
+nach
+naoi
+naonúr
+ná
+ní
+níor
+nó
+nócha
+ocht
+ochtar
+os
+roimh
+sa
+seacht
+seachtar
+seachtó
+seasca
+seisear
+siad
+sibh
+sinn
+sna
+sé
+sí
+tar
+thar
+thú
+triúr
+trí
+trína
+trínár
+tríocha
+tú
+um
+ár
+é
+éis
+í
+ó
+ón
+óna
+ónár
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_gl.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_gl.txt
new file mode 100644
index 000000000..d8760b12c
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_gl.txt
@@ -0,0 +1,161 @@
+# galican stopwords
+a
+aínda
+alí
+aquel
+aquela
+aquelas
+aqueles
+aquilo
+aquí
+ao
+aos
+as
+así
+á
+ben
+cando
+che
+co
+coa
+comigo
+con
+connosco
+contigo
+convosco
+coas
+cos
+cun
+cuns
+cunha
+cunhas
+da
+dalgunha
+dalgunhas
+dalgún
+dalgúns
+das
+de
+del
+dela
+delas
+deles
+desde
+deste
+do
+dos
+dun
+duns
+dunha
+dunhas
+e
+el
+ela
+elas
+eles
+en
+era
+eran
+esa
+esas
+ese
+eses
+esta
+estar
+estaba
+está
+están
+este
+estes
+estiven
+estou
+eu
+é
+facer
+foi
+foron
+fun
+había
+hai
+iso
+isto
+la
+las
+lle
+lles
+lo
+los
+mais
+me
+meu
+meus
+min
+miña
+miñas
+moi
+na
+nas
+neste
+nin
+no
+non
+nos
+nosa
+nosas
+noso
+nosos
+nós
+nun
+nunha
+nuns
+nunhas
+o
+os
+ou
+ó
+ós
+para
+pero
+pode
+pois
+pola
+polas
+polo
+polos
+por
+que
+se
+senón
+ser
+seu
+seus
+sexa
+sido
+sobre
+súa
+súas
+tamén
+tan
+te
+ten
+teñen
+teño
+ter
+teu
+teus
+ti
+tido
+tiña
+tiven
+túa
+túas
+un
+unha
+unhas
+uns
+vos
+vosa
+vosas
+voso
+vosos
+vós
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hi.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hi.txt
new file mode 100644
index 000000000..86286bb08
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hi.txt
@@ -0,0 +1,235 @@
+# Also see http://www.opensource.org/licenses/bsd-license.html
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# Note: by default this file also contains forms normalized by HindiNormalizer
+# for spelling variation (see section below), such that it can be used whether or
+# not you enable that feature. When adding additional entries to this list,
+# please add the normalized form as well.
+अंदर
+अत
+अपना
+अपनी
+अपने
+अभी
+आदि
+आप
+इतà¥à¤¯à¤¾à¤¦à¤¿
+इन
+इनका
+इनà¥à¤¹à¥€à¤‚
+इनà¥à¤¹à¥‡à¤‚
+इनà¥à¤¹à¥‹à¤‚
+इस
+इसका
+इसकी
+इसके
+इसमें
+इसी
+इसे
+उन
+उनका
+उनकी
+उनके
+उनको
+उनà¥à¤¹à¥€à¤‚
+उनà¥à¤¹à¥‡à¤‚
+उनà¥à¤¹à¥‹à¤‚
+उस
+उसके
+उसी
+उसे
+à¤à¤•
+à¤à¤µà¤‚
+à¤à¤¸
+à¤à¤¸à¥‡
+और
+कई
+कर
+करता
+करते
+करना
+करने
+करें
+कहते
+कहा
+का
+काफ़ी
+कि
+कितना
+किनà¥à¤¹à¥‡à¤‚
+किनà¥à¤¹à¥‹à¤‚
+किया
+किर
+किस
+किसी
+किसे
+की
+कà¥à¤›
+कà¥à¤²
+के
+को
+कोई
+कौन
+कौनसा
+गया
+घर
+जब
+जहाà¤
+जा
+जितना
+जिन
+जिनà¥à¤¹à¥‡à¤‚
+जिनà¥à¤¹à¥‹à¤‚
+जिस
+जिसे
+जीधर
+जैसा
+जैसे
+जो
+तक
+तब
+तरह
+तिन
+तिनà¥à¤¹à¥‡à¤‚
+तिनà¥à¤¹à¥‹à¤‚
+तिस
+तिसे
+तो
+था
+थी
+थे
+दबारा
+दिया
+दà¥à¤¸à¤°à¤¾
+दूसरे
+दो
+दà¥à¤µà¤¾à¤°à¤¾
+न
+नहीं
+ना
+निहायत
+नीचे
+ने
+पर
+पर
+पहले
+पूरा
+पे
+फिर
+बनी
+बही
+बहà¥à¤¤
+बाद
+बाला
+बिलकà¥à¤²
+भी
+भीतर
+मगर
+मानो
+मे
+में
+यदि
+यह
+यहाà¤
+यही
+या
+यिह
+ये
+रखें
+रहा
+रहे
+ऱà¥à¤µà¤¾à¤¸à¤¾
+लिà¤
+लिये
+लेकिन
+व
+वरà¥à¤—
+वह
+वह
+वहाà¤
+वहीं
+वाले
+वà¥à¤¹
+वे
+वग़ैरह
+संग
+सकता
+सकते
+सबसे
+सभी
+साथ
+साबà¥à¤¤
+साभ
+सारा
+से
+सो
+ही
+हà¥à¤†
+हà¥à¤ˆ
+हà¥à¤
+है
+हैं
+हो
+होता
+होती
+होते
+होना
+होने
+# additional normalized forms of the above
+अपनि
+जेसे
+होति
+सभि
+तिंहों
+इंहों
+दवारा
+इसि
+किंहें
+थि
+उंहों
+ओर
+जिंहें
+वहिं
+अभि
+बनि
+हि
+उंहिं
+उंहें
+हें
+वगेरह
+à¤à¤¸à¥‡
+रवासा
+कोन
+निचे
+काफि
+उसि
+पà¥à¤°à¤¾
+भितर
+हे
+बहि
+वहां
+कोइ
+यहां
+जिंहों
+तिंहें
+किसि
+कइ
+यहि
+इंहिं
+जिधर
+इंहें
+अदि
+इतयादि
+हà¥à¤‡
+कोनसा
+इसकि
+दà¥à¤¸à¤°à¥‡
+जहां
+अप
+किंहों
+उनकि
+भि
+वरग
+हà¥à¤…
+जेसा
+नहिं
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hu.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hu.txt
new file mode 100644
index 000000000..37526da8a
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hu.txt
@@ -0,0 +1,211 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+| Hungarian stop word list
+| prepared by Anna Tordai
+
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+Å‘
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hy.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hy.txt
new file mode 100644
index 000000000..60c1c50fb
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_hy.txt
@@ -0,0 +1,46 @@
+# example set of Armenian stopwords.
+Õ¡ÕµÕ¤
+Õ¡ÕµÕ¬
+Õ¡ÕµÕ¶
+Õ¡ÕµÕ½
+Õ¤Õ¸Ö‚
+Õ¤Õ¸Ö‚Ö„
+Õ¥Õ´
+Õ¥Õ¶
+Õ¥Õ¶Ö„
+Õ¥Õ½
+Õ¥Ö„
+Õ§
+Õ§Õ«
+Õ§Õ«Õ¶
+Õ§Õ«Õ¶Ö„
+Õ§Õ«Ö€
+Õ§Õ«Ö„
+Õ§Ö€
+Õ¨Õ½Õ¿
+Õ©
+Õ«
+Õ«Õ¶
+Õ«Õ½Õ¯
+Õ«Ö€
+Õ¯Õ¡Õ´
+Õ°Õ¡Õ´Õ¡Ö€
+Õ°Õ¥Õ¿
+Õ°Õ¥Õ¿Õ¸
+Õ´Õ¥Õ¶Ö„
+Õ´Õ¥Õ»
+Õ´Õ«
+Õ¶
+Õ¶Õ¡
+Õ¶Õ¡Ö‡
+Õ¶Ö€Õ¡
+Õ¶Ö€Õ¡Õ¶Ö„
+Õ¸Ö€
+Õ¸Ö€Õ¨
+Õ¸Ö€Õ¸Õ¶Ö„
+Õ¸Ö€ÕºÕ¥Õ½
+Õ¸Ö‚
+Õ¸Ö‚Õ´
+ÕºÕ«Õ¿Õ«
+Õ¾Ö€Õ¡
+Ö‡
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_id.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_id.txt
new file mode 100644
index 000000000..4617f83a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_id.txt
@@ -0,0 +1,359 @@
+# from appendix D of: A Study of Stemming Effects on Information
+# Retrieval in Bahasa Indonesia
+ada
+adanya
+adalah
+adapun
+agak
+agaknya
+agar
+akan
+akankah
+akhirnya
+aku
+akulah
+amat
+amatlah
+anda
+andalah
+antar
+diantaranya
+antara
+antaranya
+diantara
+apa
+apaan
+mengapa
+apabila
+apakah
+apalagi
+apatah
+atau
+ataukah
+ataupun
+bagai
+bagaikan
+sebagai
+sebagainya
+bagaimana
+bagaimanapun
+sebagaimana
+bagaimanakah
+bagi
+bahkan
+bahwa
+bahwasanya
+sebaliknya
+banyak
+sebanyak
+beberapa
+seberapa
+begini
+beginian
+beginikah
+beginilah
+sebegini
+begitu
+begitukah
+begitulah
+begitupun
+sebegitu
+belum
+belumlah
+sebelum
+sebelumnya
+sebenarnya
+berapa
+berapakah
+berapalah
+berapapun
+betulkah
+sebetulnya
+biasa
+biasanya
+bila
+bilakah
+bisa
+bisakah
+sebisanya
+boleh
+bolehkah
+bolehlah
+buat
+bukan
+bukankah
+bukanlah
+bukannya
+cuma
+percuma
+dahulu
+dalam
+dan
+dapat
+dari
+daripada
+dekat
+demi
+demikian
+demikianlah
+sedemikian
+dengan
+depan
+di
+dia
+dialah
+dini
+diri
+dirinya
+terdiri
+dong
+dulu
+enggak
+enggaknya
+entah
+entahlah
+terhadap
+terhadapnya
+hal
+hampir
+hanya
+hanyalah
+harus
+haruslah
+harusnya
+seharusnya
+hendak
+hendaklah
+hendaknya
+hingga
+sehingga
+ia
+ialah
+ibarat
+ingin
+inginkah
+inginkan
+ini
+inikah
+inilah
+itu
+itukah
+itulah
+jangan
+jangankan
+janganlah
+jika
+jikalau
+juga
+justru
+kala
+kalau
+kalaulah
+kalaupun
+kalian
+kami
+kamilah
+kamu
+kamulah
+kan
+kapan
+kapankah
+kapanpun
+dikarenakan
+karena
+karenanya
+ke
+kecil
+kemudian
+kenapa
+kepada
+kepadanya
+ketika
+seketika
+khususnya
+kini
+kinilah
+kiranya
+sekiranya
+kita
+kitalah
+kok
+lagi
+lagian
+selagi
+lah
+lain
+lainnya
+melainkan
+selaku
+lalu
+melalui
+terlalu
+lama
+lamanya
+selama
+selama
+selamanya
+lebih
+terlebih
+bermacam
+macam
+semacam
+maka
+makanya
+makin
+malah
+malahan
+mampu
+mampukah
+mana
+manakala
+manalagi
+masih
+masihkah
+semasih
+masing
+mau
+maupun
+semaunya
+memang
+mereka
+merekalah
+meski
+meskipun
+semula
+mungkin
+mungkinkah
+nah
+namun
+nanti
+nantinya
+nyaris
+oleh
+olehnya
+seorang
+seseorang
+pada
+padanya
+padahal
+paling
+sepanjang
+pantas
+sepantasnya
+sepantasnyalah
+para
+pasti
+pastilah
+per
+pernah
+pula
+pun
+merupakan
+rupanya
+serupa
+saat
+saatnya
+sesaat
+saja
+sajalah
+saling
+bersama
+sama
+sesama
+sambil
+sampai
+sana
+sangat
+sangatlah
+saya
+sayalah
+se
+sebab
+sebabnya
+sebuah
+tersebut
+tersebutlah
+sedang
+sedangkan
+sedikit
+sedikitnya
+segala
+segalanya
+segera
+sesegera
+sejak
+sejenak
+sekali
+sekalian
+sekalipun
+sesekali
+sekaligus
+sekarang
+sekarang
+sekitar
+sekitarnya
+sela
+selain
+selalu
+seluruh
+seluruhnya
+semakin
+sementara
+sempat
+semua
+semuanya
+sendiri
+sendirinya
+seolah
+seperti
+sepertinya
+sering
+seringnya
+serta
+siapa
+siapakah
+siapapun
+disini
+disinilah
+sini
+sinilah
+sesuatu
+sesuatunya
+suatu
+sesudah
+sesudahnya
+sudah
+sudahkah
+sudahlah
+supaya
+tadi
+tadinya
+tak
+tanpa
+setelah
+telah
+tentang
+tentu
+tentulah
+tentunya
+tertentu
+seterusnya
+tapi
+tetapi
+setiap
+tiap
+setidaknya
+tidak
+tidakkah
+tidaklah
+toh
+waduh
+wah
+wahai
+sewaktu
+walau
+walaupun
+wong
+yaitu
+yakni
+yang
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_it.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_it.txt
new file mode 100644
index 000000000..1219cc773
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_it.txt
@@ -0,0 +1,303 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | An Italian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+è
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+stando
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ja.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ja.txt
new file mode 100644
index 000000000..d4321be6b
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ja.txt
@@ -0,0 +1,127 @@
+#
+# This file defines a stopword set for Japanese.
+#
+# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia.
+# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745
+# for frequency lists, etc. that can be useful for making your own set (if desired)
+#
+# Note that there is an overlap between these stopwords and the terms stopped when used
+# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note
+# that comments are not allowed on the same line as stopwords.
+#
+# Also note that stopping is done in a case-insensitive manner. Change your StopFilter
+# configuration if you need case-sensitive stopping. Lastly, note that stopping is done
+# using the same character width as the entries in this file. Since this StopFilter is
+# normally done after a CJKWidthFilter in your chain, you would usually want your romaji
+# entries to be in half-width and your kana entries to be in full-width.
+#
+ã®
+ã«
+ã¯
+ã‚’
+ãŸ
+ãŒ
+ã§
+ã¦
+ã¨
+ã—
+れ
+ã•
+ã‚ã‚‹
+ã„ã‚‹
+ã‚‚
+ã™ã‚‹
+ã‹ã‚‰
+ãª
+ã“ã¨
+ã¨ã—ã¦
+ã„
+ã‚„
+れる
+ãªã©
+ãªã£
+ãªã„
+ã“ã®
+ãŸã‚
+ãã®
+ã‚ã£
+よã†
+ã¾ãŸ
+ã‚‚ã®
+ã¨ã„ã†
+ã‚り
+ã¾ã§
+られ
+ãªã‚‹
+ã¸
+ã‹
+ã 
+ã“れ
+ã«ã‚ˆã£ã¦
+ã«ã‚ˆã‚Š
+ãŠã‚Š
+より
+ã«ã‚ˆã‚‹
+ãš
+ãªã‚Š
+られる
+ã«ãŠã„ã¦
+ã°
+ãªã‹ã£
+ãªã
+ã—ã‹ã—
+ã«ã¤ã„ã¦
+ã›
+ã ã£
+ãã®å¾Œ
+ã§ãã‚‹
+ãれ
+ã†
+ã®ã§
+ãªãŠ
+ã®ã¿
+ã§ã
+ã¤
+ã«ãŠã‘ã‚‹
+ãŠã‚ˆã³
+ã„ã†
+ã•らã«
+ã§ã‚‚
+ら
+ãŸã‚Š
+ãã®ä»–
+ã«é–¢ã™ã‚‹
+ãŸã¡
+ã¾ã™
+ã‚“
+ãªã‚‰
+ã«å¯¾ã—ã¦
+特ã«
+ã›ã‚‹
+åŠã³
+ã“れら
+ã¨ã
+ã§ã¯
+ã«ã¦
+ã»ã‹
+ãªãŒã‚‰
+ã†ã¡
+ãã—ã¦
+ã¨ã¨ã‚‚ã«
+ãŸã ã—
+ã‹ã¤ã¦
+ãれãžã‚Œ
+ã¾ãŸã¯
+ãŠ
+ã»ã©
+ã‚‚ã®ã®
+ã«å¯¾ã™ã‚‹
+ã»ã¨ã‚“ã©
+ã¨å…±ã«
+ã¨ã„ã£ãŸ
+ã§ã™
+ã¨ã‚‚
+ã¨ã“ã‚
+ã“ã“
+##### End of file
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_lv.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_lv.txt
new file mode 100644
index 000000000..e21a23c06
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_lv.txt
@@ -0,0 +1,172 @@
+# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins
+# the original list of over 800 forms was refined:
+# pronouns, adverbs, interjections were removed
+#
+# prepositions
+aiz
+ap
+ar
+apakš
+Ärpus
+augšpus
+bez
+caur
+dēļ
+gar
+iekš
+iz
+kopš
+labad
+lejpus
+līdz
+no
+otrpus
+pa
+par
+pÄr
+pēc
+pie
+pirms
+pret
+priekš
+starp
+šaipus
+uz
+viņpus
+virs
+virspus
+zem
+apakšpus
+# Conjunctions
+un
+bet
+jo
+ja
+ka
+lai
+tomēr
+tikko
+turpretī
+arī
+kaut
+gan
+tÄdēļ
+tÄ
+ne
+tikvien
+vien
+kÄ
+ir
+te
+vai
+kamēr
+# Particles
+ar
+diezin
+droši
+diemžēl
+nebūt
+ik
+it
+taÄu
+nu
+pat
+tiklab
+iekšpus
+nedz
+tik
+nevis
+turpretim
+jeb
+iekam
+iekÄm
+iekÄms
+kolīdz
+līdzko
+tiklīdz
+jebšu
+tÄlab
+tÄpÄ“c
+nekÄ
+itin
+jÄ
+jau
+jel
+nē
+nezin
+tad
+tikai
+vis
+tak
+iekams
+vien
+# modal verbs
+būt
+biju
+biji
+bija
+bijÄm
+bijÄt
+esmu
+esi
+esam
+esat
+būšu
+būsi
+būs
+būsim
+būsiet
+tikt
+tiku
+tiki
+tika
+tikÄm
+tikÄt
+tieku
+tiec
+tiek
+tiekam
+tiekat
+tikšu
+tiks
+tiksim
+tiksiet
+tapt
+tapi
+tapÄt
+topat
+tapšu
+tapsi
+taps
+tapsim
+tapsiet
+kļūt
+kļuvu
+kļuvi
+kļuva
+kļuvÄm
+kļuvÄt
+kļūstu
+kļūsti
+kļūst
+kļūstam
+kļūstat
+kļūšu
+kļūsi
+kļūs
+kļūsim
+kļūsiet
+# verbs
+varēt
+varēju
+varÄ“jÄm
+varēšu
+varēsim
+var
+varēji
+varÄ“jÄt
+varēsi
+varēsiet
+varat
+varēja
+varēs
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_nl.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_nl.txt
new file mode 100644
index 000000000..47a2aeacf
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_nl.txt
@@ -0,0 +1,119 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Dutch stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large sample of Dutch text.
+
+ | Dutch stop words frequently exhibit homonym clashes. These are indicated
+ | clearly below.
+
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_no.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_no.txt
new file mode 100644
index 000000000..a7a2c28ba
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_no.txt
@@ -0,0 +1,194 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Norwegian stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This stop word list is for the dominant bokmål dialect. Words unique
+ | to nynorsk are marked *.
+
+ | Revised by Jan Bruusgaard <Jan.Bruusgaard@ssb.no>, Jan 2005
+
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+Ã¥ | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_pt.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_pt.txt
new file mode 100644
index 000000000..acfeb01af
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_pt.txt
@@ -0,0 +1,253 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Portuguese stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+
+ | The following is a ranked list (commonest to rarest) of stopwords
+ | deriving from a large sample of text.
+
+ | Extra words have been added at the end.
+
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ro.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ro.txt
new file mode 100644
index 000000000..4fdee90a5
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ro.txt
@@ -0,0 +1,233 @@
+# This file was created by Jacques Savoy and is distributed under the BSD license.
+# See http://members.unine.ch/jacques.savoy/clef/index.html.
+# Also see http://www.opensource.org/licenses/bsd-license.html
+acea
+aceasta
+această
+aceea
+acei
+aceia
+acel
+acela
+acele
+acelea
+acest
+acesta
+aceste
+acestea
+aceÅŸti
+aceÅŸtia
+acolo
+acum
+ai
+aia
+aibă
+aici
+al
+ăla
+ale
+alea
+ălea
+altceva
+altcineva
+am
+ar
+are
+aÅŸ
+aÅŸadar
+asemenea
+asta
+ăsta
+astăzi
+astea
+ăstea
+ăştia
+asupra
+aţi
+au
+avea
+avem
+aveţi
+azi
+bine
+bucur
+bună
+ca
+că
+căci
+când
+care
+cărei
+căror
+cărui
+cât
+câte
+câţi
+către
+câtva
+ce
+cel
+ceva
+chiar
+cînd
+cine
+cineva
+cît
+cîte
+cîţi
+cîtva
+contra
+cu
+cum
+cumva
+curând
+curînd
+da
+dă
+dacă
+dar
+datorită
+de
+deci
+deja
+deoarece
+departe
+deÅŸi
+din
+dinaintea
+dintr
+dintre
+drept
+după
+ea
+ei
+el
+ele
+eram
+este
+eÅŸti
+eu
+face
+fără
+fi
+fie
+fiecare
+fii
+fim
+fiţi
+iar
+ieri
+îi
+îl
+îmi
+împotriva
+în
+înainte
+înaintea
+încât
+încît
+încotro
+între
+întrucât
+întrucît
+îţi
+la
+lângă
+le
+li
+lîngă
+lor
+lui
+mă
+mâine
+mea
+mei
+mele
+mereu
+meu
+mi
+mine
+mult
+multă
+mulţi
+ne
+nicăieri
+nici
+nimeni
+niÅŸte
+noastră
+noastre
+noi
+noÅŸtri
+nostru
+nu
+ori
+oricând
+oricare
+oricât
+orice
+oricînd
+oricine
+oricît
+oricum
+oriunde
+până
+pe
+pentru
+peste
+pînă
+poate
+pot
+prea
+prima
+primul
+prin
+printr
+sa
+să
+săi
+sale
+sau
+său
+se
+ÅŸi
+sînt
+sîntem
+sînteţi
+spre
+sub
+sunt
+suntem
+sunteţi
+ta
+tăi
+tale
+tău
+te
+Å£i
+Å£ie
+tine
+toată
+toate
+tot
+toţi
+totuÅŸi
+tu
+un
+una
+unde
+undeva
+unei
+unele
+uneori
+unor
+vă
+vi
+voastră
+voastre
+voi
+voÅŸtri
+vostru
+vouă
+vreo
+vreun
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ru.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ru.txt
new file mode 100644
index 000000000..55271400c
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_ru.txt
@@ -0,0 +1,243 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | a russian stop word list. comments begin with vertical bar. each stop
+ | word is at the start of a line.
+
+ | this is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | letter `ё' is translated to `е'.
+
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+Ñ | i
+Ñ | from
+Ñо | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+вÑе | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+Ð¼ÐµÐ½Ñ | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+еÑли | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+Ð²Ð°Ñ | you accusative
+нибудь | indef. suffix preceded by hyphen
+опÑть | again
+уж | already, but homonym of `adder'
+вам | to you
+Ñказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+ÑÐµÐ±Ñ | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+еÑть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+Ð´Ð»Ñ | for
+мы | we
+Ñ‚ÐµÐ±Ñ | thee
+их | them, their
+чем | than
+была | she was
+Ñам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+Ñебе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+Ñтот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+Ñтого | genitive form of `this'
+какой | which
+ÑовÑем | altogether
+ним | prepositional form of `его', `они'
+здеÑÑŒ | here
+Ñтом | prepositional form of `Ñтот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажетÑÑ | it seems
+ÑÐµÐ¹Ñ‡Ð°Ñ | now
+были | they were
+куда | where to
+зачем | why
+Ñказать | to say
+вÑех | all (acc., gen. preposn. plural)
+никогда | never
+ÑÐµÐ³Ð¾Ð´Ð½Ñ | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+поÑле | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+Ñти | these
+Ð½Ð°Ñ | us
+про | about
+вÑего | in all, only, of all
+них | prepositional form of `они' (they)
+ÐºÐ°ÐºÐ°Ñ | which, feminine
+много | lots
+разве | interrogative particle
+Ñказала | she said
+три | three
+Ñту | this, acc. fem. sing.
+Ð¼Ð¾Ñ | my, feminine
+впрочем | moreover, besides
+хорошо | good
+Ñвою | ones own, acc. fem. sing.
+Ñтой | oblique form of `Ñта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+Ð½ÐµÐ»ÑŒÐ·Ñ | one must not
+такой | such a one
+им | to them
+более | more
+вÑегда | always
+конечно | of course
+вÑÑŽ | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною]
+ | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее Ñи ею [нее, нÑи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами
+ | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами
+ | они их им ими [них, ним, ними]
+ |
+ | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою]
+ |
+ | demonstrative pronouns: Ñтот (this), тот (that)
+ |
+ | Ñтот Ñта Ñто Ñти
+ | Ñтого Ñты Ñто Ñти
+ | Ñтого Ñтой Ñтого Ñтих
+ | Ñтому Ñтой Ñтому Ñтим
+ | Ñтим Ñтой Ñтим [Ñтою] Ñтими
+ | Ñтом Ñтой Ñтом Ñтих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) веÑÑŒ (all)
+ |
+ | веÑÑŒ вÑÑ Ð²Ñе вÑе
+ | вÑего вÑÑŽ вÑе вÑе
+ | вÑего вÑей вÑего вÑех
+ | вÑему вÑей вÑему вÑем
+ | вÑем вÑей вÑем [вÑею] вÑеми
+ | вÑем вÑей вÑем вÑех
+ |
+ | (b) Ñам (himself etc)
+ |
+ | Ñам Ñама Ñамо Ñами
+ | Ñамого Ñаму Ñамо Ñамих
+ | Ñамого Ñамой Ñамого Ñамих
+ | Ñамому Ñамой Ñамому Ñамим
+ | Ñамим Ñамой Ñамим [Ñамою] Ñамими
+ | Ñамом Ñамой Ñамом Ñамих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв еÑть Ñуть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзÑ
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_sv.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_sv.txt
new file mode 100644
index 000000000..096f87f67
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_sv.txt
@@ -0,0 +1,133 @@
+ | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt
+ | This file is distributed under the BSD License.
+ | See http://snowball.tartarus.org/license.php
+ | Also see http://www.opensource.org/licenses/bsd-license.html
+ | - Encoding was converted to UTF-8.
+ | - This notice was added.
+ |
+ | NOTE: To use this file with StopFilterFactory, you must specify format="snowball"
+
+ | A Swedish stop word list. Comments begin with vertical bar. Each stop
+ | word is at the start of a line.
+
+ | This is a ranked list (commonest to rarest) of stopwords derived from
+ | a large text sample.
+
+ | Swedish stop words occasionally exhibit homonym clashes. For example
+ | så = so, but also seed. These are indicated clearly below.
+
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+Ã¥t | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_th.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_th.txt
new file mode 100644
index 000000000..07f0fabe6
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_th.txt
@@ -0,0 +1,119 @@
+# Thai stopwords from:
+# "Opinion Detection in Thai Political News Columns
+# Based on Subjectivity Analysis"
+# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak
+ไว้
+ไม่
+ไป
+ได้
+ให้
+ใน
+โดย
+à¹à¸«à¹ˆà¸‡
+à¹à¸¥à¹‰à¸§
+à¹à¸¥à¸°
+à¹à¸£à¸
+à¹à¸šà¸š
+à¹à¸•่
+เอง
+เห็น
+เลย
+เริ่ม
+เรา
+เมื่อ
+เพื่อ
+เพราะ
+เป็นà¸à¸²à¸£
+เป็น
+เปิดเผย
+เปิด
+เนื่องจาà¸
+เดียวà¸à¸±à¸™
+เดียว
+เช่น
+เฉพาะ
+เคย
+เข้า
+เขา
+อีà¸
+อาจ
+อะไร
+ออà¸
+อย่าง
+อยู่
+อยาà¸
+หาà¸
+หลาย
+หลังจาà¸
+หลัง
+หรือ
+หนึ่ง
+ส่วน
+ส่ง
+สุด
+สà¹à¸²à¸«à¸£à¸±à¸š
+ว่า
+วัน
+ลง
+ร่วม
+ราย
+รับ
+ระหว่าง
+รวม
+ยัง
+มี
+มาà¸
+มา
+พร้อม
+พบ
+ผ่าน
+ผล
+บาง
+น่า
+นี้
+นà¹à¸²
+นั้น
+นัà¸
+นอà¸à¸ˆà¸²à¸
+ทุà¸
+ที่สุด
+ที่
+ทà¹à¸²à¹ƒà¸«à¹‰
+ทà¹à¸²
+ทาง
+ทั้งนี้
+ทั้ง
+ถ้า
+ถูà¸
+ถึง
+ต้อง
+ต่างๆ
+ต่าง
+ต่อ
+ตาม
+ตั้งà¹à¸•่
+ตั้ง
+ด้าน
+ด้วย
+ดัง
+ซึ่ง
+ช่วง
+จึง
+จาà¸
+จัด
+จะ
+คือ
+ความ
+ครั้ง
+คง
+ขึ้น
+ของ
+ขอ
+ขณะ
+à¸à¹ˆà¸­à¸™
+à¸à¹‡
+à¸à¸²à¸£
+à¸à¸±à¸š
+à¸à¸±à¸™
+à¸à¸§à¹ˆà¸²
+à¸à¸¥à¹ˆà¸²à¸§
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/stopwords_tr.txt b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_tr.txt
new file mode 100644
index 000000000..84d9408d4
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/stopwords_tr.txt
@@ -0,0 +1,212 @@
+# Turkish stopwords from LUCENE-559
+# merged with the list from "Information Retrieval on Turkish Texts"
+# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf)
+acaba
+altmış
+altı
+ama
+ancak
+arada
+aslında
+ayrıca
+bana
+bazı
+belki
+ben
+benden
+beni
+benim
+beri
+beÅŸ
+bile
+bin
+bir
+birçok
+biri
+birkaç
+birkez
+birÅŸey
+birÅŸeyi
+biz
+bize
+bizden
+bizi
+bizim
+böyle
+böylece
+bu
+buna
+bunda
+bundan
+bunlar
+bunları
+bunların
+bunu
+bunun
+burada
+çok
+çünkü
+da
+daha
+dahi
+de
+defa
+deÄŸil
+diÄŸer
+diye
+doksan
+dokuz
+dolayı
+dolayısıyla
+dört
+edecek
+eden
+ederek
+edilecek
+ediliyor
+edilmesi
+ediyor
+eÄŸer
+elli
+en
+etmesi
+etti
+ettiÄŸi
+ettiÄŸini
+gibi
+göre
+halen
+hangi
+hatta
+hem
+henüz
+hep
+hepsi
+her
+herhangi
+herkesin
+hiç
+hiçbir
+için
+iki
+ile
+ilgili
+ise
+iÅŸte
+itibaren
+itibariyle
+kadar
+karşın
+katrilyon
+kendi
+kendilerine
+kendini
+kendisi
+kendisine
+kendisini
+kez
+ki
+kim
+kimden
+kime
+kimi
+kimse
+kırk
+milyar
+milyon
+mu
+mü
+mı
+nasıl
+ne
+neden
+nedenle
+nerde
+nerede
+nereye
+niye
+niçin
+o
+olan
+olarak
+oldu
+olduÄŸu
+olduÄŸunu
+olduklarını
+olmadı
+olmadığı
+olmak
+olması
+olmayan
+olmaz
+olsa
+olsun
+olup
+olur
+olursa
+oluyor
+on
+ona
+ondan
+onlar
+onlardan
+onları
+onların
+onu
+onun
+otuz
+oysa
+öyle
+pek
+raÄŸmen
+sadece
+sanki
+sekiz
+seksen
+sen
+senden
+seni
+senin
+siz
+sizden
+sizi
+sizin
+ÅŸey
+ÅŸeyden
+ÅŸeyi
+ÅŸeyler
+şöyle
+ÅŸu
+ÅŸuna
+ÅŸunda
+ÅŸundan
+şunları
+ÅŸunu
+tarafından
+trilyon
+tüm
+üç
+üzere
+var
+vardı
+ve
+veya
+ya
+yani
+yapacak
+yapılan
+yapılması
+yapıyor
+yapmak
+yaptı
+yaptığı
+yaptığını
+yaptıkları
+yedi
+yerine
+yetmiÅŸ
+yine
+yirmi
+yoksa
+yüz
+zaten
diff --git a/solr-8.1.1/server/solr/dash/conf/lang/userdict_ja.txt b/solr-8.1.1/server/solr/dash/conf/lang/userdict_ja.txt
new file mode 100644
index 000000000..6f0368e4d
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/lang/userdict_ja.txt
@@ -0,0 +1,29 @@
+#
+# This is a sample user dictionary for Kuromoji (JapaneseTokenizer)
+#
+# Add entries to this file in order to override the statistical model in terms
+# of segmentation, readings and part-of-speech tags. Notice that entries do
+# not have weights since they are always used when found. This is by-design
+# in order to maximize ease-of-use.
+#
+# Entries are defined using the following CSV format:
+# <text>,<token 1> ... <token n>,<reading 1> ... <reading n>,<part-of-speech tag>
+#
+# Notice that a single half-width space separates tokens and readings, and
+# that the number tokens and readings must match exactly.
+#
+# Also notice that multiple entries with the same <text> is undefined.
+#
+# Whitespace only lines are ignored. Comments are not allowed on entry lines.
+#
+
+# Custom segmentation for kanji compounds
+日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞
+
+# Custom segmentation for compound katakana
+トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞
+
+# Custom reading for former sumo wrestler
+æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å
diff --git a/solr-8.1.1/server/solr/dash/conf/params.json b/solr-8.1.1/server/solr/dash/conf/params.json
new file mode 100644
index 000000000..06114ef25
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/params.json
@@ -0,0 +1,20 @@
+{"params":{
+ "query":{
+ "defType":"edismax",
+ "q.alt":"*:*",
+ "rows":"10",
+ "fl":"*,score",
+ "":{"v":0}
+ },
+ "facets":{
+ "facet":"on",
+ "facet.mincount": "1",
+ "":{"v":0}
+ },
+ "velocity":{
+ "wt": "velocity",
+ "v.template":"browse",
+ "v.layout": "layout",
+ "":{"v":0}
+ }
+}} \ No newline at end of file
diff --git a/solr-8.1.1/server/solr/dash/conf/protwords.txt b/solr-8.1.1/server/solr/dash/conf/protwords.txt
new file mode 100644
index 000000000..1dfc0abec
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/solr-8.1.1/server/solr/dash/conf/schema.xml b/solr-8.1.1/server/solr/dash/conf/schema.xml
new file mode 100644
index 000000000..8610786af
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/schema.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema name="default-config" version="1.6">
+ <uniqueKey>id</uniqueKey>
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true"/>
+ <fieldType name="text" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="12"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <!-- in this example, we will only use synonyms at query time
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+ <filter class="solr.FlattenGraphFilterFactory"/>
+ -->
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
+ <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
+ <fieldType name="plong" class="solr.LongPointField"/>
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+ <fieldType name="pdate" class="solr.DatePointField"/>
+ <fieldType name="pdaterange" class="solr.DateRangeField"/>
+ <fieldType name="pdouble" class="solr.DoublePointField"/>
+
+ <field name="text" type="text" indexed="true" stored="false" uninvertible="false" multiValued="true"/>
+ <field name="id" type="string" indexed="true" stored="true" uninvertible="false" required="true"/>
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
+
+ <dynamicField name="*_t" type="text" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_n" type="pdouble" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_d" type="pdaterange" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_l" type="string" indexed="true" stored="true" uninvertible="false" docValues="false" multiValued="true"/>
+ <dynamicField name="*_i" type="string" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+
+ <dynamicField name="*_a" type="text" indexed="true" stored="false" uninvertible="false" docValues="false"/>
+
+ <copyField source="*_t" dest="text"/>
+
+ <copyField source="*_t" dest="*_a"/>
+ <copyField source="*_n" dest="*_a"/>
+</schema>
diff --git a/solr-8.1.1/server/solr/dash/conf/schema.xml~ b/solr-8.1.1/server/solr/dash/conf/schema.xml~
new file mode 100644
index 000000000..3b2addf78
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/schema.xml~
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema name="default-config" version="1.6">
+ <uniqueKey>id</uniqueKey>
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true"/>
+ <fieldType name="text" class="solr.TextField">
+ <analyzer type="index">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/>
+ </analyzer>
+ <analyzer type="query">
+ <tokenizer class="solr.StandardTokenizerFactory"/>
+ <filter class="solr.StopFilterFactory" words="stopwords.txt"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ <filter class="solr.PorterStemFilterFactory"/>
+ </analyzer>
+ </fieldType>
+ <field name="data" type="text" indexed="true" stored="true" uninvertible="false"/>
+ <field name="id" type="string" indexed="true" stored="true" uninvertible="false" required="true"/>
+ <field name="_version_" type="long" indexed="false" stored="false" multiValued="false"/>
+</schema>
diff --git a/solr-8.1.1/server/solr/dash/conf/solrconfig.xml b/solr-8.1.1/server/solr/dash/conf/solrconfig.xml
new file mode 100644
index 000000000..60f06f57f
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/solrconfig.xml
@@ -0,0 +1,1328 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.0.0</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <schemaFactory class="ClassicIndexSchemaFactory"/>
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ A "compressionMode" string element can be added to <codecFactory> to choose
+ between the existing compression modes in the default codec: "BEST_SPEED" (default)
+ or "BEST_COMPRESSION".
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ <double name="noCFSRatio">0.1</double>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting The value to true will instruct the underlying Lucene
+ IndexWriter to write its debugging info the specified file
+ -->
+ <!-- <infoStream file="INFOSTREAM.txt">false</infoStream> -->
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory.
+ "numVersionBuckets" - sets the number of buckets used to keep
+ track of max version values when checking for re-ordered
+ updates; increase this value to reduce the cost of
+ synchronizing access to version buckets during high-volume
+ indexing, this requires 8 bytes (long) * numVersionBuckets
+ of heap space per Solr core.
+ -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>600000</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>1000</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+
+ <!-- Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded. It is safe to increase or remove this setting,
+ since it is purely an arbitrary limit to try and catch user errors where
+ large boolean queries may not be the best implementation choice.
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy. Note that when this option is specified, the size
+ and initialSize parameters are ignored.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ Additional supported parameter by LRUCache:
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ -->
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">8</int>
+ <str name="df">text</str>
+ <!-- Default search field
+ <str name="df">text</str>
+ -->
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ </lst>
+ </requestHandler>
+
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler" useParams="query,facets,velocity,browse">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">_text_</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="fmap.content">_text_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">_text_</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+ -->
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Clustering Component. (Omitted here. See the default Solr example for a typical configuration.) -->
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+
+ <!-- Add unknown fields to the schema
+
+ Field type guessing update processors that will
+ attempt to parse string-typed field values as Booleans, Longs,
+ Doubles, or Dates, and then add schema fields with the guessed
+ field types. Text content will be indexed as "text_general" as
+ well as a copy to a plain string version in *_str.
+
+ These require that the schema is both managed and mutable, by
+ declaring schemaFactory as ManagedIndexSchemaFactory, with
+ mutable specified as true.
+
+ See http://wiki.apache.org/solr/GuessingFieldTypes
+ -->
+ <updateProcessor class="solr.UUIDUpdateProcessorFactory" name="uuid"/>
+ <updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove-blank"/>
+ <updateProcessor class="solr.FieldNameMutatingUpdateProcessorFactory" name="field-name-mutating">
+ <str name="pattern">[^\w-\.]</str>
+ <str name="replacement">_</str>
+ </updateProcessor>
+ <updateProcessor class="solr.ParseBooleanFieldUpdateProcessorFactory" name="parse-boolean"/>
+ <updateProcessor class="solr.ParseLongFieldUpdateProcessorFactory" name="parse-long"/>
+ <updateProcessor class="solr.ParseDoubleFieldUpdateProcessorFactory" name="parse-double"/>
+ <updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
+ <arr name="format">
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
+ <str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
+ <str>EEEE, dd-MMM-yy HH:mm:ss z</str>
+ <str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
+ </arr>
+ </updateProcessor>
+
+ <!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
+ <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
+ processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date">
+ <processor class="solr.LogUpdateProcessorFactory"/>
+ <processor class="solr.DistributedUpdateProcessorFactory"/>
+ <processor class="solr.RunUpdateProcessorFactory"/>
+ </updateRequestProcessorChain>
+
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ <str name="solr.resource.loader.enabled">${velocity.solr.resource.loader.enabled:true}</str>
+ <str name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:false}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+</config>
diff --git a/solr-8.1.1/server/solr/dash/conf/solrconfig.xml~ b/solr-8.1.1/server/solr/dash/conf/solrconfig.xml~
new file mode 100644
index 000000000..5854cf2d9
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/solrconfig.xml~
@@ -0,0 +1,1358 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ For more details about configurations options that may appear in
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
+-->
+<config>
+ <!-- In all configuration below, a prefix of "solr." for class names
+ is an alias that causes solr to search appropriate packages,
+ including org.apache.solr.(search|update|request|core|analysis)
+
+ You may also specify a fully qualified Java classname if you
+ have your own custom plugins.
+ -->
+
+ <!-- Controls what version of Lucene various components of Solr
+ adhere to. Generally, you want to use the latest version to
+ get all bug fixes and improvements. It is highly recommended
+ that you fully re-index after changing this setting as it can
+ affect both how text is indexed and queried.
+ -->
+ <luceneMatchVersion>8.0.0</luceneMatchVersion>
+
+ <!-- <lib/> directives can be used to instruct Solr to load any Jars
+ identified and use them to resolve any "plugins" specified in
+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
+ Handlers, etc...).
+
+ All directories and paths are resolved relative to the
+ instanceDir.
+
+ Please note that <lib/> directives are processed in the order
+ that they appear in your solrconfig.xml file, and are "stacked"
+ on top of each other when building a ClassLoader - so if you have
+ plugin jars with dependencies on other jars, the "lower level"
+ dependency jars should be loaded first.
+
+ If a "./lib" directory exists in your instanceDir, all files
+ found in it are included as if you had used the following
+ syntax...
+
+ <lib dir="./lib" />
+ -->
+
+ <!-- A 'dir' option by itself adds any files found in the directory
+ to the classpath, this is useful for including all jars in a
+ directory.
+
+ When a 'regex' is specified in addition to a 'dir', only the
+ files in that directory which completely match the regex
+ (anchored on both ends) will be included.
+
+ If a 'dir' option (with or without a regex) is used and nothing
+ is found that matches, a warning will be logged.
+
+ The examples below can be used to load some solr-contribs along
+ with their external dependencies.
+ -->
+ <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
+
+ <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />
+
+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
+ specific jar file. This will cause a serious error to be logged
+ if it can't be loaded.
+ -->
+ <!--
+ <lib path="../a-jar-that-does-not-exist.jar" />
+ -->
+
+ <!-- Data Directory
+
+ Used to specify an alternate directory to hold all index data
+ other than the default ./data under the Solr home. If
+ replication is in use, this should match the replication
+ configuration.
+ -->
+ <dataDir>${solr.data.dir:}</dataDir>
+
+
+ <!-- The DirectoryFactory to use for indexes.
+
+ solr.StandardDirectoryFactory is filesystem
+ based and tries to pick the best implementation for the current
+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
+ wraps solr.StandardDirectoryFactory and caches small files in memory
+ for better NRT performance.
+
+ One can force a particular implementation via solr.MMapDirectoryFactory,
+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+
+ solr.RAMDirectoryFactory is memory based and not persistent.
+ -->
+ <directoryFactory name="DirectoryFactory"
+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+
+ <schemaFactory class="ClassicIndexSchemaFactory"/>
+ <!-- The CodecFactory for defining the format of the inverted index.
+ The default implementation is SchemaCodecFactory, which is the official Lucene
+ index format, but hooks into the schema to provide per-field customization of
+ the postings lists and per-document values in the fieldType element
+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
+ are experimental, so if you choose to customize the index format, it's a good
+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
+ before upgrading to a newer version to avoid unnecessary reindexing.
+ A "compressionMode" string element can be added to <codecFactory> to choose
+ between the existing compression modes in the default codec: "BEST_SPEED" (default)
+ or "BEST_COMPRESSION".
+ -->
+ <codecFactory class="solr.SchemaCodecFactory"/>
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Index Config - These settings control low-level behavior of indexing
+ Most example settings here show the default value, but are commented
+ out, to more easily see where customizations have been made.
+
+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <indexConfig>
+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
+ LimitTokenCountFilterFactory in your fieldType definition. E.g.
+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
+ -->
+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
+
+ <!-- Expert: Enabling compound file will use less files for the index,
+ using fewer file descriptors on the expense of performance decrease.
+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
+ <!-- <useCompoundFile>false</useCompoundFile> -->
+
+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
+ indexing for buffering added documents and deletions before they are
+ flushed to the Directory.
+ maxBufferedDocs sets a limit on the number of documents buffered
+ before flushing.
+ If both ramBufferSizeMB and maxBufferedDocs is set, then
+ Lucene will flush based on whichever limit is hit first. -->
+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
+
+ <!-- Expert: Merge Policy
+ The Merge Policy in Lucene controls how merging of segments is done.
+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
+ Even older versions of Lucene used LogDocMergePolicy.
+ -->
+ <!--
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <int name="maxMergeAtOnce">10</int>
+ <int name="segmentsPerTier">10</int>
+ <double name="noCFSRatio">0.1</double>
+ </mergePolicyFactory>
+ -->
+
+ <!-- Expert: Merge Scheduler
+ The Merge Scheduler in Lucene controls how merges are
+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
+ can perform merges in the background using separate threads.
+ The SerialMergeScheduler (Lucene 2.2 default) does not.
+ -->
+ <!--
+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
+ -->
+
+ <!-- LockFactory
+
+ This option specifies which Lucene LockFactory implementation
+ to use.
+
+ single = SingleInstanceLockFactory - suggested for a
+ read-only index or when there is no possibility of
+ another process trying to modify the index.
+ native = NativeFSLockFactory - uses OS native file locking.
+ Do not use when multiple solr webapps in the same
+ JVM are attempting to share a single index.
+ simple = SimpleFSLockFactory - uses a plain file for locking
+
+ Defaults: 'native' is default for Solr3.6 and later, otherwise
+ 'simple' is the default
+
+ More details on the nuances of each LockFactory...
+ http://wiki.apache.org/lucene-java/AvailableLockFactories
+ -->
+ <lockType>${solr.lock.type:native}</lockType>
+
+ <!-- Commit Deletion Policy
+ Custom deletion policies can be specified here. The class must
+ implement org.apache.lucene.index.IndexDeletionPolicy.
+
+ The default Solr IndexDeletionPolicy implementation supports
+ deleting index commit points on number of commits, age of
+ commit point and optimized status.
+
+ The latest commit point should always be preserved regardless
+ of the criteria.
+ -->
+ <!--
+ <deletionPolicy class="solr.SolrDeletionPolicy">
+ -->
+ <!-- The number of commit points to be kept -->
+ <!-- <str name="maxCommitsToKeep">1</str> -->
+ <!-- The number of optimized commit points to be kept -->
+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
+ <!--
+ Delete all commit points once they have reached the given age.
+ Supports DateMathParser syntax e.g.
+ -->
+ <!--
+ <str name="maxCommitAge">30MINUTES</str>
+ <str name="maxCommitAge">1DAY</str>
+ -->
+ <!--
+ </deletionPolicy>
+ -->
+
+ <!-- Lucene Infostream
+
+ To aid in advanced debugging, Lucene provides an "InfoStream"
+ of detailed information when indexing.
+
+ Setting The value to true will instruct the underlying Lucene
+ IndexWriter to write its debugging info the specified file
+ -->
+ <!-- <infoStream file="INFOSTREAM.txt">false</infoStream> -->
+ </indexConfig>
+
+
+ <!-- JMX
+
+ This example enables JMX if and only if an existing MBeanServer
+ is found, use this if you want to configure JMX through JVM
+ parameters. Remove this to disable exposing Solr configuration
+ and statistics to JMX.
+
+ For more details see http://wiki.apache.org/solr/SolrJmx
+ -->
+ <jmx />
+ <!-- If you want to connect to a particular server, specify the
+ agentId
+ -->
+ <!-- <jmx agentId="myAgent" /> -->
+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
+ -->
+
+ <!-- The default high-performance update handler -->
+ <updateHandler class="solr.DirectUpdateHandler2">
+
+ <!-- Enables a transaction log, used for real-time get, durability, and
+ and solr cloud replica recovery. The log can grow as big as
+ uncommitted changes to the index, so use of a hard autoCommit
+ is recommended (see below).
+ "dir" - the target directory for transaction logs, defaults to the
+ solr data directory.
+ "numVersionBuckets" - sets the number of buckets used to keep
+ track of max version values when checking for re-ordered
+ updates; increase this value to reduce the cost of
+ synchronizing access to version buckets during high-volume
+ indexing, this requires 8 bytes (long) * numVersionBuckets
+ of heap space per Solr core.
+ -->
+ <updateLog>
+ <str name="dir">${solr.ulog.dir:}</str>
+ <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
+ </updateLog>
+
+ <!-- AutoCommit
+
+ Perform a hard commit automatically under certain conditions.
+ Instead of enabling autoCommit, consider using "commitWithin"
+ when adding documents.
+
+ http://wiki.apache.org/solr/UpdateXmlMessages
+
+ maxDocs - Maximum number of documents to add since the last
+ commit before automatically triggering a new commit.
+
+ maxTime - Maximum amount of time in ms that is allowed to pass
+ since a document was added before automatically
+ triggering a new commit.
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+
+ If the updateLog is enabled, then it's highly recommended to
+ have some sort of hard autoCommit to limit the log size.
+ -->
+ <autoCommit>
+ <maxTime>600000</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
+
+ <!-- softAutoCommit is like autoCommit except it causes a
+ 'soft' commit which only ensures that changes are visible
+ but does not ensure that data is synced to disk. This is
+ faster and more near-realtime friendly than a hard commit.
+ -->
+
+ <autoSoftCommit>
+ <maxTime>1000</maxTime>
+ </autoSoftCommit>
+
+ <!-- Update Related Event Listeners
+
+ Various IndexWriter related events can trigger Listeners to
+ take actions.
+
+ postCommit - fired after every commit or optimize command
+ postOptimize - fired after every optimize command
+ -->
+
+ </updateHandler>
+
+ <!-- IndexReaderFactory
+
+ Use the following format to specify a custom IndexReaderFactory,
+ which allows for alternate IndexReader implementations.
+
+ ** Experimental Feature **
+
+ Please note - Using a custom IndexReaderFactory may prevent
+ certain other features from working. The API to
+ IndexReaderFactory may change without warning or may even be
+ removed from future releases if the problems cannot be
+ resolved.
+
+
+ ** Features that may not work with custom IndexReaderFactory **
+
+ The ReplicationHandler assumes a disk-resident index. Using a
+ custom IndexReader implementation may cause incompatibility
+ with ReplicationHandler and may cause replication to not work
+ correctly. See SOLR-1366 for details.
+
+ -->
+ <!--
+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
+ <str name="someArg">Some Value</str>
+ </indexReaderFactory >
+ -->
+
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Query section - these settings control query time things like caches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <query>
+
+ <!-- Maximum number of clauses in each BooleanQuery, an exception
+ is thrown if exceeded. It is safe to increase or remove this setting,
+ since it is purely an arbitrary limit to try and catch user errors where
+ large boolean queries may not be the best implementation choice.
+ -->
+ <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
+
+ <!-- Solr Internal Query Caches
+
+ There are two implementations of cache available for Solr,
+ LRUCache, based on a synchronized LinkedHashMap, and
+ FastLRUCache, based on a ConcurrentHashMap.
+
+ FastLRUCache has faster gets and slower puts in single
+ threaded operation and thus is generally faster than LRUCache
+ when the hit ratio of the cache is high (> 75%), and may be
+ faster under other scenarios on multi-cpu systems.
+ -->
+
+ <!-- Filter Cache
+
+ Cache used by SolrIndexSearcher for filters (DocSets),
+ unordered sets of *all* documents that match a query. When a
+ new searcher is opened, its caches may be prepopulated or
+ "autowarmed" using data from caches in the old searcher.
+ autowarmCount is the number of items to prepopulate. For
+ LRUCache, the autowarmed items will be the most recently
+ accessed items.
+
+ Parameters:
+ class - the SolrCache implementation LRUCache or
+ (LRUCache or FastLRUCache)
+ size - the maximum number of entries in the cache
+ initialSize - the initial capacity (number of entries) of
+ the cache. (see java.util.HashMap)
+ autowarmCount - the number of entries to prepopulate from
+ and old cache.
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy. Note that when this option is specified, the size
+ and initialSize parameters are ignored.
+ -->
+ <filterCache class="solr.FastLRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Query Result Cache
+
+ Caches results of searches - ordered lists of document ids
+ (DocList) based on a query, a sort, and the range of documents requested.
+ Additional supported parameter by LRUCache:
+ maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
+ to occupy
+ -->
+ <queryResultCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- Document Cache
+
+ Caches Lucene Document objects (the stored fields for each
+ document). Since Lucene internal document ids are transient,
+ this cache will not be autowarmed.
+ -->
+ <documentCache class="solr.LRUCache"
+ size="512"
+ initialSize="512"
+ autowarmCount="0"/>
+
+ <!-- custom cache currently used by block join -->
+ <cache name="perSegFilter"
+ class="solr.search.LRUCache"
+ size="10"
+ initialSize="0"
+ autowarmCount="10"
+ regenerator="solr.NoOpRegenerator" />
+
+ <!-- Field Value Cache
+
+ Cache used to hold field values that are quickly accessible
+ by document id. The fieldValueCache is created by default
+ even if not configured here.
+ -->
+ <!--
+ <fieldValueCache class="solr.FastLRUCache"
+ size="512"
+ autowarmCount="128"
+ showItems="32" />
+ -->
+
+ <!-- Custom Cache
+
+ Example of a generic cache. These caches may be accessed by
+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
+ cacheInsert(). The purpose is to enable easy caching of
+ user/application level data. The regenerator argument should
+ be specified as an implementation of solr.CacheRegenerator
+ if autowarming is desired.
+ -->
+ <!--
+ <cache name="myUserCache"
+ class="solr.LRUCache"
+ size="4096"
+ initialSize="1024"
+ autowarmCount="1024"
+ regenerator="com.mycompany.MyRegenerator"
+ />
+ -->
+
+
+ <!-- Lazy Field Loading
+
+ If true, stored fields that are not requested will be loaded
+ lazily. This can result in a significant speed improvement
+ if the usual case is to not load all stored fields,
+ especially if the skipped fields are large compressed text
+ fields.
+ -->
+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+ <!-- Use Filter For Sorted Query
+
+ A possible optimization that attempts to use a filter to
+ satisfy a search. If the requested sort does not include
+ score, then the filterCache will be checked for a filter
+ matching the query. If found, the filter will be used as the
+ source of document ids, and then the sort will be applied to
+ that.
+
+ For most situations, this will not be useful unless you
+ frequently get the same search repeatedly with different sort
+ options, and none of them ever use "score"
+ -->
+ <!--
+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
+ -->
+
+ <!-- Result Window Size
+
+ An optimization for use with the queryResultCache. When a search
+ is requested, a superset of the requested number of document ids
+ are collected. For example, if a search for a particular query
+ requests matching documents 10 through 19, and queryWindowSize is 50,
+ then documents 0 through 49 will be collected and cached. Any further
+ requests in that range can be satisfied via the cache.
+ -->
+ <queryResultWindowSize>20</queryResultWindowSize>
+
+ <!-- Maximum number of documents to cache for any entry in the
+ queryResultCache.
+ -->
+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+ <!-- Query Related Event Listeners
+
+ Various IndexSearcher related events can trigger Listeners to
+ take actions.
+
+ newSearcher - fired whenever a new searcher is being prepared
+ and there is a current searcher handling requests (aka
+ registered). It can be used to prime certain caches to
+ prevent long request times for certain requests.
+
+ firstSearcher - fired whenever a new searcher is being
+ prepared but there is no current registered searcher to handle
+ requests or to gain autowarming data from.
+
+
+ -->
+ <!-- QuerySenderListener takes an array of NamedList and executes a
+ local query request for each NamedList in sequence.
+ -->
+ <listener event="newSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
+ -->
+ </arr>
+ </listener>
+ <listener event="firstSearcher" class="solr.QuerySenderListener">
+ <arr name="queries">
+ <!--
+ <lst>
+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
+ </lst>
+ -->
+ </arr>
+ </listener>
+
+ <!-- Use Cold Searcher
+
+ If a search request comes in and there is no current
+ registered searcher, then immediately register the still
+ warming searcher and use it. If "false" then all requests
+ will block until the first searcher is done warming.
+ -->
+ <useColdSearcher>false</useColdSearcher>
+
+ </query>
+
+
+ <!-- Request Dispatcher
+
+ This section contains instructions for how the SolrDispatchFilter
+ should behave when processing requests for this SolrCore.
+
+ -->
+ <requestDispatcher>
+ <!-- Request Parsing
+
+ These settings indicate how Solr Requests may be parsed, and
+ what restrictions may be placed on the ContentStreams from
+ those requests
+
+ enableRemoteStreaming - enables use of the stream.file
+ and stream.url parameters for specifying remote streams.
+
+ multipartUploadLimitInKB - specifies the max size (in KiB) of
+ Multipart File Uploads that Solr will allow in a Request.
+
+ formdataUploadLimitInKB - specifies the max size (in KiB) of
+ form data (application/x-www-form-urlencoded) sent via
+ POST. You can use POST to pass request parameters not
+ fitting into the URL.
+
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
+ *** WARNING ***
+ Before enabling remote streaming, you should make sure your
+ system has authentication enabled.
+
+ <requestParsers enableRemoteStreaming="false"
+ multipartUploadLimitInKB="-1"
+ formdataUploadLimitInKB="-1"
+ addHttpRequestToContext="false"/>
+ -->
+
+ <!-- HTTP Caching
+
+ Set HTTP caching related parameters (for proxy caches and clients).
+
+ The options below instruct Solr not to output any HTTP Caching
+ related headers
+ -->
+ <httpCaching never304="true" />
+ <!-- If you include a <cacheControl> directive, it will be used to
+ generate a Cache-Control header (as well as an Expires header
+ if the value contains "max-age=")
+
+ By default, no Cache-Control header is generated.
+
+ You can use the <cacheControl> option even if you have set
+ never304="true"
+ -->
+ <!--
+ <httpCaching never304="true" >
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ <!-- To enable Solr to respond with automatically generated HTTP
+ Caching headers, and to response to Cache Validation requests
+ correctly, set the value of never304="false"
+
+ This will cause Solr to generate Last-Modified and ETag
+ headers based on the properties of the Index.
+
+ The following options can also be specified to affect the
+ values of these headers...
+
+ lastModFrom - the default value is "openTime" which means the
+ Last-Modified value (and validation against If-Modified-Since
+ requests) will all be relative to when the current Searcher
+ was opened. You can change it to lastModFrom="dirLastMod" if
+ you want the value to exactly correspond to when the physical
+ index was last modified.
+
+ etagSeed="..." is an option you can change to force the ETag
+ header (and validation against If-None-Match requests) to be
+ different even if the index has not changed (ie: when making
+ significant changes to your config file)
+
+ (lastModifiedFrom and etagSeed are both ignored if you use
+ the never304="true" option)
+ -->
+ <!--
+ <httpCaching lastModifiedFrom="openTime"
+ etagSeed="Solr">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ -->
+ </requestDispatcher>
+
+ <!-- Request Handlers
+
+ http://wiki.apache.org/solr/SolrRequestHandler
+
+ Incoming queries will be dispatched to a specific handler by name
+ based on the path specified in the request.
+
+ If a Request Handler is declared with startup="lazy", then it will
+ not be initialized until the first request that uses it.
+
+ -->
+ <!-- SearchHandler
+
+ http://wiki.apache.org/solr/SearchHandler
+
+ For processing Search Queries, the primary Request Handler
+ provided with Solr is "SearchHandler" It delegates to a sequent
+ of SearchComponents (see below) and supports distributed
+ queries across multiple shards
+ -->
+ <requestHandler name="/select" class="solr.SearchHandler">
+ <!-- default values for query parameters can be specified, these
+ will be overridden by parameters in the request
+ -->
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <int name="rows">10</int>
+ <str name="df">text</str>
+ <!-- Default search field
+ <str name="df">text</str>
+ -->
+ <!-- Change from JSON to XML format (the default prior to Solr 7.0)
+ <str name="wt">xml</str>
+ -->
+ </lst>
+ <!-- In addition to defaults, "appends" params can be specified
+ to identify values which should be appended to the list of
+ multi-val params from the query (or the existing "defaults").
+ -->
+ <!-- In this example, the param "fq=instock:true" would be appended to
+ any query time fq params the user may specify, as a mechanism for
+ partitioning the index, independent of any user selected filtering
+ that may also be desired (perhaps as a result of faceted searching).
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "appends" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="appends">
+ <str name="fq">inStock:true</str>
+ </lst>
+ -->
+ <!-- "invariants" are a way of letting the Solr maintainer lock down
+ the options available to Solr clients. Any params values
+ specified here are used regardless of what values may be specified
+ in either the query, the "defaults", or the "appends" params.
+
+ In this example, the facet.field and facet.query params would
+ be fixed, limiting the facets clients can use. Faceting is
+ not turned on by default - but if the client does specify
+ facet=true in the request, these are the only facets they
+ will be able to see counts for; regardless of what other
+ facet.field or facet.query params they may specify.
+
+ NOTE: there is *absolutely* nothing a client can do to prevent these
+ "invariants" values from being used, so don't use this mechanism
+ unless you are sure you always want it.
+ -->
+ <!--
+ <lst name="invariants">
+ <str name="facet.field">cat</str>
+ <str name="facet.field">manu_exact</str>
+ <str name="facet.query">price:[* TO 500]</str>
+ <str name="facet.query">price:[500 TO *]</str>
+ </lst>
+ -->
+ <!-- If the default list of SearchComponents is not desired, that
+ list can either be overridden completely, or components can be
+ prepended or appended to the default list. (see below)
+ -->
+ <!--
+ <arr name="components">
+ <str>nameOfCustomComponent1</str>
+ <str>nameOfCustomComponent2</str>
+ </arr>
+ -->
+ </requestHandler>
+
+ <!-- A request handler that returns indented JSON by default -->
+ <requestHandler name="/query" class="solr.SearchHandler">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ <str name="wt">json</str>
+ <str name="indent">true</str>
+ </lst>
+ </requestHandler>
+
+
+ <!-- A Robust Example
+
+ This example SearchHandler declaration shows off usage of the
+ SearchHandler with many defaults declared
+
+ Note that multiple instances of the same Request Handler
+ (SearchHandler) can be registered multiple times with different
+ names (and different init parameters)
+ -->
+ <requestHandler name="/browse" class="solr.SearchHandler" useParams="query,facets,velocity,browse">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ </requestHandler>
+
+ <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
+ <lst name="defaults">
+ <str name="df">_text_</str>
+ </lst>
+ </initParams>
+
+ <!-- Solr Cell Update Request Handler
+
+ http://wiki.apache.org/solr/ExtractingRequestHandler
+
+ -->
+ <requestHandler name="/update/extract"
+ startup="lazy"
+ class="solr.extraction.ExtractingRequestHandler" >
+ <lst name="defaults">
+ <str name="lowernames">true</str>
+ <str name="fmap.content">_text_</str>
+ </lst>
+ </requestHandler>
+
+ <!-- Search Components
+
+ Search components are registered to SolrCore and used by
+ instances of SearchHandler (which can access them by name)
+
+ By default, the following components are available:
+
+ <searchComponent name="query" class="solr.QueryComponent" />
+ <searchComponent name="facet" class="solr.FacetComponent" />
+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
+ <searchComponent name="highlight" class="solr.HighlightComponent" />
+ <searchComponent name="stats" class="solr.StatsComponent" />
+ <searchComponent name="debug" class="solr.DebugComponent" />
+
+ Default configuration in a requestHandler would look like:
+
+ <arr name="components">
+ <str>query</str>
+ <str>facet</str>
+ <str>mlt</str>
+ <str>highlight</str>
+ <str>stats</str>
+ <str>debug</str>
+ </arr>
+
+ If you register a searchComponent to one of the standard names,
+ that will be used instead of the default.
+
+ To insert components before or after the 'standard' components, use:
+
+ <arr name="first-components">
+ <str>myFirstComponentName</str>
+ </arr>
+
+ <arr name="last-components">
+ <str>myLastComponentName</str>
+ </arr>
+
+ NOTE: The component registered with the name "debug" will
+ always be executed after the "last-components"
+
+ -->
+
+ <!-- Spell Check
+
+ The spell check component can return a list of alternative spelling
+ suggestions.
+
+ http://wiki.apache.org/solr/SpellCheckComponent
+ -->
+ <!-- <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+ <str name="queryAnalyzerFieldType">text_general</str>
+
+ <!-- Multiple "Spell Checkers" can be declared and used by this
+ component
+ -->
+
+ <!-- a spellchecker built from a field of the main index -->
+ <lst name="spellchecker">
+ <str name="name">default</str>
+ <str name="field">_text_</str>
+ <str name="classname">solr.DirectSolrSpellChecker</str>
+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
+ <str name="distanceMeasure">internal</str>
+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
+ <float name="accuracy">0.5</float>
+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
+ <int name="maxEdits">2</int>
+ <!-- the minimum shared prefix when enumerating terms -->
+ <int name="minPrefix">1</int>
+ <!-- maximum number of inspections per result. -->
+ <int name="maxInspections">5</int>
+ <!-- minimum length of a query term to be considered for correction -->
+ <int name="minQueryLength">4</int>
+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
+ <float name="maxQueryFrequency">0.01</float>
+ <!-- uncomment this to require suggestions to occur in 1% of the documents
+ <float name="thresholdTokenFrequency">.01</float>
+ -->
+ </lst>
+
+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
+ <!--
+ <lst name="spellchecker">
+ <str name="name">wordbreak</str>
+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
+ <str name="field">name</str>
+ <str name="combineWords">true</str>
+ <str name="breakWords">true</str>
+ <int name="maxChanges">10</int>
+ </lst>
+ -->
+ </searchComponent>
+ -->
+
+ <!-- A request handler for demonstrating the spellcheck component.
+
+ NOTE: This is purely as an example. The whole purpose of the
+ SpellCheckComponent is to hook it into the request handler that
+ handles your normal user queries so that a separate request is
+ not needed to get suggestions.
+
+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
+
+ See http://wiki.apache.org/solr/SpellCheckComponent for details
+ on the request parameters.
+ -->
+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <!-- Solr will use suggestions from both the 'default' spellchecker
+ and from the 'wordbreak' spellchecker and combine them.
+ collations (re-written queries) can include a combination of
+ corrections from both spellcheckers -->
+ <str name="spellcheck.dictionary">default</str>
+ <str name="spellcheck">on</str>
+ <str name="spellcheck.extendedResults">true</str>
+ <str name="spellcheck.count">10</str>
+ <str name="spellcheck.alternativeTermCount">5</str>
+ <str name="spellcheck.maxResultsForSuggest">5</str>
+ <str name="spellcheck.collate">true</str>
+ <str name="spellcheck.collateExtendedResults">true</str>
+ <str name="spellcheck.maxCollationTries">10</str>
+ <str name="spellcheck.maxCollations">5</str>
+ </lst>
+ <arr name="last-components">
+ <str>spellcheck</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Term Vector Component
+
+ http://wiki.apache.org/solr/TermVectorComponent
+ -->
+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
+
+ <!-- A request handler for demonstrating the term vector component
+
+ This is purely as an example.
+
+ In reality you will likely want to add the component to your
+ already specified request handlers.
+ -->
+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="tv">true</bool>
+ </lst>
+ <arr name="last-components">
+ <str>tvComponent</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Clustering Component. (Omitted here. See the default Solr example for a typical configuration.) -->
+
+ <!-- Terms Component
+
+ http://wiki.apache.org/solr/TermsComponent
+
+ A component to return terms and document frequency of those
+ terms
+ -->
+ <searchComponent name="terms" class="solr.TermsComponent"/>
+
+ <!-- A request handler for demonstrating the terms component -->
+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <bool name="terms">true</bool>
+ <bool name="distrib">false</bool>
+ </lst>
+ <arr name="components">
+ <str>terms</str>
+ </arr>
+ </requestHandler>
+
+
+ <!-- Query Elevation Component
+
+ http://wiki.apache.org/solr/QueryElevationComponent
+
+ a search component that enables you to configure the top
+ results for a given query regardless of the normal lucene
+ scoring.
+ -->
+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
+ <!-- pick a fieldType to analyze queries -->
+ <str name="queryFieldType">string</str>
+ </searchComponent>
+
+ <!-- A request handler for demonstrating the elevator component -->
+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
+ <lst name="defaults">
+ <str name="echoParams">explicit</str>
+ </lst>
+ <arr name="last-components">
+ <str>elevator</str>
+ </arr>
+ </requestHandler>
+
+ <!-- Highlighting Component
+
+ http://wiki.apache.org/solr/HighlightingParameters
+ -->
+ <searchComponent class="solr.HighlightComponent" name="highlight">
+ <highlighting>
+ <!-- Configure the standard fragmenter -->
+ <!-- This could most likely be commented out in the "default" case -->
+ <fragmenter name="gap"
+ default="true"
+ class="solr.highlight.GapFragmenter">
+ <lst name="defaults">
+ <int name="hl.fragsize">100</int>
+ </lst>
+ </fragmenter>
+
+ <!-- A regular-expression-based fragmenter
+ (for sentence extraction)
+ -->
+ <fragmenter name="regex"
+ class="solr.highlight.RegexFragmenter">
+ <lst name="defaults">
+ <!-- slightly smaller fragsizes work better because of slop -->
+ <int name="hl.fragsize">70</int>
+ <!-- allow 50% slop on fragment sizes -->
+ <float name="hl.regex.slop">0.5</float>
+ <!-- a basic sentence pattern -->
+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+ </lst>
+ </fragmenter>
+
+ <!-- Configure the standard formatter -->
+ <formatter name="html"
+ default="true"
+ class="solr.highlight.HtmlFormatter">
+ <lst name="defaults">
+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
+ </lst>
+ </formatter>
+
+ <!-- Configure the standard encoder -->
+ <encoder name="html"
+ class="solr.highlight.HtmlEncoder" />
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple"
+ class="solr.highlight.SimpleFragListBuilder"/>
+
+ <!-- Configure the single fragListBuilder -->
+ <fragListBuilder name="single"
+ class="solr.highlight.SingleFragListBuilder"/>
+
+ <!-- Configure the weighted fragListBuilder -->
+ <fragListBuilder name="weighted"
+ default="true"
+ class="solr.highlight.WeightedFragListBuilder"/>
+
+ <!-- default tag FragmentsBuilder -->
+ <fragmentsBuilder name="default"
+ default="true"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <!--
+ <lst name="defaults">
+ <str name="hl.multiValuedSeparatorChar">/</str>
+ </lst>
+ -->
+ </fragmentsBuilder>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored"
+ class="solr.highlight.ScoreOrderFragmentsBuilder">
+ <lst name="defaults">
+ <str name="hl.tag.pre"><![CDATA[
+ <b style="background:yellow">,<b style="background:lawgreen">,
+ <b style="background:aquamarine">,<b style="background:magenta">,
+ <b style="background:palegreen">,<b style="background:coral">,
+ <b style="background:wheat">,<b style="background:khaki">,
+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
+ </lst>
+ </fragmentsBuilder>
+
+ <boundaryScanner name="default"
+ default="true"
+ class="solr.highlight.SimpleBoundaryScanner">
+ <lst name="defaults">
+ <str name="hl.bs.maxScan">10</str>
+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
+ </lst>
+ </boundaryScanner>
+
+ <boundaryScanner name="breakIterator"
+ class="solr.highlight.BreakIteratorBoundaryScanner">
+ <lst name="defaults">
+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
+ <str name="hl.bs.type">WORD</str>
+ <!-- language and country are used when constructing Locale object. -->
+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
+ <str name="hl.bs.language">en</str>
+ <str name="hl.bs.country">US</str>
+ </lst>
+ </boundaryScanner>
+ </highlighting>
+ </searchComponent>
+
+ <!-- Update Processors
+
+ Chains of Update Processor Factories for dealing with Update
+ Requests can be declared, and then used by name in Update
+ Request Processors
+
+ http://wiki.apache.org/solr/UpdateRequestProcessor
+
+ -->
+
+ <!-- Add unknown fields to the schema
+
+ Field type guessing update processors that will
+ attempt to parse string-typed field values as Booleans, Longs,
+ Doubles, or Dates, and then add schema fields with the guessed
+ field types. Text content will be indexed as "text_general" as
+ well as a copy to a plain string version in *_str.
+
+ These require that the schema is both managed and mutable, by
+ declaring schemaFactory as ManagedIndexSchemaFactory, with
+ mutable specified as true.
+
+ See http://wiki.apache.org/solr/GuessingFieldTypes
+ -->
+ <updateProcessor class="solr.UUIDUpdateProcessorFactory" name="uuid"/>
+ <updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove-blank"/>
+ <updateProcessor class="solr.FieldNameMutatingUpdateProcessorFactory" name="field-name-mutating">
+ <str name="pattern">[^\w-\.]</str>
+ <str name="replacement">_</str>
+ </updateProcessor>
+ <updateProcessor class="solr.ParseBooleanFieldUpdateProcessorFactory" name="parse-boolean"/>
+ <updateProcessor class="solr.ParseLongFieldUpdateProcessorFactory" name="parse-long"/>
+ <updateProcessor class="solr.ParseDoubleFieldUpdateProcessorFactory" name="parse-double"/>
+ <updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
+ <arr name="format">
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
+ <str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
+ <str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
+ <str>EEEE, dd-MMM-yy HH:mm:ss z</str>
+ <str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
+ </arr>
+ </updateProcessor>
+ <updateProcessor class="solr.AddSchemaFieldsUpdateProcessorFactory" name="add-schema-fields">
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.String</str>
+ <str name="fieldType">text_general</str>
+ <lst name="copyField">
+ <str name="dest">*_str</str>
+ <int name="maxChars">256</int>
+ </lst>
+ <!-- Use as default mapping instead of defaultFieldType -->
+ <bool name="default">true</bool>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Boolean</str>
+ <str name="fieldType">booleans</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.util.Date</str>
+ <str name="fieldType">pdates</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Long</str>
+ <str name="valueClass">java.lang.Integer</str>
+ <str name="fieldType">plongs</str>
+ </lst>
+ <lst name="typeMapping">
+ <str name="valueClass">java.lang.Number</str>
+ <str name="fieldType">pdoubles</str>
+ </lst>
+ </updateProcessor>
+
+ <!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
+ <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
+ processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
+ <processor class="solr.LogUpdateProcessorFactory"/>
+ <processor class="solr.DistributedUpdateProcessorFactory"/>
+ <processor class="solr.RunUpdateProcessorFactory"/>
+ </updateRequestProcessorChain>
+
+ <!-- Deduplication
+
+ An example dedup update processor that creates the "id" field
+ on the fly based on the hash code of some other fields. This
+ example has overwriteDupes set to false since we are using the
+ id field as the signatureField and Solr will maintain
+ uniqueness based on that anyway.
+
+ -->
+ <!--
+ <updateRequestProcessorChain name="dedupe">
+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
+ <bool name="enabled">true</bool>
+ <str name="signatureField">id</str>
+ <bool name="overwriteDupes">false</bool>
+ <str name="fields">name,features,cat</str>
+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Language identification
+
+ This example update chain identifies the language of the incoming
+ documents using the langid contrib. The detected language is
+ written to field language_s. No field name mapping is done.
+ The fields used for detection are text, title, subject and description,
+ making this example suitable for detecting languages form full-text
+ rich documents injected via ExtractingRequestHandler.
+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
+ -->
+ <!--
+ <updateRequestProcessorChain name="langid">
+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
+ <str name="langid.fl">text,title,subject,description</str>
+ <str name="langid.langField">language_s</str>
+ <str name="langid.fallback">en</str>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Script update processor
+
+ This example hooks in an update processor implemented using JavaScript.
+
+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
+ -->
+ <!--
+ <updateRequestProcessorChain name="script">
+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
+ <str name="script">update-script.js</str>
+ <lst name="params">
+ <str name="config_param">example config parameter</str>
+ </lst>
+ </processor>
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
+ -->
+
+ <!-- Response Writers
+
+ http://wiki.apache.org/solr/QueryResponseWriter
+
+ Request responses will be written using the writer specified by
+ the 'wt' request parameter matching the name of a registered
+ writer.
+
+ The "default" writer is the default and will be used if 'wt' is
+ not specified in the request.
+ -->
+ <!-- The following response writers are implicitly configured unless
+ overridden...
+ -->
+ <!--
+ <queryResponseWriter name="xml"
+ default="true"
+ class="solr.XMLResponseWriter" />
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
+ -->
+
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
+ <!-- For the purposes of the tutorial, JSON responses are written as
+ plain text so that they are easy to read in *any* browser.
+ If you expect a MIME type of "application/json" just remove this override.
+ -->
+ <str name="content-type">text/plain; charset=UTF-8</str>
+ </queryResponseWriter>
+
+ <!--
+ Custom response writers can be declared as needed...
+ -->
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
+ <str name="template.base.dir">${velocity.template.base.dir:}</str>
+ <str name="solr.resource.loader.enabled">${velocity.solr.resource.loader.enabled:true}</str>
+ <str name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:false}</str>
+ </queryResponseWriter>
+
+ <!-- XSLT response writer transforms the XML output by any xslt file found
+ in Solr's conf/xslt directory. Changes to xslt files are checked for
+ every xsltCacheLifetimeSeconds.
+ -->
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
+ <int name="xsltCacheLifetimeSeconds">5</int>
+ </queryResponseWriter>
+
+ <!-- Query Parsers
+
+ https://lucene.apache.org/solr/guide/query-syntax-and-parsing.html
+
+ Multiple QParserPlugins can be registered by name, and then
+ used in either the "defType" param for the QueryComponent (used
+ by SearchHandler) or in LocalParams
+ -->
+ <!-- example of registering a query parser -->
+ <!--
+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
+ -->
+
+ <!-- Function Parsers
+
+ http://wiki.apache.org/solr/FunctionQuery
+
+ Multiple ValueSourceParsers can be registered by name, and then
+ used as function names when using the "func" QParser.
+ -->
+ <!-- example of registering a custom function parser -->
+ <!--
+ <valueSourceParser name="myfunc"
+ class="com.mycompany.MyValueSourceParser" />
+ -->
+
+
+ <!-- Document Transformers
+ http://wiki.apache.org/solr/DocTransformers
+ -->
+ <!--
+ Could be something like:
+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
+ <int name="connection">jdbc://....</int>
+ </transformer>
+
+ To add a constant value to all docs, use:
+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <int name="value">5</int>
+ </transformer>
+
+ If you want the user to still be able to change it with _value:something_ use this:
+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
+ <double name="defaultValue">5</double>
+ </transformer>
+
+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
+ EditorialMarkerFactory will do exactly that:
+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
+ -->
+</config>
diff --git a/solr-8.1.1/server/solr/dash/conf/stopwords.txt b/solr-8.1.1/server/solr/dash/conf/stopwords.txt
new file mode 100644
index 000000000..ae1e83eeb
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/stopwords.txt
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/solr-8.1.1/server/solr/dash/conf/synonyms.txt b/solr-8.1.1/server/solr/dash/conf/synonyms.txt
new file mode 100644
index 000000000..eab4ee875
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/conf/synonyms.txt
@@ -0,0 +1,29 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaafoo => aaabar
+bbbfoo => bbbfoo bbbbar
+cccfoo => cccbar cccbaz
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterGraphFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/solr-8.1.1/server/solr/dash/core.properties b/solr-8.1.1/server/solr/dash/core.properties
new file mode 100644
index 000000000..1735a8626
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/core.properties
@@ -0,0 +1,6 @@
+#Written by CorePropertiesLocator
+#Thu Jun 13 15:10:39 UTC 2019
+name=dash
+config=solrconfig.xml
+schema=schema.xml
+dataDir=data
diff --git a/solr-8.1.1/server/solr/dash/data/index/write.lock b/solr-8.1.1/server/solr/dash/data/index/write.lock
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/solr-8.1.1/server/solr/dash/data/index/write.lock
diff --git a/solr-8.1.1/server/solr/solr.xml b/solr-8.1.1/server/solr/solr.xml
new file mode 100644
index 000000000..932f2a707
--- /dev/null
+++ b/solr-8.1.1/server/solr/solr.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ This is an example of a simple "solr.xml" file for configuring one or
+ more Solr Cores, as well as allowing Cores to be added, removed, and
+ reloaded via HTTP requests.
+
+ More information about options available in this configuration file,
+ and Solr Core administration can be found online:
+ http://wiki.apache.org/solr/CoreAdmin
+-->
+
+<solr>
+
+ <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
+
+ <solrcloud>
+
+ <str name="host">${host:}</str>
+ <int name="hostPort">${jetty.port:8983}</int>
+ <str name="hostContext">${hostContext:solr}</str>
+
+ <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
+
+ <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
+ <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
+ <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
+ <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
+ <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
+
+ </solrcloud>
+
+ <shardHandlerFactory name="shardHandlerFactory"
+ class="HttpShardHandlerFactory">
+ <int name="socketTimeout">${socketTimeout:600000}</int>
+ <int name="connTimeout">${connTimeout:60000}</int>
+ <str name="shardsWhitelist">${solr.shardsWhitelist:}</str>
+ </shardHandlerFactory>
+
+</solr>
diff --git a/solr-8.1.1/server/solr/zoo.cfg b/solr-8.1.1/server/solr/zoo.cfg
new file mode 100644
index 000000000..7e42d8c84
--- /dev/null
+++ b/solr-8.1.1/server/solr/zoo.cfg
@@ -0,0 +1,31 @@
+# The number of milliseconds of each tick
+tickTime=2000
+# The number of ticks that the initial
+# synchronization phase can take
+initLimit=10
+# The number of ticks that can pass between
+# sending a request and getting an acknowledgement
+syncLimit=5
+
+# the directory where the snapshot is stored.
+# dataDir=/opt/zookeeper/data
+# NOTE: Solr defaults the dataDir to <solrHome>/zoo_data
+
+# the port at which the clients will connect
+# clientPort=2181
+# NOTE: Solr sets this based on zkRun / zkHost params
+
+# the maximum number of client connections.
+# increase this if you need to handle more clients
+#maxClientCnxns=60
+#
+# Be sure to read the maintenance section of the
+# administrator guide before turning on autopurge.
+#
+# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
+#
+# The number of snapshots to retain in dataDir
+#autopurge.snapRetainCount=3
+# Purge task interval in hours
+# Set to "0" to disable auto purge feature
+#autopurge.purgeInterval=1
diff --git a/solr-8.1.1/server/start.jar b/solr-8.1.1/server/start.jar
new file mode 100644
index 000000000..82ee8baef
--- /dev/null
+++ b/solr-8.1.1/server/start.jar
Binary files differ
diff --git a/solr-8.1.1/server/tmp/start_1162091086783172980.properties b/solr-8.1.1/server/tmp/start_1162091086783172980.properties
new file mode 100644
index 000000000..c3317f095
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_1162091086783172980.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Fri Jun 21 14:24:12 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_2100856759874646244.properties b/solr-8.1.1/server/tmp/start_2100856759874646244.properties
new file mode 100644
index 000000000..0afe891f2
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_2100856759874646244.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jun 26 21:41:12 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_2576004904278670344.properties b/solr-8.1.1/server/tmp/start_2576004904278670344.properties
new file mode 100644
index 000000000..eeb8a16db
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_2576004904278670344.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Tue Jun 25 21:53:42 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_2971323387275179200.properties b/solr-8.1.1/server/tmp/start_2971323387275179200.properties
new file mode 100644
index 000000000..364a50ae0
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_2971323387275179200.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Mon Jul 01 20:20:49 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_3460593255669540278.properties b/solr-8.1.1/server/tmp/start_3460593255669540278.properties
new file mode 100644
index 000000000..32741d3ee
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_3460593255669540278.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jun 26 21:47:12 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_405608392786276922.properties b/solr-8.1.1/server/tmp/start_405608392786276922.properties
new file mode 100644
index 000000000..4b15b3d7f
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_405608392786276922.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Mon Jun 24 19:38:02 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_4369196645186488783.properties b/solr-8.1.1/server/tmp/start_4369196645186488783.properties
new file mode 100644
index 000000000..116e3a6e1
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_4369196645186488783.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Fri Jun 28 15:46:27 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_4663740760277313991.properties b/solr-8.1.1/server/tmp/start_4663740760277313991.properties
new file mode 100644
index 000000000..c38547ac5
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_4663740760277313991.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 19:15:41 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_4733293799511346628.properties b/solr-8.1.1/server/tmp/start_4733293799511346628.properties
new file mode 100644
index 000000000..d87531d6f
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_4733293799511346628.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Mon Jul 01 14:26:40 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_4743562251234760998.properties b/solr-8.1.1/server/tmp/start_4743562251234760998.properties
new file mode 100644
index 000000000..07e168931
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_4743562251234760998.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Tue Jul 09 18:55:20 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_5229015896118315876.properties b/solr-8.1.1/server/tmp/start_5229015896118315876.properties
new file mode 100644
index 000000000..707a758c6
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_5229015896118315876.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 16:10:20 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_5271912985233565832.properties b/solr-8.1.1/server/tmp/start_5271912985233565832.properties
new file mode 100644
index 000000000..4f5220a9d
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_5271912985233565832.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Fri Jul 12 15:10:54 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_5430857760236735908.properties b/solr-8.1.1/server/tmp/start_5430857760236735908.properties
new file mode 100644
index 000000000..a9a142e94
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_5430857760236735908.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jun 20 22:44:44 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_544112310419136346.properties b/solr-8.1.1/server/tmp/start_544112310419136346.properties
new file mode 100644
index 000000000..bd546ae3a
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_544112310419136346.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jun 26 20:29:27 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_5597932996249302507.properties b/solr-8.1.1/server/tmp/start_5597932996249302507.properties
new file mode 100644
index 000000000..0a5d1b30a
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_5597932996249302507.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 16:29:55 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_5600187431431293204.properties b/solr-8.1.1/server/tmp/start_5600187431431293204.properties
new file mode 100644
index 000000000..19d9c0952
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_5600187431431293204.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jun 19 15:04:19 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_6033597490012985323.properties b/solr-8.1.1/server/tmp/start_6033597490012985323.properties
new file mode 100644
index 000000000..bb463c28c
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_6033597490012985323.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jul 10 17:03:20 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_6505785163785330358.properties b/solr-8.1.1/server/tmp/start_6505785163785330358.properties
new file mode 100644
index 000000000..22b6b1f90
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_6505785163785330358.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jun 13 15:10:20 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_6748886024297018280.properties b/solr-8.1.1/server/tmp/start_6748886024297018280.properties
new file mode 100644
index 000000000..c72372471
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_6748886024297018280.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Fri Jun 28 17:19:15 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Desktop\\AndrewKim\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Desktop/AndrewKim/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_7361894075389096225.properties b/solr-8.1.1/server/tmp/start_7361894075389096225.properties
new file mode 100644
index 000000000..67819e570
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_7361894075389096225.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 16:13:09 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_7478138185329880739.properties b/solr-8.1.1/server/tmp/start_7478138185329880739.properties
new file mode 100644
index 000000000..950a611e0
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_7478138185329880739.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 16:20:39 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8093481146562670635.properties b/solr-8.1.1/server/tmp/start_8093481146562670635.properties
new file mode 100644
index 000000000..a4edbb182
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8093481146562670635.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jun 13 17:43:49 UTC 2019
+java.version.platform=8
+java.version=1.8.0_181
+java.version.micro=0
+jetty.home=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
+jetty.base=C\:\\Users\\avd\\Downloads\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/avd/Downloads/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8121074207568089845.properties b/solr-8.1.1/server/tmp/start_8121074207568089845.properties
new file mode 100644
index 000000000..0d3a84d32
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8121074207568089845.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jul 10 15:47:10 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8126409778075289800.properties b/solr-8.1.1/server/tmp/start_8126409778075289800.properties
new file mode 100644
index 000000000..92353cbb9
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8126409778075289800.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Fri Jul 05 17:17:36 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8282691445249098340.properties b/solr-8.1.1/server/tmp/start_8282691445249098340.properties
new file mode 100644
index 000000000..2cdb314c3
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8282691445249098340.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Mon Jul 08 19:16:52 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8630006632336387536.properties b/solr-8.1.1/server/tmp/start_8630006632336387536.properties
new file mode 100644
index 000000000..122681318
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8630006632336387536.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Wed Jul 03 16:04:22 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr-8.1.1/server/tmp/start_8840501328449354697.properties b/solr-8.1.1/server/tmp/start_8840501328449354697.properties
new file mode 100644
index 000000000..726eae1a8
--- /dev/null
+++ b/solr-8.1.1/server/tmp/start_8840501328449354697.properties
@@ -0,0 +1,11 @@
+#start.jar properties
+#Thu Jul 11 15:55:05 UTC 2019
+java.version.platform=8
+java.version=1.8.0_161
+java.version.micro=0
+jetty.home=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.minor=8
+jetty.home.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
+jetty.base=C\:\\Users\\GFX lab\\Desktop\\AB_Documents\\Dash Web\\Dash-Web\\solr-8.1.1\\server
+java.version.major=1
+jetty.base.uri=file\:///C\:/Users/GFX%20lab/Desktop/AB_Documents/Dash%20Web/Dash-Web/solr-8.1.1/server
diff --git a/solr/conf/solrconfig.xml b/solr/conf/solrconfig.xml
index 0d8792749..60f06f57f 100644
--- a/solr/conf/solrconfig.xml
+++ b/solr/conf/solrconfig.xml
@@ -695,7 +695,7 @@
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
- <int name="rows">10000000</int>
+ <int name="rows">8</int>
<str name="df">text</str>
<!-- Default search field
<str name="df">text</str>
diff --git a/src/client/DocServer.ts b/src/client/DocServer.ts
index 258acd9cd..fc39fa364 100644
--- a/src/client/DocServer.ts
+++ b/src/client/DocServer.ts
@@ -124,16 +124,17 @@ export namespace DocServer {
// future .proto calls on the Doc won't have to go farther than the cache to get their actual value.
const deserializeField = getSerializedField.then(async fieldJson => {
// deserialize
- const field = await SerializationHelper.Deserialize(fieldJson);
+ const field = await SerializationHelper.Deserialize(fieldJson, val => {
+ if (val !== undefined) {
+ _cache[id] = val;
+ } else {
+ delete _cache[id];
+ }
+ });
+ return field;
// either way, overwrite or delete any promises cached at this id (that we inserted as flags
// to indicate that the field was in the process of being fetched). Now everything
// should be an actual value within or entirely absent from the cache.
- if (field !== undefined) {
- _cache[id] = field;
- } else {
- delete _cache[id];
- }
- return field;
});
// here, indicate that the document associated with this id is currently
// being retrieved and cached
@@ -214,15 +215,23 @@ export namespace DocServer {
const deserializeFields = getSerializedFields.then(async fields => {
const fieldMap: { [id: string]: RefField } = {};
// const protosToLoad: any = [];
+ const proms: Promise<RefField>[] = [];
for (const field of fields) {
if (field !== undefined) {
// deserialize
- let deserialized = await SerializationHelper.Deserialize(field);
- fieldMap[field.id] = deserialized;
+ let prom = SerializationHelper.Deserialize(field, val => {
+ if (val !== undefined) {
+ _cache[field.id] = field;
+ } else {
+ delete _cache[field.id];
+ }
+ }).then(deserialized => fieldMap[field.id] = deserialized);
+ proms.push(prom);
// adds to a list of promises that will be awaited asynchronously
// protosToLoad.push(deserialized.proto);
}
}
+ await Promise.all(proms);
// this actually handles the loading of prototypes
// await Promise.all(protosToLoad);
return fieldMap;
diff --git a/src/client/apis/youtube/YoutubeBox.scss b/src/client/apis/youtube/YoutubeBox.scss
index 1fc91a9ae..eabdbb1ac 100644
--- a/src/client/apis/youtube/YoutubeBox.scss
+++ b/src/client/apis/youtube/YoutubeBox.scss
@@ -1,124 +1,126 @@
-ul {
- list-style-type: none;
- padding-inline-start: 10px;
-}
-
-
-li {
- margin: 4px;
- display: inline-flex;
-}
-
-li:hover {
- cursor: pointer;
- opacity: 0.8;
-}
-
-.search_wrapper {
- width: 100%;
- display: inline-flex;
- height: 175px;
-
- .video_duration {
- // margin: 0;
- // padding: 0;
- border: 0;
- background: transparent;
- display: inline-block;
- position: relative;
- bottom: 25px;
- left: 85%;
+.youtubeBox-cont {
+ ul {
+ list-style-type: none;
+ padding-inline-start: 10px;
+ }
+
+
+ li {
margin: 4px;
- color: #FFFFFF;
- background-color: rgba(0, 0, 0, 0.80);
- padding: 2px 4px;
- border-radius: 2px;
- letter-spacing: .5px;
- font-size: 1.2rem;
- font-weight: 500;
- line-height: 1.2rem;
+ display: inline-flex;
+ }
+ li:hover {
+ cursor: pointer;
+ opacity: 0.8;
}
- .textual_info {
- font-family: Arial, Helvetica, sans-serif;
-
- .videoTitle {
- margin-left: 4px;
- // display: inline-block;
- color: #0D0D0D;
- -webkit-line-clamp: 2;
- display: block;
- max-height: 4.8rem;
- overflow: hidden;
- font-size: 1.8rem;
- font-weight: 400;
- line-height: 2.4rem;
- -webkit-box-orient: vertical;
- text-overflow: ellipsis;
- white-space: normal;
- display: -webkit-box;
- }
+ .search_wrapper {
+ width: 100%;
+ display: inline-flex;
+ height: 175px;
- .channelName {
- color:#606060;
- margin-left: 4px;
- font-size: 1.3rem;
- font-weight: 400;
- line-height: 1.8rem;
- text-transform: none;
- margin-top: 0px;
+ .video_duration {
+ // margin: 0;
+ // padding: 0;
+ border: 0;
+ background: transparent;
display: inline-block;
- }
+ position: relative;
+ bottom: 25px;
+ left: 85%;
+ margin: 4px;
+ color: #FFFFFF;
+ background-color: rgba(0, 0, 0, 0.80);
+ padding: 2px 4px;
+ border-radius: 2px;
+ letter-spacing: .5px;
+ font-size: 1.2rem;
+ font-weight: 500;
+ line-height: 1.2rem;
- .video_description {
- margin-left: 4px;
- // font-size: 12px;
- color: #606060;
- padding-top: 8px;
- margin-bottom: 8px;
- display: block;
- line-height: 1.8rem;
- max-height: 4.2rem;
- overflow: hidden;
- font-size: 1.3rem;
- font-weight: 400;
- text-transform: none;
}
- .publish_time {
- //display: inline-block;
- margin-left: 8px;
- padding: 0;
- border: 0;
- background: transparent;
- color: #606060;
- max-width: 100%;
- line-height: 1.8rem;
- max-height: 3.6rem;
- overflow: hidden;
- font-size: 1.3rem;
- font-weight: 400;
- text-transform: none;
- }
+ .textual_info {
+ font-family: Arial, Helvetica, sans-serif;
+
+ .videoTitle {
+ margin-left: 4px;
+ // display: inline-block;
+ color: #0D0D0D;
+ -webkit-line-clamp: 2;
+ display: block;
+ max-height: 4.8rem;
+ overflow: hidden;
+ font-size: 1.8rem;
+ font-weight: 400;
+ line-height: 2.4rem;
+ -webkit-box-orient: vertical;
+ text-overflow: ellipsis;
+ white-space: normal;
+ display: -webkit-box;
+ }
+
+ .channelName {
+ color: #606060;
+ margin-left: 4px;
+ font-size: 1.3rem;
+ font-weight: 400;
+ line-height: 1.8rem;
+ text-transform: none;
+ margin-top: 0px;
+ display: inline-block;
+ }
+
+ .video_description {
+ margin-left: 4px;
+ // font-size: 12px;
+ color: #606060;
+ padding-top: 8px;
+ margin-bottom: 8px;
+ display: block;
+ line-height: 1.8rem;
+ max-height: 4.2rem;
+ overflow: hidden;
+ font-size: 1.3rem;
+ font-weight: 400;
+ text-transform: none;
+ }
+
+ .publish_time {
+ //display: inline-block;
+ margin-left: 8px;
+ padding: 0;
+ border: 0;
+ background: transparent;
+ color: #606060;
+ max-width: 100%;
+ line-height: 1.8rem;
+ max-height: 3.6rem;
+ overflow: hidden;
+ font-size: 1.3rem;
+ font-weight: 400;
+ text-transform: none;
+ }
+
+ .viewCount {
+
+ margin-left: 8px;
+ padding: 0;
+ border: 0;
+ background: transparent;
+ color: #606060;
+ max-width: 100%;
+ line-height: 1.8rem;
+ max-height: 3.6rem;
+ overflow: hidden;
+ font-size: 1.3rem;
+ font-weight: 400;
+ text-transform: none;
+ }
+
- .viewCount {
- margin-left: 8px;
- padding: 0;
- border: 0;
- background: transparent;
- color: #606060;
- max-width: 100%;
- line-height: 1.8rem;
- max-height: 3.6rem;
- overflow: hidden;
- font-size: 1.3rem;
- font-weight: 400;
- text-transform: none;
}
-
-
-
}
} \ No newline at end of file
diff --git a/src/client/apis/youtube/YoutubeBox.tsx b/src/client/apis/youtube/YoutubeBox.tsx
index 7f9a3ad70..dc142802c 100644
--- a/src/client/apis/youtube/YoutubeBox.tsx
+++ b/src/client/apis/youtube/YoutubeBox.tsx
@@ -343,7 +343,7 @@ export class YoutubeBox extends React.Component<FieldViewProps> {
render() {
let content =
- <div style={{ width: "100%", height: "100%", position: "absolute" }} onWheel={this.onPostWheel} onPointerDown={this.onPostPointer} onPointerMove={this.onPostPointer} onPointerUp={this.onPostPointer}>
+ <div className="youtubeBox-cont" style={{ width: "100%", height: "100%", position: "absolute" }} onWheel={this.onPostWheel} onPointerDown={this.onPostPointer} onPointerMove={this.onPostPointer} onPointerUp={this.onPostPointer}>
<input type="text" placeholder="Search for a video" onKeyDown={this.onEnterKeyDown} style={{ height: 40, width: "100%", border: "1px solid black", padding: 5, textAlign: "center" }} ref={(e) => this.YoutubeSearchElement = e!} />
{this.renderSearchResultsOrVideo()}
</div>;
diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts
index 076907f09..c118d91d3 100644
--- a/src/client/cognitive_services/CognitiveServices.ts
+++ b/src/client/cognitive_services/CognitiveServices.ts
@@ -1,15 +1,11 @@
import * as request from "request-promise";
import { Doc, Field, Opt } from "../../new_fields/Doc";
import { Cast } from "../../new_fields/Types";
-import { ImageField } from "../../new_fields/URLField";
-import { List } from "../../new_fields/List";
import { Docs } from "../documents/Documents";
import { RouteStore } from "../../server/RouteStore";
import { Utils } from "../../Utils";
-import { CompileScript } from "../util/Scripting";
-import { ComputedField } from "../../new_fields/ScriptField";
import { InkData } from "../../new_fields/InkField";
-import { undoBatch, UndoManager } from "../util/UndoManager";
+import { UndoManager } from "../util/UndoManager";
type APIManager<D> = { converter: BodyConverter<D>, requester: RequestExecutor, analyzer: AnalysisApplier };
type RequestExecutor = (apiKey: string, body: string, service: Service) => Promise<string>;
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 2dcf655e3..2a1f63d59 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -414,7 +414,7 @@ export namespace Docs {
}
export function FreeformDocument(documents: Array<Doc>, options: DocumentOptions) {
- return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title")]), ...options, viewType: CollectionViewType.Freeform });
+ return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title", "#f1efeb")]), ...options, viewType: CollectionViewType.Freeform });
}
export function SchemaDocument(schemaColumns: SchemaHeaderField[], documents: Array<Doc>, options: DocumentOptions) {
@@ -422,15 +422,15 @@ export namespace Docs {
}
export function TreeDocument(documents: Array<Doc>, options: DocumentOptions) {
- return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title")]), ...options, viewType: CollectionViewType.Tree });
+ return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title", "#f1efeb")]), ...options, viewType: CollectionViewType.Tree });
}
export function StackingDocument(documents: Array<Doc>, options: DocumentOptions) {
- return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title")]), ...options, viewType: CollectionViewType.Stacking });
+ return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title", "#f1efeb")]), ...options, viewType: CollectionViewType.Stacking });
}
export function MasonryDocument(documents: Array<Doc>, options: DocumentOptions) {
- return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title")]), ...options, viewType: CollectionViewType.Masonry });
+ return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { chromeStatus: "collapsed", schemaColumns: new List([new SchemaHeaderField("title", "#f1efeb")]), ...options, viewType: CollectionViewType.Masonry });
}
export function ButtonDocument(options?: DocumentOptions) {
diff --git a/src/client/util/DictationManager.ts b/src/client/util/DictationManager.ts
new file mode 100644
index 000000000..b58bdb6c7
--- /dev/null
+++ b/src/client/util/DictationManager.ts
@@ -0,0 +1,39 @@
+namespace CORE {
+ export interface IWindow extends Window {
+ webkitSpeechRecognition: any;
+ }
+}
+
+const { webkitSpeechRecognition }: CORE.IWindow = window as CORE.IWindow;
+
+export default class DictationManager {
+ public static Instance = new DictationManager();
+ private isListening = false;
+ private recognizer: any;
+
+ constructor() {
+ this.recognizer = new webkitSpeechRecognition();
+ this.recognizer.interimResults = false;
+ this.recognizer.continuous = true;
+ }
+
+ finish = (handler: any, data: any) => {
+ handler(data);
+ this.isListening = false;
+ this.recognizer.stop();
+ }
+
+ listen = () => {
+ if (this.isListening) {
+ return undefined;
+ }
+ this.isListening = true;
+ this.recognizer.start();
+ return new Promise<string>((resolve, reject) => {
+ this.recognizer.onresult = (e: any) => this.finish(resolve, e.results[0][0].transcript);
+ this.recognizer.onerror = (e: any) => this.finish(reject, e);
+ });
+
+ }
+
+} \ No newline at end of file
diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts
index abcc3a4e1..0b5c785a4 100644
--- a/src/client/util/DragManager.ts
+++ b/src/client/util/DragManager.ts
@@ -10,6 +10,7 @@ import { LinkManager } from "./LinkManager";
import { SelectionManager } from "./SelectionManager";
import { SchemaHeaderField } from "../../new_fields/SchemaHeaderField";
import { DocumentDecorations } from "../views/DocumentDecorations";
+import { NumberLiteralType } from "typescript";
export type dropActionType = "alias" | "copy" | undefined;
export function SetupDrag(
@@ -140,6 +141,10 @@ export namespace DragManager {
dragHasStarted?: () => void;
withoutShiftDrag?: boolean;
+
+ offsetX?: number;
+
+ offsetY?: number;
}
export interface DragDropDisposer {
@@ -423,7 +428,7 @@ export namespace DragManager {
lastX = e.pageX;
lastY = e.pageY;
dragElements.map((dragElement, i) => (dragElement.style.transform =
- `translate(${(xs[i] += moveX)}px, ${(ys[i] += moveY)}px) scale(${scaleXs[i]}, ${scaleYs[i]})`)
+ `translate(${(xs[i] += moveX) + (options ? (options.offsetX || 0) : 0)}px, ${(ys[i] += moveY) + (options ? (options.offsetY || 0) : 0)}px) scale(${scaleXs[i]}, ${scaleYs[i]})`)
);
};
diff --git a/src/client/util/ProsemirrorExampleTransfer.ts b/src/client/util/ProsemirrorExampleTransfer.ts
index fa9e2e5af..c38f84551 100644
--- a/src/client/util/ProsemirrorExampleTransfer.ts
+++ b/src/client/util/ProsemirrorExampleTransfer.ts
@@ -47,6 +47,10 @@ export default function buildKeymap<S extends Schema<any>>(schema: S, mapKeys?:
bind("Mod-i", toggleMark(type));
bind("Mod-I", toggleMark(type));
}
+ if (type = schema.marks.underline) {
+ bind("Mod-u", toggleMark(type));
+ bind("Mod-U", toggleMark(type));
+ }
if (type = schema.marks.code) {
bind("Mod-`", toggleMark(type));
}
diff --git a/src/client/util/RichTextSchema.tsx b/src/client/util/RichTextSchema.tsx
index 269de0f42..ce9e29b26 100644
--- a/src/client/util/RichTextSchema.tsx
+++ b/src/client/util/RichTextSchema.tsx
@@ -283,7 +283,7 @@ export const marks: { [index: string]: MarkSpec } = {
},
highlight: {
- parseDOM: [{ style: 'background: #d9dbdd' }],
+ parseDOM: [{ style: 'color: blue' }],
toDOM() {
return ['span', {
style: 'color: blue'
@@ -291,6 +291,15 @@ export const marks: { [index: string]: MarkSpec } = {
}
},
+ search_highlight: {
+ parseDOM: [{ style: 'background: yellow' }],
+ toDOM() {
+ return ['span', {
+ style: 'background: yellow'
+ }];
+ }
+ },
+
// :: MarkSpec Code font mark. Represented as a `<code>` element.
code: {
diff --git a/src/client/util/SelectionManager.ts b/src/client/util/SelectionManager.ts
index 9efef888d..ee623d082 100644
--- a/src/client/util/SelectionManager.ts
+++ b/src/client/util/SelectionManager.ts
@@ -4,6 +4,7 @@ import { DocumentView } from "../views/nodes/DocumentView";
import { FormattedTextBox } from "../views/nodes/FormattedTextBox";
import { NumCast, StrCast } from "../../new_fields/Types";
import { InkingControl } from "../views/InkingControl";
+import { CurrentUserUtils } from "../../server/authentication/models/current_user_utils";
export namespace SelectionManager {
diff --git a/src/client/util/SerializationHelper.ts b/src/client/util/SerializationHelper.ts
index 034be8f67..13302be21 100644
--- a/src/client/util/SerializationHelper.ts
+++ b/src/client/util/SerializationHelper.ts
@@ -1,6 +1,7 @@
import { PropSchema, serialize, deserialize, custom, setDefaultModelSchema, getDefaultModelSchema, primitive, SKIP } from "serializr";
import { Field, Doc } from "../../new_fields/Doc";
import { ClientUtils } from "./ClientUtils";
+import { emptyFunction } from "../../Utils";
let serializing = 0;
export function afterDocDeserialize(cb: (err: any, val: any) => void, err: any, newValue: any) {
@@ -33,7 +34,7 @@ export namespace SerializationHelper {
return json;
}
- export async function Deserialize(obj: any): Promise<any> {
+ export async function Deserialize(obj: any, cb: (val: any) => void = emptyFunction): Promise<any> {
if (obj === undefined || obj === null) {
return undefined;
}
@@ -56,7 +57,7 @@ export namespace SerializationHelper {
}
const type = serializationTypes[obj.__type];
- const value = await new Promise(res => deserialize(type.ctor, obj, (err, result) => res(result)));
+ const value = await new Promise(res => cb(deserialize(type.ctor, obj, (err, result) => res(result))));
if (type.afterDeserialize) {
await type.afterDeserialize(value);
}
diff --git a/src/client/util/TooltipTextMenu.scss b/src/client/util/TooltipTextMenu.scss
index 40ac3abb9..ebf833dbe 100644
--- a/src/client/util/TooltipTextMenu.scss
+++ b/src/client/util/TooltipTextMenu.scss
@@ -18,7 +18,8 @@
.ProseMirror-menuitem {
margin-right: 3px;
display: inline-block;
- z-index: 100000;
+ z-index: 50000;
+ position: relative;
}
.ProseMirror-menuseparator {
@@ -67,7 +68,7 @@
}
.ProseMirror-menu-dropdown-menu {
- z-index: 100000;
+ z-index: 50000;
min-width: 6em;
background: white;
position: absolute;
@@ -235,8 +236,8 @@
}
.tooltipMenu {
- position: relative;
- z-index: 2000;
+ position: absolute;
+ z-index: 20000;
background: #121721;
border: 1px solid silver;
border-radius: 15px;
@@ -247,7 +248,7 @@
//transform: translateX(-50%);
transform: translateY(-85px);
pointer-events: all;
- height: 30px;
+ height: fit-content;
width:550px;
.ProseMirror-example-setup-style hr {
padding: 2px 10px;
@@ -264,28 +265,40 @@
}
}
-// .tooltipMenu:before {
-// content: "";
-// height: 0; width: 0;
-// position: absolute;
-// left: 50%;
-// margin-left: -5px;
-// bottom: -6px;
-// border: 5px solid transparent;
-// border-bottom-width: 0;
-// border-top-color: silver;
-// }
-// .tooltipMenu:after {
-// content: "";
-// height: 0; width: 0;
-// position: absolute;
-// left: 50%;
-// margin-left: -5px;
-// bottom: -4.5px;
-// border: 5px solid transparent;
-// border-bottom-width: 0;
-// border-top-color: $dark-color;
-// }
+.tooltipExtras {
+ position: absolute;
+ z-index: 20000;
+ background: #121721;
+ border: 1px solid silver;
+ border-radius: 15px;
+ //height: 60px;
+ //padding: 2px 10px;
+ //margin-top: 100px;
+ //-webkit-transform: translateX(-50%);
+ //transform: translateX(-50%);
+ transform: translateY(-115px);
+ pointer-events: all;
+ height: 25px;
+ width:fit-content;
+ .ProseMirror-example-setup-style hr {
+ padding: 2px 10px;
+ border: none;
+ margin: 1em 0;
+ }
+
+ .ProseMirror-example-setup-style hr:after {
+ content: "";
+ display: block;
+ height: 1px;
+ background-color: silver;
+ line-height: 2px;
+ }
+}
+
+.wrapper {
+ position: absolute;
+ pointer-events: all;
+}
.menuicon {
display: inline-block;
@@ -298,6 +311,7 @@
cursor: pointer;
text-align: center;
min-width: 10px;
+
}
.strong, .heading { font-weight: bold; }
.em { font-style: italic; }
@@ -310,9 +324,32 @@
padding-right: 0px;
}
.summarize{
- //margin-left: 15px;
color: white;
height: 20px;
- // background-color: white;
text-align: center;
+ }
+
+ .brush{
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ stroke-width: 0;
+ stroke: currentColor;
+ fill: currentColor;
+ margin-right: 15px;
+ }
+
+ .brush-active{
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ stroke-width: 3;
+ stroke: greenyellow;
+ fill: greenyellow;
+ margin-right: 15px;
+ }
+
+ .dragger{
+ color: #eee;
+ margin-left: 5px;
} \ No newline at end of file
diff --git a/src/client/util/TooltipTextMenu.tsx b/src/client/util/TooltipTextMenu.tsx
index 6214b568c..d33a52d7f 100644
--- a/src/client/util/TooltipTextMenu.tsx
+++ b/src/client/util/TooltipTextMenu.tsx
@@ -1,4 +1,6 @@
-import { action } from "mobx";
+import { action, observable, observe } from "mobx";
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faTag, faPlus, faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons';
import { Dropdown, MenuItem, icons, } from "prosemirror-menu"; //no import css
import { EditorState, NodeSelection, TextSelection, Transaction } from "prosemirror-state";
import { EditorView } from "prosemirror-view";
@@ -18,8 +20,13 @@ import { DocServer } from "../DocServer";
import { CollectionDockingView } from "../views/collections/CollectionDockingView";
import { DocumentManager } from "./DocumentManager";
import { Id } from "../../new_fields/FieldSymbols";
-import { FormattedTextBoxProps } from "../views/nodes/FormattedTextBox";
+import { FormattedTextBoxProps, FormattedTextBox } from "../views/nodes/FormattedTextBox";
+import { typeAlias } from "babel-types";
+import React, { Children } from "react";
+import ReactDOM from "react-dom";
import { Utils } from "../../Utils";
+import { LinkManager } from "./LinkManager";
+import { bool } from "prop-types";
//appears above a selection of text in a RichTextBox to give user options such as Bold, Italics, etc.
export class TooltipTextMenu {
@@ -33,6 +40,9 @@ export class TooltipTextMenu {
private fontSizeToNum: Map<MarkType, number>;
private fontStylesToName: Map<MarkType, string>;
private listTypeToIcon: Map<NodeType, string>;
+ //private link: HTMLAnchorElement;
+ private wrapper: HTMLDivElement;
+ private extras: HTMLDivElement;
private linkEditor?: HTMLDivElement;
private linkText?: HTMLDivElement;
@@ -46,13 +56,42 @@ export class TooltipTextMenu {
private _collapseBtn?: MenuItem;
+ private _brushMarks?: Set<Mark>;
+ private _brushIsEmpty: boolean = true;
+ private _brushdom?: Node;
+
+ private _marksToDoms: Map<Mark, HTMLSpanElement> = new Map();
+
+ private _collapsed: boolean = false;
+
+ @observable
+ private _storedMarks: Mark<any>[] | null | undefined;
+
+
constructor(view: EditorView, editorProps: FieldViewProps & FormattedTextBoxProps) {
this.view = view;
this.editorProps = editorProps;
+
+ this.wrapper = document.createElement("div");
this.tooltip = document.createElement("div");
+ this.extras = document.createElement("div");
+
+ this.wrapper.appendChild(this.extras);
+ this.wrapper.appendChild(this.tooltip);
+
this.tooltip.className = "tooltipMenu";
+ this.extras.className = "tooltipExtras";
+ this.wrapper.className = "wrapper";
+
+ const dragger = document.createElement("span");
+ dragger.className = "dragger";
+ dragger.textContent = ">>>";
+ this.extras.appendChild(dragger);
+
+ this.dragElement(dragger);
+
+ this._storedMarks = this.view.state.storedMarks;
- this.dragElement(this.tooltip);
// this.createCollapse();
// if (this._collapseBtn) {
// this.tooltip.appendChild(this._collapseBtn.render(this.view).dom);
@@ -71,13 +110,23 @@ export class TooltipTextMenu {
{ command: toggleMark(schema.marks.superscript), dom: this.icon("s", "superscript", "Superscript") },
{ command: toggleMark(schema.marks.subscript), dom: this.icon("s", "subscript", "Subscript") },
{ command: toggleMark(schema.marks.highlight), dom: this.icon("H", 'blue', 'Blue') }
- // { command: wrapInList(schema.nodes.bullet_list), dom: this.icon(":", "bullets") },
- // { command: wrapInList(schema.nodes.ordered_list), dom: this.icon("1)", "bullets") },
- // { command: lift, dom: this.icon("<", "lift") },
];
+
+ this._marksToDoms = new Map();
//add menu items
items.forEach(({ dom, command }) => {
this.tooltip.appendChild(dom);
+ switch (dom.title) {
+ case "Bold":
+ this._marksToDoms.set(schema.mark(schema.marks.strong), dom);
+ break;
+ case "Italic":
+ this._marksToDoms.set(schema.mark(schema.marks.em), dom);
+ break;
+ case "Underline":
+ this._marksToDoms.set(schema.mark(schema.marks.underline), dom);
+ break;
+ }
//pointer down handler to activate button effects
dom.addEventListener("pointerdown", e => {
@@ -86,12 +135,17 @@ export class TooltipTextMenu {
if (dom.contains(e.target as Node)) {
e.stopPropagation();
command(view.state, view.dispatch, view);
+ // if (this.view.state.selection.empty) {
+ // if (dom.style.color === "white") { dom.style.color = "greenyellow"; }
+ // else { dom.style.color = "white"; }
+ // }
}
});
});
this.updateLinkMenu();
+
//list of font styles
this.fontStylesToName = new Map();
this.fontStylesToName.set(schema.marks.timesNewRoman, "Times New Roman");
@@ -125,21 +179,23 @@ export class TooltipTextMenu {
this.listTypeToIcon.set(schema.nodes.ordered_list, "1)");
this.listTypes = Array.from(this.listTypeToIcon.keys());
+ //custom tools
// this.tooltip.appendChild(this.createLink().render(this.view).dom);
+ this._brushdom = this.createBrush().render(this.view).dom;
+ this.tooltip.appendChild(this._brushdom);
+ this.tooltip.appendChild(this.createLink().render(this.view).dom);
this.tooltip.appendChild(this.createStar().render(this.view).dom);
-
-
this.updateListItemDropdown(":", this.listTypeBtnDom);
this.update(view, undefined);
//view.dom.parentNode!.parentNode!.insertBefore(this.tooltip, view.dom.parentNode);
- // quick and dirty null check
+ // add tooltip to outerdiv to circumvent scaling problem
const outer_div = this.editorProps.outer_div;
- outer_div && outer_div(this.tooltip);
+ outer_div && outer_div(this.wrapper);
}
//label of dropdown will change to given label
@@ -164,6 +220,8 @@ export class TooltipTextMenu {
this.fontSizeDom = newfontSizeDom;
}
+ // Make the DIV element draggable
+
//label of dropdown will change to given label
updateFontStyleDropdown(label: string) {
//filtering function - might be unecessary
@@ -259,6 +317,8 @@ export class TooltipTextMenu {
},
hideSource: false
});
+ e.stopPropagation();
+ e.preventDefault();
};
this.linkEditor.appendChild(this.linkDrag);
// this.linkEditor.appendChild(this.linkText);
@@ -285,6 +345,7 @@ export class TooltipTextMenu {
if (elmnt) {
// if present, the header is where you move the DIV from:
elmnt.onpointerdown = dragMouseDown;
+ elmnt.ondblclick = onClick;
}
const self = this;
@@ -299,6 +360,17 @@ export class TooltipTextMenu {
document.onpointermove = elementDrag;
}
+ function onClick(e: MouseEvent) {
+ self._collapsed = !self._collapsed;
+ const children = self.wrapper.childNodes;
+ if (self._collapsed && children.length > 1) {
+ self.wrapper.removeChild(self.tooltip);
+ }
+ else {
+ self.wrapper.appendChild(self.tooltip);
+ }
+ }
+
function elementDrag(e: PointerEvent) {
e = e || window.event;
//e.preventDefault();
@@ -308,8 +380,11 @@ export class TooltipTextMenu {
pos3 = e.clientX;
pos4 = e.clientY;
// set the element's new position:
- elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
- elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
+ // elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
+ // elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
+
+ self.wrapper.style.top = (self.wrapper.offsetTop - pos2) + "px";
+ self.wrapper.style.left = (self.wrapper.offsetLeft - pos1) + "px";
}
function closeDragElement() {
@@ -334,6 +409,27 @@ export class TooltipTextMenu {
link = node && node.marks.find(m => m.type.name === "link");
}
+ deleteLink = () => {
+ let node = this.view.state.selection.$from.nodeAfter;
+ let link = node && node.marks.find(m => m.type.name === "link");
+ let href = link!.attrs.href;
+ if (href) {
+ if (href.indexOf(Utils.prepend("/doc/")) === 0) {
+ const linkclicked = href.replace(Utils.prepend("/doc/"), "").split("?")[0];
+ if (linkclicked) {
+ DocServer.GetRefField(linkclicked).then(async linkDoc => {
+ if (linkDoc instanceof Doc) {
+ LinkManager.Instance.deleteLink(linkDoc);
+ this.view.dispatch(this.view.state.tr.removeMark(this.view.state.selection.from, this.view.state.selection.to, this.view.state.schema.marks.link));
+ }
+ });
+ }
+ }
+ }
+
+
+ }
+
public static insertStar(state: EditorState<any>, dispatch: any) {
let newNode = schema.nodes.star.create({ visibility: false, text: state.selection.content(), textslice: state.selection.content().toJSON(), textlen: state.selection.to - state.selection.from });
if (dispatch) {
@@ -367,7 +463,7 @@ export class TooltipTextMenu {
}
//for a specific grouping of marks (passed in), remove all and apply the passed-in one to the selected text
- changeToMarkInGroup = (markType: MarkType, view: EditorView, fontMarks: MarkType[]) => {
+ changeToMarkInGroup = (markType: MarkType | undefined, view: EditorView, fontMarks: MarkType[]) => {
let { $cursor, ranges } = view.state.selection as TextSelection;
let state = view.state;
let dispatch = view.dispatch;
@@ -393,17 +489,23 @@ export class TooltipTextMenu {
}
}
});
- // fontsize
- if (markType.name[0] === 'p') {
- let size = this.fontSizeToNum.get(markType);
- if (size) { this.updateFontSizeDropdown(String(size) + " pt"); }
+
+ if (markType) {
+ // fontsize
+ if (markType.name[0] === 'p') {
+ let size = this.fontSizeToNum.get(markType);
+ if (size) { this.updateFontSizeDropdown(String(size) + " pt"); }
+ }
+ else {
+ let fontName = this.fontStylesToName.get(markType);
+ if (fontName) { this.updateFontStyleDropdown(fontName); }
+ }
+ //actually apply font
+ return toggleMark(markType)(view.state, view.dispatch, view);
}
else {
- let fontName = this.fontStylesToName.get(markType);
- if (fontName) { this.updateFontStyleDropdown(fontName); }
+ return;
}
- //actually apply font
- return toggleMark(markType)(view.state, view.dispatch, view);
}
//remove all node typeand apply the passed-in one to the selected text
@@ -446,6 +548,85 @@ export class TooltipTextMenu {
});
}
+ deleteLinkItem() {
+ const icon = {
+ height: 16, width: 16,
+ path: "M15.898,4.045c-0.271-0.272-0.713-0.272-0.986,0l-4.71,4.711L5.493,4.045c-0.272-0.272-0.714-0.272-0.986,0s-0.272,0.714,0,0.986l4.709,4.711l-4.71,4.711c-0.272,0.271-0.272,0.713,0,0.986c0.136,0.136,0.314,0.203,0.492,0.203c0.179,0,0.357-0.067,0.493-0.203l4.711-4.711l4.71,4.711c0.137,0.136,0.314,0.203,0.494,0.203c0.178,0,0.355-0.067,0.492-0.203c0.273-0.273,0.273-0.715,0-0.986l-4.711-4.711l4.711-4.711C16.172,4.759,16.172,4.317,15.898,4.045z"
+ };
+ return new MenuItem({
+ title: "Delete Link",
+ label: "X",
+ icon: icon,
+ css: "color: red",
+ class: "summarize",
+ execEvent: "",
+ run: (state, dispatch) => {
+ this.deleteLink();
+ }
+ });
+ }
+
+ createBrush(active: boolean = false) {
+ const icon = {
+ height: 32, width: 32,
+ path: "M30.828 1.172c-1.562-1.562-4.095-1.562-5.657 0l-5.379 5.379-3.793-3.793-4.243 4.243 3.326 3.326-14.754 14.754c-0.252 0.252-0.358 0.592-0.322 0.921h-0.008v5c0 0.552 0.448 1 1 1h5c0 0 0.083 0 0.125 0 0.288 0 0.576-0.11 0.795-0.329l14.754-14.754 3.326 3.326 4.243-4.243-3.793-3.793 5.379-5.379c1.562-1.562 1.562-4.095 0-5.657zM5.409 30h-3.409v-3.409l14.674-14.674 3.409 3.409-14.674 14.674z"
+ };
+ return new MenuItem({
+ title: "Brush tool",
+ label: "Brush tool",
+ icon: icon,
+ css: "color:white;",
+ class: active ? "brush-active" : "brush",
+ execEvent: "",
+ run: (state, dispatch) => {
+ this.brush_function(state, dispatch);
+ },
+ active: (state) => {
+ return true;
+ }
+ });
+ }
+
+ // selectionchanged event handler
+
+ brush_function(state: EditorState<any>, dispatch: any) {
+ if (this._brushIsEmpty) {
+ const selected_marks = this.getMarksInSelection(this.view.state);
+ if (this._brushdom) {
+ if (selected_marks.size >= 0) {
+ this._brushMarks = selected_marks;
+ const newbrush = this.createBrush(true).render(this.view).dom;
+ this.tooltip.replaceChild(newbrush, this._brushdom);
+ this._brushdom = newbrush;
+ this._brushIsEmpty = !this._brushIsEmpty;
+ }
+ }
+ }
+ else {
+ let { from, to, $from } = this.view.state.selection;
+ if (this._brushdom) {
+ if (!this.view.state.selection.empty && $from && $from.nodeAfter) {
+ if (this._brushMarks && to - from > 0) {
+ this.view.dispatch(this.view.state.tr.removeMark(from, to));
+ this._brushMarks.forEach((mark: Mark) => {
+ const markType = mark.type;
+ this.changeToMarkInGroup(markType, this.view, []);
+
+ });
+ }
+ }
+ else {
+ const newbrush = this.createBrush(false).render(this.view).dom;
+ this.tooltip.replaceChild(newbrush, this._brushdom);
+ this._brushdom = newbrush;
+ this._brushIsEmpty = !this._brushIsEmpty;
+ }
+ }
+ }
+
+
+ }
+
createCollapse() {
this._collapseBtn = new MenuItem({
title: "Collapse",
@@ -601,20 +782,29 @@ export class TooltipTextMenu {
};
}
- getMarksInSelection(state: EditorState<any>, targets: MarkType<any>[]) {
- let found: Mark<any>[] = [];
+ getMarksInSelection(state: EditorState<any>) {
+ let found = new Set<Mark>();
let { from, to } = state.selection as TextSelection;
state.doc.nodesBetween(from, to, (node) => {
let marks = node.marks;
if (marks) {
marks.forEach(m => {
- if (targets.includes(m.type)) found.push(m);
+ found.add(m);
});
}
});
return found;
}
+ reset_mark_doms() {
+ let iterator = this._marksToDoms.values();
+ let next = iterator.next();
+ while (!next.done) {
+ next.value.style.color = "white";
+ next = iterator.next();
+ }
+ }
+
//updates the tooltip menu when the selection changes
update(view: EditorView, lastState: EditorState | undefined) {
let state = view.state;
@@ -622,13 +812,13 @@ export class TooltipTextMenu {
if (lastState && lastState.doc.eq(state.doc) &&
lastState.selection.eq(state.selection)) return;
+ this.reset_mark_doms();
+
// Hide the tooltip if the selection is empty
if (state.selection.empty) {
//this.tooltip.style.display = "none";
//return;
}
-
-
//UPDATE LIST ITEM DROPDOWN
//UPDATE FONT STYLE DROPDOWN
@@ -666,12 +856,55 @@ export class TooltipTextMenu {
}
}
this.view.dispatch(this.view.state.tr.setStoredMarks(this._activeMarks));
+
+ this.update_mark_doms();
+ }
+
+ public mark_key_pressed(marks: Mark<any>[]) {
+ if (this.view.state.selection.empty) {
+ if (marks) this._activeMarks = marks;
+ this.update_mark_doms();
+ }
+ }
+
+ update_mark_doms() {
+ this.reset_mark_doms();
+ let foundlink = false;
+ let children = this.extras.childNodes;
+ this._activeMarks.forEach((mark) => {
+ if (this._marksToDoms.has(mark)) {
+ let dom = this._marksToDoms.get(mark);
+ if (dom) dom.style.color = "greenyellow";
+ }
+ if (children.length > 1) {
+ foundlink = true;
+ }
+ if (mark.type.name === "link" && children.length === 1) {
+ // let del = document.createElement("button");
+ // del.textContent = "X";
+ // del.style.color = "red";
+ // del.style.height = "10px";
+ // del.style.width = "10px";
+ // del.style.marginLeft = "5px";
+ // del.onclick = this.deleteLink;
+ // this.extras.appendChild(del);
+ let del = this.deleteLinkItem().render(this.view).dom;
+ this.extras.appendChild(del);
+ foundlink = true;
+ }
+ });
+ if (!foundlink) {
+ if (children.length > 1) {
+ this.extras.removeChild(children[1]);
+ }
+ }
+
}
//finds all active marks on selection in given group
activeMarksOnSelection(markGroup: MarkType[]) {
//current selection
- let { empty, ranges } = this.view.state.selection as TextSelection;
+ let { empty, ranges, $to } = this.view.state.selection as TextSelection;
let state = this.view.state;
let dispatch = this.view.dispatch;
let activeMarks: MarkType[];
@@ -686,6 +919,9 @@ export class TooltipTextMenu {
}
return false;
});
+
+ const refnode = this.reference_node($to);
+ this._activeMarks = refnode.marks;
}
else {
const pos = this.view.state.selection.$from;
@@ -696,9 +932,7 @@ export class TooltipTextMenu {
else {
return [];
}
-
this._activeMarks = ref_node.marks;
-
activeMarks = markGroup.filter(mark_type => {
if (dispatch) {
let mark = state.schema.mark(mark_type);
@@ -717,12 +951,12 @@ export class TooltipTextMenu {
reference_node(pos: ResolvedPos<any>): ProsNode {
let ref_node: ProsNode = this.view.state.doc;
- if (pos.nodeAfter !== null && pos.nodeAfter !== undefined) {
- ref_node = pos.nodeAfter;
- }
- else if (pos.nodeBefore !== null && pos.nodeBefore !== undefined) {
+ if (pos.nodeBefore !== null && pos.nodeBefore !== undefined) {
ref_node = pos.nodeBefore;
}
+ else if (pos.nodeAfter !== null && pos.nodeAfter !== undefined) {
+ ref_node = pos.nodeAfter;
+ }
else if (pos.pos > 0) {
let skip = false;
for (let i: number = pos.pos - 1; i > 0; i--) {
@@ -735,10 +969,13 @@ export class TooltipTextMenu {
});
}
}
+ if (!ref_node.isLeaf) {
+ ref_node = ref_node.child(0);
+ }
return ref_node;
}
destroy() {
- this.tooltip.remove();
+ this.wrapper.remove();
}
}
diff --git a/src/client/views/ContextMenu.tsx b/src/client/views/ContextMenu.tsx
index a608e448a..1bf6e383d 100644
--- a/src/client/views/ContextMenu.tsx
+++ b/src/client/views/ContextMenu.tsx
@@ -38,8 +38,12 @@ export class ContextMenu extends React.Component {
this._items = [];
}
- findByDescription = (target: string) => {
- return this._items.find(menuItem => menuItem.description === target);
+ findByDescription = (target: string, toLowerCase = false) => {
+ return this._items.find(menuItem => {
+ let reference = menuItem.description;
+ toLowerCase && (reference = reference.toLowerCase());
+ return reference === target;
+ });
}
@action
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index 40f2c3da9..15471371a 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -29,6 +29,7 @@ import { LinkManager } from '../util/LinkManager';
import { ObjectField } from '../../new_fields/ObjectField';
import { MetadataEntryMenu } from './MetadataEntryMenu';
import { ImageBox } from './nodes/ImageBox';
+import { CurrentUserUtils } from '../../server/authentication/models/current_user_utils';
const higflyout = require("@hig/flyout");
export const { anchorPoints } = higflyout;
export const Flyout = higflyout.default;
@@ -144,7 +145,8 @@ export class DocumentDecorations extends React.Component<{}, { value: string }>
@computed
get Bounds(): { x: number, y: number, b: number, r: number } {
return SelectionManager.SelectedDocuments().reduce((bounds, documentView) => {
- if (documentView.props.renderDepth === 0) {
+ if (documentView.props.renderDepth === 0 ||
+ Doc.AreProtosEqual(documentView.props.Document, CurrentUserUtils.UserDocument)) {
return bounds;
}
let transform = (documentView.props.ScreenToLocalTransform().scale(documentView.props.ContentScaling())).inverse();
@@ -539,7 +541,6 @@ export class DocumentDecorations extends React.Component<{}, { value: string }>
if (fixedAspect && (!nwidth || !nheight)) {
proto.nativeWidth = nwidth = doc.width || 0;
proto.nativeHeight = nheight = doc.height || 0;
- proto.ignoreAspect = true;
}
if (nwidth > 0 && nheight > 0 && !BoolCast(proto.ignoreAspect)) {
if (Math.abs(dW) > Math.abs(dH)) {
diff --git a/src/client/views/GlobalKeyHandler.ts b/src/client/views/GlobalKeyHandler.ts
index e31b44514..ea2e3e196 100644
--- a/src/client/views/GlobalKeyHandler.ts
+++ b/src/client/views/GlobalKeyHandler.ts
@@ -5,9 +5,13 @@ import { MainView } from "./MainView";
import { DragManager } from "../util/DragManager";
import { action } from "mobx";
import { Doc } from "../../new_fields/Doc";
+import { CognitiveServices } from "../cognitive_services/CognitiveServices";
+import DictationManager from "../util/DictationManager";
+import { ContextMenu } from "./ContextMenu";
+import { ContextMenuProps } from "./ContextMenuItem";
const modifiers = ["control", "meta", "shift", "alt"];
-type KeyHandler = (keycode: string, e: KeyboardEvent) => KeyControlInfo;
+type KeyHandler = (keycode: string, e: KeyboardEvent) => KeyControlInfo | Promise<KeyControlInfo>;
type KeyControlInfo = {
preventDefault: boolean,
stopPropagation: boolean
@@ -25,9 +29,10 @@ export default class KeyManager {
this.router.set(isMac ? "0001" : "0100", this.ctrl);
this.router.set(isMac ? "0100" : "0010", this.alt);
this.router.set(isMac ? "1001" : "1100", this.ctrl_shift);
+ this.router.set("1000", this.shift);
}
- public handle = (e: KeyboardEvent) => {
+ public handle = async (e: KeyboardEvent) => {
let keyname = e.key.toLowerCase();
this.handleGreedy(keyname);
@@ -43,7 +48,7 @@ export default class KeyManager {
return;
}
- let control = handleConstrained(keyname, e);
+ let control = await handleConstrained(keyname, e);
control.stopPropagation && e.stopPropagation();
control.preventDefault && e.preventDefault();
@@ -95,6 +100,27 @@ export default class KeyManager {
};
});
+ private shift = async (keyname: string) => {
+ let stopPropagation = false;
+ let preventDefault = false;
+
+ switch (keyname) {
+ case " ":
+ let transcript = await DictationManager.Instance.listen();
+ console.log(`I heard${transcript ? `: ${transcript.toLowerCase()}` : " nothing: I thought I was still listening from an earlier session."}`);
+ let command: ContextMenuProps | undefined;
+ transcript && (command = ContextMenu.Instance.findByDescription(transcript, true)) && "event" in command && command.event();
+ stopPropagation = true;
+ preventDefault = true;
+ break;
+ }
+
+ return {
+ stopPropagation: stopPropagation,
+ preventDefault: preventDefault
+ };
+ }
+
private alt = action((keyname: string) => {
let stopPropagation = true;
let preventDefault = true;
diff --git a/src/client/views/Main.scss b/src/client/views/Main.scss
index a16123476..eed2ae4fa 100644
--- a/src/client/views/Main.scss
+++ b/src/client/views/Main.scss
@@ -24,7 +24,7 @@ div {
.jsx-parser {
width: 100%;
- height:100%;
+ height: 100%;
pointer-events: none;
border-radius: inherit;
}
@@ -119,6 +119,7 @@ button:hover {
margin-bottom: 10px;
}
}
+
.toolbar-color-picker {
background-color: $light-color;
border-radius: 5px;
@@ -128,6 +129,7 @@ button:hover {
left: -3px;
box-shadow: $intermediate-color 0.2vw 0.2vw 0.8vw;
}
+
.toolbar-color-button {
border-radius: 11px;
width: 22px;
@@ -146,7 +148,7 @@ button:hover {
bottom: 22px;
left: 250px;
- > label {
+ >label {
background: $dark-color;
color: $light-color;
display: inline-block;
@@ -168,15 +170,15 @@ button:hover {
transform: scale(1.15);
}
- > input {
+ >input {
display: none;
}
- > input:not(:checked)~#add-options-content {
+ >input:not(:checked)~#add-options-content {
display: none;
}
- > input:checked~label {
+ >input:checked~label {
transform: rotate(45deg);
transition: transform 0.5s;
cursor: pointer;
@@ -221,7 +223,7 @@ ul#add-options-list {
list-style: none;
padding: 5 0 0 0;
- > li {
+ >li {
display: inline-block;
padding: 0;
}
@@ -231,7 +233,7 @@ ul#add-options-list {
height: 100%;
position: absolute;
display: flex;
- flex-direction:column;
+ flex-direction: column;
}
.mainView-libraryHandle {
@@ -243,21 +245,25 @@ ul#add-options-list {
position: absolute;
z-index: 1;
}
+
.svg-inline--fa {
vertical-align: unset;
}
+
.mainView-workspace {
- height:200px;
- position:relative;
- display:flex;
+ height: 200px;
+ position: relative;
+ display: flex;
}
+
.mainView-library {
- height:75%;
- position:relative;
- display:flex;
+ height: 75%;
+ position: relative;
+ display: flex;
}
+
.mainView-recentlyClosed {
- height:25%;
- position:relative;
- display:flex;
+ height: 25%;
+ position: relative;
+ display: flex;
} \ No newline at end of file
diff --git a/src/client/views/MainOverlayTextBox.tsx b/src/client/views/MainOverlayTextBox.tsx
index 8e2d7be85..72eb956e3 100644
--- a/src/client/views/MainOverlayTextBox.tsx
+++ b/src/client/views/MainOverlayTextBox.tsx
@@ -12,6 +12,7 @@ import "./MainOverlayTextBox.scss";
import { FormattedTextBox } from './nodes/FormattedTextBox';
interface MainOverlayTextBoxProps {
+ firstinstance?: boolean;
}
@observer
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 88a636784..2ecf5fd85 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -383,7 +383,7 @@ export class MainView extends React.Component {
let imgurl = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg";
// let addDockingNode = action(() => Docs.Create.StandardCollectionDockingDocument([{ doc: addColNode(), initialWidth: 200 }], { width: 200, height: 200, title: "a nested docking freeform collection" }));
- let addSchemaNode = action(() => Docs.Create.SchemaDocument([new SchemaHeaderField("title")], [], { width: 200, height: 200, title: "a schema collection" }));
+ let addSchemaNode = action(() => Docs.Create.SchemaDocument([new SchemaHeaderField("title", "#f1efeb")], [], { width: 200, height: 200, title: "a schema collection" }));
//let addTreeNode = action(() => Docs.TreeDocument([CurrentUserUtils.UserDocument], { width: 250, height: 400, title: "Library:" + CurrentUserUtils.email, dropAction: "alias" }));
// let addTreeNode = action(() => Docs.TreeDocument(this._northstarSchemas, { width: 250, height: 400, title: "northstar schemas", dropAction: "copy" }));
let addColNode = action(() => Docs.Create.FreeformDocument([], { width: this.pwidth * .7, height: this.pheight, title: "a freeform collection" }));
@@ -458,6 +458,7 @@ export class MainView extends React.Component {
@observable isSearchVisible = false;
@action
toggleSearch = () => {
+ // console.log("search toggling")
this.isSearchVisible = !this.isSearchVisible;
}
@@ -471,7 +472,7 @@ export class MainView extends React.Component {
{this.nodesMenu()}
{this.miscButtons}
<PDFMenu />
- <MainOverlayTextBox />
+ <MainOverlayTextBox firstinstance={true} />
<OverlayView />
</div >
);
diff --git a/src/client/views/SearchItem.tsx b/src/client/views/SearchItem.tsx
new file mode 100644
index 000000000..13e4b88f7
--- /dev/null
+++ b/src/client/views/SearchItem.tsx
@@ -0,0 +1,69 @@
+import React = require("react");
+import { library } from '@fortawesome/fontawesome-svg-core';
+import { faCaretUp, faFilePdf, faFilm, faImage, faObjectGroup, faStickyNote } from '@fortawesome/free-solid-svg-icons';
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { Doc } from "../../new_fields/Doc";
+import { DocumentManager } from "../util/DocumentManager";
+import { SetupDrag } from "../util/DragManager";
+
+
+export interface SearchProps {
+ doc: Doc;
+}
+
+library.add(faCaretUp);
+library.add(faObjectGroup);
+library.add(faStickyNote);
+library.add(faFilePdf);
+library.add(faFilm);
+
+export class SearchItem extends React.Component<SearchProps> {
+
+ onClick = () => {
+ DocumentManager.Instance.jumpToDocument(this.props.doc, false);
+ }
+
+ //needs help
+ // @computed get layout(): string { const field = Cast(this.props.doc[fieldKey], IconField); return field ? field.icon : "<p>Error loading icon data</p>"; }
+
+
+ public static DocumentIcon(layout: string) {
+ let button = layout.indexOf("PDFBox") !== -1 ? faFilePdf :
+ layout.indexOf("ImageBox") !== -1 ? faImage :
+ layout.indexOf("Formatted") !== -1 ? faStickyNote :
+ layout.indexOf("Video") !== -1 ? faFilm :
+ layout.indexOf("Collection") !== -1 ? faObjectGroup :
+ faCaretUp;
+ return <FontAwesomeIcon icon={button} className="documentView-minimizedIcon" />;
+ }
+ onPointerEnter = (e: React.PointerEvent) => {
+ this.props.doc.libraryBrush = true;
+ Doc.SetOnPrototype(this.props.doc, "protoBrush", true);
+ }
+ onPointerLeave = (e: React.PointerEvent) => {
+ this.props.doc.libraryBrush = false;
+ Doc.SetOnPrototype(this.props.doc, "protoBrush", false);
+ }
+
+ collectionRef = React.createRef<HTMLDivElement>();
+ startDocDrag = () => {
+ let doc = this.props.doc;
+ const isProto = Doc.GetT(doc, "isPrototype", "boolean", true);
+ if (isProto) {
+ return Doc.MakeDelegate(doc);
+ } else {
+ return Doc.MakeAlias(doc);
+ }
+ }
+ render() {
+ return (
+ <div className="search-item" ref={this.collectionRef} id="result"
+ onPointerEnter={this.onPointerEnter} onPointerLeave={this.onPointerLeave}
+ onClick={this.onClick} onPointerDown={SetupDrag(this.collectionRef, this.startDocDrag)} >
+ <div className="search-title" id="result" >title: {this.props.doc.title}</div>
+ {/* <div className="search-type" id="result" >Type: {this.props.doc.layout}</div> */}
+ {/* <div className="search-type" >{SearchItem.DocumentIcon(this.layout)}</div> */}
+ </div>
+ );
+ }
+} \ No newline at end of file
diff --git a/src/client/views/TemplateMenu.tsx b/src/client/views/TemplateMenu.tsx
index 1b32f0ddd..c413650f0 100644
--- a/src/client/views/TemplateMenu.tsx
+++ b/src/client/views/TemplateMenu.tsx
@@ -7,6 +7,10 @@ import { DocumentView } from "./nodes/DocumentView";
import { Template } from "./Templates";
import React = require("react");
import { undoBatch } from "../util/UndoManager";
+import { DocumentManager } from "../util/DocumentManager";
+import { NumCast } from "../../new_fields/Types";
+import { DragManager } from "../util/DragManager";
+import { SelectionManager } from "../util/SelectionManager";
const higflyout = require("@hig/flyout");
export const { anchorPoints } = higflyout;
export const Flyout = higflyout.default;
@@ -35,11 +39,46 @@ export interface TemplateMenuProps {
@observer
export class TemplateMenu extends React.Component<TemplateMenuProps> {
@observable private _hidden: boolean = true;
+ dragRef = React.createRef<HTMLDivElement>();
constructor(props: TemplateMenuProps) {
super(props);
}
+ toggleFloat = (e: React.MouseEvent): void => {
+ SelectionManager.DeselectAll();
+ let topDocView = this.props.docs[0];
+ let topDoc = topDocView.props.Document;
+ let xf = topDocView.props.ScreenToLocalTransform();
+ let ex = e.clientX;
+ let ey = e.clientY;
+ undoBatch(action(() => topDoc.z = topDoc.z ? 0 : 1))();
+ if (!topDoc.z) {
+ setTimeout(() => {
+ let newDocView = DocumentManager.Instance.getDocumentView(topDoc);
+ if (newDocView) {
+ let de = new DragManager.DocumentDragData([topDoc], [undefined]);
+ de.moveDocument = topDocView.props.moveDocument;
+ let xf = newDocView.ContentDiv!.getBoundingClientRect();
+ console.log("ex = " + ex + " " + xf.left + " " + (ex - xf.left));
+ DragManager.StartDocumentDrag([newDocView.ContentDiv!], de, ex, ey, {
+ offsetX: (ex - xf.left), offsetY: (ey - xf.top),
+ handlers: {
+ dragComplete: () => { },
+ },
+ hideSource: false
+ });
+ }
+ }, 10);
+ } else if (topDocView.props.ContainingCollectionView) {
+ let collView = topDocView.props.ContainingCollectionView!;
+ let [sx, sy] = xf.inverse().transformPoint(0, 0);
+ let [x, y] = collView.props.ScreenToLocalTransform().transformPoint(sx, sy);
+ topDoc.x = x;
+ topDoc.y = y;
+ }
+ }
+
@undoBatch
@action
toggleTemplate = (event: React.ChangeEvent<HTMLInputElement>, template: Template): void => {
@@ -89,9 +128,10 @@ export class TemplateMenu extends React.Component<TemplateMenuProps> {
return (
<div className="templating-menu" >
<div title="Template Options" className="templating-button" onClick={() => this.toggleTemplateActivity()}>+</div>
- <ul id="template-list" style={{ display: this._hidden ? "none" : "block" }}>
+ <ul id="template-list" ref={this.dragRef} style={{ display: this._hidden ? "none" : "block" }}>
{templateMenu}
- <button style={{ display: this._hidden ? "none" : "block" }} onClick={this.clearTemplates}>Clear</button>
+ <button onClick={this.toggleFloat}>Float</button>
+ <button onClick={this.clearTemplates}>Clear</button>
</ul>
</div>
);
diff --git a/src/client/views/collections/CollectionSchemaCells.tsx b/src/client/views/collections/CollectionSchemaCells.tsx
index fdf0896ac..4ff65b277 100644
--- a/src/client/views/collections/CollectionSchemaCells.tsx
+++ b/src/client/views/collections/CollectionSchemaCells.tsx
@@ -26,6 +26,7 @@ import { faExpand } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
import { KeyCodes } from "../../northstar/utils/KeyCodes";
+import { undoBatch } from "../../util/UndoManager";
library.add(faExpand);
@@ -71,6 +72,7 @@ export class CollectionSchemaCell extends React.Component<CellProps> {
document.removeEventListener("keydown", this.onKeyDown);
this._isEditing = true;
this.props.setIsEditing(true);
+
}
}
@@ -87,11 +89,15 @@ export class CollectionSchemaCell extends React.Component<CellProps> {
this.props.changeFocusedCellByIndex(this.props.row, this.props.col);
this.props.setPreviewDoc(this.props.rowProps.original);
+ // this._isEditing = true;
+ // this.props.setIsEditing(true);
+
let field = this.props.rowProps.original[this.props.rowProps.column.id!];
let doc = FieldValue(Cast(field, Doc));
if (typeof field === "object" && doc) this.props.setPreviewDoc(doc);
}
+ @undoBatch
applyToDoc = (doc: Doc, row: number, col: number, run: (args?: { [name: string]: any }) => any) => {
const res = run({ this: doc, $r: row, $c: col, $: (r: number = 0, c: number = 0) => this.props.getField(r + row, c + col) });
if (!res.success) return false;
@@ -108,7 +114,7 @@ export class CollectionSchemaCell extends React.Component<CellProps> {
this._document[fieldKey] = de.data.draggedDocuments[0];
}
else {
- let coll = Docs.Create.SchemaDocument([new SchemaHeaderField("title")], de.data.draggedDocuments, {});
+ let coll = Docs.Create.SchemaDocument([new SchemaHeaderField("title", "#f1efeb")], de.data.draggedDocuments, {});
this._document[fieldKey] = coll;
}
e.stopPropagation();
@@ -122,17 +128,17 @@ export class CollectionSchemaCell extends React.Component<CellProps> {
}
}
- expandDoc = (e: React.PointerEvent) => {
- let field = this.props.rowProps.original[this.props.rowProps.column.id as string];
- let doc = FieldValue(Cast(field, Doc));
+ // expandDoc = (e: React.PointerEvent) => {
+ // let field = this.props.rowProps.original[this.props.rowProps.column.id as string];
+ // let doc = FieldValue(Cast(field, Doc));
- console.log("Expanding doc", StrCast(doc!.title));
- this.props.setPreviewDoc(doc!);
+ // console.log("Expanding doc", StrCast(doc!.title));
+ // this.props.setPreviewDoc(doc!);
- // this.props.changeFocusedCellByIndex(this.props.row, this.props.col);
+ // // this.props.changeFocusedCellByIndex(this.props.row, this.props.col);
- e.stopPropagation();
- }
+ // e.stopPropagation();
+ // }
renderCellWithType(type: string | undefined) {
let dragRef: React.RefObject<HTMLDivElement> = React.createRef();
@@ -285,7 +291,7 @@ export class CollectionSchemaCheckboxCell extends CollectionSchemaCell {
this._isChecked = e.target.checked;
let script = CompileScript(e.target.checked.toString(), { requiredType: "boolean", addReturn: true, params: { this: Doc.name } });
if (script.compiled) {
- this.applyToDoc(this._document, script.run);
+ this.applyToDoc(this._document, this.props.row, this.props.col, script.run);
}
}
diff --git a/src/client/views/collections/CollectionSchemaHeaders.tsx b/src/client/views/collections/CollectionSchemaHeaders.tsx
index 387107c55..dfd65770e 100644
--- a/src/client/views/collections/CollectionSchemaHeaders.tsx
+++ b/src/client/views/collections/CollectionSchemaHeaders.tsx
@@ -2,7 +2,7 @@ import React = require("react");
import { action, computed, observable, trace, untracked } from "mobx";
import { observer } from "mobx-react";
import "./CollectionSchemaView.scss";
-import { faPlus, faFont, faHashtag, faAlignJustify, faCheckSquare, faToggleOn } from '@fortawesome/free-solid-svg-icons';
+import { faPlus, faFont, faHashtag, faAlignJustify, faCheckSquare, faToggleOn, faSortAmountDown, faSortAmountUp, faTimes } from '@fortawesome/free-solid-svg-icons';
import { library, IconProp } from "@fortawesome/fontawesome-svg-core";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Flyout, anchorPoints } from "../DocumentDecorations";
@@ -10,9 +10,10 @@ import { ColumnType } from "./CollectionSchemaView";
import { emptyFunction } from "../../../Utils";
import { contains } from "typescript-collections/dist/lib/arrays";
import { faFile } from "@fortawesome/free-regular-svg-icons";
-import { SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
+import { SchemaHeaderField, RandomPastel, PastelSchemaPalette } from "../../../new_fields/SchemaHeaderField";
+import { undoBatch } from "../../util/UndoManager";
-library.add(faPlus, faFont, faHashtag, faAlignJustify, faCheckSquare, faToggleOn, faFile);
+library.add(faPlus, faFont, faHashtag, faAlignJustify, faCheckSquare, faToggleOn, faFile, faSortAmountDown, faSortAmountUp, faTimes);
export interface HeaderProps {
keyValue: SchemaHeaderField;
@@ -23,23 +24,24 @@ export interface HeaderProps {
onSelect: (oldKey: string, newKey: string, addnew: boolean) => void;
setIsEditing: (isEditing: boolean) => void;
deleteColumn: (column: string) => void;
- setColumnType: (key: string, type: ColumnType) => void;
- setColumnSort: (key: string, desc: boolean) => void;
- removeColumnSort: (key: string) => void;
+ setColumnType: (column: SchemaHeaderField, type: ColumnType) => void;
+ setColumnSort: (column: SchemaHeaderField, desc: boolean | undefined) => void;
+ setColumnColor: (column: SchemaHeaderField, color: string) => void;
+
}
export class CollectionSchemaHeader extends React.Component<HeaderProps> {
render() {
let icon: IconProp = this.props.keyType === ColumnType.Number ? "hashtag" : this.props.keyType === ColumnType.String ? "font" :
this.props.keyType === ColumnType.Boolean ? "check-square" : this.props.keyType === ColumnType.Doc ? "file" : "align-justify";
-
return (
<div className="collectionSchemaView-header" style={{ background: this.props.keyValue.color }}>
<CollectionSchemaColumnMenu
- keyValue={this.props.keyValue.heading}
+ columnField={this.props.keyValue}
+ // keyValue={this.props.keyValue.heading}
possibleKeys={this.props.possibleKeys}
existingKeys={this.props.existingKeys}
- keyType={this.props.keyType}
+ // keyType={this.props.keyType}
typeConst={this.props.typeConst}
menuButtonContent={<div><FontAwesomeIcon icon={icon} size="sm" />{this.props.keyValue.heading}</div>}
addNew={false}
@@ -49,7 +51,7 @@ export class CollectionSchemaHeader extends React.Component<HeaderProps> {
onlyShowOptions={false}
setColumnType={this.props.setColumnType}
setColumnSort={this.props.setColumnSort}
- removeColumnSort={this.props.removeColumnSort}
+ setColumnColor={this.props.setColumnColor}
/>
</div>
);
@@ -70,13 +72,12 @@ export class CollectionSchemaAddColumnHeader extends React.Component<AddColumnHe
}
}
-
-
export interface ColumnMenuProps {
- keyValue: string;
+ columnField: SchemaHeaderField;
+ // keyValue: string;
possibleKeys: string[];
existingKeys: string[];
- keyType: ColumnType;
+ // keyType: ColumnType;
typeConst: boolean;
menuButtonContent: JSX.Element;
addNew: boolean;
@@ -84,10 +85,10 @@ export interface ColumnMenuProps {
setIsEditing: (isEditing: boolean) => void;
deleteColumn: (column: string) => void;
onlyShowOptions: boolean;
- setColumnType: (key: string, type: ColumnType) => void;
- setColumnSort: (key: string, desc: boolean) => void;
- removeColumnSort: (key: string) => void;
+ setColumnType: (column: SchemaHeaderField, type: ColumnType) => void;
+ setColumnSort: (column: SchemaHeaderField, desc: boolean | undefined) => void;
anchorPoint?: any;
+ setColumnColor: (column: SchemaHeaderField, color: string) => void;
}
@observer
export class CollectionSchemaColumnMenu extends React.Component<ColumnMenuProps> {
@@ -116,10 +117,16 @@ export class CollectionSchemaColumnMenu extends React.Component<ColumnMenuProps>
this.props.setIsEditing(this._isOpen);
}
- setColumnType = (oldKey: string, newKey: string, addnew: boolean) => {
- let typeStr = newKey as keyof typeof ColumnType;
- let type = ColumnType[typeStr];
- this.props.setColumnType(this.props.keyValue, type);
+ changeColumnType = (type: ColumnType): void => {
+ this.props.setColumnType(this.props.columnField, type);
+ }
+
+ changeColumnSort = (desc: boolean | undefined): void => {
+ this.props.setColumnSort(this.props.columnField, desc);
+ }
+
+ changeColumnColor = (color: string): void => {
+ this.props.setColumnColor(this.props.columnField, color);
}
@action
@@ -129,78 +136,82 @@ export class CollectionSchemaColumnMenu extends React.Component<ColumnMenuProps>
}
}
- changeColumnColor = (color: string): void => {
-
- }
-
renderTypes = () => {
if (this.props.typeConst) return <></>;
+
+ let type = this.props.columnField.type;
return (
<div className="collectionSchema-headerMenu-group">
<label>Column type:</label>
<div className="columnMenu-types">
- <button title="Any" className={this.props.keyType === ColumnType.Any ? "active" : ""} onClick={() => this.props.setColumnType(this.props.keyValue, ColumnType.Any)}>
+ <div className={"columnMenu-option" + (type === ColumnType.Any ? " active" : "")} onClick={() => this.changeColumnType(ColumnType.Any)}>
<FontAwesomeIcon icon={"align-justify"} size="sm" />
- </button>
- <button title="Number" className={this.props.keyType === ColumnType.Number ? "active" : ""} onClick={() => this.props.setColumnType(this.props.keyValue, ColumnType.Number)}>
+ Any
+ </div>
+ <div className={"columnMenu-option" + (type === ColumnType.Number ? " active" : "")} onClick={() => this.changeColumnType(ColumnType.Number)}>
<FontAwesomeIcon icon={"hashtag"} size="sm" />
- </button>
- <button title="String" className={this.props.keyType === ColumnType.String ? "active" : ""} onClick={() => this.props.setColumnType(this.props.keyValue, ColumnType.String)}>
+ Number
+ </div>
+ <div className={"columnMenu-option" + (type === ColumnType.String ? " active" : "")} onClick={() => this.changeColumnType(ColumnType.String)}>
<FontAwesomeIcon icon={"font"} size="sm" />
- </button>
- <button title="Checkbox" className={this.props.keyType === ColumnType.Boolean ? "active" : ""} onClick={() => this.props.setColumnType(this.props.keyValue, ColumnType.Boolean)}>
+ Text
+ </div>
+ <div className={"columnMenu-option" + (type === ColumnType.Boolean ? " active" : "")} onClick={() => this.changeColumnType(ColumnType.Boolean)}>
<FontAwesomeIcon icon={"check-square"} size="sm" />
- </button>
- <button title="Document" className={this.props.keyType === ColumnType.Doc ? "active" : ""} onClick={() => this.props.setColumnType(this.props.keyValue, ColumnType.Doc)}>
+ Checkbox
+ </div>
+ <div className={"columnMenu-option" + (type === ColumnType.Doc ? " active" : "")} onClick={() => this.changeColumnType(ColumnType.Doc)}>
<FontAwesomeIcon icon={"file"} size="sm" />
- </button>
+ Document
+ </div>
</div>
- </div>
+ </div >
);
}
renderSorting = () => {
+ let sort = this.props.columnField.desc;
return (
<div className="collectionSchema-headerMenu-group">
<label>Sort by:</label>
<div className="columnMenu-sort">
- <div className="columnMenu-option" onClick={() => this.props.setColumnSort(this.props.keyValue, false)}>Sort ascending</div>
- <div className="columnMenu-option" onClick={() => this.props.setColumnSort(this.props.keyValue, true)}>Sort descending</div>
- <div className="columnMenu-option" onClick={() => this.props.removeColumnSort(this.props.keyValue)}>Clear sorting</div>
+ <div className={"columnMenu-option" + (sort === true ? " active" : "")} onClick={() => this.changeColumnSort(true)}>
+ <FontAwesomeIcon icon="sort-amount-down" size="sm" />
+ Sort descending
+ </div>
+ <div className={"columnMenu-option" + (sort === false ? " active" : "")} onClick={() => this.changeColumnSort(false)}>
+ <FontAwesomeIcon icon="sort-amount-up" size="sm" />
+ Sort ascending
+ </div>
+ <div className="columnMenu-option" onClick={() => this.changeColumnSort(undefined)}>
+ <FontAwesomeIcon icon="times" size="sm" />
+ Clear sorting
+ </div>
</div>
</div>
);
}
renderColors = () => {
+ let selected = this.props.columnField.color;
+
+ let pink = PastelSchemaPalette.get("pink2");
+ let purple = PastelSchemaPalette.get("purple2");
+ let blue = PastelSchemaPalette.get("bluegreen1");
+ let yellow = PastelSchemaPalette.get("yellow4");
+ let red = PastelSchemaPalette.get("red2");
+ let gray = "#f1efeb";
+
return (
<div className="collectionSchema-headerMenu-group">
<label>Color:</label>
<div className="columnMenu-colors">
- <input type="radio" name="column-color" id="pink" value="#FFB4E8" onClick={() => this.changeColumnColor("#FFB4E8")} />
- <label htmlFor="pink">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
- <input type="radio" name="column-color" id="purple" value="#b28dff" onClick={() => this.changeColumnColor("#b28dff")} />
- <label htmlFor="purple">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
- <input type="radio" name="column-color" id="blue" value="#afcbff" onClick={() => this.changeColumnColor("#afcbff")} />
- <label htmlFor="blue">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
- <input type="radio" name="column-color" id="yellow" value="#f3ffe3" onClick={() => this.changeColumnColor("#f3ffe3")} />
- <label htmlFor="yellow">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
- <input type="radio" name="column-color" id="red" value="#ffc9de" onClick={() => this.changeColumnColor("#ffc9de")} />
- <label htmlFor="red">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
- <input type="radio" name="column=color" id="none" value="#f1efeb" onClick={() => this.changeColumnColor("#f1efeb")} />
- <label htmlFor="none">
- <div className="columnMenu-colorPicker" style={{ backgroundColor: "#FFB4E8" }}></div>
- </label>
+ <div className={"columnMenu-colorPicker" + (selected === pink ? " active" : "")} style={{ backgroundColor: pink }} onClick={() => this.changeColumnColor(pink!)}></div>
+ <div className={"columnMenu-colorPicker" + (selected === purple ? " active" : "")} style={{ backgroundColor: purple }} onClick={() => this.changeColumnColor(purple!)}></div>
+ <div className={"columnMenu-colorPicker" + (selected === blue ? " active" : "")} style={{ backgroundColor: blue }} onClick={() => this.changeColumnColor(blue!)}></div>
+ <div className={"columnMenu-colorPicker" + (selected === yellow ? " active" : "")} style={{ backgroundColor: yellow }} onClick={() => this.changeColumnColor(yellow!)}></div>
+ <div className={"columnMenu-colorPicker" + (selected === red ? " active" : "")} style={{ backgroundColor: red }} onClick={() => this.changeColumnColor(red!)}></div>
+ <div className={"columnMenu-colorPicker" + (selected === gray ? " active" : "")} style={{ backgroundColor: gray }} onClick={() => this.changeColumnColor(gray)}></div>
</div>
</div>
);
@@ -209,10 +220,10 @@ export class CollectionSchemaColumnMenu extends React.Component<ColumnMenuProps>
renderContent = () => {
return (
<div className="collectionSchema-header-menuOptions">
- <label>Key:</label>
<div className="collectionSchema-headerMenu-group">
+ <label>Key:</label>
<KeysDropdown
- keyValue={this.props.keyValue}
+ keyValue={this.props.columnField.heading}
possibleKeys={this.props.possibleKeys}
existingKeys={this.props.existingKeys}
canAddNew={true}
@@ -227,7 +238,7 @@ export class CollectionSchemaColumnMenu extends React.Component<ColumnMenuProps>
{this.renderSorting()}
{this.renderColors()}
<div className="collectionSchema-headerMenu-group">
- <button onClick={() => this.props.deleteColumn(this.props.keyValue)}>Delete Column</button>
+ <button onClick={() => this.props.deleteColumn(this.props.columnField.heading)}>Delete Column</button>
</div>
</>
}
@@ -259,9 +270,10 @@ interface KeysDropdownProps {
@observer
class KeysDropdown extends React.Component<KeysDropdownProps> {
@observable private _key: string = this.props.keyValue;
- @observable private _searchTerm: string = "";
+ @observable private _searchTerm: string = this.props.keyValue;
@observable private _isOpen: boolean = false;
@observable private _canClose: boolean = true;
+ @observable private _inputRef: React.RefObject<HTMLInputElement> = React.createRef();
@action setSearchTerm = (value: string): void => { this._searchTerm = value; };
@action setKey = (key: string): void => { this._key = key; };
@@ -275,6 +287,22 @@ class KeysDropdown extends React.Component<KeysDropdownProps> {
this.props.setIsEditing(false);
}
+ @undoBatch
+ @action
+ onKeyDown = (e: React.KeyboardEvent): void => {
+ if (e.key === "Enter") {
+ let keyOptions = this._searchTerm === "" ? this.props.possibleKeys : this.props.possibleKeys.filter(key => key.toUpperCase().indexOf(this._searchTerm.toUpperCase()) > -1);
+ let exactFound = keyOptions.findIndex(key => key.toUpperCase() === this._searchTerm.toUpperCase()) > -1 ||
+ this.props.existingKeys.findIndex(key => key.toUpperCase() === this._searchTerm.toUpperCase()) > -1;
+
+ if (!exactFound && this._searchTerm !== "" && this.props.canAddNew) {
+ this.onSelect(this._searchTerm);
+ } else {
+ this._searchTerm = this._key;
+ }
+ }
+ }
+
onChange = (val: string): void => {
this.setSearchTerm(val);
}
@@ -327,7 +355,7 @@ class KeysDropdown extends React.Component<KeysDropdownProps> {
render() {
return (
<div className="keys-dropdown">
- <input className="keys-search" type="text" value={this._searchTerm} placeholder="Search for or create a new key"
+ <input className="keys-search" ref={this._inputRef} type="text" value={this._searchTerm} placeholder="Column key" onKeyDown={this.onKeyDown}
onChange={e => this.onChange(e.target.value)} onFocus={this.onFocus} onBlur={this.onBlur}></input>
<div className="keys-options-wrapper" onPointerEnter={this.onPointerEnter} onPointerOut={this.onPointerOut}>
{this.renderOptions()}
diff --git a/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx b/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
index 7342ede7a..ec40043cc 100644
--- a/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
+++ b/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
@@ -13,6 +13,7 @@ import { faGripVertical, faTrash } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { DocumentManager } from "../../util/DocumentManager";
import { PastelSchemaPalette, SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
+import { undoBatch } from "../../util/UndoManager";
library.add(faGripVertical, faTrash);
@@ -26,6 +27,9 @@ export interface MovableColumnProps {
export class MovableColumn extends React.Component<MovableColumnProps> {
private _header?: React.RefObject<HTMLDivElement> = React.createRef();
private _colDropDisposer?: DragManager.DragDropDisposer;
+ private _startDragPosition: { x: number, y: number } = { x: 0, y: 0 };
+ private _sensitivity: number = 16;
+ private _dragRef: React.RefObject<HTMLDivElement> = React.createRef();
onPointerEnter = (e: React.PointerEvent): void => {
if (e.buttons === 1 && SelectionManager.GetIsDragging()) {
@@ -36,6 +40,7 @@ export class MovableColumn extends React.Component<MovableColumnProps> {
onPointerLeave = (e: React.PointerEvent): void => {
this._header!.current!.className = "collectionSchema-col-wrapper";
document.removeEventListener("pointermove", this.onDragMove, true);
+ document.removeEventListener("pointermove", this.onPointerMove);
}
onDragMove = (e: PointerEvent): void => {
let x = this.props.ScreenToLocalTransform().transformPoint(e.clientX, e.clientY);
@@ -68,7 +73,7 @@ export class MovableColumn extends React.Component<MovableColumnProps> {
return false;
}
- setupDrag(ref: React.RefObject<HTMLElement>) {
+ onPointerMove = (e: PointerEvent) => {
let onRowMove = (e: PointerEvent) => {
e.stopPropagation();
e.preventDefault();
@@ -76,35 +81,44 @@ export class MovableColumn extends React.Component<MovableColumnProps> {
document.removeEventListener("pointermove", onRowMove);
document.removeEventListener('pointerup', onRowUp);
let dragData = new DragManager.ColumnDragData(this.props.columnValue);
- DragManager.StartColumnDrag(ref.current!, dragData, e.x, e.y);
+ DragManager.StartColumnDrag(this._dragRef.current!, dragData, e.x, e.y);
};
let onRowUp = (): void => {
document.removeEventListener("pointermove", onRowMove);
document.removeEventListener('pointerup', onRowUp);
};
- let onItemDown = (e: React.PointerEvent) => {
- if (e.button === 0) {
+ if (e.buttons === 1) {
+ let [dx, dy] = this.props.ScreenToLocalTransform().transformDirection(e.clientX - this._startDragPosition.x, e.clientY - this._startDragPosition.y);
+ if (Math.abs(dx) + Math.abs(dy) > this._sensitivity) {
+ document.removeEventListener("pointermove", this.onPointerMove);
e.stopPropagation();
+
document.addEventListener("pointermove", onRowMove);
document.addEventListener("pointerup", onRowUp);
}
- };
- return onItemDown;
+ }
}
- // onColDrag = (e: React.DragEvent, ref: React.RefObject<HTMLDivElement>) => {
- // this.setupDrag(reference);
- // }
+ onPointerUp = (e: React.PointerEvent) => {
+ document.removeEventListener("pointermove", this.onPointerMove);
+ }
+
+ @action
+ onPointerDown = (e: React.PointerEvent, ref: React.RefObject<HTMLDivElement>) => {
+ this._dragRef = ref;
+ let [dx, dy] = this.props.ScreenToLocalTransform().transformDirection(e.clientX, e.clientY);
+ this._startDragPosition = { x: dx, y: dy };
+ document.addEventListener("pointermove", this.onPointerMove);
+ }
render() {
let reference = React.createRef<HTMLDivElement>();
- let onItemDown = this.setupDrag(reference);
return (
<div className="collectionSchema-col" ref={this.createColDropTarget}>
<div className="collectionSchema-col-wrapper" ref={this._header} onPointerEnter={this.onPointerEnter} onPointerLeave={this.onPointerLeave}>
- <div className="col-dragger" ref={reference} onPointerDown={onItemDown} >
+ <div className="col-dragger" ref={reference} onPointerDown={e => this.onPointerDown(e, reference)} onPointerUp={this.onPointerUp}>
{this.props.columnRenderer}
</div>
</div>
@@ -183,6 +197,7 @@ export class MovableRow extends React.Component<MovableRowProps> {
ContextMenu.Instance.addItem({ description: description, event: () => this.props.textWrapRow(this.props.rowInfo.original), icon: "file-pdf" });
}
+ @undoBatch
@action
move: DragManager.MoveFunction = (doc: Doc, target: Doc, addDoc) => {
let targetView = DocumentManager.Instance.getDocumentView(target);
@@ -212,7 +227,6 @@ export class MovableRow extends React.Component<MovableRowProps> {
let className = "collectionSchema-row";
if (this.props.rowFocused) className += " row-focused";
if (this.props.rowWrapped) className += " row-wrapped";
- // if (!this.props.rowWrapped) className += " row-unwrapped";
return (
<div className={className} ref={this.createRowDropTarget} onContextMenu={this.onRowContextMenu}>
diff --git a/src/client/views/collections/CollectionSchemaView.scss b/src/client/views/collections/CollectionSchemaView.scss
index b1e98b162..01744fb34 100644
--- a/src/client/views/collections/CollectionSchemaView.scss
+++ b/src/client/views/collections/CollectionSchemaView.scss
@@ -9,26 +9,22 @@
position: absolute;
top: 0;
width: 100%;
- transition: height .5s;
height: 100%;
- // overflow: hidden;
- // overflow-x: scroll;
- // border: none;
- overflow: hidden;
+ transition: top 0.5s;
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: nowrap;
- // .collectionSchemaView-cellContents {
- // height: $MAX_ROW_HEIGHT;
- // img {
- // width: auto;
- // max-height: $MAX_ROW_HEIGHT;
- // }
- // }
+ .collectionSchemaView-tableContainer {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ }
.collectionSchemaView-previewRegion {
position: relative;
background: $light-color;
- float: left;
height: 100%;
.collectionSchemaView-previewDoc {
@@ -52,7 +48,6 @@
.collectionSchemaView-dividerDragger {
position: relative;
- float: left;
height: 100%;
width: 20px;
z-index: 20;
@@ -60,50 +55,35 @@
top: 0;
background: gray;
cursor: col-resize;
- // background: $main-accent;
- // box-sizing: border-box;
- // border-left: 1px solid $intermediate-color;
- // border-right: 1px solid $intermediate-color;
+ }
+
+ .documentView-node:first-child {
+ background: $light-color;
}
}
.ReactTable {
width: 100%;
- height: 100%;
background: white;
box-sizing: border-box;
border: none !important;
+ float: none !important;
.rt-table {
- overflow-y: auto;
- overflow-x: auto;
height: 100%;
display: -webkit-inline-box;
- direction: ltr;
+ direction: ltr;
+ overflow: visible;
}
.rt-thead {
- width: calc(100% - 50px);
+ width: calc(100% - 52px);
margin-left: 50px;
&.-header {
- // background: $intermediate-color;
- // color: $light-color;
font-size: 12px;
height: 30px;
- // border: 1px solid $intermediate-color;
box-shadow: none;
- // width: calc(100% - 30px);
- // margin-right: -30px;
- }
-
- .rt-resizable-header {
- padding: 0;
- height: 30px;
-
- &:last-child {
- overflow: visible;
- }
}
.rt-resizable-header-content {
@@ -115,14 +95,13 @@
padding: 0;
border: solid lightgray;
border-width: 0 1px;
+ border-bottom: 2px solid lightgray;
}
}
.rt-th {
- // max-height: $MAX_ROW_HEIGHT;
font-size: 13px;
text-align: center;
- background-color: $light-color-secondary;
&:last-child {
overflow: visible;
@@ -130,6 +109,7 @@
}
.rt-tbody {
+ width: calc(100% - 2px);
direction: rtl;
overflow: visible;
}
@@ -139,45 +119,18 @@
flex: 0 1 auto;
min-height: 30px;
border: 0 !important;
- // border: solid lightgray;
- // border-width: 1px 0;
- // border-left: 1px solid lightgray;
- // max-height: $MAX_ROW_HEIGHT;
- // for sub comp
-
- // &:nth-child(even) {
- // background-color: $light-color;
- // }
-
- // &:nth-child(odd) {
- // background-color: $light-color-secondary;
- // }
-
- // &:first-child {
- // border-top: 1px solid $light-color-secondary !important;
- // }
- // &:last-child {
- // border-bottom: 1px solid $light-color-secondary !important;
- // }
}
.rt-tr {
width: 100%;
min-height: 30px;
- // height: $MAX_ROW_HEIGHT;
}
.rt-td {
- // border: 1px solid $light-color-secondary !important;
- // border-width: 0 1px;
- // border-width: 1px;
- // border-right-color: $intermediate-color;
- // max-height: $MAX_ROW_HEIGHT;
padding: 0;
font-size: 13px;
text-align: center;
-
- // white-space: normal;
+ white-space: nowrap;
.imageBox-cont {
position: relative;
@@ -198,8 +151,21 @@
}
.rt-resizer {
- width: 20px;
- right: -10px;
+ width: 8px;
+ right: -4px;
+ }
+
+ .rt-resizable-header {
+ padding: 0;
+ height: 30px;
+ }
+
+ .rt-resizable-header:last-child {
+ overflow: visible;
+
+ .rt-resizer {
+ width: 5px !important;
+ }
}
}
@@ -209,10 +175,6 @@
display: inline-block;
}
-.documentView-node:first-child {
- background: $light-color;
-}
-
.collectionSchema-col {
height: 100%;
@@ -246,11 +208,6 @@
margin-right: 4px;
}
}
-
- // div[class*="css"] {
- // width: 100%;
- // height: 100%;
- // }
}
}
@@ -260,16 +217,29 @@ button.add-column {
.collectionSchema-header-menuOptions {
color: black;
- width: 175px;
+ width: 200px;
text-align: left;
.collectionSchema-headerMenu-group {
- margin-bottom: 10px;
+ padding: 7px 0;
+ border-bottom: 1px solid lightgray;
+
+ &:first-child {
+ padding-top : 0;
+ }
+
+ &:last-child {
+ border: none;
+ text-align: center;
+ padding: 12px 0 0 0;
+ }
}
label {
color: $main-accent;
font-weight: normal;
+ letter-spacing: 2px;
+ text-transform: uppercase;
}
input {
@@ -277,23 +247,57 @@ button.add-column {
width: 100%;
}
+ .columnMenu-option {
+ cursor: pointer;
+ padding: 3px;
+ background-color: white;
+ transition: background-color 0.2s;
+
+ &:hover {
+ background-color: $light-color-secondary;
+ }
+
+ &.active {
+ font-weight: bold;
+ border: 2px solid $light-color-secondary;
+ }
+
+ svg {
+ color: gray;
+ margin-right: 5px;
+ width: 10px;
+ }
+ }
+
.keys-dropdown {
position: relative;
- max-width: 175px;
+ width: 100%;
+
+ input {
+ border: 2px solid $light-color-secondary;
+ padding: 3px;
+ height: 28px;
+ font-weight: bold;
+
+ &:focus {
+ font-weight: normal;
+ }
+ }
.keys-options-wrapper {
width: 100%;
max-height: 150px;
overflow-y: scroll;
position: absolute;
- top: 20px;
+ top: 28px;
+ box-shadow: 0 10px 16px rgba(0,0,0,0.1);
.key-option {
background-color: $light-color;
- border: 1px solid $light-color-secondary;
+ border: 1px solid lightgray;
padding: 2px 3px;
- &:not(:last-child) {
+ &:not(:first-child) {
border-top: 0;
}
@@ -304,60 +308,51 @@ button.add-column {
}
}
- .columnMenu-types {
+ .columnMenu-colors {
display: flex;
justify-content: space-between;
-
- button {
- border-radius: 20px;
- }
- }
-
- .columnMenu-colors {
-
-
- input[type="radio"] {
- display: none;
- }
+ flex-wrap: wrap;
.columnMenu-colorPicker {
+ cursor: pointer;
width: 20px;
height: 20px;
+ border-radius: 10px;
+
+ &.active {
+ border: 2px solid white;
+ box-shadow: 0 0 0 2px lightgray;
+ }
}
}
}
.collectionSchema-row {
- // height: $MAX_ROW_HEIGHT;
height: 100%;
background-color: white;
- &.row-focused .rt-tr {
+ &.row-focused .rt-td {
background-color: rgb(255, 246, 246); //$light-color-secondary;
}
&.row-wrapped {
- white-space: normal;
+ .rt-td {
+ white-space: normal;
+ }
}
.row-dragger {
display: flex;
justify-content: space-around;
- // height: $MAX_ROW_HEIGHT;
flex: 50 0 auto;
width: 50px;
max-width: 50px;
height: 100%;
min-height: 30px;
- // padding: 5px 5px 5px 0;
color: lightgray;
background-color: white;
transition: color 0.1s ease;
- // &:hover {
- // color: lightgray;
- // }
-
.row-option {
// padding: 5px;
cursor: pointer;
@@ -373,7 +368,6 @@ button.add-column {
}
.collectionSchema-row-wrapper {
- // max-height: $MAX_ROW_HEIGHT;
&.row-above {
border-top: 1px solid red;
@@ -407,18 +401,22 @@ button.add-column {
outline: none;
}
- &.focused {
- // background-color: yellowgreen;
- // border: 2px solid yellowgreen;
-
+ &.editing {
+ padding: 0;
input {
outline: 0;
border: none;
- background-color: yellow;
+ background-color: rgb(255, 217, 217);
+ width: 100%;
+ height: 100%;
+ padding: 2px 3px;
+ min-height: 26px;
}
+ }
+
+ &.focused {
&.inactive {
- // border: 2px solid rgba(255, 255, 0, 0.4);
border: none;
}
}
@@ -426,7 +424,6 @@ button.add-column {
p {
width: 100%;
height: 100%;
- // word-wrap: break-word;
}
&:hover .collectionSchemaView-cellContents-docExpander {
@@ -453,9 +450,7 @@ button.add-column {
display: flex;
justify-content: flex-end;
padding: 0 10px;
-
border-bottom: 2px solid gray;
- // margin-bottom: 10px;
.collectionSchemaView-toolbar-item {
display: flex;
@@ -470,23 +465,17 @@ button.add-column {
}
.collectionSchemaView-table {
- width: calc(100% - 7px);
+ width: 100%;
+ height: 100%;
+ overflow: visible;
}
.sub {
padding: 10px 30px;
- // padding-left: 80px;
background-color: rgb(252, 252, 252);
width: calc(100% - 50px);
margin-left: 50px;
- .rt-table {
- overflow-x: hidden; // todo; this shouldnt be like this :((
- overflow-y: visible;
- }
-
- // TODO fix
-
.row-dragger {
background-color: rgb(252, 252, 252);
}
@@ -502,4 +491,25 @@ button.add-column {
.collectionSchemaView-expander {
height: 100%;
+ min-height: 30px;
+ position: relative;
+ color: gray;
+
+ svg {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+}
+
+.collectionSchemaView-addRow {
+ color: gray;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ cursor: pointer;
+ font-size: 10.5px;
+ padding: 10px;
+ margin-left: 50px;
+ margin-top: 10px;
} \ No newline at end of file
diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx
index 08ab22725..9efd0d3ec 100644
--- a/src/client/views/collections/CollectionSchemaView.tsx
+++ b/src/client/views/collections/CollectionSchemaView.tsx
@@ -4,10 +4,10 @@ import { faCog, faPlus, faTable, faSortUp, faSortDown } from '@fortawesome/free-
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { action, computed, observable, trace, untracked } from "mobx";
import { observer } from "mobx-react";
-import ReactTable, { CellInfo, ComponentPropsGetterR, ReactTableDefaults, TableCellRenderer, Column, RowInfo } from "react-table";
+import ReactTable, { CellInfo, ComponentPropsGetterR, Column, RowInfo, ResizedChangeFunction, Resize } from "react-table";
import "react-table/react-table.css";
-import { emptyFunction, returnFalse, returnZero, returnOne } from "../../../Utils";
-import { Doc, DocListCast, DocListCastAsync, Field, FieldResult, Opt } from "../../../new_fields/Doc";
+import { emptyFunction, returnOne } from "../../../Utils";
+import { Doc, DocListCast, Field, Opt } from "../../../new_fields/Doc";
import { Id } from "../../../new_fields/FieldSymbols";
import { List } from "../../../new_fields/List";
import { listSpec } from "../../../new_fields/Schema";
@@ -17,28 +17,21 @@ import { Gateway } from "../../northstar/manager/Gateway";
import { SetupDrag, DragManager } from "../../util/DragManager";
import { CompileScript, ts, Transformer } from "../../util/Scripting";
import { Transform } from "../../util/Transform";
-import { COLLECTION_BORDER_WIDTH, MAX_ROW_HEIGHT } from '../../views/globalCssVariables.scss';
+import { COLLECTION_BORDER_WIDTH } from '../../views/globalCssVariables.scss';
import { ContextMenu } from "../ContextMenu";
-import { anchorPoints, Flyout } from "../DocumentDecorations";
import '../DocumentDecorations.scss';
-import { EditableView } from "../EditableView";
import { DocumentView } from "../nodes/DocumentView";
-import { FieldView, FieldViewProps } from "../nodes/FieldView";
import { CollectionPDFView } from "./CollectionPDFView";
import "./CollectionSchemaView.scss";
import { CollectionSubView } from "./CollectionSubView";
import { CollectionVideoView } from "./CollectionVideoView";
import { CollectionView } from "./CollectionView";
import { undoBatch } from "../../util/UndoManager";
-import { timesSeries } from "async";
import { CollectionSchemaHeader, CollectionSchemaAddColumnHeader } from "./CollectionSchemaHeaders";
import { CellProps, CollectionSchemaCell, CollectionSchemaNumberCell, CollectionSchemaStringCell, CollectionSchemaBooleanCell, CollectionSchemaCheckboxCell, CollectionSchemaDocCell } from "./CollectionSchemaCells";
import { MovableColumn, MovableRow } from "./CollectionSchemaMovableTableHOC";
-import { SelectionManager } from "../../util/SelectionManager";
-import { DocumentManager } from "../../util/DocumentManager";
-import { ImageBox } from "../nodes/ImageBox";
import { ComputedField } from "../../../new_fields/ScriptField";
-import { SchemaHeaderField, RandomPastel } from "../../../new_fields/SchemaHeaderField";
+import { SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
library.add(faCog, faPlus, faSortUp, faSortDown);
@@ -51,7 +44,6 @@ export enum ColumnType {
String,
Boolean,
Doc,
- // Checkbox
}
// this map should be used for keys that should have a const type of value
const columnTypes: Map<string, ColumnType> = new Map([
@@ -82,14 +74,6 @@ export class CollectionSchemaView extends CollectionSubView(doc => doc) {
super.CreateDropTarget(ele);
}
- // detectClick = (e: PointerEvent): void => {
- // if (this._node && this._node.contains(e.target as Node)) {
- // } else {
- // this._isOpen = false;
- // this.props.setIsEditing(false);
- // }
- // }
-
isFocused = (doc: Doc): boolean => {
if (!this.props.isSelected()) return false;
return doc === this._focusedTable;
@@ -121,8 +105,11 @@ export class CollectionSchemaView extends CollectionSubView(doc => doc) {
@action
onDividerMove = (e: PointerEvent): void => {
let nativeWidth = this._mainCont!.getBoundingClientRect();
- this.props.Document.schemaPreviewWidth = Math.min(nativeWidth.right - nativeWidth.left - 40,
- this.props.ScreenToLocalTransform().transformDirection(nativeWidth.right - e.clientX, 0)[0]);
+ let minWidth = 40;
+ let maxWidth = 1000;
+ let movedWidth = this.props.ScreenToLocalTransform().transformDirection(nativeWidth.right - e.clientX, 0)[0];
+ let width = movedWidth < minWidth ? minWidth : movedWidth > maxWidth ? maxWidth : movedWidth;
+ this.props.Document.schemaPreviewWidth = width;
}
@action
onDividerUp = (e: PointerEvent): void => {
@@ -189,6 +176,8 @@ export class CollectionSchemaView extends CollectionSubView(doc => doc) {
/>
</div>;
}
+
+ @undoBatch
@action
setPreviewScript = (script: string) => {
this.previewScript = script;
@@ -234,12 +223,11 @@ export class CollectionSchemaView extends CollectionSubView(doc => doc) {
render() {
Doc.UpdateDocumentExtensionForField(this.props.DataDoc ? this.props.DataDoc : this.props.Document, this.props.fieldKey);
- // if (SelectionManager.SelectedDocuments().length > 0) console.log(StrCast(SelectionManager.SelectedDocuments()[0].Document.title));
- // if (DocumentManager.Instance.getDocumentView(this.props.Document)) console.log(StrCast(this.props.Document.title), SelectionManager.IsSelected(DocumentManager.Instance.getDocumentView(this.props.Document)!))
return (
- <div className="collectionSchemaView-container"
- onPointerDown={this.onPointerDown} onWheel={this.onWheel} onDrop={(e: React.DragEvent) => this.onDrop(e, {})} ref={this.createTarget}>
- {this.schemaTable}
+ <div className="collectionSchemaView-container" style={{ height: "100%", marginTop: "0", }}>
+ <div className="collectionSchemaView-tableContainer" onPointerDown={this.onPointerDown} onWheel={this.onWheel} onDrop={(e: React.DragEvent) => this.onDrop(e, {})} ref={this.createTarget}>
+ {this.schemaTable}
+ </div>
{this.dividerDragger}
{!this.previewWidth() ? (null) : this.previewPanel}
</div>
@@ -260,7 +248,6 @@ export interface SchemaTableProps {
deleteDocument: (document: Doc) => boolean;
moveDocument: (document: Doc, targetCollection: Doc, addDocument: (document: Doc) => boolean) => boolean;
ScreenToLocalTransform: () => Transform;
- // CreateDropTarget: (ele: HTMLDivElement)=> void; // super createdriotarget
active: () => boolean;
onDrop: (e: React.DragEvent<Element>, options: DocumentOptions, completed?: (() => void) | undefined) => void;
addDocTab: (document: Doc, dataDoc: Doc | undefined, where: string) => void;
@@ -272,24 +259,24 @@ export interface SchemaTableProps {
@observer
export class SchemaTable extends React.Component<SchemaTableProps> {
- // private _mainCont?: HTMLDivElement;
private DIVIDER_WIDTH = 4;
@observable _headerIsEditing: boolean = false;
@observable _cellIsEditing: boolean = false;
@observable _focusedCell: { row: number, col: number } = { row: 0, col: 0 };
- @observable _sortedColumns: Map<string, { id: string, desc: boolean }> = new Map();
@observable _openCollections: Array<string> = [];
- @observable _textWrappedRows: Array<string> = [];
- @observable private _node: HTMLDivElement | null = null;
@computed get previewWidth() { return () => NumCast(this.props.Document.schemaPreviewWidth); }
@computed get previewHeight() { return () => this.props.PanelHeight() - 2 * this.borderWidth; }
@computed get tableWidth() { return this.props.PanelWidth() - 2 * this.borderWidth - this.DIVIDER_WIDTH - this.previewWidth(); }
+
@computed get columns() {
- console.log("columns");
return Cast(this.props.Document.schemaColumns, listSpec(SchemaHeaderField), []);
}
+ set columns(columns: SchemaHeaderField[]) {
+ this.props.Document.schemaColumns = new List<SchemaHeaderField>(columns);
+ }
+
@computed get childDocs() {
if (this.props.childDocs) return this.props.childDocs;
@@ -300,7 +287,32 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
doc[this.props.fieldKey] = new List<Doc>(docs);
}
- set columns(columns: SchemaHeaderField[]) { this.props.Document.schemaColumns = new List<SchemaHeaderField>(columns); }
+
+ @computed get textWrappedRows() {
+ return Cast(this.props.Document.textwrappedSchemaRows, listSpec("string"), []);
+ }
+ set textWrappedRows(textWrappedRows: string[]) {
+ this.props.Document.textwrappedSchemaRows = new List<string>(textWrappedRows);
+ }
+
+ @computed get resized(): { "id": string, "value": number }[] {
+ return this.columns.reduce((resized, shf) => {
+ if (shf.width > -1) {
+ resized.push({ "id": shf.heading, "value": shf.width });
+ }
+ return resized;
+ }, [] as { "id": string, "value": number }[]);
+ }
+
+ @computed get sorted(): { "id": string, "desc": boolean }[] {
+ return this.columns.reduce((sorted, shf) => {
+ if (shf.desc) {
+ sorted.push({ "id": shf.heading, "desc": shf.desc });
+ }
+ return sorted;
+ }, [] as { "id": string, "desc": boolean }[]);
+ }
+
@computed get borderWidth() { return Number(COLLECTION_BORDER_WIDTH); }
@computed get tableColumns(): Column<Doc>[] {
let possibleKeys = this.documentKeys.filter(key => this.columns.findIndex(existingKey => existingKey.heading.toUpperCase() === key.toUpperCase()) === -1);
@@ -310,8 +322,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
let focusedCol = this._focusedCell.col;
let isEditable = !this._headerIsEditing;// && this.props.isSelected();
- // let cdoc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = DocListCast(cdoc[this.props.fieldKey]);
let children = this.childDocs;
if (children.reduce((found, doc) => found || doc.type === "collection", false)) {
@@ -344,7 +354,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
deleteColumn={this.deleteColumn}
setColumnType={this.setColumnType}
setColumnSort={this.setColumnSort}
- removeColumnSort={this.removeColumnSort}
+ setColumnColor={this.setColumnColor}
/>;
return {
@@ -399,25 +409,11 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
return columns;
}
- // onHeaderDrag = (columnName: string) => {
- // let schemaDoc = Cast(this.props.Document.schemaDoc, Doc);
- // if (schemaDoc instanceof Doc) {
- // let columnDocs = DocListCast(schemaDoc.data);
- // if (columnDocs) {
- // let ddoc = columnDocs.find(doc => doc.title === columnName);
- // if (ddoc) {
- // return ddoc;
- // }
- // }
- // }
- // return this.props.Document;
- // }
constructor(props: SchemaTableProps) {
super(props);
// convert old schema columns (list of strings) into new schema columns (list of schema header fields)
let oldSchemaColumns = Cast(this.props.Document.schemaColumns, listSpec("string"), []);
if (oldSchemaColumns && oldSchemaColumns.length && typeof oldSchemaColumns[0] !== "object") {
- console.log("REMAKING COLUMNs");
let newSchemaColumns = oldSchemaColumns.map(i => typeof i === "string" ? new SchemaHeaderField(i, "#f1efeb") : i);
this.props.Document.schemaColumns = new List<SchemaHeaderField>(newSchemaColumns);
}
@@ -436,8 +432,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
tableRemoveDoc = (document: Doc): boolean => {
- // let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = Cast(doc[this.props.fieldKey], listSpec(Doc), []);
+
let children = this.childDocs;
if (children.indexOf(document) !== -1) {
children.splice(children.indexOf(document), 1);
@@ -456,11 +451,10 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
ScreenToLocalTransform: this.props.ScreenToLocalTransform,
addDoc: this.tableAddDoc,
removeDoc: this.tableRemoveDoc,
- // removeDoc: this.props.deleteDocument,
rowInfo,
rowFocused: !this._headerIsEditing && rowInfo.index === this._focusedCell.row && this.props.isFocused(this.props.Document),
- textWrapRow: this.textWrapRow,
- rowWrapped: this._textWrappedRows.findIndex(id => rowInfo.original[Id] === id) > -1
+ textWrapRow: this.toggleTextWrapRow,
+ rowWrapped: this.textWrappedRows.findIndex(id => rowInfo.original[Id] === id) > -1
};
}
@@ -471,9 +465,9 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
let row = rowInfo.index;
//@ts-ignore
let col = this.columns.map(c => c.heading).indexOf(column!.id);
- // let col = column ? this.columns.indexOf(column!) : -1;
let isFocused = this._focusedCell.row === row && this._focusedCell.col === col && this.props.isFocused(this.props.Document);
- // let column = this.columns.indexOf(column.id!);
+ let isEditing = this.props.isFocused(this.props.Document) && this._cellIsEditing;
+ // TODO: editing border doesn't work :(
return {
style: {
border: !this._headerIsEditing && isFocused ? "2px solid rgb(255, 160, 160)" : "1px solid #f1efeb"
@@ -481,19 +475,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
};
}
- // private createTarget = (ele: HTMLDivElement) => {
- // this._mainCont = ele;
- // this.props.CreateDropTarget(ele);
- // }
-
- // detectClick = (e: PointerEvent): void => {
- // if (this._node && this._node.contains(e.target as Node)) {
- // } else {
- // this._isOpen = false;
- // this.props.setIsEditing(false);
- // }
- // }
-
@action
onExpandCollection = (collection: Doc): void => {
this._openCollections.push(collection[Id]);
@@ -533,8 +514,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
let direction = e.key === "Tab" ? "tab" : e.which === 39 ? "right" : e.which === 37 ? "left" : e.which === 38 ? "up" : e.which === 40 ? "down" : "";
this.changeFocusedCellByDirection(direction);
- // let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = Cast(doc[this.props.fieldKey], listSpec(Doc), []);
let children = this.childDocs;
const pdoc = FieldValue(children[this._focusedCell.row]);
pdoc && this.props.setPreviewDoc(pdoc);
@@ -543,8 +522,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
@action
changeFocusedCellByDirection = (direction: string): void => {
- // let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = Cast(doc[this.props.fieldKey], listSpec(Doc), []);
let children = this.childDocs;
switch (direction) {
case "tab":
@@ -569,81 +546,77 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
this._focusedCell = { row: this._focusedCell.row + 1 === children.length ? this._focusedCell.row : this._focusedCell.row + 1, col: this._focusedCell.col };
break;
}
- // const pdoc = FieldValue(children[this._focusedCell.row]);
- // pdoc && this.props.setPreviewDoc(pdoc);
}
@action
changeFocusedCellByIndex = (row: number, col: number): void => {
- // let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = Cast(doc[this.props.fieldKey], listSpec(Doc), []);
-
this._focusedCell = { row: row, col: col };
this.props.setFocused(this.props.Document);
-
- // const fdoc = FieldValue(children[this._focusedCell.row]);
- // fdoc && this.props.setPreviewDoc(fdoc);
}
+ @undoBatch
createRow = () => {
- // let doc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = Cast(doc[this.props.fieldKey], listSpec(Doc), []);
let children = this.childDocs;
let newDoc = Docs.Create.TextDocument({ width: 100, height: 30 });
let proto = Doc.GetProto(newDoc);
proto.title = "";
children.push(newDoc);
+
this.childDocs = children;
}
+ @undoBatch
@action
createColumn = () => {
let index = 0;
- let found = this.columns.findIndex(col => col.heading.toUpperCase() === "New field".toUpperCase()) > -1;
+ let columns = this.columns;
+ let found = columns.findIndex(col => col.heading.toUpperCase() === "New field".toUpperCase()) > -1;
if (!found) {
- console.log("create column found");
- this.columns.push(new SchemaHeaderField("New field", "#f1efeb"));
+ columns.push(new SchemaHeaderField("New field", "#f1efeb"));
+ this.columns = columns;
return;
}
while (found) {
index++;
- found = this.columns.findIndex(col => col.heading.toUpperCase() === ("New field (" + index + ")").toUpperCase()) > -1;
+ found = columns.findIndex(col => col.heading.toUpperCase() === ("New field (" + index + ")").toUpperCase()) > -1;
}
- console.log("create column new");
- this.columns.push(new SchemaHeaderField("New field (" + index + ")", "#f1efeb"));
+ columns.push(new SchemaHeaderField("New field (" + index + ")", "#f1efeb"));
+ this.columns = columns;
}
+ @undoBatch
@action
deleteColumn = (key: string) => {
- console.log("deleting columnnn");
- let list = Cast(this.props.Document.schemaColumns, listSpec(SchemaHeaderField));
- if (list === undefined) {
- console.log("delete column");
- this.props.Document.schemaColumns = list = new List<SchemaHeaderField>([]);
+ let columns = this.columns;
+ if (columns === undefined) {
+ this.columns = new List<SchemaHeaderField>([]);
} else {
- const index = list.map(c => c.heading).indexOf(key);
+ const index = columns.map(c => c.heading).indexOf(key);
if (index > -1) {
- list.splice(index, 1);
+ columns.splice(index, 1);
+ this.columns = columns;
}
}
}
+ @undoBatch
@action
changeColumns = (oldKey: string, newKey: string, addNew: boolean) => {
- console.log("changingin columnsdfhs");
- let list = Cast(this.props.Document.schemaColumns, listSpec(SchemaHeaderField));
- if (list === undefined) {
- console.log("change columns new");
- this.props.Document.schemaColumns = list = new List<SchemaHeaderField>([new SchemaHeaderField(newKey, "f1efeb")]);
+ let columns = this.columns;
+ if (columns === undefined) {
+ this.columns = new List<SchemaHeaderField>([new SchemaHeaderField(newKey, "f1efeb")]);
} else {
- console.log("change column");
if (addNew) {
- this.columns.push(new SchemaHeaderField(newKey, "f1efeb"));
+ columns.push(new SchemaHeaderField(newKey, "f1efeb"));
+ this.columns = columns;
} else {
- const index = list.map(c => c.heading).indexOf(oldKey);
+ const index = columns.map(c => c.heading).indexOf(oldKey);
if (index > -1) {
- list[index] = new SchemaHeaderField(newKey, "f1efeb");
+ let column = columns[index];
+ column.setHeading(newKey);
+ columns[index] = column;
+ this.columns = columns;
}
}
}
@@ -667,16 +640,37 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
return NumCast(typesDoc[column.heading]);
}
- setColumnType = (key: string, type: ColumnType): void => {
- if (columnTypes.get(key)) return;
- const typesDoc = FieldValue(Cast(this.props.Document.schemaColumnTypes, Doc));
- if (!typesDoc) {
- let newTypesDoc = new Doc();
- newTypesDoc[key] = type;
- this.props.Document.schemaColumnTypes = newTypesDoc;
- return;
- } else {
- typesDoc[key] = type;
+ @undoBatch
+ setColumnType = (columnField: SchemaHeaderField, type: ColumnType): void => {
+ if (columnTypes.get(columnField.heading)) return;
+
+ let columns = this.columns;
+ let index = columns.indexOf(columnField);
+ if (index > -1) {
+ columnField.setType(NumCast(type));
+ columns[index] = columnField;
+ this.columns = columns;
+ }
+
+ // const typesDoc = FieldValue(Cast(this.props.Document.schemaColumnTypes, Doc));
+ // if (!typesDoc) {
+ // let newTypesDoc = new Doc();
+ // newTypesDoc[key] = type;
+ // this.props.Document.schemaColumnTypes = newTypesDoc;
+ // return;
+ // } else {
+ // typesDoc[key] = type;
+ // }
+ }
+
+ @undoBatch
+ setColumnColor = (columnField: SchemaHeaderField, color: string): void => {
+ let columns = this.columns;
+ let index = columns.indexOf(columnField);
+ if (index > -1) {
+ columnField.setColor(color);
+ columns[index] = columnField;
+ this.columns = columns; // need to set the columns to trigger rerender
}
}
@@ -685,6 +679,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
this.columns = columns;
}
+ @undoBatch
reorderColumns = (toMove: SchemaHeaderField, relativeTo: SchemaHeaderField, before: boolean, columnsValues: SchemaHeaderField[]) => {
let columns = [...columnsValues];
let oldIndex = columns.indexOf(toMove);
@@ -694,23 +689,22 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
if (oldIndex === newIndex) return;
columns.splice(newIndex, 0, columns.splice(oldIndex, 1)[0]);
- this.setColumns(columns);
- }
-
- @action
- setColumnSort = (column: string, descending: boolean) => {
- this._sortedColumns.set(column, { id: column, desc: descending });
+ this.columns = columns;
}
+ @undoBatch
@action
- removeColumnSort = (column: string) => {
- this._sortedColumns.delete(column);
+ setColumnSort = (columnField: SchemaHeaderField, descending: boolean | undefined) => {
+ let columns = this.columns;
+ let index = columns.findIndex(c => c.heading === columnField.heading);
+ let column = columns[index];
+ column.setDesc(descending);
+ columns[index] = column;
+ this.columns = columns;
}
get documentKeys() {
- const docs = DocListCast(this.props.Document[this.props.fieldKey]);
-
- // let docs = this.childDocs;
+ let docs = this.childDocs;
let keys: { [key: string]: boolean } = {};
// bcz: ugh. this is untracked since otherwise a large collection of documents will blast the server for all their fields.
// then as each document's fields come back, we update the documents _proxies. Each time we do this, the whole schema will be
@@ -725,33 +719,31 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
@action
- textWrapRow = (doc: Doc): void => {
- let index = this._textWrappedRows.findIndex(id => doc[Id] === id);
+ toggleTextWrapRow = (doc: Doc): void => {
+ let textWrapped = this.textWrappedRows;
+ let index = textWrapped.findIndex(id => doc[Id] === id);
+
if (index > -1) {
- this._textWrappedRows.splice(index, 1);
+ textWrapped.splice(index, 1);
} else {
- this._textWrappedRows.push(doc[Id]);
+ textWrapped.push(doc[Id]);
}
+ this.textWrappedRows = textWrapped;
}
@computed
get reactTable() {
-
- // let cdoc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = DocListCast(cdoc[this.props.fieldKey]);
let children = this.childDocs;
-
- let previewWidth = this.previewWidth(); // + 2 * this.borderWidth + this.DIVIDER_WIDTH + 1;
let hasCollectionChild = children.reduce((found, doc) => found || doc.type === "collection", false);
let expandedRowsList = this._openCollections.map(col => children.findIndex(doc => doc[Id] === col).toString());
let expanded = {};
//@ts-ignore
expandedRowsList.forEach(row => expanded[row] = true);
- console.log(...[...this._textWrappedRows]); // TODO: get component to rerender on text wrap change without needign to console.log :((((
+ console.log("text wrapped rows", ...[...this.textWrappedRows]); // TODO: get component to rerender on text wrap change without needign to console.log :((((
return <ReactTable
- style={{ position: "relative", float: "left", width: `calc(100% - ${previewWidth}px` }}
+ style={{ position: "relative" }}
data={children}
page={0}
pageSize={children.length}
@@ -761,12 +753,13 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
getTdProps={this.getTdProps}
sortable={false}
TrComponent={MovableRow}
- sorted={Array.from(this._sortedColumns.values())}
+ sorted={this.sorted}
expanded={expanded}
+ resized={this.resized}
+ onResizedChange={this.onResizedChange}
SubComponent={hasCollectionChild ?
row => {
if (row.original.type === "collection") {
- // let childDocs = DocListCast(row.original[this.props.fieldKey]);
return <div className="sub"><SchemaTable {...this.props} Document={row.original} childDocs={undefined} /></div>;
}
}
@@ -775,6 +768,17 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
/>;
}
+ onResizedChange = (newResized: Resize[], event: any) => {
+ let columns = this.columns;
+ newResized.forEach(resized => {
+ let index = columns.findIndex(c => c.heading === resized.id);
+ let column = columns[index];
+ column.setWidth(resized.value);
+ columns[index] = column;
+ });
+ this.columns = columns;
+ }
+
onContextMenu = (e: React.MouseEvent): void => {
if (!e.isPropagationStopped() && this.props.Document[Id] !== "mainDoc") { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7
ContextMenu.Instance.addItem({ description: "Make DB", event: this.makeDB, icon: "table" });
@@ -786,8 +790,6 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
let csv: string = this.columns.reduce((val, col) => val + col + ",", "");
csv = csv.substr(0, csv.length - 1) + "\n";
let self = this;
- let cdoc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- // let children = DocListCast(cdoc[this.props.fieldKey]);
this.childDocs.map(doc => {
csv += self.columns.reduce((val, col) => val + (doc[col.heading] ? doc[col.heading]!.toString() : "0") + ",", "");
csv = csv.substr(0, csv.length - 1) + "\n";
@@ -805,11 +807,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
getField = (row: number, col?: number) => {
- // const docs = DocListCast(this.props.Document[this.props.fieldKey]);
-
- let cdoc = this.props.dataDoc ? this.props.dataDoc : this.props.Document;
- const docs = DocListCast(cdoc[this.props.fieldKey]);
- // let docs = this.childDocs;
+ let docs = this.childDocs;
row = row % docs.length;
while (row < 0) row += docs.length;
@@ -881,13 +879,11 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
render() {
- // if (SelectionManager.SelectedDocuments().length > 0) console.log(StrCast(SelectionManager.SelectedDocuments()[0].Document.title));
- // if (DocumentManager.Instance.getDocumentView(this.props.Document)) console.log(StrCast(this.props.Document.title), SelectionManager.IsSelected(DocumentManager.Instance.getDocumentView(this.props.Document)!))
return (
<div className="collectionSchemaView-table" onPointerDown={this.onPointerDown} onWheel={this.onWheel}
onDrop={(e: React.DragEvent) => this.props.onDrop(e, {})} onContextMenu={this.onContextMenu} >
{this.reactTable}
- <button onClick={() => this.createRow()}>new row</button>
+ <div className="collectionSchemaView-addRow" onClick={() => this.createRow()}>+ new</div>
</div>
);
}
@@ -984,6 +980,7 @@ export class CollectionSchemaPreview extends React.Component<CollectionSchemaPre
style={{
transform: `translate(${this.centeringOffset}px, 0px)`,
borderRadius: this.borderRounding,
+ display: "inline",
height: "100%"
}}>
<DocumentView
diff --git a/src/client/views/collections/CollectionStackingView.scss b/src/client/views/collections/CollectionStackingView.scss
index 0cb01dc9d..015955816 100644
--- a/src/client/views/collections/CollectionStackingView.scss
+++ b/src/client/views/collections/CollectionStackingView.scss
@@ -79,10 +79,10 @@
.collectionStackingView-sectionHeader {
text-align: center;
- margin-left: 5px;
- margin-right: 5px;
+ margin-left: 2px;
+ margin-right: 2px;
margin-top: 10px;
- overflow: hidden;
+ // overflow: hidden; overflow is visible so the color menu isn't hidden -ftong
.editableView-input {
color: black;
@@ -125,6 +125,43 @@
}
}
+ .collectionStackingView-sectionColor {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 100%;
+
+ [class*="css"] {
+ max-width: 102px;
+ }
+
+ .collectionStackingView-sectionColorButton {
+ height: 35px;
+ }
+
+ .collectionStackingView-colorPicker {
+ width: 78px;
+
+ .colorOptions {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .colorPicker {
+ cursor: pointer;
+ width: 20px;
+ height: 20px;
+ border-radius: 10px;
+ margin: 3px;
+
+ &.active {
+ border: 2px solid white;
+ box-shadow: 0 0 0 2px lightgray;
+ }
+ }
+ }
+ }
+
.collectionStackingView-sectionDelete {
position: absolute;
right: 0;
@@ -184,4 +221,53 @@
letter-spacing: 2px;
height: fit-content;
}
+
+ .rc-switch {
+ position: absolute;
+ display: inline-block;
+ bottom: 4px;
+ right: 4px;
+ width: 70px;
+ height: 30px;
+ border-radius: 40px 40px;
+ background-color: lightslategrey;
+ }
+
+ .rc-switch:after {
+ position: absolute;
+ width: 22px;
+ height: 22px;
+ left: 3px;
+ top: 4px;
+ border-radius: 50% 50%;
+ background-color: #fff;
+ content: " ";
+ cursor: pointer;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26);
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ transition: left 0.3s cubic-bezier(0.35, 0, 0.25, 1);
+ -webkit-animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1);
+ animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1);
+ -webkit-animation-duration: 0.3s;
+ animation-duration: 0.3s;
+ }
+
+ .rc-switch-checked:after {
+ left: 44px;
+ }
+
+ .rc-switch-inner {
+ color: #fff;
+ font-size: 12px;
+ position: absolute;
+ left: 28px;
+ top: 8px;
+ }
+
+ .rc-switch-checked .rc-switch-inner {
+ left: 8px;
+ }
+
+
} \ No newline at end of file
diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx
index bcf3a85d7..9741b9e89 100644
--- a/src/client/views/collections/CollectionStackingView.tsx
+++ b/src/client/views/collections/CollectionStackingView.tsx
@@ -20,6 +20,7 @@ import { SchemaHeaderField, RandomPastel } from "../../../new_fields/SchemaHeade
import { List } from "../../../new_fields/List";
import { EditableView } from "../EditableView";
import { CollectionViewProps } from "./CollectionBaseView";
+import Switch from 'rc-switch';
@observer
export class CollectionStackingView extends CollectionSubView(doc => doc) {
@@ -248,7 +249,10 @@ export class CollectionStackingView extends CollectionSubView(doc => doc) {
docList={docList}
parent={this}
type={type}
- createDropTarget={this.createDropTarget} />;
+ createDropTarget={this.createDropTarget}
+ screenToLocalTransform={this.props.ScreenToLocalTransform}
+ />;
+
}
@action
@@ -269,6 +273,14 @@ export class CollectionStackingView extends CollectionSubView(doc => doc) {
return firstEntry[0].heading > secondEntry[0].heading ? 1 : -1;
}
+ onToggle = (checked: Boolean) => {
+ if (checked) {
+ this.props.CollectionView.props.Document.chromeStatus = 'collapsed';
+ } else {
+ this.props.CollectionView.props.Document.chromeStatus = 'view-mode';
+ }
+ }
+
render() {
let headings = Array.from(this.Sections.keys());
let editableViewProps = {
@@ -289,11 +301,18 @@ export class CollectionStackingView extends CollectionSubView(doc => doc) {
{this.props.Document.sectionFilter ? Array.from(this.Sections.entries()).sort(this.sortFunc).
map(section => this.section(section[0], section[1])) :
this.section(undefined, this.filteredChildren)}
- {(this.props.Document.sectionFilter && this.props.CollectionView.props.Document.chromeStatus !== 'disabled') ?
+ {(this.props.Document.sectionFilter && (this.props.CollectionView.props.Document.chromeStatus !== 'view-mode' && this.props.CollectionView.props.Document.chromeStatus !== 'disabled')) ?
<div key={`${this.props.Document[Id]}-addGroup`} className="collectionStackingView-addGroupButton"
- style={{ width: (this.columnWidth / (headings.length + (this.props.CollectionView.props.Document.chromeStatus !== 'disabled' ? 1 : 0))) - 10, marginTop: 10 }}>
+ style={{ width: (this.columnWidth / (headings.length + ((this.props.CollectionView.props.Document.chromeStatus !== 'view-mode' && this.props.CollectionView.props.Document.chromeStatus !== 'disabled') ? 1 : 0))) - 10, marginTop: 10 }}>
<EditableView {...editableViewProps} />
</div> : null}
+ {this.props.CollectionView.props.Document.chromeStatus !== 'disabled' ? <Switch
+ onChange={this.onToggle}
+ onClick={this.onToggle}
+ defaultChecked={this.props.CollectionView.props.Document.chromeStatus !== 'view-mode'}
+ checkedChildren="edit"
+ unCheckedChildren="view"
+ /> : null}
</div>
);
}
diff --git a/src/client/views/collections/CollectionStackingViewFieldColumn.tsx b/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
index d8bed7e88..df03da376 100644
--- a/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
+++ b/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
@@ -14,11 +14,17 @@ import { DocumentManager } from "../../util/DocumentManager";
import { SelectionManager } from "../../util/SelectionManager";
import "./CollectionStackingView.scss";
import { Docs } from "../../documents/Documents";
-import { SchemaHeaderField } from "../../../new_fields/SchemaHeaderField";
+import { SchemaHeaderField, PastelSchemaPalette } from "../../../new_fields/SchemaHeaderField";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { ScriptField } from "../../../new_fields/ScriptField";
import { CompileScript } from "../../util/Scripting";
import { RichTextField } from "../../../new_fields/RichTextField";
+import { Transform } from "../../util/Transform";
+import { Flyout, anchorPoints } from "../DocumentDecorations";
+import { library } from '@fortawesome/fontawesome-svg-core';
+import { faPalette } from '@fortawesome/free-solid-svg-icons';
+
+library.add(faPalette);
interface CSVFieldColumnProps {
@@ -30,6 +36,7 @@ interface CSVFieldColumnProps {
parent: CollectionStackingView;
type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | undefined;
createDropTarget: (ele: HTMLDivElement) => void;
+ screenToLocalTransform: () => Transform;
}
@observer
@@ -39,8 +46,11 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
private _dropRef: HTMLDivElement | null = null;
private dropDisposer?: DragManager.DragDropDisposer;
private _headerRef: React.RefObject<HTMLDivElement> = React.createRef();
+ private _startDragPosition: { x: number, y: number } = { x: 0, y: 0 };
+ private _sensitivity: number = 16;
@observable _heading = this.props.headingObject ? this.props.headingObject.heading : this.props.heading;
+ @observable _color = this.props.headingObject ? this.props.headingObject.color : "#f1efeb";
createColumnDropRef = (ele: HTMLDivElement | null) => {
this._dropRef = ele;
@@ -150,6 +160,14 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
}
@action
+ changeColumnColor = (color: string) => {
+ if (this.props.headingObject) {
+ this.props.headingObject.setColor(color);
+ this._color = color;
+ }
+ }
+
+ @action
pointerEntered = () => {
if (SelectionManager.GetIsDragging()) {
this._background = "#b4b4b4";
@@ -159,6 +177,7 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
@action
pointerLeave = () => {
this._background = "inherit";
+ document.removeEventListener("pointermove", this.startDrag);
}
@action
@@ -180,22 +199,25 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
}
startDrag = (e: PointerEvent) => {
- let alias = Doc.MakeAlias(this.props.parent.props.Document);
- let key = StrCast(this.props.parent.props.Document.sectionFilter);
- let value = this.getValue(this._heading);
- value = typeof value === "string" ? `"${value}"` : value;
- let script = `return doc.${key} === ${value}`;
- let compiled = CompileScript(script, { params: { doc: Doc.name } });
- if (compiled.compiled) {
- let scriptField = new ScriptField(compiled);
- alias.viewSpecScript = scriptField;
- let dragData = new DragManager.DocumentDragData([alias], [alias.proto]);
- DragManager.StartDocumentDrag([this._headerRef.current!], dragData, e.clientX, e.clientY);
- }
+ let [dx, dy] = this.props.screenToLocalTransform().transformDirection(e.clientX - this._startDragPosition.x, e.clientY - this._startDragPosition.y);
+ if (Math.abs(dx) + Math.abs(dy) > this._sensitivity) {
+ let alias = Doc.MakeAlias(this.props.parent.props.Document);
+ let key = StrCast(this.props.parent.props.Document.sectionFilter);
+ let value = this.getValue(this._heading);
+ value = typeof value === "string" ? `"${value}"` : value;
+ let script = `return doc.${key} === ${value}`;
+ let compiled = CompileScript(script, { params: { doc: Doc.name } });
+ if (compiled.compiled) {
+ let scriptField = new ScriptField(compiled);
+ alias.viewSpecScript = scriptField;
+ let dragData = new DragManager.DocumentDragData([alias], [alias.proto]);
+ DragManager.StartDocumentDrag([this._headerRef.current!], dragData, e.clientX, e.clientY);
+ }
- e.stopPropagation();
- document.removeEventListener("pointermove", this.startDrag);
- document.removeEventListener("pointerup", this.pointerUp);
+ e.stopPropagation();
+ document.removeEventListener("pointermove", this.startDrag);
+ document.removeEventListener("pointerup", this.pointerUp);
+ }
}
pointerUp = (e: PointerEvent) => {
@@ -210,12 +232,45 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
e.stopPropagation();
e.preventDefault();
+ let [dx, dy] = this.props.screenToLocalTransform().transformDirection(e.clientX, e.clientY);
+ this._startDragPosition = { x: dx, y: dy };
+
document.removeEventListener("pointermove", this.startDrag);
document.addEventListener("pointermove", this.startDrag);
document.removeEventListener("pointerup", this.pointerUp);
document.addEventListener("pointerup", this.pointerUp);
}
+ renderColorPicker = () => {
+ let selected = this.props.headingObject ? this.props.headingObject.color : "#f1efeb";
+
+ let pink = PastelSchemaPalette.get("pink2");
+ let purple = PastelSchemaPalette.get("purple4");
+ let blue = PastelSchemaPalette.get("bluegreen1");
+ let yellow = PastelSchemaPalette.get("yellow4");
+ let red = PastelSchemaPalette.get("red2");
+ let green = PastelSchemaPalette.get("bluegreen7");
+ let cyan = PastelSchemaPalette.get("bluegreen5");
+ let orange = PastelSchemaPalette.get("orange1");
+ let gray = "#f1efeb";
+
+ return (
+ <div className="collectionStackingView-colorPicker">
+ <div className="colorOptions">
+ <div className={"colorPicker" + (selected === pink ? " active" : "")} style={{ backgroundColor: pink }} onClick={() => this.changeColumnColor(pink!)}></div>
+ <div className={"colorPicker" + (selected === purple ? " active" : "")} style={{ backgroundColor: purple }} onClick={() => this.changeColumnColor(purple!)}></div>
+ <div className={"colorPicker" + (selected === blue ? " active" : "")} style={{ backgroundColor: blue }} onClick={() => this.changeColumnColor(blue!)}></div>
+ <div className={"colorPicker" + (selected === yellow ? " active" : "")} style={{ backgroundColor: yellow }} onClick={() => this.changeColumnColor(yellow!)}></div>
+ <div className={"colorPicker" + (selected === red ? " active" : "")} style={{ backgroundColor: red }} onClick={() => this.changeColumnColor(red!)}></div>
+ <div className={"colorPicker" + (selected === gray ? " active" : "")} style={{ backgroundColor: gray }} onClick={() => this.changeColumnColor(gray)}></div>
+ <div className={"colorPicker" + (selected === green ? " active" : "")} style={{ backgroundColor: green }} onClick={() => this.changeColumnColor(green!)}></div>
+ <div className={"colorPicker" + (selected === cyan ? " active" : "")} style={{ backgroundColor: cyan }} onClick={() => this.changeColumnColor(cyan!)}></div>
+ <div className={"colorPicker" + (selected === orange ? " active" : "")} style={{ backgroundColor: orange }} onClick={() => this.changeColumnColor(orange!)}></div>
+ </div>
+ </div>
+ );
+ }
+
render() {
let cols = this.props.cols();
let key = StrCast(this.props.parent.props.Document.sectionFilter);
@@ -242,7 +297,7 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
style={{
width: (style.columnWidth) /
((uniqueHeadings.length +
- (this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled' ? 1 : 0)) || 1)
+ ((this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'view-mode' && this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled') ? 1 : 0)) || 1)
}}>
{/* the default bucket (no key value) has a tooltip that describes what it is.
Further, it does not have a color and cannot be deleted. */}
@@ -251,11 +306,19 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
`Documents that don't have a ${key} value will go here. This column cannot be removed.` : ""}
style={{
width: "100%",
- background: this.props.headingObject && evContents !== `NO ${key.toUpperCase()} VALUE` ?
- this.props.headingObject.color : "lightgrey",
+ background: evContents !== `NO ${key.toUpperCase()} VALUE` ? this._color : "lightgrey",
color: "grey"
}}>
<EditableView {...headerEditableViewProps} />
+ {evContents === `NO ${key.toUpperCase()} VALUE` ? (null) :
+ <div className="collectionStackingView-sectionColor">
+ <Flyout anchorPoint={anchorPoints.TOP_CENTER} content={this.renderColorPicker()}>
+ <button className="collectionStackingView-sectionColorButton">
+ <FontAwesomeIcon icon="palette" size="sm" />
+ </button>
+ </ Flyout >
+ </div>
+ }
{evContents === `NO ${key.toUpperCase()} VALUE` ?
(null) :
<button className="collectionStackingView-sectionDelete" onClick={this.deleteColumn}>
@@ -265,7 +328,7 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
</div> : (null);
for (let i = 0; i < cols; i++) templatecols += `${style.columnWidth}px `;
return (
- <div key={heading} style={{ width: `${100 / ((uniqueHeadings.length + (this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled' ? 1 : 0)) || 1)}%`, background: this._background }}
+ <div key={heading} style={{ width: `${100 / ((uniqueHeadings.length + ((this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'view-mode' && this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled') ? 1 : 0)) || 1)}%`, background: this._background }}
ref={this.createColumnDropRef} onPointerEnter={this.pointerEntered} onPointerLeave={this.pointerLeave}>
{headingView}
<div key={`${heading}-stack`} className={`collectionStackingView-masonry${singleColumn ? "Single" : "Grid"}`}
@@ -283,9 +346,9 @@ export class CollectionStackingViewFieldColumn extends React.Component<CSVFieldC
{this.children(this.props.docList)}
{singleColumn ? (null) : this.props.parent.columnDragger}
</div>
- {(this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled') ?
+ {(this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'view-mode' && this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled') ?
<div key={`${heading}-add-document`} className="collectionStackingView-addDocumentButton"
- style={{ width: style.columnWidth / (uniqueHeadings.length + (this.props.parent.props.CollectionView.props.Document.chromeStatus !== 'disabled' ? 1 : 0)) }}>
+ style={{ width: style.columnWidth / (uniqueHeadings.length + 1) }}>
<EditableView {...newEditableViewProps} />
</div> : null}
</div>
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index a15ed8f94..077f3f941 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -1,13 +1,15 @@
import { action, computed } from "mobx";
import * as rp from 'request-promise';
import CursorField from "../../../new_fields/CursorField";
-import { Doc, DocListCast, Opt } from "../../../new_fields/Doc";
+import { Doc, DocListCast } from "../../../new_fields/Doc";
import { Id } from "../../../new_fields/FieldSymbols";
import { List } from "../../../new_fields/List";
import { listSpec } from "../../../new_fields/Schema";
+import { ScriptField } from "../../../new_fields/ScriptField";
import { BoolCast, Cast } from "../../../new_fields/Types";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
import { RouteStore } from "../../../server/RouteStore";
+import { Utils } from "../../../Utils";
import { DocServer } from "../../DocServer";
import { Docs, DocumentOptions, DocumentType } from "../../documents/Documents";
import { DragManager } from "../../util/DragManager";
@@ -19,10 +21,6 @@ import { CollectionPDFView } from "./CollectionPDFView";
import { CollectionVideoView } from "./CollectionVideoView";
import { CollectionView } from "./CollectionView";
import React = require("react");
-import { MainView } from "../MainView";
-import { Utils } from "../../../Utils";
-import { ScriptField } from "../../../new_fields/ScriptField";
-import { CompileScript } from "../../util/Scripting";
export interface CollectionViewProps extends FieldViewProps {
addDocument: (document: Doc, allowDuplicates?: boolean) => boolean;
@@ -66,6 +64,9 @@ export function CollectionSubView<T>(schemaCtor: (doc: Doc) => T) {
if (res.success) {
return res.result;
}
+ else {
+ console.log(res.error);
+ }
});
}
return docs;
@@ -112,6 +113,13 @@ export function CollectionSubView<T>(schemaCtor: (doc: Doc) => T) {
@action
protected drop(e: Event, de: DragManager.DropEvent): boolean {
if (de.data instanceof DragManager.DocumentDragData) {
+ if (de.mods === "AltKey" && de.data.draggedDocuments.length) {
+ this.childDocs.map(doc =>
+ Doc.ApplyTemplateTo(de.data.draggedDocuments[0], doc, undefined)
+ );
+ e.stopPropagation();
+ return true;
+ }
let added = false;
if (de.data.dropAction || de.data.userDropAction) {
added = de.data.droppedDocuments.reduce((added: boolean, d) => this.props.addDocument(d) || added, false);
diff --git a/src/client/views/collections/CollectionTreeView.scss b/src/client/views/collections/CollectionTreeView.scss
index db3652ff6..990979109 100644
--- a/src/client/views/collections/CollectionTreeView.scss
+++ b/src/client/views/collections/CollectionTreeView.scss
@@ -7,6 +7,9 @@
border-radius: inherit;
box-sizing: border-box;
height: 100%;
+ width:100%;
+ position: absolute;
+ top:0;
padding-top: 20px;
padding-left: 10px;
padding-right: 0px;
diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx
index b1e6eada0..7f5d78313 100644
--- a/src/client/views/collections/CollectionTreeView.tsx
+++ b/src/client/views/collections/CollectionTreeView.tsx
@@ -25,7 +25,6 @@ import { CollectionSchemaPreview } from './CollectionSchemaView';
import { CollectionSubView } from "./CollectionSubView";
import "./CollectionTreeView.scss";
import React = require("react");
-import { LinkManager } from '../../util/LinkManager';
import { ComputedField } from '../../../new_fields/ScriptField';
import { KeyValueBox } from '../nodes/KeyValueBox';
@@ -67,36 +66,24 @@ library.add(faPlus, faMinus);
* Component that takes in a document prop and a boolean whether it's collapsed or not.
*/
class TreeView extends React.Component<TreeViewProps> {
+ static loadId = "";
private _header?: React.RefObject<HTMLDivElement> = React.createRef();
private _treedropDisposer?: DragManager.DragDropDisposer;
private _dref = React.createRef<HTMLDivElement>();
- @computed get treeViewExpandedView() { return StrCast(this.props.document.treeViewExpandedView, "data"); }
- @computed get MAX_EMBED_HEIGHT() { return NumCast(this.props.document.maxEmbedHeight, 300); }
@observable _collapsed: boolean = true;
-
+ @computed get treeViewExpandedView() { return StrCast(this.props.document.treeViewExpandedView, "fields"); }
+ @computed get MAX_EMBED_HEIGHT() { return NumCast(this.props.document.maxEmbedHeight, 300); }
+ @computed get dataDoc() { return this.resolvedDataDoc ? this.resolvedDataDoc : this.props.document; }
@computed get fieldKey() {
- let target = this.props.document;
- let keys = Array.from(Object.keys(target)); // bcz: Argh -- make untracked to avoid this rerunning whenever 'libraryBrush' is set
- if (target.proto instanceof Doc) {
- let arr = Array.from(Object.keys(target.proto));// bcz: Argh -- make untracked to avoid this rerunning whenever 'libraryBrush' is set
- keys.push(...arr);
- while (keys.indexOf("proto") !== -1) keys.splice(keys.indexOf("proto"), 1);
- }
- let keyList: string[] = [];
- keys.map(key => {
- let docList = Cast(this.dataDoc[key], listSpec(Doc));
- if (docList && docList.length > 0) {
- keyList.push(key);
- }
- });
- let layout = StrCast(this.props.document.layout);
- if (layout.indexOf("fieldKey={\"") !== -1 && layout.indexOf("fieldExt=") === -1) {
- return layout.split("fieldKey={\"")[1].split("\"")[0];
- }
- return keyList.length ? keyList[0] : "data";
+ let splits = StrCast(this.props.document.layout).split("fieldKey={\"");
+ return splits.length > 1 ? splits[1].split("\"")[0] : "data";
+ }
+ @computed get childDocs() {
+ let layout = this.props.document.layout as Doc;
+ return (this.props.dataDoc ? Cast(this.props.dataDoc[this.fieldKey], listSpec(Doc)) : undefined) ||
+ (layout ? Cast(layout[this.fieldKey], listSpec(Doc)) : undefined) ||
+ Cast(this.props.document[this.fieldKey], listSpec(Doc));
}
-
- @computed get dataDoc() { return this.resolvedDataDoc ? this.resolvedDataDoc : this.props.document; }
@computed get resolvedDataDoc() {
if (this.props.dataDoc === undefined && this.props.document.layout instanceof Doc) {
// if there is no dataDoc (ie, we're not rendering a template layout), but this document
@@ -104,18 +91,32 @@ class TreeView extends React.Component<TreeViewProps> {
// this document as the data document for the layout.
return this.props.document;
}
- return this.props.dataDoc ? this.props.dataDoc : undefined;
+ return this.props.dataDoc;
+ }
+ @computed get boundsOfCollectionDocument() {
+ return StrCast(this.props.document.type).indexOf(DocumentType.COL) === -1 ? undefined :
+ Doc.ComputeContentBounds(DocListCast(this.props.document.data));
}
- protected createTreeDropTarget = (ele: HTMLDivElement) => {
- this._treedropDisposer && this._treedropDisposer();
- if (ele) {
- this._treedropDisposer = DragManager.MakeDropTarget(ele, { handlers: { drop: this.treeDrop.bind(this) } });
+ @undoBatch delete = () => this.props.deleteDoc(this.dataDoc);
+ @undoBatch openRight = () => this.props.addDocTab(this.props.document, undefined, "onRight");
+ @undoBatch indent = () => this.props.addDocument(this.props.document) && this.delete();
+ @undoBatch move = (doc: Doc, target: Doc, addDoc: (doc: Doc) => boolean) => {
+ return this.props.document !== target && this.props.deleteDoc(doc) && addDoc(doc);
+ }
+ @undoBatch @action remove = (document: Document, key: string): boolean => {
+ let children = Cast(this.dataDoc[key], listSpec(Doc), []);
+ if (children.indexOf(document) !== -1) {
+ children.splice(children.indexOf(document), 1);
+ return true;
}
+ return false;
}
- @undoBatch delete = () => this.props.deleteDoc(this.dataDoc);
- @undoBatch openRight = async () => this.props.addDocTab(this.props.document, undefined, "onRight");
+ protected createTreeDropTarget = (ele: HTMLDivElement) => {
+ this._treedropDisposer && this._treedropDisposer();
+ ele && (this._treedropDisposer = DragManager.MakeDropTarget(ele, { handlers: { drop: this.treeDrop.bind(this) } }));
+ }
onPointerDown = (e: React.PointerEvent) => e.stopPropagation();
onPointerEnter = (e: React.PointerEvent): void => {
@@ -144,34 +145,6 @@ class TreeView extends React.Component<TreeViewProps> {
e.stopPropagation();
}
- @action
- remove = (document: Document, key: string): boolean => {
- let children = Cast(this.dataDoc[key], listSpec(Doc), []);
- if (children.indexOf(document) !== -1) {
- children.splice(children.indexOf(document), 1);
- return true;
- }
- return false;
- }
-
- @action
- move: DragManager.MoveFunction = (doc: Doc, target: Doc, addDoc) => {
- return this.props.document !== target && this.props.deleteDoc(doc) && addDoc(doc);
- }
- @action
- indent = () => this.props.addDocument(this.props.document) && this.delete()
-
- renderBullet() {
- let docList = Cast(this.dataDoc[this.fieldKey], listSpec(Doc));
- let doc = Cast(this.dataDoc[this.fieldKey], Doc);
- let isDoc = doc instanceof Doc || docList;
- let c;
- return <div className="bullet" onClick={action(() => this._collapsed = !this._collapsed)} style={{ color: StrCast(this.props.document.color, "black"), opacity: 0.4 }}>
- {<FontAwesomeIcon icon={this._collapsed ? (isDoc ? "caret-square-right" : "caret-right") : (isDoc ? "caret-square-down" : "caret-down")} />}
- </div>;
- }
-
- static loadId = "";
editableView = (key: string, style?: string) => (<EditableView
oneLine={true}
display={"inline"}
@@ -192,43 +165,6 @@ class TreeView extends React.Component<TreeViewProps> {
OnTab={() => this.props.indentDocument && this.props.indentDocument()}
/>)
- /**
- * Renders the EditableView title element for placement into the tree.
- */
- renderTitle() {
- let reference = React.createRef<HTMLDivElement>();
- let onItemDown = SetupDrag(reference, () => this.dataDoc, this.move, this.props.dropAction, this.props.treeViewId, true);
-
- let headerElements = (
- <span className="collectionTreeView-keyHeader" key={this.treeViewExpandedView}
- onPointerDown={action(() => {
- this.props.document.treeViewExpandedView = this.treeViewExpandedView === "data" ? "fields" :
- this.treeViewExpandedView === "fields" && this.props.document.layout ? "layout" : "data";
- this._collapsed = false;
- })}>
- {this.treeViewExpandedView}
- </span>);
- let dataDocs = CollectionDockingView.Instance ? Cast(CollectionDockingView.Instance.props.Document[this.fieldKey], listSpec(Doc), []) : [];
- let openRight = dataDocs && dataDocs.indexOf(this.dataDoc) !== -1 ? (null) : (
- <div className="treeViewItem-openRight" onPointerDown={this.onPointerDown} onClick={this.openRight}>
- <FontAwesomeIcon icon="angle-right" size="lg" />
- </div>);
- return <>
- <div className="docContainer" id={`docContainer-${this.props.parentKey}`} ref={reference} onPointerDown={onItemDown}
- style={{
- background: BoolCast(this.props.document.libraryBrush) ? "#06121212" : "0",
- outline: BoolCast(this.props.document.workspaceBrush) ? "dashed 1px #06123232" : undefined,
- pointerEvents: this.props.active() || SelectionManager.GetIsDragging() ? "all" : "none"
- }}
- >
- {this.editableView("title")}
- {/* {<div className="delete-button" onClick={this.delete}><FontAwesomeIcon icon="trash-alt" size="xs" /></div>} */}
- </div >
- {headerElements}
- {openRight}
- </>;
- }
-
onWorkspaceContextMenu = (e: React.MouseEvent): void => {
if (!e.isPropagationStopped()) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7
if (NumCast(this.props.document.viewType) !== CollectionViewType.Docking) {
@@ -289,39 +225,6 @@ class TreeView extends React.Component<TreeViewProps> {
let finalXf = this.props.ScreenToLocalTransform().translate(offset[0], offset[1]);
return finalXf;
}
-
- renderLinks = () => {
- let ele: JSX.Element[] = [];
- let remDoc = (doc: Doc) => this.remove(doc, this.fieldKey);
- let addDoc = (doc: Doc, addBefore?: Doc, before?: boolean) => Doc.AddDocToList(this.props.document, this.fieldKey, doc, addBefore, before);
- let groups = LinkManager.Instance.getRelatedGroupedLinks(this.props.document);
- groups.forEach((groupLinkDocs, groupType) => {
- // let destLinks = groupLinkDocs.map(d => LinkManager.Instance.getOppositeAnchor(d, this.props.document));
- let destLinks: Doc[] = [];
- groupLinkDocs.forEach((doc) => {
- let opp = LinkManager.Instance.getOppositeAnchor(doc, this.props.document);
- if (opp) {
- destLinks.push(opp);
- }
- });
- ele.push(
- <div key={"treeviewlink-" + groupType + "subtitle"}>
- <div className="collectionTreeView-subtitle">{groupType}:</div>
- {
- TreeView.GetChildElements(destLinks, this.props.treeViewId, this.props.document, this.props.dataDoc, "treeviewlink-" + groupType, addDoc, remDoc, this.move,
- this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.props.outerXf, this.props.active, this.props.panelWidth, this.props.renderDepth)
- }
- </div>
- );
- });
- return ele;
- }
-
- @computed get boundsOfCollectionDocument() {
- if (StrCast(this.props.document.type).indexOf(DocumentType.COL) === -1) return undefined;
- let layoutDoc = this.props.document;
- return Doc.ComputeContentBounds(DocListCast(layoutDoc.data));
- }
docWidth = () => {
let aspect = NumCast(this.props.document.nativeHeight) / NumCast(this.props.document.nativeWidth);
if (aspect) return Math.min(this.props.document[WidthSym](), Math.min(this.MAX_EMBED_HEIGHT / aspect, this.props.panelWidth() - 5));
@@ -337,39 +240,29 @@ class TreeView extends React.Component<TreeViewProps> {
})());
}
- noOverlays = (doc: Doc) => ({ title: "", caption: "" });
-
- expandedField = (doc?: Doc) => {
- if (!doc) return <div />;
- let realDoc = doc;
-
+ expandedField = (doc: Doc) => {
let ids: { [key: string]: string } = {};
- Object.keys(doc).forEach(key => {
- if (!(key in ids) && realDoc[key] !== ComputedField.undefined) {
- ids[key] = key;
- }
- });
+ doc && Object.keys(doc).forEach(key => !(key in ids) && doc[key] !== ComputedField.undefined && (ids[key] = key));
let rows: JSX.Element[] = [];
for (let key of Object.keys(ids).sort()) {
- let contents = realDoc[key] ? realDoc[key] : undefined;
+ let contents = doc[key];
let contentElement: JSX.Element[] | JSX.Element = [];
if (contents instanceof Doc || Cast(contents, listSpec(Doc))) {
- let docList = contents;
let remDoc = (doc: Doc) => this.remove(doc, key);
let addDoc = (doc: Doc, addBefore?: Doc, before?: boolean) => Doc.AddDocToList(this.dataDoc, key, doc, addBefore, before);
- contentElement = key === "links" ? this.renderLinks() :
- TreeView.GetChildElements(docList instanceof Doc ? [docList] : DocListCast(docList), this.props.treeViewId, realDoc, undefined, key, addDoc, remDoc, this.move,
- this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.props.outerXf, this.props.active, this.props.panelWidth, this.props.renderDepth);
+ contentElement = TreeView.GetChildElements(contents instanceof Doc ? [contents] :
+ DocListCast(contents), this.props.treeViewId, doc, undefined, key, addDoc, remDoc, this.move,
+ this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.props.outerXf, this.props.active, this.props.panelWidth, this.props.renderDepth);
} else {
contentElement = <EditableView
key="editableView"
- contents={contents ? contents.toString() : "null"}
+ contents={contents !== undefined ? contents.toString() : "null"}
height={13}
fontSize={12}
- GetValue={() => Field.toKeyValueString(realDoc, key)}
- SetValue={(value: string) => KeyValueBox.SetField(realDoc, key, value)} />;
+ GetValue={() => Field.toKeyValueString(doc, key)}
+ SetValue={(value: string) => KeyValueBox.SetField(doc, key, value)} />;
}
rows.push(<div style={{ display: "flex" }} key={key}>
<span style={{ fontWeight: "bold" }}>{key + ":"}</span>
@@ -380,56 +273,100 @@ class TreeView extends React.Component<TreeViewProps> {
return rows;
}
- render() {
- let contentElement: (JSX.Element | null) = null;
- let docList = Cast(this.dataDoc[this.fieldKey], listSpec(Doc));
- let remDoc = (doc: Doc) => this.remove(doc, this.fieldKey);
- let addDoc = (doc: Doc, addBefore?: Doc, before?: boolean) => Doc.AddDocToList(this.dataDoc, this.fieldKey, doc, addBefore, before);
+ noOverlays = (doc: Doc) => ({ title: "", caption: "" });
- if (!this._collapsed) {
- if (this.treeViewExpandedView === "data") {
- let doc = Cast(this.props.document[this.fieldKey], Doc);
- contentElement = <ul key={this.fieldKey + "more"}>
- {this.fieldKey === "links" ? this.renderLinks() :
- TreeView.GetChildElements(doc instanceof Doc ? [doc] : DocListCast(docList), this.props.treeViewId, this.props.document, this.resolvedDataDoc, this.fieldKey, addDoc, remDoc, this.move,
- this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.props.outerXf, this.props.active, this.props.panelWidth, this.props.renderDepth)}
- </ul >;
- } else if (this.treeViewExpandedView === "fields") {
- contentElement = <ul><div ref={this._dref} style={{ display: "inline-block" }} key={this.props.document[Id] + this.props.document.title}>
- {this.expandedField(this.dataDoc)}
- </div></ul>;
- } else {
- let layoutDoc = this.props.document;
- contentElement = <div ref={this._dref} style={{ display: "inline-block", height: this.docHeight() }} key={this.props.document[Id] + this.props.document.title}>
- <CollectionSchemaPreview
- Document={layoutDoc}
- DataDocument={this.resolvedDataDoc}
- renderDepth={this.props.renderDepth}
- showOverlays={this.noOverlays}
- fitToBox={this.boundsOfCollectionDocument !== undefined}
- width={this.docWidth}
- height={this.docHeight}
- getTransform={this.docTransform}
- CollectionView={undefined}
- addDocument={emptyFunction as any}
- moveDocument={this.props.moveDocument}
- removeDocument={emptyFunction as any}
- active={this.props.active}
- whenActiveChanged={emptyFunction as any}
- addDocTab={this.props.addDocTab}
- setPreviewScript={emptyFunction}>
- </CollectionSchemaPreview>
- </div>;
- }
+ @computed get renderContent() {
+ if (this.treeViewExpandedView === this.fieldKey) {
+ let remDoc = (doc: Doc) => this.remove(doc, this.fieldKey);
+ let addDoc = (doc: Doc, addBefore?: Doc, before?: boolean) => Doc.AddDocToList(this.dataDoc, this.fieldKey, doc, addBefore, before);
+ return <ul key={this.fieldKey + "more"}>
+ {!this.childDocs ? (null) :
+ TreeView.GetChildElements(this.childDocs as Doc[], this.props.treeViewId, this.props.document.layout as Doc,
+ this.resolvedDataDoc, this.fieldKey, addDoc, remDoc, this.move,
+ this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform,
+ this.props.outerXf, this.props.active, this.props.panelWidth, this.props.renderDepth)}
+ </ul >;
+ } else if (this.treeViewExpandedView === "fields") {
+ return <ul><div ref={this._dref} style={{ display: "inline-block" }} key={this.props.document[Id] + this.props.document.title}>
+ {this.dataDoc ? this.expandedField(this.dataDoc) : (null)}
+ </div></ul>;
+ } else {
+ let layoutDoc = this.props.document;
+ return <div ref={this._dref} style={{ display: "inline-block", height: this.docHeight() }} key={this.props.document[Id] + this.props.document.title}>
+ <CollectionSchemaPreview
+ Document={layoutDoc}
+ DataDocument={this.resolvedDataDoc}
+ renderDepth={this.props.renderDepth}
+ showOverlays={this.noOverlays}
+ fitToBox={this.boundsOfCollectionDocument !== undefined}
+ width={this.docWidth}
+ height={this.docHeight}
+ getTransform={this.docTransform}
+ CollectionView={undefined}
+ addDocument={emptyFunction as any}
+ moveDocument={this.props.moveDocument}
+ removeDocument={emptyFunction as any}
+ active={this.props.active}
+ whenActiveChanged={emptyFunction as any}
+ addDocTab={this.props.addDocTab}
+ setPreviewScript={emptyFunction}>
+ </CollectionSchemaPreview>
+ </div>;
}
+ }
+
+ @computed
+ get renderBullet() {
+ return <div className="bullet" onClick={action(() => this._collapsed = !this._collapsed)} style={{ color: StrCast(this.props.document.color, "black"), opacity: 0.4 }}>
+ {<FontAwesomeIcon icon={this._collapsed ? (this.childDocs ? "caret-square-right" : "caret-right") : (this.childDocs ? "caret-square-down" : "caret-down")} />}
+ </div>;
+ }
+ /**
+ * Renders the EditableView title element for placement into the tree.
+ */
+ @computed
+ get renderTitle() {
+ let reference = React.createRef<HTMLDivElement>();
+ let onItemDown = SetupDrag(reference, () => this.dataDoc, this.move, this.props.dropAction, this.props.treeViewId, true);
+
+ let headerElements = (
+ <span className="collectionTreeView-keyHeader" key={this.treeViewExpandedView}
+ onPointerDown={action(() => {
+ this.props.document.treeViewExpandedView = this.treeViewExpandedView === this.fieldKey ? "fields" :
+ this.treeViewExpandedView === "fields" && this.props.document.layout ? "layout" :
+ this.childDocs ? this.fieldKey : "fields";
+ this._collapsed = false;
+ })}>
+ {this.treeViewExpandedView}
+ </span>);
+ let dataDocs = CollectionDockingView.Instance ? Cast(CollectionDockingView.Instance.props.Document[this.fieldKey], listSpec(Doc), []) : [];
+ let openRight = dataDocs && dataDocs.indexOf(this.dataDoc) !== -1 ? (null) : (
+ <div className="treeViewItem-openRight" onPointerDown={this.onPointerDown} onClick={this.openRight}>
+ <FontAwesomeIcon icon="angle-right" size="lg" />
+ </div>);
+ return <>
+ <div className="docContainer" id={`docContainer-${this.props.parentKey}`} ref={reference} onPointerDown={onItemDown}
+ style={{
+ background: BoolCast(this.props.document.libraryBrush) ? "#06121212" : "0",
+ outline: BoolCast(this.props.document.workspaceBrush) ? "dashed 1px #06123232" : undefined,
+ pointerEvents: this.props.active() || SelectionManager.GetIsDragging() ? "all" : "none"
+ }} >
+ {this.editableView("title")}
+ </div >
+ {headerElements}
+ {openRight}
+ </>;
+ }
+
+ render() {
return <div className="treeViewItem-container" ref={this.createTreeDropTarget} onContextMenu={this.onWorkspaceContextMenu}>
<li className="collection-child">
<div className="treeViewItem-header" ref={this._header} onPointerEnter={this.onPointerEnter} onPointerLeave={this.onPointerLeave}>
- {this.renderBullet()}
- {this.renderTitle()}
+ {this.renderBullet}
+ {this.renderTitle}
</div>
<div className="treeViewItem-border">
- {contentElement}
+ {this._collapsed ? (null) : this.renderContent}
</div>
</li>
</div>;
@@ -454,6 +391,8 @@ class TreeView extends React.Component<TreeViewProps> {
let docList = docs.filter(child => !child.excludeFromLibrary);
let rowWidth = () => panelWidth() - 20;
return docList.map((child, i) => {
+ let pair = Doc.GetLayoutDataDocPair(containingCollection, dataDoc, key, child);
+
let indent = i === 0 ? undefined : () => {
if (StrCast(docList[i - 1].layout).indexOf("CollectionView") !== -1) {
let fieldKeysub = StrCast(docList[i - 1].layout).split("fieldKey")[1];
@@ -470,8 +409,8 @@ class TreeView extends React.Component<TreeViewProps> {
return aspect ? Math.min(child[WidthSym](), rowWidth()) / aspect : child[HeightSym]();
};
return <TreeView
- document={child}
- dataDoc={dataDoc}
+ document={pair.layout}
+ dataDoc={pair.data}
containingCollection={containingCollection}
treeViewId={treeViewId}
key={child[Id]}
@@ -497,7 +436,9 @@ export class CollectionTreeView extends CollectionSubView(Document) {
private treedropDisposer?: DragManager.DragDropDisposer;
private _mainEle?: HTMLDivElement;
- @computed get chromeCollapsed() { return this.props.chromeCollapsed; }
+ @observable static NotifsCol: Opt<Doc>;
+
+ @computed get resolvedDataDoc() { return BoolCast(this.props.Document.isTemplate) && this.props.DataDoc ? this.props.DataDoc : this.props.Document; }
protected createTreeDropTarget = (ele: HTMLDivElement) => {
this.treedropDisposer && this.treedropDisposer();
@@ -529,21 +470,15 @@ export class CollectionTreeView extends CollectionSubView(Document) {
ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15);
}
}
-
- @computed get resolvedDataDoc() { return BoolCast(this.props.Document.isTemplate) && this.props.DataDoc ? this.props.DataDoc : this.props.Document; }
-
outerXf = () => Utils.GetScreenTransform(this._mainEle!);
onTreeDrop = (e: React.DragEvent) => this.onDrop(e, {});
-
-
- @observable static NotifsCol: Opt<Doc>;
-
openNotifsCol = () => {
if (CollectionTreeView.NotifsCol && CollectionDockingView.Instance) {
CollectionDockingView.Instance.AddRightSplit(CollectionTreeView.NotifsCol, undefined);
}
}
- @computed get notifsButton() {
+
+ @computed get renderNotifsButton() {
const length = CollectionTreeView.NotifsCol ? DocListCast(CollectionTreeView.NotifsCol.data).length : 0;
const notifsRef = React.createRef<HTMLDivElement>();
const dragNotifs = action(() => CollectionTreeView.NotifsCol!);
@@ -559,18 +494,15 @@ export class CollectionTreeView extends CollectionSubView(Document) {
</div>
</div >;
}
- @computed get clearButton() {
+ @computed get renderClearButton() {
return <div id="toolbar" key="toolbar">
- <div >
- <button className="toolbar-button round-button" title="Notifs"
- onClick={undoBatch(action(() => Doc.GetProto(this.props.Document)[this.props.fieldKey] = undefined))}>
- <FontAwesomeIcon icon={faTrash} size="sm" />
- </button>
- </div>
+ <button className="toolbar-button round-button" title="Notifs"
+ onClick={undoBatch(action(() => Doc.GetProto(this.props.Document)[this.props.fieldKey] = undefined))}>
+ <FontAwesomeIcon icon={faTrash} size="sm" />
+ </button>
</div >;
}
-
render() {
Doc.UpdateDocumentExtensionForField(this.props.DataDoc ? this.props.DataDoc : this.props.Document, this.props.fieldKey);
let dropAction = StrCast(this.props.Document.dropAction) as dropActionType;
@@ -596,8 +528,8 @@ export class CollectionTreeView extends CollectionSubView(Document) {
TreeView.loadId = doc[Id];
Doc.AddDocToList(this.props.Document, this.props.fieldKey, doc, this.childDocs.length ? this.childDocs[0] : undefined, true);
}} />
- {this.props.Document.workspaceLibrary ? this.notifsButton : (null)}
- {this.props.Document.allowClear ? this.clearButton : (null)}
+ {this.props.Document.workspaceLibrary ? this.renderNotifsButton : (null)}
+ {this.props.Document.allowClear ? this.renderClearButton : (null)}
<ul className="no-indent" style={{ width: "max-content" }} >
{
TreeView.GetChildElements(this.childDocs, this.props.Document[Id], this.props.Document, this.props.DataDoc, this.props.fieldKey, addDoc, this.remove,
diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx
index 212cc5477..57dc5879b 100644
--- a/src/client/views/collections/CollectionView.tsx
+++ b/src/client/views/collections/CollectionView.tsx
@@ -1,11 +1,13 @@
import { library } from '@fortawesome/fontawesome-svg-core';
-import { faProjectDiagram, faSignature, faColumns, faSquare, faTh, faImage, faThList, faTree, faEllipsisV, faFingerprint, faLaptopCode } from '@fortawesome/free-solid-svg-icons';
+import { faEye } from '@fortawesome/free-regular-svg-icons';
+import { faColumns, faEllipsisV, faFingerprint, faImage, faProjectDiagram, faSignature, faSquare, faTh, faThList, faTree } from '@fortawesome/free-solid-svg-icons';
+import { action, IReactionDisposer, observable, reaction, runInAction } from 'mobx';
import { observer } from "mobx-react";
import * as React from 'react';
-import { Doc, DocListCast, WidthSym, HeightSym } from '../../../new_fields/Doc';
+import { Doc } from '../../../new_fields/Doc';
import { Id } from '../../../new_fields/FieldSymbols';
+import { StrCast } from '../../../new_fields/Types';
import { CurrentUserUtils } from '../../../server/authentication/models/current_user_utils';
-import { undoBatch } from '../../util/UndoManager';
import { ContextMenu } from "../ContextMenu";
import { ContextMenuProps } from '../ContextMenuItem';
import { FieldView, FieldViewProps } from '../nodes/FieldView';
@@ -15,11 +17,7 @@ import { CollectionFreeFormView } from './collectionFreeForm/CollectionFreeFormV
import { CollectionSchemaView } from "./CollectionSchemaView";
import { CollectionStackingView } from './CollectionStackingView';
import { CollectionTreeView } from "./CollectionTreeView";
-import { StrCast, PromiseValue } from '../../../new_fields/Types';
-import { DocumentType } from '../../documents/Documents';
-import { CollectionStackingViewChrome, CollectionViewBaseChrome } from './CollectionViewChromes';
-import { observable, action, runInAction, IReactionDisposer, reaction } from 'mobx';
-import { faEye } from '@fortawesome/free-regular-svg-icons';
+import { CollectionViewBaseChrome } from './CollectionViewChromes';
export const COLLECTION_BORDER_WIDTH = 2;
library.add(faTh);
@@ -45,6 +43,7 @@ export class CollectionView extends React.Component<FieldViewProps> {
this._reactionDisposer = reaction(() => StrCast(this.props.Document.chromeStatus),
() => {
// chrome status is one of disabled, collapsed, or visible. this determines initial state from document
+ // chrome status may also be view-mode, in reference to stacking view's toggle mode. it is essentially disabled mode, but prevents the toggle button from showing up on the left sidebar.
let chromeStatus = this.props.Document.chromeStatus;
if (chromeStatus && (chromeStatus === "disabled" || chromeStatus === "collapsed")) {
runInAction(() => this._collapsed = true);
@@ -112,6 +111,9 @@ export class CollectionView extends React.Component<FieldViewProps> {
}
ContextMenu.Instance.addItem({ description: "View Modes...", subitems: subItems, icon: "eye" });
ContextMenu.Instance.addItem({ description: "Apply Template", event: () => this.props.addDocTab && this.props.addDocTab(Doc.ApplyTemplate(this.props.Document)!, undefined, "onRight"), icon: "project-diagram" });
+ ContextMenu.Instance.addItem({
+ description: this.props.Document.chromeStatus !== "disabled" ? "Hide Chrome" : "Show Chrome", event: () => this.props.Document.chromeStatus = (this.props.Document.chromeStatus !== "disabled" ? "disabled" : "enabled"), icon: "project-diagram"
+ });
}
}
diff --git a/src/client/views/collections/CollectionViewChromes.scss b/src/client/views/collections/CollectionViewChromes.scss
index 989315194..793cb7a8b 100644
--- a/src/client/views/collections/CollectionViewChromes.scss
+++ b/src/client/views/collections/CollectionViewChromes.scss
@@ -7,8 +7,6 @@
z-index: 9001;
transition: top .5s;
background: lightgrey;
- transition: margin-top .5s;
- background: lightgray;
padding: 10px;
.collectionViewChrome {
@@ -16,6 +14,7 @@
grid-template-columns: 1fr auto;
padding-bottom: 10px;
border-bottom: .5px solid rgb(180, 180, 180);
+ overflow: hidden;
.collectionViewBaseChrome {
display: flex;
@@ -37,9 +36,11 @@
}
.collectionViewBaseChrome-collapse {
- transition: all .5s;
+ transition: all .5s, opacity 0.3s;
position: absolute;
width: 40px;
+ transform-origin: top left;
+ // margin-top: 10px;
}
.collectionViewBaseChrome-viewSpecs {
@@ -168,4 +169,55 @@
cursor: text;
}
}
+}
+
+.collectionSchemaViewChrome-cont {
+ display: flex;
+ font-size: 10.5px;
+
+ .collectionSchemaViewChrome-toggle {
+ display: flex;
+ margin-left: 10px;
+ }
+
+ .collectionSchemaViewChrome-label {
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ margin-right: 5px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+
+ .collectionSchemaViewChrome-toggler {
+ width: 100px;
+ height: 41px;
+ background-color: black;
+ position: relative;
+ }
+
+ .collectionSchemaViewChrome-togglerButton {
+ width: 47px;
+ height: 35px;
+ background-color: $light-color-secondary;
+ // position: absolute;
+ transition: all 0.5s ease;
+ // top: 3px;
+ margin-top: 3px;
+ color: gray;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+
+ &.on {
+ margin-left: 3px;
+ }
+
+ &.off {
+ margin-left: 50px;
+ }
+ }
} \ No newline at end of file
diff --git a/src/client/views/collections/CollectionViewChromes.tsx b/src/client/views/collections/CollectionViewChromes.tsx
index 38aafd3cc..1b2561953 100644
--- a/src/client/views/collections/CollectionViewChromes.tsx
+++ b/src/client/views/collections/CollectionViewChromes.tsx
@@ -17,6 +17,10 @@ import { CompileScript } from "../../util/Scripting";
import { ScriptField } from "../../../new_fields/ScriptField";
import { CollectionSchemaView } from "./CollectionSchemaView";
import { COLLECTION_BORDER_WIDTH } from "../globalCssVariables.scss";
+import { listSpec } from "../../../new_fields/Schema";
+import { List } from "../../../new_fields/List";
+import { Id } from "../../../new_fields/FieldSymbols";
+import { threadId } from "worker_threads";
const datepicker = require('js-datepicker');
interface CollectionViewChromeProps {
@@ -142,7 +146,7 @@ export class CollectionViewBaseChrome extends React.Component<CollectionViewChro
`return ${dateRestrictionScript} ${keyRestrictionScript.length ? "&&" : ""} ${keyRestrictionScript}` :
`return ${keyRestrictionScript} ${dateRestrictionScript.length ? "&&" : ""} ${dateRestrictionScript}` :
"return true";
- let compiled = CompileScript(fullScript, { params: { doc: Doc.name } });
+ let compiled = CompileScript(fullScript, { params: { doc: Doc.name }, typecheck: false });
if (compiled.compiled) {
this.props.CollectionView.props.Document.viewSpecScript = new ScriptField(compiled);
}
@@ -185,11 +189,16 @@ export class CollectionViewBaseChrome extends React.Component<CollectionViewChro
render() {
return (
- <div className="collectionViewChrome-cont" style={{ marginTop: this._collapsed ? -70 : 0, height: 70 }}>
+ <div className="collectionViewChrome-cont" style={{ top: this._collapsed ? -70 : 0 }}>
<div className="collectionViewChrome">
<div className="collectionViewBaseChrome">
<button className="collectionViewBaseChrome-collapse"
- style={{ marginTop: this._collapsed ? 60 : 0, transform: `rotate(${this._collapsed ? 180 : 0}deg)` }}
+ style={{
+ top: this._collapsed ? 70 : 10,
+ transform: `rotate(${this._collapsed ? 180 : 0}deg) scale(${this._collapsed ? 0.5 : 1}) translate(${this._collapsed ? "-100%, -100%" : "0, 0"})`,
+ opacity: (this._collapsed && !this.props.CollectionView.props.isSelected()) ? 0 : 0.9,
+ left: (this._collapsed ? 0 : "unset"),
+ }}
title="Collapse collection chrome" onClick={this.toggleCollapse}>
<FontAwesomeIcon icon="caret-up" size="2x" />
</button>
@@ -204,7 +213,7 @@ export class CollectionViewBaseChrome extends React.Component<CollectionViewChro
<option className="collectionViewBaseChrome-viewOption" onPointerDown={stopPropagation} value="5">Stacking View</option>
<option className="collectionViewBaseChrome-viewOption" onPointerDown={stopPropagation} value="6">Masonry View</option>
</select>
- <div className="collectionViewBaseChrome-viewSpecs">
+ <div className="collectionViewBaseChrome-viewSpecs" style={{ display: this._collapsed ? "none" : "grid" }}>
<input className="collectionViewBaseChrome-viewSpecsInput"
placeholder="FILTER DOCUMENTS"
value={this.filterValue ? this.filterValue.script.originalScript : ""}
@@ -366,7 +375,9 @@ export class CollectionStackingViewChrome extends React.Component<CollectionView
@observer
export class CollectionSchemaViewChrome extends React.Component<CollectionViewChromeProps> {
+ // private _textwrapAllRows: boolean = Cast(this.props.CollectionView.props.Document.textwrappedSchemaRows, listSpec("string"), []).length > 0;
+ @undoBatch
togglePreview = () => {
let dividerWidth = 4;
let borderWidth = Number(COLLECTION_BORDER_WIDTH);
@@ -374,16 +385,56 @@ export class CollectionSchemaViewChrome extends React.Component<CollectionViewCh
let previewWidth = NumCast(this.props.CollectionView.props.Document.schemaPreviewWidth);
let tableWidth = panelWidth - 2 * borderWidth - dividerWidth - previewWidth;
this.props.CollectionView.props.Document.schemaPreviewWidth = previewWidth === 0 ? Math.min(tableWidth / 3, 200) : 0;
+ }
+ @undoBatch
+ @action
+ toggleTextwrap = async () => {
+ let textwrappedRows = Cast(this.props.CollectionView.props.Document.textwrappedSchemaRows, listSpec("string"), []);
+ if (textwrappedRows.length) {
+ this.props.CollectionView.props.Document.textwrappedSchemaRows = new List<string>([]);
+ } else {
+ let docs: Doc | Doc[] | Promise<Doc> | Promise<Doc[]> | (() => DocLike)
+ = () => DocListCast(this.props.CollectionView.props.Document[this.props.CollectionView.props.fieldExt ? this.props.CollectionView.props.fieldExt : this.props.CollectionView.props.fieldKey]);
+ if (typeof docs === "function") {
+ docs = docs();
+ }
+ docs = await docs;
+ if (docs instanceof Doc) {
+ let allRows = [docs[Id]];
+ this.props.CollectionView.props.Document.textwrappedSchemaRows = new List<string>(allRows);
+ } else {
+ let allRows = docs.map(doc => doc[Id]);
+ this.props.CollectionView.props.Document.textwrappedSchemaRows = new List<string>(allRows);
+ }
+ }
}
render() {
let previewWidth = NumCast(this.props.CollectionView.props.Document.schemaPreviewWidth);
+ let textWrapped = Cast(this.props.CollectionView.props.Document.textwrappedSchemaRows, listSpec("string"), []).length > 0;
+
return (
- <div className="collectionStackingViewChrome-cont">
- <div id="preview-schema-checkbox-div"><input type="checkbox" key={"Show Preview"} checked={previewWidth !== 0} onChange={this.togglePreview} />Show Preview</div>
- </div>
+ <div className="collectionSchemaViewChrome-cont">
+ <div className="collectionSchemaViewChrome-toggle">
+ <div className="collectionSchemaViewChrome-label">Wrap Text: </div>
+ <div className="collectionSchemaViewChrome-toggler" onClick={this.toggleTextwrap}>
+ <div className={"collectionSchemaViewChrome-togglerButton" + (textWrapped ? " on" : " off")}>
+ {textWrapped ? "on" : "off"}
+ </div>
+ </div>
+ </div>
+
+ <div className="collectionSchemaViewChrome-toggle">
+ <div className="collectionSchemaViewChrome-label">Show Preview: </div>
+ <div className="collectionSchemaViewChrome-toggler" onClick={this.togglePreview}>
+ <div className={"collectionSchemaViewChrome-togglerButton" + (previewWidth !== 0 ? " on" : " off")}>
+ {previewWidth !== 0 ? "on" : "off"}
+ </div>
+ </div>
+ </div>
+ </div >
);
}
} \ No newline at end of file
diff --git a/src/client/views/collections/KeyRestrictionRow.tsx b/src/client/views/collections/KeyRestrictionRow.tsx
index 9baa250a6..1b59547d8 100644
--- a/src/client/views/collections/KeyRestrictionRow.tsx
+++ b/src/client/views/collections/KeyRestrictionRow.tsx
@@ -2,6 +2,7 @@ import * as React from "react";
import { observable, runInAction } from "mobx";
import { observer } from "mobx-react";
import { PastelSchemaPalette } from "../../../new_fields/SchemaHeaderField";
+import { Doc } from "../../../new_fields/Doc";
interface IKeyRestrictionProps {
contains: boolean;
@@ -23,7 +24,10 @@ export default class KeyRestrictionRow extends React.Component<IKeyRestrictionPr
parsedValue = parsed;
type = "number";
}
- let scriptText = `${this._contains ? "" : "!"}((doc.${this._key} as ${type})${type === "string" ? ".includes" : "<="}(${parsedValue}))`;
+ let scriptText = `${this._contains ? "" : "!"}(((doc.${this._key} && (doc.${this._key} as ${type})${type === "string" ? ".includes" : "<="}(${parsedValue}))) ||
+ ((doc.data_ext && doc.data_ext.${this._key}) && (doc.data_ext.${this._key} as ${type})${type === "string" ? ".includes" : "<="}(${parsedValue}))))`;
+ // let doc = new Doc();
+ // ((doc.data_ext && doc.data_ext!.text) && (doc.data_ext!.text as string).includes("hello"));
this.props.script(scriptText);
}
else {
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss
index cca199afa..c4311fa52 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.scss
@@ -46,6 +46,7 @@
border-radius: inherit;
box-sizing: border-box;
position: absolute;
+ overflow: hidden;
.marqueeView {
overflow: hidden;
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index c4c3ba084..8cac60edb 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -1,25 +1,35 @@
-import { action, computed, trace } from "mobx";
+import { library } from "@fortawesome/fontawesome-svg-core";
+import { faEye } from "@fortawesome/free-regular-svg-icons";
+import { faCompass, faCompressArrowsAlt, faExpandArrowsAlt, faPaintBrush, faTable, faUpload } from "@fortawesome/free-solid-svg-icons";
+import { action, computed } from "mobx";
import { observer } from "mobx-react";
-import { Doc, DocListCastAsync, HeightSym, WidthSym, DocListCast } from "../../../../new_fields/Doc";
+import { Doc, DocListCastAsync, HeightSym, WidthSym } from "../../../../new_fields/Doc";
import { Id } from "../../../../new_fields/FieldSymbols";
import { InkField, StrokeData } from "../../../../new_fields/InkField";
import { createSchema, makeInterface } from "../../../../new_fields/Schema";
+import { ScriptField } from "../../../../new_fields/ScriptField";
import { BoolCast, Cast, FieldValue, NumCast, StrCast } from "../../../../new_fields/Types";
-import { emptyFunction, returnOne } from "../../../../Utils";
+import { emptyFunction, returnOne, Utils } from "../../../../Utils";
+import { CognitiveServices } from "../../../cognitive_services/CognitiveServices";
+import { DocServer } from "../../../DocServer";
import { DocumentManager } from "../../../util/DocumentManager";
import { DragManager } from "../../../util/DragManager";
import { HistoryUtil } from "../../../util/History";
+import { CompileScript } from "../../../util/Scripting";
import { SelectionManager } from "../../../util/SelectionManager";
import { Transform } from "../../../util/Transform";
import { undoBatch, UndoManager } from "../../../util/UndoManager";
import { COLLECTION_BORDER_WIDTH } from "../../../views/globalCssVariables.scss";
-import { SubmenuProps, ContextMenuProps } from "../../ContextMenuItem";
+import { ContextMenu } from "../../ContextMenu";
+import { ContextMenuProps } from "../../ContextMenuItem";
import { InkingCanvas } from "../../InkingCanvas";
import { CollectionFreeFormDocumentView } from "../../nodes/CollectionFreeFormDocumentView";
import { DocumentContentsView } from "../../nodes/DocumentContentsView";
import { DocumentViewProps, positionSchema } from "../../nodes/DocumentView";
import { pageSchema } from "../../nodes/ImageBox";
+import { OverlayElementOptions, OverlayView } from "../../OverlayView";
import PDFMenu from "../../pdf/PDFMenu";
+import { ScriptBox } from "../../ScriptBox";
import { CollectionSubView } from "../CollectionSubView";
import { CollectionFreeFormLinksView } from "./CollectionFreeFormLinksView";
import { CollectionFreeFormRemoteCursors } from "./CollectionFreeFormRemoteCursors";
@@ -27,20 +37,8 @@ import "./CollectionFreeFormView.scss";
import { MarqueeView } from "./MarqueeView";
import React = require("react");
import v5 = require("uuid/v5");
-import { ScriptField } from "../../../../new_fields/ScriptField";
-import { OverlayView, OverlayElementOptions } from "../../OverlayView";
-import { ScriptBox } from "../../ScriptBox";
-import { CompileScript } from "../../../util/Scripting";
-import { CognitiveServices } from "../../../cognitive_services/CognitiveServices";
-import { library } from "@fortawesome/fontawesome-svg-core";
-import { faEye } from "@fortawesome/free-regular-svg-icons";
-import { faTable, faPaintBrush, faAsterisk, faExpandArrowsAlt, faCompressArrowsAlt, faCompass } from "@fortawesome/free-solid-svg-icons";
-import { undo } from "prosemirror-history";
-import { number } from "prop-types";
-import { ContextMenu } from "../../ContextMenu";
-import { SwatchesPicker } from "react-color";
-library.add(faEye, faTable, faPaintBrush, faExpandArrowsAlt, faCompressArrowsAlt, faCompass);
+library.add(faEye, faTable, faPaintBrush, faExpandArrowsAlt, faCompressArrowsAlt, faCompass, faUpload);
export const panZoomSchema = createSchema({
panX: "number",
@@ -79,12 +77,14 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
}
@computed get contentBounds() {
- let bounds = this.fitToBox && !this.isAnnotationOverlay ? this.ComputeContentBounds(this.elements.filter(e => e.bounds).map(e => e.bounds!)) : undefined;
- return {
+ let bounds = this.fitToBox && !this.isAnnotationOverlay ? this.ComputeContentBounds(this.elements.filter(e => e.bounds && !e.bounds.z).map(e => e.bounds!)) : undefined;
+ let res = {
panX: bounds ? (bounds.x + bounds.r) / 2 : this.Document.panX || 0,
panY: bounds ? (bounds.y + bounds.b) / 2 : this.Document.panY || 0,
scale: (bounds ? Math.min(this.props.PanelHeight() / (bounds.b - bounds.y), this.props.PanelWidth() / (bounds.r - bounds.x)) : this.Document.scale || 1) / this.parentScaling
};
+ if (res.scale === 0) res.scale = 1;
+ return res;
}
@computed get fitToBox() { return this.props.fitToBox || this.props.Document.fitToBox; }
@@ -98,6 +98,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
private centeringShiftX = () => !this.nativeWidth && !this.isAnnotationOverlay ? this._pwidth / 2 / this.parentScaling : 0; // shift so pan position is at center of window for non-overlay collections
private centeringShiftY = () => !this.nativeHeight && !this.isAnnotationOverlay ? this._pheight / 2 / this.parentScaling : 0;// shift so pan position is at center of window for non-overlay collections
private getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-this.borderWidth + 1, -this.borderWidth + 1).translate(-this.centeringShiftX(), -this.centeringShiftY()).transform(this.getLocalTransform());
+ private getTransformOverlay = (): Transform => this.props.ScreenToLocalTransform().translate(-this.borderWidth + 1, -this.borderWidth + 1);
private getContainerTransform = (): Transform => this.props.ScreenToLocalTransform().translate(-this.borderWidth, -this.borderWidth);
private getLocalTransform = (): Transform => Transform.Identity().scale(1 / this.zoomScaling()).translate(this.panX(), this.panY());
private addLiveTextBox = (newBox: Doc) => {
@@ -148,12 +149,15 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
@action
drop = (e: Event, de: DragManager.DropEvent) => {
let xf = this.getTransform();
+ let xfo = this.getTransformOverlay();
+ let [xp, yp] = xf.transformPoint(de.x, de.y);
+ let [xpo, ypo] = xfo.transformPoint(de.x, de.y);
if (super.drop(e, de)) {
if (de.data instanceof DragManager.DocumentDragData) {
if (de.data.droppedDocuments.length) {
- let [xp, yp] = xf.transformPoint(de.x, de.y);
- let x = xp - de.data.xOffset;
- let y = yp - de.data.yOffset;
+ let z = NumCast(de.data.draggedDocuments[0].z);
+ let x = (z ? xpo : xp) - de.data.xOffset;
+ let y = (z ? ypo : yp) - de.data.yOffset;
let dropX = NumCast(de.data.droppedDocuments[0].x);
let dropY = NumCast(de.data.droppedDocuments[0].y);
de.data.droppedDocuments.forEach(d => {
@@ -203,7 +207,6 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
else if (de.data instanceof DragManager.AnnotationDragData) {
if (de.data.dropDocument) {
let dragDoc = de.data.dropDocument;
- let [xp, yp] = this.getTransform().transformPoint(de.x, de.y);
let x = xp - de.data.xOffset;
let y = yp - de.data.yOffset;
let dropX = NumCast(de.data.dropDocument.x);
@@ -270,10 +273,10 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
this._pheight / this.zoomScaling());
let panelwidth = panelDim[0];
let panelheight = panelDim[1];
- // if (ranges[0][0] - dx > (this.panX() + panelwidth / 2)) x = ranges[0][1] + panelwidth / 2;
- // if (ranges[0][1] - dx < (this.panX() - panelwidth / 2)) x = ranges[0][0] - panelwidth / 2;
- // if (ranges[1][0] - dy > (this.panY() + panelheight / 2)) y = ranges[1][1] + panelheight / 2;
- // if (ranges[1][1] - dy < (this.panY() - panelheight / 2)) y = ranges[1][0] - panelheight / 2;
+ if (ranges[0][0] - dx > (this.panX() + panelwidth / 2)) x = ranges[0][1] + panelwidth / 2;
+ if (ranges[0][1] - dx < (this.panX() - panelwidth / 2)) x = ranges[0][0] - panelwidth / 2;
+ if (ranges[1][0] - dy > (this.panY() + panelheight / 2)) y = ranges[1][1] + panelheight / 2;
+ if (ranges[1][1] - dy < (this.panY() - panelheight / 2)) y = ranges[1][0] - panelheight / 2;
}
this.setPan(x - dx, y - dy);
this._lastX = e.pageX;
@@ -339,8 +342,6 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
const newPanY = Math.min((1 - 1 / scale) * this.nativeHeight, Math.max(0, panY));
this.props.Document.panX = this.isAnnotationOverlay ? newPanX : panX;
this.props.Document.panY = this.isAnnotationOverlay && StrCast(this.props.Document.backgroundLayout).indexOf("PDFBox") === -1 ? newPanY : panY;
- // this.props.Document.panX = panX;
- // this.props.Document.panY = panY;
if (this.props.Document.scrollY) {
this.props.Document.scrollY = panY - scale * this.props.Document[HeightSym]();
}
@@ -355,7 +356,11 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
onDragOver = (): void => {
}
- bringToFront = (doc: Doc) => {
+ bringToFront = (doc: Doc, sendToBack?: boolean) => {
+ if (sendToBack) {
+ doc.zIndex = 0;
+ return;
+ }
const docs = this.childDocs;
docs.slice().sort((doc1, doc2) => {
if (doc1 === doc) return 1;
@@ -439,7 +444,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
addDocument: this.props.addDocument,
removeDocument: this.props.removeDocument,
moveDocument: this.props.moveDocument,
- ScreenToLocalTransform: this.getTransform,
+ ScreenToLocalTransform: pair.layout.z ? this.getTransformOverlay : this.getTransform,
renderDepth: this.props.renderDepth + 1,
selectOnLoad: pair.layout[Id] === this._selectOnLoaded,
PanelWidth: pair.layout[WidthSym],
@@ -479,23 +484,25 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
};
}
- getCalculatedPositions(script: ScriptField, params: { doc: Doc, index: number, collection: Doc, docs: Doc[], state: any }): { x?: number, y?: number, width?: number, height?: number, state?: any } {
+ getCalculatedPositions(script: ScriptField, params: { doc: Doc, index: number, collection: Doc, docs: Doc[], state: any }): { x?: number, y?: number, z?: number, width?: number, height?: number, state?: any } {
const result = script.script.run(params);
if (!result.success) {
return {};
}
- return result.result === undefined ? {} : result.result;
+ let doc = params.doc;
+ return result.result === undefined ? { x: Cast(doc.x, "number"), y: Cast(doc.y, "number"), z: Cast(doc.z, "number"), width: Cast(doc.width, "number"), height: Cast(doc.height, "number") } : result.result;
}
- private viewDefToJSX(viewDef: any): { ele: JSX.Element, bounds?: { x: number, y: number, width: number, height: number } } | undefined {
+ private viewDefToJSX(viewDef: any): { ele: JSX.Element, bounds?: { x: number, y: number, z?: number, width: number, height: number } } | undefined {
if (viewDef.type === "text") {
const text = Cast(viewDef.text, "string");
const x = Cast(viewDef.x, "number");
const y = Cast(viewDef.y, "number");
+ const z = Cast(viewDef.z, "number");
const width = Cast(viewDef.width, "number");
const height = Cast(viewDef.height, "number");
const fontSize = Cast(viewDef.fontSize, "number");
- if ([text, x, y, width, height].some(val => val === undefined)) {
+ if ([text, x, y, z, width, height].some(val => val === undefined)) {
return undefined;
}
@@ -503,7 +510,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
ele: <div className="collectionFreeform-customText" style={{
transform: `translate(${x}px, ${y}px)`,
width, height, fontSize
- }}>{text}</div>, bounds: { x: x!, y: y!, width: width!, height: height! }
+ }}>{text}</div>, bounds: { x: x!, y: y!, z: z, width: width!, height: height! }
};
}
}
@@ -515,7 +522,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
const script = this.Document.arrangeScript;
let state: any = undefined;
const docs = this.childDocs;
- let elements: { ele: JSX.Element, bounds?: { x: number, y: number, width: number, height: number } }[] = [];
+ let elements: { ele: JSX.Element, bounds?: { x: number, y: number, z?: number, width: number, height: number } }[] = [];
if (initScript) {
const initResult = initScript.script.run({ docs, collection: this.Document });
if (initResult.success) {
@@ -533,15 +540,17 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
}
let docviews = docs.filter(doc => doc instanceof Doc).reduce((prev, doc) => {
var page = NumCast(doc.page, -1);
- let bounds: { x?: number, y?: number, width?: number, height?: number };
if ((Math.abs(Math.round(page) - Math.round(curPage)) < 3) || page === -1) {
let minim = BoolCast(doc.isMinimized);
if (minim === undefined || !minim) {
- const pos = script ? this.getCalculatedPositions(script, { doc, index: prev.length, collection: this.Document, docs, state }) : {};
+ const pos = script ? this.getCalculatedPositions(script, { doc, index: prev.length, collection: this.Document, docs, state }) :
+ { x: Cast(doc.x, "number"), y: Cast(doc.y, "number"), z: Cast(doc.z, "number"), width: Cast(doc.width, "number"), height: Cast(doc.height, "number") };
state = pos.state === undefined ? state : pos.state;
prev.push({
- ele: <CollectionFreeFormDocumentView key={doc[Id]} x={pos.x} y={pos.y} width={pos.width} height={pos.height} {...this.getChildDocumentViewProps(doc)} />,
- bounds: (pos.x !== undefined && pos.y !== undefined && pos.width !== undefined && pos.height !== undefined) ? { x: pos.x, y: pos.y, width: pos.width, height: pos.height } : undefined
+ ele: <CollectionFreeFormDocumentView key={doc[Id]}
+ x={script ? pos.x : undefined} y={script ? pos.y : undefined}
+ width={script ? pos.width : undefined} height={script ? pos.height : undefined} {...this.getChildDocumentViewProps(doc)} />,
+ bounds: (pos.x !== undefined && pos.y !== undefined && pos.width !== undefined && pos.height !== undefined) ? { x: pos.x, y: pos.y, z: pos.z, width: pos.width, height: pos.height } : undefined
});
}
}
@@ -555,15 +564,20 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
@computed.struct
get views() {
- return this.elements.map(ele => ele.ele);
+ return this.elements.filter(ele => ele.bounds && !ele.bounds.z).map(ele => ele.ele);
+ }
+ @computed.struct
+ get overlayViews() {
+ return this.elements.filter(ele => ele.bounds && ele.bounds.z).map(ele => ele.ele);
}
+
@action
onCursorMove = (e: React.PointerEvent) => {
super.setCursorPosition(this.getTransform().transformPoint(e.clientX, e.clientY));
}
- onContextMenu = () => {
+ onContextMenu = (e: React.MouseEvent) => {
let layoutItems: ContextMenuProps[] = [];
layoutItems.push({
description: `${this.fitToBox ? "Unset" : "Set"} Fit To Container`,
@@ -608,6 +622,35 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
CognitiveServices.Inking.Manager.analyzer(this.fieldExtensionDoc, relevantKeys, data.inkData);
}, icon: "paint-brush"
});
+ ContextMenu.Instance.addItem({
+ description: "Import document", icon: "upload", event: () => {
+ const input = document.createElement("input");
+ input.type = "file";
+ input.accept = ".zip";
+ input.onchange = async _e => {
+ const files = input.files;
+ if (!files) return;
+ const file = files[0];
+ let formData = new FormData();
+ formData.append('file', file);
+ formData.append('remap', "true");
+ const upload = Utils.prepend("/uploadDoc");
+ const response = await fetch(upload, { method: "POST", body: formData });
+ const json = await response.json();
+ if (json === "error") {
+ return;
+ }
+ const doc = await DocServer.GetRefField(json);
+ if (!doc || !(doc instanceof Doc)) {
+ return;
+ }
+ const [x, y] = this.props.ScreenToLocalTransform().transformPoint(e.pageX, e.pageY);
+ doc.x = x, doc.y = y;
+ this.addDocument(doc, false);
+ };
+ input.click();
+ }
+ });
}
@@ -615,6 +658,12 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
<CollectionFreeFormBackgroundView key="backgroundView" {...this.props} {...this.getDocumentViewProps(this.props.Document)} />,
...this.views
]
+ private overlayChildViews = () => {
+ console.log(this.overlayViews.length);
+ return [
+ ...this.overlayViews
+ ];
+ }
public static AddCustomLayout(doc: Doc, dataKey: string): () => void {
return () => {
@@ -663,6 +712,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
<CollectionFreeFormRemoteCursors {...this.props} key="remoteCursors" />
</CollectionFreeFormViewPannableContents>
</MarqueeView>
+ {this.overlayChildViews()}
<CollectionFreeFormOverlayView {...this.props} {...this.getDocumentViewProps(this.props.Document)} />
</div>
);
diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
index 67bed284f..b9ee588dd 100644
--- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
+++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
@@ -135,7 +135,7 @@ export class MarqueeView extends React.Component<MarqueeViewProps>
doc.width = 200;
docList.push(doc);
}
- let newCol = Docs.Create.SchemaDocument([...(groupAttr ? [new SchemaHeaderField("_group")] : []), ...columns.filter(c => c).map(c => new SchemaHeaderField(c))], docList, { x: x, y: y, title: "droppedTable", width: 300, height: 100 });
+ let newCol = Docs.Create.SchemaDocument([...(groupAttr ? [new SchemaHeaderField("_group", "#f1efeb")] : []), ...columns.filter(c => c).map(c => new SchemaHeaderField(c, "#f1efeb"))], docList, { x: x, y: y, title: "droppedTable", width: 300, height: 100 });
this.props.addDocument(newCol, false);
}
@@ -370,15 +370,25 @@ export class MarqueeView extends React.Component<MarqueeViewProps>
let selRect = this.Bounds;
let selection: Doc[] = [];
this.props.activeDocuments().filter(doc => !doc.isBackground).map(doc => {
- var z = NumCast(doc.zoomBasis, 1);
var x = NumCast(doc.x);
var y = NumCast(doc.y);
- var w = NumCast(doc.width) / z;
- var h = NumCast(doc.height) / z;
+ var w = NumCast(doc.width);
+ var h = NumCast(doc.height);
if (this.intersectRect({ left: x, top: y, width: w, height: h }, selRect)) {
selection.push(doc);
}
});
+ if (!selection.length) {
+ this.props.activeDocuments().map(doc => {
+ var x = NumCast(doc.x);
+ var y = NumCast(doc.y);
+ var w = NumCast(doc.width);
+ var h = NumCast(doc.height);
+ if (this.intersectRect({ left: x, top: y, width: w, height: h }, selRect)) {
+ selection.push(doc);
+ }
+ });
+ }
return selection;
}
diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
index 7ffd760e0..3b6c443c2 100644
--- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
+++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
@@ -77,6 +77,7 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF
transformOrigin: "left top",
position: "absolute",
backgroundColor: "transparent",
+ boxShadow: this.props.Document.z ? `#9c9396 ${StrCast(this.props.Document.boxShadow, "10px 10px 0.9vw")}` : undefined,
borderRadius: this.borderRounding(),
transform: this.transform,
transition: hasPosition ? "transform 1s" : StrCast(this.props.Document.transition),
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 2dc2c18a3..c5cf2e23a 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -1,19 +1,24 @@
import { library } from '@fortawesome/fontawesome-svg-core';
import * as fa from '@fortawesome/free-solid-svg-icons';
-import { action, computed, IReactionDisposer, reaction, trace, observable, runInAction } from "mobx";
+import { action, computed, IReactionDisposer, reaction, runInAction } from "mobx";
import { observer } from "mobx-react";
-import { Doc, DocListCast, HeightSym, Opt, WidthSym, DocListCastAsync } from "../../../new_fields/Doc";
+import * as rp from "request-promise";
+import { Doc, DocListCast, DocListCastAsync, HeightSym, Opt, WidthSym } from "../../../new_fields/Doc";
+import { Copy, Id } from '../../../new_fields/FieldSymbols';
import { List } from "../../../new_fields/List";
import { ObjectField } from "../../../new_fields/ObjectField";
-import { createSchema, makeInterface, listSpec } from "../../../new_fields/Schema";
-import { BoolCast, Cast, FieldValue, StrCast, NumCast, PromiseValue } from "../../../new_fields/Types";
+import { createSchema, listSpec, makeInterface } from "../../../new_fields/Schema";
+import { BoolCast, Cast, FieldValue, NumCast, StrCast } from "../../../new_fields/Types";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
-import { emptyFunction, Utils, returnFalse, returnTrue } from "../../../Utils";
+import { RouteStore } from '../../../server/RouteStore';
+import { emptyFunction, returnTrue, Utils } from "../../../Utils";
import { DocServer } from "../../DocServer";
-import { Docs, DocUtils, DocumentType } from "../../documents/Documents";
+import { Docs, DocUtils } from "../../documents/Documents";
+import { ClientUtils } from '../../util/ClientUtils';
+import DictationManager from '../../util/DictationManager';
import { DocumentManager } from "../../util/DocumentManager";
import { DragManager, dropActionType } from "../../util/DragManager";
-import { SearchUtil } from "../../util/SearchUtil";
+import { LinkManager } from '../../util/LinkManager';
import { SelectionManager } from "../../util/SelectionManager";
import { Transform } from "../../util/Transform";
import { undoBatch, UndoManager } from "../../util/UndoManager";
@@ -22,29 +27,22 @@ import { CollectionPDFView } from "../collections/CollectionPDFView";
import { CollectionVideoView } from "../collections/CollectionVideoView";
import { CollectionView } from "../collections/CollectionView";
import { ContextMenu } from "../ContextMenu";
+import { ContextMenuProps } from '../ContextMenuItem';
import { DocComponent } from "../DocComponent";
+import { EditableView } from '../EditableView';
+import { OverlayView } from '../OverlayView';
import { PresentationView } from "../presentationview/PresentationView";
-import { Template, Templates } from "./../Templates";
+import { ScriptingRepl } from '../ScriptingRepl';
+import { Template } from "./../Templates";
import { DocumentContentsView } from "./DocumentContentsView";
-import * as rp from "request-promise";
import "./DocumentView.scss";
-import React = require("react");
-import { Id, Copy } from '../../../new_fields/FieldSymbols';
-import { ContextMenuProps } from '../ContextMenuItem';
-import { list, object, createSimpleSchema } from 'serializr';
-import { LinkManager } from '../../util/LinkManager';
-import { RouteStore } from '../../../server/RouteStore';
import { FormattedTextBox } from './FormattedTextBox';
-import { OverlayView } from '../OverlayView';
-import { ScriptingRepl } from '../ScriptingRepl';
-import { ClientUtils } from '../../util/ClientUtils';
-import { EditableView } from '../EditableView';
-import { faHandPointer, faHandPointRight } from '@fortawesome/free-regular-svg-icons';
-import { DocumentDecorations } from '../DocumentDecorations';
+import React = require("react");
const JsxParser = require('react-jsx-parser').default; //TODO Why does this need to be imported like this?
library.add(fa.faTrash);
library.add(fa.faShare);
+library.add(fa.faDownload);
library.add(fa.faExpandArrowsAlt);
library.add(fa.faCompressArrowsAlt);
library.add(fa.faLayerGroup);
@@ -62,7 +60,7 @@ library.add(fa.faCrosshairs);
library.add(fa.faDesktop);
library.add(fa.faUnlock);
library.add(fa.faLock);
-library.add(fa.faLaptopCode, fa.faMale, fa.faCopy, fa.faHandPointRight, fa.faCompass, fa.faSnowflake);
+library.add(fa.faLaptopCode, fa.faMale, fa.faCopy, fa.faHandPointRight, fa.faCompass, fa.faSnowflake, fa.faMicrophone);
// const linkSchema = createSchema({
// title: "string",
@@ -93,7 +91,7 @@ export interface DocumentViewProps {
selectOnLoad: boolean;
parentActive: () => boolean;
whenActiveChanged: (isActive: boolean) => void;
- bringToFront: (doc: Doc) => void;
+ bringToFront: (doc: Doc, sendToBack?: boolean) => void;
addDocTab: (doc: Doc, dataDoc: Doc | undefined, where: string) => void;
collapseToPoint?: (scrpt: number[], expandedDocs: Doc[] | undefined) => void;
zoomToScale: (scale: number) => void;
@@ -118,6 +116,7 @@ export const positionSchema = createSchema({
height: "number",
x: "number",
y: "number",
+ z: "number",
});
export type PositionDocument = makeInterface<[typeof positionSchema]>;
@@ -526,7 +525,8 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
@undoBatch
@action
makeBackground = (): void => {
- this.props.Document.isBackground = true;
+ this.props.Document.isBackground = !this.props.Document.isBackground;
+ this.props.Document.isBackground && this.props.bringToFront(this.props.Document, true);
}
@undoBatch
@@ -535,6 +535,11 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
this.props.Document.lockedPosition = BoolCast(this.props.Document.lockedPosition) ? undefined : true;
}
+ listen = async () => {
+ let transcript = await DictationManager.Instance.listen();
+ transcript && (Doc.GetProto(this.props.Document).transcript = transcript);
+ }
+
@action
onContextMenu = async (e: React.MouseEvent): Promise<void> => {
e.persist();
@@ -558,8 +563,9 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
cm.addItem({ description: BoolCast(this.props.Document.ignoreAspect, false) || !this.props.Document.nativeWidth || !this.props.Document.nativeHeight ? "Freeze" : "Unfreeze", event: this.freezeNativeDimensions, icon: "snowflake" });
cm.addItem({ description: "Pin to Presentation", event: () => PresentationView.Instance.PinDoc(this.props.Document), icon: "map-pin" });
cm.addItem({ description: BoolCast(this.props.Document.lockedPosition) ? "Unlock Position" : "Lock Position", event: this.toggleLockPosition, icon: BoolCast(this.props.Document.lockedPosition) ? "unlock" : "lock" });
+ cm.addItem({ description: "Transcribe Speech", event: this.listen, icon: "microphone" });
let makes: ContextMenuProps[] = [];
- makes.push({ description: "Make Background", event: this.makeBackground, icon: BoolCast(this.props.Document.lockedPosition) ? "unlock" : "lock" });
+ makes.push({ description: this.props.Document.isBackground ? "Remove Background" : "Make Background", event: this.makeBackground, icon: BoolCast(this.props.Document.lockedPosition) ? "unlock" : "lock" });
makes.push({ description: this.props.Document.isButton ? "Remove Button" : "Make Button", event: this.makeBtnClicked, icon: "concierge-bell" });
makes.push({
description: "Make Portal", event: () => {
@@ -576,12 +582,6 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
}, icon: "window-restore"
});
cm.addItem({ description: "Make...", subitems: makes, icon: "hand-point-right" });
- // cm.addItem({
- // description: "Find aliases", event: async () => {
- // const aliases = await SearchUtil.GetAliasesOfDocument(this.props.Document);
- // this.props.addDocTab && this.props.addDocTab(Docs.Create.SchemaDocument(["title"], aliases, {}), undefined, "onRight"); // bcz: dataDoc?
- // }, icon: "search"
- // });
if (this.props.Document.detailedLayout && !this.props.Document.isTemplate) {
cm.addItem({ description: "Toggle detail", event: () => Doc.ToggleDetailLayout(this.props.Document), icon: "image" });
}
@@ -597,6 +597,15 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
copies.push({ description: "Copy ID", event: () => Utils.CopyText(this.props.Document[Id]), icon: "fingerprint" });
cm.addItem({ description: "Copy...", subitems: copies, icon: "copy" });
}
+ cm.addItem({
+ description: "Download document", icon: "download", event: () => {
+ const a = document.createElement("a");
+ const url = Utils.prepend(`/downloadId/${this.props.Document[Id]}`);
+ a.href = url;
+ a.download = `DocExport-${this.props.Document[Id]}.zip`;
+ a.click();
+ }
+ });
cm.addItem({ description: "Delete", event: this.deleteClicked, icon: "trash" });
type User = { email: string, userDocumentId: string };
let usersMenu: ContextMenuProps[] = [];
@@ -690,7 +699,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
<div className={`documentView-node${this.topMost ? "-topmost" : ""}`}
ref={this._mainCont}
style={{
- pointerEvents: this.layoutDoc.isBackground ? "none" : "all",
+ pointerEvents: this.layoutDoc.isBackground && !this.isSelected() ? "none" : "all",
color: foregroundColor,
outlineColor: "maroon",
outlineStyle: "dashed",
diff --git a/src/client/views/nodes/FormattedTextBox.scss b/src/client/views/nodes/FormattedTextBox.scss
index a24abb32e..247f7d1ea 100644
--- a/src/client/views/nodes/FormattedTextBox.scss
+++ b/src/client/views/nodes/FormattedTextBox.scss
@@ -43,7 +43,7 @@
.formattedTextBox-inner-rounded div,
.formattedTextBox-inner div {
- padding: 10px;
+ padding: 10px 10px;
}
.menuicon {
diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx
index fc0cc98aa..e076efe18 100644
--- a/src/client/views/nodes/FormattedTextBox.tsx
+++ b/src/client/views/nodes/FormattedTextBox.tsx
@@ -1,10 +1,11 @@
import { library } from '@fortawesome/fontawesome-svg-core';
import { faEdit, faSmile, faTextHeight } from '@fortawesome/free-solid-svg-icons';
-import { action, IReactionDisposer, observable, reaction, runInAction, computed, trace } from "mobx";
+import { action, IReactionDisposer, observable, reaction, runInAction, computed, Lambda, trace } from "mobx";
import { observer } from "mobx-react";
import { baseKeymap } from "prosemirror-commands";
import { history } from "prosemirror-history";
import { keymap } from "prosemirror-keymap";
+import { Node as ProsNode } from "prosemirror-model";
import { EditorState, Plugin, Transaction, Selection } from "prosemirror-state";
import { NodeType, Slice, Node, Fragment } from 'prosemirror-model';
import { EditorView } from "prosemirror-view";
@@ -33,6 +34,7 @@ import { Templates } from '../Templates';
import { FieldView, FieldViewProps } from "./FieldView";
import "./FormattedTextBox.scss";
import React = require("react");
+import { For } from 'babel-types';
import { DateField } from '../../../new_fields/DateField';
import { Utils } from '../../../Utils';
import { MainOverlayTextBox } from '../MainOverlayTextBox';
@@ -49,6 +51,7 @@ export interface FormattedTextBoxProps {
height?: string;
color?: string;
outer_div?: (domminus: HTMLElement) => void;
+ firstinstance?: boolean;
}
const richTextSchema = createSchema({
@@ -63,14 +66,16 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
public static LayoutString(fieldStr: string = "data") {
return FieldView.LayoutString(FormattedTextBox, fieldStr);
}
+ public static Instance: FormattedTextBox;
private _ref: React.RefObject<HTMLDivElement>;
private _outerdiv?: (dominus: HTMLElement) => void;
private _proseRef?: HTMLDivElement;
private _editorView: Opt<EditorView>;
- private _toolTipTextMenu: TooltipTextMenu | undefined = undefined;
+ private static _toolTipTextMenu: TooltipTextMenu | undefined = undefined;
private _applyingChange: boolean = false;
private _linkClicked = "";
private _reactionDisposer: Opt<IReactionDisposer>;
+ private _searchReactionDisposer?: Lambda;
private _textReactionDisposer: Opt<IReactionDisposer>;
private _proxyReactionDisposer: Opt<IReactionDisposer>;
private dropDisposer?: DragManager.DragDropDisposer;
@@ -100,6 +105,10 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
return "";
}
+ public static getToolTip() {
+ return this._toolTipTextMenu;
+ }
+
@undoBatch
public setFontColor(color: string) {
let self = this;
@@ -115,6 +124,9 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
constructor(props: FieldViewProps) {
super(props);
+ //if (this.props.firstinstance) {
+ FormattedTextBox.Instance = this;
+ //}
if (this.props.outer_div) {
this._outerdiv = this.props.outer_div;
}
@@ -129,7 +141,8 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
@computed get extensionDoc() { return Doc.resolvedFieldDataDoc(this.dataDoc, this.props.fieldKey, "dummy"); }
- @computed get dataDoc() { return BoolCast(this.props.Document.isTemplate) && this.props.DataDoc ? this.props.DataDoc : Doc.GetProto(this.props.Document); }
+ @computed get dataDoc() { return this.props.DataDoc && (BoolCast(this.props.Document.isTemplate) || BoolCast(this.props.DataDoc.isTemplate) || this.props.DataDoc.layout === this.props.Document) ? this.props.DataDoc : Doc.GetProto(this.props.Document); }
+
paste = (e: ClipboardEvent) => {
if (e.clipboardData && this._editorView) {
@@ -145,7 +158,7 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
// tx.setSelection(new Selection(tx.))
const state = this._editorView!.state;
this._editorView!.dispatch(tx);
- if (this._toolTipTextMenu) {
+ if (FormattedTextBox._toolTipTextMenu) {
// this._toolTipTextMenu.makeLinkWithState(state)
}
e.stopPropagation();
@@ -161,7 +174,20 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
if (this._editorView) {
const state = this._editorView.state.apply(tx);
this._editorView.updateState(state);
+ if (state.selection.empty && FormattedTextBox._toolTipTextMenu) {
+ const marks = tx.storedMarks;
+ if (marks) { FormattedTextBox._toolTipTextMenu.mark_key_pressed(marks); }
+ }
this._applyingChange = true;
+ const fieldkey = "preview";
+ if (Object.keys(this.dataDoc).indexOf(fieldkey) !== -1) {
+ this.dataDoc[this.props.fieldKey] = new RichTextField(JSON.stringify(state.toJSON()));
+ this.dataDoc[this.props.fieldKey + "_text"] = state.doc.textBetween(0, state.doc.content.size, "\n\n");
+ }
+ else {
+ Doc.GetProto(this.dataDoc)[this.props.fieldKey] = new RichTextField(JSON.stringify(state.toJSON()));
+ Doc.GetProto(this.dataDoc)[this.props.fieldKey + "_text"] = state.doc.textBetween(0, state.doc.content.size, "\n\n");
+ }
if (this.extensionDoc) this.extensionDoc.text = state.doc.textBetween(0, state.doc.content.size, "\n\n");
if (this.extensionDoc) this.extensionDoc.lastModified = new DateField(new Date(Date.now()));
this.dataDoc[this.props.fieldKey] = new RichTextField(JSON.stringify(state.toJSON()));
@@ -175,6 +201,50 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
}
}
+ public highlightSearchTerms = (terms: String[]) => {
+ if (this._editorView && (this._editorView as any).docView) {
+ const fieldkey = "preview";
+ const doc = this._editorView.state.doc;
+ const mark = this._editorView.state.schema.mark(this._editorView.state.schema.marks.search_highlight);
+ doc.nodesBetween(0, doc.content.size, (node: ProsNode, pos: number, parent: ProsNode, index: number) => {
+ if (node.isLeaf && node.isText && node.text) {
+ let nodeText: String = node.text;
+ let tokens = nodeText.split(" ");
+ let start = pos;
+ tokens.forEach((word) => {
+ if (terms.includes(word) && this._editorView) {
+ this._editorView.dispatch(this._editorView.state.tr.addMark(start, start + word.length, mark).removeStoredMark(mark));
+ // else {
+ // this._editorView.state.tr.addMark(start, start + word.length, mark).removeStoredMark(mark);
+ // }
+ }
+ start += word.length + 1;
+ });
+ }
+ });
+ }
+ }
+
+ public unhighlightSearchTerms = () => {
+ if (this._editorView && (this._editorView as any).docView) {
+ const doc = this._editorView.state.doc;
+ const mark = this._editorView.state.schema.mark(this._editorView.state.schema.marks.search_highlight);
+ doc.nodesBetween(0, doc.content.size, (node: ProsNode, pos: number, parent: ProsNode, index: number) => {
+ if (node.isLeaf && node.isText && node.text) {
+ if (node.marks.includes(mark) && this._editorView) {
+ this._editorView.dispatch(this._editorView.state.tr.removeMark(pos, pos + node.nodeSize, mark));
+ }
+ }
+ });
+ // const fieldkey = 'search_string';
+ // if (Object.keys(this.props.Document).indexOf(fieldkey) !== -1) {
+ // this.props.Document[fieldkey] = undefined;
+ // }
+ // else this.props.Document.proto![fieldkey] = undefined;
+ // }
+ }
+ }
+
protected createDropTarget = (ele: HTMLDivElement) => {
this._proseRef = ele;
if (this.dropDisposer) {
@@ -277,6 +347,22 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
}
}, { fireImmediately: true });
this.setupEditor(config, this.dataDoc, this.props.fieldKey);
+
+ this._searchReactionDisposer = reaction(() => {
+ return StrCast(this.props.Document.search_string);
+ }, searchString => {
+ const fieldkey = 'preview';
+ let preview = false;
+ // if (!this._editorView && Object.keys(this.props.Document).indexOf(fieldkey) !== -1) {
+ // preview = true;
+ // }
+ if (searchString) {
+ this.highlightSearchTerms([searchString]);
+ }
+ else {
+ this.unhighlightSearchTerms();
+ }
+ }, { fireImmediately: true });
}
clipboardTextSerializer = (slice: Slice): string => {
@@ -411,7 +497,7 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
onPointerDown = (e: React.PointerEvent): void => {
if (e.button === 0 && this.props.isSelected() && !e.altKey && !e.ctrlKey && !e.metaKey) {
e.stopPropagation();
- if (this._toolTipTextMenu && this._toolTipTextMenu.tooltip) {
+ if (FormattedTextBox._toolTipTextMenu && FormattedTextBox._toolTipTextMenu.tooltip) {
//this._toolTipTextMenu.tooltip.style.opacity = "0";
}
}
@@ -467,7 +553,7 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
}
}
onPointerUp = (e: React.PointerEvent): void => {
- if (this._toolTipTextMenu && this._toolTipTextMenu.tooltip) {
+ if (FormattedTextBox._toolTipTextMenu && FormattedTextBox._toolTipTextMenu.tooltip) {
//this._toolTipTextMenu.tooltip.style.opacity = "1";
}
if (e.buttons === 1 && this.props.isSelected() && !e.altKey) {
@@ -508,7 +594,7 @@ export class FormattedTextBox extends DocComponent<(FieldViewProps & FormattedTe
tooltipTextMenuPlugin() {
let myprops = this.props;
- let self = this;
+ let self = FormattedTextBox;
return new Plugin({
view(_editorView) {
return self._toolTipTextMenu = new TooltipTextMenu(_editorView, myprops);
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index dbe545048..9a0615d68 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -68,7 +68,7 @@ export class ImageBox extends DocComponent<FieldViewProps, ImageDocument>(ImageD
private dropDisposer?: DragManager.DragDropDisposer;
- @computed get dataDoc() { return BoolCast(this.props.Document.isTemplate) && this.props.DataDoc ? this.props.DataDoc : this.props.Document; }
+ @computed get dataDoc() { return this.props.DataDoc && (BoolCast(this.props.Document.isTemplate) || BoolCast(this.props.DataDoc.isTemplate) || this.props.DataDoc.layout === this.props.Document) ? this.props.DataDoc : this.props.Document; }
protected createDropTarget = (ele: HTMLDivElement) => {
@@ -93,17 +93,7 @@ export class ImageBox extends DocComponent<FieldViewProps, ImageDocument>(ImageD
if (de.data instanceof DragManager.DocumentDragData) {
de.data.droppedDocuments.forEach(action((drop: Doc) => {
if (de.mods === "CtrlKey") {
- let temp = Doc.MakeDelegate(drop);
- this.props.Document.nativeWidth = Doc.GetProto(this.props.Document).nativeWidth = undefined;
- this.props.Document.nativeHeight = Doc.GetProto(this.props.Document).nativeHeight = undefined;
- this.props.Document.width = drop.width;
- this.props.Document.height = drop.height;
- Doc.GetProto(this.props.Document).type = DocumentType.TEMPLATE;
- if (this.props.DataDoc && this.props.DataDoc.layout === this.props.Document) {
- this.props.DataDoc.layout = temp;
- } else {
- this.props.Document.layout = temp;
- }
+ Doc.ApplyTemplateTo(drop, this.props.Document, this.props.DataDoc);
e.stopPropagation();
} else if (de.mods === "AltKey" && /*this.dataDoc !== this.props.Document &&*/ drop.data instanceof ImageField) {
Doc.GetProto(this.dataDoc)[this.props.fieldKey] = new ImageField(drop.data.url);
diff --git a/src/client/views/nodes/LinkEditor.tsx b/src/client/views/nodes/LinkEditor.tsx
index 0ea948c81..ecb3e9db4 100644
--- a/src/client/views/nodes/LinkEditor.tsx
+++ b/src/client/views/nodes/LinkEditor.tsx
@@ -290,7 +290,7 @@ export class LinkGroupEditor extends React.Component<LinkGroupEditorProps> {
let keys = LinkManager.Instance.getMetadataKeysInGroup(groupType);
let index = keys.indexOf("");
if (index > -1) keys.splice(index, 1);
- let cols = ["anchor1", "anchor2", ...[...keys]].map(c => new SchemaHeaderField(c));
+ let cols = ["anchor1", "anchor2", ...[...keys]].map(c => new SchemaHeaderField(c, "#f1efeb"));
let docs: Doc[] = LinkManager.Instance.getAllMetadataDocsInGroup(groupType);
let createTable = action(() => Docs.Create.SchemaDocument(cols, docs, { width: 500, height: 300, title: groupType + " table" }));
let ref = React.createRef<HTMLDivElement>();
diff --git a/src/client/views/nodes/LinkMenuGroup.tsx b/src/client/views/nodes/LinkMenuGroup.tsx
index 0cb216aa6..e04044266 100644
--- a/src/client/views/nodes/LinkMenuGroup.tsx
+++ b/src/client/views/nodes/LinkMenuGroup.tsx
@@ -72,7 +72,7 @@ export class LinkMenuGroup extends React.Component<LinkMenuGroupProps> {
let keys = LinkManager.Instance.getMetadataKeysInGroup(groupType);
let index = keys.indexOf("");
if (index > -1) keys.splice(index, 1);
- let cols = ["anchor1", "anchor2", ...[...keys]].map(c => new SchemaHeaderField(c));
+ let cols = ["anchor1", "anchor2", ...[...keys]].map(c => new SchemaHeaderField(c, "#f1efeb"));
let docs: Doc[] = LinkManager.Instance.getAllMetadataDocsInGroup(groupType);
let createTable = action(() => Docs.Create.SchemaDocument(cols, docs, { width: 500, height: 300, title: groupType + " table" }));
let ref = React.createRef<HTMLDivElement>();
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index 1f8636826..704030d85 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -23,6 +23,7 @@ import { faVideo } from "@fortawesome/free-solid-svg-icons";
import { CompileScript } from "../../util/Scripting";
import { Doc } from "../../../new_fields/Doc";
import { ScriptField } from "../../../new_fields/ScriptField";
+var path = require('path');
type VideoDocument = makeInterface<[typeof positionSchema, typeof pageSchema]>;
const VideoDocument = makeInterface(positionSchema, pageSchema);
@@ -89,6 +90,13 @@ export class VideoBox extends DocComponent<FieldViewProps, VideoDocument>(VideoD
this._youtubePlayer && this.props.addDocTab(this.props.Document, this.props.DataDoc, "inTab");
}
+ choosePath(url: string) {
+ if (url.indexOf(window.location.origin) === -1) {
+ return Utils.CorsProxy(url);
+ }
+ return url;
+ }
+
@action public Snapshot() {
let width = NumCast(this.props.Document.width);
let height = NumCast(this.props.Document.height);
@@ -127,7 +135,7 @@ export class VideoBox extends DocComponent<FieldViewProps, VideoDocument>(VideoD
let filename = encodeURIComponent("snapshot" + this.props.Document.title + "_" + this.props.Document.curPage).replace(/\./g, "");
VideoBox.convertDataUri(dataUrl, filename).then(returnedFilename => {
if (returnedFilename) {
- let url = Utils.prepend(returnedFilename);
+ let url = this.choosePath(Utils.prepend(returnedFilename));
let imageSummary = Docs.Create.ImageDocument(url, {
x: NumCast(this.props.Document.x) + width, y: NumCast(this.props.Document.y),
width: 150, height: height / width * 150, title: "--snapshot" + NumCast(this.props.Document.curPage) + " image-"
diff --git a/src/client/views/presentationview/PresentationView.scss b/src/client/views/presentationview/PresentationView.scss
index 97cbd4a24..65b09c833 100644
--- a/src/client/views/presentationview/PresentationView.scss
+++ b/src/client/views/presentationview/PresentationView.scss
@@ -6,6 +6,8 @@
right: 0;
top: 0;
bottom: 0;
+ letter-spacing: 2px;
+
}
.presentationView-item {
@@ -19,13 +21,11 @@
-ms-user-select: none;
user-select: none;
transition: all .1s;
- //max-height: 250px;
.documentView-node {
- // height: auto !important;
- // width: aut !important;
+
position: absolute;
z-index: 1;
}
@@ -52,10 +52,11 @@
.presentationView-selected {
background: gray;
+ color: black;
}
.presentationView-heading {
- background: lightseagreen;
+ background: gray;
padding: 10px;
display: inline-block;
width: 100%;
@@ -67,6 +68,8 @@
font-size: 25px;
display: inline-block;
width: calc(100% - 200px);
+ letter-spacing: 2px;
+
}
.presentation-icon {
diff --git a/src/client/views/presentationview/PresentationView.tsx b/src/client/views/presentationview/PresentationView.tsx
index 4fe9d3a1b..bea70f00b 100644
--- a/src/client/views/presentationview/PresentationView.tsx
+++ b/src/client/views/presentationview/PresentationView.tsx
@@ -375,7 +375,7 @@ export class PresentationView extends React.Component<PresViewProps> {
//awaiting jump so that new scale can be found, since jumping is async
await DocumentManager.Instance.jumpToDocument(curDoc, true);
} else {
- await DocumentManager.Instance.jumpToDocument(curDoc, false, undefined, doc => CollectionDockingView.Instance.AddTab(undefined, doc, undefined));
+ await DocumentManager.Instance.jumpToDocument(curDoc, true, undefined, doc => CollectionDockingView.Instance.AddTab(undefined, doc, undefined));
}
let newScale = DocumentManager.Instance.getScaleOfDocView(curDoc);
@@ -881,24 +881,15 @@ export class PresentationView extends React.Component<PresViewProps> {
if (presWidth - presMinWidth !== 0) {
this.curPresentation.width = 0;
}
+ if (presWidth === 0) {
+ this.curPresentation.width = presMinWidth;
+ }
}
document.removeEventListener("pointermove", this.onPointerMove);
document.removeEventListener("pointerup", this.onPointerUp);
}
/**
- * This function gets triggered on click of the dragger. It opens up the
- * presentation view, if it was closed beforehand.
- */
- togglePresView = (e: React.MouseEvent) => {
- e.stopPropagation();
- e.preventDefault();
- let width = NumCast(this.curPresentation.width);
- if (width === 0) {
- this.curPresentation.width = presMinWidth;
- }
- }
- /**
* This function is a setter that opens up the
* presentation mode, by setting it's render flag
* to true. It also closes the presentation view.
@@ -992,7 +983,7 @@ export class PresentationView extends React.Component<PresViewProps> {
</div>
<div className="mainView-libraryHandle"
style={{ cursor: "ew-resize", right: `${width - 10}px`, backgroundColor: "white", opacity: this.opacity, transition: "0.7s opacity ease" }}
- onPointerDown={this.onPointerDown} onClick={this.togglePresView}>
+ onPointerDown={this.onPointerDown}>
<span title="library View Dragger" style={{ width: "100%", height: "100%", position: "absolute" }} />
</div>
{this.renderPresMode()}
diff --git a/src/client/views/search/CheckBox.scss b/src/client/views/search/CheckBox.scss
index af59d5fbf..cc858bec6 100644
--- a/src/client/views/search/CheckBox.scss
+++ b/src/client/views/search/CheckBox.scss
@@ -13,9 +13,9 @@
margin-top: 0px;
.check-container:hover~.check-box {
- background-color: $intermediate-color;
+ background-color: $darker-alt-accent;
}
-
+
.check-container {
width: 40px;
height: 40px;
@@ -27,7 +27,8 @@
position: absolute;
fill-opacity: 0;
stroke-width: 4px;
- stroke: white;
+ // stroke: white;
+ stroke: gray;
}
}
@@ -55,5 +56,4 @@
margin-left: 15px;
}
-}
-
+} \ No newline at end of file
diff --git a/src/client/views/search/FieldFilters.scss b/src/client/views/search/FieldFilters.scss
index ba0926140..e1d0d8df5 100644
--- a/src/client/views/search/FieldFilters.scss
+++ b/src/client/views/search/FieldFilters.scss
@@ -1,5 +1,12 @@
.field-filters {
width: 100%;
display: grid;
- grid-template-columns: 18% 20% 60%;
+ // grid-template-columns: 18% 20% 60%;
+ grid-template-columns: 20% 25% 60%;
+}
+
+.field-filters-required {
+ width: 100%;
+ display: grid;
+ grid-template-columns: 50% 50%;
} \ No newline at end of file
diff --git a/src/client/views/search/FilterBox.scss b/src/client/views/search/FilterBox.scss
index 1eb8963d7..ebb39460d 100644
--- a/src/client/views/search/FilterBox.scss
+++ b/src/client/views/search/FilterBox.scss
@@ -3,22 +3,25 @@
.filter-form {
padding: 25px;
- width: 600px;
- background: $dark-color;
+ width: 440px;
+ background: whitesmoke;
position: relative;
right: 1px;
- color: $light-color;
+ color: grey;
flex-direction: column;
display: inline-block;
transform-origin: top;
overflow: auto;
+ border-radius: 15px;
+ box-shadow: $intermediate-color 0.2vw 0.2vw 0.4vw;
+ border: solid #BBBBBBBB 1px;
.top-filter-header {
#header {
text-transform: uppercase;
letter-spacing: 2px;
- font-size: 25;
+ font-size: 13;
width: 80%;
}
@@ -26,13 +29,13 @@
width: 20%;
opacity: .6;
position: relative;
- display: inline-block;
+ display: block;
.line {
display: block;
background: $alt-accent;
- width: $width-line;
- height: $height-line;
+ width: 20;
+ height: 3;
position: absolute;
right: 0;
border-radius: ($height-line / 2);
@@ -69,9 +72,10 @@
display: flex;
align-items: center;
margin-bottom: 10px;
+ letter-spacing: 2px;
.filter-title {
- font-size: 18;
+ font-size: 13;
text-transform: uppercase;
margin-top: 10px;
margin-bottom: 10px;
@@ -96,6 +100,7 @@
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
+ text-align: center;
}
}
}
@@ -105,4 +110,72 @@
border-top-style: solid;
padding-top: 10px;
}
+}
+
+.active-filters {
+ display: flex;
+ flex-direction: row-reverse;
+ justify-content: flex-end;
+ width: 100%;
+ margin-right: 30px;
+ position: relative;
+
+ .active-icon {
+ max-width: 40px;
+ flex: initial;
+
+ &.icon{
+ width: 40px;
+ text-align: center;
+ margin-bottom: 5px;
+ position: absolute;
+ }
+
+ &.container {
+ display: flex;
+ flex-direction: column;
+ width: 40px;
+ }
+
+ &.description {
+ text-align: center;
+ top: 40px;
+ position: absolute;
+ width: 40px;
+ font-size: 9px;
+ opacity: 0;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+ }
+
+ &.icon:hover + .description {
+ opacity: 1;
+ }
+ }
+
+ .col-icon {
+ height: 35px;
+ margin-left: 5px;
+ width: 35px;
+ background-color: black;
+ color: white;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .save-filter,
+ .reset-filter,
+ .all-filter {
+ background-color: gray;
+ }
+
+ .save-filter:hover,
+ .reset-filter:hover,
+ .all-filter:hover {
+ background-color: $darker-alt-accent;
+ }
+ }
} \ No newline at end of file
diff --git a/src/client/views/search/FilterBox.tsx b/src/client/views/search/FilterBox.tsx
index 706d1eb7f..995ddd5c3 100644
--- a/src/client/views/search/FilterBox.tsx
+++ b/src/client/views/search/FilterBox.tsx
@@ -2,25 +2,26 @@ import * as React from 'react';
import { observer } from 'mobx-react';
import { observable, action } from 'mobx';
import "./SearchBox.scss";
-import { faTimes } from '@fortawesome/free-solid-svg-icons';
+import { faTimes, faCheckCircle, faObjectGroup } from '@fortawesome/free-solid-svg-icons';
import { library } from '@fortawesome/fontawesome-svg-core';
import { Doc } from '../../../new_fields/Doc';
import { Id } from '../../../new_fields/FieldSymbols';
import { DocumentType } from '../../documents/Documents';
import { Cast, StrCast } from '../../../new_fields/Types';
import * as _ from "lodash";
-import { ToggleBar } from './ToggleBar';
import { IconBar } from './IconBar';
import { FieldFilters } from './FieldFilters';
import { SelectionManager } from '../../util/SelectionManager';
import { DocumentView } from '../nodes/DocumentView';
import { CollectionFilters } from './CollectionFilters';
-import { NaviconButton } from './NaviconButton';
import * as $ from 'jquery';
import "./FilterBox.scss";
import { SearchBox } from './SearchBox';
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
library.add(faTimes);
+library.add(faCheckCircle);
+library.add(faObjectGroup);
export enum Keys {
TITLE = "title",
@@ -35,11 +36,18 @@ export class FilterBox extends React.Component {
public _allIcons: string[] = [DocumentType.AUDIO, DocumentType.COL, DocumentType.HIST, DocumentType.IMG, DocumentType.LINK, DocumentType.PDF, DocumentType.TEXT, DocumentType.VID, DocumentType.WEB];
//if true, any keywords can be used. if false, all keywords are required.
+ //this also serves as an indicator if the word status filter is applied
@observable private _basicWordStatus: boolean = true;
@observable private _filterOpen: boolean = false;
+ //if icons = all icons, then no icon filter is applied
@observable private _icons: string[] = this._allIcons;
+ //if all of these are true, no key filter is applied
+ @observable private _anyKeywordStatus: boolean = true;
+ @observable private _allKeywordStatus: boolean = true;
@observable private _titleFieldStatus: boolean = true;
@observable private _authorFieldStatus: boolean = true;
+ @observable private _dataFieldStatus: boolean = true;
+ //this also serves as an indicator if the collection status filter is applied
@observable public _deletedDocsStatus: boolean = false;
@observable private _collectionStatus = false;
@observable private _collectionSelfStatus = true;
@@ -114,10 +122,9 @@ export class FilterBox extends React.Component {
@action.bound
resetFilters = () => {
- ToggleBar.Instance.resetToggle();
+ this._basicWordStatus = true;
IconBar.Instance.selectAll();
FieldFilters.Instance.resetFieldFilters();
- CollectionFilters.Instance.resetCollectionFilters();
}
basicRequireWords(query: string): string {
@@ -259,6 +266,40 @@ export class FilterBox extends React.Component {
return finalDocs;
}
+ getABCicon() {
+ return (
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.8 87.8" height="35">
+ <path d="M25.4 47.9c-1.3 1.3-1.9 2.8-1.9 4.8 0 3.8 2.3 6.1 6.1 6.1 5.1 0 8-3.3 9-6.2 0.2-0.7 0.4-1.4 0.4-2.1v-6.1c-0.1 0-0.1 0-0.2 0C32.2 44.5 27.7 45.6 25.4 47.9z" />
+ <path d="M64.5 28.6c-2.2 0-4.1 1.5-4.7 3.8l0 0.2c-0.1 0.3-0.1 0.7-0.1 1.1v3.3c0 0.4 0.1 0.8 0.2 1.1 0.6 2.2 2.4 3.6 4.6 3.6 3.2 0 5.2-2.6 5.2-6.7C69.5 31.8 68 28.6 64.5 28.6z" />
+ <path d="M43.9 0C19.7 0 0 19.7 0 43.9s19.7 43.9 43.9 43.9 43.9-19.6 43.9-43.9S68.1 0 43.9 0zM40.1 65.5l-0.5-4c-3 3.1-7.4 4.9-12.1 4.9 -6.8 0-13.6-4.4-13.6-12.8 0-4 1.3-7.4 4-10 4.1-4.1 11.1-6.2 20.8-6.3 0-5.5-2.9-8.4-8.3-8.4 -3.6 0-7.4 1.1-10.2 2.9l-1.1 0.7 -2.4-6.9 0.7-0.4c3.7-2.4 8.9-3.8 14.1-3.8 10.9 0 16.7 6.2 16.7 17.9V54.6c0 4.1 0.2 7.2 0.7 9.7L49 65.5H40.1zM65.5 67.5c1.8 0 3-0.5 4-0.9l0.5-0.2 0.8 3.4 -0.3 0.2c-1 0.5-3 1.1-5.5 1.1 -5.8 0-9.7-4-9.7-9.9 0-6.1 4.3-10.3 10.4-10.3 2.1 0 4 0.5 4.9 1l0.3 0.2 -1 3.5 -0.5-0.3c-0.7-0.4-1.8-0.8-3.7-0.8 -3.7 0-6.1 2.6-6.1 6.6C59.5 64.8 61.9 67.5 65.5 67.5zM65 45.3c-2.5 0-4.5-0.9-5.9-2.7l-0.1 2.3h-3.8l0-0.5c0.1-1.2 0.2-3.1 0.2-4.8V16.7h4.3v10.8c1.4-1.6 3.5-2.5 6-2.5 2.2 0 4.1 0.8 5.5 2.3 1.8 1.8 2.8 4.5 2.8 7.7C73.8 42.1 69.3 45.3 65 45.3z" />
+ </svg>
+ );
+ }
+
+ getTypeIcon() {
+ return (
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.8 87.8" height="35">
+ <path d="M43.9 0C19.7 0 0 19.7 0 43.9s19.7 43.9 43.9 43.9 43.9-19.6 43.9-43.9S68.1 0 43.9 0zM43.9 12.2c4.1 0 7.5 3.4 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5 -4.1 0-7.5-3.4-7.5-7.5C36.4 15.5 39.7 12.2 43.9 12.2zM11.9 50.4l7.5-13 7.5 13H11.9zM47.6 75.7h-7.5l-3.7-6.5 3.8-6.5h7.5l3.8 6.5L47.6 75.7zM70.7 70.7c-0.2 0.2-0.4 0.3-0.7 0.3s-0.5-0.1-0.7-0.3l-25.4-25.4 -25.4 25.4c-0.2 0.2-0.4 0.3-0.7 0.3s-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1 0-1.4l25.4-25.4 -25.4-25.4c-0.4-0.4-0.4-1 0-1.4s1-0.4 1.4 0l25.4 25.4 25.4-25.4c0.4-0.4 1-0.4 1.4 0s0.4 1 0 1.4l-25.4 25.4 25.4 25.4C71.1 69.7 71.1 70.3 70.7 70.7zM61.4 51.4v-15h15v15H61.4z" />
+ </svg>
+ );
+ }
+
+ getKeyIcon() {
+ return (
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.8 87.8" height="35">
+ <path d="M38.5 32.4c0 3.4-2.7 6.1-6.1 6.1 -3.4 0-6.1-2.7-6.1-6.1 0-3.4 2.8-6.1 6.1-6.1C35.8 26.3 38.5 29 38.5 32.4zM87.8 43.9c0 24.2-19.6 43.9-43.9 43.9S0 68.1 0 43.9C0 19.7 19.7 0 43.9 0S87.8 19.7 87.8 43.9zM66.8 60.3L50.2 43.7c-0.5-0.5-0.6-1.2-0.4-1.8 2.4-5.6 1.1-12.1-3.2-16.5 -5.9-5.8-15.4-5.8-21.2 0l0 0c-4.3 4.3-5.6 10.8-3.2 16.5 3.2 7.6 12 11.2 19.7 8 0.6-0.3 1.4-0.1 1.8 0.4l3.1 3.1h3.9c1.2 0 2.2 1 2.2 2.2v3.6h3.6c1.2 0 2.2 1 2.2 2.2v4l1.6 1.6h6.5V60.3z" />
+ </svg>
+ );
+ }
+
+ getColIcon() {
+ return (
+ <div className="col-icon">
+ <FontAwesomeIcon icon={faObjectGroup} size="lg" />
+ </div>
+ );
+ }
+
@action.bound
openFilter = () => {
this._filterOpen = !this._filterOpen;
@@ -268,10 +309,9 @@ export class FilterBox extends React.Component {
//if true, any keywords can be used. if false, all keywords are required.
@action.bound
- handleWordQueryChange = () => { this._basicWordStatus = !this._basicWordStatus; }
-
- @action.bound
- getBasicWordStatus() { return this._basicWordStatus; }
+ handleWordQueryChange = () => {
+ this._basicWordStatus = !this._basicWordStatus;
+ }
@action.bound
updateIcon(newArray: string[]) { this._icons = newArray; }
@@ -290,16 +330,10 @@ export class FilterBox extends React.Component {
}
@action.bound
- toggleFieldOpen() { this._fieldOpen = !this._fieldOpen; }
-
- @action.bound
- toggleColOpen() { this._colOpen = !this._colOpen; }
-
- @action.bound
- toggleTypeOpen() { this._typeOpen = !this._typeOpen; }
+ updateAnyKeywordStatus(newStat: boolean) { this._anyKeywordStatus = newStat; }
@action.bound
- toggleWordStatusOpen() { this._wordStatusOpen = !this._wordStatusOpen; }
+ updateAllKeywordStatus(newStat: boolean) { this._allKeywordStatus = newStat; }
@action.bound
updateTitleStatus(newStat: boolean) { this._titleFieldStatus = newStat; }
@@ -319,6 +353,8 @@ export class FilterBox extends React.Component {
@action.bound
updateParentCollectionStatus(newStat: boolean) { this._collectionParentStatus = newStat; }
+ getAnyKeywordStatus() { return this._anyKeywordStatus; }
+ getAllKeywordStatus() { return this._allKeywordStatus; }
getCollectionStatus() { return this._collectionStatus; }
getSelfCollectionStatus() { return this._collectionSelfStatus; }
getParentCollectionStatus() { return this._collectionParentStatus; }
@@ -326,6 +362,31 @@ export class FilterBox extends React.Component {
getAuthorStatus() { return this._authorFieldStatus; }
getDataStatus() { return this._deletedDocsStatus; }
+ getActiveFilters() {
+ console.log(this._authorFieldStatus, this._titleFieldStatus, this._dataFieldStatus);
+ return (
+ <div className="active-filters">
+ {!this._basicWordStatus ? <div className="active-icon container">
+ <div className="active-icon icon">{this.getABCicon()}</div>
+ <div className="active-icon description">Required Words Applied</div>
+ </div> : undefined}
+ {!(this._icons.length === 9) ? <div className="active-icon container">
+ <div className="active-icon icon">{this.getTypeIcon()}</div>
+ <div className="active-icon description">Type Filters Applied</div>
+ </div> : undefined}
+ {!(this._authorFieldStatus && this._dataFieldStatus && this._titleFieldStatus) ?
+ <div className="active-icon container">
+ <div className="active-icon icon">{this.getKeyIcon()}</div>
+ <div className="active-icon description">Field Filters Applied</div>
+ </div> : undefined}
+ {this._collectionStatus ? <div className="active-icon container">
+ <div className="active-icon icon">{this.getColIcon()}</div>
+ <div className="active-icon description">Collection Filters Active</div>
+ </div> : undefined}
+ </div>
+ )
+ }
+
// Useful queries:
// Delegates of a document: {!join from=id to=proto_i}id:{protoId}
// Documents in a collection: {!join from=data_l to=id}id:{collectionProtoId} //id of collections prototype
@@ -334,11 +395,13 @@ export class FilterBox extends React.Component {
<div>
<div style={{ display: "flex", flexDirection: "row-reverse" }}>
<SearchBox />
+ {this.getActiveFilters()}
</div>
{this._filterOpen ? (
<div className="filter-form" onPointerDown={this.stopProp} id="filter-form" style={this._filterOpen ? { display: "flex" } : { display: "none" }}>
<div className="top-filter-header" style={{ display: "flex", width: "100%" }}>
<div id="header">Filter Search Results</div>
+ <div style={{ marginLeft: "auto" }}></div>
<div className="close-icon" onClick={this.closeFilter}>
<span className="line line-1"></span>
<span className="line line-2"></span></div>
@@ -347,33 +410,20 @@ export class FilterBox extends React.Component {
<div className="filter-div">
<div className="filter-header">
<div className='filter-title words'>Required words</div>
- <div style={{ marginLeft: "auto" }}><NaviconButton onClick={this.toggleWordStatusOpen} /></div>
</div>
<div className="filter-panel" >
- <ToggleBar handleChange={this.handleWordQueryChange} getStatus={this.getBasicWordStatus}
- originalStatus={this._basicWordStatus} optionOne={"Include Any Keywords"} optionTwo={"Include All Keywords"} />
+ <button className="all-filter" onClick={this.handleWordQueryChange}>Include All Keywords</button>
</div>
</div>
<div className="filter-div">
<div className="filter-header">
<div className="filter-title icon">Filter by type of node</div>
- <div style={{ marginLeft: "auto" }}><NaviconButton onClick={this.toggleTypeOpen} /></div>
</div>
<div className="filter-panel"><IconBar /></div>
</div>
<div className="filter-div">
<div className="filter-header">
- <div className='filter-title collection'>Search in current collections</div>
- <div style={{ marginLeft: "auto" }}><NaviconButton onClick={this.toggleColOpen} /></div>
- </div>
- <div className="filter-panel"><CollectionFilters
- updateCollectionStatus={this.updateCollectionStatus} updateParentCollectionStatus={this.updateParentCollectionStatus} updateSelfCollectionStatus={this.updateSelfCollectionStatus}
- collectionStatus={this._collectionStatus} collectionParentStatus={this._collectionParentStatus} collectionSelfStatus={this._collectionSelfStatus} /></div>
- </div>
- <div className="filter-div">
- <div className="filter-header">
<div className="filter-title field">Filter by Basic Keys</div>
- <div style={{ marginLeft: "auto" }}><NaviconButton onClick={this.toggleFieldOpen} /></div>
</div>
<div className="filter-panel"><FieldFilters
titleFieldStatus={this._titleFieldStatus} dataFieldStatus={this._deletedDocsStatus} authorFieldStatus={this._authorFieldStatus}
@@ -381,13 +431,12 @@ export class FilterBox extends React.Component {
</div>
</div>
<div className="filter-buttons" style={{ display: "flex", justifyContent: "space-around" }}>
- <button className="minimize-filter" onClick={this.minimizeAll}>Minimize All</button>
- <button className="advanced-filter" >Advanced Filters</button>
<button className="save-filter" >Save Filters</button>
<button className="reset-filter" onClick={this.resetFilters}>Reset Filters</button>
</div>
</div>
- ) : undefined}
+ ) :
+ undefined}
</div>
);
}
diff --git a/src/client/views/search/IconBar.scss b/src/client/views/search/IconBar.scss
index e384722ce..2555ad271 100644
--- a/src/client/views/search/IconBar.scss
+++ b/src/client/views/search/IconBar.scss
@@ -4,9 +4,8 @@
display: flex;
justify-content: space-evenly;
align-items: center;
- height: 40px;
+ height: 35px;
width: 100%;
flex-wrap: wrap;
margin-bottom: 10px;
-}
-
+} \ No newline at end of file
diff --git a/src/client/views/search/IconButton.scss b/src/client/views/search/IconButton.scss
index 94b294ba5..d1853177e 100644
--- a/src/client/views/search/IconButton.scss
+++ b/src/client/views/search/IconButton.scss
@@ -4,13 +4,15 @@
display: flex;
flex-direction: column;
align-items: center;
- width: 45px;
+ width: 30px;
height: 60px;
.type-icon {
- height: 45px;
- width: 45px;
+ height: 30px;
+ width: 30px;
color: $light-color;
+ // background-color: rgb(194, 194, 197);
+ background-color: gray;
border-radius: 50%;
display: flex;
justify-content: center;
@@ -22,8 +24,8 @@
font-size: 2em;
.fontawesome-icon {
- height: 24px;
- width: 24px;
+ height: 15px;
+ width: 15px
}
}
@@ -44,7 +46,7 @@
transform: scale(1.1);
background-color: $darker-alt-accent;
opacity: 1;
-
+
+.filter-description {
opacity: 1;
}
diff --git a/src/client/views/search/IconButton.tsx b/src/client/views/search/IconButton.tsx
index bfe2c7d0b..5d23f6eeb 100644
--- a/src/client/views/search/IconButton.tsx
+++ b/src/client/views/search/IconButton.tsx
@@ -13,6 +13,7 @@ import { IconBar } from './IconBar';
import { props } from 'bluebird';
import { FilterBox } from './FilterBox';
import { Search } from '../../../server/Search';
+import { gravity } from 'sharp';
library.add(faSearch);
library.add(faObjectGroup);
@@ -123,11 +124,11 @@ export class IconButton extends React.Component<IconButtonProps>{
selected = {
opacity: 1,
- backgroundColor: "#c2c2c5" //$alt-accent
+ backgroundColor: "rgb(128, 128, 128)"
};
notSelected = {
- opacity: 0.6,
+ opacity: 0.2,
};
hoverStyle = {
diff --git a/src/client/views/search/SearchBox.scss b/src/client/views/search/SearchBox.scss
index 109b88ac9..fcdc79220 100644
--- a/src/client/views/search/SearchBox.scss
+++ b/src/client/views/search/SearchBox.scss
@@ -45,6 +45,11 @@
top: 300px;
display: flex;
flex-direction: column;
+ margin-right: 72px;
+ // height: 560px;
+ height: 100%;
+ // overflow: hidden;
+ // overflow-y: auto;
max-height: 560px;
overflow: hidden;
overflow-y: auto;
diff --git a/src/client/views/search/SearchItem.tsx b/src/client/views/search/SearchItem.tsx
index 562594210..0390359b3 100644
--- a/src/client/views/search/SearchItem.tsx
+++ b/src/client/views/search/SearchItem.tsx
@@ -21,11 +21,18 @@ import { DocumentView } from "../nodes/DocumentView";
import { SearchBox } from "./SearchBox";
import "./SearchItem.scss";
import "./SelectorContextMenu.scss";
+import { RichTextField } from "../../../new_fields/RichTextField";
+import { FormattedTextBox } from "../nodes/FormattedTextBox";
+import { MarqueeView } from "../collections/collectionFreeForm/MarqueeView";
+import { SelectionManager } from "../../util/SelectionManager";
+import { ObjectField } from "../../../new_fields/ObjectField";
import { ContextMenu } from "../ContextMenu";
import { faFile } from '@fortawesome/free-solid-svg-icons';
+import { DocServer } from "../../DocServer";
export interface SearchItemProps {
doc: Doc;
+ query?: string;
highlighting: string[];
}
@@ -86,7 +93,7 @@ export class SelectorContextMenu extends React.Component<SearchItemProps> {
SetupDrag(item, () => doc.col, undefined, undefined, undefined, undefined, () => SearchBox.Instance.closeSearch())}>
<FontAwesomeIcon icon={faStickyNote} />
</div>
- <a className="title" onClick={this.getOnClick(doc)}>{doc.col.title}</a>
+ <a onClick={this.getOnClick(doc)}>{doc.col.title}</a>
</div>;
})}
</div>
@@ -94,27 +101,115 @@ export class SelectorContextMenu extends React.Component<SearchItemProps> {
}
}
+export interface LinkMenuProps {
+ doc1: Doc;
+ doc2: Doc;
+}
+
+@observer
+export class LinkContextMenu extends React.Component<LinkMenuProps> {
+
+ highlightDoc = (doc: Doc) => {
+ return () => {
+ doc.libraryBrush = true;
+ };
+ }
+
+ unHighlightDoc = (doc: Doc) => {
+ return () => {
+ doc.libraryBrush = false;
+ };
+ }
+
+ getOnClick(col: Doc) {
+ return () => {
+ CollectionDockingView.Instance.AddRightSplit(col, undefined);
+ };
+ }
+
+ render() {
+ return (
+ <div className="parents">
+ <p className="contexts">Anchors:</p>
+ <div className="collection"><a onMouseEnter={this.highlightDoc(this.props.doc1)} onMouseLeave={this.unHighlightDoc(this.props.doc1)} onClick={this.getOnClick(this.props.doc1)}>Doc 1: {this.props.doc2.title}</a></div>
+ <div><a onMouseEnter={this.highlightDoc(this.props.doc2)} onMouseLeave={this.unHighlightDoc(this.props.doc2)} onClick={this.getOnClick(this.props.doc2)}>Doc 2: {this.props.doc1.title}</a></div>
+ </div>
+ )
+ }
+
+}
+
@observer
export class SearchItem extends React.Component<SearchItemProps> {
@observable _selected: boolean = false;
+ private _previewDoc?: Doc;
onClick = () => {
// I dont think this is the best functionality because clicking the name of the collection does that. Change it back if you'd like
DocumentManager.Instance.jumpToDocument(this.props.doc, false);
+ if (this.props.doc.data instanceof RichTextField) {
+ this.highlightTextBox(this.props.doc);
+ }
// CollectionDockingView.Instance.AddRightSplit(this.props.doc, undefined);
}
@observable _useIcons = true;
@observable _displayDim = 50;
- @computed
- public get DocumentIcon() {
+ highlightTextBox = (doc: Doc) => {
+ if (this.props.query) {
+ const fieldkey = 'search_string';
+ if (Object.keys(doc).indexOf(fieldkey) === -1) {
+ doc.search_string = this.props.query;
+ }
+ else {
+ doc.search_string = undefined;
+ }
+
+ }
+ }
+
+ fitToBox = () => {
+ let bounds = Doc.ComputeContentBounds([this.props.doc]);
+ return [(bounds.x + bounds.r) / 2, (bounds.y + bounds.b) / 2, Number(SEARCH_THUMBNAIL_SIZE) / Math.max((bounds.b - bounds.y), (bounds.r - bounds.x)), this._displayDim];
+ }
+
+ componentWillUnmount() {
+ if (this._previewDoc) {
+ DocServer.DeleteDocument(this._previewDoc[Id]);
+ }
+ }
+
+
+ //@computed
+ @action
+ public DocumentIcon() {
+ let layoutresult = StrCast(this.props.doc.type);
if (!this._useIcons) {
+ let renderDoc = this.props.doc;
+ //let box: number[] = [];
+ if (layoutresult.indexOf(DocumentType.COL) !== -1) {
+ renderDoc = Doc.MakeDelegate(renderDoc);
+ let bounds = DocListCast(renderDoc.data).reduce((bounds, doc) => {
+ var [sptX, sptY] = [NumCast(doc.x), NumCast(doc.y)];
+ let [bptX, bptY] = [sptX + doc[WidthSym](), sptY + doc[HeightSym]()];
+ return {
+ x: Math.min(sptX, bounds.x), y: Math.min(sptY, bounds.y),
+ r: Math.max(bptX, bounds.r), b: Math.max(bptY, bounds.b)
+ };
+ }, { x: Number.MAX_VALUE, y: Number.MAX_VALUE, r: Number.MIN_VALUE, b: Number.MIN_VALUE });
+ let box = () => [(bounds.x + bounds.r) / 2, (bounds.y + bounds.b) / 2, Number(SEARCH_THUMBNAIL_SIZE) / (bounds.r - bounds.x), this._displayDim];
+ }
let returnXDimension = () => this._useIcons ? 50 : Number(SEARCH_THUMBNAIL_SIZE);
let returnYDimension = () => this._displayDim;
- let scale = () => returnXDimension() / NumCast(this.props.doc.nativeWidth, returnXDimension());
- return <div
- onPointerDown={action(() => { this._useIcons = !this._useIcons; this._displayDim = this._useIcons ? 50 : Number(SEARCH_THUMBNAIL_SIZE); })}
+ let scale = () => returnXDimension() / NumCast(renderDoc.nativeWidth, returnXDimension());
+ let newRenderDoc = Doc.MakeDelegate(renderDoc); /// newRenderDoc -> renderDoc -> render"data"Doc -> TextProt
+ this._previewDoc = newRenderDoc;
+ const docview = <div
+ onPointerDown={action(() => {
+ this._useIcons = !this._useIcons;
+ this._displayDim = this._useIcons ? 50 : Number(SEARCH_THUMBNAIL_SIZE);
+ })}
onPointerEnter={action(() => this._displayDim = this._useIcons ? 50 : Number(SEARCH_THUMBNAIL_SIZE))}
onPointerLeave={action(() => this._displayDim = 50)} >
<DocumentView
@@ -138,9 +233,15 @@ export class SearchItem extends React.Component<SearchItemProps> {
ContentScaling={scale}
/>
</div>;
+ const data = renderDoc.data;
+ if (data instanceof ObjectField) newRenderDoc.data = ObjectField.MakeCopy(data);
+ newRenderDoc.preview = true;
+ newRenderDoc.search_string = this.props.query;
+ return docview;
+ }
+ if (this._previewDoc) {
+ DocServer.DeleteDocument(this._previewDoc[Id]);
}
-
- let layoutresult = StrCast(this.props.doc.type);
let button = layoutresult.indexOf(DocumentType.PDF) !== -1 ? faFilePdf :
layoutresult.indexOf(DocumentType.IMG) !== -1 ? faImage :
layoutresult.indexOf(DocumentType.TEXT) !== -1 ? faStickyNote :
@@ -239,6 +340,8 @@ export class SearchItem extends React.Component<SearchItemProps> {
}
render() {
+ const doc1 = Cast(this.props.doc.anchor1, Doc);
+ const doc2 = Cast(this.props.doc.anchor2, Doc);
return (
<div className="search-overview" onPointerDown={this.pointerDown} onContextMenu={this.onContextMenu}>
<div className="search-item" onPointerEnter={this.highlightDoc} onPointerLeave={this.unHighlightDoc} id="result"
@@ -262,7 +365,8 @@ export class SearchItem extends React.Component<SearchItemProps> {
</div>
</div>
<div className="searchBox-instances">
- <SelectorContextMenu {...this.props} />
+ {(doc1 instanceof Doc && doc2 instanceof Doc) ? this.props.doc.type === DocumentType.LINK ? <LinkContextMenu doc1={doc1} doc2={doc2} /> :
+ <SelectorContextMenu {...this.props} /> : null}
</div>
</div>
);
diff --git a/src/client/views/search/SelectorContextMenu.scss b/src/client/views/search/SelectorContextMenu.scss
index 49f77b9bf..48cacc608 100644
--- a/src/client/views/search/SelectorContextMenu.scss
+++ b/src/client/views/search/SelectorContextMenu.scss
@@ -3,6 +3,7 @@
.parents {
background: $lighter-alt-accent;
padding: 10px;
+ // width: 300px;
.contexts {
text-transform: uppercase;
diff --git a/src/client/views/search/ToggleBar.scss b/src/client/views/search/ToggleBar.scss
index 633a194fe..79f866acb 100644
--- a/src/client/views/search/ToggleBar.scss
+++ b/src/client/views/search/ToggleBar.scss
@@ -16,11 +16,15 @@
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
+ color: gray;
+ font-size: 13;
}
}
.toggle-bar {
- height: 50px;
+ // height: 50px;
+ height: 30px;
+ width: 100px;
background-color: $alt-accent;
border-radius: 10px;
padding: 5px;
@@ -28,7 +32,8 @@
align-items: center;
.toggle-button {
- width: 275px;
+ // width: 275px;
+ width: 40px;
height: 100%;
border-radius: 10px;
background-color: $light-color;
diff --git a/src/client/views/search/ToggleBar.tsx b/src/client/views/search/ToggleBar.tsx
index 178578c5c..a30104089 100644
--- a/src/client/views/search/ToggleBar.tsx
+++ b/src/client/views/search/ToggleBar.tsx
@@ -59,6 +59,7 @@ export class ToggleBar extends React.Component<ToggleBarProps>{
this._forwardTimeline.play();
this._forwardTimeline.reverse();
this.props.handleChange();
+ console.log(this.props.getStatus())
}
@action.bound
diff --git a/src/debug/Viewer.tsx b/src/debug/Viewer.tsx
index 2b3eed154..24db3f934 100644
--- a/src/debug/Viewer.tsx
+++ b/src/debug/Viewer.tsx
@@ -10,6 +10,7 @@ import { List } from '../new_fields/List';
import { URLField } from '../new_fields/URLField';
import { EditableView } from '../client/views/EditableView';
import { CompileScript } from '../client/util/Scripting';
+import { RichTextField } from '../new_fields/RichTextField';
import { DateField } from '../new_fields/DateField';
import { ScriptField } from '../new_fields/ScriptField';
import CursorField from '../new_fields/CursorField';
@@ -126,6 +127,8 @@ class DebugViewer extends React.Component<{ field: FieldResult, setValue(value:
content = <p>"{field}"</p>;
} else if (typeof field === "number" || typeof field === "boolean") {
content = <p>{field}</p>;
+ } else if (field instanceof RichTextField) {
+ content = <p>RTF: {field.Data}</p>;
} else if (field instanceof URLField) {
content = <p>{field.url.href}</p>;
} else if (field instanceof Promise) {
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts
index 59314783b..84b8589dd 100644
--- a/src/new_fields/Doc.ts
+++ b/src/new_fields/Doc.ts
@@ -1,4 +1,4 @@
-import { observable, action } from "mobx";
+import { observable, action, runInAction } from "mobx";
import { serializable, primitive, map, alias, list, PropSchema, custom } from "serializr";
import { autoObject, SerializationHelper, Deserializable, afterDocDeserialize } from "../client/util/SerializationHelper";
import { DocServer } from "../client/DocServer";
@@ -197,8 +197,12 @@ export namespace Doc {
}
export function Get(doc: Doc, key: string, ignoreProto: boolean = false): FieldResult {
- const self = doc[Self];
- return getField(self, key, ignoreProto);
+ try {
+ const self = doc[Self];
+ return getField(self, key, ignoreProto);
+ } catch {
+ return doc;
+ }
}
export function GetT<T extends Field>(doc: Doc, key: string, ctor: ToConstructor<T>, ignoreProto: boolean = false): FieldResult<T> {
return Cast(Get(doc, key, ignoreProto), ctor) as FieldResult<T>;
@@ -462,6 +466,23 @@ export namespace Doc {
otherdoc.type = DocumentType.TEMPLATE;
return otherdoc;
}
+ export function ApplyTemplateTo(templateDoc: Doc, target: Doc, targetData?: Doc) {
+ let temp = Doc.MakeDelegate(templateDoc);
+ target.nativeWidth = Doc.GetProto(target).nativeWidth = undefined;
+ target.nativeHeight = Doc.GetProto(target).nativeHeight = undefined;
+ target.width = templateDoc.width;
+ target.height = templateDoc.height;
+ Doc.GetProto(target).type = DocumentType.TEMPLATE;
+ if (targetData && targetData.layout === target) {
+ targetData.layout = temp;
+ targetData.miniLayout = StrCast(templateDoc.miniLayout);
+ targetData.detailedLayout = targetData.layout;
+ } else {
+ target.layout = temp;
+ target.miniLayout = StrCast(templateDoc.miniLayout);
+ target.detailedLayout = target.layout;
+ }
+ }
export function MakeTemplate(fieldTemplate: Doc, metaKey: string, templateDataDoc: Doc) {
// move data doc fields to layout doc as needed (nativeWidth/nativeHeight, data, ??)
@@ -494,18 +515,29 @@ export namespace Doc {
setTimeout(() => fieldTemplate.proto = templateDataDoc);
}
- export async function ToggleDetailLayout(d: Doc) {
- let miniLayout = await PromiseValue(d.miniLayout);
- let detailLayout = await PromiseValue(d.detailedLayout);
- d.layout !== miniLayout ? miniLayout && (d.layout = d.miniLayout) : detailLayout && (d.layout = detailLayout);
- if (d.layout === detailLayout) Doc.GetProto(d).nativeWidth = Doc.GetProto(d).nativeHeight = undefined;
+ export function ToggleDetailLayout(d: Doc) {
+ runInAction(async () => {
+ let miniLayout = await PromiseValue(d.miniLayout);
+ let detailLayout = await PromiseValue(d.detailedLayout);
+ d.layout !== miniLayout ? miniLayout && (d.layout = d.miniLayout) : detailLayout && (d.layout = detailLayout);
+ if (d.layout === detailLayout) Doc.GetProto(d).nativeWidth = Doc.GetProto(d).nativeHeight = undefined;
+ });
}
- export async function UseDetailLayout(d: Doc) {
- let miniLayout = await PromiseValue(d.miniLayout);
- let detailLayout = await PromiseValue(d.detailedLayout);
- if (miniLayout && d.layout === miniLayout && detailLayout) {
- d.layout = detailLayout;
- d.nativeWidth = d.nativeHeight = undefined;
- }
+ export function UseDetailLayout(d: Doc) {
+ runInAction(async () => {
+ let detailLayout1 = await PromiseValue(d.detailedLayout);
+ let detailLayout = await PromiseValue(d.detailedLayout);
+ if (detailLayout) {
+ d.layout = detailLayout;
+ d.nativeWidth = d.nativeHeight = undefined;
+ if (detailLayout instanceof Doc) {
+ let delegDetailLayout = Doc.MakeDelegate(detailLayout) as Doc;
+ d.layout = delegDetailLayout;
+ let subDetailLayout1 = await PromiseValue(delegDetailLayout.detailedLayout);
+ let subDetailLayout = await PromiseValue(delegDetailLayout.detailedLayout);
+ delegDetailLayout.layout = subDetailLayout;
+ }
+ }
+ });
}
} \ No newline at end of file
diff --git a/src/new_fields/ObjectField.ts b/src/new_fields/ObjectField.ts
index 5f4a6f8fb..65ada91c0 100644
--- a/src/new_fields/ObjectField.ts
+++ b/src/new_fields/ObjectField.ts
@@ -1,6 +1,7 @@
import { Doc } from "./Doc";
import { RefField } from "./RefField";
import { OnUpdate, Parent, Copy, ToScriptString } from "./FieldSymbols";
+import { Scripting } from "../client/util/Scripting";
export abstract class ObjectField {
protected [OnUpdate](diff?: any) { }
@@ -15,3 +16,5 @@ export namespace ObjectField {
return field[Copy]();
}
}
+
+Scripting.addGlobal(ObjectField); \ No newline at end of file
diff --git a/src/new_fields/RichTextField.ts b/src/new_fields/RichTextField.ts
index 78a3a4067..89799b2af 100644
--- a/src/new_fields/RichTextField.ts
+++ b/src/new_fields/RichTextField.ts
@@ -20,6 +20,6 @@ export class RichTextField extends ObjectField {
}
[ToScriptString]() {
- return "invalid";
+ return `new RichTextField("${this.Data}")`;
}
} \ No newline at end of file
diff --git a/src/new_fields/SchemaHeaderField.ts b/src/new_fields/SchemaHeaderField.ts
index d5da56b10..23605cfb0 100644
--- a/src/new_fields/SchemaHeaderField.ts
+++ b/src/new_fields/SchemaHeaderField.ts
@@ -6,7 +6,7 @@ import { scriptingGlobal, Scripting } from "../client/util/Scripting";
import { ColumnType } from "../client/views/collections/CollectionSchemaView";
export const PastelSchemaPalette = new Map<string, string>([
- ["pink1", "#FFB4E8"],
+ // ["pink1", "#FFB4E8"],
["pink2", "#ff9cee"],
["pink3", "#ffccf9"],
["pink4", "#fcc2ff"],
@@ -15,7 +15,7 @@ export const PastelSchemaPalette = new Map<string, string>([
["purple2", "#c5a3ff"],
["purple3", "#d5aaff"],
["purple4", "#ecd4ff"],
- ["purple5", "#fb34ff"],
+ // ["purple5", "#fb34ff"],
["purple6", "#dcd3ff"],
["purple7", "#a79aff"],
["purple8", "#b5b9ff"],
@@ -25,17 +25,18 @@ export const PastelSchemaPalette = new Map<string, string>([
["bluegreen3", "#c4faf8"],
["bluegreen4", "#85e3ff"],
["bluegreen5", "#ace7ff"],
- ["bluegreen6", "#6eb5ff"],
+ // ["bluegreen6", "#6eb5ff"],
["bluegreen7", "#bffcc6"],
["bluegreen8", "#dbffd6"],
["yellow1", "#f3ffe3"],
["yellow2", "#e7ffac"],
["yellow3", "#ffffd1"],
["yellow4", "#fff5ba"],
- ["red1", "#ffc9de"],
+ // ["red1", "#ffc9de"],
["red2", "#ffabab"],
["red3", "#ffbebc"],
["red4", "#ffcbc1"],
+ ["orange1", "#ffd5b3"],
]);
export const RandomPastel = () => Array.from(PastelSchemaPalette.values())[Math.floor(Math.random() * PastelSchemaPalette.size)];
@@ -45,20 +46,23 @@ export const RandomPastel = () => Array.from(PastelSchemaPalette.values())[Math.
export class SchemaHeaderField extends ObjectField {
@serializable(primitive())
heading: string;
+ @serializable(primitive())
color: string;
+ @serializable(primitive())
type: number;
+ @serializable(primitive())
+ width: number;
+ @serializable(primitive())
+ desc: boolean | undefined; // boolean determines sort order, undefined when no sort
- constructor(heading: string = "", color?: string, type?: ColumnType) {
+ constructor(heading: string = "", color: string = RandomPastel(), type?: ColumnType, width?: number, desc?: boolean) {
super();
this.heading = heading;
- this.color = color === "" || color === undefined ? RandomPastel() : color;
- if (type) {
- this.type = type;
- }
- else {
- this.type = 0;
- }
+ this.color = color;
+ this.type = type ? type : 0;
+ this.width = width ? width : -1;
+ this.desc = desc;
}
setHeading(heading: string) {
@@ -76,6 +80,16 @@ export class SchemaHeaderField extends ObjectField {
this[OnUpdate]();
}
+ setWidth(width: number) {
+ this.width = width;
+ this[OnUpdate]();
+ }
+
+ setDesc(desc: boolean | undefined) {
+ this.desc = desc;
+ this[OnUpdate]();
+ }
+
[Copy]() {
return new SchemaHeaderField(this.heading, this.color, this.type);
}
diff --git a/src/new_fields/util.ts b/src/new_fields/util.ts
index b59ec9b9a..2ebfb9e71 100644
--- a/src/new_fields/util.ts
+++ b/src/new_fields/util.ts
@@ -88,6 +88,9 @@ export function setter(target: any, prop: string | symbol | number, value: any,
}
export function getter(target: any, prop: string | symbol | number, receiver: any): any {
+ if (prop === "then") {//If we're being awaited
+ return undefined;
+ }
if (typeof prop === "symbol") {
return target.__fields[prop] || target[prop];
}
diff --git a/src/scraping/buxton/scraper.py b/src/scraping/buxton/scraper.py
index 1ff0e3b31..f0f45d8f9 100644
--- a/src/scraping/buxton/scraper.py
+++ b/src/scraping/buxton/scraper.py
@@ -236,7 +236,7 @@ def parse_document(file_name: str):
view_guids.append(write_image(pure_name, image))
copyfile(dir_path + "/" + image, dir_path +
"/" + image.replace(".", "_o.", 1))
- os.rename(dir_path + "/" + image, dir_path +
+ copyfile(dir_path + "/" + image, dir_path +
"/" + image.replace(".", "_m.", 1))
print(f"extracted {count} images...")
diff --git a/src/server/authentication/models/current_user_utils.ts b/src/server/authentication/models/current_user_utils.ts
index 1c52a3f11..91d7ba87d 100644
--- a/src/server/authentication/models/current_user_utils.ts
+++ b/src/server/authentication/models/current_user_utils.ts
@@ -71,7 +71,7 @@ export class CurrentUserUtils {
doc.sidebar = sidebar;
}
StrCast(doc.title).indexOf("@") !== -1 && (doc.title = StrCast(doc.title).split("@")[0] + "'s Library");
-
+ doc.width = 100;
}
public static loadCurrentUser() {
diff --git a/src/server/database.ts b/src/server/database.ts
index 7f5331998..a7254fb0c 100644
--- a/src/server/database.ts
+++ b/src/server/database.ts
@@ -17,7 +17,7 @@ export class Database {
});
}
- public update(id: string, value: any, callback: () => void, upsert = true, collectionName = Database.DocumentsCollection) {
+ public update(id: string, value: any, callback: (err: mongodb.MongoError, res: mongodb.UpdateWriteOpResult) => void, upsert = true, collectionName = Database.DocumentsCollection) {
if (this.db) {
let collection = this.db.collection(collectionName);
const prom = this.currentWrites[id];
@@ -30,7 +30,7 @@ export class Database {
delete this.currentWrites[id];
}
resolve();
- callback();
+ callback(err, res);
});
});
};
@@ -41,6 +41,30 @@ export class Database {
}
}
+ public replace(id: string, value: any, callback: (err: mongodb.MongoError, res: mongodb.UpdateWriteOpResult) => void, upsert = true, collectionName = Database.DocumentsCollection) {
+ if (this.db) {
+ let collection = this.db.collection(collectionName);
+ const prom = this.currentWrites[id];
+ let newProm: Promise<void>;
+ const run = (): Promise<void> => {
+ return new Promise<void>(resolve => {
+ collection.replaceOne({ _id: id }, value, { upsert }
+ , (err, res) => {
+ if (this.currentWrites[id] === newProm) {
+ delete this.currentWrites[id];
+ }
+ resolve();
+ callback(err, res);
+ });
+ });
+ };
+ newProm = prom ? prom.then(run) : run();
+ this.currentWrites[id] = newProm;
+ } else {
+ this.onConnect.push(() => this.replace(id, value, callback, upsert, collectionName));
+ }
+ }
+
public delete(query: any, collectionName?: string): Promise<mongodb.DeleteWriteOpResultObject>;
public delete(id: string, collectionName?: string): Promise<mongodb.DeleteWriteOpResultObject>;
public delete(id: any, collectionName = Database.DocumentsCollection) {
@@ -126,6 +150,34 @@ export class Database {
}
}
+ public async visit(ids: string[], fn: (result: any) => string[], collectionName = "newDocuments"): Promise<void> {
+ if (this.db) {
+ const visited = new Set<string>();
+ while (ids.length) {
+ const count = Math.min(ids.length, 1000);
+ const index = ids.length - count;
+ const fetchIds = ids.splice(index, count).filter(id => !visited.has(id));
+ if (!fetchIds.length) {
+ continue;
+ }
+ const docs = await new Promise<{ [key: string]: any }[]>(res => Database.Instance.getDocuments(fetchIds, res, "newDocuments"));
+ for (const doc of docs) {
+ const id = doc.id;
+ visited.add(id);
+ ids.push(...fn(doc));
+ }
+ }
+
+ } else {
+ return new Promise(res => {
+ this.onConnect.push(() => {
+ this.visit(ids, fn, collectionName);
+ res();
+ });
+ });
+ }
+ }
+
public query(query: { [key: string]: any }, projection?: { [key: string]: 0 | 1 }, collectionName = "newDocuments"): Promise<mongodb.Cursor> {
if (this.db) {
let cursor = this.db.collection(collectionName).find(query);
diff --git a/src/server/index.ts b/src/server/index.ts
index 080b50ada..10a84c823 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -27,6 +27,7 @@ import { Client } from './Client';
import { Database } from './database';
import { MessageStore, Transferable, Types, Diff, YoutubeQueryTypes as YoutubeQueryType, YoutubeQueryInput } from "./Message";
import { RouteStore } from './RouteStore';
+import v4 = require('uuid/v4');
const app = express();
const config = require('../../webpack.config');
import { createCanvas, loadImage, Canvas } from "canvas";
@@ -39,11 +40,16 @@ import c = require("crypto");
import { Search } from './Search';
import { debug } from 'util';
import _ = require('lodash');
+import * as Archiver from 'archiver';
+import * as AdmZip from 'adm-zip';
import * as YoutubeApi from './youtubeApi/youtubeApiSample.js';
import { Response } from 'express-serve-static-core';
+import { DocComponent } from '../client/views/DocComponent';
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const probe = require("probe-image-size");
+var SolrNode = require('solr-node');
+var shell = require('shelljs');
const download = (url: string, dest: fs.PathLike) => request.get(url).pipe(fs.createWriteStream(dest));
let youtubeApiKey: string;
@@ -153,6 +159,7 @@ app.get("/version", (req, res) => {
});
// SEARCH
+const solrURL = "http://localhost:8983/solr/#/dash";
// GETTERS
@@ -180,6 +187,186 @@ function msToTime(duration: number) {
return hoursS + ":" + minutesS + ":" + secondsS + "." + milliseconds;
}
+async function getDocs(id: string) {
+ const files = new Set<string>();
+ const docs: { [id: string]: any } = {};
+ const fn = (doc: any): string[] => {
+ const id = doc.id;
+ if (typeof id === "string" && id.endsWith("Proto")) {
+ //Skip protos
+ return [];
+ }
+ const ids: string[] = [];
+ for (const key in doc.fields) {
+ if (!doc.fields.hasOwnProperty(key)) {
+ continue;
+ }
+ const field = doc.fields[key];
+ if (field === undefined || field === null) {
+ continue;
+ }
+
+ if (field.__type === "proxy" || field.__type === "prefetch_proxy") {
+ ids.push(field.fieldId);
+ } else if (field.__type === "script" || field.__type === "computed") {
+ if (field.captures) {
+ ids.push(field.captures.fieldId);
+ }
+ } else if (field.__type === "list") {
+ ids.push(...fn(field));
+ } else if (typeof field === "string") {
+ const re = /"(?:dataD|d)ocumentId"\s*:\s*"([\w\-]*)"/g;
+ let match: string[] | null;
+ while ((match = re.exec(field)) !== null) {
+ ids.push(match[1]);
+ }
+ } else if (field.__type === "RichTextField") {
+ const re = /"href"\s*:\s*"(.*?)"/g;
+ let match: string[] | null;
+ while ((match = re.exec(field.Data)) !== null) {
+ const urlString = match[1];
+ const split = new URL(urlString).pathname.split("doc/");
+ if (split.length > 1) {
+ ids.push(split[split.length - 1]);
+ }
+ }
+ const re2 = /"src"\s*:\s*"(.*?)"/g;
+ while ((match = re2.exec(field.Data)) !== null) {
+ const urlString = match[1];
+ const pathname = new URL(urlString).pathname;
+ files.add(pathname);
+ }
+ } else if (["audio", "image", "video", "pdf", "web"].includes(field.__type)) {
+ const url = new URL(field.url);
+ const pathname = url.pathname;
+ files.add(pathname);
+ }
+ }
+
+ if (doc.id) {
+ docs[doc.id] = doc;
+ }
+ return ids;
+ };
+ await Database.Instance.visit([id], fn);
+ return { id, docs, files };
+}
+app.get("/serializeDoc/:docId", async (req, res) => {
+ const { docs, files } = await getDocs(req.params.docId);
+ res.send({ docs, files: Array.from(files) });
+});
+
+app.get("/downloadId/:docId", async (req, res) => {
+ res.set('Content-disposition', `attachment;`);
+ res.set('Content-Type', "application/zip");
+ const { id, docs, files } = await getDocs(req.params.docId);
+ const docString = JSON.stringify({ id, docs });
+ const zip = Archiver('zip');
+ zip.pipe(res);
+ zip.append(docString, { name: "doc.json" });
+ files.forEach(val => {
+ zip.file(__dirname + RouteStore.public + val, { name: val.substring(1) });
+ });
+ zip.finalize();
+});
+
+app.post("/uploadDoc", (req, res) => {
+ let form = new formidable.IncomingForm();
+ form.keepExtensions = true;
+ // let path = req.body.path;
+ const ids: { [id: string]: string } = {};
+ let remap = true;
+ const getId = (id: string): string => {
+ if (!remap) return id;
+ if (id.endsWith("Proto")) return id;
+ if (id in ids) {
+ return ids[id];
+ } else {
+ return ids[id] = v4();
+ }
+ };
+ const mapFn = (doc: any) => {
+ if (doc.id) {
+ doc.id = getId(doc.id);
+ }
+ for (const key in doc.fields) {
+ if (!doc.fields.hasOwnProperty(key)) {
+ continue;
+ }
+ const field = doc.fields[key];
+ if (field === undefined || field === null) {
+ continue;
+ }
+
+ if (field.__type === "proxy" || field.__type === "prefetch_proxy") {
+ field.fieldId = getId(field.fieldId);
+ } else if (field.__type === "script" || field.__type === "computed") {
+ if (field.captures) {
+ field.captures.fieldId = getId(field.captures.fieldId);
+ }
+ } else if (field.__type === "list") {
+ mapFn(field);
+ } else if (typeof field === "string") {
+ const re = /("(?:dataD|d)ocumentId"\s*:\s*")([\w\-]*)"/g;
+ doc.fields[key] = (field as any).replace(re, (match: any, p1: string, p2: string) => {
+ return `${p1}${getId(p2)}"`;
+ });
+ } else if (field.__type === "RichTextField") {
+ const re = /("href"\s*:\s*")(.*?)"/g;
+ field.Data = field.Data.replace(re, (match: any, p1: string, p2: string) => {
+ return `${p1}${getId(p2)}"`;
+ });
+ }
+ }
+ };
+ form.parse(req, async (err, fields, files) => {
+ remap = fields.remap !== "false";
+ let id: string = "";
+ try {
+ for (const name in files) {
+ const path_2 = files[name].path;
+ const zip = new AdmZip(path_2);
+ zip.getEntries().forEach(entry => {
+ if (!entry.entryName.startsWith("files/")) return;
+ let dirname = path.dirname(entry.entryName) + "/";
+ let extname = path.extname(entry.entryName);
+ let basename = path.basename(entry.entryName).split(".")[0];
+ // zip.extractEntryTo(dirname + basename + "_o" + extname, __dirname + RouteStore.public, true, false);
+ // zip.extractEntryTo(dirname + basename + "_s" + extname, __dirname + RouteStore.public, true, false);
+ // zip.extractEntryTo(dirname + basename + "_m" + extname, __dirname + RouteStore.public, true, false);
+ // zip.extractEntryTo(dirname + basename + "_l" + extname, __dirname + RouteStore.public, true, false);
+ zip.extractEntryTo(entry.entryName, __dirname + RouteStore.public, true, false);
+ dirname = "/" + dirname;
+
+ fs.createReadStream(__dirname + RouteStore.public + dirname + basename + extname).pipe(fs.createWriteStream(__dirname + RouteStore.public + dirname + basename + "_o" + extname));
+ fs.createReadStream(__dirname + RouteStore.public + dirname + basename + extname).pipe(fs.createWriteStream(__dirname + RouteStore.public + dirname + basename + "_s" + extname));
+ fs.createReadStream(__dirname + RouteStore.public + dirname + basename + extname).pipe(fs.createWriteStream(__dirname + RouteStore.public + dirname + basename + "_m" + extname));
+ fs.createReadStream(__dirname + RouteStore.public + dirname + basename + extname).pipe(fs.createWriteStream(__dirname + RouteStore.public + dirname + basename + "_l" + extname));
+ });
+ const json = zip.getEntry("doc.json");
+ let docs: any;
+ try {
+ let data = JSON.parse(json.getData().toString("utf8"));
+ docs = data.docs;
+ id = data.id;
+ docs = Object.keys(docs).map(key => docs[key]);
+ docs.forEach(mapFn);
+ await Promise.all(docs.map((doc: any) => new Promise(res => Database.Instance.replace(doc.id, doc, (err, r) => {
+ err && console.log(err);
+ res();
+ }, true, "newDocuments"))));
+ } catch (e) { console.log(e); }
+ fs.unlink(path_2, () => { });
+ }
+ if (id) {
+ res.send(JSON.stringify(getId(id)));
+ } else {
+ res.send(JSON.stringify("error"));
+ }
+ } catch (e) { console.log(e); }
+ });
+});
+
app.get("/whosOnline", (req, res) => {
let users: any = { active: {}, inactive: {} };
const now = Date.now();
diff --git a/src/server/remapUrl.ts b/src/server/remapUrl.ts
index 6f4d6642f..69c766d56 100644
--- a/src/server/remapUrl.ts
+++ b/src/server/remapUrl.ts
@@ -6,7 +6,8 @@ const suffixMap: { [type: string]: true } = {
"video": true,
"pdf": true,
"audio": true,
- "web": true
+ "web": true,
+ "image": true
};
async function update() {
@@ -30,10 +31,10 @@ async function update() {
const value = fields[key];
if (value && value.__type && suffixMap[value.__type]) {
const url = new URL(value.url);
- if (url.href.includes("azure")) {
+ if (url.href.includes("localhost") && url.href.includes("Bill")) {
dynfield = true;
- update.$set = { ["fields." + key + ".url"]: `${url.protocol}//localhost:1050${url.pathname}` };
+ update.$set = { ["fields." + key + ".url"]: `${url.protocol}//dash-web.eastus2.cloudapp.azure.com:1050${url.pathname}` };
}
}
}